Arcane  v3.16.0.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
src/arcane/cartesianmesh/ICartesianMesh.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/* ICartesianMesh.h (C) 2000-2025 */
9/* */
10/* Interface d'un maillage cartésien. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CARTESIANMESH_ICARTESIANMESH_H
13#define ARCANE_CARTESIANMESH_ICARTESIANMESH_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/cartesianmesh/AMRZonePosition.h"
18#include "arcane/cartesianmesh/CartesianMeshGlobal.h"
19
21#include "arcane/core/MeshHandle.h"
22
23/*---------------------------------------------------------------------------*/
24/*---------------------------------------------------------------------------*/
25
26namespace Arcane
27{
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31/*!
32 * \ingroup ArcaneCartesianMesh
33 * \brief Interface d'un maillage cartésien.
34 */
35class ARCANE_CARTESIANMESH_EXPORT ICartesianMesh
36{
37 public:
38
39 virtual ~ICartesianMesh() {} //<! Libère les ressources
40
41 /*!
42 * \brief Récupère ou créé la référence associée à \a mesh.
43 *
44 * Si aucun gestionnaire de matériau n'est associé à \a mesh, il
45 * sera créé lors de l'appel à cette méthode si \a create vaut \a true.
46 * Si \a create vaut \a false est qu'aucune gestionnaire n'est associé
47 * au maillage, un pointeur nul est retourné.
48 * L'instance retournée reste valide tant que le maillage \a mesh existe.
49 */
50 static ICartesianMesh* getReference(const MeshHandleOrMesh& mesh, bool create = true);
51
52 public:
53
54 virtual void build() = 0;
55
56 public:
57
58 //! Maillage associé à ce maillage cartésien
59 virtual IMesh* mesh() const = 0;
60
61 //! Gestionnaire de trace associé.
62 virtual ITraceMng* traceMng() const = 0;
63
64 //! Liste des mailles dans la direction \a dir
66
67 //! Liste des mailles dans la direction \a dir (0, 1 ou 2)
69
70 //! Liste des faces dans la direction \a dir
72
73 //! Liste des faces dans la direction \a dir (0, 1 ou 2)
75
76 //! Liste des noeuds dans la direction \a dir
78
79 //! Liste des noeuds dans la direction \a dir (0, 1 ou 2)
81
82 /*!
83 * \brief Calcule les infos pour les accès par direction.
84 *
85 * Actuellement, les restrictions suivantes existent:
86 * - calcule uniquement les infos sur les entités mailles.
87 * - suppose que la maille 0 est dans un coin (ne fonctionne que
88 * pour le meshgenerator).
89 * - les informations de direction sont invalidées si le maillage évolue.
90 */
91 virtual void computeDirections() = 0;
92
93 /*!
94 * \brief Recalcule les informations de cartésiennes après une reprise.
95 *
96 * Cette méthode doit être appelée à la place de computeDirections()
97 * lors d'une reprise.
98 */
99 virtual void recreateFromDump() = 0;
100
101 //! Informations sur la connectivité
103
104 /*!
105 * \brief Nombre de patchs du maillage.
106 *
107 * Il y a toujours au moins un patch qui représente la maillage cartésien
108 */
109 virtual Int32 nbPatch() const = 0;
110
111 /*!
112 * \brief Retourne le \a index-ième patch du maillage.
113 *
114 * Si le maillage est cartésien, il n'y a qu'un seul patch.
115 *
116 * L'instance retournée reste valide tant que cette instance n'est pas détruite.
117 */
118 virtual ICartesianMeshPatch* patch(Int32 index) const = 0;
119
120 /*!
121 * \brief Retourne le \a index-ième patch du maillage.
122 *
123 * Si le maillage est cartésien, il n'y a qu'un seul patch.
124 *
125 * L'instance retournée reste valide tant que cette instance n'est pas détruite.
126 */
127 virtual CartesianPatch amrPatch(Int32 index) const = 0;
128
129 /*!
130 * \brief Vue sur la liste des patchs.
131 */
133
134 /*!
135 * \brief Raffine en 2D un bloc du maillage cartésien.
136 *
137 * Cette méthode ne peut être appelée que si le maillage est un maillage
138 * AMR (IMesh::isAmrActivated()==true).
139 *
140 * Les mailles dont les positions des centres sont comprises entre
141 * \a position et \a (position+length) sont raffinées et les informations
142 * de connectivité correspondantes sont mises à jour.
143 *
144 * Cette opération est collective.
145 */
146 virtual void refinePatch2D(Real2 position, Real2 length) = 0;
147
148 /*!
149 * \brief Raffine en 3D un bloc du maillage cartésien.
150 *
151 * Cette méthode ne peut être appelée que si le maillage est un maillage
152 * AMR (IMesh::isAmrActivated()==true).
153 *
154 * Les mailles dont les positions des centres sont comprises entre
155 * \a position et \a (position+length) sont raffinées et les informations
156 * de connectivité correspondantes sont mises à jour.
157 *
158 * Cette opération est collective.
159 */
160 virtual void refinePatch3D(Real3 position, Real3 length) = 0;
161
162 /*!
163 * \brief Raffine un bloc du maillage cartésien.
164 *
165 * Cette méthode ne peut être appelée que si le maillage est un maillage
166 * AMR (IMesh::isAmrActivated()==true).
167 *
168 * Les mailles dont les positions des centres sont comprises entre
169 * \a position et \a (position+length) sont raffinées et les informations
170 * de connectivité correspondantes sont mises à jour.
171 *
172 * Cette opération est collective.
173 */
174 virtual void refinePatch(const AMRZonePosition& position) = 0;
175
176 /*!
177 * \brief Dé-raffine en 2D un bloc du maillage cartésien.
178 *
179 * Cette méthode ne peut être appelée que si le maillage est un maillage
180 * AMR (IMesh::isAmrActivated()==true).
181 *
182 * Les mailles dont les positions des centres sont comprises entre
183 * \a position et \a (position+length) sont dé-raffinées et les informations
184 * de connectivité correspondantes sont mises à jour.
185 *
186 * Toutes les mailles dans la zone de dé-raffinement doivent être du même
187 * niveau.
188 *
189 * Les patchs ne contenant plus de mailles après l'appel à cette méthode
190 * seront supprimés.
191 *
192 * Cette opération est collective.
193 */
194 virtual void coarseZone2D(Real2 position, Real2 length) = 0;
195
196 /*!
197 * \brief Dé-raffine en 3D un bloc du maillage cartésien.
198 *
199 * Cette méthode ne peut être appelée que si le maillage est un maillage
200 * AMR (IMesh::isAmrActivated()==true).
201 *
202 * Les mailles dont les positions des centres sont comprises entre
203 * \a position et \a (position+length) sont dé-raffinées et les informations
204 * de connectivité correspondantes sont mises à jour.
205 *
206 * Toutes les mailles dans la zone de dé-raffinement doivent être du même
207 * niveau.
208 *
209 * Les patchs ne contenant plus de mailles après l'appel à cette méthode
210 * seront supprimés.
211 *
212 * Cette opération est collective.
213 */
214 virtual void coarseZone3D(Real3 position, Real3 length) = 0;
215
216 /*!
217 * \brief Dé-raffine un bloc du maillage cartésien.
218 *
219 * Cette méthode ne peut être appelée que si le maillage est un maillage
220 * AMR (IMesh::isAmrActivated()==true).
221 *
222 * Les mailles dont les positions des centres sont comprises entre
223 * \a position et \a (position+length) sont dé-raffinées et les informations
224 * de connectivité correspondantes sont mises à jour.
225 *
226 * Toutes les mailles dans la zone de dé-raffinement doivent être du même
227 * niveau.
228 *
229 * Les patchs ne contenant plus de mailles après l'appel à cette méthode
230 * seront supprimés.
231 *
232 * Cette opération est collective.
233 */
234 virtual void coarseZone(const AMRZonePosition& position) = 0;
235
236 /*!
237 * \brief Méthode permettant de supprimer une ou plusieurs couches
238 * de mailles fantômes sur un niveau de raffinement défini.
239 *
240 * Le nombre de couches de mailles fantômes souhaité peut être augmenté
241 * par la méthode. Il est nécessaire de récupérer la valeur retournée
242 * pour avoir le nombre de couches de mailles fantômes final.
243 *
244 * \param level Le niveau de raffinement concerné par la suppression
245 * des mailles fantômes.
246 *
247 * \param target_nb_ghost_layers Le nombre de couches souhaité après
248 * appel à cette méthode. ATTENTION : Il peut être ajusté par la méthode.
249 *
250 * \return Le nombre de couches de mailles fantômes final.
251 */
252 virtual Integer reduceNbGhostLayers(Integer level, Integer target_nb_ghost_layers) = 0;
253
254 /*!
255 * \brief Renumérote les uniqueId() des entités.
256 *
257 * Suivant les valeurs de \a v, on renumérote les uniqueId() des faces et/ou
258 * des entités des patches pour avoir la même numérotation
259 * quel que soit le découpage.
260 */
262
263 //! Effectue des vérifications sur la validité de l'instance.
264 virtual void checkValid() const = 0;
265
266 /*!
267 * \brief Créé une instance pour gérer le déraffinement du maillage.
268 * \deprecated Utiliser Arcane::CartesianMeshUtils::createCartesianMeshCoarsening2() à la place.
269 */
270 ARCANE_DEPRECATED_REASON("Y2024: Use Arcane::CartesianMeshUtils::createCartesianMeshCoarsening2() instead")
272
273 public:
274
275 //! API interne à Arcane
276 virtual ICartesianMeshInternal* _internalApi() = 0;
277};
278
279/*---------------------------------------------------------------------------*/
280/*---------------------------------------------------------------------------*/
281
282extern "C++" ARCANE_CARTESIANMESH_EXPORT ICartesianMesh*
283arcaneCreateCartesianMesh(IMesh* mesh);
284
285/*---------------------------------------------------------------------------*/
286/*---------------------------------------------------------------------------*/
287
288} // End namespace Arcane
289
290/*---------------------------------------------------------------------------*/
291/*---------------------------------------------------------------------------*/
292
293#endif
294
Déclarations des types généraux de Arcane.
Classe permettant de définir une zone d'un maillage.
Informations de connectivité d'un maillage cartésien.
Déraffine un maillage cartésien par 2.
Patch AMR d'un maillage cartésien.
Infos sur les mailles d'une direction spécifique X,Y ou Z d'un maillage structuré.
Infos sur les face d'une direction spécifique X,Y ou Z d'un maillage structuré.
Interface d'un patch AMR d'un maillage cartésien.
Interface d'un maillage cartésien.
static ICartesianMesh * getReference(const MeshHandleOrMesh &mesh, bool create=true)
Récupère ou créé la référence associée à mesh.
virtual FaceDirectionMng faceDirection(eMeshDirection dir)=0
Liste des faces dans la direction dir.
virtual CellDirectionMng cellDirection(eMeshDirection dir)=0
Liste des mailles dans la direction dir.
virtual CartesianConnectivity connectivity()=0
Informations sur la connectivité
virtual ITraceMng * traceMng() const =0
Gestionnaire de trace associé.
virtual void recreateFromDump()=0
Recalcule les informations de cartésiennes après une reprise.
virtual FaceDirectionMng faceDirection(Integer idir)=0
Liste des faces dans la direction dir (0, 1 ou 2)
virtual void renumberItemsUniqueId(const CartesianMeshRenumberingInfo &v)=0
Renumérote les uniqueId() des entités.
virtual IMesh * mesh() const =0
Maillage associé à ce maillage cartésien.
virtual void refinePatch(const AMRZonePosition &position)=0
Raffine un bloc du maillage cartésien.
virtual ICartesianMeshPatch * patch(Int32 index) const =0
Retourne le index-ième patch du maillage.
virtual CellDirectionMng cellDirection(Integer idir)=0
Liste des mailles dans la direction dir (0, 1 ou 2)
virtual void refinePatch2D(Real2 position, Real2 length)=0
Raffine en 2D un bloc du maillage cartésien.
virtual void refinePatch3D(Real3 position, Real3 length)=0
Raffine en 3D un bloc du maillage cartésien.
virtual ICartesianMeshInternal * _internalApi()=0
API interne à Arcane.
virtual CartesianMeshPatchListView patches() const =0
Vue sur la liste des patchs.
virtual CartesianPatch amrPatch(Int32 index) const =0
Retourne le index-ième patch du maillage.
virtual NodeDirectionMng nodeDirection(Integer idir)=0
Liste des noeuds dans la direction dir (0, 1 ou 2)
virtual void coarseZone3D(Real3 position, Real3 length)=0
Dé-raffine en 3D un bloc du maillage cartésien.
virtual void coarseZone2D(Real2 position, Real2 length)=0
Dé-raffine en 2D un bloc du maillage cartésien.
virtual void coarseZone(const AMRZonePosition &position)=0
Dé-raffine un bloc du maillage cartésien.
virtual Ref< CartesianMeshCoarsening > createCartesianMeshCoarsening()=0
Créé une instance pour gérer le déraffinement du maillage.
virtual NodeDirectionMng nodeDirection(eMeshDirection dir)=0
Liste des noeuds dans la direction dir.
virtual void computeDirections()=0
Calcule les infos pour les accès par direction.
virtual Int32 nbPatch() const =0
Nombre de patchs du maillage.
virtual void checkValid() const =0
Effectue des vérifications sur la validité de l'instance.
virtual Integer reduceNbGhostLayers(Integer level, Integer target_nb_ghost_layers)=0
Méthode permettant de supprimer une ou plusieurs couches de mailles fantômes sur un niveau de raffine...
Interface du gestionnaire de traces.
Classe de compatibilité pour contenir un MeshHandle ou un IMesh*.
Definition MeshHandle.h:194
Infos sur les noeuds d'une direction spécifique X,Y ou Z d'un maillage structuré.
Classe gérant un vecteur de réel de dimension 2.
Definition Real2.h:121
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
Référence à une instance.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
eMeshDirection
Type de la direction pour un maillage structuré
std::int32_t Int32
Type entier signé sur 32 bits.