Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
BasicParticleExchanger.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/* BasicParticleExchanger.h (C) 2000-2020 */
9/* */
10/*---------------------------------------------------------------------------*/
11
12#ifndef ARCANE_BASICPARTICLEEXCHANGER_H
13#define ARCANE_BASICPARTICLEEXCHANGER_H
14
15/*---------------------------------------------------------------------------*/
16/*---------------------------------------------------------------------------*/
17
18#include "arcane/utils/List.h"
19#include "arcane/utils/FatalErrorException.h"
20#include "arcane/utils/IFunctor.h"
21#include "arcane/utils/PlatformUtils.h"
22#include "arcane/utils/ValueConvert.h"
23#include "arcane/utils/ScopedPtr.h"
24
25
26#include "arcane/IParticleExchanger.h"
27#include "arcane/VariableCollection.h"
28
29#include "arcane/ItemGroup.h"
30#include "arcane/ItemPrinter.h"
31#include "arcane/IItemFamily.h"
32#include "arcane/IParticleFamily.h"
33#include "arcane/IParallelMng.h"
34#include "arcane/IVariableMng.h"
35#include "arcane/IVariable.h"
36#include "arcane/IMesh.h"
37#include "arcane/Item.h"
38#include "arcane/Timer.h"
39#include "arcane/SerializeMessage.h"
40#include "arcane/ISerializeMessageList.h"
41#include "arcane/CommonVariables.h"
42#include "arcane/FactoryService.h"
43
44#include "arcane/mesh/MeshGlobal.h"
45#include "arcane/mesh/BasicParticleExchanger_axl.h"
46
47/*---------------------------------------------------------------------------*/
48/*---------------------------------------------------------------------------*/
49
50namespace Arcane
51{
52class Timer;
53class SerializeMessage;
54}
55
56/*---------------------------------------------------------------------------*/
57/*---------------------------------------------------------------------------*/
58
59namespace Arcane::mesh
60{
61
62/*---------------------------------------------------------------------------*/
63/*---------------------------------------------------------------------------*/
64
70{
71 friend class AsyncParticleExchanger;
72
73 public:
74
76 ~BasicParticleExchanger() override;
77
78 public:
79
80 void build() override {}
81 void initialize(IItemFamily* item_family) override;
82
83 public:
84
85 void beginNewExchange(Integer nb_particle) override;
86 IItemFamily* itemFamily() override { return m_item_family; }
90 IFunctor* functor) override;
95 IFunctor* functor) override;
100 IFunctor* functor) override;
101 void addNewParticles(Integer nb_particle) override;
102
103 void setVerboseLevel(Integer level) override { m_verbose_level = level; }
104 Integer verboseLevel() const override { return m_verbose_level; }
105 IAsyncParticleExchanger * asyncParticleExchanger() override { return nullptr; }
106
107 public:
108
109 void reset();
110
111 private:
112
113 IItemFamily* m_item_family = nullptr;
114 IParallelMng* m_parallel_mng = nullptr;
115 UniqueArray<SerializeMessage*> m_accumulate_infos;
116
117 Int32 m_rank = A_NULL_RANK;
118
120 Timer* m_timer = nullptr;
121 Real m_total_time_functor = 0.0;
122 Real m_total_time_waiting = 0.0;
123
126
129
132
133 Ref<ISerializeMessageList> m_message_list;
134
135 Int64 m_nb_total_particle_finish_exchange = 0;
136
137 bool m_exchange_finished = true;
138 Integer m_nb_loop = 0;
139 bool m_print_info = false;
140 Int64 m_last_nb_to_exchange = 0;
141 Integer m_current_nb_reduce = 0;
142 Integer m_last_nb_reduce = 0;
143 Int64 m_nb_particle_send = 0;
144
145 Int32 m_verbose_level = 1;
146 Int32 m_debug_exchange_items_level = 0;
148 Int64 m_serialize_id = 1;
149
155
156 private:
157
158 void _clearMessages();
159 void _serializeMessage(ISerializeMessage* sm,
163 void _deserializeMessage(ISerializeMessage* message,
170 void _addItemsToSend(Int32ConstArrayView local_ids,
174 void _sendPendingMessages();
175
177 void _checkInitialized();
179 void _waitMessages(ItemGroup item_group,Int32Array* new_particle_local_ids,IFunctor* functor);
180};
181
182/*---------------------------------------------------------------------------*/
183/*---------------------------------------------------------------------------*/
184} // End namespace Arcane
185
186#endif
187
Generation de la classe de base du Service.
Tableau d'items de types quelconques.
Interface d'un échangeur de particules asynchrone.
Interface d'une famille d'entités.
Interface du gestionnaire de parallélisme pour un sous-domaine.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Structure contenant les informations pour créer un service.
Gestion d'un timer.
Definition Timer.h:62
Collection de variables.
Echangeur de particules basique (utilise une réduction bloquante).
bool exchangeItems(Integer nb_particle_finish_exchange, Int32ConstArrayView local_ids, Int32ConstArrayView sub_domains_to_send, ItemGroup item_group, IFunctor *functor) override
Échange des particules entre sous-domaines.
VariableList m_variables_to_exchange
Liste des variables à échanger.
bool waitMessages(Integer nb_pending_particles, Int32Array *new_particle_local_ids, IFunctor *functor) override
void setVerboseLevel(Integer level) override
Positionne le niveau de verbosité (0 pour aucune message)
IItemFamily * itemFamily() override
Famille associée.
UniqueArray< ISerializeMessage * > m_pending_messages
Liste des message en attente d'envoie.
void initialize(IItemFamily *item_family) override
Initialize l'échangeur pour la familly item_family.
Int64 m_serialize_id
Numéro du message. Utile pour le débug.
IAsyncParticleExchanger * asyncParticleExchanger() override
Gestion de l'asynchronisme (retourne nullptr si fonctionnalité non disponible)
void build() override
Construction de niveau build du service.
void addNewParticles(Integer nb_particle) override
Ajoute nb_particle dans l'échange actuel.
Integer verboseLevel() const override
Niveau de verbosité
void beginNewExchange(Integer nb_particle) override
Commence un nouvel échange de particules.
void sendItems(Integer nb_particle_finish_exchange, Int32ConstArrayView local_ids, Int32ConstArrayView sub_domains_to_send) override
UniqueArray< ISerializeMessage * > m_waiting_messages
Liste des message envoyés mais en cours de traitement.
Vue constante d'un tableau de type T.
Vecteur 1D de données avec sémantique par valeur (style STL).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-