Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IVariableSynchronizer.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/* IVariableSynchronizer.h (C) 2000-2024 */
9/* */
10/* Interface d'un service de synchronisation des variables. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13#ifndef ARCANE_CORE_IVARIABLESYNCHRONIZER_H
14#define ARCANE_CORE_IVARIABLESYNCHRONIZER_H
15/*---------------------------------------------------------------------------*/
16/*---------------------------------------------------------------------------*/
17
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28/*!
29 * \brief Interface d'un service de synchronisation de variable.
30 *
31 * Cette classe est gérée par Arcane et il n'est en générale par nécessaire
32 * de l'utiliser directement. Si on souhaite syncrhoniser une variable,
33 * il suffit d'appeler la méthode VariableRef::synchronize().
34 *
35 * Une instance de cette classe est créée via
36 * IParallelMng::createVariableSynchronizer(). Une instance est associée
37 * à un groupe d'entité. Il faut appeller la fonction compute()
38 * pour calculer les infos de synchronisation. Si les entités sont
39 * compactées, il faut appeler changeLocalIds().
40 */
41class ARCANE_CORE_EXPORT IVariableSynchronizer
42{
43 public:
44
45 virtual ~IVariableSynchronizer() {}
46
47 public:
48
49 //! Gestionnaire parallèle associé
50 virtual IParallelMng* parallelMng() = 0;
51
52 /*!
53 * \brief Groupe d'entité servant à la synchronisation.
54 *
55 * L'implémentation actuelle supporte uniquement le groupe
56 * de toutes les entités d'une famille.
57 */
58 virtual const ItemGroup& itemGroup() = 0;
59
60 /*!
61 * \brief Recalcule les infos de synchronisation.
62 *
63 * Cette opération est collective.
64 *
65 * Cette fonction doit être rappelée si les entités de itemGroup() changent
66 * de propriétaire ou si le groupe lui-même évolue.
67 * TODO: appeler cette fonction automatiquement si besoin.
68 */
69 virtual void compute() = 0;
70
71 //! Appelé lorsque les numéros locaux des entités sont modifiés.
72 virtual void changeLocalIds(Int32ConstArrayView old_to_new_ids) = 0;
73
74 //! Synchronise la variable \a var en mode bloquant
75 virtual void synchronize(IVariable* var) = 0;
76
77 // TODO: à rendre virtuelle pure (décembre 2024)
78 /*!
79 * \brief Synchronise la variable \a var sur les entités \a local_ids en mode bloquant
80 *
81 * Seules les entités listées dans \a local_ids seront synchronisées. Attention :
82 * une entité présente dans cette liste sur un sous-domaine doit être présente
83 * dans cette liste pour tout autre sous-domaine qui possède cette entité.
84 */
85 virtual void synchronize(IVariable* var, Int32ConstArrayView local_ids);
86
87 /*!
88 * \brief Synchronise les variables \a vars en mode bloquant.
89 *
90 * Toutes les variables doivent être issues de la même famille
91 * et de ce groupe d'entité.
92 */
93 virtual void synchronize(VariableCollection vars) = 0;
94
95 // TODO: à rendre virtuelle pure (décembre 2024)
96 /*!
97 * \brief Synchronise les variables \a vars en mode bloquant.
98 *
99 * Toutes les variables doivent être issues de la même famille
100 * et de ce groupe d'entité.
101 *
102 * Seules les entités listées dans \a local_ids seront synchronisées. Attention :
103 * une entité présente dans cette liste sur un sous-domaine doit être présente
104 * dans cette liste pour tout autre sous-domaine qui possède cette entité.
105 */
106 virtual void synchronize(VariableCollection vars, Int32ConstArrayView local_ids);
107
108 /*!
109 * \brief Rangs des sous-domaines avec lesquels on communique.
110 */
112
113 /*!
114 * \brief Liste des ids locaux des entités partagées avec un sous-domaine.
115 *
116 * Le rang du sous-domaine est celui de communicatingRanks()[index].
117 */
118 virtual Int32ConstArrayView sharedItems(Int32 index) = 0;
119
120 /*!
121 * \brief Liste des ids locaux des entités fantômes avec un sous-domaine.
122 *
123 * Le rang du sous-domaine est celui de communicatingRanks()[index].
124 */
125 virtual Int32ConstArrayView ghostItems(Int32 index) = 0;
126
127 /*!
128 * \brief Synchronise la donnée \a data.
129 *
130 * La donnée \a data doit être associée à une variable pour laquelle
131 * il est valide d'appeler \a synchronize(). Cette méthode est interne
132 * à Arcane.
133 */
134 virtual void synchronizeData(IData* data) = 0;
135
136 /*!
137 * \brief Evènement envoyé en début et fin de synchronisation.
138 *
139 * Cet évènement est envoyé lors des appels aux méthodes
140 * de synchronisation synchronize(IVariable* var)
141 * et synchronize(VariableCollection vars). Si on souhaite être notifié
142 * des synchronisations pour toutes les instances de IVariableSynchronizer,
143 * il faut utiliser IVariableMng::synchronizerMng().
144 */
146};
147
148/*---------------------------------------------------------------------------*/
149/*---------------------------------------------------------------------------*/
150
151} // namespace Arcane
152
153/*---------------------------------------------------------------------------*/
154/*---------------------------------------------------------------------------*/
155
156#endif
Déclarations des types généraux de Arcane.
Classe de base d'un handler d'évènement.
Definition Event.h:157
Interface d'une donnée.
Definition IData.h:33
Interface du gestionnaire de parallélisme pour un sous-domaine.
Interface d'un service de synchronisation de variable.
virtual Int32ConstArrayView ghostItems(Int32 index)=0
Liste des ids locaux des entités fantômes avec un sous-domaine.
virtual Int32ConstArrayView communicatingRanks()=0
Rangs des sous-domaines avec lesquels on communique.
virtual void changeLocalIds(Int32ConstArrayView old_to_new_ids)=0
Appelé lorsque les numéros locaux des entités sont modifiés.
virtual const ItemGroup & itemGroup()=0
Groupe d'entité servant à la synchronisation.
virtual void compute()=0
Recalcule les infos de synchronisation.
virtual IParallelMng * parallelMng()=0
Gestionnaire parallèle associé
virtual Int32ConstArrayView sharedItems(Int32 index)=0
Liste des ids locaux des entités partagées avec un sous-domaine.
virtual EventObservable< const VariableSynchronizerEventArgs & > & onSynchronized()=0
Evènement envoyé en début et fin de synchronisation.
virtual void synchronizeData(IData *data)=0
Synchronise la donnée data.
virtual void synchronize(VariableCollection vars)=0
Synchronise les variables vars en mode bloquant.
virtual void synchronize(IVariable *var)=0
Synchronise la variable var en mode bloquant.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Collection de variables.
Vue constante d'un tableau de type T.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-