1 #!/bin/sh -e
  2 
  3 
  4 #=================================================================
  5 # TP2 : insensibilité du temps de calcul aux rapports d'échelle. #
  6 #=================================================================
  7 
  8 # Voir le TP1 pour la prise en main du système d'exploitation EDIX.
  9 # Les commandes suivantes sont identiques à celles du début du TP1.
 10 
 11 . /home/lafrier/star-build/local/etc/stardis.profile
 12 mkdir TP2
 13 cd TP2
 14 
 15 # Dans ce TP on aura régulièrement besoin d'extraire des temps de calcul
 16 # / temps de chargement / nombre de triangles dans la scène.
 17 # Ces informations sont données par stardis lorsque cet exécutable est
 18 # appelé avec l'option -V 3. Ces fonctions d'extractions sont données
 19 # par les scripts suivants :
 20 
 21 ls "${DEMONSTRATEUR_2}"/TP2/src/*.sh
 22 
 23 # Afin de pouvoir appeler ces scripts par la suite sans avoir à spécifier
 24 # le chemin complet vers ces exécutables :
 25 
 26 export PATH="${DEMONSTRATEUR_2}/TP2/src/:${PATH}"
 27 
 28 # TODO : est-ce que ces scripts généraux iraient dans libs ?
 29 
 30 
 31 #=========================================================================
 32 # TP2 - Partie 1 : augmentation de la complexité géométrique de la scène #
 33 #=========================================================================
 34 
 35 # On commence par créer un répertoire dans lequel on va travailler :
 36 
 37 mkdir poreux && cd poreux
 38 
 39 # Description de la scène :
 40 # Une mousse poreuse solide qui échange avec un autre solide, tous deux
 41 # placés dans une boîte solide. Les conditions aux limites sont appliquées
 42 # aux parois de la boïte, toutes adiabatiques sauf
 43 #  - une température imposée sur la paroi X = -1.1
 44 #  - un flux imposé sur la paroi X = 1.1
 45 # L'observable est la température sur la face au flux imposé.
 46 
 47 # On commence par visualiser les différentes géométries :
 48 
 49 ls "${DEMONSTRATEUR_2}"/data/poreux/
 50 cat "${DEMONSTRATEUR_2}"/data/poreux/model_2_0.txt
 51 paraview
 52 
 53 # 1/ pour visualiser la scène modélisée :
 54 # Open, sélectionner tous les fichiers 'stl' du dossier
 55 # 'demonstrateur_2/data/poreux_faible_resolution' commençant par 'solid'
 56 # ('solid_gyroid.stl', 'solid_sole01.stl', 'solid_sole02.stl', ...,
 57 # 'solid_sole06.stl'). Cliquer sur 'Apply' pour les afficher.
 58 # Vous observez la boîte dans laquelle se trouve la mousse.
 59 # Cliquer sur le symbole de l'oeil dans le 'Pipeline Browser' (sur la gauche)
 60 # pour cacher les 'soles' et voir apparaître le maillage du poreux.
 61 
 62 # 2/ On visualise ensuite les différents niveaux de détail de ce poreux.
 63 # Open, sélectionner le fichier 'solid_gyroid.stl' du dossier
 64 # 'demonstrateur_2/data/poreux'. Cliquer sur 'Apply'.
 65 # Open, sélectionner le fichier 'solid_gyroid.stl' du dossier
 66 # 'demonstrateur_2/data/poreux_forte_resolution'. Cliquer sur 'Apply'.
 67 
 68 # Observez la différence de résolution dans le maillage des pores, vous
 69 # pouvez sélectionner 'Surface With Edges' dans le menu déroulant en haut
 70 # au lieu de 'Surface', il vous faudra d'abord sélectionner le maillage
 71 # considéré dans le menu Pipeline Browser (à gauche). En cliquant sur
 72 # l'oeil du menu Pipeline Browser, vous pouvez cacher successivement les
 73 # maillages pur n'en visualiser qu'un seul à la fois.
 74 
 75 # On commence par créer un fichier qui contiendra les informations lues.
 76 
 77 echo "triangle_count computation_time_in_msec loading_time_in_msec" \
 78   > computation_times.txt
 79 
 80 # Lancer un calcul stardis sur la scène :
 81 
 82 stardis -V 3 -M "${DEMONSTRATEUR_2}"/data/poreux/model_2_0.txt -n 20 \
 83   -s "${DEMONSTRATEUR_2}"/data/poreux/interface_sole02_Xplus.stl \
 84   2> stardis_output.txt
 85 cat stardis_output.txt
 86 
 87 # On observe que le nombre de triangles est donné dans ce fichier, ainsi que
 88 # le temps de calcul. On peut extraire cette information de façon automatique
 89 # grâce au scripṭ suivant :
 90 
 91 echo "Nombre de triangles " \
 92   $(extract_stardis_triangle_count.sh stardis_output.txt)
 93 
 94 # On extrait du fichier temporaire puis on stocke ces informations :
 95 
 96 echo \
 97   $(extract_stardis_triangle_count.sh stardis_output.txt) \
 98   $(extract_stardis_computation_time.sh stardis_output.txt) \
 99   $(extract_stardis_loading_time.sh stardis_output.txt) >> computation_times.txt
100 
101 # On vérifie que ces données sont écrites dans le fichier :
102 
103 cat computation_times.txt
104 
105 # Idem sur une autre scène moins résolue :
106 
107 stardis -V 3 \
108 -M "${DEMONSTRATEUR_2}"/data/poreux_faible_resolution/model_2_0.txt \
109 -n 20 -s \
110 "${DEMONSTRATEUR_2}"/data/poreux_faible_resolution/interface_sole02_Xplus.stl \
111 2> stardis_output_faible_resol.txt
112 echo \
113 $(extract_stardis_triangle_count.sh stardis_output_faible_resol.txt) \
114 $(extract_stardis_computation_time.sh stardis_output_faible_resol.txt) \
115 $(extract_stardis_loading_time.sh stardis_output_faible_resol.txt) \
116 >> computation_times.txt
117 cat computation_times.txt
118 
119 # Idem sur une autre scène plus résolue :
120 stardis -V 3 \
121 -M "${DEMONSTRATEUR_2}"/data/poreux_forte_resolution/model_2_0.txt \
122 -n 20 -s \
123 "${DEMONSTRATEUR_2}"/data/poreux_forte_resolution/interface_sole02_Xplus.stl \
124 2> stardis_output_forte_resol.txt
125 echo \
126 $(extract_stardis_triangle_count.sh stardis_output_forte_resol.txt) \
127 $(extract_stardis_computation_time.sh stardis_output_forte_resol.txt) \
128 $(extract_stardis_loading_time.sh stardis_output_forte_resol.txt) \
129 >> computation_times.txt
130 cat computation_times.txt
131 
132 # Faire un plot des temps de chargement des données et du temps de calcul
133 # en fonction du nombre de triangles :
134 
135 {
136   echo "set terminal pdfcairo size 15cm,10cm"
137   echo "set output \"temps_de_calcul.pdf\""
138   echo "set key noenhanced"
139   echo "set key notitle"
140   echo "set multiplot layout 2, 1"
141   echo "set xlabel 'nombre de triangles'"
142   echo "set ylabel 'temps de chargement (en msec)'"
143   echo "plot 'computation_times.txt' using 1:3 title ''"
144   echo "set ylabel 'temps de calcul (en msec)'"
145   echo "plot 'computation_times.txt' using 1:2 title ''"
146   echo "print \"Génération de : temps_de_calcul.pdf\""
147 } > plot_time.gp
148 gnuplot plot_time.gp
149 mupdf temps_de_calcul.pdf
150 
151 # Ici on fait une courbe avec peu de points pour éviter que ce soit trop long.
152 # Commenter une courbe avec plus de points dans le TP : observer que le temps
153 # de calcul reste du même ordre quand on double le nombre de triangles.
154 
155 feh ${DEMONSTRATEUR_2}/Figures/tp2_graphique.png
156 
157 # Prendre comme point de comparaison les méthodes maillées, où ce ne serait
158 # pas du tout le cas.
159 # Bémol : ici on ne prend qu'un seul point de mesure, les temps devraient être
160 # moyennés sur plusieurs réalisations, il se peut que vous ayez donc des temps
161 # plus long pour faire tourner une simulation avec moins de triangles, auquel
162 # cas relancez le calcul.
163 
164 cd ..
165 
166 
167 #===================================================
168 # TP2 - Partie 2 : augmentation du nombre d'objets #
169 #===================================================
170 
171 # Note : Mégane n'a pas réussi à dupliquer la gyroïde dans deux directions
172 # seulement, avec la boîte l'encadrant. La configuration Dx=1,Dy=2,Dz=2,
173 # Nint=100 soles=T génère bien une géométrie mais ensuite stardis détecte
174 # plusieurs enclosures. Tous les chemins sont alors rejetés.
175 
176 # Pour le moment, elle a donc opté pour la réutilisation de la scène
177 # électronique du starter pack (en attendant).
178 
179 cp -r /home/lafrier/Stardis-Starter-Pack-0.2.0/heatsink .
180 cd heatsink
181 ls
182 
183 # Description de la scène :
184 # une pièce d'électronique, puis cette pièce répliquée de nombreuses fois.
185 
186 # Visualisation des géométries :
187 
188 paraview
189 
190 # Ouvrir les stl non préfixés de '_multiple'. Visualiser ce composant avec
191 # ses ailettes.
192 # Ouvrir les stl préfixés de '_multiple'.
193 # Visualiser la plaque avec les 50 composants.
194 
195 # Temps de calcul sur 1 élément :
196 
197 stardis -V 3 -M model.txt -m SIPw,INF -n 1000 -e
198 
199 # Lire "Computation time ="
200 
201 # Temps de calcul sur des répétitions de cet élément :
202 
203 stardis -V 3 -M model_multiple.txt -m SIPw,INF -n 1000 -e
204 
205 # Lire "Computation time ="
206 
207 # Bien qu'il y ait une réplication x50 du motif, vous voyez que le temps de
208 # calcul est du même ordre de grandeur.
209 
210 cd ..
211 
212 
213 #====================================================================
214 # TP2 - Partie 3 : augmentation du raffinement temporel des données #
215 #====================================================================
216 
217 mkdir meteo && cd meteo
218 
219 # Description de la scène :
220 # Il s'agit de la ferme de Roffiac composée de deux étages avec une seule
221 # pièce chacun. La température dans la pièce du bas est constante (par
222 # exemple climatisée), et la température du grenier est inconnue.
223 # La météo extérieure est fluctuante.
224 # On estime la température moyenne de la façade de la maison.
225 
226 # Remarque :
227 # ----------
228 # Sur EDIX les propriétés programmables sont déjà installées. Si ce
229 # n'est pas le cas sur un autre système, il faut les installer avec les
230 # commandes suivantes :
231 #
232 #   cd demonstrateur_2/libs/lib_cosmo
233 #   mkdir build && cd build
234 #   cmake ../cmake -DCMAKE_INSTALL_PREFIX=../../local
235 #   make install
236 #   cd ../../
237 #-----------
238 
239 # Créer la variable d'environnement suivante :
240 
241 LD_LIBRARY_PATH="${DEMONSTRATEUR_2}"/libs/local/lib:"${LD_LIBRARY_PATH}"
242 
243 # Visualiser les données plus détaillées :
244 # Ici, afin de permettre une visualisation rapide, l'abscisse représente la
245 # position des données dans le fichier et non la date. Il est possible
246 # d'afficher ces données en fonction de la date en affectant la variable
247 # 'NO_TIMESTAMP_COMPUTATION=1' dans le fichier 'run_visualization.sh'.
248 
249 mkdir visualisation_donnees_meteo_30j && cd visualisation_donnees_meteo_30j
250 sh "${DEMONSTRATEUR_2}"/TP2/src/3_house/run_visualization.sh \
251   "${DEMONSTRATEUR_2}"/data/donnees_meteo_basiques/2_meteo_sur_30j.txt
252 rm -f graphe_10.png
253 feh graphe_*.png
254 
255 # Utilisez les flèches pour passer d'un graphique au suivant.
256 # Vous voyez des cycles journaliers dans les données.
257 
258 # Lancer stardis sur les données les plus détaillées :
259 
260 cd ..
261 stardis -V 3 -M \
262 "${DEMONSTRATEUR_2}"/data/ferme_roffiac/meteo_30j_et_isolation_exterieure.txt \
263 -s "${DEMONSTRATEUR_2}"/data/ferme_roffiac/facade.stl,5000 -n 100000 -e \
264 2> stardis_meteo_30j_et_isolation_exterieure.txt
265 
266 #stardis -V 3 -M meteo_30j_et_isolation_exterieure.txt -s facade.stl,5000 \
267 #-n 100000 -e 2> stardis_meteo_30j_et_isolation_exterieure.txt
268 
269 # Notez cette température estimée.
270 
271 # Visualiser les données moins détaillées :
272 
273 mkdir visualisation_donnees_meteo_moyenne_30j
274 cd visualisation_donnees_meteo_moyenne_30j
275 sh "${DEMONSTRATEUR_2}"/TP2/src/3_house/run_visualization.sh \
276   "${DEMONSTRATEUR_2}"/data/donnees_meteo_basiques/3_meteo_moyennee.txt
277 rm -f graphe_10.png
278 feh graphe_*.png
279 
280 # Vous voyez qu'il y a beaucoup moins de points que dans le graphique
281 # précédent, ils couvrent la même plage temporelle.
282 
283 # Relancer stardis sur les données les moins détaillées :
284 
285 cd ..
286 stardis -V 3 -M \
287 "${DEMONSTRATEUR_2}"/data/ferme_roffiac/meteo_moyenne_30j_et_isolation_exterieure.txt \
288 -s "${DEMONSTRATEUR_2}"/data/ferme_roffiac/facade.stl,5000 -n 100000 -e \
289 2> stardis_meteo_moyenne_30j_et_isolation_exterieure.txt
290 
291 # Notez cette température estimée. Elle est proche de la précédente.
292 # Les barres d'erreur sont comparables.
293 
294 # Observer le temps de calcul obtenu dans les deux cas :
295 
296 sed -n '/Computation time =/p' \
297   stardis_meteo_moyenne_30j_et_isolation_exterieure.txt
298 sed -n '/Computation time =/p' \
299   stardis_meteo_30j_et_isolation_exterieure.txt
300 
301 # > Il est comparable !!
302 
303 # Comparaison des valeurs de température estimées dans les deux cas :
304 
305 sh "${DEMONSTRATEUR_2}"/TP2/src/3_house/run_computation_time.sh
306 
307 # Comparaison des temps de calcul dans les deux cas :
308 
309 gnuplot plot_computation_time.gp
310 mupdf graphe_temps_calcul.pdf
311 
312 # Appuyer sur q pour fermer le plot. Le second graphique montre la valeur de
313 # la température estimée.
314 
315 gnuplot plot_temperature.gp
316 mupdf graphe_temperature.pdf
317 
318 cd ..
319 
320 #=====================================================================
321 # TP2 - Partie 4 : augmentation de la plage temporelle d'intégration #
322 #=====================================================================
323 
324 mkdir integration_temporelle && cd integration_temporelle
325 
326 # Intégrer sur 1 jour ou sur une semaine. Ici il faudrait la même barre d'erreur
327 
328 echo "duree_integration temps_calcul" \
329   > temps_calcul_en_fonction_duree_integration_temporelle.txt
330 stardis -V 3 -M \
331 "${DEMONSTRATEUR_2}"/data/ferme_roffiac/meteo_30j_et_isolation_exterieure.txt \
332 -s "${DEMONSTRATEUR_2}"/data/ferme_roffiac/facade.stl,5000,5500 -n 100000 -e \
333 2> stardis_integre_500.txt
334 echo "500 " $(extract_stardis_computation_time.sh stardis_integre_500.txt) \
335 >> temps_calcul_en_fonction_duree_integration_temporelle.txt
336 stardis -V 3 -M \
337 "${DEMONSTRATEUR_2}"/data/ferme_roffiac/meteo_30j_et_isolation_exterieure.txt \
338 -s "${DEMONSTRATEUR_2}"/data/ferme_roffiac/facade.stl,5000,6000 -n 100000 -e \
339 2> stardis_integre_1000.txt
340 echo "1000 " $(extract_stardis_computation_time.sh stardis_integre_1000.txt) \
341 >> temps_calcul_en_fonction_duree_integration_temporelle.txt
342 stardis -V 3 -M \
343 "${DEMONSTRATEUR_2}"/data/ferme_roffiac/meteo_30j_et_isolation_exterieure.txt \
344 -s "${DEMONSTRATEUR_2}"/data/ferme_roffiac/facade.stl,5000,6500 -n 100000 -e \
345 2> stardis_integre_1500.txt
346 echo "1500 " $(extract_stardis_computation_time.sh stardis_integre_1500.txt) \
347 >> temps_calcul_en_fonction_duree_integration_temporelle.txt
348 cat temps_calcul_en_fonction_duree_integration_temporelle.txt
349 
350 # Une fois de plus, les temps de calculs sont comparables.
351 
352 cd ../..