14#include "arcane/cartesianmesh/AMRPatchPosition.h"
17#include "arcane/utils/FatalErrorException.h"
18#include "arcane/utils/Math.h"
34, m_overlap_layer_size(0)
43, m_min_point(min_point)
44, m_max_point(max_point)
45, m_overlap_layer_size(overlap_layer_size)
100 m_min_point = min_point;
118 m_max_point = max_point;
127 return m_overlap_layer_size;
136 m_overlap_layer_size = layer_size;
145 return m_min_point - m_overlap_layer_size;
154 return m_max_point + m_overlap_layer_size;
163 return static_cast<Int64>(m_max_point.x - m_min_point.x) * (m_max_point.y - m_min_point.y) * (m_max_point.z - m_min_point.z);
170cut(CartCoordType cut_point,
Integer dim)
const
172 CartCoord3Type patch_max_cut = m_max_point;
173 CartCoord3Type patch_min_cut = m_min_point;
176 patch_max_cut.x = cut_point;
177 patch_min_cut.x = cut_point;
180 patch_max_cut.y = cut_point;
181 patch_min_cut.y = cut_point;
184 patch_max_cut.z = cut_point;
185 patch_min_cut.z = cut_point;
203 const CartCoord3Type min_point = other_patch.
minPoint();
204 const CartCoord3Type max_point = other_patch.
maxPoint();
205 return m_level == other_patch.
level() &&
206 (((m_min_point.x == max_point.x || m_max_point.x == min_point.x) &&
207 (m_min_point.y == min_point.y && m_max_point.y == max_point.y) &&
208 (m_min_point.z == min_point.z && m_max_point.z == max_point.z)) ||
210 ((m_min_point.x == min_point.x && m_max_point.x == max_point.x) &&
211 (m_min_point.y == max_point.y || m_max_point.y == min_point.y) &&
212 (m_min_point.z == min_point.z && m_max_point.z == max_point.z)) ||
214 ((m_min_point.x == min_point.x && m_max_point.x == max_point.x) &&
215 (m_min_point.y == min_point.y && m_max_point.y == max_point.y) &&
216 (m_min_point.z == max_point.z || m_max_point.z == min_point.z)));
229 const CartCoord3Type min_point = other_patch.
minPoint();
230 const CartCoord3Type max_point = other_patch.
maxPoint();
232 if (m_min_point.x > min_point.x) {
233 m_min_point.x = min_point.x;
235 else if (m_max_point.x < max_point.x) {
236 m_max_point.x = max_point.x;
239 else if (m_min_point.y > min_point.y) {
240 m_min_point.y = min_point.y;
242 else if (m_max_point.y < max_point.y) {
243 m_max_point.y = max_point.y;
246 else if (m_min_point.z > min_point.z) {
247 m_min_point.z = min_point.z;
249 else if (m_max_point.z < max_point.z) {
250 m_max_point.z = max_point.z;
262 return m_level == -2;
275 p.
setMaxPoint({ m_max_point.x * 2, m_max_point.y * 2, 1 });
294 p.
setMaxPoint({
static_cast<CartCoordType
>(std::ceil(m_max_point.x / 2.)),
static_cast<CartCoordType
>(std::ceil(m_max_point.y / 2.)), 1 });
297 p.
setMaxPoint({
static_cast<CartCoordType
>(std::ceil(m_max_point.x / 2.)),
static_cast<CartCoordType
>(std::ceil(m_max_point.y / 2.)),
static_cast<CartCoordType
>(std::ceil(m_max_point.z / 2.)) });
309 return m_max_point - m_min_point;
316isIn(CartCoordType x, CartCoordType y, CartCoordType z)
const
318 return x >= m_min_point.x && x < m_max_point.x && y >= m_min_point.y && y < m_max_point.y && z >= m_min_point.z && z < m_max_point.z;
325isIn(CartCoord3Type coord)
const
327 return coord.x >= m_min_point.x && coord.x < m_max_point.x && coord.y >= m_min_point.y && coord.y < m_max_point.y && coord.z >= m_min_point.z && coord.z < m_max_point.z;
334isInWithOverlap(CartCoordType x, CartCoordType y, CartCoordType z)
const
338 return x >= min_point.x && x < max_point.x && y >= min_point.y && y < max_point.y && z >= min_point.z && z < max_point.z;
349 return coord.x >= min_point.x && coord.x < max_point.x && coord.y >= min_point.y && coord.y < max_point.y && coord.z >= min_point.z && coord.z < max_point.z;
358 const CartCoord3Type min_point = m_min_point - overlap;
359 const CartCoord3Type max_point = m_max_point + overlap;
360 return x >= min_point.x && x < max_point.x && y >= min_point.y && y < max_point.y && z >= min_point.z && z < max_point.z;
369 const CartCoord3Type min_point = m_min_point - overlap;
370 const CartCoord3Type max_point = m_max_point + overlap;
371 return coord.x >= min_point.x && coord.x < max_point.x && coord.y >= min_point.y && coord.y < max_point.y && coord.z >= min_point.z && coord.z < max_point.z;
Déclarations des types généraux de Arcane.
CartCoord3Type minPointWithOverlap() const
Méthode permettant de récupérer la position min de la boite englobante en incluant la couche de maill...
CartCoord3Type length() const
Méthode permettant de connaitre la taille du patch (en nombre de mailles par direction).
void setMaxPoint(CartCoord3Type max_point)
Méthode permettant de définir la position max de la boite englobante.
bool canBeFusion(const AMRPatchPosition &other_patch) const
Méthode permettant de savoir si notre patch peut être fusionné avec other_patch.
AMRPatchPosition patchDown(Integer dim) const
Méthode permettant de créer un AMRPatchPosition pour le niveau inférieur.
AMRPatchPosition()
Constructeur pour une position nulle. Une position nulle est définie par un level = -2.
std::pair< AMRPatchPosition, AMRPatchPosition > cut(CartCoordType cut_point, Integer dim) const
Méthode permettant de découper le patch en deux patchs selon un point de découpe.
void setLevel(Int32 level)
Méthode permettant de définir le niveau du patch.
CartCoord3Type maxPoint() const
Méthode permettant de récupérer la position max de la boite englobante.
bool isNull() const
Méthode permettant de savoir si la position du patch est nulle.
void setMinPoint(CartCoord3Type min_point)
Méthode permettant de définir la position min de la boite englobante.
bool fusion(const AMRPatchPosition &other_patch)
Méthode permettant de fusionner other_patch avec le nôtre.
AMRPatchPosition patchUp(Integer dim) const
Méthode permettant de créer un AMRPatchPosition pour le niveau supérieur.
bool haveIntersection(const AMRPatchPosition &other) const
Méthode permettant de savoir si notre patch est en contact avec le patch other.
Int64 nbCells() const
Méthode permettant de connaitre le nombre de mailles du patch selon sa position.
Int32 overlapLayerSize() const
Méthode permettant de récupérer le nombre de couches de mailles de recouvrement du patch.
bool isIn(CartCoordType x, CartCoordType y, CartCoordType z) const
Méthode permettant de savoir si une maille de position x,y,z est incluse dans ce patch.
void setOverlapLayerSize(Int32 layer_size)
Méthode permettant de définir le nombre de couches de mailles de recouvrement du patch.
bool isInWithOverlap(CartCoordType x, CartCoordType y, CartCoordType z) const
Méthode permettant de savoir si une maille de position x,y,z est incluse dans ce patch avec couche de...
Int32 level() const
Méthode permettant de récupérer le niveau du patch.
CartCoord3Type maxPointWithOverlap() const
Méthode permettant de récupérer la position max de la boite englobante en incluant la couche de maill...
CartCoord3Type minPoint() const
Méthode permettant de récupérer la position min de la boite englobante.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::int64_t Int64
Type entier signé sur 64 bits.
Int32 Integer
Type représentant un entier.
std::int32_t Int32
Type entier signé sur 32 bits.