star-gs

Literate program for a geometric sensitivity calculation
git clone git://git.meso-star.fr/star-gs.git
Log | Files | Refs | README | LICENSE

commit e641202cb8bf5d404a1c84e91f07b3a0dfd59014
parent 86ee68fc6f12eee49b2bb7b39ca69389e23d7206
Author: Paule Lapeyre <paule.lapeyre@yahoo.fr>
Date:   Wed, 16 Nov 2022 17:00:47 +0100

Poursuit l'écriture du calcul des poids

Nous avons ici retravaillé les étapes amonts au calcul des poids, dont
notamment le calcul de la dérivée en surface de rho.

Au cours de ce retravail a été mené une réflexion sur le bien-fondé de
dupliquer dans les commentaires C ce qui est porté par le nom des bloc
de code noweb. Le C n'étant qu'un résultat intermédiaire issu de la
compilation des sources noweb, nous avons conclu de l'inutilité de ce
type de commentaire. Le code que nous travaillons n'est pas écrit en C
mais en noweb. Par conséquent, le C issu de la compilation n'a pas la
vocation première d'être lu et encore moins d'être modifié directement.

Diffstat:
Msrc/sgs_compute_sensitivity_translation.nw | 67+++++++++++++++++++++++++++++++++++++++++++------------------------
1 file changed, 43 insertions(+), 24 deletions(-)

diff --git a/src/sgs_compute_sensitivity_translation.nw b/src/sgs_compute_sensitivity_translation.nw @@ -502,7 +502,7 @@ des sources de chacun de ses couplages. <<calculer les poids>>= <<décomposition du vecteur de déformation $\vec{\chi}$>> - <<calcul du gradient surfacique de $\rho$>> + <<calcul de la dérivée surfacique de $\rho$>> <<calcul des source de dérivées spatiales>> sensib = <<calculer le poids de sensibilité>> @@ -510,6 +510,48 @@ des sources de chacun de ses couplages. @ \paragraph{} +La décomposition du vecteur de déformation $\vec{\chi}$ permet d'obtenir le +vecteur tangent $\vec{u}$ nécessaire dans l'expression de la source de +sensibilité et de ses dérivée surfaciques (équation \ref{eq:clsensib}). + +<<décomposition du vecteur de déformation $\vec{\chi}$>>= + decomposition(chi, normal_s, dir_emit_s, &proj_chi_s); +@ + +\paragraph{} +Étant donné que le coefficient de réflection n'est défini qu'en frontière, à +savoir sur un plan en deux dimensions, calculer la dérivée surfacique de $\rho$ +revient à travailler dans le plan. La dérivée surfacique de $\rho$ est le +produit scalaire entre le gradient surfacique de $\rho$ et la direction de +dérivation $\vec{u}$ transformée dans ce plan ([[u_2d]]). + +<<calcul de la dérivée surfacique de $\rho$>>= + <<récupérer le gradient surfacique de $\rho$>> + + /* Transform u in XY plane */ + u_2d[0] = proj_chi_s.u[X]; + u_2d[1] = proj_chi_s.u[Y]; + + /* Surface derivative of rho */ + drho = d2_dot(grad_rho_2d, u_2d); +@ + +\paragraph{} +Pour récupérer $\rho$ et son gradient, il suffit de transformer dans le plan la +position d'émission [[pos_emit_s]], et d'interroger les données associées à la +position ainsi transformée ([[pos_emit_s_2d]]). + +<<récupérer le gradient surfacique de $\rho$>>= + + /* Transform pos_emit_s in XY plane */ + pos_emit_s_2d[0] = pos_emit_s[X]; + pos_emit_s_2d[1] = pos_emit_s[Y]; + + rho = get_rho(scn, pos_emit_s_2d); + get_grad_rho(scn, pos_emit_s_2d, grad_rho_2d); +@ + +\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 @@ -522,29 +564,6 @@ $\vec{\chi}$ et $\vec{u}$) dont les sources sont données par les équations <<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); -@ - -\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; -@ - <<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);