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();
97 center += nodes_coord[node];
99 bool is_inside_x = center.
x > min_pos.
x && center.
x < max_pos.
x;
100 bool is_inside_y = center.
y > min_pos.
y && center.
y < max_pos.
y;
101 bool is_inside_z = (center.
z > min_pos.
z && center.
z < max_pos.
z) || !m_is_3d;
102 if (is_inside_x && is_inside_y && is_inside_z) {
104 level = cell.
level();
105 else if (level != cell.
level())
106 ARCANE_FATAL(
"Level pb -- Level recorded before : {0} -- Cell Level : {1} -- CellUID : {2}", level, cell.
level(), cell.
uniqueId());
107 cells_local_id.
add(icell.itemLocalId());
112 CartCoord3Type pos = numbering->cellUniqueIdToCoord(cell);
134 if (level != -1 && level != level_r) {
144 if (nb_cells != nb_cells_patch) {
164 auto numbering =
mesh->_internalApi()->cartesianMeshNumberingMngInternal();
167 min_n_max[0] = INT32_MAX;
168 min_n_max[1] = INT32_MAX;
169 min_n_max[2] = INT32_MAX;
180 const Real3 min_pos = m_position;
181 const Real3 max_pos = min_pos + m_length;
188 center += nodes_coord[node];
190 bool is_inside_x = center.
x > min_pos.
x && center.
x < max_pos.
x;
191 bool is_inside_y = center.
y > min_pos.
y && center.
y < max_pos.
y;
192 bool is_inside_z = (center.
z > min_pos.
z && center.
z < max_pos.
z) || !m_is_3d;
193 if (is_inside_x && is_inside_y && is_inside_z) {
195 level = cell.
level();
196 else if (level != cell.
level())
197 ARCANE_FATAL(
"Level pb -- Level recorded before : {0} -- Cell Level : {1} -- CellUID : {2}", level, cell.
level(), cell.
uniqueId());
202 const CartCoord3Type pos = numbering->cellUniqueIdToCoord(cell);
224 if (level != -1 && level != level_r) {
235 if (nb_cells != nb_cells_patch) {
243 mesh->traceMng()->info() <<
"Position test -- Min : " <<
position.minPoint() <<
" -- Max : " <<
position.maxPoint() <<
" -- Level : " <<
position.level();
#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.
Tableau 1D de taille fixe.
constexpr __host__ __device__ ArrayView< T > view()
Vue modifiable sur le tableau.
Interface d'un maillage cartésien.
NodeConnectedListViewType nodes() const
Liste des noeuds de l'entité
Int32 nbNode() const
Nombre de noeuds de 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.
Real y
deuxième composante du triplet
Real z
troisième composante du triplet
Real x
première composante du triplet