Interpolation en Z
#########################################
+.. |HYDROSolver| image:: /_static/HYDROSolver.png
+ :align: middle
+ :width: 16pt
+ :height: 16pt
+
+.. |genereInterpolz| image:: /_static/genereInterpolz.png
+ :align: middle
+
.. |Bottom| image:: /_static/Bottom.png
:align: middle
Le maillage que nous avons généré à l'étape précédente ne contient pas d'information d'altitude.
Pour alimenter le code TELEMAC avec cette information, il faut rajouter au maillage un champ contenant la
-coordonnée Z au noeud du maillage.
+coordonnée Z au noeuds du maillage.
Le mode de calcul de la coordonnée Z a été décrit zone par zone dans la définition du cas de calcul,
dans le module HYDRO.
Calcul de l'interpolation en Z aux noeuds du maillage
=====================================================
-La constitution du champ d'altitude se fait au moyen d'un script Python, qu'il faut editer, puis exécuter.
-
-Voici le script :
-
-::
-
- # -*- coding: utf-8 -*-
-
- # ===== Description du cas, a éditer =====
- #=========================================
+La constitution du champ d'altitude se fait au moyen d'un script Python, qu'il faut préparer, puis exécuter.
- # --- nom du cas dans HYDRO
- nomCas = 'garonne_1'
+Le script utilise une association des régions du cas de calcul HYDRO aux groupes de noeuds correspondants dans le maillage.
+Une commande du module HYDROSOLVER facilite la définition de cette association.
- # --- fichier med 2D(x,y) du cas, produit par SMESH
- fichierMaillage = '/tmp/garonne_1.med'
+Il faut maintenant activer le module HYDROSOLVER, via la liste défilante des modules, ou son icône dans le bandeau : |HYDROSolver|.
+Nous utilisons la commande *Generate interpolz.py* du menu *Hydro*.
- # --- dictionnaire: (clé = nom de groupe med, valeur= nom de région)
- dicoGroupeRegion= dict(litMineur = 'garonne_1_litMineur',
- riveDroite = 'garonne_1_riveDroite',
- riveGauche = 'garonne_1_riveGauche',
- )
- # --- valeur de Z à prendre quand le noeud n'est pas trouvé dans la région (détection de problèmes)
- zUndef = 90
+Il faut sélectionner le cas de calcul dans la rubrique *HYDRO / CALCULATION CASE* de l'arbre d'étude.
+Son nom apparaît dans la première ligne *Calculation cas* du dialogue.
- # ==== Partie Générique du traitement ====
- #=========================================
+Le chemin complet du script à créer doit être renseigné dans la rubrique *Output path* (le nom du script doit se terminer par .py).
- import string
- import sys
- import salome
+Il faut désigner le fichier du maillage de départ construit à l'étape précédente dans rubrique *MED file*.
- salome.salome_init()
- theStudy = salome.myStudy
- theStudyId = salome.myStudyId
+La valeur *Undefined Z* est utilisée quand le module HYDRO ne sait pas calculer l'altitude en un point.
+C'est utilisé a postériori pour détecter d'éventuels problèmes de définition des zones de calcul dans le cas de calcul.
- from salome.hydrotools.interpolZ import interpolZ, createZfield2
+L'interpolation sur les nuages de points peut se faire de deux manières, selon que les nuages sont plus
+denses que le maillage, ou l'inverse.
+Pour des nuages de points très denses, il suffit de prendre l'altitude du point le plus proche du nuage.
+Quand le maillage est plus dense que le nuage, il vaut mieux prendre l'altitude linéarisée, obtenue par
+une triangulation préalable du nuage de points. Cette dernière méthode est plus précise
+mais un peu plus coûteuse.
- # --- Z interpolation Z sur la bathymetrie/altimetrie aux noeuds du maillage
- statz = interpolZ(nomCas, fichierMaillage, dicoGroupeRegion, zUndef)
-
- # --- ajout d'un champ aux noeud, de nom "BOTTOM", content les valeurs Z
- createZfield2(fichierMaillage)
+Il faut sélectionner les bons noms de régions en correspondance avec les noms des groupes de noeuds des faces,
+en laissant la sélection à *None* pour les autres groupes.
+ |genereInterpolz|
Le script produit plusieurs fichiers dont le nom se déduit du nom du fichier maillage d'origine
avec des suffixes différents, rangés dans le répertoire du fichier d'origine :
* garonne_1.med : fichier d'origine (coordonnée z = 0)
* garonne_1.xyz : fichier xyz (ASCII) des altitudes aux noeuds
-* garonne_1Z.med : coordonnée Z à sa valeur calculée
+* garonne_1Z.med : étape intermédiaire du script
* garonne_1F.med : coordonnée Z à sa valeur calculée, et champ "BOTTOM" avec la valeur Z aux noeuds
-Il faut recopier le script et l'adapter en fonction des noms utilisés dans le cas de calcul
-et pour le maillage.
-
Pour exécuter le script, il faut que le module HYDRO soit bien actif dans l'étude.
-Si l'on reprend une étude précédemment sauvegardée, il faut avoir activé le module HYDRO avant
-de lancer le script (il suffit de sélectionner HYDRO au moins une fois,
+**Si l'on reprend une étude précédemment sauvegardée, il faut avoir activé le module HYDRO avant
+de lancer le script** (il suffit de sélectionner HYDRO au moins une fois,
pour que les données stockées dans le fichier d'étude soient lues).
-Nous éxécutons le script avec la commande du menu *File / Load Script...*.
-Le script bloque l'interface graphique le temps de son exécution. Il affiche une trace d'exécution dans la console
+Nous exécutons le script avec la commande du menu *File / Load Script...*.
+Le script bloque l'interface graphique le temps de son exécution qui dépend de la taille du maillage
+et des nuages de point de bathymétrie. Il affiche une trace d'exécution dans la console
Python qui est affichée par défaut dans les modules GEOM et SMESH.
+Il est aussi possible d'adapter manuellement le script ci-dessous :
+
+Il faut recopier le script et l'adapter en fonction des noms de régions utilisés dans le cas de calcul
+et des noms de groupes de noeuds dans le maillage.
+
+.. literalinclude:: interpolZ.py
+ :lines: 1-
+
Visualisation de l'interpolation en Z aux noeuds du maillage
============================================================
--------------------------------
Le module MED offre une visualisation simple des champs d'un maillage MED.
-Il faut activer le module MED, puis utiliser le menu *File/Add Data Source* ou l'icône équivalente, et retrouver le fichier *garonne_1L.med*.
-En dépliant l'objet *garonne_1L.med* dans l'arbre d'étude, nous trouvons le maillage *HYDRO_Garonne_1* et le champ *BOTTOM*.
-Le menu contextuel du champ propose la commande *visualize*.
+Il faut activer le module MED, puis utiliser le menu *File/Add Data Source* ou l'icône équivalente, et retrouver le fichier *garonne_1F.med*.
+En dépliant l'objet *garonne_1F.med* dans l'arbre d'étude, nous trouvons le maillage *HYDRO_Garonne_1* et le champ *BOTTOM*.
+
+Il faut sélectionner le champ et utiliser l'icone *scalar map*.
Le champ s'affiche dans la vue 3D. Le menu contextuel de la vue 3D propose la commande *Representation / Surface with Edges*
Visualisation dans le module SMESH
----------------------------------
-A la fin de l'exécution du script d'interpolation, le maillage *HYDRO_Garonne_1* est apparu une seconde fois dans l'arbre d'étude,
-sous la première instance, avec une icone différente. S'il n'y est pas, le menu contextuel de l'arbre d'étude propose la commande *Refresh*.
+A la fin de l'exécution du script d'interpolation, le maillage *HYDRO_Garonne_1* est apparu une seconde fois dans l'arbre d'étude,
+sous la première instance, avec une icône différente. S'il n'y est pas, le menu contextuel de l'arbre d'étude propose la commande *Refresh*.
Nous affichons ce maillage dans le module SMESH, avec la commande *show*.
-Pour mieux voir le relief, il faut modifier l'échelle en Z avec l'icone |occ_view_scaling| de la vue 3D. Ici, il suffit de prendre un facteur 3 pour Z.
+Pour mieux voir le relief, il faut modifier l'échelle en Z avec l'icône |occ_view_scaling| de la vue 3D. Ici, il suffit de prendre un facteur 3 pour Z.
-*Rappel* : pour manipuler l'objet dans la vue 3D, il faut utiliser la touche <CTRL> et les boutons de la souris, ou la molette pour le zoom.
+*Rappel* : pour manipuler l'objet dans la vue 3D, il faut utiliser la touche <CTRL> et les boutons de la souris, ou la molette pour le zoom.
Voici la vue des groupes correspondant aux régions :
|Capture_meshZ|
-
- :ref:`ref_exempleInondation`
+
+.. only:: html
+
+ :ref:`ref_exempleInondation`