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.