commit 7aa7f1bcfb24462fbeb864415ec6b4ef5c9184fe
parent 54bd35dd606cde6b2e44866c75b5fe4a66d864bc
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Wed, 12 Apr 2023 16:22:36 +0200
Relecture complète des sources noweb
Dans cette validation sont corrigées quelques fautes d'orthographes.
Des tournures de phrases ont également été modifiées à la marge ainsi
que quelques règles d'éditions : les paragraphe sans titre sont
entièrement supprimés et remplacés par des alinéas. Enfin, les
commentaires de code qui restaient en anglais ont été traduits en
français
Diffstat:
1 file changed, 121 insertions(+), 129 deletions(-)
diff --git a/src/sgs_compute_sensitivity_translation.nw b/src/sgs_compute_sensitivity_translation.nw
@@ -58,7 +58,7 @@
Ce document est un exercice dans lequel on choisit de décrire un exemple de
sensibilité sans aucune ambition de généralité en se concentrant sur une
-configuration simplifiée. Contrairement à une pratique Monte-Carlo plus
+configuration simplifiée. Contrairement à une pratique Monte Carlo plus
conventionnelle, nous aurons à vu l'entièreté des données qui décrivent le
systèmes à savoir sa configuration géométriques et ses propriétés physiques.
Dit autrement, nous saurons à chaque instant où les chemins se situent et ainsi
@@ -67,7 +67,7 @@ aux parois de notre scène (ex: paroi de droite, surface émettrice, {\etc}).
Par cette démarche nous proposons de construire un algorithme de sensibilité de
manière analogue comme nous savons le faire en transfert radiatif
-(\textbf{NOTE} insister sur l'héritage Monte-Carlo en transfert radiatif ici
+(\textbf{NOTE} insister sur l'héritage Monte Carlo en transfert radiatif ici
reprit à l'identique pour une formulation analogue grace au modèle de
sensibilité). Le principe consiste à identifier les sources du problèmes et de
les propager jusqu'au récepteur en fonction des propriétés physiques et
@@ -225,13 +225,13 @@ nous avons besoin de connaître la sensibilité géométrique $\partial_{\PI}
L(\vec{x},\vec{\omega},\PI)$, dans toutes les directions entrantes et en tout
point du récepteur.
-Pour évaluer cette sensibilité nous commençons par donner le modèle physique
-qui décrit les sources et le transport de la sensibilité géométrique
-(section~\ref{sec:modele_sensib}). Nous développons alors un algorithme
-Monte-Carlo pour résoudre le problème que nous venons de poser en suivant la
-propagation des sources de sensibilité via l'échantillonnage de chemins qui
-partent directement de ces sources, en l'occurrence ici la seule paroi du haut
-(section~\ref{sec:monte_carlo}).
+La suite du document se concentre sur l'évaluation de cette sensibilité en
+commençant par énnoncer le modèle physique qui décrit les sources et le
+transport de la sensibilité géométrique (section~\ref{sec:modele_sensib}).
+Nous développons alors un algorithme Monte Carlo pour résoudre le problème que
+nous venons de poser en suivant la propagation des sources de sensibilité via
+l'échantillonnage de chemins qui partent directement de ces sources, en
+l'occurrence ici la seule paroi du haut (section~\ref{sec:monte_carlo}).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Le modèle de sensibilité
@@ -277,9 +277,9 @@ la paroi dans la direction spéculaire. Dans notre exemple, le milieu est
transparent et toutes les autres conditions aux limites de sensibilité sont
nulles. On se contente donc d'ignorer la sensibilité incidente à la paroi. On
rappelle par ailleurs que la paroi du haut est spéculaire. La source de
-sensibilité $S_{b,\PI}$ est donc définie comme ci-dessous. On renvoit le lecteur
-à l'annexe \ref{ann:cl_sensib} pour les développements qui mènent à cette
-expression:
+sensibilité $S_{b,\PI}$ est donc définie comme ci-dessous en renvoyant le
+lecteur à l'annexe \ref{ann:cl_sensib} pour les développements qui mènent à
+cette expression:
\begin{equation}
\begin{aligned}
S_{b,\PI} = & - \beta_{\vec{\chi},h} [\partial_{1,\vec{u}_h} \
@@ -319,9 +319,9 @@ la limite de sensibilité dépend de:
\end{itemize}
En résumé, la source de sensibilité émise par la paroi spéculaire est le
résultat du couplage entre le modèle de sensibilité, le modèle de transfert
-radiatif et le modèle de dérivée spatiale. La dérivées spatiale et angulaire
+radiatif et le modèle de dérivée spatiale. La dérivée spatiale et angulaire
de la luminance sont simplement considérées comme des quantités physiques, au
-même titre que la sensibilité géométrique (voir~\cite{papier_sensib}) pour la
+même titre que la sensibilité géométrique (voir~\cite{papier_sensib} pour la
description de leur modèle). Résoudre notre problème de sensibilité géométrique
revient donc à résoudre un problème de transport couplé qui dépend à la fois
des source radiatives (à travers $L(\vec{x},\vec{\omega}_{spec},\PI)$), des
@@ -359,7 +359,7 @@ et la source de la paroi de droite est donnée par la condition à la limite:
\end{equation}
Pour la dérivée spatiale dans la direction $\vec{\chi}$, la source de la paroi
-du haut est donnée par la condition à la limite :
+du haut est donnée par la condition à la limite:
\begin{equation}
\partial_{1,\vec{\chi}} L(\vec{x},\vec{\omega},\PI) = \beta_{\vec{\chi},h} [
\partial_{1,\vec{u}_h} \rho(\vec{x},-\vec{\omega}) ]
@@ -378,7 +378,7 @@ et la source de la paroi de droite est donnée par la condition à la limite:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Algorithme Direct
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\section{Résolution par Monte-Carlo}
+\section{Résolution par Monte Carlo}
\label{sec:monte_carlo}
Dans cette section nous écrivons un algorithme de Monte Carlo pour résoudre le
@@ -443,8 +443,8 @@ un chemin du problème couplé.
@
Comme point de départ du chemin du problème couplé, on commence donc par
-échantillonner uniformément une point sur la surface émettrice de sensibilité à
-l'aide de la fonction [[sgs_geometry_sample_sensibility_source]] et on stocke
+échantillonner uniformément un point sur la surface émettrice de sensibilité à
+l'aide de la fonction [[sgs_geometry_sample_sensitivity_source]], et on stocke
dans les variables [[pos_h]] et [[normal_h]] sa position et la normale
correspondante. On récupère également dans [[surf_A_h]] l'identifiant de la
surface que l'on vient d'échantillonner, dans notre cas la surface supérieure
@@ -452,11 +452,11 @@ $A_h$ identifié dans le code par la constante [[SGS_SURFACE_Z_MAX]] (voir
figure~\ref{fig:configuration}).
<<échantillonner une position sur la source de sensibilité>>=
-/* Sample the sensitivity emissive surface */
+/* Échantillonner uniformément une position sur la source de sensibilité */
sgs_geometry_sample_sensitivity_source(scene->geom, rng, &frag);
d3_set(pos_h, frag.position);
d3_set(normal_h, frag.normal);
-surf_A_h = frag.surface; /* must be SGS_SURFACE_Z_MAX */
+surf_A_h = frag.surface; /* surf_A_h == SGS_SURFACE_Z_MAX */
@
On rappelle que les sources de sensibilité proviennent des parois perturbées
@@ -468,13 +468,13 @@ sensibilités réfléchies. Nous n'échantillons donc que le seul chemin qui
propage l'émission de sensibilité par $A_h$. Ce chemin sera notre chemin de
sensibilité. Pour cela, il suffit d'échantillonner une direction d'émission
lambertienne [[dir_emit_h]] autour de la normale [[normal_h]] de la surface
-$A_h$ et de lancer un rayon dans cette direction. Nous stockons dans [[hit0]],
-l'intersection de ce rayon avec la géométrie.
+$A_h$, et de lancer un rayon dans cette direction. Nous stockons alors dans
+[[hit0]] l'intersection de ce rayon avec la géométrie de la scène.
<<échantillonner un chemin de sensibilité>>=
-/* Sample the cosine weighted sampling of the emissive direction */
+/* Échantillonner une direction d'émission de sensibilité */
ssp_ran_hemisphere_cos(rng, normal_h, dir_emit_h, NULL);
-/* Trace the sampled ray */
+/* Lancer le rayon qui propage l'émission de sensibilité */
TRACE_RAY(pos_h, dir_emit_h, surf_A_h, &hit0);
@
@@ -552,7 +552,7 @@ Carlo, va s'exprimer à travers la condition à la limite de sensibilité
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}).
+sensibilité et de ses dérivées surfaciques (équation \ref{eq:clsensib}).
<<décomposition du vecteur de déformation $\vec{\chi}$>>=
decomposition(chi, normal_h, dir_emit_h, &proj_chi_h);
@@ -636,7 +636,7 @@ pos_d[X] = pos_h[X] + dir_spec_h[X]*hit1.distance;
pos_d[Y] = pos_h[Y] + dir_spec_h[Y]*hit1.distance;
pos_d[Z] = pos_h[Z] + dir_spec_h[Z]*hit1.distance;
-/* Transforme pos_d dans le plan YZ */
+/* Transformer pos_d dans le plan YZ */
pos_d_2d[0] = pos_d[Y];
pos_d_2d[1] = pos_d[Z];
@@ -699,7 +699,7 @@ de la direction du rayon, cette fonction nécessite en entrée une plage des
distances d'intersection possible ([[range]]), dans notre cas toujours définie
à $[0, \infty]$. À noter également le paramètre d'entrée [[StartFrom]] qui
stocke le triangle sur lequel se trouve l'origine du rayon, une donnée d'entrée
-utilisé pour éviter une auto-intersection, c'est à dire l'intersection du
+utilisée pour éviter une auto-intersection, c'est à dire l'intersection du
rayon avec le triangle dont il est issu.
<<données locales à la fonction de réalisation>>=
@@ -864,6 +864,7 @@ p_{\Omega'}(-\vec{\omega}'|\vec{x},-\vec{\omega})d\vec{\omega}' L \\
& + 2 \mu \partial_{2,\vec{\gamma}_t} L(\vec{x},\vec{\omega}_{spec},\PI)
\end{aligned}
\end{equation}
+
Dans cette équation $\mathcal{C}$ est l'opérateur collisionnel du milieu décrit
dans l'équation \ref{eq:C_operator}, il est ici appliqué à la luminance. La
source $S$ est la source radiative du milieu. On trouve également
@@ -887,13 +888,12 @@ spéculaire.
Dans notre exemple le milieu est transparent, les termes $\mathcal{C}[L]$ et
$S$ sont donc nuls. La paroi spéculaire est froide, la source surfacique $S_b$
-qui dans cet exemple correspondrait à l'émission thermique de la paroi est
-donc aussi nulle.
-L'opérateur collisionnel de la surface $\mathcal{C}_b$ est indépendant de
-$\PI$, la dérivée $\partial_{\PI} \mathcal{C}_b$ est donc nulle. Pour finir la
-déformation géométrique de la paroi spéculaire est une translation, l'axe de
-rotation $\vec{\gamma}$ est donc nul et toutes les dérivées angulaires n'ont
-plus lieux d'être dans la condition aux limites.
+qui dans cet exemple correspondrait à l'émission thermique de la paroi est donc
+aussi nulle. L'opérateur collisionnel de la surface $\mathcal{C}_b$ est
+indépendant de $\PI$, la dérivée $\partial_{\PI} \mathcal{C}_b$ est donc nulle.
+Pour finir la déformation géométrique de la paroi spéculaire est une
+translation, l'axe de rotation $\vec{\gamma}$ est donc nul et toutes les
+dérivées angulaires n'ont plus lieux d'être dans la condition aux limites.
La condition à la limite de sensibilité de la paroi spéculaire de la boite
devient donc:
@@ -910,7 +910,7 @@ avec
\delta(\vec{\omega}'-\vec{\omega}_{spec}) L(\vec{x},\vec{\omega}',\PI)
d\vec{\omega}'
\end{equation}
-En prennant en compte le fait que:
+En prenant en compte le fait que:
\begin{equation}
\int_{H'} \delta(\vec{\omega}' - \vec{\omega}_{spec}) f(\vec{\omega}')
d\vec{\omega}' = f(\vec{\omega}_{spec})
@@ -932,33 +932,34 @@ L(\vec{x},\vec{\omega}_{spec},\PI) \\
\section{Décomposition du vecteur de déformation}
\label{ann:proj}
-Dans le modèle de sensiblité la déformation est caractérisée par le vecteur de
+Dans le modèle de sensibilité la déformation est caractérisée par le vecteur de
déformation $\vec{\chi}$. La condition à la limite de sensibilité dépend alors
de la dérivée spatiale $\partial_{1,\vec{\chi}}I$ (équation \ref{eq:clsensib}).
Le champs de luminance n'étant pas connu il n'existe pas de solution analytique
à cette dérivée. À la frontière nous avons donc choisi de décomposer la
-direction $\vec{\chi}$ ([[chi]]) en deux directions distinctes, une direction tangente à
-la frontière $\vec{u}$ ([[u]]) et la direction de transport $\vec{\omega}$ ([[omega]]). Ainsi la
-dérivée de I selon $\vec{\chi}$ devient une composition de dérivées de I le
-long de la paroi (sur laquelle la luminance est connue) et le long de la
-direction de transport (retrouvant ainsi le terme de transport de l'ETR).
-
-La décomposition de $\vec{\chi}$ s'écrit :
+direction $\vec{\chi}$ ([[chi]]) en deux directions distinctes, une direction
+tangente à la frontière $\vec{u}$ ([[u]]) et la direction de transport
+$\vec{\omega}$ ([[omega]]). Ainsi la dérivée de $I$ selon $\vec{\chi}$ devient
+une composition de dérivées de $I$ le long de la paroi (sur laquelle la luminance
+est connue) et le long de la direction de transport (retrouvant ainsi le terme
+de transport de l'ETR).
+
+La décomposition de $\vec{\chi}$ s'écrit:
\begin{equation}
\vec{\chi} = \alpha \vec{\omega} + \beta \vec{u}
\label{eq:chi_decomp}
\end{equation}
avec $\alpha$ ([[alpha]]) et $\beta$ ([[beta]]) les coefficients issus de la
-projection de $\vec{\chi}$ sur $\vec{n}$ ([[normal]]) et $\vec{u}$. Plus de
-précisions sur la base non-orthogonale utilisée pour cette décomposition seront
-trouvées dans \cite{papier_sensib}. Ici nous en donnons les résultats :
+projection de $\vec{\chi}$ sur $\vec{n}$ ([[normal]]) et $\vec{u}$. Pour plus
+de précisions sur la base non-orthogonale utilisée pour cette décomposition,
+nous renvoyons le lecteur vers \cite{papier_sensib}. Nous nous contentons de
+donner ici les résultats:
\begin{equation}
\alpha = \frac{\vec{\chi}.\vec{n}}{\vec{\omega}.\vec{n}} \ \; \quad \beta =
\|\vec{chi} - \alpha \vec{\omega} \| \ \; \quad \vec{u} = \frac{\vec{chi} -
\alpha \vec{\omega}}{\beta}
\end{equation}
-
-Ce qui permet d'obtenir :
+Ce qui permet d'obtenir:
\begin{equation}
\partial_{1,\vec{\chi}}I = \alpha \partial_{1,\vec{\omega}} I + \beta
\partial_{1,\vec{u}} I
@@ -1000,17 +1001,17 @@ decomposition
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Calcul de la contribution de la luminance qui dépend de $\PI$}
\label{flux}
-\paragraph{}
+
Le flux reçu par le capteur est décrit par l'équation \ref{eq:flux}. Étant
donné la configuration radiative de notre problème, la luminance
$L(\vec{x},\vec{\omega},\PI)$ incidente au récepteur ne dépend que de deux
types de chemins de transports de la source radiative qui est émise par la
-paroi de droite :
+paroi de droite:
\begin{itemize}
-\item soit la source est transportée directement depuis la paroi de droite
-jusqu'au récepteur,
-\item soit la source est transportée en direction de la paroi spéculaire et est
-ensuite réfléchie jusqu'à atteindre le récepteur.
+ \item soit la source est transportée directement depuis la paroi de droite
+ jusqu'au récepteur;
+ \item soit la source est transportée en direction de la paroi spéculaire et
+ est ensuite réfléchie jusqu'à atteindre le récepteur.
\end{itemize}
Dans notre configuration le paramètre géométrique $\PI$ n'a d'influence que sur
la hauteur de la paroi spéculaire. Ainsi, la contribution radiative de la
@@ -1019,19 +1020,17 @@ récepteur, reste identique pour toutes valeurs de $\PI$ (c'est à dire quelle q
soit la hauteur de la paroi spéculaire). Du point de vue de la sensibilité
cette contribution n'aura donc aucune influence.
-\paragraph{}
-En pratique cela signifie que, en vue du calcul des différences finies, le
-calcul par Monte-Carlo du flux au récepteur n'est pas entièrement nécessaire.
-Nous pouvons nous contenter d'estimer l'unique partie du flux qui sera
-perturbée par une variation de $\PI$, soit les contributions portées par les
-chemins réfléchis par la paroi spéculaire.
-En terme d'algorithme nous pouvons donc réutiliser les chemins déjà
-échantillonnés pour le problème couplé puisque leur statistique correspond
-exactement à celle d'un chemin émis par la paroi de droite et réfléchi par la
-paroi du haut.
-
-Le poids ([[weight_flux_part_spec]]), qui correspond à la partie du flux venant
-de la réflection sur la paroi spéculaire, est donc calculé au même moment que
+En pratique cela signifie que, en vue d'une validation via un calcul des
+différences finies, le calcul par Monte Carlo du flux au récepteur n'est pas
+entièrement nécessaire. Nous pouvons nous contenter d'estimer l'unique partie
+du flux qui sera perturbée par une variation de $\PI$, soit les contributions
+portées par les chemins réfléchis par la paroi spéculaire. En terme
+d'algorithme nous pouvons donc réutiliser les chemins déjà échantillonnés pour
+le problème couplé puisque leur statistique correspond exactement à celle d'un
+chemin émis par la paroi de droite et réfléchi par la paroi du haut.
+
+Le poids ([[weight_flux_part_spec]]) correspondant à la partie du flux venant
+de la réflection sur la paroi spéculaire est donc calculé au même moment que
celui de la sensibilité.
<<données locales à la fonction de réalisation>>=
@@ -1046,9 +1045,9 @@ weight_flux_part_spec = Sb * rho * PI * get_Sr(scene);
w[1] = weight_flux_part_spec;
@
-De plus il est également initialisé en même temps que celui de la sensibilité.
-De cette manière toutes les chemins réfléchis qui n'atteignent pas le récepteur
-seront comptés comme une contribution nulle.
+Ce poids est également initialisé en même temps que celui de la sensibilité de
+sorte que les chemins réfléchis n'atteignant pas le récepteur aient une
+contribution nulle.
<<initialiser le poids>>=
weight_flux_part_spec = 0;
@@ -1060,13 +1059,12 @@ weight_flux_part_spec = 0;
\section{Fonction de calcul}
\label{sec:fonction_de_calul}
-\paragraph{}
Le programme présenté jusqu'alors s'est concentré sur la mise en {\oe}uvre de
-la seule fonction de réalisation de notre algorithme de Monte-Carlo; la boucle
+la seule fonction de réalisation de notre algorithme de Monte Carlo; la boucle
d'intégration, l'accumulation des poids ou encore l'affichage des résultats y
sont absents. Dans cette section nous détaillons ces étapes manquantes afin de
compléter le programme écrit jusqu'ici et ainsi proposer une mise en {\oe}uvre
-complète de l'algorithme de Monte-Carlo objet du présent document. Ces étapes
+complète de l'algorithme de Monte Carlo objet du présent document. Ces étapes
sont regroupées dans la fonction qui suit:
<<calculer la sensibilité à la translation>>=
@@ -1087,24 +1085,23 @@ error:
}
@
-\paragraph{} Dans cette fonction on commence par exécuter l'intégration
-Monte-Carlo. Cette étape consiste à invoquer notre fonction de réalisation
-(voir [[<<réalisation>>]]) autant de fois que de nombre de réalisations
-demandées, et à accumuler les poids qu'elle retourne. D'apparence triviale,
-cette simple boucle s'avère plus compliquée pour qui souhaite paralléliser son
-calcul. Au delà des questions propres à une exécution parallèle, d'aucun doit
-s'assurer que chaque processus dispose d'une séquence de nombre aléatoires qui
-lui est propre. C'est pourquoi nous utilisons ici la bibliothèque
-\texttt{Star-MonteCarlo} en charge de cette intégration parallèle. Pour cela
-nous créons d'abord un système \texttt{Star-MonteCarlo}, c'est à dire une
-variable qui matérialise la bibliothèque à l'échelle de notre programme
-([[smc]]). Et nous le configurons pour qu'il utilise le journal d'évènement
-([[logger]]), l'allocateur mémoire ([[allocator]]) et le nombre de processus
-légers ([[nthreads]]) soumis en entrée de la fonction via la variable [[sgs]].
-Nous configurons enfin le type de générateur aléatoire à utiliser, en
+Dans cette fonction on commence par exécuter l'intégration Monte Carlo. Cette
+étape consiste à invoquer notre [[<<fonction de réalisation>>]] autant de fois
+que de nombre de réalisations demandées, et à accumuler les poids qu'elle
+retourne. D'apparence triviale, cette simple boucle s'avère plus compliquée
+pour qui souhaite paralléliser son calcul. Au delà des questions propres à une
+exécution parallèle, d'aucun doit s'assurer que chaque processus dispose d'une
+séquence de nombre aléatoires qui lui est propre. C'est pourquoi nous utilisons
+ici la bibliothèque \texttt{Star-MonteCarlo} en charge de cette intégration
+parallèle. Pour cela nous créons d'abord un système \texttt{Star-MonteCarlo},
+c'est à dire une variable qui matérialise la bibliothèque à l'échelle de notre
+programme ([[smc]]). Et nous le configurons pour qu'il utilise le journal
+d'évènement ([[logger]]), l'allocateur mémoire ([[allocator]]) et le nombre de
+processus légers ([[nthreads]]) soumis en entrée de la fonction via la variable
+[[sgs]]. Nous configurons enfin le type de générateur aléatoire à utiliser, en
l'occurrence le générateur pseudo alétoire
Mersenne-Twister~\cite{matsumoto1998mersenne} ([[SSP_RNG_MT19937_64]]). Nous
-pouvons alors lancer l'intégration Monte-Carlo à proprement parler. Pour cela
+pouvons alors lancer l'intégration Monte Carlo à proprement parler. Pour cela
nous définissons un intégrateur qui détermine la fonction à appeler à chaque
réalisation ([[run_realisation]]), le type de poids calculés ([[smc_doubleN]],
{\ie} un vecteur de réels) et le nombre total de réalisations
@@ -1126,16 +1123,16 @@ integrator.max_realisations = sgs->nrealisations;
ctx.count = 2; /* Nombre de poids calculés (Sensibilité & "luminance") */
ctx.integrand_data = sgs; /* Données d'entrée de la fonction integrand */
-/* Intégration Monte-Carlo */
+/* Intégration Monte Carlo */
res = smc_solve(smc, &integrator, &ctx, &estimator);
if(res != RES_OK) goto error;
@
-\paragraph{} En sortie de l'intégration Monte-Carlo (fonction [[smc_solve]])
-nous disposons d'un estimateur de nos variables aléatoires, en l'occurrence la
-sensibilité à la translation et la fraction de la luminance qui dépend du
-paramètre {$\PI$}. Nous pouvons dès lors récupérer l'état de notre estimateur
-pour afficher l'espérance et l'écart type de ces variables.
+En sortie de l'intégration Monte Carlo (fonction [[smc_solve]]) nous disposons
+d'un estimateur de nos variables aléatoires, en l'occurrence la sensibilité à
+la translation et la fraction de la luminance qui dépend du paramètre {$\PI$}.
+Nous pouvons dès lors récupérer l'état de notre estimateur pour afficher
+l'espérance et l'écart type de ces variables.
<<afficher les résultats de l'estimation>>=
res = smc_estimator_get_status(estimator, &status);
@@ -1150,9 +1147,9 @@ sgs_log(sgs, "Luminance ~ %g +/- %g\n",
SMC_DOUBLEN(status.SE)[1]); /* Écart type */
@
-\paragraph{} Ne reste plus qu'à déclarer les variables locales utilisées par
-notre fonction de calcul et de libérer en sortie l'espace mémoire allouée
-dynamiquement pour ces variables.
+Ne reste plus qu'à déclarer les variables locales utilisées par notre fonction
+de calcul et de libérer en sortie l'espace mémoire allouée dynamiquement pour
+ces variables.
<<variables locales au calcul de sensibilité>>=
/* Système */
@@ -1173,17 +1170,17 @@ if(estimator) smc_estimator_ref_put(estimator);
if(smc) smc_device_ref_put(smc);
@
-\paragraph{} Le lecteur attentif aura remarqué que l'intégrateur utilise la
-fonction [[run_realisation]] et non directement la fonction [[réalisation]]
+Le lecteur attentif aura remarqué que l'intégrateur utilise la fonction
+[[run_realisation]] et non directement la [[<<fonction de réalisation>>]]
développée dans ce document (voir [[<<exécuter l'intégration Monte Carlo>>]]).
-[[run_réalisation]] est une fonction intermédiaire qui ne fait qu'appeler la
-fonction [[realisation]]. Une fonction parfaitement dispensable sauf à la
-bibliothèque \texttt{Star-MonteCarlo} qui nous impose la signature de la
-fonction à utiliser, c'est à dire le type des paramètres d'entrées et de
-sorties. En d'autres termes, l'utilisation de cette fonction intermédiaire nous
-permet de faciliter l'écriture et la lecture de la fonction [[realisation]] en
-la libérant de contraintes fonctionnelles imposées par
-\texttt{Star-MonteCarlo}.
+[[run_realisation]] est une fonction intermédiaire qui ne fait qu'appeler la
+[[<<fonction de réalisation>>]]. [[run_realisation]] est donc parfaitement
+dispensable sauf à la bibliothèque \texttt{Star-MonteCarlo} qui nous impose la
+signature de la fonction à utiliser, c'est à dire le type des paramètres
+d'entrées et de sorties. En d'autres termes, l'utilisation de cette fonction
+intermédiaire nous permet de faciliter l'écriture et la lecture de la
+[[<<fonction de réalisation>>]] en la libérant de contraintes fonctionnelles
+imposées par \texttt{Star-MonteCarlo}.
<<fonctions utilitaires>>=
static res_T
@@ -1202,7 +1199,7 @@ run_realisation
struct smc_doubleN_context* context = NULL;
struct sgs* sgs = NULL;
ASSERT(ctx && output);
- (void)ithread; /* Éviter l'avertissement de compilation "variable inutilisée" */
+ (void)ithread; /* Éviter l'avertissement "variable inutilisée" */
context = ctx;
sgs = context->integrand_data;
return realisation(rng, &sgs->scene, SMC_DOUBLEN(output));
@@ -1214,7 +1211,6 @@ run_realisation
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Structure de mise oeuvre}
-\paragraph{}
Cette partie décrit la structure du fichier C dans lequel l'algorithme de
calcul de sensibilité est mis en oeuvre:
@@ -1228,9 +1224,8 @@ calcul de sensibilité est mis en oeuvre:
<<calculer la sensibilité à la translation>>
@
-\paragraph{}
En plus des fonctions de calcul écrites dans les sections précédents, notre
-fichier contient des fonctions utilitaires notament utilisées pour interroger
+fichier contient des fonctions utilitaires notamment utilisées pour interroger
les propriétés physiques du système (figure~\ref{fig:configuration}) telles que
$\rho$, la réflectivité de la paroi du haut (equation~\ref{eq:rho}), ou $S_b$,
l'émission thermique de la paroi de droite (équation~\ref{eq:S_b}). Le calcul
@@ -1294,8 +1289,7 @@ get_grad_Sb
}
@
-\paragraph{}
-Autres fonctions utilitaires, les fonctions utilisées lors du suivie de chemins
+Autres fonctions utilitaires, les fonctions utilisées lors du suivi des chemins
pour déterminer si un rayon a intersecté le récepteur (fonction
[[hit_receiver]]) ou la source (fonction [[hit_source]]). Pour la source il
suffit de s'assurer que le rayon intersecte le côté droit de la boîte, ici
@@ -1321,10 +1315,9 @@ hit_source
}
@
-\paragraph{}
-Pour le récepteur on teste d'abord si l'intersection a lieu sur la paroi de la
-boîte sur laquelle celui-ci est positionné, une paroi identifiée dans le code
-par la constante [[SGS_SURFACE_Z_MIN]]. Reste alors à déterminer si
+Pour le récepteur on teste d'abord si l'intersection a lieu sur la paroi du
+parallélépipède sur laquelle celui-ci est positionné, une paroi identifiée dans
+le code par la constante [[SGS_SURFACE_Z_MIN]]. Reste alors à déterminer si
l'intersection se situe sur le récepteur lui même. Pour cela il nous suffit de
tester si la position d'intersection appartient au sous domaine de la surface
sur lequel le récepteur est défini.
@@ -1362,7 +1355,6 @@ hit_receiver
}
@
-\paragraph{}
Dernière fonction utilitaire à écrire, la fonction qui calcule la surface $A_h$
de la paroi spéculaire:
@@ -1375,7 +1367,6 @@ get_Sr(const struct sgs_scene* scene)
}
@
-\paragraph{}
On complète notre fichier en définissant les constantes [[X]], [[Y]] et [[Z]]
utilisées tout du long pour simplifier la lecture du code lors des accès aux
éléments d'un vecteur.
@@ -1384,16 +1375,15 @@ utilisées tout du long pour simplifier la lecture du code lors des accès aux
enum {X, Y, Z};
@
-\paragraph{}
-Enfin, on liste en début des sources les fichiers d'en-tête sur lequel notre
-code s'appuie.
+Enfin, on liste en début des sources les fichiers d'en-tête utilisés par notre
+code.
<<liste des inclusions>>=
#include "sgs_c.h"
#include "sgs_geometry.h"
#include "sgs_log.h"
-#include <star/smc.h> /* Calcul Monte-Carlo */
+#include <star/smc.h> /* Calcul Monte Carlo */
#include <star/ssp.h> /* Générateur de nombre aléatoire et distributions */
/* Manipuler des vecteurs de double à 2 et 3 dimensions */
@@ -1409,8 +1399,8 @@ code s'appuie.
<<mc.sh>>=
#!/bin/sh -e
-# Estimation par Monte-Carlo de la sensibilité et de la fraction de la
-# luminance qui dépend de pi
+# Estimation par Monte Carlo de la sensibilité et de la fraction de
+# la luminance qui dépend de pi
h=1 # Hauteur de la boîte
pi_step="0.1"
@@ -1422,7 +1412,8 @@ nsteps=14
pi="0"
i="0"
-# Affiche la hauteur de la paroi du haut et le delta entre chaque valeur de pi
+# Affiche la hauteur de la paroi du haut et le delta entre chaque
+# valeur de pi
printf "%s %s\n" "${h}" "${pi_step}"
while [ "${i}" -lt "${nsteps}" ]; do
@@ -1444,8 +1435,9 @@ done
<<fd.sh>>=
#!/bin/sh -e
-# Calcule la sensibilité par différence fini à partir des estimations par
-# Monte-Carlo de la fraction de luminance qui dépend de pi
+# Calcule la sensibilité par différences finies à partir des
+# estimations par Monte Carlo de la fraction de luminance qui dépend
+# de pi
float_to_bc()
{