14#include "arcane/utils/NotImplementedException.h"
15#include "arcane/utils/CheckedConvert.h"
17#include "arcane/IParallelMng.h"
18#include "arcane/ISubDomain.h"
19#include "arcane/CommonVariables.h"
20#include "arcane/IMesh.h"
21#include "arcane/IMeshSubMeshTransition.h"
22#include "arcane/IMeshUtilities.h"
23#include "arcane/FactoryService.h"
24#include "arcane/ServiceFactory.h"
25#include "arcane/Service.h"
26#include "arcane/ItemPrinter.h"
27#include "arcane/IMeshPartitioner.h"
28#include "arcane/BasicService.h"
30#include "arcane/IMeshPartitionConstraintMng.h"
31#include "arcane/impl/MeshPartitionerTesterService_axl.h"
52class MeshPartitionerTester
64 IMesh*
mesh()
const override {
return BasicService::mesh(); }
70 ARCANE_UNUSED(initial_partition);
71 ARCANE_UNUSED(nb_part);
80 Real maximumComputationTime()
const override {
return m_max_computation_time; }
92 m_cells_weight = weights;
93 m_nb_weight = nb_weight;
109 Real m_max_imbalance;
110 Real m_max_computation_time;
112 ArrayView<float> m_cells_weight;
119MeshPartitionerTester::
123, m_max_imbalance(0.0)
124, m_max_computation_time(0.0)
137 Int32 sub_rank_divider = 0;
139 sub_rank_divider =
options()->subRankDivider();
141 info() <<
"Using MeshPartitionerTester sub_rank_divider=" << sub_rank_divider;
149 warning() <<
"Can't test the mesh repartionning with"
150 <<
"only one subdomain...";
156 if (initial_partition){
168 Int64 nb_bloc = nb_rank * 3;
169 Int64 cell_index = 0;
173 Int64 new_owner = ((cell_index * nb_bloc) / nb_cell) % nb_rank;
183 Integer max_cell_index = nb_cell / 2;
190 if (cell_index<(max_cell_index+(sid*10))){
194 Int32 xx = (new_owner*2 + current_iteration + cell_index/10 + 17) % nb_rank;
195 if (sub_rank_divider>0){
196 xx = xx / sub_rank_divider;
197 xx = (xx*sub_rank_divider + new_owner) % nb_rank;
203 cells_new_owner[cell] = new_owner;
208 cells_new_owner.synchronize();
209 if (
mesh->partitionConstraintMng()) {
211 mesh->partitionConstraintMng()->computeAndApplyConstraints();
213 mesh->utilities()->changeOwnersFromCells();
#define ARCANE_SERVICE_INTERFACE(ainterface)
Macro pour déclarer une interface lors de l'enregistrement d'un service.
Generation de la classe de base du Service.
ArcaneMeshPartitionerTesterServiceObject(const Arcane::ServiceBuildInfo &sbi)
Constructeur.
CaseOptionsMeshPartitionerTesterService * options() const
Options du jeu de données du service.
Vue modifiable d'un tableau d'un type T.
Int32 globalIteration() const
Numéro de l'itération courante.
Interface d'enregistrement des variables pour l'equilibrage de charge.
Interface d'un partitionneur de maillage.
Interface d'un partitionneur de maillage.
virtual IPrimaryMesh * toPrimaryMesh()=0
Retourne l'instance sous la forme d'un IPrimaryMesh.
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.
Interface du gestionnaire d'un sous-domaine.
virtual const CommonVariables & commonVariables() const =0
Informations sur les variables standards.
virtual IParallelMng * parallelMng()=0
Retourne le gestionnaire de parallélisme.
Int32 owner() const
Numéro du sous-domaine propriétaire de l'entité
Classe de test du repartionnement de maillage.
void setCellsWeight(ArrayView< float > weights, Integer nb_weight) override
Permet de définir les poids des objets à partitionner : on doit utiliser le ILoadBalanceMng maintenan...
void notifyEndPartition() override
Notification lors de la fin d'un repartionnement (après échange des entités)
Real maxImbalance() const override
Déséquilibre maximal autorisé
void setMaximumComputationTime(Real v) override
Positionne la proportion du temps de calcul.
void setILoadBalanceMng(ILoadBalanceMng *) override
Change le ILoadBalanceMng à utiliser.
void setComputationTimes(RealConstArrayView v) override
Temps de calcul de se sous-domaine. Le premier élément indique le temps de calcul du sous-domaine cor...
Real imbalance() const override
Déséquilibre de temps de calcul.
void setImbalance(Real v) override
Positionne le déséquilibre de temps de calcul.
IMesh * mesh() const override
Maillage associé au partitionneur.
void build() override
Construction de niveau build du service.
void partitionMesh(bool initial_partition) override
void setMaxImbalance(Real v) override
Positionne le déséquilibre maximal autorisé
Exception lorsqu'une fonction n'est pas implémentée.
Structure contenant les informations pour créer un service.
Propriétés de création d'un service.
TraceMessage info() const
Flot pour un message d'information.
TraceMessage warning() const
Flot pour un message d'avertissement.
#define ARCANE_REGISTER_SERVICE(aclass, a_service_property,...)
Macro pour enregistrer un service.
ItemVariableScalarRefT< Int32 > VariableItemInt32
Grandeur de type entier 32 bits.
Int32 toInt32(Int64 v)
Converti un Int64 en un Int32.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::int64_t Int64
Type entier signé sur 64 bits.
Int32 Integer
Type représentant un entier.
@ ST_CaseOption
Le service s'utilise au niveau du jeu de données.
@ ST_SubDomain
Le service s'utilise au niveau du sous-domaine.
UniqueArray< Real > RealUniqueArray
Tableau dynamique à une dimension de réels.
@ IK_Cell
Entité de maillage de genre maille.
double Real
Type représentant un réel.
std::int32_t Int32
Type entier signé sur 32 bits.
ConstArrayView< Real > RealConstArrayView
Equivalent C d'un tableau à une dimension de réels.