1 #!/bin/sh -e 2 3 4 #================================== 5 # TP1 : premier pas avec Stardis. # 6 #================================== 7 8 # Conditions de réalisation 9 # ------------------------- 10 11 # Nous supposerons que le TP est réalisé par un utilisateur 12 # travaillant depuis le système d'exploitation EDIX. 13 14 15 #======================================== 16 # TP1 - Partie 1 : les débuts dans EDIX # 17 #======================================== 18 19 # Se connecter en tant qu'etudiant : 20 21 # login: etudiant 22 # mot de passe: etudiant&1edix 23 24 # Vous êtes maintenant dans le système d'exploitation EDIX. 25 # Vous pouvez consulter la documentation en saisissant la commande 26 # suivante : 27 28 # etudiant:~ $ man edix 29 30 # Avant de poursuivre le TP, vous êtes invité à lire cette page de 31 # manuel ainsi que celles vers lesquelles elle renvoit, notamment 32 33 # etudiant:~ $ man edix_man 34 # etudiant:~ $ man edix_premiers_pas 35 # etudiant:~ $ man edix_gestes_de_base 36 # etudiant:~ $ man edix_interface_graphique 37 # etudiant:~ $ man edix_shell 38 # etudiant:~ $ man edix_vim 39 40 # Au minimum, vous aurez besoin d'apprendre à lancer l'interface 41 # graphique avec la commande 42 43 # etudiant:~ $ startx 44 45 # et à ouvrir un terminal graphique avec la combinaison de touches 46 # Alt + Entrée. 47 48 # Le démonstrateur et l'ensemble des logiciels ont été installés 49 # chez l'utilisateur lafrier, comme vous pouvez le voir avec la commande 50 51 ls /home/lafrier/ 52 53 # Vous allez travailler dans le répertoire /home/etudiant. 54 # Vous pouvez vérifier que vous êtes bien dans ce répertoire à l'aide de 55 # la commande 56 57 pwd 58 59 # qui affiche le chemin vers le répertoire courant. 60 # La commande 61 62 ls 63 64 # vous permet ensuite d'afficher les fichiers et dossiers du répertoire 65 # courant. 66 67 # Il vous faudra ensuite créer un répertoire à votre nom : 68 69 mkdir mon_nom 70 71 # Avec 72 73 ls 74 75 # vous observerez que le répertoire a été créé. 76 77 # Remarques 78 # --------- 79 # Si on veut renommer le répertoire parce qu'on a fait une faute : 80 # 81 # etudiant:~ $ mv mon_nom_raté nom_nom_correct 82 # 83 # Si on veut supprimer le répertoire : 84 # 85 # etudiant:~ $ rm -r mon_nom 86 # --------- 87 88 # On se rend dans le répertoire créé : 89 90 cd mon_nom 91 92 # On crée un sous-répertoire dédié au TP1 et on se rend dans ce 93 # sous-répertoire : 94 95 mkdir TP1 96 cd TP1 97 98 # On recopie les données utiles au TP1 dans un nouveau répertoire appelé 99 # cube : 100 101 cp -r "${DEMONSTRATEUR_2}"/data/cube cube 102 cd cube 103 cp "${DEMONSTRATEUR_2}"/TP1/src/model.txt . 104 105 106 #==================================== 107 # TP1 - Partie 2 : exécuter stardis # 108 #==================================== 109 110 111 # Partie 2.1 : première exécution de stardis 112 # ------------------------------------------ 113 114 # Pour pouvoir exécuter stardis, il faut réaliser l'opération suivante à 115 # chaque fois que vous ouvrirez un nouveau terminal : 116 117 . /home/lafrier/star-build/local/etc/stardis.profile 118 119 # Elements techniques de compréhension 120 # ------------------------------------ 121 # Afficher le fichier pour voir que des variables vont être modifiées. 122 # Ces variables sont enrichies avec les chemins vers le dossier d'installation 123 # de stardis : 124 # 125 # etudiant:~/mon_nom/TP1/cube $ cat \ 126 # /home/lafrier/Stardis-0.14.0/local/etc/stardis.profile 127 # 128 # Vérifier que ces variables ont bien été mises à jour : 129 # 130 # etudiant:~/mon_nom/TP1/cube $ echo ${CPATH} 131 # ------------------------------------ 132 # 133 # Afficher les fichiers dans le répertoire de travail : 134 135 ls 136 137 # On voit qu'on a différents types de fichiers, d'extensions : 138 # - txt : le fichier décrivant le système physique 139 # - stl : description des géométries du système - on verra dans le TP3 140 # comment les construire 141 # 142 # On commence par ouvrir le fichier `model.txt`, c'est la description 143 # informatique du système physique considéré. 144 145 cat model.txt 146 147 # Il s'agit d'un cube solide, dont les parois de gauche et de droite sont à 148 # température imposée. Les 4 autres parois sont adiabatiques, le flux est 149 # imposé à 0 dans le fichier "model.txt". Le fichier commence par décrire 150 # les milieux : ici le solide, associé à une géométrie "solid.stl". 151 # Ensuite sont décrites les conditions limites, ici de deux types différents. 152 # Ces conditions limites sont elles aussi associées à des géométries. 153 # L'exercice 3.2 sera dédié à la compréhension de la syntaxe pour décrire 154 # le système. 155 # 156 # Avec paraview, on commence par visualiser les stl (à réaliser de 157 # préférence dans un autre bureau) : 158 159 paraview 160 161 # File > Open 162 # Sélectionner tous les stl 163 # Cliquer sur Appliquer / Apply 164 # cliquer sur l'oeil pour cacher ou voir les différents objets 165 # 166 # Lancer le premier calcul stardis : 167 168 stardis -V 3 -M model.txt -p 0.5,0.5,0.5 -n 10000 -e 169 170 # On observe et commente la sortie : 171 # - On exécute le code stardis sur le système "model.txt". 172 # - On estime la température en un point, ici au centre du cube, à l'aide de 173 # 10000 réalisations. 174 # - On a choisi un mode "verbeux" avec beaucoup d'informations, 175 # indiquant notamment les géométries chargées et les temps de calcul. 176 # - A la fin, on observe la valeur de température estimée et la barre 177 # d'erreur associée, ainsi que le nombre de chemins "ratés" (en raison de 178 # problèmes numériques). 179 # 180 # On fait une nouvelle estimation avec plus de réalisations : 181 182 stardis -V 3 -M model.txt -p 0.5,0.5,0.5 -n 40000 -e 183 184 # On observe que la barre d'erreur a diminué : l'estimation est plus précise. 185 186 187 # Partie 2.2 : visualiser des chemins 188 # ----------------------------------- 189 190 191 # Partie 2.2.1 : chemins de diffusion uniquement avec condition limite de 192 # Dirichlet (température imposée) 193 # ----------------------------------------------------------------------- 194 195 # Enregistrer des chemins : 196 197 stardis -V 3 -M model.txt -p 0.5,0.5,0.5 -n 10 -D all,path -e 198 ls 199 200 # on observe que 10 fichiers path00000*.vtk ont été produits 201 202 # Visualiser les chemins avec paraview en utilisant un script python 203 # déjà préparé à cet effet : 204 205 paraview --script="${DEMONSTRATEUR_2}"/TP1/src/script_paraview_cube.py 206 207 # Alternativement, on peut faire les différentes étapes à la main. 208 # Dans la fenêtre paraview : 209 # File > Open 210 # cliquer sur la flèche à côté de path.vtk 211 # sélectionner l'ensemble des fichiers (path000.vtk jusqu'à path009.vtk) 212 # par défaut les chemins ne sont pas visibles, il faut cliquer sur Apply. 213 # Afficher la scène en chargeant solid.stl 214 # Changer la représentation de "Surface" à "outline" pour visualiser 215 # uniquement les arêtes. 216 # 217 # Le script charge 10 chemins en même temps. 218 # Commencez par en visuliser un seul : en cliquant sur l'oeil devant chaque 219 # élément "path" du Pipeline Browser, vous allez les masquer. 220 # 221 # Ce que vous observez : 222 # Les chemins partent du point d'observation, ici au centre du cube, 223 # ils "ressemblent" à du mouvement brownien. 224 # Les sommets sont construits en échantillonnant uniformément une position 225 # sur la surface d'une petite sphère (de taille delta) centrée sur le sommet 226 # précédent. 227 # 228 # Dans cet exemple, les chemins terminent en paroi au niveau des conditions 229 # limites de Dirichlet uniquement. Lorsqu'ils tapent une paroi adiabatique, 230 # ils sont réfléchis et ne s'arrêtent pas. Le poids de Monte-Carlo retenu 231 # par le chemin est la température imposée au niveau de la paroi. 232 # 233 # Pour tout problème de visualisation avec paraview, regardez l'image 234 # ci-dessous : 235 236 # etudiant:~ $ feh ${DEMONSTRATEUR_2}/Figures/tp1_chemins_dans_cube_solide.png 237 238 # Le chemin part du centre du cube, point sonde auquel on souhaite évaluer la 239 # température. Il s'arrête lorsqu'il renconstre la paroi de gauche, dont la 240 # température est connue et retenue comme poids de Monte-Carlo. 241 242 243 # Partie 2.2.2 : chemins pour condition limite de type Robin 244 # ---------------------------------------------------------- 245 246 # On change maintenant la condition limite du système. 247 # La température n'est plus imposée aux parois latérales du cube. 248 # Le cube est plongé dans un fluide dont la température est connue, 249 # il y a un coefficient d'échange convectif entre le cube solide et le fluide. 250 # De plus, la température radiative de l'environnement est connue. 251 252 cp "${DEMONSTRATEUR_2}"/TP1/src/modele_cube_dans_fluide.txt . 253 stardis -V 3 -M modele_cube_dans_fluide.txt -p 0.5,0.5,0.5 -n 10000 -e 254 255 # On génère juste 10 chemins (pas besoin de plus pour l'analyse). 256 257 stardis -V 3 -M modele_cube_dans_fluide.txt -p 0.5,0.5,0.5 -n 10 \ 258 -D all,path_conv_ -e 259 paraview \ 260 --script="${DEMONSTRATEUR_2}"/TP1/src/script_paraview_cube_dans_fluide.py 261 262 # Les chemins s'arrêtent donc en paroi soit lorsqu'ils basculent en convection 263 # (et la température de fluide environnant est connue), 264 # ou bien lorsqu'ils basculent en rayonnement 265 # (et la température radiative de l'environnement est connue). 266 267 # Pour tout problème de visualisation avec paraview, regardez l'image 268 # ci-dessous : 269 270 # etudiant:~ $ feh \ 271 # ${DEMONSTRATEUR_2}/Figures/tp1_chemins_dans_cube_avec_env_radiatif.png 272 273 # Le chemin part du centre du cube, atteint la paroi de gauche puis bascule en 274 # rayonnement avant de s'arrêter. Le poids de Monte-Carlo retenu est la 275 # température de l'environnement radiatif. 276 277 278 # Partie 2.2.3 : chemins couplant 3 modes de transferts thermiques 279 # ---------------------------------------------------------------- 280 281 # Autre exemple, illustrant le couplage conduction / convection / rayonnement. 282 # Le chemin alterne maintenant entre différents modes physiques. 283 # Il s'agit d'un système avec deux parties : un cube solide dans lequel se 284 # trouve une cavité fluide. Cette cavité fluide est sphérique, dans laquelle 285 # deux modes de transfert thermiques ont lieu : de la convection et du 286 # rayonnement entre ses parois. Le modèle de convection est de type cavité 287 # parfaitement brassée : la température est uniforme et peut varier dans le 288 # temps. Le point d'observation peut être placé en tout point du fluide 289 # (ici au centre) : la température mesurée sera la même. 290 291 stardis -V 3 -M "${DEMONSTRATEUR_2}"/data/boule_dans_cube/model.txt \ 292 -p 0.5,0.5,0.5 -n 10 -D all,coupled_path_ -e 293 paraview \ 294 --script="${DEMONSTRATEUR_2}"/TP1/src/script_paraview_boule_dans_cube.py 295 296 # Les chemins partent du centre du fluide en rayonnement ou bien en convection. 297 # Ils basculent d'un mode de transfert à l'autre, éventuellement en conduction 298 # quand ils sont dans le solide. Ils finissent par basculer en conduction puis 299 # s'arrêtent au niveau d'une paroi du cube où la température est connue. 300 # 301 # Pour tout problème de visualisation avec paraview, visualiser l'image 302 # ci-dessous : 303 304 # etudiant:~ $ feh \ 305 # ${DEMONSTRATEUR_2}/Figures/tp1_chemins_dans_cube_avec_boule.png 306 307 # Le chemin part du centre de l'inclusion fluide, il alterne entre convection, 308 # rayonnement et conduction jusqu'à rencontrer la paroi de droite dont la 309 # température est connue et retenue comme poids de Monte-Carlo. 310 311 312 #=========================================== 313 # Partie 3 : découvrir les pages de manuel # 314 #=========================================== 315 316 317 # Partie 3.1 : lire la documentation de stardis pour changer d'observable 318 # ----------------------------------------------------------------------- 319 320 # Jusqu'ici on vous a donné les lignes de commande à taper, 321 # pour comprendre les différents arguments et leur rôle, vous allez lire la 322 # documentation : 323 324 man stardis 325 326 # La documentation prendra toujours la forme "man mon_programme", 327 # comme c'est le cas pour toutes les autres commandes unix comme `ls` ou `cd`. 328 # Les pages de manuel ont toujours le même format : 329 # - Description générale du programme 330 # - Description de chacun des arguments 331 # - Quelques exemples d'utilisation 332 333 # Dans la documentation, cherchez ce que signifient les arguments : 334 # a/ -M model.txt ---> cet argument est obligatoire, c'est la description 335 # de la scène 336 # b/ -n 1000 ---> le nombre de réalisations de Monte-Carlo 337 # c/ -V 3 ---> est un niveau de verbosité / quantité de détails 338 # donnés dans la console (vous pouvez tester différentes 339 # valeurs) 340 # d/ Exercice : que signifie -D ? Quelles informations supplémentaires 341 # faut-il renseigner ? 342 # e/ Exercice : que signifie -p ? Quelles informations supplémentaires 343 # faut-il renseigner ? 344 # 345 # Correction : 346 # d/ l'argument -D nécessite de renseigner deux informations : 347 # le mot clé `error` ou `success` ou `all` ainsi qu'un préfixe de nom de 348 # fichier. Avec cet argument, des chemins seront produits au format "vtk", 349 # il peut s'agir uniquement des chemins ayant produit des erreurs (pour 350 # le debug), des succès, ou tous. 351 # e/ L'argument -p controle la position du point sonde où est estimée la 352 # température : il faut renseigner la position en 3D (x,y,z). 353 # En option, on peut spécifier le temps d'observation (sinon ce sera INF 354 # pour le stationnaire), ou bien la durée d'intégration temporelle. 355 # 356 # Exercice : 357 # Si vous avez bien compris, sur le premier système "model.txt" : 358 # - lancez un calcul pour une autre position du point sonde (toujours à 359 # l'intérieur du solide). Quelle est la température estimée ? Est ce que 360 # ça vous parait cohérent vu le système ? Par exemple si la sonde est plus 361 # proche de la paroi froide, la température doit être plus faible. 362 # Visualisez quelques chemins (ils doivent donc partir de cette nouvelle 363 # position). 364 # - lancez maintenant un calcul qui n'est plus au stationnaire, mais au temps 365 # d'observation t=10s. Visualisez quelques chemins, vous devez observer que 366 # certains d'entre eux s'arrêtent dans le solide et plus seulement à la 367 # paroi : ils retiennent la température initiale comme poids de Monte-Carlo. 368 # - réalisez un calcul avec l'algorithme Walk-On-Spheres plutôt que 369 # delta-spheres au stationnaire. Visualisez ces chemins. 370 # 371 # Correction : 372 # déplacer le point sonde 373 374 stardis -V 3 -M model.txt -p 0.85,0.85,0.85 -n 10000 -e 375 stardis -V 3 -M model.txt -p 0.85,0.85,0.85 -n 10 -D all,path_probe_ -e 376 377 # ajouter un temps d'observation 378 379 stardis -V 3 -M model.txt -p 0.5,0.5,0.5,10 -n 10000 -e 380 stardis -V 3 -M model.txt -p 0.5,0.5,0.5,10 -n 10 -D all,path_time_ -e 381 382 # utiliser l'algorithme Walk-On-Sphere 383 stardis -V 3 -M model.txt -p 0.5,0.5,0.5 -n 10 -a wos -e -D all,path_wos_ 384 stardis -V 3 -M model.txt -p 0.5,0.5,0.5 -n 100000 -a wos -e 385 # etudiant:~ $ feh \ 386 # "${DEMONSTRATEUR_2}"/Figures/tp1_chemins_dans_cube_solide_wos.png 387 388 389 # Partie 3.2 : lire la documentation pour modifier des paramètres physiques 390 # du système 391 # ------------------------------------------------------------------------- 392 393 # Le système est décrit dans le fichier suivant : 394 395 cat model.txt 396 397 # Comment identifier dans ce fichier le(s) paramètre(s) à modifier ? 398 # On va lire le manuel pour comprendre le format de ce fichier. 399 400 man stardis-input 401 402 # Alternative : la même documentation peut être visualisée en html : 403 404 # etudiant:~ $ firefox-bin \ 405 # https://www.meso-star.com/projects/stardis/man/man5/stardis-input.5.html 406 407 # Se rendre dans l'onglet 9 où firefox a été lancé. 408 409 # La syntaxe du système est décrite sous la forme d'une "grammaire" 410 # voir https://fr.wikipedia.org/wiki/Grammaire_formelle. 411 # Elle est composée de règles, représentées par les parenthèses. 412 # Ces règles sont ensuite remplacées par des valeurs ou bien d'autres règles. 413 414 # On illustre sur un exemple du fichier model.txt : la ligne qui commence 415 # par SOLID. 416 # Que signifient les éléments de cette ligne ? 417 # Dans la documentation, la règle première ⟨thermal-system⟩ est remplacée 418 # par ⟨description-line⟩, puis ⟨medium⟩, ⟨solid⟩ et ⟨solid-const⟩. 419 # On détaille le remplacement de la règle : 420 # ⟨solid-const⟩ ::= SOLID ⟨medium-name⟩ ⟨lambda⟩ ⟨rho⟩ ⟨cp⟩ \ 421 # ⟨delta⟩ ⟨initial-temp⟩ ⟨imposed-temp⟩ \ 422 # ⟨volumic-power⟩ ⟨triangle-sides⟩ ... 423 424 # Dans le manuel, recherchez le mot clé SOLID. 425 # Astuce : tapez '/' puis le mot cherché, 426 # les touches 'n' ou 'N' permettent de déplacer le curseur à l'occurence 427 # suivante ou précédente. 428 429 # La première règle <medium-name> est remplacée par la règle 430 # ⟨medium-name⟩ ::= string 431 # c'est-à-dire par une chaîne de caractère : le nom associé à ce solide. 432 433 # La seconde règle <lambda> est la suivante : 434 # ⟨lambda⟩ ::= real # Conductivity > 0 [W/m/K] 435 # Le troisième élément est donc un réel qui indique la conductivité 436 # du solide. 437 438 # Exercice : pour cette ligne commençant par "SOLID", identifiez ce que 439 # signifie chacun des éléments. Faire le lien avec les paramètres physiques 440 # et numériques du système présenté dans l'introduction. 441 442 # Exercice : faire pareil avec la ligne commençant par T_BOUNDARY_FOR_SOLID 443 # du fichier model.txt 444 445 # Exercice : faire pareil avec la ligne commençant par H_BOUNDARY_FOR_SOLID 446 # du fichier modele_cube_dans_fluide.txt 447 448 # Vous allez maintenant éditer ces propriétés. 449 450 # Dans EDIX, l'éditeur de texte privilégié est `vim` dont voici quelques 451 # commandes "pour s'en sortir". 452 # Il fonctionne avec 3 modes : "normal", "insertion" et "visuel". 453 # Ici on aura besoin de taper : 454 # i pour basculer en mode Insertion et éditer le texte 455 # `Echap` pour basculer à nouveau en mode "normal" où on peut lancer les 456 # commandes suivantes : 457 # :w pour sauvegarder 458 # :q pour quitter 459 # Pour se former à cet outil : vimtutor est un tutoriel qui permet de voir 460 # les commandes de base. 461 462 vim model.txt 463 464 # Exercice : 465 # Editez les paramètres suivants en vous aidant du manuel de stardis : 466 # a/ température imposée à gauche 467 # b/ température initiale (attention, pour observer son impact sur le calcul, 468 # indiquer un temps d'observation) 469 # c/ augmenter le coefficient d'échange convectif dans le fichier 470 # "modele_cube_dans_fluide.txt" et commentez la température obtenue 471 472 # Correction : 473 # a/ température imposée à gauche 474 # T_BOUNDARY_FOR_SOLID LTEMP 300 left_bc.stl 475 # ^^^ 476 477 stardis -V 3 -M model.txt -p 0.5,0.5,0.5 -n 10000 -e 478 479 # Observer une augmentation ou diminution de la température de la sonde. 480 # 481 # b/ température initiale, regarder au stationnaire et à t = 10 482 # SOLID CUBE 0.1 25 2 0.01 300 UNKNOWN 10 FRONT solid.stl 483 # ^^^ 484 485 stardis -V 3 -M model.txt -p 0.5,0.5,0.5 -n 10000 -e 486 487 # Si t=inf, aucun changement de la température du point sonde. 488 489 stardis -V 3 -M model.txt -p 0.5,0.5,0.5,10 -n 10000 -e 490 491 # Si faible temps d'observation, alors cela a un impact sur la température 492 # du point sonde. 493 494 # c/ augmenter h du fichier modele_cube_dans_fluide.txt ; h = 1000 495 496 vim modele_cube_dans_fluide.txt 497 498 # H_BOUNDARY_FOR_SOLID EXT 320 0.5 0.5 10 320 \ 499 # "${DEMONSTRATEUR_2}"/data/cube/right_bc.stl \ 500 # "${DEMONSTRATEUR_2}"/data/cube/center_bc.stl \ 501 # "${DEMONSTRATEUR_2}"/data/cube/left_bc.stl 502 ^^^ 503 stardis -V 3 -M modele_cube_dans_fluide.txt -p 0.5,0.5,0.5,10 -n 10000 -e 504 505 # Le fluide dont la température est connue est bien plus souvent échantillonné 506 # que la température radiative de l'environnement. Vous le voyez sur la valeur 507 # de la température estimée. 508 509 # Pour aller plus loin 510 # -------------------- 511 # La documentation existe aussi pour spécifier la sortie de stardis lorsque 512 # l'option `-e` n'est pas utilisée : 513 514 man stardis-output 515 516 # C'est utile notamment lorsqu'on stocke la sortie de stardis pour réaliser 517 # des graphiques. 518 519 #==================================================================== 520 # Partie 4 : explorations en autonomie - jouer avec le starter-pack # 521 #==================================================================== 522 523 ls /home/lafrier/Stardis-Starter-Pack-0.2.0 524 525 # Il n'y a pas que l'exemple du cube dans le starter-pack. 526 # Dans chaque dossier il y a un exemple avec 527 # - la description du système physique 528 # - les géométries (stl) 529 # - et des scripts qui automatisent les appels à stardis que vous venez de 530 # lancer dans le terminal (il est possible de les ouvrir et les lire pour 531 # s'en rendre compte). 532 533 # Par exemple sur un milieu poreux : 534 535 cd .. 536 cp -r /home/lafrier/Stardis-Starter-Pack-0.2.0/porous . 537 cd porous 538 539 # Lire le fichier décrivant la scène : 540 541 cat porous.txt 542 543 # On a maintenant deux solides, et 4 conditions limites. 544 # Les géométries sont définies dans de nouveaux stl. 545 # Pour savoir ce que vous allez exécuter : 546 547 cat run_IR_rendering.sh 548 549 # Vous voyez qu'il y aura des images en sortie. 550 # Pour exécuter et pour voir qu'il y a bien de nouveaux fichiers (images) : 551 552 sh run_IR_rendering.sh 553 ls 554 555 # Pour visualiser l'image sortie : 556 557 feh IR_rendering_320x320x32.ppm 558 559 # Vous verrez dans le TP4 les différents types d'observables qu'on peut 560 # estimer.