Arcane  v3.16.6.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IMeshCompacter.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/* IMeshCompacter.h (C) 2000-2025 */
9/* */
10/* Gestion d'un compactage de familles du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_IMESHCOMPACTER_H
13#define ARCANE_CORE_IMESHCOMPACTER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27/*!
28 * \brief Gestion d'un compactage de familles du maillage.
29 *
30 * Les instances de cette classe sont créée via le gestionnaire
31 * IMeshCompactMng. Un seul compactage peut avoir lieu à la fois.
32 *
33 * Par compactage, on entend toute modification de la numérotation locale
34 * des entités d'une famille. Il peut donc rester des trous dans la numérotation
35 * après appel à un compactage (même si actuellement ce n'est pas le cas
36 * des implémentations disponibles dans %Arcane).
37 *
38 * Le compactage concerne soit toutes les familles d'un maillage, soit
39 * une seule famille. La méthode families() permet de retourner la
40 * liste des familles compactées.
41 *
42 * Même si une famille n'est pas compactée directement, elle participe à
43 * certaines opérations du compactage car elle peut faire référence à des
44 * entités compactées.
45 *
46 * Les différentes opérations d'un compactage sont les suivantes:
47 * 1. beginCompact():calcul de la nouvelle numération locale des entités
48 * des familles compactées. Après appel à cette méthode, il est possible
49 * d'appeler findCompactInfos() pour obtenir pour une famille les
50 * correspondances entre nouveaux et anciens numéros locaux.
51 * 2. compactVariablesAndGroups(): mise à jour des groupes et des variables
52 * des familles compactées en fonction de cette nouvelle numérotation.
53 * 3. updateInternalReferences(): mise à jour des références aux entités.
54 * Cela concerne toutes les familles et pas seulement celles compactées.
55 * 4. endCompact(): finalise le compactage des familles. Après appel à cette
56 * méthode il n'est plus possible de récupérer les informations de correspondance
57 * via findCompactInfos().
58 * 5. finalizeCompact(): notification à toutes les familles que le compactage
59 * est terminé. Cela permet par exemple de faire un nettoyage ou de mettre
60 * à jour certaines informations.
61 *
62 * La méthode doAllActions() permet de faire toutes ces phases en une seule fois.
63 * C'est la méthode recommandé pour effectuer un compactage. Le code suivant
64 * montre comment effectuer un compactage sur toutes les familles:
65 *
66 * \code
67 *
68 * IMeshCompactMng* compact_mng = mesh()->_compactMng();
69 * IMeshCompacter* compacter = compact_mng->beginCompact();
70 *
71 * try{
72 * compacter->doAllActions();
73 * }
74 * catch(...){
75 * compact_mng->endCompact();
76 * throw;
77 * }
78 * compact_mng->endCompact();
79 *
80 * \endcode
81 */
82class ARCANE_CORE_EXPORT IMeshCompacter
83{
84 public:
85
86 //! Indique les différentes phases du compactage
87 enum class ePhase
88 {
89 Init = 0,
90 BeginCompact,
91 CompactVariableAndGroups,
92 UpdateInternalReferences,
93 EndCompact,
94 Finalize,
95 Ended
96 };
97
98 public:
99
100 virtual ~IMeshCompacter() = default; //!< Libère les ressources
101
102 public:
103
104 //! Exécute successivement toutes les actions de compactage.
105 virtual void doAllActions() = 0;
106
107 virtual void beginCompact() = 0;
108 virtual void compactVariablesAndGroups() = 0;
109 virtual void updateInternalReferences() = 0;
110 virtual void endCompact() = 0;
111 virtual void finalizeCompact() = 0;
112
113 //! Maillage associé à ce compacter.
114 virtual IMesh* mesh() const = 0;
115
116 /*!
117 * \brief Informations de compactage pour la famille \a family.
118 *
119 * Le pointeur retourné peut être nul si la famille spécifiée ne fait
120 * pas partie des familles compactées.
121 */
122 virtual const ItemFamilyCompactInfos* findCompactInfos(IItemFamily* family) const = 0;
123
124 //! Phase de l'échange dans laquelle on se trouve.
125 virtual ePhase phase() const = 0;
126
127 /*!
128 * \brief Indique s'il faut trier les entités lors du compactage.
129 * \pre phase()==ePhase::Init.
130 */
131 virtual void setSorted(bool v) = 0;
132
133 //! Indique si souhaite trier les entités en plus de les compacter.
134 virtual bool isSorted() const = 0;
135
136 //! Familles dont les entités sont compactées.
137 virtual ItemFamilyCollection families() const = 0;
138
139 //! \internal
140 virtual void _setCompactVariablesAndGroups(bool v) = 0;
141};
142
143/*---------------------------------------------------------------------------*/
144/*---------------------------------------------------------------------------*/
145
146} // namespace Arcane
147
148/*---------------------------------------------------------------------------*/
149/*---------------------------------------------------------------------------*/
150
151#endif
Déclarations des types généraux de Arcane.
Interface d'une famille d'entités.
Definition IItemFamily.h:84
Gestion d'un compactage de familles du maillage.
virtual IMesh * mesh() const =0
Maillage associé à ce compacter.
virtual ItemFamilyCollection families() const =0
Familles dont les entités sont compactées.
virtual void setSorted(bool v)=0
Indique s'il faut trier les entités lors du compactage.
virtual ePhase phase() const =0
Phase de l'échange dans laquelle on se trouve.
virtual ~IMeshCompacter()=default
Libère les ressources.
virtual void doAllActions()=0
Exécute successivement toutes les actions de compactage.
virtual bool isSorted() const =0
Indique si souhaite trier les entités en plus de les compacter.
virtual const ItemFamilyCompactInfos * findCompactInfos(IItemFamily *family) const =0
Informations de compactage pour la famille family.
ePhase
Indique les différentes phases du compactage.
Informations pour gérer le compactage des entités d'une famille.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Collection< IItemFamily * > ItemFamilyCollection
Collection de familles d'entités.