Classe permettant d'accéder aux méthodes spécifiques AMR du maillage cartesien. Plus de détails...
#include <arcane/cartesianmesh/CartesianMeshAMRMng.h>
Graphe de collaboration de Arcane::CartesianMeshAMRMng:Fonctions membres publiques | |
| CartesianMeshAMRMng (ICartesianMesh *cmesh) | |
| Constructeur. | |
| Int32 | nbPatch () const |
| Nombre de patchs du maillage. | |
| CartesianPatch | amrPatch (Int32 index) const |
| Retourne le index-ième patch du maillage. | |
| CartesianMeshPatchListView | patches () const |
| Vue sur la liste des patchs. | |
| void | refineZone (const AMRZonePosition &position) const |
| Raffine un bloc du maillage cartésien. | |
| void | coarseZone (const AMRZonePosition &position) const |
| Dé-raffine un bloc du maillage cartésien. | |
| void | beginAdaptMesh (Int32 max_nb_levels, Int32 level_to_refine_first) |
| Méthode permettant de commencer le raffinement du maillage. | |
| void | adaptLevel (Int32 level_to_adapt) const |
| Méthode permettant de créer un niveau de raffinement du maillage. | |
| void | endAdaptMesh () |
| Méthode permettant de terminer le raffinement du maillage. | |
| void | clearRefineRelatedFlags () const |
| Méthode permettant de supprimer les flags liés au raffinement de toutes les mailles. | |
| void | setOverlapLayerSizeTopLevel (Int32 new_size) const |
| Méthode permettant de modifier le nombre de couches de mailles de recouvrement sur le niveau de raffinement le plus haut. | |
| void | disableOverlapLayer () |
| Méthode permettant de désactiver les couches de mailles de recouvrement (et de les détruire si présentes). | |
| Integer | reduceNbGhostLayers (Integer level, Integer target_nb_ghost_layers) const |
| Méthode permettant de supprimer une ou plusieurs couches de mailles fantômes sur un niveau de raffinement défini. | |
| void | mergePatches () const |
| Méthode permettant de fusionner les patchs qui peuvent l'être. | |
| void | createSubLevel () const |
| Méthode permettant de créer un sous-niveau ("niveau -1"). | |
Attributs privés | |
| ICartesianMesh * | m_cmesh |
Classe permettant d'accéder aux méthodes spécifiques AMR du maillage cartesien.
Une instance de cette classe est valide tant que le ICartesianMesh passé en paramètre du constructeur est valide.
Définition à la ligne 40 du fichier CartesianMeshAMRMng.h.
|
explicit |
Constructeur.
Définition à la ligne 39 du fichier CartesianMeshAMRMng.cc.
| void Arcane::CartesianMeshAMRMng::adaptLevel | ( | Int32 | level_to_adapt | ) | const |
Méthode permettant de créer un niveau de raffinement du maillage.
Cette méthode ne peut être appelée que si le maillage est un maillage AMR (IMesh::isAmrActivated()==true) et que le type de l'AMR est 3 (PatchCartesianMeshOnly).
Cette méthode est la seconde d'un trio de méthodes nécessaires pour raffiner le maillage :
Cette seconde méthode va permettre de raffiner le maillage niveau par niveau.
Attention, le paramètre level_to_adapt désigne bien le niveau à raffiner, donc la création du niveau level_to_adapt +1 (si on veut raffiner le niveau 0, alors il y aura création du niveau 1).
Avant d'appeler cette méthode, il faut ajouter le flag "II_Refine" sur les mailles qui doivent être raffinées, sur le niveau level_to_adapt uniquement. Pour être sûr de n'avoir aucun flag déjà présent sur le maillage, il est possible d'appeler la méthode clearRefineRelatedFlags().
Pour le raffinement des mailles hors niveau 0 (ce niveau "ground" ayant un statut particulier), les mailles pouvant être raffinées doivent posséder le flag "II_InPatch". Les mailles n'ayant pas le flag "II_InPatch" ne peuvent pas être raffinés.
Les mailles du niveau level_to_adapt déjà raffinées, mais n'ayant pas de flag "II_Refine" pourront être supprimées lors de l'appel à la troisième méthode. Cette méthode redessine les patchs et créée les nouvelles mailles enfant si nécessaire, mais ne supprime pas de mailles. La troisième méthode se chargera de supprimer toutes les mailles n'appartenant à aucun patch.
Une fois cette méthode appelée, le niveau level_to_adapt +1 est prêt à être utilisé, notamment pour marquer les mailles "II_Refine", et rappeler cette méthode pour créer un autre niveau, &c.
Cette méthode est faite pour être appelé itérativement, niveau par niveau (du niveau le plus bas au niveau le plus haut). Si des patchs de niveaux supérieurs à level_to_adapt sont détectés, ils seront supprimés. Il est donc possible d'appeler cette méthode pour un niveau n, puis de la rappeler pour un niveau n-1 par exemple (attention néanmoins au nombre de nouvelles mailles créées).
Cette opération est collective.
| level_to_adapt | Le niveau à adapter. |
Définition à la ligne 102 du fichier CartesianMeshAMRMng.cc.
| CartesianPatch Arcane::CartesianMeshAMRMng::amrPatch | ( | Int32 | index | ) | const |
Retourne le index-ième patch du maillage.
Si le maillage est cartésien, il n'y a qu'un seul patch.
L'instance retournée reste valide tant que cette instance n'est pas détruite.
Définition à la ligne 56 du fichier CartesianMeshAMRMng.cc.
| void Arcane::CartesianMeshAMRMng::beginAdaptMesh | ( | Int32 | max_nb_levels, |
| Int32 | level_to_refine_first ) |
Méthode permettant de commencer le raffinement du maillage.
Cette méthode ne peut être appelée que si le maillage est un maillage AMR (IMesh::isAmrActivated()==true) et que le type de l'AMR est 3 (PatchCartesianMeshOnly).
Cette méthode est la première d'un trio de méthodes nécessaires pour raffiner le maillage :
Cette première méthode va permettre de préparer le maillage au raffinement.
Il est nécessaire de passer en paramètre de la méthode le nombre de niveaux de raffinements qui va y avoir pendant cette phase de raffinement (max_nb_levels).
Il est recommandé de mettre le nombre exact de niveaux pour éviter un ajustement du nombre de couches de mailles de recouvrements lors de l'appel à la troisième méthode qui est couteux en calcul.
Il est aussi nécessaire de passer en paramètre le premier niveau à être raffiné. Si deux niveaux sont déjà présent sur le maillage (0 et 1) et que vous souhaitez uniquement créer un troisième niveau (niveau 2) à partir du second niveau (niveau 1), vous pouvez mettre 1 au paramètre level_to_refine_first.
Si deux niveaux sont déjà présent sur le maillage (0 et 1) et que vous souhaitez repartir de zéro, vous pouvez mettre 0 au paramètre level_to_refine_first. Dans ce cas, les patchs du niveau 1 seront supprimés, mais pas les mailles/faces/noeuds. Une fois les nouveaux patchs de niveau 1 créés à l'aide de la deuxième méthode, la troisième méthode s'occupera de supprimer les items en trop. Cela permet de conserver les valeurs des variables pour les mailles/faces/noeuds qui étaient dans un patch avant et qui sont conservés dans un nouveau patch.
Exemple d'exécution :
Cette opération est collective.
| max_nb_levels | Le nombre de niveaux de raffinement désiré. |
| level_to_refine_first | Le niveau qui sera raffiné en premier. |
Définition à la ligne 92 du fichier CartesianMeshAMRMng.cc.
| void Arcane::CartesianMeshAMRMng::clearRefineRelatedFlags | ( | ) | const |
Méthode permettant de supprimer les flags liés au raffinement de toutes les mailles.
Les flags concernés sont :
Définition à la ligne 120 du fichier CartesianMeshAMRMng.cc.
| void Arcane::CartesianMeshAMRMng::coarseZone | ( | const AMRZonePosition & | position | ) | const |
Dé-raffine un bloc du maillage cartésien.
Cette méthode ne peut être appelée que si le maillage est un maillage AMR (IMesh::isAmrActivated()==true).
Les mailles dont les positions des centres sont comprises entre position et (position+length) sont dé-raffinées et les informations de connectivité correspondantes sont mises à jour.
Toutes les mailles dans la zone de dé-raffinement doivent être du même niveau.
Les patchs ne contenant plus de mailles après l'appel à cette méthode seront supprimés.
Cette opération est collective.
Définition à la ligne 83 du fichier CartesianMeshAMRMng.cc.
| void Arcane::CartesianMeshAMRMng::createSubLevel | ( | ) | const |
Méthode permettant de créer un sous-niveau ("niveau -1").
Cette méthode ne peut être appelée que si le maillage est un maillage AMR (IMesh::isAmrActivated()==true).
Dans le cas d'utilisation de l'AMR type 3 (PatchCartesianMeshOnly), il est possible d'appeler cette méthode en cours de calcul et autant de fois que nécessaire (tant qu'il est possible de diviser la taille du niveau 0 par 2). Une fois le niveau -1 créé, tous les niveaux sont "remontés" (donc le niveau -1 devient le niveau 0 "ground").
Définition à la ligne 179 du fichier CartesianMeshAMRMng.cc.
Références ARCANE_FATAL, Arcane::Cell, Arcane::CartesianMeshUtils::createCartesianMeshCoarsening2(), Arcane::Patch, et Arcane::PatchCartesianMeshOnly.
Voici le graphe d'appel pour cette fonction :| void Arcane::CartesianMeshAMRMng::disableOverlapLayer | ( | ) |
Méthode permettant de désactiver les couches de mailles de recouvrement (et de les détruire si présentes).
Définition à la ligne 142 du fichier CartesianMeshAMRMng.cc.
Références Arcane::Cell.
| void Arcane::CartesianMeshAMRMng::endAdaptMesh | ( | ) |
Méthode permettant de terminer le raffinement du maillage.
Cette méthode ne peut être appelée que si le maillage est un maillage AMR (IMesh::isAmrActivated()==true) et que le type de l'AMR est 3 (PatchCartesianMeshOnly).
Cette méthode est la troisième d'un trio de méthodes nécessaires pour raffiner le maillage :
Cette troisième méthode va permettre de terminer le raffinement du maillage, notamment de supprimer les mailles n'appartenant plus à aucun patch.
Si le plus haut niveau raffiné avec la seconde méthode ne correspond pas au paramètre max_nb_levels de la première méthode, il y aura ajustement du nombre de couches de mailles de recouvrement.
Cette opération est collective.
Définition à la ligne 111 du fichier CartesianMeshAMRMng.cc.
| void Arcane::CartesianMeshAMRMng::mergePatches | ( | ) | const |
Méthode permettant de fusionner les patchs qui peuvent l'être.
Cette méthode ne peut être appelée que si le maillage est un maillage AMR (IMesh::isAmrActivated()==true). Si le type de l'AMR n'est pas 3 (PatchCartesianMeshOnly), la méthode ne fait rien.
Cette méthode peut être utile après plusieurs appels à refineZone() et à coarseZone(). En revanche, un appel à cette méthode est inutile après un appel à adaptLevel() car adaptLevel() s'en occupe.
Définition à la ligne 164 du fichier CartesianMeshAMRMng.cc.
Références Arcane::Cell.
| Int32 Arcane::CartesianMeshAMRMng::nbPatch | ( | ) | const |
Nombre de patchs du maillage.
Il y a toujours au moins un patch qui représente le maillage cartésien.
Définition à la ligne 47 du fichier CartesianMeshAMRMng.cc.
| CartesianMeshPatchListView Arcane::CartesianMeshAMRMng::patches | ( | ) | const |
Vue sur la liste des patchs.
Définition à la ligne 65 du fichier CartesianMeshAMRMng.cc.
| Integer Arcane::CartesianMeshAMRMng::reduceNbGhostLayers | ( | Integer | level, |
| Integer | target_nb_ghost_layers ) const |
Méthode permettant de supprimer une ou plusieurs couches de mailles fantômes sur un niveau de raffinement défini.
Le nombre de couches de mailles fantômes souhaité peut être augmenté par la méthode. Il est nécessaire de récupérer la valeur retournée pour avoir le nombre de couches de mailles fantômes final.
| level | Le niveau de raffinement concerné par la suppression des mailles fantômes. |
| target_nb_ghost_layers | Le nombre de couches souhaité après appel à cette méthode. ATTENTION : Il peut être ajusté par la méthode. |
Définition à la ligne 155 du fichier CartesianMeshAMRMng.cc.
| void Arcane::CartesianMeshAMRMng::refineZone | ( | const AMRZonePosition & | position | ) | const |
Raffine un bloc du maillage cartésien.
Cette méthode ne peut être appelée que si le maillage est un maillage AMR (IMesh::isAmrActivated()==true).
Les mailles dont les positions des centres sont comprises entre position et (position+length) sont raffinées et les informations de connectivité correspondantes sont mises à jour.
Cette opération est collective.
Définition à la ligne 74 du fichier CartesianMeshAMRMng.cc.
| void Arcane::CartesianMeshAMRMng::setOverlapLayerSizeTopLevel | ( | Int32 | new_size | ) | const |
Méthode permettant de modifier le nombre de couches de mailles de recouvrement sur le niveau de raffinement le plus haut.
Un appel à cette méthode va déclencher l'ajustement du nombre de couches pour tous les patchs déjà présent.
Le paramètre new_size doit être un nombre pair (sinon, il sera modifié au nombre pair supérieur).
| new_size | Le nouveau nombre de couches de mailles de recouvrement. |
Définition à la ligne 129 du fichier CartesianMeshAMRMng.cc.
Références Arcane::Cell.
|
private |
Définition à la ligne 348 du fichier CartesianMeshAMRMng.h.