commit 6398ff0d9ec8aa23cf8cf104d36f9b60945d1919
parent 72a6d923727ee7ca79a37870773e597fee9d1c88
Author: Paule Lapeyre <paule.lapeyre@yahoo.fr>
Date: Wed, 9 Nov 2022 16:38:58 +0100
Poursuite de l'écriture du calcul des poids
Dans cette validation nous avons complètement retravaillé comment nous
amenions le calcul des poids. Nous commençons désormais par traiter les
chemins dont la contribution est nulle. Nous pouvons dès lors consacrer
le reste de la section sur le calcul des poids des seuls chemins qui
comptent. Pour cela nous énonçons par un bloc lettré la procédure que
nous allons suivre, un bloc lettré en guise de plan pour le reste de la
section.
Diffstat:
2 files changed, 104 insertions(+), 44 deletions(-)
diff --git a/src/sgs_compute_sensitivity_translation.c b/src/sgs_compute_sensitivity_translation.c
@@ -328,12 +328,6 @@ realisation
- rho * proj_V_s.beta * proj_u_e.beta * d3_dot(grad_I, proj_u_e.u)
+ rho * proj_V_e.beta * d3_dot(grad_I, proj_V_e.u);
- /* A retravailler
- S =
- - beta * d3_dot(grad_rho, u) * I
- - rho * beta * beta_u * d3_dot(grad_I, u_e)
- + rho * beta_X * d3_dot(grad_I, u_ce); */
-
w = I*scn.emit_s_sz[X]*scn.emit_s_sz[Y]*PI; /* Weight */
s = S*scn.emit_s_sz[X]*scn.emit_s_sz[Y]*PI; /* Sensib */
diff --git a/src/sgs_compute_sensitivity_translation.nw b/src/sgs_compute_sensitivity_translation.nw
@@ -362,7 +362,7 @@ realisation
res_T res = RES_OK;
<<échantilloner un chemin du problème couplé>>
- <<calculer le poids du chemin>>
+ <<calculer les poids>>
exit:
return res;
@@ -466,52 +466,88 @@ dans [[hit1]].
\label{subsec:poids}
\paragraph{}
+On rappelle que dans cet exemple un chemin du problème couplé est composé d'un
+chemin de sensibilité et d'un chemin de dérivée spatiale, chacun d'entre eux se
+résumant à un segment dont l'origine commune se situe sur la paroi du haut. Le
+chemin couplé a une contribution \emph{nulle} si le chemin de sensibilité
+n'atteint pas le récepteur ou si le chemin de dérivé spatiale n'atteint pas la
+source radiative, à savoir la paroi de droite.
+
+<<échantillonner un chemin de sensibilité>>=
+ if(!hit_receiver(&scn, pos_emit_s, dir_emit_s, &hit0)) {
+ weight = 0;
+ sensib = 0;
+ goto exit;
+ }
+@
+
+<<échantillonner un chemin de dérivée spatiale>>=
+ if(!hit_source(&scn, pos_emit_s, dir_spec_s, &hit1)) {
+ weight = 0;
+ sensib = 0;
+ goto exit;
+ }
+@
+
+\paragraph{}
+En conséquence, dans la suite de la fonction, nous pouvons assumer que nous
+n'aurons à calculer le poids que des seuls chemin couplés dont la contribution
+est non nulle.
+
+\paragraph{}
Dans le problème couplé la contribution du chemin (poids MC) va s'exprimer à
travers la condition à la limite de sensibilité (équation \ref{eq:clsensib}) et
-des sources de chacun de ses couplages. Dans notre cas, la sensibilité est
-couplée à deux dérivées spatiales (selon $\vec{\chi}$ et $\vec{u}$) dont les
-sources sont données par les équations \ref{eq:cl_duL_haut},
-\ref{eq:cl_duL_droite}, \ref{eq:cl_dchiL_haut} et \ref{eq:cl_dchiL_droite}. La
-direction $\vec{u}$ est donnée par la décomposition de $\vec{\chi}$ selon la
-normale de la source de sensibilité (ici la normale de la paroi du haut stockée
-dans la variable [[normal_s]]) et selon la direction de propagation
-$\vec{\omega}$ ([[dir_emit_s]]).
+des sources de chacun de ses couplages.
-<<???>>=
- decomposition(chi, normal_s, dir_emit_s, &beta, u);
+<<calculer les poids>>=
+ <<décomposition du vecteur de déformation $\vec{\chi}$>>
+
+ <<calcul du gradient surfacique de $\rho$>>
+ <<calcul des source de dérivées spatiales>>
+
+ sensib = <<calculer le poids de sensibilité>>
+ weight = <<calculer le poids de la luminance>>
@
-<<decomposition>>=
-static void
-decomposition
- (const double chi[3],
- const double normal[3],
- const double omega[3],
- double* beta,
- double u[3])
-{
- double alpha;
- ASSERT(chi && normal && omega && beta && u);
- ASSERT(d3_is_normalized(normal));
- ASSERT(d3_is_normalized(omega));
+\paragraph{}
+Dans notre cas, la sensibilité est couplée à deux dérivées spatiales (selon
+$\vec{\chi}$ et $\vec{u}$) dont les sources sont données par les équations
+\ref{eq:cl_duL_haut}, \ref{eq:cl_duL_droite}, \ref{eq:cl_dchiL_haut} et
+\ref{eq:cl_dchiL_droite}.
- alpha = d3_dot(chi, normal) / d3_dot(omega, normal);
- u[X] = chi[X] - alpha*omega[X];
- u[Y] = chi[Y] - alpha*omega[Y];
- u[Z] = chi[Z] - alpha*omega[Z];
- *beta = d3_normalize(u, u);
-}
+<<calcul des sources de dérivées spatiales>>=
+ <<décomposition du vecteur $\vec{\chi}$>>
+ <<décomposition du vecteur $\vec{u}$>>
+ <<calcul du gradient surfacique de $Sb$ dans la direction [[proj_u_e.u]]>>
+ <<calcul du gradient surfacique de $Sb$ dans la direction [[proj_chi_e.u]]>>
+@
+
+<<décomposition du vecteur de déformation $\vec{\chi}$>>=
+ decomposition(chi, normal_s, dir_emit_s, &proj_chi_s);
@
-Que ce soit pour la sensibilité (dont la déformation est donnée par
-$\vec{\chi}$) ou pour les dérivée spatiales (dans les directions $\vec{\chi}$ et
-$\vec{u}$), plusieurs étapes de décomposition de $\vec{\chi}$ et de $\vec{u}$
-sont nécessaire pour déterminer $\beta$, $\vec{u}$ (concernant la source de
-sensibilité) et $\beta_{\chi}$, $\vec{u}_{ce}$, $\vec{u}_{cs}$ (pour la dérivée
-spatiale selon $\chi$) $\beta_u$, $\vec{u}_e$, $\vec{u}_s$ (pour la dérivée
-spatiale selon $\vec{u}$.
+\paragraph{}
+Étant donné que le coefficient de réflection n'est défini qu'en frontière, à
+savoir sur un plan en deux dimensions, on transforme dans ce plan 2D la
+position d'origine des chemins (([[pos_emit_s]], cf
+section~\ref{subsec:chemin}) pour nous permettre de déterminer la valeur de
+$\rho$ et de son gradient 2D. Compte tenu de notre géométrie, la construction
+du gradient 3D de $\rho$ nécessitera simplement de rajouter une composante
+nulle au gradient 2D ainsi calculé.
+
+<<calcul du gradient surfacique de $\rho$>>=
+ pos_emit_s_2d[X] = pos_emit_s[X];
+ pos_emit_s_2d[Y] = pos_emit_s[Y];
+ rho = get_rho(scn, pos_emit_s_2d);
+ get_grad_rho(scn, pos_emit_s_2d, grad_rho_2d);
+ grad_rho[X] = grad_rho_2d[X];
+ grad_rho[Y] = grad_rho_2d[Y];
+ grad_rho[Z] = 0;
+@
-<<calcul du poids>>=
+<<calculer le poids>>=
+ decomposition(chi, normal_e, dir_spec_e, &proj_chi_e);
+ decomposition(proj_chi_s.u, normal_e, dir_spec_e, &proj_u_e);
@
\subsection{Optimisation \& co}
@@ -783,6 +819,36 @@ L(\vec{x},\vec{\omega}_{spec},\PI) \\
\end{equation}
-------------------------------- FIN ANNEXE 1 ------------------------------------ \\
+-------------------------------- DÉBUT ANNEXE 2 --------------------------------- \\
+
+<<decomposition>>=
+struct projection {
+ double alpha;
+ double beta;
+ double u[3];
+};
+
+static void
+decomposition
+ (const double chi[3],
+ const double normal[3],
+ const double omega[3],
+ struct projection* projection)
+{
+ ASSERT(chi && normal && omega && projection);
+ ASSERT(d3_is_normalized(normal));
+ ASSERT(d3_is_normalized(omega));
+
+ projection->alpha = d3_dot(chi, normal) / d3_dot(omega, normal);
+ projection->u[X] = chi[X] - projection->alpha*omega[X];
+ projection->u[Y] = chi[Y] - projection->alpha*omega[Y];
+ projection->u[Z] = chi[Z] - projection->alpha*omega[Z];
+ projection->beta = d3_normalize(projection->u, projection->u);
+}
+@
+
+-------------------------------- FIN ANNEXE 2 ------------------------------------ \\
+
<<copyright>>=
/* Copyright (C) 2021, 2022 Centre National de la Recherche Scientifique
* Copyright (C) 2021, 2022 Institut Mines Télécom Albi-Carmaux