14#include "arcane/std/internal/SodStandardGroupsBuilder.h"
16#include "arcane/utils/ArrayView.h"
17#include "arcane/utils/Real3.h"
19#include "arcane/IMesh.h"
20#include "arcane/IItemFamily.h"
21#include "arcane/Item.h"
22#include "arcane/ItemPrinter.h"
23#include "arcane/ItemEnumerator.h"
24#include "arcane/MeshVariable.h"
35void SodStandardGroupsBuilder::
38 info() <<
"Creation group de face '" << name <<
"'"
39 <<
" size=" << faces_lid.size();
41 IItemFamily* face_family = mesh->faceFamily();
43 FaceInfoListView mesh_faces(face_family);
45 for(
Integer z=0, zs=faces_lid.size(); z<zs; ++ z){
46 Face face(mesh_faces[faces_lid[z]]);
48 for( NodeLocalId inode : face.nodes() )
53 face_family->createGroup(name,faces_lid);
65 const Real min_x = min_pos.
x;
66 const Real min_y = min_pos.
y;
67 const Real min_z = min_pos.
z;
68 const Real max_x = max_pos.
x;
69 const Real max_y = max_pos.
y;
70 const Real max_z = max_pos.
z;
72 info() <<
"Generate standard groups for SOD: "
73 <<
" min=" << min_pos <<
" max=" << max_pos
74 <<
" middle_x=" << middle_x <<
" middle_height=" << middle_height;
95 Real3 coord = nodes_coord_var[inode];
112 xmin_surface_lid.
add(face_local_id);
114 xmax_surface_lid.
add(face_local_id);
116 ymin_surface_lid.
add(face_local_id);
118 ymax_surface_lid.
add(face_local_id);
120 zmin_surface_lid.
add(face_local_id);
122 zmax_surface_lid.
add(face_local_id);
125 _createFaceGroup(
mesh,
"XMIN",xmin_surface_lid);
126 _createFaceGroup(
mesh,
"XMAX",xmax_surface_lid);
127 if (mesh_dimension>=2){
128 _createFaceGroup(
mesh,
"YMIN",ymin_surface_lid);
129 _createFaceGroup(
mesh,
"YMAX",ymax_surface_lid);
131 if (mesh_dimension==3){
132 _createFaceGroup(
mesh,
"ZMIN",zmin_surface_lid);
133 _createFaceGroup(
mesh,
"ZMAX",zmax_surface_lid);
141 const Real xlimit = middle_x;
143 bool is_in_zd =
false;
144 bool is_in_zg =
false;
145 const Cell& cell = *icell;
148 Real x = nodes_coord_var[inode].x;
159 Real x = nodes_coord_var[inode].x;
160 info() <<
" X=" << x;
162 info() <<
" is equal to " << xlimit;
164 Real s = math::abs(x) + math::abs(xlimit);
167 info() <<
" nearly s=" << s <<
" d=" << d <<
" r=" << r;
169 <<
" r<e=" << (r<FloatInfo<Real>::nearlyEpsilon());
172 info() <<
" is in zd";
174 info() <<
" is in zg";
179 zg_lid.
add(local_id);
183 zd_lid.
add(local_id);
186 info() <<
"Create ZG with " << zg_lid.
size() <<
" cells";
188 info() <<
"Create ZD with " << zd_lid.
size() <<
" cells";
199 const Real height_limit = middle_height;
201 bool is_in_zd_bas =
false;
202 bool is_in_zd_haut =
false;
206 Real height = (mesh_dimension==2)?nodes_coord_var[inode].y:nodes_coord_var[inode].z;
210 if (height > height_limit)
211 is_in_zd_haut =
true;
217 fatal() <<
"SodGenerator: cell " <<
ItemPrinter(cell) <<
" in ZD_BAS and ZD_HAUT";
219 zd_bas_lid.
add(local_id);
223 zd_haut_lid.
add(local_id);
226 info() <<
"Create ZD_BAS with " << zd_bas_lid.
size() <<
" cells";
228 info() <<
"Create ZD_HAUT with " << zd_haut_lid.
size() <<
" cells";
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Integer size() const
Nombre d'éléments du vecteur.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
Informations sur le type flottant.
Interface d'une famille d'entités.
virtual ItemGroup findGroup(const String &name) const =0
Recherche un groupe.
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.
Groupe d'entités de maillage.
bool null() const
true is le groupe est le groupe nul
Classe utilitaire pour imprimer les infos sur une entité.
NodeConnectedListViewType nodes() const
Liste des noeuds de l'entité
constexpr Int32 localId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Classe gérant un vecteur de réel de dimension 3.
void generateGroups(IMesh *mesh, Real3 min_pos, Real3 max_pos, Real middle_x, Real middle_height, bool do_zg_and_zd)
Créé les groupes pour un initialiser un tube à choc de sod.
Chaîne de caractères unicode.
TraceMessageDbg debug(Trace::eDebugLevel=Trace::Medium) const
Flot pour un message de debug.
TraceMessage fatal() const
Flot pour un message d'erreur fatale.
TraceMessage info() const
Flot pour un message d'information.
Vecteur 1D de données avec sémantique par valeur (style STL).
MeshVariableScalarRefT< Node, Real3 > VariableNodeReal3
Grandeur au noeud de type coordonnées.
@ Highest
Niveau le plus élevé
constexpr __host__ __device__ bool isNearlyEqual(const _Type &a, const _Type &b)
Teste si deux valeurs sont à un peu près égales. Pour les types entiers, cette fonction est équivalen...
-*- 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.
bool arcaneIsDebug()
Vrai si la macro ARCANE_DEBUG est définie.
double Real
Type représentant un réel.
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