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