Arcane  v3.16.2.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;
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 */
56class MeshModifierAddCellsArgs
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 */
96class MeshModifierAddFacesArgs
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. La manipulation du maillage est un mécanisme complexe et est
133 * réservée aux utilisateurs avertis. Certaines manipulations peuvent
134 * laisser le maillage dans un état incohérent.
135 *
136 * Les opérations supportées dépendent du type de maillage.
137 * Pour des raisons de performance, l'ajout et la supression d'entité ne
138 * mettent pas directement à jour les variables ou les groupes d'entités.
139 * Pour que cela soit pris en compte, il faut appeler la méthode endUpdate().
140 * En parallèle, cela provoque aussi la mise à jour des entités fantômes.
141 */
142class ARCANE_CORE_EXPORT IMeshModifier
143{
144 public:
145
146 virtual ~IMeshModifier() {} //<! Libère les ressources
147
148 public:
149
150 virtual void build() = 0;
151
152 public:
153
154 //! Maillage associé
155 virtual IMesh* mesh() = 0;
156
157 public:
158
159 /*!
160 * \brief Positionne la propriété indiquant si le maillage peut évoluer.
161 *
162 * Cette propriété doit être positionnée à vrai si l'on souhaite modifier
163 * le maillage, par exemple en échangeant des entités par appel à
164 * exchangeItems(). Cela ne concerne que les noeuds, arêtes, faces et
165 * mailles mais pas les particules qui peuvent toujours être créées et détruites.
166 *
167 * Par défaut, isDynamic() est faux.
168 *
169 * Le positionnement de la propriété ne peut se faire qu'à l'initialisation.
170 */
171 virtual void setDynamic(bool v) = 0;
172
173 /*!
174 * \brief Ajoute des mailles.
175 *
176 * Ajoute des mailles. Le format de \a cells_infos est identiques à celui
177 * de la méthode IMesh::allocateCells(). Si \a cells_lid n'est pas vide, il contiendra
178 * en retour les numéros locaux des mailles créées. Il est possible de faire plusieurs ajouts
179 * successifs. Une fois les ajouts terminés, il faut appeler la méthode
180 * endUpdate(). Si une maille ajoutée possède le même uniqueId() qu'une
181 * des mailles existantes, la maille existante est conservée telle qu'elle et
182 * rien ne se passe.
183 *
184 * Les mailles créées sont considérées comme appartenant à ce sous-domaine
185 * Si ce n'est pas le cas, il faut ensuite modifier leur appartenance.
186 *
187 * Cette méthode est collective. Si un sous-domaine ne souhaite pas ajouter
188 * de mailles, il est possible de passer un tableau vide.
189 */
190 virtual void addCells(Integer nb_cell, Int64ConstArrayView cell_infos,
191 Int32ArrayView cells_lid = Int32ArrayView()) = 0;
192
193 //! Ajoute des mailles
194 virtual void addCells(const MeshModifierAddCellsArgs& args);
195
196 /*!
197 * \brief Ajoute des faces.
198 *
199 * \sa addFaces(const MeshModifierAddFacesArgs&)
200 */
201 virtual void addFaces(Integer nb_face, Int64ConstArrayView face_infos,
202 Int32ArrayView face_lids = Int32ArrayView()) = 0;
203
204 /*!
205 * \brief Ajoute des faces.
206 *
207 * Ajoute des faces. Le format de \a face_infos est identiques à celui
208 * de la méthode IMesh::allocateCells(). Si \a face_lids n'est pas vide, il contiendra
209 * en retour les numéros locaux des faces créées. Il est possible de faire plusieurs ajouts
210 * successifs. Une fois les ajouts terminés, il faut appeler la méthode
211 * endUpdate(). Si une face ajoutée possède le même uniqueId() qu'une
212 * des faces existantes, la face existante est conservée telle qu'elle et
213 * rien ne se passe.
214 *
215 * Les faces créées sont considérées comme appartenant à ce sous-domaine
216 * Si ce n'est pas le cas, il faut ensuite modifier leur appartenance.
217 */
218 virtual void addFaces(const MeshModifierAddFacesArgs& args);
219
220 /*!
221 * \brief Ajoute des arêtes.
222 *
223 * Ajoute des arêtes. Le format de \a edge_infos est identiques à celui
224 * de la méthode IMesh::allocateCells(). Si \a edge_lids n'est pas vide, il contiendra
225 * en retour les numéros locaux des arêtes créées. Il est possible de faire plusieurs ajouts
226 * successifs. Une fois les ajouts terminés, il faut appeler la méthode
227 * endUpdate(). Si une face ajoutée possède le même uniqueId() qu'une
228 * des arêtes existantes, la arête existante est conservée telle qu'elle et
229 * rien ne se passe.
230 *
231 * Les arêtes créées sont considérées comme appartenant à ce sous-domaine
232 * Si ce n'est pas le cas, il faut ensuite modifier leur appartenance.
233 *
234 * Cette méthode est collective. Si un sous-domaine ne souhaite pas ajouter
235 * de arêtes, il est possible de passer un tableau vide.
236 */
237 virtual void addEdges(Integer nb_edge, Int64ConstArrayView edge_infos,
238 Int32ArrayView edge_lids = Int32ArrayView()) = 0;
239
240 /*!
241 * \brief Ajoute des noeuds.
242 *
243 * Ajoute des noeuds avec comme identifiant unique les valeurs
244 * du tableau \a nodes_uid. Si \a nodes_lid n'est pas vide, il contiendra
245 * en retour les numéros locaux des noeuds créés. Il est possible de faire plusieurs ajouts
246 * successifs. Une fois les ajouts terminés, il faut appeler la méthode
247 * endUpdate(). Il est possible de spécifier un uniqueId() déjà
248 * existant. Dans ce cas le noeud est simplement ignoré.
249 *
250 * Les noeuds créés sont considérés comme appartenant à ce sous-domaine
251 * Si ce n'est pas le cas, il faut ensuite modifier leur appartenance.
252 *
253 * Cette méthode est collective. Si un sous-domaine ne souhaite pas ajouter
254 * de noeuds, il est possible de passer un tableau vide.
255 */
256 virtual void addNodes(Int64ConstArrayView nodes_uid,
257 Int32ArrayView nodes_lid = Int32ArrayView()) = 0;
258
259 /*!
260 * \brief Supprime des mailles.
261 *
262 * Supprime les mailles dont les numéros locaux sont données
263 * dans \a cells_local_id. Il est possible de faire plusieurs suppressions
264 * successives. Une fois les suppressions terminées, il faut appeler la méthode
265 * endUpdate().
266 */
267 virtual void removeCells(Int32ConstArrayView cells_local_id) = 0;
268
269 virtual void removeCells(Int32ConstArrayView cells_local_id, bool update_ghost) = 0;
270
271 /*!
272 * \brief Détache des mailles du maillage.
273 *
274 * Les mailles détachées sont déconnectées du maillage. Les noeuds, arêtes et faces
275 * de ces mailles ne leur font plus référence et le uniqueId() de ces mailles peuvent
276 * être réutilisés. Pour détruire définitivement ces mailles, il faut appeler
277 * la méthode removeDetachedCells().
278 */
279 virtual void detachCells(Int32ConstArrayView cells_local_id) = 0;
280
281 /*!
282 * \brief Supprime les mailles détachées
283 *
284 * Supprime les mailles détachées via detachCells().
285 * Il est possible de faire plusieurs suppressions
286 * successives. Une fois les suppressions terminées, il faut appeler la méthode
287 * endUpdate().
288 */
289 virtual void removeDetachedCells(Int32ConstArrayView cells_local_id) = 0;
290
291 //! AMR
292 virtual void flagCellToRefine(Int32ConstArrayView cells_lids) = 0;
293 virtual void flagCellToCoarsen(Int32ConstArrayView cells_lids) = 0;
294 virtual void refineItems() = 0;
295 virtual void coarsenItems() = 0;
296 virtual void coarsenItemsV2(bool update_parent_flag) = 0;
297 virtual bool adapt() = 0;
298 virtual void registerCallBack(IAMRTransportFunctor* f) = 0;
299 virtual void unRegisterCallBack(IAMRTransportFunctor* f) = 0;
300 virtual void addHChildrenCells(Cell parent_cell, Integer nb_cell,
301 Int64ConstArrayView cells_infos, Int32ArrayView cells_lid = Int32ArrayView()) = 0;
302
303 virtual void addParentCellToCell(Cell child, Cell parent) = 0;
304 virtual void addChildCellToCell(Cell parent, Cell child) = 0;
305
306 virtual void addParentFaceToFace(Face child, Face parent) = 0;
307 virtual void addChildFaceToFace(Face parent, Face child) = 0;
308
309 virtual void addParentNodeToNode(Node child, Node parent) = 0;
310 virtual void addChildNodeToNode(Node parent, Node child) = 0;
311
312 //! Supprime toutes les entitées de toutes les familles de ce maillage.
313 virtual void clearItems() = 0;
314
315 /*!
316 * \brief Ajoute les mailles à partir des données contenues dans \a buffer.
317 *
318 * \a buffer doit contenir des mailles sérialisées, par exemple par
319 * l'appel à IMesh::serializeCells().
320 *
321 * \deprecated Utiliser IMesh::cellFamily()->policyMng()->createSerializer() à la place.
322 */
323 ARCANE_DEPRECATED_240 virtual void addCells(ISerializer* buffer) = 0;
324
325 /*!
326 * \brief Ajoute les mailles à partir des données contenues dans \a buffer.
327 *
328 * \a buffer doit contenir des mailles sérialisées, par exemple par
329 * l'appel à IMesh::serializeCells().
330 * En retour \a cells_local_id contient la liste des localId() des
331 * mailles désérialisées. Une maille peut être présente plusieurs
332 * fois dans cette liste si elle est présente plusieurs fois dans \a buffer.
333 *
334 * \deprecated Utiliser IMesh::cellFamily()->policyMng()->createSerializer() à la place.
335 */
336 ARCANE_DEPRECATED_240 virtual void addCells(ISerializer* buffer, Int32Array& cells_local_id) = 0;
337
338 /*!
339 * \brief Notifie l'instance de la fin de la modification du maillage.
340 *
341 * Cette méthode est collective.
342 */
343 virtual void endUpdate() = 0;
344
345 virtual void endUpdate(bool update_ghost_layer, bool remove_old_ghost) = 0; // SDC: this signature is needed @IFPEN.
346
347 public:
348
349 /*!
350 * \brief Mise à jour de la couche fantôme.
351 *
352 * Cette opération est collective.
353 */
354 virtual void updateGhostLayers() = 0;
355
356 //! AMR
357 virtual void updateGhostLayerFromParent(Array<Int64>& ghost_cell_to_refine,
358 Array<Int64>& ghost_cell_to_coarsen,
359 bool remove_old_ghost) = 0;
360
361 //! ajout du algorithme d'ajout de mailles fantômes "extraordinaires".
363
364 //! Supprime l'association à l'instance \a builder.
366
367 //! Ajout du algorithme d'ajout de particules fantômes "extraordinaires"
369
370 //! Supprime l'association à l'instance \a builder.
372
373 public:
374
375 //! Fusionne les maillages de \a meshes avec le maillage actuel.
376 virtual void mergeMeshes(ConstArrayView<IMesh*> meshes) = 0;
377
378 public:
379
380 //! API interne à Arcane
381 virtual IMeshModifierInternal* _modifierInternalApi() = 0;
382};
383
384/*---------------------------------------------------------------------------*/
385/*---------------------------------------------------------------------------*/
386
387} // End namespace Arcane
388
389/*---------------------------------------------------------------------------*/
390/*---------------------------------------------------------------------------*/
391
392#endif
Déclarations des types généraux de Arcane.
Classe de base des vecteurs 1D de données.
Maille d'un maillage.
Definition Item.h:1205
Vue constante d'un tableau de type T.
Face d'une maille.
Definition Item.h:958
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:582
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:569
ConstArrayView< Int64 > Int64ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
Definition UtilsTypes.h:567
ArrayView< Int32 > Int32ArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:540
Array< Int32 > Int32Array
Tableau dynamique à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:214
std::int32_t Int32
Type entier signé sur 32 bits.