Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IItemFamilyExchanger.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/* IItemFamilyExchanger.h (C) 2000-2024 */
9/* */
10/* Echange entre sous-domaine les entités d'une famille. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_MESH_IITEMFAMILYEXCHANGER_H
13#define ARCANE_MESH_IITEMFAMILYEXCHANGER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/List.h"
18#include "arcane/utils/TraceAccessor.h"
19
20#include "arcane/VariableCollection.h"
21
22#include "arcane/mesh/MeshGlobal.h"
23
24#include <set>
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29namespace Arcane
30{
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34
35class ParallelExchangerOptions;
36
37/*---------------------------------------------------------------------------*/
38/*---------------------------------------------------------------------------*/
39/*!
40 * \internal
41 * \brief Échange des entités et leurs caractéristiques pour une famille donnée
42
43 Cette classe gère l'échange d'entités entre les sous-domaines. Elle est
44 utilisée par exemple lors d'un repartitionnement. En général cette classe
45 n'est pas utilisée directement (sauf pour spécifier les entités à échanger)
46 mais via l'interface IMeshExchanger.
47
48 L'utilisateur de cette classe doit commencer par spécifier la liste des
49 entités à envoyer à chaque sous-domaine via la méthode setExchangeItems().
50
51 L'échange d'entités se fait en plusieurs étapes comme indiquée dans
52 IMeshExchanger.
53
54 La sérialisation proprement dite des entités se fait en trois phases
55 successives: les entités, les groupes et les variables. La désérialisation
56 se fait dans le même ordre. En effet, il est nécessaire pour désérialiser
57 les variables de connaitre les groupes et pour désérialiser les groupes
58 de connaître les entités.
59
60 Lorsque des mailles ou des particules sont envoyées, il faut
61 appeler la méthode readAndAllocItems() pour les créér, avant
62 d'appeler readGroups() puis readVariables().
63*/
64class ARCANE_CORE_EXPORT IItemFamilyExchanger
65{
66 public:
67
68 virtual ~IItemFamilyExchanger(){}
69
70 public:
71
72 /*!
73 * \internal
74 * \brief Détermine la liste des entités à échanger.
75
76 * \warning Cette méthode ne doit être utilisée que pour les familles
77 * de particules.
78
79 Cette opération se sert de la variable itemsOwner() et du champ
80 owner() de chaque entité pour déterminer à qui chaque entité doit
81 être envoyée. Par conséquent, il faut appeler cette opération
82 avant que DynamicMesh::_setOwnerFromVariable() ne soit appelé.
83 *
84 * \todo A supprimer
85 */
86 virtual void computeExchangeItems() =0;
87
88 //! Positionne la liste des entités à échanger.
89 virtual void setExchangeItems(ConstArrayView< std::set<Int32> > items_to_send) =0;
90
91 /*!
92 * \brief Détermine les informations nécessaires pour les échanges.
93 * \retval true s'il n'y a rien à échanger
94 * \retval false sinon.
95 */
96 virtual bool computeExchangeInfos() =0;
97
98 //! Prépare les structures d'envoie
99 virtual void prepareToSend() =0;
100 virtual void releaseBuffer() =0;
101
102 /*!
103 * \brief Après réception des messages, lit et créé les entités transférées.
104 *
105 * Cette méthode ne fait rien pour les entités autre
106 * que pour les mailles et les particules, pour la gestion legacy.
107 * Avec le graphe des familles ItemFamilyNetwork, cette méthode crée les
108 * items et leur dépendances (ie connectivités descendantes).
109 * Cela implique de séparer le traitement des sous-items (sous-maillages)
110 * et des relations (connectivités ascendantes ou dof), qui ne peuvent
111 * être traités tant que tous les items ne sont pas créés.
112 *
113 * \warning Avant d'appeler cette méthode, il faut être certain
114 * que les entités n'appartenant plus à ce sous-domaine ont été
115 * détruites
116 */
117 virtual void readAndAllocItems() =0;
118 virtual void readAndAllocSubMeshItems() =0;
119 virtual void readAndAllocItemRelations() =0;
120
121 //! Après réception des messages, lit les groupes
122 virtual void readGroups() =0;
123
124 //! Après réception des messages, lit les valeurs des variables
125 virtual void readVariables() =0;
126
127 /*!
128 * \internal
129 * \brief Supprime les entités envoyées.
130 *
131 * Cette opération ne doit se faire que pour les entités qui
132 * ne dépendent pas d'une autre entité. Par exemple, il est impossible
133 * de supprimer directement les noeuds, car certaines mailles qui
134 * ne sont pas envoyées peuvent reposer dessus.
135 *
136 * \warning Cette opération n'est valide que pour les particules sans
137 * notion de particule fantôme.
138 * \todo A supprimer
139 */
140 virtual void removeSentItems() =0;
141
142 //! Envoie les messages d'échange
143 virtual void processExchange() =0;
144
145 /*!
146 * \brief Termine l'échange.
147 *
148 * Effectue les dernières mises à jour suite à un échange. Cette
149 * méthode est appelée lorsque toutes les entités et les variables
150 * ont été échangées.
151 */
152 virtual void finalizeExchange() =0;
153
154 //! Famille associée
155 virtual IItemFamily* itemFamily() =0;
156
157 //! Positionne les options utilisées lors de l'échange des entités
159};
160
161/*---------------------------------------------------------------------------*/
162/*---------------------------------------------------------------------------*/
163
164} // End namespace Arcane
165
166/*---------------------------------------------------------------------------*/
167/*---------------------------------------------------------------------------*/
168
169#endif
170
virtual void setParallelExchangerOption(const ParallelExchangerOptions &options)=0
Positionne les options utilisées lors de l'échange des entités.
virtual void processExchange()=0
Envoie les messages d'échange.
virtual void prepareToSend()=0
Prépare les structures d'envoie.
virtual void readVariables()=0
Après réception des messages, lit les valeurs des variables.
virtual void readGroups()=0
Après réception des messages, lit les groupes.
virtual IItemFamily * itemFamily()=0
Famille associée.
virtual void finalizeExchange()=0
Termine l'échange.
virtual bool computeExchangeInfos()=0
Détermine les informations nécessaires pour les échanges.
virtual void setExchangeItems(ConstArrayView< std::set< Int32 > > items_to_send)=0
Positionne la liste des entités à échanger.
virtual void readAndAllocItems()=0
Après réception des messages, lit et créé les entités transférées.
Interface d'une famille d'entités.
Options pour IParallelMng::processExchange().
Vue constante d'un tableau de type T.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-