Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IMeshModifier.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/* IMeshModifier.h (C) 2000-2024 */
9/* */
10/* Interface de modification du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_IMESHMODIFIER_H
13#define ARCANE_IMESHMODIFIER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/ArcaneTypes.h"
18#include "arcane/Item.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29class IMesh;
30class IExtraGhostCellsBuilder;
31class IExtraGhostParticlesBuilder;
32class IAMRTransportFunctor;
33class IMeshModifierInternal;
34class IMeshModifier;
35
36/*---------------------------------------------------------------------------*/
37/*---------------------------------------------------------------------------*/
38/*!
39 * \brief Arguments pour IMeshModifier::addCells().
40 *
41 * Le format de cellsInfos() est identiques à celui de la méthode
42 * IMesh::allocateCells(). Si \a cellsLocalIds() n'est pas vide, il contiendra
43 * en retour les numéros locaux des mailles créées.
44 *
45 * Si une maille ajoutée possède le même uniqueId() qu'une des mailles existantes,
46 * la maille existante est conservée telle qu'elle et rien ne se passe.
47 *
48 * Les mailles créées sont considérées comme appartenant à ce sous-domaine
49 * Si ce n'est pas le cas, il faut ensuite modifier leur appartenance.
50 *
51 * Par défaut, lorsqu'on ajoute des mailles, si les faces associées n'existent
52 * pas elles sont créées automatiquement. Cela n'est possible qu'en séquentiel.
53 * Il est possible de désactiver cela en appelant setAllowBuildFaces().
54 * En parallèle, la valeur de isAllowBuildFaces() est ignorée.
55 */
57{
58 public:
59
60 MeshModifierAddCellsArgs(Integer nb_cell, Int64ConstArrayView cell_infos)
61 : m_nb_cell(nb_cell)
62 , m_cell_infos(cell_infos)
63 {}
64
65 MeshModifierAddCellsArgs(Integer nb_cell, Int64ConstArrayView cell_infos,
66 Int32ArrayView cell_lids)
67 : MeshModifierAddCellsArgs(nb_cell, cell_infos)
68 {
69 m_cell_lids = cell_lids;
70 }
71
72 public:
73
74 Int32 nbCell() const { return m_nb_cell; }
75 Int64ConstArrayView cellInfos() const { return m_cell_infos; }
76 Int32ArrayView cellLocalIds() const { return m_cell_lids; }
77
78 //! Indique si on autorise la création des faces associées
79 void setAllowBuildFaces(bool v) { m_is_allow_build_faces = v; }
80 bool isAllowBuildFaces() const { return m_is_allow_build_faces; }
81
82 private:
83
84 Int32 m_nb_cell = 0;
85 Int64ConstArrayView m_cell_infos;
86 //! En retour, liste des localId() des mailles créées
87 Int32ArrayView m_cell_lids;
88 bool m_is_allow_build_faces = true;
89};
90
91/*---------------------------------------------------------------------------*/
92/*---------------------------------------------------------------------------*/
93/*!
94 * \brief Arguments pour IMeshModifier::addFaces().
95 */
97{
98 public:
99
100 MeshModifierAddFacesArgs(Int32 nb_face, Int64ConstArrayView face_infos)
101 : m_nb_face(nb_face)
102 , m_face_infos(face_infos)
103 {}
104
105 MeshModifierAddFacesArgs(Int32 nb_face, Int64ConstArrayView face_infos,
106 Int32ArrayView face_lids)
107 : MeshModifierAddFacesArgs(nb_face, face_infos)
108 {
109 m_face_lids = face_lids;
110 }
111
112 public:
113
114 Int32 nbFace() const { return m_nb_face; }
115 Int64ConstArrayView faceInfos() const { return m_face_infos; }
116 Int32ArrayView faceLocalIds() const { return m_face_lids; }
117
118 private:
119
120 Int32 m_nb_face = 0;
121 Int64ConstArrayView m_face_infos;
122 //! En retour, liste des localId() des faces créées
123 Int32ArrayView m_face_lids;
124};
125
126/*---------------------------------------------------------------------------*/
127/*---------------------------------------------------------------------------*/
128/*!
129 * \brief Interface de modification du maillage.
130 *
131 * Cette interface fournit les services permettant de modifier un
132 * maillage.
133 */
134class ARCANE_CORE_EXPORT IMeshModifier
135{
136 public:
137
138 virtual ~IMeshModifier() {} //<! Libère les ressources
139
140 public:
141
142 virtual void build() = 0;
143
144 public:
145
146 //! Maillage associé
147 virtual IMesh* mesh() = 0;
148
149 public:
150
151 /*!
152 * \brief Positionne la propriété indiquant si le maillage peut évoluer.
153 *
154 * Cette propriété doit être positionnée à vrai si l'on souhaite modifier
155 * le maillage, par exemple en échangeant des entités par appel à
156 * exchangeItems(). Cela ne concerne que les noeuds, arêtes, faces et
157 * mailles mais pas les particules qui peuvent toujours être créées et détruites.
158 *
159 * Par défaut, isDynamic() est faux.
160 *
161 * Le positionnement de la propriété ne peut se faire qu'à l'initialisation.
162 */
163 virtual void setDynamic(bool v) = 0;
164
165 /*!
166 * \brief Ajoute des mailles.
167 *
168 * Ajoute des mailles. Le format de \a cells_infos est identiques à celui
169 * de la méthode IMesh::allocateCells(). Si \a cells_lid n'est pas vide, il contiendra
170 * en retour les numéros locaux des mailles créées. Il est possible de faire plusieurs ajouts
171 * successifs. Une fois les ajouts terminés, il faut appeler la méthode
172 * endUpdate(). Si une maille ajoutée possède le même uniqueId() qu'une
173 * des mailles existantes, la maille existante est conservée telle qu'elle et
174 * rien ne se passe.
175 *
176 * Les mailles créées sont considérées comme appartenant à ce sous-domaine
177 * Si ce n'est pas le cas, il faut ensuite modifier leur appartenance.
178 *
179 * Cette méthode est collective. Si un sous-domaine ne souhaite pas ajouter
180 * de mailles, il est possible de passer un tableau vide.
181 */
182 virtual void addCells(Integer nb_cell, Int64ConstArrayView cell_infos,
183 Int32ArrayView cells_lid = Int32ArrayView()) = 0;
184
185 //! Ajoute des mailles
186 virtual void addCells(const MeshModifierAddCellsArgs& args);
187
188 /*!
189 * \brief Ajoute des faces.
190 *
191 * Ajoute des faces. Le format de \a face_infos est identiques à celui
192 * de la méthode IMesh::allocateCells(). Si \a face_lids n'est pas vide, il contiendra
193 * en retour les numéros locaux des faces créées. Il est possible de faire plusieurs ajouts
194 * successifs. Une fois les ajouts terminés, il faut appeler la méthode
195 * endUpdate(). Si une face ajoutée possède le même uniqueId() qu'une
196 * des faces existantes, la face existante est conservée telle qu'elle et
197 * rien ne se passe.
198 *
199 * Les faces créées sont considérées comme appartenant à ce sous-domaine
200 * Si ce n'est pas le cas, il faut ensuite modifier leur appartenance.
201 *
202 * Cette méthode est collective. Si un sous-domaine ne souhaite pas ajouter
203 * de faces, il est possible de passer un tableau vide.
204 */
205 virtual void addFaces(Integer nb_face, Int64ConstArrayView face_infos,
206 Int32ArrayView face_lids = Int32ArrayView()) = 0;
207
208 //! Ajoute des faces
209 virtual void addFaces(const MeshModifierAddFacesArgs& args);
210
211 /*!
212 * \brief Ajoute des arêtes.
213 *
214 * Ajoute des arêtes. Le format de \a edge_infos est identiques à celui
215 * de la méthode IMesh::allocateCells(). Si \a edge_lids n'est pas vide, il contiendra
216 * en retour les numéros locaux des arêtes créées. Il est possible de faire plusieurs ajouts
217 * successifs. Une fois les ajouts terminés, il faut appeler la méthode
218 * endUpdate(). Si une face ajoutée possède le même uniqueId() qu'une
219 * des arêtes existantes, la arête existante est conservée telle qu'elle et
220 * rien ne se passe.
221 *
222 * Les arêtes créées sont considérées comme appartenant à ce sous-domaine
223 * Si ce n'est pas le cas, il faut ensuite modifier leur appartenance.
224 *
225 * Cette méthode est collective. Si un sous-domaine ne souhaite pas ajouter
226 * de arêtes, il est possible de passer un tableau vide.
227 */
228 virtual void addEdges(Integer nb_edge, Int64ConstArrayView edge_infos,
229 Int32ArrayView edge_lids = Int32ArrayView()) = 0;
230
231 /*!
232 * \brief Ajoute des noeuds.
233 *
234 * Ajoute des noeuds avec comme identifiant unique les valeurs
235 * du tableau \a nodes_uid. Si \a nodes_lid n'est pas vide, il contiendra
236 * en retour les numéros locaux des noeuds créés. Il est possible de faire plusieurs ajouts
237 * successifs. Une fois les ajouts terminés, il faut appeler la méthode
238 * endUpdate(). Il est possible de spécifier un uniqueId() déjà
239 * existant. Dans ce cas le noeud est simplement ignoré.
240 *
241 * Les noeuds créés sont considérés comme appartenant à ce sous-domaine
242 * Si ce n'est pas le cas, il faut ensuite modifier leur appartenance.
243 *
244 * Cette méthode est collective. Si un sous-domaine ne souhaite pas ajouter
245 * de noeuds, il est possible de passer un tableau vide.
246 */
247 virtual void addNodes(Int64ConstArrayView nodes_uid,
248 Int32ArrayView nodes_lid = Int32ArrayView()) = 0;
249
250 /*!
251 * \brief Supprime des mailles.
252 *
253 * Supprime les mailles dont les numéros locaux sont données
254 * dans \a cells_local_id. Il est possible de faire plusieurs suppressions
255 * successives. Une fois les suppressions terminées, il faut appeler la méthode
256 * endUpdate().
257 */
258 virtual void removeCells(Int32ConstArrayView cells_local_id) = 0;
259
260 virtual void removeCells(Int32ConstArrayView cells_local_id, bool update_ghost) = 0;
261
262 /*!
263 * \brief Détache des mailles du maillage.
264 *
265 * Les mailles détachées sont déconnectées du maillage. Les noeuds, arêtes et faces
266 * de ces mailles ne leur font plus référence et le uniqueId() de ces mailles peuvent
267 * être réutilisés. Pour détruire définitivement ces mailles, il faut appeler
268 * la méthode removeDetachedCells().
269 */
270 virtual void detachCells(Int32ConstArrayView cells_local_id) = 0;
271
272 /*!
273 * \brief Supprime les mailles détachées
274 *
275 * Supprime les mailles détachées via detachCells().
276 * Il est possible de faire plusieurs suppressions
277 * successives. Une fois les suppressions terminées, il faut appeler la méthode
278 * endUpdate().
279 */
280 virtual void removeDetachedCells(Int32ConstArrayView cells_local_id) = 0;
281
282 //! AMR
283 virtual void flagCellToRefine(Int32ConstArrayView cells_lids) = 0;
284 virtual void flagCellToCoarsen(Int32ConstArrayView cells_lids) = 0;
285 virtual void refineItems() = 0;
286 virtual void coarsenItems() = 0;
287 virtual void coarsenItemsV2(bool update_parent_flag) = 0;
288 virtual bool adapt() = 0;
289 virtual void registerCallBack(IAMRTransportFunctor* f) = 0;
290 virtual void unRegisterCallBack(IAMRTransportFunctor* f) = 0;
291 virtual void addHChildrenCells(Cell parent_cell, Integer nb_cell,
292 Int64ConstArrayView cells_infos, Int32ArrayView cells_lid = Int32ArrayView()) = 0;
293
294 virtual void addParentCellToCell(Cell child, Cell parent) = 0;
295 virtual void addChildCellToCell(Cell parent, Cell child) = 0;
296
297 virtual void addParentFaceToFace(Face child, Face parent) = 0;
298 virtual void addChildFaceToFace(Face parent, Face child) = 0;
299
300 virtual void addParentNodeToNode(Node child, Node parent) = 0;
301 virtual void addChildNodeToNode(Node parent, Node child) = 0;
302
303 //! Supprime toutes les entitées de toutes les familles de ce maillage.
304 virtual void clearItems() = 0;
305
306 /*!
307 * \brief Ajoute les mailles à partir des données contenues dans \a buffer.
308 *
309 * \a buffer doit contenir des mailles sérialisées, par exemple par
310 * l'appel à IMesh::serializeCells().
311 *
312 * \deprecated Utiliser IMesh::cellFamily()->policyMng()->createSerializer() à la place.
313 */
314 ARCANE_DEPRECATED_240 virtual void addCells(ISerializer* buffer) = 0;
315
316 /*!
317 * \brief Ajoute les mailles à partir des données contenues dans \a buffer.
318 *
319 * \a buffer doit contenir des mailles sérialisées, par exemple par
320 * l'appel à IMesh::serializeCells().
321 * En retour \a cells_local_id contient la liste des localId() des
322 * mailles désérialisées. Une maille peut être présente plusieurs
323 * fois dans cette liste si elle est présente plusieurs fois dans \a buffer.
324 *
325 * \deprecated Utiliser IMesh::cellFamily()->policyMng()->createSerializer() à la place.
326 */
327 ARCANE_DEPRECATED_240 virtual void addCells(ISerializer* buffer, Int32Array& cells_local_id) = 0;
328
329 /*!
330 * \brief Notifie l'instance de la fin de la modification du maillage.
331 *
332 * Cette méthode est collective.
333 */
334 virtual void endUpdate() = 0;
335
336 virtual void endUpdate(bool update_ghost_layer, bool remove_old_ghost) = 0; // SDC: this signature is needed @IFPEN.
337
338 public:
339
340 /*!
341 * \brief Mise à jour de la couche fantôme.
342 *
343 * Cette opération est collective.
344 */
345 virtual void updateGhostLayers() = 0;
346
347 //! AMR
348 virtual void updateGhostLayerFromParent(Array<Int64>& ghost_cell_to_refine,
349 Array<Int64>& ghost_cell_to_coarsen,
350 bool remove_old_ghost) = 0;
351
352 //! ajout du algorithme d'ajout de mailles fantômes "extraordinaires".
354
355 //! Supprime l'association à l'instance \a builder.
357
358 //! Ajout du algorithme d'ajout de particules fantômes "extraordinaires"
360
361 //! Supprime l'association à l'instance \a builder.
363
364 public:
365
366 //! Fusionne les maillages de \a meshes avec le maillage actuel.
367 virtual void mergeMeshes(ConstArrayView<IMesh*> meshes) = 0;
368
369 public:
370
371 //! API interne à Arcane
372 virtual IMeshModifierInternal* _modifierInternalApi() = 0;
373};
374
375/*---------------------------------------------------------------------------*/
376/*---------------------------------------------------------------------------*/
377
378} // End namespace Arcane
379
380/*---------------------------------------------------------------------------*/
381/*---------------------------------------------------------------------------*/
382
383#endif
Maille d'un maillage.
Definition Item.h:1178
Face d'une maille.
Definition Item.h:932
Interface d'un fonctor avec argument.
Interface d'un constructeur de mailles fantômes "extraordinaires"
Interface d'un constructeur de mailles fantômes "extraordinaires".
Interface de modification du maillage.
virtual void updateGhostLayers()=0
Mise à jour de la couche fantôme.
virtual void setDynamic(bool v)=0
Positionne la propriété indiquant si le maillage peut évoluer.
virtual ARCANE_DEPRECATED_240 void addCells(ISerializer *buffer, Int32Array &cells_local_id)=0
Ajoute les mailles à partir des données contenues dans buffer.
virtual void removeCells(Int32ConstArrayView cells_local_id)=0
Supprime des mailles.
virtual void addExtraGhostParticlesBuilder(IExtraGhostParticlesBuilder *builder)=0
Ajout du algorithme d'ajout de particules fantômes "extraordinaires".
virtual void flagCellToRefine(Int32ConstArrayView cells_lids)=0
AMR.
virtual IMesh * mesh()=0
Maillage associé
virtual void addNodes(Int64ConstArrayView nodes_uid, Int32ArrayView nodes_lid=Int32ArrayView())=0
Ajoute des noeuds.
virtual void addFaces(Integer nb_face, Int64ConstArrayView face_infos, Int32ArrayView face_lids=Int32ArrayView())=0
Ajoute des faces.
virtual void removeExtraGhostParticlesBuilder(IExtraGhostParticlesBuilder *builder)=0
Supprime l'association à l'instance builder.
virtual void removeDetachedCells(Int32ConstArrayView cells_local_id)=0
Supprime les mailles détachées.
virtual IMeshModifierInternal * _modifierInternalApi()=0
API interne à Arcane.
virtual void detachCells(Int32ConstArrayView cells_local_id)=0
Détache des mailles du maillage.
virtual void addCells(Integer nb_cell, Int64ConstArrayView cell_infos, Int32ArrayView cells_lid=Int32ArrayView())=0
Ajoute des mailles.
virtual ARCANE_DEPRECATED_240 void addCells(ISerializer *buffer)=0
Ajoute les mailles à partir des données contenues dans buffer.
virtual void mergeMeshes(ConstArrayView< IMesh * > meshes)=0
Fusionne les maillages de meshes avec le maillage actuel.
virtual void endUpdate()=0
Notifie l'instance de la fin de la modification du maillage.
virtual void addExtraGhostCellsBuilder(IExtraGhostCellsBuilder *builder)=0
ajout du algorithme d'ajout de mailles fantômes "extraordinaires".
virtual void clearItems()=0
Supprime toutes les entitées de toutes les familles de ce maillage.
virtual void removeExtraGhostCellsBuilder(IExtraGhostCellsBuilder *builder)=0
Supprime l'association à l'instance builder.
virtual void updateGhostLayerFromParent(Array< Int64 > &ghost_cell_to_refine, Array< Int64 > &ghost_cell_to_coarsen, bool remove_old_ghost)=0
AMR.
virtual void addEdges(Integer nb_edge, Int64ConstArrayView edge_infos, Int32ArrayView edge_lids=Int32ArrayView())=0
Ajoute des arêtes.
Arguments pour IMeshModifier::addCells().
void setAllowBuildFaces(bool v)
Indique si on autorise la création des faces associées.
Arguments pour IMeshModifier::addFaces().
Noeud d'un maillage.
Definition Dom.h:204
Vue modifiable d'un tableau d'un type T.
Classe de base des vecteurs 1D de données.
Vue constante d'un tableau de type T.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
ConstArrayView< Int64 > Int64ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
Definition UtilsTypes.h:638
ArrayView< Int32 > Int32ArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:611