From 502c48f2523f11f288630caea1483a9b4758393e Mon Sep 17 00:00:00 2001 From: nicolas Date: Fri, 28 Jun 2013 16:50:41 +0000 Subject: [PATCH] complements --- doc/en/demarrage_rapide.rst | 2 +- doc/en/divers.rst | 15 +-- doc/en/glossaire.rst | 2 +- doc/en/gui_create_boundary.rst | 16 +-- doc/en/gui_create_case.rst | 20 ++-- doc/en/gui_create_hypothese.rst | 20 ++-- doc/en/gui_create_iteration.rst | 16 +-- doc/en/gui_create_zone.rst | 20 ++-- doc/en/gui_homard.rst | 10 +- doc/en/gui_mesh_info.rst | 18 ++-- doc/en/gui_usage.rst | 8 +- doc/en/index.rst | 11 +- doc/en/intro.rst | 186 ++++++++++++++++++++++++++++++-- doc/en/regles.rst | 107 ++++++++++++++++++ doc/en/tui_create_boundary.rst | 12 +-- doc/en/tui_create_case.rst | 18 ++-- doc/en/tui_create_hypothese.rst | 22 ++-- doc/en/tui_create_iteration.rst | 18 ++-- doc/en/tui_create_zone.rst | 10 +- doc/en/tui_homard.rst | 8 +- doc/en/tui_usage.rst | 2 +- doc/en/tutorials.rst | 14 +-- doc/fr/gui_create_boundary.rst | 8 +- doc/fr/index.rst | 1 + doc/fr/regles.rst | 106 ++++++++++++++++++ doc/images/cl_0.gif | Bin 0 -> 1411 bytes doc/images/cl_1.gif | Bin 0 -> 2694 bytes doc/images/cl_2.gif | Bin 0 -> 2864 bytes doc/images/cl_3.gif | Bin 0 -> 2831 bytes doc/images/cl_4.gif | Bin 0 -> 3862 bytes doc/images/cl_5.gif | Bin 0 -> 2675 bytes doc/images/cl_6.gif | Bin 0 -> 2829 bytes 32 files changed, 530 insertions(+), 140 deletions(-) create mode 100644 doc/en/regles.rst create mode 100644 doc/fr/regles.rst create mode 100644 doc/images/cl_0.gif create mode 100644 doc/images/cl_1.gif create mode 100644 doc/images/cl_2.gif create mode 100644 doc/images/cl_3.gif create mode 100644 doc/images/cl_4.gif create mode 100644 doc/images/cl_5.gif create mode 100644 doc/images/cl_6.gif diff --git a/doc/en/demarrage_rapide.rst b/doc/en/demarrage_rapide.rst index cb1f3368..0188f486 100644 --- a/doc/en/demarrage_rapide.rst +++ b/doc/en/demarrage_rapide.rst @@ -1,7 +1,7 @@ .. _demarrage_rapide: Quick start -=========== +########### .. index:: single: start .. index:: single: example diff --git a/doc/en/divers.rst b/doc/en/divers.rst index af8c58c7..fe90bcf5 100644 --- a/doc/en/divers.rst +++ b/doc/en/divers.rst @@ -1,15 +1,15 @@ .. _gui_divers: Miscellaneous -============= +############# References -"""""""""" +********** .. index:: single: reference The HOMARD software was subject of publications techniques in the course of conferences these last years. References of main documents are presented here. Main reference -^^^^^^^^^^^^^^ +============== For a reference to HOMARD, use: G. Nicolas and T. Fouquet, Adaptive Mesh Refinement for Conformal Hexahedral Meshes, "*Finite Elements in Analysis and Design*", Vol. 67, pp. 1-12, 2013, doi:10.1016/j.finel.2012.11.008 @@ -17,7 +17,7 @@ G. Nicolas and T. Fouquet, Adaptive Mesh Refinement for Conformal Hexahedral Mes `Available here `_ Splitting meshing -^^^^^^^^^^^^^^^^^ +================= * G. Nicolas, T. Fouquet, Conformal hexaedral meshes and adaptive mesh refinement, VI International Conference on Adaptive Modeling and Siumulation, "*ADMOS 2013*", J.P. Moitinho de Almeida, P. Diez, C. Tiago and N. Pares (Eds), Lisbonne, pp. 515-526, 2013 * G. Nicolas, T. Fouquet, Hexaedral mesh adaptation for finite volume methods, III International Conference on Adaptive Modeling and Siumulation, "*ADMOS 2007*", K. Runesson, P. Diez (Eds), Goteborg, pp. 174-177, 2007 @@ -25,7 +25,7 @@ Splitting meshing * G. Nicolas, F. Arnoux-Guisse, O. Bonnin, Un logiciel d'adaptation de maillage en 2D et 3D, 27ème Congrès d'Analyse Numérique, Super-Besse, France, May 29-June 2, 1995. Error estimators -^^^^^^^^^^^^^^^^ +================ * A. Ern, S. Meunier, A posteriori error analysis of Euler-Galerkin approximations to coupled elliptic-parabolic problems", ESAIM: M2AN 43 (2009) 353-375. * J. Delmas, Stratégies de controle d'erreur en calcul de structures industrielles., PhD of the Université de Picardie, France, April 2008 @@ -38,13 +38,14 @@ Error estimators * O. Bonnin, B. Métivet, G. Nicolas, F. Arnoux-Guisse, L. Léal de Sousa, Adaptive Meshing for N3S Fluid Mechanics Code, "*Computational Fluid Dynamics '94*", ECCOMAS Stuttgart, Allemagne, pp. 201-208, Wiley 1994. Applications -^^^^^^^^^^^^ +============ + * S. Meunier, R. Fernandes, Mesh Adaptation for Coupled Hydro-Mechanical Industrial Studies, V International Conference on Adaptive Modeling and Siumulation, "*ADMOS 2011*", D. Aubry, P. Diez, B. Tie and N. Pares (Eds), Paris, pp. 337-338, 2011 * O. Hartmann, O. Bonnin, D. Gasser, An Adaptive Meshing for Turbomachinery Geometries, "*Computational Fluid Dynamics '98*", ECCOMAS Athènes, Greece, Wiley 1998. Evolutions of the module -"""""""""""""""""""""""" +************************ .. index:: single: evolution Here are the main evolutions de HOMARD from the first release in SALOME 6.5. diff --git a/doc/en/glossaire.rst b/doc/en/glossaire.rst index 79348278..4587aafc 100644 --- a/doc/en/glossaire.rst +++ b/doc/en/glossaire.rst @@ -1,7 +1,7 @@ .. _glossaire: Glossary -======== +######## .. glossary:: :sorted: diff --git a/doc/en/gui_create_boundary.rst b/doc/en/gui_create_boundary.rst index b962f747..34804228 100644 --- a/doc/en/gui_create_boundary.rst +++ b/doc/en/gui_create_boundary.rst @@ -1,7 +1,7 @@ .. _gui_create_boundary: The boundary -============ +############ .. index:: single: boundary .. index:: single: frontière @@ -14,7 +14,7 @@ Il existe deux modes de description d'une fronti Discrete boundary -================= +***************** Le suivi d'une frontière discrète se fera en sélectionnant une frontière choisie dans la liste des frontières discrètes existantes. @@ -39,7 +39,7 @@ Si des fronti Analytical boundary -=================== +******************* Au démarrage, SALOME affiche un tableau avec un seule colonne. Cette colonne contient la liste de tous les groupes du maillage initial définissant le cas. .. image:: images/create_boundary_an_1.png @@ -82,7 +82,7 @@ Il existe trois types de fronti Cylindre -"""""""" +======== .. index:: single: cylindre Le cylindre est défini par un point de l'axe, son axe et son rayon. L'axe est défini par un vecteur. La norme de ce vecteur n'est pas nécessairement égale à 1 ; de même, son orientation n'a aucune importance. Un nom de frontière est proposé automatiquement : Boun_1, Boun_2, etc. Ce nom peut être modifié. Il ne doit pas avoir déjà été utilisé pour une autre frontière. @@ -91,7 +91,7 @@ Le cylindre est d :align: center Sphere -"""""" +====== .. index:: single: sphere La sphère est définie par son centre et son rayon. Un nom de frontière est proposé automatiquement : Boun_1, Boun_2, etc. Ce nom peut être modifié. Il ne doit pas avoir déjà été utilisé pour une autre frontière. @@ -100,7 +100,7 @@ La sph :align: center Cone -"""" +==== .. index:: single: cone Un cône est défini de deux manières différentes : le centre, l'axe et l'angle d'ouverture en degré ou par deux points centrés sur l'axe et le rayon associé. Un nom de frontière est proposé automatiquement : Boun_1, Boun_2, etc. Ce nom peut être modifié. Il ne doit pas avoir déjà été utilisé pour une autre frontière. @@ -118,14 +118,14 @@ Cr .. index:: single: object browser Object browser -"""""""""""""" +************** A l'issue de cette création de frontières, l'arbre d'études a été enrichi. On y trouve toutes les frontières créées, identifiées par leur nom, avec la possibilité de les éditer. .. image:: images/create_boundary_1.png :align: center Corresponding python functions -"""""""""""""""""""""""""""""" +****************************** Look :ref:`tui_create_boundary` diff --git a/doc/en/gui_create_case.rst b/doc/en/gui_create_case.rst index bfbdb017..6cb19b09 100644 --- a/doc/en/gui_create_case.rst +++ b/doc/en/gui_create_case.rst @@ -1,7 +1,7 @@ .. _gui_create_case: The creation of a case -====================== +###################### .. index:: single: case The definition of a case is done with the following data: @@ -17,11 +17,11 @@ The definition of a case is done with the following data: Name of the case -"""""""""""""""" +**************** A name is automatically suggested for the case: Case_1, Case_2, etc. This name can be modified. It must be a new name. The directory -""""""""""""" +************* The directory will countain all the files producted by the successive adaptations. By default, nothing is suggested. The choice is made either by giving a name into the text zone or by a selection through the search window. In this directory, the MED files for the adapted mesh will be stored, with name ``maill.xx.med``, where ``xx`` is a rank number automatically created. These files can be seen into the object browser. .. image:: images/create_case_2.png @@ -31,7 +31,7 @@ The directory will countain all the files producted by the successive adaptation .. index:: single: MED The initial mesh -"""""""""""""""" +**************** The initial mesh must be stored into a MED file. Usually, it is produced by the software that solves the physical problem. But it also can be created by the module SMESH and exported with the MED format. The name of the file is choosen either by giving a name into the text zone or by a selection through the search window. @@ -48,7 +48,7 @@ The initial mesh must be stored into a MED file. Usually, it is produced by the .. index:: single: conformity Type of conformity -"""""""""""""""""" +****************** The future iterations for this case must respect the the same behaviour regarding the type of conformity. The default option, 'conformal', implies that the meshes produced by HOMARD will be conformal, as expected in the finite element method. This is a classical choice for most of the simulation software with the finite element method. @@ -66,7 +66,7 @@ Nevertheless, if the computation is available with non conformal meshes, 3 possi .. index:: single: boundary The boundaries -"""""""""""""" +************** If the limit of the domain is curved, HOMARD can put the new nodes onto these curved limits to avoid some artificial singularities. This technique is effective for external limits as well for internal limits. Two situations: @@ -84,7 +84,7 @@ The definition of the boundaries is described in :ref:`gui_create_boundary`. .. index:: single: pyramid Advanced options -"""""""""""""""" +**************** Par défaut, aucune option avancée n'est active. Néanmoins, on peut définir une oprion avancée : @@ -105,7 +105,7 @@ Si le maillage initial comporte des pyramides, il y a arr The pursuit of a case -===================== +********************* .. index:: single: pursuit .. index:: single: yacs @@ -142,7 +142,7 @@ Si on souhaite partir d'une it Object browser -"""""""""""""" +************** A l'issue de cette création de cas, l'arbre d'études a été enrichi de ce nouveau cas. On y trouve l'itération initiale, identifiée par le nom du maillage qui a été lu dans le fichier fourni. .. image:: images/create_case_6.png @@ -151,6 +151,6 @@ A l'issue de cette cr Corresponding python functions -"""""""""""""""""""""""""""""" +****************************** Look :ref:`tui_create_case` diff --git a/doc/en/gui_create_hypothese.rst b/doc/en/gui_create_hypothese.rst index cc58ed3e..976d73ed 100644 --- a/doc/en/gui_create_hypothese.rst +++ b/doc/en/gui_create_hypothese.rst @@ -1,7 +1,7 @@ .. _gui_create_hypothese: The hypothesis -============== +############## .. index:: single: hypothesis L'hypothesis contient toutes les paramètres de pilotage d'une adaptation d'un maillage. Cette opération permet de réaliser l'itération à laquelle elle est attachée. @@ -17,15 +17,15 @@ Il existe trois classes d'hypotheses : Name of the hypothesis -"""""""""""""""""""""" +********************** Un nom de l'hypothesis est proposé automatiquement : Hypo_1, Hypo_2, etc. Ce nom peut être modifié. Il ne doit pas asee été utilisé pour une hypothesis précédente. Uniform adaptation -"""""""""""""""""" +****************** Par défaut on propose un raffinement uniforme. Quand on part d'un maillage qui a déjà été raffiné, l'option de déraffinement supprimera les mailles produites. Adaptation by a field -""""""""""""""""""""" +********************* .. note:: Pour pousee adapter le maillage selon un champ il faut asee au préalable désigné le fichier med contenant le champ. Cela se fait dans la fenêtre de construction de l'itération (see :ref:`gui_create_iteration`). Le nom du fichier qui a été sélectionné est affiché sans modification possible ici : @@ -59,7 +59,7 @@ La m Adaptation by a zone -"""""""""""""""""""" +******************** .. index:: single: zone Au démarrage, il faut créer une première zone par activation du bouton "*Nouveau*" (see :ref:`gui_create_zone`) : @@ -74,7 +74,7 @@ Lorsque des zones ont d Filtering by the groups -""""""""""""""""""""""" +*********************** .. index:: single: group On peut restreindre l'application de l'hypothesis d'adaptation à des groupes. Ainsi les mailles n'appartenant pas à ces groupes ne seront pas modidiées, sauf par contamination ultérieure du raffinement pour assurer la conformité du maillage final. @@ -90,7 +90,7 @@ La liste des groupes de mailles pr Interpolation of fields -""""""""""""""""""""""" +*********************** .. index:: single: interpolation .. note:: @@ -108,7 +108,7 @@ Si on veut choisir les champs Advanced options -"""""""""""""""" +**************** Si la case "Options avancées" n'est pas cochée, aucune contrainte supplémentaire n'est définie. Si la case est cochée, on définira les options avancées. @@ -122,7 +122,7 @@ Le dernier choix porte sur une sortie suppl :align: center Object browser -"""""""""""""" +************** .. index:: single: object browser L'arbre d'études contient les hypotheses créées et les itérations qui les utilisent. La description des zones qui leur sont éventuellement attachées est présente. @@ -133,5 +133,5 @@ L'arbre d' Corresponding python functions -"""""""""""""""""""""""""""""" +****************************** Look :ref:`tui_create_hypothese` diff --git a/doc/en/gui_create_iteration.rst b/doc/en/gui_create_iteration.rst index 71493bbe..a372e366 100644 --- a/doc/en/gui_create_iteration.rst +++ b/doc/en/gui_create_iteration.rst @@ -1,7 +1,7 @@ .. _gui_create_iteration: The iteration -============= +############# .. index:: single: iteration La définition d'une iteration se fait par la donnée des informations suivantes : @@ -15,24 +15,24 @@ La d :align: center Name of the iteration -""""""""""""""""""""" +********************* Un nom de cas est proposé automatiquement : Iter_1, Iter_2, etc. Ce nom peut être modifié. Il ne doit pas avoir été utilisé pour une iteration précédente. The previous iteration -"""""""""""""""""""""" +********************** L'iteration précédente est choisie dans l'arbre d'étude. Le nom du maillage correspondant sera affiché. .. index:: single: mesh;result The name of the resulting mesh -"""""""""""""""""""""""""""""" +****************************** L'iteration en cours de création produira un maillage. Ce maillage sera connu sous un nom. Ce nom est fourni en le tapant dans la zone de texte. Par défaut, on propose un nom identique à celui de l'iteration précédente. .. index:: single: field .. index:: single: MED The field -""""""""" +********* Pour créer ou utiliser une hypothesis d'adaptation basée sur un champ exprimé sur le maillage, on doit fournir le fichier où se trouve le champ. C'est également le cas si on veut interpoler des champs du maillage n au maillage n+1. Ce fichier est au format MED. Classiquement, il aura été produit par le logiciel de calcul avec lequel on travaille. Le nom du fichier peut être fourni, soit en tapant le nom dans la zone de texte, soit en activant la fonction de recherche. @@ -47,7 +47,7 @@ Dans le cas o .. index:: single: hypothesis The hypothesis -"""""""""""""" +************** L'iteration en cours pilotera l'adaptation par HOMARD selon un scénario défini dans une hypothesis. Celle-ci est choisie dans la liste des hypothesiss existantes. Au démarrage, il faut créer une première hypothesis par activation du bouton "*Nouveau*" (voir :ref:`gui_create_hypothese`) : @@ -67,7 +67,7 @@ Ensuite, si une hypothesis pr .. index:: single: object browser Object browser -"""""""""""""" +************** A l'issue de cette création d'iteration, l'arbre d'études a été enrichi. On y trouve l'iteration initiale, identifiée par le nom du maillage qui a été lu dans le fichier fourni, l'iteration courante, identifiée par son nom. On trouve aussi l'hypothesis qui lui est attachée. L'icône en regard de l'iteration permet de différencier les iterations calculées ou non. .. image:: images/create_iteration_6.png @@ -79,5 +79,5 @@ Quand plusieurs iterations s'encha :align: center Corresponding python functions -"""""""""""""""""""""""""""""" +****************************** Look :ref:`tui_create_iteration` diff --git a/doc/en/gui_create_zone.rst b/doc/en/gui_create_zone.rst index 2d2f7d24..73f21190 100644 --- a/doc/en/gui_create_zone.rst +++ b/doc/en/gui_create_zone.rst @@ -1,7 +1,7 @@ .. _gui_create_zone: The zone -======== +######## .. index:: single: zone .. index:: single: 2D @@ -28,11 +28,11 @@ conformit Les valeurs proposées par défaut pour les dimensions des zones tiennent compte de la géométrie du maillage. Name of the zone -"""""""""""""""" +**************** Un nom de zone est proposé automatiquement : Zone_1, Zone_2, etc. Ce nom peut être modifié. Il ne doit pas avoir été déjà utilisé pour une autre zone. Box -""" +*** .. index:: single: box Le parallélépipède est obligatoirement parallèle aux axes de coordonnées. Il est défini par ses extrêmes dans chaque direction. @@ -41,7 +41,7 @@ Le parall :align: center Cylindre -"""""""" +******** .. index:: single: cylindre Le cylindre est défini par son axe, un point de base positionné sur l'axe, sa hauteur et son rayon. L'axe est défini par un vecteur qui doit être correctement orienté : on retiendra le volume partant de la base dans la direction du vecteur jusqu'à la hauteur retenue. La norme de ce vecteur n'est pas nécessairement égale à 1. @@ -50,7 +50,7 @@ Le cylindre est d :align: center Pipe -"""" +**** .. index:: single: pipe Le cylindre est défini par son axe, un point de base positionné sur l'axe, sa hauteur et ses rayons interne et externe. L'axe est défini par un vecteur qui doit être correctement orienté : on retiendra le volume partant de la base dans la direction du vecteur jusqu'à la hauteur retenue. La norme de ce vecteur n'est pas nécessairement égale à 1. @@ -59,7 +59,7 @@ Le cylindre est d :align: center Sphere -"""""" +****** .. index:: single: sphere La sphère est définie par son centre et son rayon. @@ -68,7 +68,7 @@ La sph :align: center Rectangle -""""""""" +********* .. index:: single: rectangle Le rectangle est obligatoirement parallèle aux axes de coordonnées. Il est défini par ses extrêmes dans chacune des directions valides. La coordonnée constante est affichée pour information, mais n'est pas modifiable. @@ -77,7 +77,7 @@ Le rectangle est obligatoirement parall :align: center Disk -"""" +**** .. index:: single: disk Le disque est obligatoirement dans le plan des axes de coordonnées. Il est défini par son centre et son rayon. La coordonnée constante est affichée pour information, mais n'est pas modifiable. @@ -86,7 +86,7 @@ Le disque est obligatoirement dans le plan des axes de coordonn :align: center Disk with a hole -"""""""""""""""" +**************** .. index:: single: disk with a hole Le disque avec trou est obligatoirement dans le plan des axes de coordonnées. Il est défini par son centre et ses rayons externe et interne. La coordonnée constante est affichée pour information, mais n'est pas modifiable. @@ -97,5 +97,5 @@ Le disque avec trou est obligatoirement dans le plan des axes de coordonn Corresponding python functions -"""""""""""""""""""""""""""""" +****************************** Look :ref:`tui_create_zone` diff --git a/doc/en/gui_homard.rst b/doc/en/gui_homard.rst index e5762f2e..7be32325 100644 --- a/doc/en/gui_homard.rst +++ b/doc/en/gui_homard.rst @@ -1,12 +1,12 @@ .. _gui_homard: The computation -=============== +############### .. index:: single: iteration .. index:: single: computation To cumpute an iteration -""""""""""""""""""""""" +*********************** Lancer une adaptation s'obtient en sélectionnant l'iteration à calculer. Elle est repérée par une icone "en attente". On choisit ensuite "*Calculer*" dans le menu HOMARD ou à la souris. .. image:: images/lancement_1.png @@ -15,7 +15,7 @@ Lancer une adaptation s'obtient en s .. index:: single: object browser Object browser -"""""""""""""" +************** A l'issue de ce calcul, l'arbre d'études a été enrichi. L'icone devant l'iteration est validée. Sous l'iteration, on trouve la référence aux fichiers de résultats créés, identifiés par leur nom dans le répertoire *rep* qui a été défini à la création du cas : @@ -32,7 +32,7 @@ Le fichier maill.(n+1).med est celui qui contient le maillage produit au format :align: center To consult the result of an adaptation -"""""""""""""""""""""""""""""""""""""" +************************************** Les deux fichiers de texte, Liste.n.vers.(n+1).log et apad.n.vers.(n+1).bilan, sont visibles en les sélectionnant. On choisit ensuite "*Afficher le fichier*" dans le menu HOMARD ou à la souris. .. image:: images/lancement_3.png @@ -45,6 +45,6 @@ Les deux fichiers de texte, Liste.n.vers.(n+1).log et apad.n.vers.(n+1).bilan, s "*HOMARD_EXE_PRIVATE*" définit le nom de l'exécutable dans ce répertoire, si ce nom est différent de "*homard*". Corresponding python functions -"""""""""""""""""""""""""""""" +****************************** Look :ref:`tui_create_iteration` diff --git a/doc/en/gui_mesh_info.rst b/doc/en/gui_mesh_info.rst index ac92c9b9..c14a9729 100644 --- a/doc/en/gui_mesh_info.rst +++ b/doc/en/gui_mesh_info.rst @@ -1,7 +1,7 @@ .. _gui_mesh_info: Mesh analysis -============= +############# .. index:: single: analysis .. index:: single: information @@ -14,7 +14,7 @@ Si le maillage fait partie d'un cas enregistr Importation of the mesh -""""""""""""""""""""""" +*********************** La sélection de la fonction d'analysis est faite par le menu de la barre supérieure de la fenêtre : .. image:: images/mesh_info_1.png @@ -26,11 +26,11 @@ La fen :align: center Name of the case ----------------- +**************** Un nom de cas est proposé automatiquement : Case_1, Case_2, etc. Ce nom peut être modifié. Il ne doit pas avoir déjà été utilisé pour un autre cas. The directory -------------- +************* Le répertoire est celui qui contiendra les fichiers produits par l'information. Par défaut, rien n'est proposé. Le choix est fait, soit en tapant le nom dans la zone de texte, soit en activant la fonction de recherche. C'est dans ce répertoire que seront exportés les fichiers d'information de nom ``Liste.log`` et ``info_av.00.bilan``. Ces fichiers seront visibles dans l'arbre d'études. .. image:: images/create_case_2.png @@ -40,7 +40,7 @@ Le r .. index:: single: MED Mesh to be analysed -------------------- +******************* Le maillage à analysisr doit se trouver dans un fichier au format MED. Le nom du fichier peut être fourni, soit en tapant le nom dans la zone de texte, soit en activant la fonction de recherche. .. image:: images/create_case_3.png @@ -53,7 +53,7 @@ Le maillage Le maillage ne doit pas être lui-même le produit d'une adaptation de maillage par HOMARD, sous peine de perdre l'analysis des différents niveaux de raffinement/déraffinement Options for the analysis ------------------------- +************************ L'analysis est faite selon les options cochées. - qualité des mailles - diamètre des mailles @@ -64,7 +64,7 @@ L'analysis est faite selon les options coch Le résultat de l'analysis est contenu dans le fichier ``info_av.00.bilan`` ; ce fichier est à consulter en l'affichant après sa désignation avec "*Afficher le fichier*" dans le menu HOMARD ou à la souris. Object browser --------------- +************** A l'issue de cette demande d'information, l'arbre d'études a été enrichi de ce nouveau cas. On y trouve l'itération initiale, identifiée par le nom du maillage qui a été lu dans le fichier fourni, et les deux fichiers d'information de nom ``Liste.log`` et ``info_av.00.bilan``. .. image:: images/mesh_info_3.png @@ -72,7 +72,7 @@ A l'issue de cette demande d'information, l'arbre d' Computed iteration -"""""""""""""""""" +****************** Pour analysisr le maillage produit par une itération d'adaptation de maillage, on désigne à la souris cette itération dans l'arbre d'études et on lance l'analysis. On retrouve le menu similaire au cas initial : @@ -87,6 +87,6 @@ Comme pour un maillage import Corresponding python functions -"""""""""""""""""""""""""""""" +****************************** Look :ref:`tui_create_case` and :ref:`tui_create_iteration` diff --git a/doc/en/gui_usage.rst b/doc/en/gui_usage.rst index d662319c..607ac861 100644 --- a/doc/en/gui_usage.rst +++ b/doc/en/gui_usage.rst @@ -1,12 +1,12 @@ .. _gui_usage: User's guide of the graphical interface -======================================= +####################################### .. index:: single: case .. index:: single: iteration Activation of the module HOMARD -""""""""""""""""""""""""""""""" +******************************* Two ways can be used to launch the module HOMARD: #. by activating the tab HOMARD into the list of the modules @@ -18,13 +18,13 @@ The user can choose either to start a new study or to open an old stored one, as :align: center Definition of an adaptation -""""""""""""""""""""""""""" +*************************** Once the activation of the module HOMARD is done, a case is created. The initial mesh of the series of adapted meshes is selected (see :ref:`gui_create_case`). From this case, the successives iterations are defined (see :ref:`gui_create_iteration`) with hypotheses (see :ref:`gui_create_hypothese`). The adaptations are launched as described in :ref:`gui_homard`. User's guide of the graphical interface -""""""""""""""""""""""""""""""""""""""" +*************************************** .. toctree:: :maxdepth: 2 diff --git a/doc/en/index.rst b/doc/en/index.rst index 82fbf66f..fb543a19 100644 --- a/doc/en/index.rst +++ b/doc/en/index.rst @@ -7,11 +7,11 @@ .. |flag| image:: ./images/drapeau_en.gif Documentation of the component HOMARD |logo| --------------------------------------------- +############################################ The component HOMARD drives the mesh adaptation inside of the SALOME plateform. User's guide -"""""""""""" +************ .. toctree:: :maxdepth: 1 @@ -22,17 +22,18 @@ User's guide tutorials General presentation -"""""""""""""""""""" +******************** .. toctree:: :maxdepth: 1 intro + regles applications divers Licence -""""""" +******* .. index:: single: Licence The licence for this module is the GNU Lesser General Public License (Lesser GPL), as stated here and in the source files. @@ -53,7 +54,7 @@ In addition, we expect that all publications describing work using this software The documentation of the module is also covered by the licence and the requirement of quoting. Index and tables -"""""""""""""""" +**************** * :ref:`genindex` * :ref:`modindex` diff --git a/doc/en/intro.rst b/doc/en/intro.rst index 0ba7ccfe..7628a5f2 100644 --- a/doc/en/intro.rst +++ b/doc/en/intro.rst @@ -1,10 +1,10 @@ .. _gui_intro: Introduction -============ +############ General presentation -"""""""""""""""""""" +******************** Le logiciel HOMARD est destiné à adapter les maillages dans le cadre des codes de calculs par éléments ou volumes finis. Ce logiciel, réalisé par EDF R&D, procède par raffinement et déraffinement des maillages bidimensionnels ou tridimensionnels. Il est conçu pour être utilisé indépendamment du code de calcul auquel il est couplé. Raffiner le maillage signifie découper des mailles désignées selon des indications founies par l'utilisateur. Déraffiner le maillage signifie revenir en arrière sur des découpages précédemment réalisés : ainsi, en aucun cas HOMARD ne peut simplifier un maillage existant qui aura été créé trop fin. Le déraffinement prend toute son importance dans les calculs quand la zone d'intérêt se déplace au cours du calcul pour ne plus tenir compte de raffinements précédemment réalisés et qui deviennent inutiles. On en trouvera une illustration au bas de cette page. @@ -30,17 +30,19 @@ Plusieurs motivations apparaissent pour adapter un maillage : - les conditions du calcul changent au cours de son déroulement : les zones qui doivent être maillées finement se déplacent. Si on maille fin partout dès le début, le maillage est trop gros. En adaptant au fur et à mesure, le maillage ne sera fin qu'aux endroits nécessaires : sa taille sera réduite et la qualité de la solution sera bonne. Dans tous les cas, le principe de l'adaptation de maillage reste le même. Sur le maillage de départ, on réalise le calcul standard. Avec une analyse de la solution numérique obtenue, on estime l'erreur qui a été commise par rapport à la solution réelle. Cette estimation se représente par une valeur d'indicateur d'erreur dans chaque maille du calcul. A partir de là, on applique le principe suivant : les mailles où l'indicateur d'erreur est fort devraient être plus petites et, réciproquement, les mailles où l'indicateur d'erreur est faible pourraient être plus grandes. Avec cette information, on alimente HOMARD qui va modifier le maillage en conséquence. Sur le nouveau maillage, on recommencera alors le calcul. -Schématiquement, une itération d'adaptation de maillage se présente ainsi. Le logiciel calcule la solution numérique sur le maillage n°k, puis en déduit les valeurs de l'indicateur d'erreur sur tout le maillage. A partir de la connaissance du maillage n°k et de l'indicateur n°k, HOMARD crée le nouveau maillage n°k+1. + + +Broadly speaking, an iteration for meshing adaptation is as shown on the figure below. The finite element software calculates the numerical solution on meshing Mk, then, from that, deduces the values for the error indicator over the whole meshing. Based on the knowledge of meshing #k and indicator #k, HOMARD generates a new meshing #k+1. .. image:: images/intro_1.png :align: center -Au final, la chaîne complète part du maillage initial produit par un mailleur. Elle comprend des maillons successifs (calcul d'indicateur / adaptation) comme sur la figure ci-après. +The complete chain starts from the initial meshing, then incorporates successive links (calculation of indicator / adaptation). .. image:: ../images/intro_2.png :align: center -Des variantes de ce schéma de base sont possibles. Si aucun calcul d'erreur n'est disponible dans le logiciel couplé, on peut utiliser un champ pour piloter l'adaptation. Un champ de contraintes en mécaniques peut être utilisé : raffiner là où les contraintes sont importantes est souvent efficace pour améliorer la qualité de la simulation. On peut également adapter en fonction du saut d'une variable d'une maille à sa voisine ou dans une zone connue a priori. Grâce à ses nombreuses options, HOMARD permet d'envisager de multiples scénarios d'adaptation de maillage. +Some variations may exist. If no error indicator is available, another filed can be used to drive the adaptation. A stress field in mechanics can be used: the refinement of the elements where the stress is high is often efficient to improve the quality of the results. It is also possible to drive the adaptation according the variation of a filed from one element to its neighbours. The refinement can be filtered by zones or groups of elements. .. note:: For a extensive description of HOMARD, see :download:`Description générale de HOMARD <../files/HOMARD_0.pdf>`. @@ -53,11 +55,183 @@ Des variantes de ce sch `Available here `_ +Methods for splitting the elements +********************************** +.. index:: single: splitting +.. index:: single: conformity + +All in all, the process of meshing adaptation by splitting element is a two-tier process. First, all element specified by the error indicator are split. The resulting meshing is uncorrect : nodes are pending at the junction between areas to be refined, and an area to be retained. The second stage aims at solving all of these conformity problems. + +There are different splitting methods for the two phases. During the first phase, all of the element are split in the same manner ; this is the so-called standard splitting. During the second phase, some of the meshing conformity conflicts in the junction area are settled by the same standard splitting of element, while others are settled by special splitting. + +The various splitting modes have been choosen to preserve the mesh quality, all along the adaptive process. + +Standard splitting +================== +Standard element splitting is carried out with a view to restricting the number of cases. Thus, edges are split into two equal sections. + +To split a triangle, the three edges are split into two sections each, thus producing four similar triangles. They retain the same quality. + +.. image:: ../images/dec_tria_1.gif + :align: center + :alt: Découpage standard d'un triangle + :width: 399 + :height: 88 + +To split a quadrangle, the four edges are split into two sections each, thus producing four non-similar quadrangles with different quality. + +.. image:: ../images/dec_quad_1.png + :align: center + :alt: Découpage standard d'un quadrangle + :width: 399 + +Tetrahedrons are split in eight. First, each of the triangular faces is split into 4 similar triangular faces. + +.. image:: ../images/dec_tetr_1.gif + :align: center + :alt: Découpage standard d'un tétraèdre - 1 + :width: 328 + :height: 115 + +Face splitting produces four tetrahedrons at the angles of the initial tetrahedron. It should be noted that the four new tetrahedrons are homothetic to the initial tetrahedron. Therefore, they retain the same qualities. + +.. image:: ../images/dec_tetr_2.gif + :align: center + :alt: Découpage standard d'un tétraèdre - 2 + :width: 201 + :height: 159 + +At the core of the tetrahedron, there remains a block shaped like two pyramids joined at their bases. An edge is generated using one of the three possible diagonals, then the four faces containing the edge, and two external edges. + +.. image:: ../images/dec_tetr_3.gif + :align: center + :alt: Découpage standard d'un tétraèdre - 3 + :width: 244 + :height: 74 + +This, in turn, creates 4 new tetrahedrons. It should be noted that they are similar two by two but that they can never be similar to the initial tetrahedron. They can therefore never have the same quality as the initial tetrahedron. However, different results are obtained, depending on the diagonal selected for splitting the internal pyramidal block. Where quality is concerned, it is always best to select the smallest of the three possible diagonals. + +.. image:: ../images/dec_tetr_4.gif + :align: center + :alt: Découpage standard d'un tétraèdre - 4 + :width: 229 + :height: 116 + +Hexaedrons are split in eight. Each of the quadrangular faces is split into 4 quadrangular faces. Edges are created connecting each centre of opposite faces. This generates a new point located at the centre of the hexaedron. + +.. image:: ../images/dec_hex.png + :align: center + :alt: Découpage standard d'un hexaèdre + :scale: 70 + +Pentaedrons are split in eight. Each of the quadrangular faces is split into 4 quadrangular faces and the two triangles are split into 4. Edges are created connecting each centre of quadrangular faces. Those 3 edges create 4 triangles at the centre of the pentaedron. Six quandrangular faces are created to complete the construction of the height pentaedrons. + +.. image:: ../images/dec.pent.png + :align: center + :alt: Découpage standard d'un pentaèdre + :scale: 20 + +Splitting for the conformity +============================ + +Splitting for conformity is applicable to the elements at the interface between two different levels of refinement. Such splitting may produce element of lower quality compared to the initial element, and in the general algorithm, one sees how this drawback is reckoned with to reduce its consequences. + +For triangles, one of the three edges is split in two. Its middle is joined to the opposite vertex to form two additional triangles. + +.. image:: ../images/dec_tria_2.gif + :align: center + :alt: Découpage de conformité d'un triangle + :width: 399 + :height: 88 + +For quadrangles, one of the four edges is split in two. Its middle is joined to the opposite vertex to form three triangles. The mesh obtained is then mixed. + +.. image:: ../images/dec_quad_2.png + :align: center + :alt: Découpage de conformité d'un quadrangle + :width: 399 + +For a tetrahedron with three split edges, this is possible only if the edges are concurrent. Therefore, one of the four faces is split in four. The middles of the split edges are joined to the opposite vertexes. The three other faces are thus split in two, and four tetrahedrons are created. + +.. image:: ../images/dec_tetr_5.gif + :align: center + :alt: Découpage de conformité d'un tétraèdre - 1 + :width: 116 + :height: 116 + +For a tetrahedron with two split edges, this is possible only if the edges are opposite. All the middles of these edges are joined to the other apexes, as well as the edge middles. The four faces are split in two, and four tetrahedrons are created. + +.. image:: ../images/dec_tetr_6.gif + :align: center + :alt: Découpage de conformité d'un tétraèdre - 2 + :width: 116 + :height: 116 + +For a tetrahedron with one split edge, the middle of the split edge is joined to the opposite apex, and two tetrahedrons are created. + +.. image:: ../images/dec_tetr_6.gif + :align: center + :alt: Découpage de conformité d'un tétraèdre - 3 + :width: 116 + :height: 116 + +The conformal strategy for the hexaedrons is based on tetraedrons and pyramids. The situation depends on the number of non conformities. + +For an hexaedron with one face cut, we create 4 edges, 4 tetraedrons and 5 pyramids. + +.. image:: ../images/hexaface.png + :align: center + :alt: Découpage de conformité d'un hexaèdre - 1 face + :width: 384 + :height: 101 + +For an hexaedron with only one edge cut, we create deux internal edges and four pyramids. + +.. image:: ../images/hexa1arete.png + :align: center + :alt: Découpage de conformité d'un hexaèdre - 1 arête + :width: 384 + :height: 101 + +For an hexaedron with two edges cut, we create one central point 10 edges, 12 tetraedrons and 2 pyramids. + +.. image:: ../images/hexa2aretes.png + :align: center + :alt: Découpage de conformité d'un hexaèdre - 2 arêtes + :width: 384 + :height: 101 + +For an hexaedron with three edges cut, we create one central point, 11 edges and 18 tetraedrons. + +.. image:: ../images/hexa3aretes.png + :align: center + :alt: Découpage de conformité d'un hexaèdre - 3 arêtes + :width: 384 + :height: 101 + + + +Algorithm +********* +.. index:: single: algorithm + +The strategy adopted for the algorithm in HOMARD consists in forcing splitting in four for all faces with two hanging nodes. Eventually, only the faces with non conformity points are faces where one and only edge is split. The simplest possible solution is thus used for conformity as seen before. The latter stage of conformity introduces element of modified quality compared to that of the element it originated from. This drawback remains under control as we have chosen to grant a temporary status to the conformity element: they exist to produce a meshing acceptable by the calculation softwares, but they disappear if they are required to be further split. As a consequence, quality loss does not propagate along iterations of meshing adaptation, and remains restricted in value as well as in number of element concerned. + +The algorithm is: + + * Transfer of refining or coarsening indications over element into decisions to split or group edges, triangles and quadrangles. + * Removal of temporary compliance element. + * By considering all triangles and quadrangles from the lowest splitting level to the highest splitting level, conflict solving on coarsening using the basic rules. + * By considering all triangles and quadrangles from the lowest splitting level to the highest splitting level, conflict solving on refining using the basic rules. + * Effective generation of new meshing : standard splitting, compliance tracking. + Some illustrations of adapted meshes -"""""""""""""""""""""""""""""""""""" +************************************ .. index:: single: illustration +Some examples of use case can be found into :ref:`applications` . + +---------------------------------------------------------------+ +---------------------------------------------------------------+ | | diff --git a/doc/en/regles.rst b/doc/en/regles.rst new file mode 100644 index 00000000..129ad112 --- /dev/null +++ b/doc/en/regles.rst @@ -0,0 +1,107 @@ +.. _rules: + +Rules +##### + +Whatever method of use is selected, general rules are to be complied with in setting up the data. + +The initial mesh +******************* +.. index:: single: mesh;initial + +Mesh includes nodes, point-meshes, segments, triangles, quadrangles, tetrahedrons, hexahedrons and/or prisms. It may be of degree 1 or 2. It may be made up of several pieces. +Meshes mixing volume meshed areas and surface meshed areas can definitely be processed. These areas may be adjacent or not. +During the refining process there is no mesh adjustment. Therefore, the initial mesh should be as smooth as possible. Poor initial mesh would result in poor split meshes. Conversely, the initial mesh may be coarse. It merely needs to comply with the minimum initial conditions. +Lastly, it would be desirable to have - from the very onset - proper representation of any curving borders. As border element splitting is carried out based on border approximation by the initial mesh, fine tracking of marked curves may not occur systematically. To remedy this, a specific module for 2D-border tracking is available. + +Boundary conditions on limits and sources +***************************************** +.. index:: single: conditions on limits +.. index:: single: boundary conditions + +Defining where boundary conditions or source operands are enforced has to be carried out on entities of dimensions similar to that of the phenomenon being represented. In other words, a one-off loading should be defined on a node. For 2D calculation, the definition of behaviors on the boundary is obtained through boundary edge characterizations rather than through boundary nodes. Also, in 3D, the behaviors on the outer walls of the area to be modeled are based on the triangles or the quadrangles making up the boundary. In so doing, one is sure to properly propagate the definitions as mesh is refined. + +One should absolutely not use definitions of boundary conditions by nodes for this would make it impossible to properly represent the borders after adaptation. This is demonstrated in the example below. + +.. image:: ../images/cl_0.gif + :align: center + :width: 201 + :height: 110 + +A case of fluid mechanics is to be modeled here, where a flow enters then exits a cavity. This is a 2D model, and boundary conditions are defined classically, through node characterization. On the zoom drawn below, red nodes are for walls and blue nodes for inlet, while black nodes are for free nodes. + +.. image:: ../images/cl_1.gif + :align: center + :width: 372 + :height: 119 + +If the element needs to be split around the inlet area, new nodes are generated. The problem here is to find out to which category a new node located between a wall node or an inlet node belongs to. If -- left-hand side case -- the wall gets priority, everything is fine. Conversely, if -- right-hand side case -- it is the inlet that gets priority, there is a problem: this results in artificially expanding the inlet, therefore distorting the calculation! + +.. image:: ../images/cl_2.gif + :align: left + :width: 244 + :height: 129 + + +.. image:: ../images/cl_3.gif + :align: right + :width: 244 + :height: 128 + +The management of priorities between data soon becomes impossible : exclusive conventions for all HOMARD-related calculation softwares would have to be set up, while dealing with a combination of many possibilities. Moreover, in 3D, this technique for managing priorities leads to a deadlock. Try and imagine updating characterizations for nodes resulting from the splitting of tetrahedrons in the angle of the domain. Very quickly, it becomes impossible to choose between blue, red and green. + +.. image:: ../images/cl_4.gif + :align: center + :width: 470 + :height: 201 + +The only viable solution consists in defining boundary conditions on boundary elements. Going back to our 2D example for fluid mechanics, the wall or inclet characteristics are assigned to the boundary edges. In the calculation software, the program can very easily transfer information on edges towards border summits. + +.. image:: ../images/cl_5.gif + :align: center + :width: 372 + :height: 119 + +If the mesh refinement is carried out as previously, the new edges take on the same characterization as those out of which they arise : one split wall edge results in two wall edges, and one split inlet edge results in two inlet edges. Consequently, the calculation software has no difficulty setting up the right data on border nodes. + +.. image:: ../images/cl_6.gif + :align: center + :width: 244 + :height: 129 + +The strategy for the adaptation +******************************* + +There is a choice between several types of refinement and unrefinement : + + * by filtering error indications through a given threshold : all of the elements involving an error superior to the high threshold are split and all of those involving an error lower than the low threshold are unrefined. Then, splitting occurs again until mesh does not contain hanging nodes. + * by filtering error indications through thresholds that depends on the error : all of the elements involving an error superior to the mean of the error with a shift are split. Then, splitting occurs again until mesh does not contain hanging nodes. + * by filtering with percentage of elements. The x% of the elements with the highest error are split and the y% with the lowest errors are unrefined. + * by only using the refinement process, filtering with an high threshold. + * vice versa by only using the unrefinement process, filtering with a low threshold. + * uniform; no error indicator is taken into account, and mesh is entirely split : every triangle is split into 4 sections, every quadrangle is split into 4 sections, every tetrahedron is split into 8 sections, every prism is split into 8 sections, and every hexahedron is split into 8 sections. Beware! The resulting mesh volume may be huge. + +The error indicator +******************* +.. index:: single: error indicator + +Most of the time, the error indicator is a real-value field defined by element. It is one of the results of the calculation software. The selection of the elements to be split is carried out by comparing the value of the indicator to a given threshold. +HOMARD accommodates two extensions to this standard: an error indicator expressed on node and/or error indicator under integer form. Whenever the indicator is provided over a node, HOMARD assigns the highest error value encountered on the element nodes to each element. Whenever the indicator is under integer form, the convention is that 1 is for refinement requests and 0 for no action. +There is no requirement to provide a value for each and every element: if no value is assigned to an element, HOMARD treats this element according to the preferences of the case. + +The interpolation of the fields +******************************* +.. index:: single: interpolation +.. index:: single: field + +HOMARD is able to update fields which are expressed over the mesh. Two cases are available : + + * If the field is expressed by nodes, HOMARD will produce a new field by node, following this method. When a node is active in both meshes, before and after adaptation, the field value is kept. If the node is new, the value of the field is obtained interpolating the field from its values over neighbours, according to the mesh degree. + * If the field is expressed as a constant by element, HOMARD will produce a new field by element, following this method. When the element is active in both meshes, before and after adaptation, the field value is kept. If the element is produced by element cutting, the field value is the one of the parent element. If the element is produced by mesh coarsening, the field value is the mean value over the previous child element. + +These updating techniques are based on scalar fields. If a vector field is transmitted to HOMARD through the MED files, each component is considered as a independent scalar field. Then, the new vector field is built, gathering all the new scalar components. + + + + + diff --git a/doc/en/tui_create_boundary.rst b/doc/en/tui_create_boundary.rst index 89fceb2e..5818fc98 100644 --- a/doc/en/tui_create_boundary.rst +++ b/doc/en/tui_create_boundary.rst @@ -1,7 +1,7 @@ .. _tui_create_boundary: The boundary -============ +############ .. index:: single: boundary .. index:: single: cylinder @@ -10,7 +10,7 @@ The boundary The variables are described in :ref:`gui_create_boundary`. Methods of the class homard -""""""""""""""""""""""""""" +*************************** These methods returns an instance of the class boundary. +----------------------------------------------------------------------------------------+ @@ -88,7 +88,7 @@ These methods returns an instance of the class boundary. +---------------------------------------------------------------+ Methods of the class cas -""""""""""""""""""""""""" +************************ See also in :ref:`tui_create_case`. +---------------------------------------------------------------+ @@ -115,7 +115,7 @@ See also in :ref:`tui_create_case`. +---------------------------------------------------------------+ Methods of the class boundary -"""""""""""""""""""""""""""""" +***************************** +---------------------------------------------------------------+ +---------------------------------------------------------------+ @@ -155,7 +155,7 @@ Methods of the class boundary Example -""""""" +******* Creation of a discrete boundary, a spherical boundary, and a cylindrical boundary: :: @@ -165,5 +165,5 @@ Creation of a discrete boundary, a spherical boundary, and a cylindrical boundar Similar graphical input -""""""""""""""""""""""" +*********************** Look at :ref:`gui_create_boundary` diff --git a/doc/en/tui_create_case.rst b/doc/en/tui_create_case.rst index 73d29ab5..575a8d7b 100644 --- a/doc/en/tui_create_case.rst +++ b/doc/en/tui_create_case.rst @@ -1,7 +1,7 @@ .. _tui_create_case: The case -======== +######## .. index:: single: cas .. index:: single: type of conformity .. index:: single: mesh;initial @@ -9,10 +9,10 @@ The case The variables are described in :ref:`gui_create_case`. Methods of the class homard -"""""""""""""""""""""""""""" +*************************** Creation of a case -^^^^^^^^^^^^^^^^^^ +================== +---------------------------------------------------------------+ +---------------------------------------------------------------+ @@ -46,7 +46,7 @@ Creation of a case +---------------------------------------------------------------+ Creation of a case by pursuit of a computed iteration -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +===================================================== +---------------------------------------------------------------+ +---------------------------------------------------------------+ @@ -88,7 +88,7 @@ Creation of a case by pursuit of a computed iteration Methods of the class cas -"""""""""""""""""""""""" +************************ +---------------------------------------------------------------+ +---------------------------------------------------------------+ @@ -183,7 +183,7 @@ Methods of the class cas +---------------------------------------------------------------+ Advanced options -^^^^^^^^^^^^^^^^ +**************** +---------------------------------------------------------------+ +---------------------------------------------------------------+ @@ -205,7 +205,7 @@ Advanced options +---------------------------------------------------------------+ Informations for the initial mesh -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +********************************* +---------------------------------------------------------------+ +---------------------------------------------------------------+ @@ -227,7 +227,7 @@ Informations for the initial mesh Example -""""""" +******* The creation of the object case_1 is done as follows: :: @@ -247,7 +247,7 @@ The creation of the object case_1 is done as follows: Similar graphical input -""""""""""""""""""""""" +*********************** Look at :ref:`gui_create_case` diff --git a/doc/en/tui_create_hypothese.rst b/doc/en/tui_create_hypothese.rst index 6c727642..eb67f2f2 100644 --- a/doc/en/tui_create_hypothese.rst +++ b/doc/en/tui_create_hypothese.rst @@ -1,7 +1,7 @@ .. _tui_create_hypothese: The hypothesis -============== +############## .. index:: single: iteration .. index:: single: hypothesis @@ -10,7 +10,7 @@ The hypothesis The variables are described in :ref:`gui_create_hypothese`. Methods of the class homard -"""""""""""""""""""""""""""" +*************************** +---------------------------------------------------------------+ +---------------------------------------------------------------+ @@ -38,10 +38,10 @@ Methods of the class homard +---------------------------------------------------------------+ Methods of the class hypothese -""""""""""""""""""""""""""""""" +****************************** General methods -^^^^^^^^^^^^^^^ +=============== +---------------------------------------------------------------+ +---------------------------------------------------------------+ @@ -100,7 +100,7 @@ General methods +---------------------------------------------------------------+ The field and the thresholds -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +============================ +---------------------------------------------------------------+ +---------------------------------------------------------------+ @@ -172,7 +172,7 @@ The field and the thresholds The components of the field -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +=========================== +---------------------------------------------------------------+ +---------------------------------------------------------------+ @@ -203,7 +203,7 @@ The components of the field The zones -^^^^^^^^^ +========= +---------------------------------------------------------------+ +---------------------------------------------------------------+ @@ -220,7 +220,7 @@ The zones The filtering by the groups -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +=========================== +---------------------------------------------------------------+ +---------------------------------------------------------------+ @@ -239,7 +239,7 @@ The filtering by the groups +---------------------------------------------------------------+ Advanced options -^^^^^^^^^^^^^^^^ +================ +---------------------------------------------------------------+ +---------------------------------------------------------------+ @@ -306,7 +306,7 @@ Advanced options Example -""""""" +******* The creation of the object hypo_1 is done as follows: :: @@ -319,7 +319,7 @@ The creation of the object hypo_1 is done as follows: Similar graphical input -""""""""""""""""""""""" +*********************** Look at :ref:`gui_create_hypothese` .. warning:: diff --git a/doc/en/tui_create_iteration.rst b/doc/en/tui_create_iteration.rst index 74e909f9..85e91e5f 100644 --- a/doc/en/tui_create_iteration.rst +++ b/doc/en/tui_create_iteration.rst @@ -1,7 +1,7 @@ .. _tui_create_iteration: The iteration -============= +############# .. index:: single: iteration .. index:: single: hypothesis @@ -10,7 +10,7 @@ The iteration The variables are described in :ref:`gui_create_iteration`. Methods of the class homard -"""""""""""""""""""""""""""" +*************************** +---------------------------------------------------------------+ +---------------------------------------------------------------+ @@ -31,7 +31,7 @@ Methods of the class homard +---------------------------------------------------------------+ Methods of both classes cas and iteration -""""""""""""""""""""""""""""""""""""""""" +***************************************** +---------------------------------------------------------------+ +---------------------------------------------------------------+ @@ -66,10 +66,10 @@ Methods of both classes cas and iteration +---------------------------------------------------------------+ Methods of the class iteration -"""""""""""""""""""""""""""""" +****************************** General methods -^^^^^^^^^^^^^^^ +=============== +---------------------------------------------------------------+ +---------------------------------------------------------------+ @@ -174,7 +174,7 @@ General methods +---------------------------------------------------------------+ Information about the meshes -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +============================ +---------------------------------------------------------------+ +---------------------------------------------------------------+ @@ -220,7 +220,7 @@ Information about the meshes +---------------------------------------------------------------+ Information about the field -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +=========================== +---------------------------------------------------------------+ +---------------------------------------------------------------+ @@ -266,7 +266,7 @@ Information about the field +---------------------------------------------------------------+ Example -""""""" +******* .. index:: single: mesh;initial To create the first iteration, the starting point is the iteration associated to the initial mesh. It is the one that defines the case. @@ -295,5 +295,5 @@ Then, the next iteration is created from the current iteration. Similar graphical input -""""""""""""""""""""""" +*********************** Look at :ref:`gui_create_iteration` diff --git a/doc/en/tui_create_zone.rst b/doc/en/tui_create_zone.rst index 9a068785..59e604cb 100644 --- a/doc/en/tui_create_zone.rst +++ b/doc/en/tui_create_zone.rst @@ -1,7 +1,7 @@ .. _tui_create_zone: The zone -======== +######## .. index:: single: zone .. index:: single: box @@ -15,7 +15,7 @@ The zone The variables are described in :ref:`gui_create_zone`. Methods of the class homard -"""""""""""""""""""""""""""" +*************************** These methods returns an instance of the class zone. @@ -141,7 +141,7 @@ These methods returns an instance of the class zone. Methods of the class zone -""""""""""""""""""""""""" +************************* +---------------------------------------------------------------+ +---------------------------------------------------------------+ @@ -183,7 +183,7 @@ Methods of the class zone Example -""""""" +******* The creation of a 3D box is done as follows: :: @@ -197,7 +197,7 @@ The creation of a disk in the plane XY is done as follows: Similar graphical input -""""""""""""""""""""""" +*********************** Look at :ref:`gui_create_zone` .. warning:: diff --git a/doc/en/tui_homard.rst b/doc/en/tui_homard.rst index fdd58c8e..b43da942 100644 --- a/doc/en/tui_homard.rst +++ b/doc/en/tui_homard.rst @@ -1,16 +1,16 @@ .. _tui_homard: The computation -=============== +############### Methods of the class homard -""""""""""""""""""""""""""" +*************************** Example -""""""" +******* Corresponding graphical interface -""""""""""""""""""""""""""""""""" +********************************* Look at :ref:`gui_homard` diff --git a/doc/en/tui_usage.rst b/doc/en/tui_usage.rst index ab212dc6..3cc1c575 100644 --- a/doc/en/tui_usage.rst +++ b/doc/en/tui_usage.rst @@ -1,5 +1,5 @@ User's guide of the TUI -======================= +####################### The functionnalities of the module HOMARD are available by python instructions. We shall find here the description of each of the functions. .. toctree:: diff --git a/doc/en/tutorials.rst b/doc/en/tutorials.rst index 317cab1f..1400b5bd 100644 --- a/doc/en/tutorials.rst +++ b/doc/en/tutorials.rst @@ -1,5 +1,5 @@ Examples -======== +######## .. index:: single: example .. index:: single: python @@ -7,7 +7,7 @@ On trouvera ici les instructions python pour quelques configurations caract C'est dans le répertoire ``dircase`` que seront écrits les fichiers résultant des adaptations successives. Ce répertoire est créé par défaut dans ``/tmp``. Loading of the module HOMARD -"""""""""""""""""""""""""""" +**************************** .. index:: single: yacs Le chargement du module HOMARD se fait de manière analogue aux autres modules. @@ -28,7 +28,7 @@ Pour utiliser le module HOMARD au sein d'un sch homard.SetCurrentStudy(salome.myStudy) Uniform refinement -"""""""""""""""""" +****************** .. index:: single: refinement;uniform On fera ici trois raffinements uniformes successifs du maillage contenu dans le fichier ``tutorial_1.00.med``. Quelques remarques : @@ -46,7 +46,7 @@ On fera ici trois raffinements uniformes successifs du maillage contenu dans le Refinement by zones -""""""""""""""""""" +******************* .. index:: single: zone On procède ici au raffinement selon des zones. Pour passer du maillage initial au maillage 'M_1', on utilise une boîte encadrant le plan z=1 et une sphère centrée sur l'origine de rayon 1.05. Puis pour passer du maillage 'M_1' au maillage 'M_2', on remplace la sphère par une boîte encadrant le cube de côté 0.5, pointant sur l'origine. On notera que le type de raffinement n'a pas été précisé ; par défaut, il sera donc conforme. @@ -62,7 +62,7 @@ On proc Refinement driven by a field -"""""""""""""""""""""""""""" +**************************** .. index:: single: field On procède ici au raffinement selon un champ. Les hypothèses servent à définir le nom du champ et les seuils de raffinement/déraffinement. La donnée du fichier et des instants est faite dans l'itération. Des champs sur les noeuds ou sur les mailles sont interpolés. @@ -80,7 +80,7 @@ Pour adapter le maillage H_1 issu de l'it Non plane boundaries -"""""""""""""""""""" +******************** .. index:: single: field .. index:: single: yacs @@ -100,7 +100,7 @@ Le sch Specific instructions for a 2D mesh -""""""""""""""""""""""""""""""""""" +*********************************** .. index:: single: 2D Les instructions pour adapter un maillage 2D sont exactement identiques à celles nécessaires à l'adaptation d'un maillage 3D. La seule exception concerne le raffinement selon des zones géométriques : des fonctions différentes sont utilisées pour pouvoir définir des zones 2D. On donne alors les coordonnées 2D des zones, en précisant l'orientation du plan du maillage. diff --git a/doc/fr/gui_create_boundary.rst b/doc/fr/gui_create_boundary.rst index 6fdbdda9..5c5cd9d3 100644 --- a/doc/fr/gui_create_boundary.rst +++ b/doc/fr/gui_create_boundary.rst @@ -14,7 +14,7 @@ Il existe deux modes de description d'une fronti Frontière discrète -================== +****************** Le suivi d'une frontière discrète se fera en sélectionnant une frontière choisie dans la liste des frontières discrètes existantes. @@ -39,7 +39,7 @@ Si des fronti Frontière analytique -==================== +******************** Au démarrage, SALOME affiche un tableau avec un seule colonne. Cette colonne contient la liste de tous les groupes du maillage initial définissant le cas. .. image:: images/create_boundary_an_1.png @@ -120,7 +120,7 @@ Cr .. index:: single: arbre d'étude L'arbre d'étude -=============== +*************** A l'issue de cette création de frontières, l'arbre d'études a été enrichi. On y trouve toutes les frontières créées, identifiées par leur nom, avec la possibilité de les éditer. .. image:: images/create_boundary_1.png @@ -128,7 +128,7 @@ A l'issue de cette cr Méthodes python correspondantes -=============================== +******************************* Consulter : :ref:`tui_create_boundary` diff --git a/doc/fr/index.rst b/doc/fr/index.rst index 8c3de163..79c264df 100644 --- a/doc/fr/index.rst +++ b/doc/fr/index.rst @@ -28,6 +28,7 @@ Pr :maxdepth: 1 intro + regles applications divers diff --git a/doc/fr/regles.rst b/doc/fr/regles.rst new file mode 100644 index 00000000..5a2704dd --- /dev/null +++ b/doc/fr/regles.rst @@ -0,0 +1,106 @@ +.. _regles: + +Règles +###### + +Quel que soit le mode d'utilisation retenu, des règles générales sont à suivre dans la constitution des données. Elles sont détaillées ici. + +Le maillage initial +******************* +.. index:: single: maillage;initial + +Le maillage comporte des noeuds, des mailles-points, des segments, des triangles, des quadrangles, des tétraèdres, des hexaèdres et/ou des pentaèdres. Il peut être de degré 1 ou 2. Il peut être en plusieurs morceaux, non connexe. +On peut tout à fait traiter des maillages qui mêlent des zones maillées en volume, et des zones maillées en surfaces. Ces zones peuvent être adjacentes ou non. +Au cours du processus de raffinement, il n'y a pas de régularisation du maillage. Il faut donc veiller à ce que le maillage initial soit le plus régulier possible. Un mauvais maillage initial produira de mauvais maillages découpés. En revanche, ce maillage initial peut être grossier. Il suffit qu'il respecte a minima les conditions initiales. +Enfin, il est souhaitable de posséder dès le départ une bonne représentation des frontières courbes. Le découpage des mailles de bord se faisant sur l'approximation de la frontière par le maillage initial, il n'y aura pas toujours un suivi très fin de courbes accentuées. Néanmoins, pour remédier à cela, un module spécifique de suivi de frontières 1D ou 2D est disponible. + +Les conditions aux limites et les sources +***************************************** +.. index:: single: conditions aux limites + +La définition des endroits où s'appliquent des conditions aux limites ou des termes source doit être faite sur des entités de même dimension que le phénomène représenté. En clair, cela signifie qu'un chargement ponctuel sera défini sur un noeud. Dans un calcul 2D, la définition des comportements sur les bords se fera par des caractérisations des segments de bord et non pas par les noeuds de bords. De même en 3D, les comportements sur les parois externes du domaine à modéliser sont établis sur les triangles ou les quadrangles qui constituent ce bord. En procédant ainsi, on est sûr de propager correctement ces définitions au fil des raffinements de maillage. + +Il ne faut surtout pas définir les conditions aux limites par les noeuds, sinon il est impossible de représenter correctement les frontières après adaptation. Cela va être démontré sur l'exemple suivant. + +.. image:: ../images/cl_0.gif + :align: center + :width: 201 + :height: 110 + +On veut modéliser ici un cas de mécanique des fluides pour lequel un écoulement entre puis sort d'une cavité. Le modèle est bidimensionnel et, classiquement, on définit les conditions aux limites par des caractérisation des noeuds. Sur le zoom dessiné ci-dessous, on a les noeuds rouges pour la paroi et les noeuds bleus pour l'entrée, les noeuds noirs étant des noeuds libres. + +.. image:: ../images/cl_1.gif + :align: center + :width: 372 + :height: 119 + +S'il s'avère que le maillage a besoin de découpage autour de la zone d'entrée, il va y avoir création de nouveaux noeuds. Tout le problème va consister à savoir à quelle catégorie appartient un nouveau noeud situé entre un noeud de paroi ou un noeud d'entrée. Si, comme sur le schéma de gauche, on privilégie la paroi, tout va bien. En revanche si, comme sur le schéma de droite, on privilégie l'entrée, il y a un problème : cela revient à agrandir artificiellement l'entrée ... et donc à fausser le calcul ! + +.. image:: ../images/cl_2.gif + :align: left + :width: 244 + :height: 129 + + +.. image:: ../images/cl_3.gif + :align: right + :width: 244 + :height: 128 + +Gérer les priorités entre les informations devient très rapidement impossible : il faudrait établir des conventions uniques pour tous les logiciels de calcul associés à HOMARD et traiter une combinaison importante de possibilités. Qui plus est, en 3D, cette technique de gestion de priorités aboutit à des impasses. Essayez d'imaginer la mise à jour des caractérisations des noeuds issus du découpage des tétraèdres dans l'angle de ce domaine. Très rapidement, il devient impossible de trancher entre le bleu, le rouge ou le vert. + +.. image:: ../images/cl_4.gif + :align: center + :width: 470 + :height: 201 + +La seule solution viable consiste à définir les conditions aux limites sur les mailles de bord. Pour reprendre notre exemple 2D en mécanique des fluides, on donne les caractéristiques paroi ou entrée aux arêtes de bord. Dans le logiciel de calcul, le programme saura transférer très facilement des arêtes vers les sommets frontaliers. + +.. image:: ../images/cl_5.gif + :align: center + :width: 372 + :height: 119 + +Si le raffinement du maillage a lieu comme précédemment, les nouvelles arêtes prennent la même caractérisation que celles dont elles sont issues : une arête de paroi découpée donne naissance à deux arêtes de paroi et une arête d'entrée découpée donne naissance à deux arêtes d'entrée. De ce fait, le logiciel de calcul n'a aucune difficulté à établir les bonnes informations sur les noeuds frontaliers. + +.. image:: ../images/cl_6.gif + :align: center + :width: 244 + :height: 129 + +La stratégie d'adaptation +************************* + +On a le choix entre plusieurs types de raffinement et de déraffinement : + + * en filtrant les indications d'erreur par des seuils prédéfinis : toutes les mailles qui portent une erreur supérieure à un seuil haut sont découpées et toutes celles pour lesquelles l'erreur est inférieure à un seuil bas sont déraffinées. Ensuite, d'autres découpages interviennent jusqu'à ce que le maillage soit conforme. + * en filtrant les indications d'erreur par des seuils dépendant de la répartition de l'erreur : toutes les mailles qui portent une erreur supérieure à un décalage par rapport à la moyenne sont raffinées. Ensuite, d'autres découpages interviennent jusqu'à ce que le maillage soit conforme. + * en filtrant avec des pourcentages de mailles : on découpe les x% de mailles à la plus forte erreur et on déraffine les y% à la plus faible erreur. + * en n'utilisant que la fonction de raffinement, avec filtrage par rapport à un seuil haut. + * inversement, en n'utilisant que la fonction de déraffinement, avec filtrage par rapport à un seuil bas. + * raffinement uniforme ; on ne tient compte d'aucun indicateur d'erreur et le maillage est découpé intégralement : chaque triangle est découpé en 4, chaque quadrangle est découpé en 4, chaque tétraèdre est découpé en 8, chaque pentaèdre est découpé en 8 et chaque hexaèdre est découpé en 8. Attention, le volume du maillage résultat peut être énorme ... + +L'indicateur d'erreur +********************* +.. index:: single: indicateur d'erreur + +La plupart du temps, l'indicateur d'erreur est un champ de valeurs réelles définis par maille. C'est un des résultats du logiciel de calcul. La sélection des mailles à découper se fait par comparaison de la valeur de l'indicateur et d'un seuil donné. +Par rapport à ce standard, HOMARD accepte deux extensions : un indicateur d'erreur exprimé par noeud et/ou un indicateur d'erreur sous forme entière. Quand l'indicateur est fourni par noeud, HOMARD attribue à chaque maille la plus grande valeur d'erreur trouvée sur les noeuds de la maille. Quand l'indicateur est sous forme entière, la convention retenue est que 1 correspond à une demande de raffinement, -1 correspond à une demande de déraffinement et 0 correspond à ne rien faire. +On n'est pas obligé de fournir une valeur sur chaque maille : si des mailles ne sont associées à aucune valeur, HOMARD leur attribuera une décision par défaut selon les préférences retenues. + +L'interpolation des champs +************************** +.. index:: single: interpolation +.. index:: single: champ + +HOMARD sait mettre à jour des champs exprimés sur le maillage. Deux cas de figure sont possibles : + + * Si le champ se présente sous la forme d'un champ aux noeuds, HOMARD produira un nouveau champ aux noeuds avec la méthode suivante. Pour un noeud présent dans les deux maillages, avant et après adaptation, la valeur du champ est gardée telle quelle. Pour un nouveau noeud, la valeur du champ est obtenue par interpolation P1 ou P2 selon le degré du maillage en fonction des valeurs sur les noeuds les plus proches. + * Si le champ se présente sous la forme d'un champ constant par maille, HOMARD produira un nouveau champ constant par maille, avec la méthode suivante. Pour une maille présente dans les deux maillages, avant et après adaptation, la valeur du champ est gardée telle quelle. Pour une maille issue d'un découpage, la valeur du champ est celle du champ sur la maille mère. Pour une maille issue d'un regroupement après déraffinement, la valeur du champ est la moyenne des valeurs du champ sur les anciennes mailles filles. + +Ces techniques de mise à jour sont basées sur des champs scalaires. Si un champ vectoriel est transmis à HOMARD par les fichiers MED, chaque composante sera traitée comme un scalaire indépendant. Ensuite, le nouveau vecteur est reconstruit en rassemblant toutes ses composantes. + + + + + diff --git a/doc/images/cl_0.gif b/doc/images/cl_0.gif new file mode 100644 index 0000000000000000000000000000000000000000..7f1d3316e0122048d32233d4b28944b583afc82a GIT binary patch literal 1411 zcmZ?wbhEHbyu^^l@STC-|Ns9C3|AON!DtAK$Pmy0`5KfL*g5_)FmlLvY*=uxnL}7B z=ER1FhZq=TyykdpTy(Ts!Z_;+N8#e*{R+-qGMO8dPfpedUKNvhLFM#xgXB{+5{1jo z&bA2Lb>`&e<^G-4^<1)ACK?wPd!$PFp4y^$a;e{9ucI8LtFEp#*_d^A)dsEW>x1_; z$(|0;iJZWEX;tj$ZEJ6DFL-=vF1NY1^R9}|ukKohE8gGVzWxY0^uZB;%CJCqQJ0q~@`S~b-2BS z@dO{Qv^m55E#=S6&O{V{e5jkMY;IRs`R2+w!C!20F{LHVm;2+d=hptteS71e`~UWL zf2%)#nt!@qY=4|>`MoWhcl*EpXI}mJv+nfi^Y`y_`1k6d`2E`df-mOO-D7+aU(2Pp zBCeTFEkmJH@EKcT>&4iPhec9(7BTH|d=+sW=K?(*b!seI@u*9uZ|SuR-J)-ga#{a{ zC-+Q94V%;VTC!tt*sZfa9#3!)%X~7?L+#~)PA@aoq{%_HoJ)g){7!~U4O41Oo#v8z za%n(Z-OJz^NuONOW?IbcT;`j#PBVCR-XWIsIXY)6r#0;Leet-UVqKbgWbM3f&m$VU z%rqiePpwF=?TjmX5#Ag0O(T5bvmF`r|9p3aF73@+CAvJlvP*PDN@tbmO1(HKg{Ipx zvqV=Vq-IRNv1ZGzRPn;C&!S!@?fTYrW9^<_T5sYt4tXsPS|d06O5SG8*CLxwTKyK@ ze92BbW~*;(_uEaUa!==$-&1mp+wrK$`(41}dEO$mujG#A?S5g#{eIWQbKR3Se#>jg T-zW3&_51w{?HmFP4Gh)*#$-j8 literal 0 HcmV?d00001 diff --git a/doc/images/cl_1.gif b/doc/images/cl_1.gif new file mode 100644 index 0000000000000000000000000000000000000000..d7499e5687ad13602ed2a6957eb05807036391e3 GIT binary patch literal 2694 zcmeH`i9Ztz1Ayl$TAPKM!0Py*IK-!5J(IWuB1mIu( zE%1L52L>zJi_AquvR6x=Y{H6*jMsa} zXjMA36TP0fVDHYnom`%5zRi#wo@#GoQ*8etLYcCgR&DW1uo!0=5JFDiZtx;$&2vOS zp<~J}9W4utY#HrycW|UZdxWIK z+1*C;X7JDHq;eRX%u(zGorJ50&$fpcaoc)5w|Dmh+D4lnr~c+;im1$|30c_AKM~cy z&!yempf|F-skTU(7t;v=)pw-*Ztl zLti;tE_H7~?p)d)rvv-=lm6?#+ta-Lv1fuMG|cnQVmYBjSCwq5zHq_UVGFNbm1&^%sc^HaVaoi3=b zR+ed|u~zK|L`9?^fvCXR1h=~@*gVHvO*qO)oKS&AevGWEIw`vmguxJ@L=0(Ai%{Xs zCvFhQRFrQ6#UiVrX?{yQs=0QB7}Y{QBHGaMnw=XR|5g?PrS!s%ZiUc+Xh{2rR9;y- zHR$XXrB@uHLu)BOZ{1r-W%_shISY?PnZ)O!=9uEReD)jgr@ zaS{qThHguf+7^+PB-j!{CYHU3pDj2TFNqm>7#92}HhJO2FYqv{JiUajtMR>$c z+AN4UM_BXzbLlCTp&;RUltFvqjsT_vjXPyf_jcnmL27{_{O~tdEmrx zPL5^lM4@Er%3e=9wq&|LUEC-A4c3B<<@zf^v0tb>k)vi_B`_E93cS-=NMZ&lh$K7Mk_tiq(Y0d}+4fBE4l@09 zt+LR8{T0@|V#u`ep<0-wQ#!dA^8dDH0BuFJ-rR58e1gBs!FfdwGZ5Vlr$tM7B)iYL%PkVRz8c^>2`k-h~pgs~0 z;#PDE<3N)`t}ts#MgKdsZIIl%izD>Vu%RarVCAV4{k=BZpU*MBVBTWCu(J`MS`z7eR!U5%2)5$ zx;0OOSQ$A{ceF8bFx1R*fBi@3<-atSQc<2Seoo-+bv0b_a&Mj(Al^2A@bNVaHGzZa z5^pqZ+{pTQ6BkwzwkI|ThMs9^y@70iUfcAsT*bJS?>4%{Xj65(SSaH>%QCpOe{=4~ z?hmIM@2j$Egg^Vd`d!kDDA2Y(f%c{E=6Dr0d4;m!1|C7}WMpNugt0Tj4h)Ma?a~Rm zvdMl=67zsh1{@ncf;-y5YOj-g7Zt>0v-uV(RKZr=Sb=H?YYIj!;%!A`XitBZqIL}E z>LhTV`cEykcMesaN<1{0vGTfX@NwB4#-%_H6E9oLK_wC^H)l9fk@PW<=7;UwvxC+9 z^ex@EK8t74n1#pa2H`lwoqbUSI{aaxN2N1(L^uj`5m;? zyfpCZ{(8scw{AJ+8aHGzw*uUb@X-j-nM#U*9yGX f)ySLmQ|4ShZdfRsdmPz?J_2famBq literal 0 HcmV?d00001 diff --git a/doc/images/cl_2.gif b/doc/images/cl_2.gif new file mode 100644 index 0000000000000000000000000000000000000000..abd0dfd02461482a8843c7f5b9a6ef7b7af38539 GIT binary patch literal 2864 zcmeH`i8~XF1Ate;`a+oF%M}V?D7k%d#vD`bGnzu~TavR}MUJh=eT-pi&AG9S$T?SG zjyaTAE}`#XN$`yagT^Sox}rdryt?|@{$F#y0~u>eVYi$D$lfC~7J{|fw{ z6#)P1`|k^!Ko;N(Pz=&g(fu3W-^^R8J|iIrJb1{yYNGZoQX|m9 z0X>DWt=H%qYQ@ap?rZvsTjJljAlN3*_lEJtqS&F9n&2dk_#rXVtZ)8k zB|2rxw3&#`t04GPD`FK7PA70g)YY9@ywE&vRfqC0rm0$*3O4RL8?f_i(BcBt2yQ*B z)I1+e4Z?nj9cHwH!PAbH0R`24NsQ3L56Bk8Vwc}s7LQr2WVzqih}d>NA)UqiRlkx? z{H;wd37KP-v=nsypttM3Kizt*+{s|Hsl<>5doRY3`{+lzJ8h$)clNqkO(k~rrz~>_ zEn&^K^!jj56ZO82XYQ#VFLLI9o8iyNo#Sg5{k9E8z+&haPl3g+ssYr8y1jEWPrwg3 zjAyq+!XC2x+s-lijKqE-`?)E$MPWmBiR@%tY!Zk1NnLVa?(-g7D(B_ThRInC&j4C0 zYz}pedJ?lv;NitTCQxlj3E8ALLWDwt0C^00|js*rAtuVUQm@<}NQ*y#Sh$Yo7W7`d zIP7c=ZMvRS{L4#LkNHs{?eOI@HE%8l`bX(#TR8G+4VPYcPnBPF{`)K`4!&oWj=`Y? zoOJJtmNWyK>AOi1;2I?x?cvo+p!8v~%nhh4`mAei$awDp)dHyc(DrjOa@z-ZApF4# zo>{{DTCR?3CkE==fi+EBR>i0rhWT75MO|3>O%-I_d9nm5Cr@tZ)8uuMJub$r+}t!= zDX>me<*ER3OJ4ukLZUGvD!E$gjD3a1mkU9U#1~8O`5QK0Xdo{^rFvbyKPM>lpc;8W zI^;6CBd$LWDWkMWs*~4!wJU&HBg;b~hEywg)KRi;HV0(?7|Xaf8eZ_!gQ6xk`I8$P zZ^|gLMi9qIG-{17x7*!+YBai15$~Mh#hgg!(X{F8ApaV)T_16Z=%XG*(=B&e^PeGA z@w|ilP~1F3&)^SR>p~W{VK0WJADgNN#jt}<@xHTtcq%$k2J8)Ua_C)p7v}37=*+3> z*qG-S?5WQ1lOeT?c;j2ptsVw?qHZ)+ng%j8YA5hs!2GKEbMM&CpAp%Mi*||ZF>}iyD$2-o`ZB8_mAHdqoNtsPnfd0Cej>>Qc&gGl$*$thx8RxYFVw{y9qPAHi1`*f zSz;wqr|I_wMpxD9<`AOGQEsF73O@DnSxem@rF-!bW}O-ZoU^#qAM{OW*=eHOvd=Ru zoXc$U^sT8^F3}!{315PnNvvmUw?CBSq`|S@*IwS_r{vnZP|Tyl5#r(A;1F60BIQuQ zkhzu?`Q!!cDD0K|Ycm6m3f5?RN<;~Bb6s-ag`621)_|fdJkA0Z8dT(f|Me literal 0 HcmV?d00001 diff --git a/doc/images/cl_3.gif b/doc/images/cl_3.gif new file mode 100644 index 0000000000000000000000000000000000000000..cf237e43293a39b3426eb3fc96b65f60c074c9fb GIT binary patch literal 2831 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 literal 0 HcmV?d00001 diff --git a/doc/images/cl_5.gif b/doc/images/cl_5.gif new file mode 100644 index 0000000000000000000000000000000000000000..7433586de618ae45c93042607cb3944bc7b454c1 GIT binary patch literal 2675 zcmeH`i8~XF1Aw=Dj=oa;(jnz2rEh3+c#|Zjpow_bT*<;7QMY?}bIbclhN3=l{#^^9 zKU?ia`Wahl^+4WvX&1x*wPvVD$5+Y9wzYNyZydQgPjspsE5DZXyLCq^ahz~7FMi#m zjl`+Dt)N+I*G|5h10^6A1}AxwO)NmeNsPq@tt%C5@E?@he<1}_ zBxw5ARV*pPzs08SrFjzE!`&*&_5LIiCrSrN(PZ=t z**Bw5Vuz?F;s#0eZ^oIL#MA*CsF5Ltuhmob1>u`JEwJmQok|Dr#8IZqMsv3Vem$I{ z*Xh<)UpcseTy%PjqJDh(xPdm8zPsMet8xkItb0WfF!AySLIXvka~q7E+`>)9%G80d zo+?NCu!k~h6nHOyLn-Ny#mKbu3JlM*1SlBIE3pa41l@pDw6+fJ%*tB$fJQcy`j#}J z72yviAasTxtl@|zqiIx0x2fyf*5L|qLS)wsXVa*$JkawtKRc<+t#R1Z20f1BEoJV+ z`TO^TENkCVgK3M<%v1fI1bo{}(TmLJS?idt?OAxw07Dqs`uYxlu*yiC@h3C}l4(Do(O85Yk&B&kHN z=B$Z3ScVid?KSoAX#8t0j)nVV_4Xp8l3cDLoWdzc%tlkD_lma$A&~fuq73CLKl)FL zqqhCAFeB0H(4Lm>xr8gP*65J=uH_&C1}!YUnys^2(=#Ui{2lM!BWB3T_vGu3ZHmOl z*HrgVhB&Ih=#%XmUcenAb4gr7t+zSK0>uSNFp4atqqkG%eJhso zi>=O`2>1WYQ4@)#Yj#S4(qRczdsTn1FL{nHMi-$dX>hLTbG+`{Tie&95f}Cy9;ko;Mapn+UB78u!tlH97>wX=OI# zBPx~$Oy4IjHaJV&cz9iPbu8&zWd84&bru&)9Rn;hy-%|Lus+Kiw`|EEC|j#ojM;+o zYky!=gFzKA+_;Dx;Ivx}Z$()po&Lc{dQUN9kxr(b+ znyk?)Ks&RMcN>cCHik@6ER*@JiG$@PyvwM{h)L3C5U6gszTv@B3Y-Ubf$~4phO^fY zLb&U7>-0t~^&n5*v}*m*g0QCxK|WGiIkLu6Eg1P>-?L_J0H_G~B6!_TKZrXb*r1ke zXgyRtJw5K^(pGyZ7+K;EpJ0;P>%>Pn?+d=#P4)2$v4IJ+j|Ofce=hgG{sAM zEee@CuU3O03198+Zw}HsJ*bfIwV{uDi}W5q)+SmC>IEF5y_U1s#7HN5>|UPf7=0A> z>@3QIedi~Wwh){`=!752Hl&|!48dCe@|LGh*_@;`2QJ`>r>Kg$U>m3Bj$J-O2wJ+{ z;yNE3xuQJh){o`s<`771J@$9D<|QgT``3BmvK!tmOCe9)dboFL{{TEO;tB=j2ZnHm z9tEowvdO%VbjFZZt@Fika~_1wbsG*iw2kAP2>?xVM?)I}^RJpRbO{2IXuTEBF`qCy zyxI_Jc)47<^qYCiW`moJOLdx(UrKbuFmrhtc2V9OX2#*9?(yq{D4xdl82x K5daVfF#8)Ockdkl literal 0 HcmV?d00001 diff --git a/doc/images/cl_6.gif b/doc/images/cl_6.gif new file mode 100644 index 0000000000000000000000000000000000000000..b93fa9c7b44138b594530e7972423837e4fcf5c7 GIT binary patch literal 2829 zcmeH`i8~XH1BWLaQVA7BA&NHUnyZO&q%ou-UlgGcbL6g+98vDtMs8xvX3p8h=2-4w z%zcIA`Z7o4K7UVt$M5_31K#I(-{<+ z;Qy?E++W|nUpT>Y2;kzm3@gd{9>#MH^rWT4UYCns$|wz1n%x-92XXz;Qkv5oFQEsm zf|X&JpClgf*Q;1e*u5QB9HcH_L_2p!1I$T{onDpw;JlL9AJYE~j zjjN_pOD5_Cj>+1#S18ywe3nAH8&`TyH=`iP43|pMY;BTyw3x{XX|Bgp4{Zw;AtMI} zR&8;6w2j%43LnlGi%wl0XN1|MZ=qkAPTm~aF|T=B2#bM&4b)xFd93#ij0VYBq3Q5t z`RSU&^S8%5?)`=v*64Sl-oiJRS<#Eh8T&pvi?dB1i&65;=d~%*Ia^*?7@~(UHHK!~@d2n7e%N zvX=WzMDGT*Fv2_&Kz&Qf8=MybvsPy=7qKPJf=TU0XX)k5eh0)dcBIjn@}39CD4+gI z_p2aOXrQ}F^MMD;Z^!|y*_HYI?O&L{jK$u&>Ps#& zHWBhWbNN)U?Rnz4TbfIqf^^MF^3D=yF^hAs+fsrvegCKVQI$8jk_d9 z0oNIDJIH2>=J1WJF64Wy4gKag*VKIJ_^PbH2nFr7DNp7$_ts=*&7EzIr#4_ekZ}MQ ztlbt+e9wJ4EAz-d3{@rmkP;CF_kMH!NnXWJA<>~4 zEhnFr=_Z!5!-3}~j$2*Siw$Onfhz5Jd|v5^)Ra+E18W3XuS7wsvW2LyTsiNRXp1$;i_JHhltN2m%#C3J_FE0{M6c_f#)g-t zlk`RV1>yp*j-sPU_hiJn;^FNrVmit&zJmwx=k)C*Rw`hU{_J-rjIsRUusXd6?B@tK ztdw{QB<>%6)R)uGc6v2*%!0ZxxmC}(`*1McP-RRjDe_3|KY7t&`k z@D%cNnmD3XyS@ddT! zGQ9Vgx#|Q>&Q{4CdopLj!WU&#E@o{WwKBDE?LjpyzR=qp){o|W6c~iTH%!faPnkE* z-snZRwh>J6pgz1Si(qjVWT_5i7Z~*A+Aa>?tq1iNhmwg-2Pq zqntu6wkF@ORV7${U-k1{-4lJro!U_=NGXXm;W*OYkeM~AWhio*9VuC}t-m+0FOZ-c zJv&79qL5OwTu1on=Izi8zev>uq@HZovqL_4GR9qc?$ZhLkxn#-*MfkPyYE zZ_&erZppGL4rE?f^7$reGhQTA`Mu9MU*b~d^ah01k(*ekZ__^K)QO!gyz;V3)OJNV zAcuVo14%&I?nXkY=fRmT?0}#kUX>b7wL)-h8`hdhG+^6Bv_e=;24z&q%%C911 zGmV4M6&-rs=V2BdJs$z3(?HQIY02dcP F^M6>rHi7^E literal 0 HcmV?d00001 -- 2.39.2