Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
DynamicMeshIncrementalBuilder.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 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/* DynamicMeshIncrementalBuilder.h (C) 2000-2024 */
9/* */
10/* Construction d'un maillage de manière incrémentale. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_MESH_DYNAMICMESHINCREMENTALBUILDER_H
13#define ARCANE_MESH_DYNAMICMESHINCREMENTALBUILDER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/HashTableMap.h"
18#include "arcane/utils/TraceAccessor.h"
19
20#include "arcane/core/IItemFamilyNetwork.h"
22#include "arcane/core/ItemInternal.h"
23
24#include "arcane/mesh/DynamicMeshKindInfos.h"
25#include "arcane/mesh/ItemData.h"
26#include "arcane/mesh/FullItemInfo.h"
27
28#include <list>
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32
33namespace Arcane
34{
35class SerializeBuffer;
36}
37
38namespace Arcane::mesh
39{
40
41/*---------------------------------------------------------------------------*/
42/*---------------------------------------------------------------------------*/
43
44class DynamicMesh;
45class OneMeshItemAdder;
46class GhostLayerBuilder;
47class FaceUniqueIdBuilder;
48class EdgeUniqueIdBuilder;
49
50/*---------------------------------------------------------------------------*/
51/*---------------------------------------------------------------------------*/
56: public TraceAccessor
57{
58 public:
59
63
64 public:
65
66 // Ajout de liste d'items du maillage et graphe
67
69 Integer sub_domain_id,Int32ArrayView cells,
70 bool allow_build_face = true);
71 void addCells2(Integer nb_cell,Int64ConstArrayView cell_infos,
72 Integer sub_domain_id,Int32ArrayView cells,
73 bool allow_build_face = true);
75 Integer sub_domain_id,Int32ArrayView cells,
76 bool allow_build_face = true);
78 Integer sub_domain_id,Int32ArrayView faces);
80 Integer sub_domain_id,Int32ArrayView faces);
81 void addFaces3(Integer nb_face,Int64ConstArrayView face_infos,
82 Integer sub_domain_id,Int32ArrayView faces);
84 Integer sub_domain_id,Int32ArrayView edges);
86 Integer sub_domain_id,Int32ArrayView edges);
87 void addEdges3(Integer nb_edge,Int64ConstArrayView edge_infos,
88 Integer sub_domain_id,Int32ArrayView edges);
90 Integer sub_domain_id,Int32ArrayView nodes);
92 Integer sub_domain_id,Int32ArrayView nodes);
93
96 void addRelations(ItemDataList& item_relation_list);
97
99
101
103 void addParentCells(const ItemVectorView & items);
105 void addParentItems(const ItemVectorView & items, const eItemKind submesh_kind);
109 Int32 sub_domain_id,Int32ArrayView cells,
110 bool allow_build_face);
112 void addGhostLayers(bool is_allocate);
115
116 void removeGhostCells();
117 void removeNeedRemoveMarkedCells();
118
119 public:
120
122
123 void readFromDump();
124
126
127 void setConnectivity(Integer c);
128
131
132 public:
133
134 void printInfos();
135 void printStats(Int32 level = TraceMessage::DEFAULT_LEVEL);
136
137 public:
138
139 ItemInternalMap& itemsMap(eItemKind ik);
140 DynamicMesh* mesh() { return m_mesh; }
141 bool isVerbose() const { return m_verbose; }
142 bool hasEdge() const { return m_has_edge; }
143
144 OneMeshItemAdder* oneMeshItemAdder() const { return m_one_mesh_item_adder; }
145
146 private:
147
148 struct NodeInFace;
149
151 {
152 NodeInFacePtr(const Int64& node_uid) : m_ptr(std::make_shared<NodeInFace>(node_uid)){}
153 bool operator< (const NodeInFacePtr& a) const {return (*m_ptr) < (*a.m_ptr);}
154 NodeInFace* operator->() {return m_ptr.operator->();}
155 const NodeInFace* operator->() const {return m_ptr.operator->();}
156 bool operator==(const NodeInFacePtr& a) const {return (*m_ptr) == (*a.m_ptr);}
157 std::shared_ptr<NodeInFace> m_ptr;
158 };
159
161 {
162// typedef std::shared_ptr<NodeInFace> NodeInFacePtr;
163// typedef std::set<NodeInFacePtr, std::function<bool(const NodeInFacePtr&, const NodeInFacePtr&)>> NodeInFaceSet; // Does not work bad function call exception (gcc 4.7.2 pb ?). Need to define NodeInFacePtr class
164// typedef std::set<NodeInFacePtr> NodeInFaceSet;
165 typedef std::list<NodeInFacePtr> NodeInFaceSet;
166
167 NodeInFace(const Int64& node_uid)
168 : m_uid(node_uid)
169 , m_face_uid(NULL_ITEM_ID){}
170// , m_next_node_set([](const NodeInFacePtr& a, const NodeInFacePtr& b){return (*a) < (*b);}){} // Does not work (gcc 4.7.2 pb ?). Need to define NodeInFacePtr class
171
172 friend bool operator<(const NodeInFace& a,const NodeInFace & nif)
173 {
174 return a.m_uid < nif.m_uid;
175 }
176 friend bool operator==(const NodeInFace& a,const NodeInFace& b)
177 {
178 return a.m_uid == b.m_uid;
179 }
180
181 Int64 faceUid() const {return m_face_uid;}
182 void setFaceUid(Int64 face_uid) {m_face_uid = face_uid;}
183
184 const NodeInFaceSet& nextNodeSet() const {return m_next_node_set;}
185 NodeInFaceSet& nextNodeSet() {return m_next_node_set;}
186// void setNextNode(const NodeInFacePtr & next_node) {m_next_node_set.push_back(next_node);}
187
188 void print(){
189 std::cout << "Node " << m_uid << " has set " << & m_next_node_set << " containing nodes : " << std:: endl;
190 for (auto node : m_next_node_set)
191 {
192 node->print();
193 }
194 }
195
196 public://for DEBUG
197// private:
198 Int64 m_uid;
199 Int64 m_face_uid;
200 NodeInFaceSet m_next_node_set;
201 };
202// typedef NodeInFace::NodeInFacePtr NodeInFacePtr;
203 typedef NodeInFace::NodeInFaceSet NodeInFaceSet;
204
205 private:
206
207 void _printCellFaceInfos(ItemInternal* cell,const String& str);
208
209 void _removeNeedRemoveMarkedItems(ItemInternalMap& map, UniqueArray<Int32>& items_local_id);
210
211 void _fillFaceInfo(Integer& nb_face, Integer nb_cell,Int64Array& faces_infos, Int64ConstArrayView cells_infos, std::map<Int64,Int64SharedArray>& cell_to_face_connectivity_info);
212 void _fillEdgeInfo(Integer& nb_edge, Integer nb_face,Int64Array& edges_infos, Int64ConstArrayView faces_infos, std::map<std::pair<Int64,Int64>, Int64>& edge_uid_map);
213 void _fillNodeInfo(Integer& nb_node, Integer nb_face,Int64Array& nodes_infos, Int64ConstArrayView faces_infos);
214 void _fillNodeInfoFromEdge(Integer& nb_node, Integer nb_edge,Int64Array& nodes_infos, Int64ConstArrayView edges_infos);
215
219
220 void _fillEdgeNewInfoNew(Integer nb_edge,Int64ConstArrayView edges_infos,Int64ArrayView edge_new_infos);
222 void _fillCellNewInfoNew(Integer nb_cell,Int64ConstArrayView cells_infos,Int64Array& cell_infos2, const std::map<Int64,Int64SharedArray>& cell_to_face_connectivity_info, const std::map<std::pair<Int64,Int64>, Int64>& edge_uid_map);
223 void _fillFaceNewInfoNew(Integer nb_face,Int64ConstArrayView faces_infos,Int64Array& face_infos2, const std::map<std::pair<Int64,Int64>, Int64>& edge_uid_map);
225
236 void _initEmptyRelationInfo(Int64Array& source_relation_info, std::map<Int64, Int64SharedArray>& source_to_target_uids, Int64ConstArrayView source_item_uids_and_types,
237 Integer approx_relation_size,
239 void _appendInitializedRelationInfo(Int64Array& source_relation_info, std::map<Int64, Int64SharedArray>& source_to_target_uids, Int64ConstArrayView source_item_uids_and_types,
240 Integer approx_relation_size,
242
243 Int64 _findFaceUniqueId(Int64ConstArrayView work_face_sorted_nodes, NodeInFaceSet& face_nodes_set);
244 Int64 _findFaceInFaceNodesSet(const NodeInFaceSet& face_nodes_set,Integer index,Int64ConstArrayView face_nodes, NodeInFacePtr node);
245 void _addFaceNodes(NodeInFaceSet& face_nodes_set, Int64ConstArrayView face_nodes, Int64 face_uid);
246 void _addFaceInFaceNodesSet(NodeInFaceSet& face_nodes_set,Integer index,Int64ConstArrayView face_nodes, NodeInFacePtr node, Int64 face_uid);
247 NodeInFacePtr& _insertNode(NodeInFaceSet& face_nodes_set, Int64 inserted_node_uid);
248 void _addItemsOrRelations(ItemDataList& info_list, IItemFamilyNetwork::eSchedulingOrder family_graph_traversal_order);
249
250 private:
251
253 ItemTypeMng* m_item_type_mng = nullptr;
254
255 Integer m_connectivity = 0;
256 bool m_has_edge = false;
257
260
261 bool m_verbose = false;
262
266 FaceUniqueIdBuilder* m_face_unique_id_builder = nullptr;
267 EdgeUniqueIdBuilder* m_edge_unique_id_builder = nullptr;
268
269 Int64 m_face_uid_pool = 0;
270 Int64 m_edge_uid_pool = 0;
271};
272
273/*---------------------------------------------------------------------------*/
274/*---------------------------------------------------------------------------*/
275
276} // End namespace Arcane::mesh
277
278/*---------------------------------------------------------------------------*/
279/*---------------------------------------------------------------------------*/
280
281#endif
Déclarations des types généraux de Arcane.
Tableau d'items de types quelconques.
Maille d'un maillage.
Definition Item.h:1178
Interface d'une famille d'entités.
Structure interne d'une entité de maillage.
Gestionnaire des types d'entités de maillage.
Definition ItemTypeMng.h:66
Vue sur un vecteur d'entités.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Construction d'un maillage de manière incrémentale.
ItemInternal * addFace(Int64 a_face_uid, Int64ConstArrayView a_node_list, Integer a_type)
Ajoute une face.
void addNodes2(Int64ConstArrayView nodes_uid, Integer sub_domain_id, Int32ArrayView nodes)
Ajoute des noeuds au maillage actuel. Utilise l'ajout d'item générique basé sur dépendances entre fam...
void computeFacesUniqueIds()
Calcul les numéros uniques de chaque face.
void setConnectivity(Integer c)
Définit la connectivité active pour le maillage associé
void addParentCells(const ItemVectorView &items)
Ajout au maillage courant d'item venant d'un maillage parent.
void addCells(Integer nb_cell, Int64ConstArrayView cell_infos, Integer sub_domain_id, Int32ArrayView cells, bool allow_build_face=true)
Ajoute des mailles au maillage actuel.
void addParentItems(const ItemVectorView &items, const eItemKind submesh_kind)
Ajout au maillage courant d'item venant d'un maillage parent.
OneMeshItemAdder * m_one_mesh_item_adder
Outils de construction du maillage.
Int64 m_face_uid_pool
Numéro du uniqueId() utilisé pour générer les faces.
void resetAfterDeallocate()
Remise à zéro des structures pour pouvoir faire à nouveau une allocation.
void addGhostChildFromParent(Array< Int64 > &ghost_cell_to_refine)
AMR.
void addEdges2(Integer nb_edge, Int64ConstArrayView edge_infos, Integer sub_domain_id, Int32ArrayView edges)
Ajoute des arêtes au maillage actuel. Utilise l'ajout d'item générique basé sur dépendances entre fam...
Int64 m_edge_uid_pool
Numéro du uniqueId() utilisé pour générer les edges.
void addItems(ItemDataList &item_info_list)
Ajout générique d'items d'un ensemble de famille pour lesquelles on fournit un ItemData.
void addNodes(Int64ConstArrayView nodes_uid, Integer sub_domain_id, Int32ArrayView nodes)
Ajoute des noeuds au maillage actuel.
void addFaces(Integer nb_face, Int64ConstArrayView face_infos, Integer sub_domain_id, Int32ArrayView faces)
Ajoute des faces au maillage actuel.
void addEdges(Integer nb_edge, Int64ConstArrayView edge_infos, Integer sub_domain_id, Int32ArrayView edges)
Ajoute des arêtes au maillage actuel.
GhostLayerBuilder * m_ghost_layer_builder
Outil pour construire les éléments fantômes.
void addHChildrenCells(Cell hParent_cell, Integer nb_cell, Int64ConstArrayView cells_infos, Int32 sub_domain_id, Int32ArrayView cells, bool allow_build_face)
Ajoute des mailles au maillage actuel.
bool m_has_edge
Info sur la présence d'arête (accèlere l'accès à la connectivité générale)
void addFamilyItems(ItemData &item_info)
Ajout générique d'items d'une famille, décrite par son ItemInfo.
void removeNeedRemoveMarkedItems()
Supprime les items fantômes.
void addCells3(Integer nb_cell, Int64ConstArrayView cell_infos, Integer sub_domain_id, Int32ArrayView cells, bool allow_build_face=true)
Ajoute des mailles au maillage actuel. Utilise l'ajout d'item générique basé sur dépendances entre fa...
void addFaces2(Integer nb_face, Int64ConstArrayView face_infos, Integer sub_domain_id, Int32ArrayView faces)
Ajoute des faces au maillage actuel. Utilise l'ajout d'item générique basé sur dépendances entre fami...
Integer m_connectivity
Info de connectivité du maillage courant.
Implémentation d'un maillage.
Definition DynamicMesh.h:97
Construction des couches fantômes.
Construction des couches fantômes.
Construction des couches fantômes.
Tableau associatif de ItemInternal.
Vue modifiable d'un tableau d'un type T.
Vue constante d'un tableau de type T.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eItemKind
Genre d'entité de maillage.