Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
CartesianMeshCoarsening2.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/* CartesianMeshCoarsening2.h (C) 2000-2024 */
9/* */
10/* Déraffinement d'un maillage cartésien. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CARTESIANMESH_CARTESIANMESHCOARSENING2_H
13#define ARCANE_CARTESIANMESH_CARTESIANMESHCOARSENING2_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 * \warning Cette méthode est expérimentale.
39 *
40 * Cette classe permet de déraffiner un maillage cartésien. Les instances
41 * de cette classe sont créées via ICartesianMesh::createCartesianMeshCoarsening().
42 *
43 * Le maillage initial doit être cartésien et ne doit pas avoir de patchs.
44 *
45 * Le maillage doit être un maillage AMR (IMesh::isAmrActivated()==true).
46 *
47 * Le nombre de mailles dans chaque dimension doit être un multiple de 2
48 * ainsi que le nombre de mailles locales à chaque sous-domaine.
49 *
50 * Le dé-raffinement se lors de l'appel à createCoarseCell(). Après cet
51 * appel on a la structure suivante pour le maillage :
52 * - des mailles grossières sont créées pour chaque quadruplet de mailles
53 * existantes qui deviennent donc des mailles raffinées.
54 * - chaque maille grossière est de niveau 0 (Cell::level()) et chaque maille
55 * initiale est de niveau 1.
56 * - on peut accéder à ces mailles filles via les méthodes Cell::nbHChildren() et
57 * Cell::hChild().
58 * - il y aura deux patchs dans le maillage. Le premier contiendra les mailles
59 * de niveau zéro et le second contiendra les mailles de niveau 1 qui sont les
60 * anciennes mailles avant dé-raffinement.
61 *
62 * Il est ensuite possible de ne conserver que les mailles grossières et de
63 * supprimer les mailles raffinées par la'appel à la méthode.
64 *
65 * - removeRefinedCells() qui supprime les mailles autres que les mailles
66 * grossière. Après cet appel, il n'y a plus qu'un maillage cartésien
67 * avec 2 fois moins de mailles dans chaque direction. Il sera ensuite
68 * possible d'appeler les méthodes de raffinement pour créer des niveaux
69 * supplémentaires.
70 * Voici un exemple de code utilisateur:
71 *
72 * \code
73 * ICartesianMesh* cartesian_mesh = ...;
74 * Ref<CartesianMeshCoarsening> coarser = CartesianMeshUtils::createCartesianMeshCoarsening(cartesian_mesh);
75 * coarser->createCoarseCells();
76 * \endcode
77 */
78class ARCANE_CARTESIANMESH_EXPORT CartesianMeshCoarsening2
79: public TraceAccessor
80{
81 friend CartesianMeshImpl;
82
83 private:
84
86
87 public:
88
89 /*!
90 * \brief Déraffine le maillage initial par 2.
91 *
92 * Cette méthode est collective.
93 */
94 void createCoarseCells();
95
96 void removeRefinedCells();
97
98 private:
99
100 ICartesianMesh* m_cartesian_mesh = nullptr;
101 Int32 m_verbosity_level = false;
102 //! uniqueId() des mailles grossières
103 UniqueArray<Int64> m_coarse_cells_uid;
104 bool m_is_create_coarse_called = false;
105 bool m_is_remove_refined_called = false;
106 Int64 m_first_own_cell_unique_id_offset = NULL_ITEM_UNIQUE_ID;
107
108 private:
109
110 Int64 _getMaxUniqueId(const ItemGroup& group);
111 void _recomputeMeshGenerationInfo();
112 void _writeMeshSVG(const String& name);
113 void _doDoubleGhostLayers();
114 void _createCoarseCells2D();
115 void _createCoarseCells3D();
116};
117
118/*---------------------------------------------------------------------------*/
119/*---------------------------------------------------------------------------*/
120
121} // End namespace Arcane
122
123/*---------------------------------------------------------------------------*/
124/*---------------------------------------------------------------------------*/
125
126#endif
127
Déclarations de types sur les entités.
Déraffine un maillage cartésien par 2.
Infos spécifiques à un maillage cartésien.
Interface d'un maillage cartésien.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Chaîne de caractères unicode.
Vecteur 1D de données avec sémantique par valeur (style STL).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-