Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
CartesianMeshCoarsening.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2023 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/* CartesianMeshCoarsening.h (C) 2000-2024 */
9/* */
10/* Déraffinement d'un maillage cartésien. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CARTESIANMESH_CARTESIANMESHCOARSENING_H
13#define ARCANE_CARTESIANMESH_CARTESIANMESHCOARSENING_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/TraceAccessor.h"
18#include "arcane/utils/Array2.h"
19
21#include "arcane/core/ICartesianMeshGenerationInfo.h"
22
23#include "arcane/cartesianmesh/CartesianMeshGlobal.h"
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28namespace Arcane
29{
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33/*!
34 * \ingroup ArcaneCartesianMesh
35 *
36 * \brief Déraffine un maillage cartésien par 2.
37 *
38 * \deprecated Cette classe est obsolète. Il faut utiliser la version 2
39 * de l'implémentation (CartesianMeshCoarsening2).
40 *
41 * Cette classe permet de déraffiner un maillage cartésien. Les instances
42 * de cette classe sont créées via ICartesianMesh::createCartesianMeshCoarsening().
43 *
44 * Le maillage initial doit être cartésien et ne doit pas avoir de patchs.
45 *
46 * Le maillage doit être un maillage AMR (IMesh::isAmrActivated()==true).
47 *
48 * Le nombre de mailles dans chaque dimension doit être un multiple de 2
49 * ainsi que le nombre de mailles locales à chaque sous-domaine.
50 *
51 * Le dé-raffinement se fait en deux phases:
52 *
53 * - createCoarseCells() qui créé les mailles grossières. Après appel à
54 * cette méthode il est possible d'utiliser coarseCells() pour avoir
55 * la liste des mailles grossières et refinedCells() pour avoir pour
56 * chaque maille grossière la liste des mailles raffinées correspondantes.
57 * - removeRefinedCells() qui supprime les mailles autres que les mailles
58 * grossière. Après cet appel, il n'y a plus qu'un maillage cartésien
59 * avec 2 fois moins de mailles dans chaque direction. Il sera ensuite
60 * possible d'appeler les méthodes de raffinement pour créer des niveaux
61 * supplémentaires.
62 *
63 * \code
64 * ICartesianMesh* cartesian_mesh = ...;
65 * Ref<CartesianMeshCoarsening> coarser = m_cartesian_mesh->createCartesianMeshCoarsening();
66 * IMesh* mesh = cartesian_mesh->mesh();
67 * CellInfoListView cells(mesh->cellFamily());
68 * coarser->createCoarseCells();
69 * Int32 index = 0;
70 * for( Int32 cell_lid : coarser->coarseCells()){
71 * Cell cell = cells[cell_lid];
72 * info() << "Test: CoarseCell= " << ItemPrinter(cell);
73 * ConstArrayView<Int32> sub_cells(coarser->refinedCells(index));
74 * ++index;
75 * for( Int32 sub_lid : sub_cells )
76 * info() << "SubCell=" << ItemPrinter(cells[sub_lid]);
77 * }
78 * coarser->removeRefinedCells();
79 * \endcode
80 */
81class ARCANE_CARTESIANMESH_EXPORT CartesianMeshCoarsening
82: public TraceAccessor
83{
84 friend CartesianMeshImpl;
85
86 private:
87
88 ARCANE_DEPRECATED_REASON("Y2024: Use Arcane::CartesianMeshUtils::createCartesianMeshCoarsening2() instead")
90
91 public:
92
93 /*!
94 * \brief Déraffine le maillage initial par 2.
95 *
96 * Cette méthode est collective.
97 */
98 void createCoarseCells();
99
100 /*!
101 * \brief Liste des localIds() des mailles raffinées pour la maille parente \a d'indice \a index.
102 *
103 * Cette méthode n'est valide qu'après appel à createCoarseCells().
104 *
105 * En 2D, il y a 4 mailles raffinées par maille grossière. En 3D il y en a 8.
106 */
108 {
109 return m_refined_cells[index];
110 }
111 /*!
112 * \brief Liste des localIds() des mailles grossières.
113 *
114 * Cette méthode n'est valide qu'après appel à createCoarseCells().
115 */
116 ConstArrayView<Int32> coarseCells() const { return m_coarse_cells; }
117
118 /*!
119 * \brief Supprime les mailles raffinées.
120 *
121 * Il faut avoir appeler createCoarseCells() avant.
122 */
123 void removeRefinedCells();
124
125 private:
126
127 ICartesianMesh* m_cartesian_mesh = nullptr;
128 Int32 m_verbosity_level = false;
129 UniqueArray2<Int32> m_refined_cells;
130 UniqueArray<Int32> m_coarse_cells;
131 bool m_is_create_coarse_called = false;
132 bool m_is_remove_refined_called = false;
133 Int64 m_first_own_cell_unique_id_offset = NULL_ITEM_UNIQUE_ID;
134
135 private:
136
137 Int64 _getMaxUniqueId(const ItemGroup& group);
138 void _recomputeMeshGenerationInfo();
139};
140
141/*---------------------------------------------------------------------------*/
142/*---------------------------------------------------------------------------*/
143
144} // End namespace Arcane
145
146/*---------------------------------------------------------------------------*/
147/*---------------------------------------------------------------------------*/
148
149#endif
150
Déclarations de types sur les entités.
Déraffine un maillage cartésien par 2.
ConstArrayView< Int32 > refinedCells(Int32 index) const
Liste des localIds() des mailles raffinées pour la maille parente d'indice index.
ConstArrayView< Int32 > coarseCells() const
Liste des localIds() des mailles grossières.
Infos spécifiques à un maillage cartésien.
Interface d'un maillage cartésien.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Vue constante d'un tableau de type T.
Vecteur de données 2D avec sémantique par valeur (style STL).
Vecteur 1D de données avec sémantique par valeur (style STL).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-