Arcane  v3.15.3.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-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/* IMeshModifier.h (C) 2000-2025 */
9/* */
10/* Interface de modification du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_IMESHMODIFIER_H
13#define ARCANE_CORE_IMESHMODIFIER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18#include "arcane/core/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
61 : m_nb_cell(nb_cell)
62 , m_cell_infos(cell_infos)
63 {}
64
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
101 : m_nb_face(nb_face)
102 , m_face_infos(face_infos)
103 {}
104
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 */
184
185 //! Ajoute des mailles
186 virtual void addCells(const MeshModifierAddCellsArgs& args);
187
188 /*!
189 * \brief Ajoute des faces.
190 *
191 * \sa addFaces(const MeshModifierAddFacesArgs&)
192 */
195
196 /*!
197 * \brief Ajoute des faces.
198 *
199 * Ajoute des faces. Le format de \a face_infos est identiques à celui
200 * de la méthode IMesh::allocateCells(). Si \a face_lids n'est pas vide, il contiendra
201 * en retour les numéros locaux des faces créées. Il est possible de faire plusieurs ajouts
202 * successifs. Une fois les ajouts terminés, il faut appeler la méthode
203 * endUpdate(). Si une face ajoutée possède le même uniqueId() qu'une
204 * des faces existantes, la face existante est conservée telle qu'elle et
205 * rien ne se passe.
206 *
207 * Les faces créées sont considérées comme appartenant à ce sous-domaine
208 * Si ce n'est pas le cas, il faut ensuite modifier leur appartenance.
209 */
210 virtual void addFaces(const MeshModifierAddFacesArgs& args);
211
212 /*!
213 * \brief Ajoute des arêtes.
214 *
215 * Ajoute des arêtes. Le format de \a edge_infos est identiques à celui
216 * de la méthode IMesh::allocateCells(). Si \a edge_lids n'est pas vide, il contiendra
217 * en retour les numéros locaux des arêtes créées. Il est possible de faire plusieurs ajouts
218 * successifs. Une fois les ajouts terminés, il faut appeler la méthode
219 * endUpdate(). Si une face ajoutée possède le même uniqueId() qu'une
220 * des arêtes existantes, la arête existante est conservée telle qu'elle et
221 * rien ne se passe.
222 *
223 * Les arêtes créées sont considérées comme appartenant à ce sous-domaine
224 * Si ce n'est pas le cas, il faut ensuite modifier leur appartenance.
225 *
226 * Cette méthode est collective. Si un sous-domaine ne souhaite pas ajouter
227 * de arêtes, il est possible de passer un tableau vide.
228 */
231
232 /*!
233 * \brief Ajoute des noeuds.
234 *
235 * Ajoute des noeuds avec comme identifiant unique les valeurs
236 * du tableau \a nodes_uid. Si \a nodes_lid n'est pas vide, il contiendra
237 * en retour les numéros locaux des noeuds créés. Il est possible de faire plusieurs ajouts
238 * successifs. Une fois les ajouts terminés, il faut appeler la méthode
239 * endUpdate(). Il est possible de spécifier un uniqueId() déjà
240 * existant. Dans ce cas le noeud est simplement ignoré.
241 *
242 * Les noeuds créés sont considérés comme appartenant à ce sous-domaine
243 * Si ce n'est pas le cas, il faut ensuite modifier leur appartenance.
244 *
245 * Cette méthode est collective. Si un sous-domaine ne souhaite pas ajouter
246 * de noeuds, il est possible de passer un tableau vide.
247 */
250
251 /*!
252 * \brief Supprime des mailles.
253 *
254 * Supprime les mailles dont les numéros locaux sont données
255 * dans \a cells_local_id. Il est possible de faire plusieurs suppressions
256 * successives. Une fois les suppressions terminées, il faut appeler la méthode
257 * endUpdate().
258 */
260
261 virtual void removeCells(Int32ConstArrayView cells_local_id, bool update_ghost) = 0;
262
263 /*!
264 * \brief Détache des mailles du maillage.
265 *
266 * Les mailles détachées sont déconnectées du maillage. Les noeuds, arêtes et faces
267 * de ces mailles ne leur font plus référence et le uniqueId() de ces mailles peuvent
268 * être réutilisés. Pour détruire définitivement ces mailles, il faut appeler
269 * la méthode removeDetachedCells().
270 */
272
273 /*!
274 * \brief Supprime les mailles détachées
275 *
276 * Supprime les mailles détachées via detachCells().
277 * Il est possible de faire plusieurs suppressions
278 * successives. Une fois les suppressions terminées, il faut appeler la méthode
279 * endUpdate().
280 */
282
283 //! AMR
285 virtual void flagCellToCoarsen(Int32ConstArrayView cells_lids) = 0;
286 virtual void refineItems() = 0;
287 virtual void coarsenItems() = 0;
288 virtual void coarsenItemsV2(bool update_parent_flag) = 0;
289 virtual bool adapt() = 0;
290 virtual void registerCallBack(IAMRTransportFunctor* f) = 0;
291 virtual void unRegisterCallBack(IAMRTransportFunctor* f) = 0;
292 virtual void addHChildrenCells(Cell parent_cell, Integer nb_cell,
294
295 virtual void addParentCellToCell(Cell child, Cell parent) = 0;
296 virtual void addChildCellToCell(Cell parent, Cell child) = 0;
297
298 virtual void addParentFaceToFace(Face child, Face parent) = 0;
299 virtual void addChildFaceToFace(Face parent, Face child) = 0;
300
301 virtual void addParentNodeToNode(Node child, Node parent) = 0;
302 virtual void addChildNodeToNode(Node parent, Node child) = 0;
303
304 //! Supprime toutes les entitées de toutes les familles de ce maillage.
305 virtual void clearItems() = 0;
306
307 /*!
308 * \brief Ajoute les mailles à partir des données contenues dans \a buffer.
309 *
310 * \a buffer doit contenir des mailles sérialisées, par exemple par
311 * l'appel à IMesh::serializeCells().
312 *
313 * \deprecated Utiliser IMesh::cellFamily()->policyMng()->createSerializer() à la place.
314 */
315 ARCANE_DEPRECATED_240 virtual void addCells(ISerializer* buffer) = 0;
316
317 /*!
318 * \brief Ajoute les mailles à partir des données contenues dans \a buffer.
319 *
320 * \a buffer doit contenir des mailles sérialisées, par exemple par
321 * l'appel à IMesh::serializeCells().
322 * En retour \a cells_local_id contient la liste des localId() des
323 * mailles désérialisées. Une maille peut être présente plusieurs
324 * fois dans cette liste si elle est présente plusieurs fois dans \a buffer.
325 *
326 * \deprecated Utiliser IMesh::cellFamily()->policyMng()->createSerializer() à la place.
327 */
328 ARCANE_DEPRECATED_240 virtual void addCells(ISerializer* buffer, Int32Array& cells_local_id) = 0;
329
330 /*!
331 * \brief Notifie l'instance de la fin de la modification du maillage.
332 *
333 * Cette méthode est collective.
334 */
335 virtual void endUpdate() = 0;
336
337 virtual void endUpdate(bool update_ghost_layer, bool remove_old_ghost) = 0; // SDC: this signature is needed @IFPEN.
338
339 public:
340
341 /*!
342 * \brief Mise à jour de la couche fantôme.
343 *
344 * Cette opération est collective.
345 */
346 virtual void updateGhostLayers() = 0;
347
348 //! AMR
351 bool remove_old_ghost) = 0;
352
353 //! ajout du algorithme d'ajout de mailles fantômes "extraordinaires".
355
356 //! Supprime l'association à l'instance \a builder.
358
359 //! Ajout du algorithme d'ajout de particules fantômes "extraordinaires"
361
362 //! Supprime l'association à l'instance \a builder.
364
365 public:
366
367 //! Fusionne les maillages de \a meshes avec le maillage actuel.
368 virtual void mergeMeshes(ConstArrayView<IMesh*> meshes) = 0;
369
370 public:
371
372 //! API interne à Arcane
374};
375
376/*---------------------------------------------------------------------------*/
377/*---------------------------------------------------------------------------*/
378
379} // End namespace Arcane
380
381/*---------------------------------------------------------------------------*/
382/*---------------------------------------------------------------------------*/
383
384#endif
Déclarations des types généraux de Arcane.
Maille d'un maillage.
Definition Item.h:1191
Face d'une maille.
Definition Item.h:944
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 Item.h:573
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.
Référence à une instance.
-*- 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:570
ArrayView< Int32 > Int32ArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:543