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