Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IMeshExchanger.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/* IMeshExchanger.h (C) 2000-2022 */
9/* */
10/* Gestion d'un échange de maillage entre sous-domaines. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_IMESHEXCHANGER_H
13#define ARCANE_IMESHEXCHANGER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28class IPrimaryMesh;
29class IItemFamily;
30class IItemFamilyExchanger;
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34/*!
35 * \brief Gestion d'un échange de maillage entre sous-domaines.
36 *
37 * Un échange se fait en plusieurs phases, qui doivent être effectuées
38 * dans l'ordre dicté par l'énumération ePhase.
39 *
40 */
41class ARCANE_CORE_EXPORT IMeshExchanger
42{
43 public:
44 //! Indique les différentes phases de l'échange
45 enum class ePhase
46 {
47 Init = 0,
48 ComputeInfos,
49 ProcessExchange,
50 RemoveItems,
51 AllocateItems,
52 UpdateItemGroups,
53 UpdateVariables,
54 Finalize,
55 Ended
56 };
57 public:
58
59 virtual ~IMeshExchanger() {} //<! Libère les ressources
60
61 public:
62
63 /*!
64 * \brief Calcule les infos à envoyer/recevoir des autres sous-domaines.
65 *
66 * Cette opération est collective.
67 *
68 * Le calcul des informations à envoyer se fait en connaissant le nouveau
69 * propriétaire de chaque entité. Cette information est conservée dans
70 * la variable IItemFamily::itemsNewOwner(). Par exemple, une maille
71 * sera migrée si le nouveau propriétaire est différent du propriétaire
72 * actuel (qui est donné par Item::owner()).
73 *
74 * Après appel à cette méthode chaque entité du maillage est modifiée comme suit:
75 * - le champ Item::owner() indique le nouveau propriétaire.
76 * - les entités qui seront supprimées après l'échange sont marquées par le flag
77 * ItemFlags::II_NeedRemove (sauf pour l'instant pour les particules
78 * sans notion de fantôme mais c'est temporaire).
79 *
80 * Retourne \a true s'il n'y a aucun échange à effectuer.
81 *
82 * \pre phase()==ePhase::ComputeInfos
83 * \post phase()==ePhase::ProcessExchange
84 */
85 virtual bool computeExchangeInfos() =0;
86
87 /*!
88 * \brief Procède à l'échange des informations entre les sous-domaines.
89 *
90 * Cette opération est collective.
91 *
92 * Cette opération ne fait aucune modification sur le maillage. Elle se
93 * contente juste d'envoyer et de recevoir les informations nécesaire pour
94 * la mise à jour du maillage.
95 *
96 * \pre phase()==ePhase::ProcessExchange
97 * \post phase()==ePhase::RemoveItems
98 */
99 virtual void processExchange() =0;
100
101 /*!
102 * \brief Supprime de ce sous-domaine les entités qui ne doivent plus
103 * s'y trouver suite à l'échange.
104 *
105 * Toutes les entités marquées avec le flag ItemFlags::II_NeedRemove
106 * sont supprimées.
107 *
108 * \pre phase()==ePhase::RemoveItems
109 * \post phase()==ePhase::AllocateItems
110 */
111 virtual void removeNeededItems() =0;
112
113 /*!
114 * \brief Alloue les entités réceptionnées depuis les autre sous-domaines.
115 *
116 * Cette opération est collective.
117 *
118 * \pre phase()==ePhase::AllocateItems
119 * \post phase()==ePhase::UpdateItemGroups
120 */
121 virtual void allocateReceivedItems() =0;
122
123 /*!
124 * \brief Mise à jour des groupes d'entités
125 *
126 * Cette opération est collective.
127 *
128 * \pre phase()==ePhase::UpdateItemGroups
129 * \post phase()==ePhase::UpdateVariables
130 */
131 virtual void updateItemGroups() =0;
132
133 /*!
134 * \brief Mise à jour des variables
135 *
136 * Cette opération est collective.
137 *
138 * \pre phase()==ePhase::UpdateVariables
139 * \post phase()==ePhase::Finalize
140 */
141 virtual void updateVariables() =0;
142
143 /*!
144 * \brief Finalise les échanges.
145 *
146 * Cette opération est collective.
147 *
148 * Cette méthode effectue les dernières opérations nécessaires lors
149 * de l'échange.
150 *
151 * \pre phase()==ePhase::Finalize
152 * \post phase()==ePhase::Ended
153 */
154 virtual void finalizeExchange() =0;
155
156 //! Maillage associé à cet échangeur.
157 virtual IPrimaryMesh* mesh() const =0;
158
159 //! Échangeur associé à la famille \a family. Lance une exception si non trouvé
161
162 //! Phase de l'échange dans laquelle on se trouve.
163 virtual ePhase phase() const =0;
164};
165
166/*---------------------------------------------------------------------------*/
167/*---------------------------------------------------------------------------*/
168
169} // End namespace Arcane
170
171/*---------------------------------------------------------------------------*/
172/*---------------------------------------------------------------------------*/
173
174#endif
Fichier de configuration d'Arcane.
Interface d'une famille d'entités.
Gestion d'un échange de maillage entre sous-domaines.
virtual void removeNeededItems()=0
Supprime de ce sous-domaine les entités qui ne doivent plus s'y trouver suite à l'échange.
virtual void allocateReceivedItems()=0
Alloue les entités réceptionnées depuis les autre sous-domaines.
virtual ePhase phase() const =0
Phase de l'échange dans laquelle on se trouve.
virtual void processExchange()=0
Procède à l'échange des informations entre les sous-domaines.
virtual void finalizeExchange()=0
Finalise les échanges.
virtual void updateVariables()=0
Mise à jour des variables.
virtual bool computeExchangeInfos()=0
Calcule les infos à envoyer/recevoir des autres sous-domaines.
virtual IPrimaryMesh * mesh() const =0
Maillage associé à cet échangeur.
virtual IItemFamilyExchanger * findExchanger(IItemFamily *family)=0
Échangeur associé à la famille family. Lance une exception si non trouvé
virtual void updateItemGroups()=0
Mise à jour des groupes d'entités.
ePhase
Indique les différentes phases de l'échange.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-