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 ../..