14#include "arcane/cartesianmesh/FaceDirectionMng.h"
16#include "arcane/utils/FatalErrorException.h"
17#include "arcane/utils/Real3.h"
18#include "arcane/utils/PlatformUtils.h"
20#include "arcane/IItemFamily.h"
21#include "arcane/ItemGroup.h"
22#include "arcane/IMesh.h"
23#include "arcane/VariableTypes.h"
25#include "arcane/cartesianmesh/ICartesianMesh.h"
26#include "arcane/cartesianmesh/CellDirectionMng.h"
72 m_p->m_cartesian_mesh = cm;
73 m_p->m_patch_index = patch_index;
92 m_p->m_infos.resize(new_size);
93 m_infos_view = m_p->m_infos.view();
103 IMesh*
mesh = m_p->m_cartesian_mesh->mesh();
106 int dir = (int)m_direction;
108 if (m_p->m_patch_index>=0)
109 base_group_name = base_group_name +
String(
"AMRPatch")+m_p->m_patch_index;
120 std::set<Int32> done_faces;
128 if (done_faces.find(prev_lid)==done_faces.end()){
129 faces_lid.
add(prev_lid);
130 done_faces.insert(prev_lid);
133 if (done_faces.find(next_lid)==done_faces.end()){
134 faces_lid.
add(next_lid);
135 done_faces.insert(next_lid);
146 Int32 lid = iitem.itemLocalId();
149 if (
face.nbCell()==1)
154 m_p->m_inner_all_items = face_family->
createGroup(
String(
"AllInner")+base_group_name,inner_lids,
true);
155 m_p->m_outer_all_items = face_family->
createGroup(
String(
"AllOuter")+base_group_name,outer_lids,
true);
156 m_p->m_all_items = all_faces;
165bool FaceDirectionMng::
166_hasFace(
Cell cell,
Int32 face_local_id)
const
168 for( FaceLocalId iface_lid : cell.
faceIds() ){
169 if (iface_lid==face_local_id)
192 std::set<Int32> patch_cells_set;
194 patch_cells_set.insert(icell.itemLocalId());
199 Int32 face_lid = iface.itemLocalId();
200 Real3 face_coord = faces_center[iface];
205 if (!front_cell.
null())
206 if (patch_cells_set.find(front_cell.
localId())==patch_cells_set.end())
208 if (!back_cell.
null())
209 if (patch_cells_set.find(back_cell.
localId())==patch_cells_set.end())
212 bool is_inverse =
false;
213 if (!front_cell.
null()){
214 Real3 front_coord = cells_center[front_cell];
216 if (front_coord.
x<face_coord.
x)
220 if (front_coord.
y<face_coord.
y)
224 if (front_coord.
z<face_coord.
z)
229 Real3 back_coord = cells_center[back_cell];
231 if (back_coord.
x>face_coord.
x)
235 if (back_coord.
y>face_coord.
y)
239 if (back_coord.
z>face_coord.
z)
246 if (!back_cell.
null() && !front_cell.
null()){
249 if (back_level!=front_level){
253 if (!_hasFace(back_cell,face_lid))
255 if (!_hasFace(front_cell,face_lid))
260 m_infos_view[face_lid] = ItemDirectionInfo(back_cell,front_cell);
262 m_infos_view[face_lid] = ItemDirectionInfo(front_cell,back_cell);
272 return m_p->m_all_items;
281 return m_p->m_inner_all_items;
290 return m_p->m_outer_all_items;
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
void reserve(Int64 new_capacity)
Réserve le mémoire pour new_capacity éléments.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
Infos sur les mailles d'une direction spécifique X,Y ou Z d'un maillage structuré.
CellGroup allCells() const
Groupe de toutes les mailles dans la direction.
DirCellFace cellFace(Cell c) const
Maille avec infos directionnelles aux faces correspondant à la maille c.
Vue sur les informations des mailles.
FaceLocalIdView faceIds() const
Liste des faces de la maille.
Maille avec info directionnelle des faces.
Face next() const
Face connectée à la maille d'après la maille courante dans la direction.
Face previous() const
Face connectée à la maille d'avant la maille courante dans la direction.
DirFace face(Face f) const
Face direction correspondant à la face f.
void _computeCellInfos(const CellDirectionMng &cell_dm, const VariableCellReal3 &cells_center, const VariableFaceReal3 &faces_center)
Calcule des mailles avant et après une face, dans une direction donnée.
void _internalComputeInfos(const CellDirectionMng &cell_dm, const VariableCellReal3 &cells_center, const VariableFaceReal3 &faces_center)
Calcule les informations sur les faces associées aux mailles de la direction cell_dm....
FaceDirectionMng()
Créé une instance vide.
FaceGroup innerFaces() const
Groupe de toutes les faces internes dans la direction.
void _internalInit(ICartesianMesh *cm, eMeshDirection dir, Integer patch_index)
FaceGroup outerFaces() const
Groupe de toutes les faces externes dans la direction.
void _internalResizeInfos(Int32 new_size)
Redimensionne le conteneur contenant les ItemDirectionInfo.
FaceGroup allFaces() const
Groupe de toutes les faces dans la direction.
Interface d'un maillage cartésien.
Interface d'une famille d'entités.
virtual ItemGroup createGroup(const String &name, Int32ConstArrayView local_ids, bool do_override=false)=0
Créé un groupe d'entités de nom name contenant les entités local_ids.
Integer size() const
Nombre d'éléments du groupe.
void setItems(Int32ConstArrayView items_local_id)
Positionne les entités du groupe.
constexpr Int32 localId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
constexpr bool null() const
true si l'entité est nul (i.e. non connecté au maillage)
Classe gérant un vecteur de réel de dimension 3.
Chaîne de caractères unicode.
Vecteur 1D de données avec sémantique par valeur (style STL).
ItemGroupT< Cell > CellGroup
Groupe de mailles.
ItemGroupT< Face > FaceGroup
Groupe de faces.
MeshVariableScalarRefT< Cell, Real3 > VariableCellReal3
Grandeur au centre des mailles de type coordonnées.
MeshVariableScalarRefT< Face, Real3 > VariableFaceReal3
Grandeur aux faces de type coordonnées.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
eMeshDirection
Type de la direction pour un maillage structuré
@ MD_DirInvalid
Direction invalide ou non initialisée.
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