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