Arcane  v3.15.3.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
OneMeshItemAdder.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/* OneMeshItemAdder.h (C) 2000-2025 */
9/* */
10/* Outil de création d'une maille */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_MESH_ONEITEMADDER_H
13#define ARCANE_MESH_ONEITEMADDER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/TraceAccessor.h"
18
19#include "arcane/core/Item.h"
20
21#include "arcane/mesh/MeshGlobal.h"
22#include "arcane/mesh/FullItemInfo.h"
23#include "arcane/mesh/CellFamily.h"
24#include "arcane/mesh/NodeFamily.h"
25#include "arcane/mesh/FaceFamily.h"
26#include "arcane/mesh/EdgeFamily.h"
27#include "arcane/mesh/MeshInfos.h"
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
32namespace Arcane::mesh
33{
34
35/*---------------------------------------------------------------------------*/
36/*---------------------------------------------------------------------------*/
37
38class DynamicMesh;
39class DynamicMeshIncrementalBuilder;
40
41/*---------------------------------------------------------------------------*/
42/*---------------------------------------------------------------------------*/
43
45 : public TraceAccessor
46{
47 private:
48
49 // Classe servant à rendre compatible les données FullCellInfo
50 // et les données fragmentées de description d'une maille
51 class CellInfoProxy;
52
53 public:
54
57
58 public:
59
60 ItemInternal* addOneNode(Int64 node_uid,Int32 owner);
61
63 Int64 face_uid,
64 Int32 owner_rank,
66
67 ItemInternal* addOneEdge(Int64 edge_uid,
68 Int32 sub_domain_id,
70
72 Int64 cell_uid,
73 Int32 sub_domain_id,
75 bool allow_build_face);
76
77 ItemInternal* addOneParentItem(const Item & item,
79 const bool fatal_on_existing_item = true);
80
82
83 // NOTE GG: A priori plus utilisé
84 ARCANE_DEPRECATED_REASON("Y2022: Use addOneItem2() instead")
85 ItemInternal* addOneItem(IItemFamily* family,
88 Int64 item_uid,
89 Int32 item_owner,
90 Int32 sub_domain_id,
91 Integer nb_connected_family,
93
94 ItemInternal* addOneItem2(IItemFamily* family,
97 Int64 item_uid,
98 Int32 item_owner,
99 Int32 sub_domain_id,
100 Integer nb_connected_family,
102
103 Integer nbNode() const { return m_mesh_info.getNbNode(); }
104 Integer nbFace() const { return m_mesh_info.getNbFace(); }
105 Integer nbCell() const { return m_mesh_info.getNbCell(); }
106 Integer nbEdge() const { return m_mesh_info.getNbEdge(); }
107
108 void setNextFaceUid(Int64 face_uid) { m_next_face_uid = face_uid; }
109 void setNextEdgeUid(Int64 edge_uid) { m_next_edge_uid = edge_uid; }
110
111 Int64 nextFaceUid() const { return m_next_face_uid; }
112 Int64 nextEdgeUid() const { return m_next_edge_uid; }
113
116
123
124 private:
125
126 template<typename CellInfo>
128
129 template<typename CellInfo>
130 void _addNodesToCell(Cell cell, const CellInfo& cell_info);
131
132 template<typename CellInfo>
133 bool _isReorder(Integer i_face,
135 const CellInfo& cell_info);
136
137 template<typename CellInfo>
138 Face _findInternalFace(Integer i_face,
139 const CellInfo& cell_info,
140 bool& is_add);
141
142 template<typename CellInfo>
143 Edge _findInternalEdge(Integer i_edge,
144 const CellInfo& cell_info,
145 Int64 first_node,
146 Int64 second_node,
147 bool& is_add);
148 template<typename CellInfo>
149 void _AMR_Patch(Cell cell, const CellInfo& cell_info);
150
151 void _clearConnectivity(ItemLocalId item, IIncrementalItemConnectivity* connectivity);
152 void _clearReverseConnectivity(ItemLocalId item, IIncrementalItemConnectivity* connectivity, IIncrementalItemConnectivity* reverse_connectivity);
153 void _printRelations(ItemInternal* item);
156
157 private:
158
159 DynamicMesh* m_mesh = nullptr;
160 DynamicMeshIncrementalBuilder* m_mesh_builder = nullptr;
161
162 CellFamily& m_cell_family;
163 NodeFamily& m_node_family;
164 FaceFamily& m_face_family;
165 EdgeFamily& m_edge_family;
166
167 ItemTypeMng* m_item_type_mng = nullptr;
168
170
171 Int64 m_next_face_uid = 0;
172 Int64 m_next_edge_uid = 0;
173
176 UniqueArray<Int64> m_work_face_orig_nodes_uid;
177 UniqueArray<Int64> m_work_edge_sorted_nodes;
178 UniqueArray<Int64> m_work_edge_orig_nodes_uid;
179
182};
183
184/*---------------------------------------------------------------------------*/
185/*---------------------------------------------------------------------------*/
186
187} // End namespace Arcane::mesh
188
189/*---------------------------------------------------------------------------*/
190/*---------------------------------------------------------------------------*/
191
192#endif /* ARCANE_MESH_ONEITEMADDER_H */
Maille d'un maillage.
Definition Item.h:1191
Arête d'une maille.
Definition Item.h:809
Face d'une maille.
Definition Item.h:944
Interface pour gérer une connectivité incrémentale.
Interface de modification d'une famille.
Interface d'une famille d'entités.
Structure interne d'une entité de maillage.
Index d'un Item dans une variable.
Definition ItemLocalId.h:41
Type d'une entité (Item).
Definition ItemTypeId.h:32
Informations locales sur une face d'une maille.
Gestionnaire des types d'entités de maillage.
Definition ItemTypeMng.h:66
Elément de maillage s'appuyant sur des noeuds (Edge,Face,Cell).
Definition Item.h:724
Classe de base d'un élément de maillage.
Definition Item.h:83
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:149
Famille de mailles.
Definition CellFamily.h:46
Construction d'un maillage de manière incrémentale.
Implémentation d'un maillage.
Definition DynamicMesh.h:97
Famille d'arêtes.
Definition EdgeFamily.h:35
Famille de faces.
Definition FaceFamily.h:53
Infos pour créer/sérialiser une maille connaissant les uniqueId() et owner() de toutes ces sous-entit...
Classe factorisant des informations sur le maillage.
Definition MeshInfos.h:36
Famille de noeuds.
Definition NodeFamily.h:37
UniqueArray< Int64 > m_work_face_sorted_nodes
Tableaux de travail.
void _checkSameItemCoherency(ItemWithNodes item, ConstArrayView< Int64 > nodes_uid)
Vérifie la cohérence des noeuds d'une entité ajouté déjà présente.
void _addNodesToCell(Cell cell, const CellInfo &cell_info)
Ajoute les noeuds nodes_uid à la maille cell.
ItemInternal * _addOneCell(const CellInfo &cell_info)
Ajoute une maille.
ItemInternal * addOneCell(ItemTypeId type_id, Int64 cell_uid, Int32 sub_domain_id, Int64ConstArrayView nodes_uid, bool allow_build_face)
Ajoute une maille.
MeshInfos m_mesh_info
Info générale sur le maillage (numéro de sous-domaine, nombre d'items...)
Int64 _checkGenerateFaceUniqueId(Int64 uid, ConstArrayView< Int64 > nodes_uid)
Génère un uniqueId() pour la face si uid est nul.
Int64 m_next_edge_uid
Numéro du uniqueId() suivant utilisé pour générer les arêtes.
void setUseNodeUniqueIdToGenerateEdgeAndFaceUniqueId(bool v)
Positionne le mécanisme de numérotation des uniqueId().
void resetAfterDeallocate()
Remise à zéro des structures pour pouvoir faire à nouveau une allocation.
bool m_use_hash_for_edge_and_face_unique_id
Si vrai, génère les uniqueId() des faces à partir de ceux des noeuds.
Int64 m_next_face_uid
Numéro du uniqueId() suivant utilisé pour générer les faces.
ItemInternal * addOneParentItem(const Item &item, const eItemKind submesh_kind, const bool fatal_on_existing_item=true)
Ajoute d'un item parent.
ItemInternal * addOneFace(ItemTypeId type_id, Int64 face_uid, Int32 owner_rank, Int64ConstArrayView nodes_uid)
Ajoute une face.
Vue constante d'un tableau de type T.
eItemKind
Genre d'entité de maillage.