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 key noenhanced"
137   echo "set key autotitle columnhead"
138   echo "set multiplot layout 2, 1"
139   echo "plot 'computation_times.txt' using 1:3"
140   echo "plot 'computation_times.txt' using 1:2"
141   echo "pause -1"
142 } > plot_time.gp
143 gnuplot plot_time.gp
144 
145 # Ici on fait une courbe avec peu de points pour éviter que ce soit trop long.
146 # Commenter une courbe avec plus de points dans le TP : observer que le temps
147 # de calcul reste du même ordre quand on double le nombre de triangles.
148 
149 feh ${DEMONSTRATEUR_2}/Figures/tp2_graphique.png
150 
151 # Prendre comme point de comparaison les méthodes maillées, où ce ne serait
152 # pas du tout le cas.
153 # Bémol : ici on ne prend qu'un seul point de mesure, les temps devraient être
154 # moyennés sur plusieurs réalisations, il se peut que vous ayez donc des temps
155 # plus long pour faire tourner une simulation avec moins de triangles, auquel
156 # cas relancez le calcul.
157 
158 cd ..
159 
160 
161 #===================================================
162 # TP2 - Partie 2 : augmentation du nombre d'objets #
163 #===================================================
164 
165 # Note : Mégane n'a pas réussi à dupliquer la gyroïde dans deux directions
166 # seulement, avec la boîte l'encadrant. La configuration Dx=1,Dy=2,Dz=2,
167 # Nint=100 soles=T génère bien une géométrie mais ensuite stardis détecte
168 # plusieurs enclosures. Tous les chemins sont alors rejetés.
169 
170 # Pour le moment, elle a donc opté pour la réutilisation de la scène
171 # électronique du starter pack (en attendant).
172 
173 cp -r /home/lafrier/Stardis-Starter-Pack-0.2.0/heatsink .
174 cd heatsink
175 ls
176 
177 # Description de la scène :
178 # une pièce d'électronique, puis cette pièce répliquée de nombreuses fois.
179 
180 # Visualisation des géométries :
181 
182 paraview
183 
184 # Ouvrir les stl non préfixés de '_multiple'. Visualiser ce composant avec
185 # ses ailettes.
186 # Ouvrir les stl préfixés de '_multiple'.
187 # Visualiser la plaque avec les 50 composants.
188 
189 # Temps de calcul sur 1 élément :
190 
191 stardis -V 3 -M model.txt -m SIPw,INF -n 1000 -e
192 
193 # Lire "Computation time ="
194 
195 # Temps de calcul sur des répétitions de cet élément :
196 
197 stardis -V 3 -M model_multiple.txt -m SIPw,INF -n 1000 -e
198 
199 # Lire "Computation time ="
200 
201 # Bien qu'il y ait une réplication x50 du motif, vous voyez que le temps de
202 # calcul est du même ordre de grandeur.
203 
204 cd ..
205 
206 
207 #====================================================================
208 # TP2 - Partie 3 : augmentation du raffinement temporel des données #
209 #====================================================================
210 
211 mkdir meteo && cd meteo
212 
213 # Description de la scène :
214 # Il s'agit de la ferme de Roffiac composée de deux étages avec une seule
215 # pièce chacun. La température dans la pièce du bas est constante (par
216 # exemple climatisée), et la température du grenier est inconnue.
217 # La météo extérieure est fluctuante.
218 # On estime la température moyenne de la façade de la maison.
219 
220 # Remarque :
221 # ----------
222 # Sur EDIX les propriétés programmables sont déjà installées. Si ce
223 # n'est pas le cas sur un autre système, il faut les installer avec les
224 # commandes suivantes :
225 #
226 #   cd demonstrateur_2/libs/lib_cosmo
227 #   mkdir build && cd build
228 #   cmake ../cmake -DCMAKE_INSTALL_PREFIX=../../local
229 #   make install
230 #   cd ../../
231 #-----------
232 
233 # Créer la variable d'environnement suivante :
234 
235 LD_LIBRARY_PATH="${DEMONSTRATEUR_2}"/libs/local/lib:"${LD_LIBRARY_PATH}"
236 
237 # Visualiser les données plus détaillées :
238 # Ici, afin de permettre une visualisation rapide, l'abscisse représente la
239 # position des données dans le fichier et non la date. Il est possible
240 # d'afficher ces données en fonction de la date en affectant la variable
241 # 'NO_TIMESTAMP_COMPUTATION=1' dans le fichier 'run_visualization.sh'.
242 
243 mkdir visualisation_donnees_meteo_30j && cd visualisation_donnees_meteo_30j
244 sh "${DEMONSTRATEUR_2}"/TP2/src/3_house/run_visualization.sh \
245   "${DEMONSTRATEUR_2}"/data/donnees_meteo_basiques/2_meteo_sur_30j.txt
246 rm -f graphe_10.png
247 feh graphe_*.png
248 
249 # Utilisez les flèches pour passer d'un graphique au suivant.
250 # Vous voyez des cycles journaliers dans les données.
251 
252 # Lancer stardis sur les données les plus détaillées :
253 
254 cd ..
255 stardis -V 3 -M \
256 "${DEMONSTRATEUR_2}"/data/ferme_roffiac/meteo_30j_et_isolation_exterieure.txt \
257 -s "${DEMONSTRATEUR_2}"/data/ferme_roffiac/facade.stl,5000 -n 100000 -e \
258 2> stardis_meteo_30j_et_isolation_exterieure.txt
259 
260 #stardis -V 3 -M meteo_30j_et_isolation_exterieure.txt -s facade.stl,5000 \
261 #-n 100000 -e 2> stardis_meteo_30j_et_isolation_exterieure.txt
262 
263 # Notez cette température estimée.
264 
265 # Visualiser les données moins détaillées :
266 
267 mkdir visualisation_donnees_meteo_moyenne_30j
268 cd visualisation_donnees_meteo_moyenne_30j
269 sh "${DEMONSTRATEUR_2}"/TP2/src/3_house/run_visualization.sh \
270   "${DEMONSTRATEUR_2}"/data/donnees_meteo_basiques/3_meteo_moyennee.txt
271 rm -f graphe_10.png
272 feh graphe_*.png
273 
274 # Vous voyez qu'il y a beaucoup moins de points que dans le graphique
275 # précédent, ils couvrent la même plage temporelle.
276 
277 # Relancer stardis sur les données les moins détaillées :
278 
279 cd ..
280 stardis -V 3 -M \
281 "${DEMONSTRATEUR_2}"/data/ferme_roffiac/meteo_moyenne_30j_et_isolation_exterieure.txt \
282 -s "${DEMONSTRATEUR_2}"/data/ferme_roffiac/facade.stl,5000 -n 100000 -e \
283 2> stardis_meteo_moyenne_30j_et_isolation_exterieure.txt
284 
285 # Notez cette température estimée. Elle est proche de la précédente.
286 # Les barres d'erreur sont comparables.
287 
288 # Observer le temps de calcul obtenu dans les deux cas :
289 
290 sed -n '/Computation time =/p' \
291   stardis_meteo_moyenne_30j_et_isolation_exterieure.txt
292 sed -n '/Computation time =/p' \
293   stardis_meteo_30j_et_isolation_exterieure.txt
294 
295 # > Il est comparable !!
296 
297 # Comparaison des valeurs de température estimées dans les deux cas :
298 
299 sh "${DEMONSTRATEUR_2}"/TP2/src/3_house/run_computation_time.sh
300 
301 # Comparaison des temps de calcul dans les deux cas :
302 
303 gnuplot plot_computation_time.gp
304 
305 # Appuyer sur q pour fermer le plot. Le second graphique montre la valeur de
306 # la température estimée.
307 
308 gnuplot plot_temperature.gp
309 
310 cd ..
311 
312 #=====================================================================
313 # TP2 - Partie 4 : augmentation de la plage temporelle d'intégration #
314 #=====================================================================
315 
316 mkdir integration_temporelle && cd integration_temporelle
317 
318 # Intégrer sur 1 jour ou sur une semaine. Ici il faudrait la même barre d'erreur
319 
320 echo "duree_integration temps_calcul" \
321   > temps_calcul_en_fonction_duree_integration_temporelle.txt
322 stardis -V 3 -M \
323 "${DEMONSTRATEUR_2}"/data/ferme_roffiac/meteo_30j_et_isolation_exterieure.txt \
324 -s "${DEMONSTRATEUR_2}"/data/ferme_roffiac/facade.stl,5000,5500 -n 100000 -e \
325 2> stardis_integre_500.txt
326 echo "500 " $(extract_stardis_computation_time.sh stardis_integre_500.txt) \
327 >> temps_calcul_en_fonction_duree_integration_temporelle.txt
328 stardis -V 3 -M \
329 "${DEMONSTRATEUR_2}"/data/ferme_roffiac/meteo_30j_et_isolation_exterieure.txt \
330 -s "${DEMONSTRATEUR_2}"/data/ferme_roffiac/facade.stl,5000,6000 -n 100000 -e \
331 2> stardis_integre_1000.txt
332 echo "1000 " $(extract_stardis_computation_time.sh stardis_integre_1000.txt) \
333 >> temps_calcul_en_fonction_duree_integration_temporelle.txt
334 stardis -V 3 -M \
335 "${DEMONSTRATEUR_2}"/data/ferme_roffiac/meteo_30j_et_isolation_exterieure.txt \
336 -s "${DEMONSTRATEUR_2}"/data/ferme_roffiac/facade.stl,5000,6500 -n 100000 -e \
337 2> stardis_integre_1500.txt
338 echo "1500 " $(extract_stardis_computation_time.sh stardis_integre_1500.txt) \
339 >> temps_calcul_en_fonction_duree_integration_temporelle.txt
340 cat temps_calcul_en_fonction_duree_integration_temporelle.txt
341 
342 # Une fois de plus, les temps de calculs sont comparables.
343 
344 cd ../..