commit 4949744aa064016ed770bc9157700f327bfb9727
parent d4123c289179f55fb36f5f99eaedeeb4ba3bb035
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Wed, 1 Mar 2023 21:55:58 +0100
Ajoute en annexe le script shell POSIX des résultats
Seule les sources du script sont données, sans aucun texte qui
l'accompagne à l'exception des quelques commentaires directement dans le
script.
Ce script lance N fois notre programme de calcul pour estimer par
Monte-Carlo la sensibilité à pi et la fraction de luminance qui dépend
de pi. Ces dernières sont ensuite utilisées pour estimer la sensibilité
à pi mais cette fois par différence finie. La comparaison croisée des
résultats vérifie la validité de notre algorithme Monte-Carlo.
Diffstat:
4 files changed, 100 insertions(+), 17 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -15,3 +15,4 @@ sgs
weave*
*.pdf
src/sgs_compute_sensitivity_translation.c
+compute_sensitivities.sh
diff --git a/Makefile b/Makefile
@@ -26,8 +26,8 @@ include config.mk
DOC = sgs_compute_sensitivity_translation
-TMPC =\
- src/sgs_compute_sensitivity_translation.c
+SH = compute_sensitivities.sh
+TMPC = src/sgs_compute_sensitivity_translation.c
SRC =\
src/sgs_args.c\
@@ -66,6 +66,11 @@ $(TMPC): $(NOWEB) config.mk
@$(TANGLE) $(TANGLE_OPTS)\
-R$$(c="$@" && echo "$${c##*/}" | sed 's/_/\\_/g') $(NOWEB) | cpif $@
+$(SH): $(NOWEB)
+ @echo "TANGLE $@"
+ @$(TANGLE)\
+ -R$$(c="$@" && echo "$${c##*/}" | sed 's/_/\\_/g') $(NOWEB) | cpif $@
+
.SUFFIXES: .c .d .o
.c.d:
@$(CC) $(CFLAGS) -MM -MT "$(@:.d=.o) $@" $< -MF $@
@@ -79,6 +84,9 @@ $(TMPC): $(NOWEB) config.mk
################################################################################
pdf: $(DOC).pdf
+results.dat: $(SH) sgs
+ $(SHELL) $(SH) > $@
+
$(DOC).pdf: .config_document $(TEX) $(DOC).bbl
$(LATEX) src/$(DOC).tex && $(LATEX) src/$(DOC).tex
@@ -109,9 +117,9 @@ uninstall:
rm -f $(DESTDIR)$(PREFIX)/share/doc/star-gs/README.md
clean:
- @rm -f $(OBJ) $(TEX) $(TMPC) sgs .config_program .config_document ./*.aux\
- ./*.bbl ./*.idx ./*.log ./*.dvi ./*.glo ./*.lof ./*.toc ./*.out ./*.blg\
- ./*.nav ./*.snm ./*.vrb weave* $(DOC).pdf
+ @rm -f $(OBJ) $(SH) $(TEX) $(TMPC) sgs .config_program .config_document\
+ ./*.aux ./*.bbl ./*.idx ./*.log ./*.dvi ./*.glo ./*.lof ./*.toc ./*.out\
+ ./*.blg ./*.nav ./*.snm ./*.vrb weave* $(DOC).pdf
distclean: clean
@rm -f $(DEP)
diff --git a/src/sgs_compute_sensitivity_translation.nw b/src/sgs_compute_sensitivity_translation.nw
@@ -85,10 +85,10 @@ géométriques) du système:
\paragraph{TODO} Parler que l'on va décrire l'algorithme jusqu'à sa mise en
oeuvre explicite dans le code. + Préciser que les notations feront référence à
la position des parois par rapport à l'orientation présentée sur le schéma (h
-$=$ haut, d $=$ droite etc...), soit par rapport à l'origine du repère.
+$=$ haut, d $=$ droite etc...), soit par rapport à l'origine du repère.
\section{Description du problème}
-%\paragraph{Descrition du système}
+%\paragraph{Descrition du système}
Le but du présent document est d'illustrer la mise en oeuvre algorithmique d'un
calcul de sensibilité sur un exemple simple (\textbf{NOTE} phrase à refaire...
Comme toutes les autres :-)). Le problème est décrit par un parallélépipède
@@ -179,7 +179,7 @@ bas et a pour dimension $R_x \times R_y$.}
\paragraph{La configuration radiative}
Toutes les parois du parallélépipède sont noires à l'exception de la paroi du
haut (de surface $A_h = D_x \times D_y$) qui est spéculaire, froide, et munie
-d'un coefficient de réflexion $\rho$:
+d'un coefficient de réflexion $\rho$:
% défini dans l'équation \ref{eq:rho}.
\begin{equation}
\rho(\vec{x},-\vec{\omega}) = 0.25 \Bigl[ 1- \cos \left(2 \pi \frac{x}{Dx}
@@ -192,9 +192,9 @@ La profil spécifique de $\rho$ n'est pas discuté dans ce document, il permet d
simplifier le problème de sensibilité (\textbf{TODO :} refaire cette phrase).
Seule la paroi noire de droite (de surface $A_d = D_y \times h$) est émettrice
et la condition à la limite en luminance correspondante est décrite par:
-% l'équation \ref{eq:cl_rad}.
+% l'équation \ref{eq:cl_rad}.
\begin{equation}
-L(\vec{x},\vec{\omega},\PI) = S_b(\vec{x}) \quad \quad \quad \vec{x} \in A_d \ ; \
+L(\vec{x},\vec{\omega},\PI) = S_b(\vec{x}) \quad \quad \quad \vec{x} \in A_d \ ; \
\vec{\omega} \cdot \vec{n}_d > 0
\label{eq:cl_rad}
\end{equation}
@@ -220,7 +220,7 @@ L(\vec{x},\vec{\omega},\PI)$ , dans toutes les directions entrantes et en tout
point du récepteur. De façon similaire, pour évaluer $\partial_{\PI} \varphi$
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.
+point du récepteur.
\paragraph{} L'objet de la section \ref{modele_sensib} est de donner le
modèle physique qui décrit les sources et le transport de la sensibilité
@@ -272,7 +272,7 @@ avec $S_{b,\PI}$ la source de sensibilité et $\rho(\vec{x},-\vec{\omega})
s(\vec{x},\vec{\omega}_{spec},\PI)$ la réflection de la sensibilité incidente à
la paroi dans la direction spéculaire. Dans notre example, le milieu étant
transparant et toutes les autres conditions aux limites de snesibilité étant
-nulles, il n'y a pas de sensibilité incidente à la paroi.
+nulles, il n'y a pas de sensibilité incidente à la paroi.
La paroi du haut étant spéculaire, la source de sensibilité $S_{b,\PI}$ prend
la forme suivante (voir annexe \ref{ann:cl_sensib} pour les développements qui
mènent à cette expression):
@@ -303,14 +303,14 @@ $\vec{\gamma}$.
\paragraph{La source de sensibilité} Dans ce problème la source de sensibilité
est une source de surface, émise par la paroi du haut et donnée par la
-condition à la limite (équation \ref{eq:clsensib}).
+condition à la limite (équation \ref{eq:clsensib}).
Toutefois, dans l'équation \ref{eq:clsensib} la condition à la limite de
sensibilité dépend :
\begin{itemize}
\item de la luminance incidente à la paroi (dans la direction de transport
-spéculaire),
+spéculaire),
\item de la dérivée spatiale de la luminance, dans la direction de dérivation
-$\vec{u}$, incidente à la paroi (dans la direction de transport spéculaire),
+$\vec{u}$, incidente à la paroi (dans la direction de transport spéculaire),
\item de la dérivée spatiale de la luminance, dans la direction de dérivation
$\vec{\chi}$, incidente à la paroi (dans la direction de transport spéculaire).
\end{itemize}
@@ -360,7 +360,7 @@ dans \cite{}, peut comprendre des sources volumiques, des sources de surfaces
et des sources locales situées sur les arrêtes d'une géométrie facétisée. Dans
notre exemple le modèle de dérivée spatiale se simplifie (voir annexe
\ref{ann:der_spatiale}) de sorte que les sources soient uniquement des sources
-émises par la surface du haut $A_h$ et la surface de droite $A_d$.
+émises par la surface du haut $A_h$ et la surface de droite $A_d$.
Pour la dérivée spatiale dans la direction $\vec{u}_h$, la source de la paroi
du haut est donnée par la condition à la limite :
@@ -1389,6 +1389,80 @@ code s'appuie.
#include <rsys/double3.h>
@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Annexe script de résultat
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Script d'exécution du calcul et résultats}
+
+<<compute\_sensitivities.sh>>=
+#!/bin/sh -e
+
+pi_step="0.1"
+
+float_to_bc()
+{
+ sed 's/\([+-]\{0,1\}[0-9]\{0,\}\.\{0,1\}[0-9]\{1,\}\)'\
+'[eE]+\{0,1\}\(-\{0,1\}\)\([0-9]\{1,\}\)/(\1*10^\2\3)/g'
+}
+
+bc_cmd()
+{
+ bc -l | sed '/\./s/\.\{0,\}0\{1,\}$//'
+}
+
+# Estimation par Monte-Carlo de la sensibilité et de la fraction de la
+# luminance qui dépend de pi
+mc()
+{
+ lower="0,0,0"
+ upper="1,1,1"
+ pi="0"
+
+ nrealisations=10000000
+ nsteps=10
+
+ i="0"
+ while [ "${i}" -lt "${nsteps}" ]; do
+ out=$(./sgs \
+ -n "${nrealisations}" \
+ -b low="${lower}":upp="${upper}":pi="${pi}")
+
+ printf "%s " "${pi}"
+ echo "${out}" | sed -n '1{N;s/^'\
+'[^~]\{1,\}~ \([^[:blank:]]\{1,\}\) +\/- \([^\n]\{1,\}\)\n'\
+'[^~]\{1,\}~ \([^[:blank:]]\{1,\}\) +\/- \([^$]\{1,\}\)$'\
+'/\1 \2 \3 \4/p}'
+
+ i=$((i + 1))
+ pi=$(printf "%s + %s\n" "${pi}" "${pi_step}" | bc)
+ done
+}
+
+# Calcule la sensibilité par différence fini à partir des estimations par
+# Monte-Carlo de la fraction de luminance qui dépend de pi
+fd()
+{
+ read -r p
+ read -r c
+ while read -r n; do
+ lum_p=$(echo "${p}" | cut -d' ' -f4 | float_to_bc)
+ err_p=$(echo "${p}" | cut -d' ' -f5 | float_to_bc)
+ lum_n=$(echo "${n}" | cut -d' ' -f4 | float_to_bc)
+ err_n=$(echo "${n}" | cut -d' ' -f5 | float_to_bc)
+
+ lum_fd=$(echo "(${lum_n}-${lum_p})/(2*${pi_step})" | bc_cmd)
+ err_fd=$(echo "(${err_n}+${err_p})/(2*${pi_step})" | bc_cmd)
+
+ printf "%s %s %s\n" "${c}" "${lum_fd}" "${err_fd}"
+
+ p="${c}"
+ c="${n}"
+ done
+}
+
+mc | fd
+@
+
\bibliographystyle{apalike}
\bibliography{biblio}
diff --git a/src/sgs_log.c b/src/sgs_log.c
@@ -32,7 +32,7 @@ print_out(const char* msg, void* ctx)
{
ASSERT(msg);
(void)ctx;
- fprintf(stderr, SGS_LOG_INFO_PREFIX"%s", msg);
+ fprintf(stdout, SGS_LOG_INFO_PREFIX"%s", msg);
}
static void