Arcane  v4.1.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
SimpleMeshGenerator.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* SimpleMeshGenerator.h (C) 2000-2025 */
9/* */
10/* Service de génération de maillage 'Simple'. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_STD_SIMPLEMESHGENERATOR_H
13#define ARCANE_STD_SIMPLEMESHGENERATOR_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/core/internal/IMeshModifierInternal.h"
18#include "arcane/utils/TraceAccessor.h"
19#include "arcane/utils/Array.h"
20#include "arcane/std/IMeshGenerator.h"
21
22#include <map>
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27namespace Arcane
28{
29class ItemTypeMng;
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
36class SimpleMeshGenerator
37: public TraceAccessor
38, public IMeshGenerator
39{
40public:
41
42 explicit SimpleMeshGenerator(IPrimaryMesh* mesh);
43
44 public:
45
46 ConstArrayView<Int32> communicatingSubDomains() const override { return {}; }
47 bool readOptions(XmlNode node) override;
48 bool generateMesh() override;
49
50 protected:
51
52 Integer _addNode(Real3 position);
54 void _addCell(Int16 type_id, ConstArrayView<Int64> nodes_id);
55 void _addCell(ItemTypeId type_id, ConstArrayView<Real3> nodes_coords);
56
57 private:
58
59 Int32 m_mode = 1;
60 IPrimaryMesh* m_mesh = nullptr;
61 ItemTypeMng* m_item_type_mng = nullptr;
62 IMeshModifierInternal* m_mesh_modifier_internal = nullptr;
63 UniqueArray<Int64> m_nodes_unique_id;
64 UniqueArray<Real3> m_nodes_coords;
65 UniqueArray<Int64> m_cells_infos;
66 Integer m_current_nb_cell = 0;
67 typedef std::map<Real3,Integer> Real3Map;
74
75 private:
76
77 void _createSimpleDiTetra5(Real x0,Real y0,Real z1,Real z2);
78 void _createSimpleAntiWedgeRight6(Real x0,Real y0,Real z1,Real z2);
79 void _createSimpleAntiWedgeLeft6(Real x0,Real y0,Real z1,Real z2);
80 void _createSimpleHemiHexa5(Real x0,Real y0,Real z1,Real z2);
81 void _createSimpleHemiHexa6(Real x0,Real y0,Real z1,Real z2);
82 void _createSimpleHemiHexa7(Real x0,Real y0,Real z1,Real z2);
83 void _createSimpleOctaedron12(Real x0,Real y0,Real z1,Real z2);
84 void _createSimpleHeptaedron10(Real x0,Real y0,Real z1,Real z2);
85 void _createSimpleHexaedron8(Real x0,Real y0,Real z1,Real z2);
86 void _createSimpleHexaedron(ItemTypeId type_id, Real x0, Real y0, Real z1, Real z2);
87 void _createSimplePentaedron6(Real x0,Real y0,Real z1,Real z2);
88 void _createSimplePyramid5(Real x0,Real y0,Real z1,Real z2);
89 void _createSimpleTetraedron4(Real x0,Real y0,Real z1,Real z2);
90
91 void _fillHexaedronCoordinates(ItemTypeId type_id, ArrayView<Real3> coords, Real x0, Real y0, Real z1, Real z2);
92
93 static Real3 _center(Real3 n0, Real3 n1)
94 {
95 return (n0 + n1) / 2.0;
96 }
97 static Real3 _center(Real3 n0, Real3 n1, Real3 n2, Real3 n3)
98 {
99 return (n0 + n1 + n2 + n3) / 4.0;
100 }
101 static Real3 _center(ConstArrayView<Real3> coords, Int32 n0, Int32 n1)
102 {
103 return _center(coords[n0], coords[n1]);
104 }
105 static Real3 _center(ConstArrayView<Real3> coords, Int32 n0, Int32 n1, Int32 n2, Int32 n3)
106 {
107 return _center(coords[n0], coords[n1], coords[n2], coords[n3]);
108 }
109};
110
111/*---------------------------------------------------------------------------*/
112/*---------------------------------------------------------------------------*/
113
114} // End namespace Arcane
115
116/*---------------------------------------------------------------------------*/
117/*---------------------------------------------------------------------------*/
118
119#endif
Vue modifiable d'un tableau d'un type T.
Vue constante d'un tableau de type T.
Interface d'un générateur de maillage.
Partie interne de IMeshModifier.
Type d'une entité (Item).
Definition ItemTypeId.h:32
Gestionnaire des types d'entités d'un maillage.
Definition ItemTypeMng.h:65
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
Integer _addNode(Real3 position)
Ajoute ou récupère le nœud ayant pour coordonnées pos.
Real3Map m_coords_to_uid
Mapping Coordonnées --> Indice unique. Pour la fusion automatique des noeuds aux mêmes coordonnées,...
TraceAccessor(ITraceMng *m)
Construit un accesseur via le gestionnaire de trace m.
Vecteur 1D de données avec sémantique par valeur (style STL).
Noeud d'un arbre DOM.
Definition XmlNode.h:51
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
std::int16_t Int16
Type entier signé sur 16 bits.
double Real
Type représentant un réel.
std::int32_t Int32
Type entier signé sur 32 bits.