Arcane  4.2.3.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ArcaneParallelMngSplitterMeshBuilderCustomiser.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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/* MeshPartitionerTesterService.cc (C) 2000-2022 */
9/* */
10/* Testeur de partitionneur de maillage. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/utils/NotImplementedException.h"
15#include "arcane/utils/CheckedConvert.h"
16
17#include "arcane/core/IParallelMng.h"
18#include "arcane/core/IMeshBuilderCustomiser.h"
19#include "arcane/core/MeshBuildInfo.h"
20
21#include "arcane/impl/ArcaneParallelMngSplitterMeshBuilderCustomiser_axl.h"
22
23/*---------------------------------------------------------------------------*/
24/*---------------------------------------------------------------------------*/
25
26namespace Arcane
27{
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
32class ArcaneParallelMngSplitterMeshBuilderCustomiser
34{
35 public:
36
37 explicit ArcaneParallelMngSplitterMeshBuilderCustomiser(const ServiceBuildInfo& sbi)
39 , m_default_parallel_mng(sbi.subDomain()->parallelMng())
40 {
41 }
42
43 void applyCustomisation(MeshBuildInfo& build_info) override
44 {
45 Int32 divider = options()->subsetRatio();
46 if (divider < 0)
47 ARCANE_FATAL("subset-ratio '{0}' is strictly positive",divider);
48 IParallelMng* pm = m_default_parallel_mng;
49 Int32 my_rank = pm->commRank();
50 Int32 nb_rank = pm->commSize();
51 UniqueArray<int> kept_ranks;
52 kept_ranks.reserve(nb_rank);
53 for (Int32 i = 0; i < nb_rank; ++i) {
54 if ((i % divider) == 0)
55 kept_ranks.add(i);
56 }
57 info() << "Splitting IParallelMng my_rank=" << my_rank;
58 info() << "RanksToKeep=" << kept_ranks;
59 Ref<IParallelMng> new_pm = pm->createSubParallelMngRef(kept_ranks);
60 if (new_pm.get())
61 info() << "Rank=" << my_rank << " RankAfter=" << new_pm.get()->commRank();
62 else
63 info() << "Rank=" << my_rank << ": I am not in the new IParallelMng";
64 build_info.addParallelMng(new_pm);
65 }
66
67 private:
68
69 IParallelMng* m_default_parallel_mng = nullptr;
70};
71
72ARCANE_REGISTER_SERVICE_ARCANEPARALLELMNGSPLITTERMESHBUILDERCUSTOMISER(ArcaneParallelMngSplitterMeshBuilderCustomiser,
73 ArcaneParallelMngSplitterMeshBuilderCustomiser);
74
75/*---------------------------------------------------------------------------*/
76/*---------------------------------------------------------------------------*/
77
78} // namespace Arcane
79
80/*---------------------------------------------------------------------------*/
81/*---------------------------------------------------------------------------*/
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
CaseOptionsArcaneParallelMngSplitterMeshBuilderCustomiser * options() const
Options du jeu de données du service.
void applyCustomisation(MeshBuildInfo &build_info) override
Modifie build_info pour personnaliser la création du maillage.
void reserve(Int64 new_capacity)
Réserve le mémoire pour new_capacity éléments.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
Interface du gestionnaire de parallélisme pour un sous-domaine.
virtual Int32 commRank() const =0
Rang de cette instance dans le communicateur.
virtual Int32 commSize() const =0
Nombre d'instance dans le communicateur.
virtual Ref< IParallelMng > createSubParallelMngRef(Int32ConstArrayView kept_ranks)=0
Créé un nouveau gestionnaire de parallélisme pour un sous-ensemble des rangs.
virtual IParallelMng * parallelMng()=0
Retourne le gestionnaire de parallélisme.
Paramètres nécessaires à la construction d'un maillage.
MeshBuildInfo & addParallelMng(Ref< IParallelMng > pm)
Positionne le gestionnaire de parallélisme pour créér la maillage.
InstanceType * get() const
Instance associée ou nullptr si aucune.
Référence à une instance.
ISubDomain * subDomain() const
Accès au ISubDomain associé.
Structure contenant les informations pour créer un service.
TraceMessage info() const
Flot pour un message d'information.
Vecteur 1D de données avec sémantique par valeur (style STL).
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
std::int32_t Int32
Type entier signé sur 32 bits.