13#include "arcane/cartesianmesh/AMRZonePosition.h"
15#include "arcane/utils/FixedArray.h"
16#include "arcane/utils/ITraceMng.h"
18#include "arcane/core/IMesh.h"
19#include "arcane/core/MeshKind.h"
20#include "arcane/core/IParallelMng.h"
22#include "arcane/cartesianmesh/AMRPatchPosition.h"
23#include "arcane/cartesianmesh/ICartesianMesh.h"
25#include "arcane/cartesianmesh/internal/ICartesianMeshInternal.h"
42 Real3 min_pos = m_position;
43 Real3 max_pos = min_pos + m_length;
45 cells_local_id.
clear();
50 center += nodes_coord[node];
52 bool is_inside_x = center.
x > min_pos.
x && center.
x < max_pos.
x;
53 bool is_inside_y = center.
y > min_pos.
y && center.
y < max_pos.
y;
54 bool is_inside_z = (center.
z > min_pos.
z && center.
z < max_pos.
z) || !m_is_3d;
55 if (is_inside_x && is_inside_y && is_inside_z) {
58 cells_local_id.
add(icell.itemLocalId());
73 auto numbering =
mesh->_internalApi()->cartesianMeshNumberingMngInternal();
76 min_n_max[0] = INT32_MAX;
77 min_n_max[1] = INT32_MAX;
78 min_n_max[2] = INT32_MAX;
89 Real3 min_pos = m_position;
90 Real3 max_pos = min_pos + m_length;
92 cells_local_id.
clear();
109 center += nodes_coord[node];
111 bool is_inside_x = center.
x > min_pos.
x && center.
x < max_pos.
x;
112 bool is_inside_y = center.
y > min_pos.
y && center.
y < max_pos.
y;
113 bool is_inside_z = (center.
z > min_pos.
z && center.
z < max_pos.
z) || !m_is_3d;
114 if (is_inside_x && is_inside_y && is_inside_z) {
116 level = cell.
level();
117 else if (level != cell.
level())
118 ARCANE_FATAL(
"Level pb -- Level recorded before : {0} -- Cell Level : {1} -- CellUID : {2}", level, cell.
level(), cell.
uniqueId());
119 cells_local_id.
add(icell.itemLocalId());
124 CartCoord3 pos = numbering->cellUniqueIdToCoord(cell);
146 if (level != -1 && level != level_r) {
156 if (nb_cells != nb_cells_patch) {
176 auto numbering =
mesh->_internalApi()->cartesianMeshNumberingMngInternal();
179 min_n_max[0] = INT32_MAX;
180 min_n_max[1] = INT32_MAX;
181 min_n_max[2] = INT32_MAX;
192 const Real3 min_pos = m_position;
193 const Real3 max_pos = min_pos + m_length;
195 Int64 d_cell_level = -1;
212 center += nodes_coord[node];
214 bool is_inside_x = center.
x > min_pos.
x && center.
x < max_pos.
x;
215 bool is_inside_y = center.
y > min_pos.
y && center.
y < max_pos.
y;
216 bool is_inside_z = (center.
z > min_pos.
z && center.
z < max_pos.
z) || !m_is_3d;
217 if (is_inside_x && is_inside_y && is_inside_z) {
219 level = cell.
level();
222 else if (level != cell.
level())
223 ARCANE_FATAL(
"Level pb -- Level recorded before : {0} -- CellUID before : {1} -- Cell Level : {2} -- CellUID : {3}", level, d_cell_level, cell.
level(), cell.
uniqueId());
228 const CartCoord3 pos = numbering->cellUniqueIdToCoord(cell);
250 if (level != -1 && level != level_r) {
261 if (nb_cells != nb_cells_patch) {
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Classe permettant de définir la position d'un patch dans le maillage cartésien.
void cellsInPatch(IMesh *mesh, UniqueArray< Int32 > &cells_local_id) const
Méthode permettant de retrouver les mailles incluses dans la zone.
Real3 position() const
Méthode permettant de retrouver la position de la zone.
AMRPatchPosition toAMRPatchPosition(ICartesianMesh *mesh) const
Méthode permettant de convertir ce AMRZonePosition en AMRPatchPosition.
Vue modifiable d'un tableau d'un type T.
void clear()
Supprime les éléments du tableau.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
Cell hChild(Int32 i) const
i-ème enfant AMR
bool hasHChildren() const
Tableau 1D de taille fixe.
constexpr __host__ __device__ ArrayView< T > view()
Vue modifiable sur le tableau.
Interface d'un maillage cartésien.
@ II_InPatch
[AMR Patch] L'entité est marqué comme étant dans un patch AMR.
NodeConnectedListViewType nodes() const
Liste des noeuds de l'entité
Int32 nbNode() const
Nombre de noeuds de l'entité
constexpr bool hasFlags(Int32 flags) const
Retourne si les flags flags sont positionnées pour l'entité
ItemUniqueId uniqueId() const
Identifiant unique sur tous les domaines.
Classe gérant un vecteur de réel de dimension 3.
Vecteur 1D de données avec sémantique par valeur (style STL).
MeshVariableScalarRefT< Node, Real3 > VariableNodeReal3
Grandeur au noeud de type coordonnées.
@ ReduceSum
Somme des valeurs.
@ ReduceMin
Minimum des valeurs.
@ ReduceMax
Maximum des valeurs.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::int64_t Int64
Type entier signé sur 64 bits.
@ PatchCartesianMeshOnly
Le maillage est AMR par patch cartésien (rectangulaire)
std::int32_t Int32
Type entier signé sur 32 bits.
Int32x3 CartCoord3
Représente les coordonnées 3D d'un élément dans la grille cartésienne {x, y, z}.
Real y
deuxième composante du triplet
Real z
troisième composante du triplet
Real x
première composante du triplet