Cette page explique quelques notions pour comprendre le fonctionnement de l'AMR dans Arcane.
Classe Arcane::CartesianPatch.
Pour l'AMR type 1, un patch est un ensemble de mailles. Ces mailles ne forment pas forcément un ensemble contigü. Ces mailles sont regroupées dans un groupe de mailles accessible via la méthode Arcane::CartesianPatch::cells().
Pour l'AMR type 3, un patch est un ensemble de mailles d'un même niveau et englobé au sein d'une boite englobante (patch régulier). Cette boite englobante est décrite par les coordonnées topologiques de deux mailles dans la grille cartésienne : min et max.
min et max auront les mêmes valeurs en multi sous-domaine ou en mono sous-domaine.
Cette boite englobante est décrite par la classe Arcane::AMRPatchPosition. Chaque patch contient une instance de cette classe, accessible via la méthode Arcane::CartesianPatch::position().
Trois groupes de mailles sont accessibles pour chaque patch :
Arcane::CartesianPatch::cells(),Arcane::CartesianPatch::overlapCells() (ayant le flag II_Overlap),Arcane::CartesianPatch::inPatchCells() (ayant le flag II_InPatch).Les mailles de recouvrement désignent les mailles autour des patchs (autour des boites englobantes).
(en pointillé, on a les mailles/faces/noeuds de recouvrements / 2 couches pour le niveau 1)
Ces mailles permettent deux choses. D'abord, elles permettent d'obtenir les valeurs autour des items du patch (en trait plein sur l'image) (comme les mailles fantômes pour le calcul à la frontière des sous-domaines).
(on peut voir des mailles de recouvrement qui recouvrent des mailles d'autres patchs (II_Overlap && II_InPatch))
Ensuite, elles permettent d'éviter d'avoir plus d'un niveau de différence entre deux mailles. En effet, il n'est pas possible de raffiner une maille de recouvrement pure (II_Overlap && ! II_InPatch).
(2 couches pour le niveau 1 / 0 couche pour le niveau 2)
Il est possible de modifier le nombre de couches de mailles de recouvrement du niveau le plus haut via la méthode Arcane::CartesianMeshAMRMng::setOverlapLayerSizeTopLevel(Int32 new_size). Le nombre de couches des autres niveaux sera calculé automatiquement.
Il est aussi possible de désactiver la création de ces couches avec la méthode Arcane::CartesianMeshAMRMng::disableOverlapLayer(). Dans ce cas, il pourra y avoir plus d'un niveau de différence entre niveaux.
(Lire la page Utilisation des infos par direction avant de continuer)
Chaque patch (pour les deux types d'AMR) possède ses propres directions, pour chaque item.
Ces directions sont accessibles via les patchs (Arcane::CartesianPatch). Le fonctionnement est le même qu'avec le maillage sans AMR.
Deux nouvelles méthodes sont disponibles pour accéder aux groupes d'items InPatch et Overlap :
Arcane::CellDirectionMng::inPatchCells() et Arcane::CellDirectionMng::overlapCells(),Arcane::FaceDirectionMng::inPatchFaces() et Arcane::FaceDirectionMng::overlapFaces(),Arcane::NodeDirectionMng::inPatchNodes() et Arcane::NodeDirectionMng::overlapNodes().Exemple :
Dans ce bout de code, avec au moins une couche de mailles de recouvrement, on est sûr que dir_face.previousCell() et dir_face.nextCell() ne sont pas nulles (sauf au bord du sous-domaine).