Arcane  v4.1.1.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
Référence de la classe Arcane::ArcaneGeometricMeshPartitionerService

Service de partitionnement géométrique de maillage. Plus de détails...

+ Graphe d'héritage de Arcane::ArcaneGeometricMeshPartitionerService:
+ Graphe de collaboration de Arcane::ArcaneGeometricMeshPartitionerService:

Fonctions membres publiques

 ArcaneGeometricMeshPartitionerService (const ServiceBuildInfo &sbi)
 
IMeshmesh () const override
 Maillage associé au partitionneur.
 
void build () override
 Construction de niveau build du service.
 
void partitionMesh (bool initial_partition) override
 
void partitionMesh (bool initial_partition, Int32 nb_part) override
 
void notifyEndPartition () override
 Notification lors de la fin d'un re-partitionnement (après échange des entités)
 
void setMaximumComputationTime (Real v) override
 Positionne la proportion du temps de calcul.
 
Real maximumComputationTime () const override
 
void setComputationTimes (RealConstArrayView v) override
 Temps de calcul de se sous-domaine. Le premier élément indique le temps de calcul du sous-domaine correspondante aux calcul dont le cout est proportionnel aux mailles. Les suivants doivent être associées à une variable (à faire).
 
RealConstArrayView computationTimes () const override
 
void setImbalance (Real v) override
 Positionne le déséquilibre de temps de calcul.
 
Real imbalance () const override
 Déséquilibre de temps de calcul.
 
void setMaxImbalance (Real v) override
 Positionne le déséquilibre maximal autorisé
 
Real maxImbalance () const override
 Déséquilibre maximal autorisé
 
ArrayView< float > cellsWeight () const override
 
void setCellsWeight (ArrayView< float > weights, Integer nb_weight) override
 Permet de définir les poids des objets à partitionner : on doit utiliser le ILoadBalanceMng maintenant.
 
void setILoadBalanceMng (ILoadBalanceMng *) override
 Change le ILoadBalanceMng à utiliser.
 
ILoadBalanceMngloadBalanceMng () const override
 
- Fonctions membres publiques hérités de Arcane::ArcaneArcaneGeometricMeshPartitionerServiceObject
 ArcaneArcaneGeometricMeshPartitionerServiceObject (const Arcane::ServiceBuildInfo &sbi)
 Constructeur.
 
virtual ~ArcaneArcaneGeometricMeshPartitionerServiceObject ()
 Destructeur.
 
CaseOptionsArcaneGeometricMeshPartitionerServiceoptions () const
 Options du jeu de données du service.
 
- Fonctions membres publiques hérités de Arcane::BasicService
 ~BasicService () override
 Libère les ressources.
 
virtual ISubDomainsubDomain ()
 
- Fonctions membres publiques hérités de Arcane::AbstractService
 ~AbstractService () override
 Destructeur.
 
IServiceInfoserviceInfo () const override
 Accès aux informations du service. Voir IServiceInfo pour les détails.
 
IBaseserviceParent () const override
 Accès à l'interface de base des principaux objets Arcane.
 
IServiceserviceInterface () override
 Retourne l'interface bas niveau IService du service.
 
- Fonctions membres publiques hérités de Arcane::TraceAccessor
 TraceAccessor (ITraceMng *m)
 Construit un accesseur via le gestionnaire de trace m.
 
 TraceAccessor (const TraceAccessor &rhs)
 Constructeur par recopie.
 
TraceAccessoroperator= (const TraceAccessor &rhs)
 Opérateur de recopie.
 
virtual ~TraceAccessor ()
 Libère les ressources.
 
ITraceMngtraceMng () const
 Gestionnaire de trace.
 
TraceMessage info () const
 Flot pour un message d'information.
 
TraceMessage pinfo () const
 Flot pour un message d'information en parallèle.
 
TraceMessage info (char category) const
 Flot pour un message d'information d'une catégorie donnée.
 
TraceMessage pinfo (char category) const
 Flot pour un message d'information parallèle d'une catégorie donnée.
 
TraceMessage info (bool v) const
 Flot pour un message d'information.
 
TraceMessage warning () const
 Flot pour un message d'avertissement.
 
TraceMessage pwarning () const
 
TraceMessage error () const
 Flot pour un message d'erreur.
 
TraceMessage perror () const
 
TraceMessage log () const
 Flot pour un message de log.
 
TraceMessage plog () const
 Flot pour un message de log.
 
TraceMessage logdate () const
 Flot pour un message de log précédé de la date.
 
TraceMessage fatal () const
 Flot pour un message d'erreur fatale.
 
TraceMessage pfatal () const
 Flot pour un message d'erreur fatale en parallèle.
 
TraceMessageDbg debug (Trace::eDebugLevel=Trace::Medium) const
 Flot pour un message de debug.
 
Trace::eDebugLevel configDbgLevel () const
 Niveau debug du fichier de configuration.
 
TraceMessage info (Int32 verbose_level) const
 Flot pour un message d'information d'un niveau donné
 
TraceMessage linfo () const
 Flot pour un message d'information avec le niveau d'information local à cette instance.
 
TraceMessage linfo (Int32 relative_level) const
 Flot pour un message d'information avec le niveau d'information local à cette instance.
 
void fatalMessage (const StandaloneTraceMessage &o) const
 
- Fonctions membres publiques hérités de Arcane::IService
virtual ~IService ()
 Libère les ressources.
 
- Fonctions membres publiques hérités de Arcane::MeshAccessor
 MeshAccessor (ISubDomain *sd)
 
 MeshAccessor (IMesh *mesh)
 
 MeshAccessor (const MeshHandle &mesh_handle)
 
Integer nbCell () const
 Retourne le nombre de mailles du maillage.
 
Integer nbFace () const
 Retourne le nombre de faces du maillage.
 
Integer nbEdge () const
 Retourne le nombre d'arêtes du maillage.
 
Integer nbNode () const
 Retourne le nombre de noeuds du maillage.
 
VariableNodeReal3nodesCoordinates () const
 Retourne les coordonnées des noeuds du maillage.
 
NodeGroup allNodes () const
 Retourne le groupe contenant tous les noeuds.
 
EdgeGroup allEdges () const
 Retourne le groupe contenant toutes les arêtes.
 
FaceGroup allFaces () const
 Retourne le groupe contenant toutes les faces.
 
CellGroup allCells () const
 Retourne le groupe contenant toutes les mailles.
 
FaceGroup outerFaces () const
 Retourne le groupe contenant toutes les faces de le frontière.
 
NodeGroup ownNodes () const
 Retourne le groupe contenant tous les noeuds propres à ce domaine.
 
CellGroup ownCells () const
 Retourne le groupe contenant toutes les mailles propres à ce domaine.
 
FaceGroup ownFaces () const
 Groupe contenant toutes les faces propres à ce domaine.
 
EdgeGroup ownEdges () const
 Groupe contenant toutes les arêtes propres à ce domaine.
 
IMeshmesh () const
 
const MeshHandlemeshHandle () const
 
- Fonctions membres publiques hérités de Arcane::CommonVariables
 CommonVariables (IModule *c)
 Construit les références des variables communes pour le module c.
 
 CommonVariables (IVariableMng *variable_mng)
 Construit les références des variables communes pour le gestionnaire variable_mng.
 
 CommonVariables (ISubDomain *sd)
 Construit les références des variables communes pour le sous-domaine sd.
 
virtual ~CommonVariables ()
 Libère les ressources.
 
Int32 globalIteration () const
 Numéro de l'itération courante.
 
Real globalTime () const
 Temps courant.
 
Real globalOldTime () const
 Temps courant précédent.
 
Real globalFinalTime () const
 Temps final de la simulation.
 
Real globalDeltaT () const
 Delta T courant.
 
Real globalCPUTime () const
 Temps CPU utilisé (en seconde)
 
Real globalOldCPUTime () const
 Temps CPU utilisé précédent (en seconde)
 
Real globalElapsedTime () const
 Temps horloge (elapsed) utilisé (en seconde)
 
Real globalOldElapsedTime () const
 Temps horloge (elapsed) utilisé précédent (en seconde)
 
- Fonctions membres publiques hérités de Arcane::IMeshPartitioner
virtual IPrimaryMeshprimaryMesh () override
 Maillage associé
 
virtual void partitionMesh (bool initial_partition)=0
 
- Fonctions membres publiques hérités de Arcane::IMeshPartitionerBase
virtual ~IMeshPartitionerBase ()=default
 Libère les ressources.
 

Fonctions membres privées

Real3 _computeBarycenter (const VariableCellReal3 &cells_center, CellVectorView cells)
 
Real3x3 _computeInertiaTensor (Real3 center, const VariableCellReal3 &cells_center, CellVectorView cells)
 
Real3 _findPrincipalAxis (Real3x3 tensor)
 
void _partitionMesh2 ()
 
void _partitionMesh (bool initial_partition, Int32 nb_part)
 
bool _partitionMeshRecursive (const VariableCellReal3 &cells_center, CellVectorView cells, Int32 partition_index, Int32 &part_id)
 
void _printOwners ()
 
Real3 _computeEigenValuesAndVectors (ITraceMng *tm, Real3x3 tensor, Real3x3 &eigen_vectors, Real3 &eigen_values)
 

Attributs privés

Real m_imbalance = 0.0
 
Real m_max_imbalance = 0.0
 
Real m_max_computation_time = 0.0
 
Int32 m_nb_weight = 0
 
ArrayView< float > m_cells_weight
 
UniqueArray< Realm_computation_times
 
Int32 m_nb_part = 0
 

Membres hérités additionnels

- Fonctions membres publiques statiques hérités de Arcane::ArcaneArcaneGeometricMeshPartitionerServiceObject
template<typename ServiceClassType>
static void fillServiceInfo (Arcane::ServiceInfo *si)
 
- Attributs publics hérités de Arcane::CommonVariables
VariableScalarInt32 m_global_iteration
 Itération courante.
 
VariableScalarReal m_global_time
 Temps actuel.
 
VariableScalarReal m_global_deltat
 Delta T global.
 
VariableScalarReal m_global_old_time
 Temps précédent le temps actuel.
 
VariableScalarReal m_global_old_deltat
 Delta T au temps précédent le temps global.
 
VariableScalarReal m_global_final_time
 Temps final du cas.
 
VariableScalarReal m_global_old_cpu_time
 Temps précédent CPU utilisé (en seconde)
 
VariableScalarReal m_global_cpu_time
 Temps CPU utilisé (en seconde)
 
VariableScalarReal m_global_old_elapsed_time
 Temps précédent horloge utilisé (en seconde)
 
VariableScalarReal m_global_elapsed_time
 Temps horloge utilisé (en seconde)
 
- Fonctions membres protégées hérités de Arcane::BasicService
 BasicService (const ServiceBuildInfo &)
 
- Fonctions membres protégées hérités de Arcane::AbstractService
 AbstractService (const ServiceBuildInfo &)
 Constructeur à partir d'un ServiceBuildInfo.
 
- Fonctions membres protégées hérités de Arcane::TraceAccessor
void _setLocalVerboseLevel (Int32 v)
 
Int32 _localVerboseLevel () const
 
- Fonctions membres protégées hérités de Arcane::IService
 IService ()
 Constructeur.
 

Description détaillée

Service de partitionnement géométrique de maillage.

Ce service permet d'effectuer un partitionnement géométrique. Son but premier est de permettre de réaliser des tests parallèle même si aucune service de partitionnement spécifique (comme ParMetis) n'est disponible.

L'algorithme est le suivant:

  1. Le partitionnement est récursif et à chaque itération on coupe une partition deux.
  2. Pour couper une partition, on calcule le centre de gravité de la partition ainsi que la matrice de son moment d'inertie.
  3. A partir de cette matrice prend le vecteur propre du plus petit axe (celui qui correspond à la plus petite valeur propre).
  4. Le centre de gravité et le vecteur propre définissent un plan (ou une droite en 2D) qui sert de partition: les éléments d'un côté du plan sont dans une partition et ceux de l'autre côté sont dans une autre.
  5. On applique ce mécanisme pour découper en le nombre de partitions souhaité.

L'algorithme et l'implémentation actuels sont très simples et ont les limitions suivantes:

  • On ne tient pas compte des poids aux éléments pour calculer le partitionnement
  • On suppose que le nombre de partition est une puissance de 2. Si ce n'est pas le cas, certaines partitions seront plus grosses que d'autres. Par exemple si on veut découper en 3, on va d'abord créer deux partitions 1 et 2 identiques puis découper la partition 2 en deux parties. La partition 1 sera donc en théorie deux fois plus grosses que les partitions 2 et 3.
  • la partition se fait selon un plan ce qui n'est probablement pas optimal pour limiter la frontière. Utiliser un cercle serait plus judicieux.
  • l'implémentation est linéaire en nombre de partition et tous les rangs participent. Normalement, si on veut P partition, alors le nombre de récursion est N=log2(P) et il serait possible de réaliser simultanément toutes les partitions de rang 1 à N.

Actuellement l'algorithme utilise s'applique aux mailles mais seules les coordonnées sont utilisées ce qui permettrait de l'appliquer sans élément de maillage. Cela pourrait être utile pour un premier partitionnement tel que celui utilisé dans le lecteur parallèle MSH.

Définition à la ligne 190 du fichier ArcaneGeometricMeshPartitionerService.cc.

Documentation des constructeurs et destructeur

◆ ArcaneGeometricMeshPartitionerService()

Arcane::ArcaneGeometricMeshPartitionerService::ArcaneGeometricMeshPartitionerService ( const ServiceBuildInfo & sbi)
explicit

Définition à la ligne 266 du fichier ArcaneGeometricMeshPartitionerService.cc.

Documentation des fonctions membres

◆ _computeBarycenter()

Real3 Arcane::ArcaneGeometricMeshPartitionerService::_computeBarycenter ( const VariableCellReal3 & cells_center,
CellVectorView cells )
private

Définition à la ligne 276 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ _computeInertiaTensor()

Real3x3 Arcane::ArcaneGeometricMeshPartitionerService::_computeInertiaTensor ( Real3 center,
const VariableCellReal3 & cells_center,
CellVectorView cells )
private

Définition à la ligne 296 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ _findPrincipalAxis()

Real3 Arcane::ArcaneGeometricMeshPartitionerService::_findPrincipalAxis ( Real3x3 tensor)
private

Définition à la ligne 331 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ _partitionMesh()

void Arcane::ArcaneGeometricMeshPartitionerService::_partitionMesh ( bool initial_partition,
Int32 nb_part )
private

Définition à la ligne 461 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ _partitionMesh2()

void Arcane::ArcaneGeometricMeshPartitionerService::_partitionMesh2 ( )
private

Définition à la ligne 349 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ _partitionMeshRecursive()

bool Arcane::ArcaneGeometricMeshPartitionerService::_partitionMeshRecursive ( const VariableCellReal3 & cells_center,
CellVectorView cells,
Int32 partition_index,
Int32 & part_id )
private

Définition à la ligne 379 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ _printOwners()

void Arcane::ArcaneGeometricMeshPartitionerService::_printOwners ( )
private

Définition à la ligne 490 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ build()

void Arcane::ArcaneGeometricMeshPartitionerService::build ( void )
inlineoverridevirtual

Construction de niveau build du service.

Cette méthode est appelé juste après le constructeur.

Réimplémentée à partir de Arcane::AbstractService.

Définition à la ligne 201 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ cellsWeight()

ArrayView< float > Arcane::ArcaneGeometricMeshPartitionerService::cellsWeight ( ) const
inlineoverridevirtual

Implémente Arcane::IMeshPartitioner.

Définition à la ligne 221 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ computationTimes()

RealConstArrayView Arcane::ArcaneGeometricMeshPartitionerService::computationTimes ( ) const
inlineoverridevirtual

Implémente Arcane::IMeshPartitioner.

Définition à la ligne 215 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ imbalance()

Real Arcane::ArcaneGeometricMeshPartitionerService::imbalance ( ) const
inlineoverridevirtual

Déséquilibre de temps de calcul.

Implémente Arcane::IMeshPartitioner.

Définition à la ligne 217 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ loadBalanceMng()

ILoadBalanceMng * Arcane::ArcaneGeometricMeshPartitionerService::loadBalanceMng ( ) const
inlineoverridevirtual

Implémente Arcane::IMeshPartitioner.

Définition à la ligne 234 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ maxImbalance()

Real Arcane::ArcaneGeometricMeshPartitionerService::maxImbalance ( ) const
inlineoverridevirtual

Déséquilibre maximal autorisé

Implémente Arcane::IMeshPartitioner.

Définition à la ligne 219 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ maximumComputationTime()

Real Arcane::ArcaneGeometricMeshPartitionerService::maximumComputationTime ( ) const
inlineoverridevirtual

Implémente Arcane::IMeshPartitioner.

Définition à la ligne 213 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ mesh()

IMesh * Arcane::ArcaneGeometricMeshPartitionerService::mesh ( ) const
inlineoverridevirtual

Maillage associé au partitionneur.

Implémente Arcane::IMeshPartitioner.

Définition à la ligne 200 du fichier ArcaneGeometricMeshPartitionerService.cc.

Référencé par partitionMesh().

+ Voici le graphe des appelants de cette fonction :

◆ notifyEndPartition()

void Arcane::ArcaneGeometricMeshPartitionerService::notifyEndPartition ( )
inlineoverridevirtual

Notification lors de la fin d'un re-partitionnement (après échange des entités)

Implémente Arcane::IMeshPartitionerBase.

Définition à la ligne 208 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ partitionMesh() [1/2]

void Arcane::ArcaneGeometricMeshPartitionerService::partitionMesh ( bool initial_partition)
overridevirtual

Re-partitionne le maillage mesh

Cette méthode change les propriétaires des entités et remplit la variable IItemFamily::itemsNewOwner() de chaque famille d'entité du maillage mesh avec le numéro du nouveau sous-domaine propriétaire.

Note
Cette méthode est réservée aux développeurs Arcane. Si un module souhaite effectuer un re-partitionnement, il faut appeler la méthode IMeshUtilities::partitionAndExchangeMeshWithReplication() qui gère à la fois le partitionnement et l'échange des informations et supporte la réplication de domaine.

Implémente Arcane::IMeshPartitionerBase.

Définition à la ligne 508 du fichier ArcaneGeometricMeshPartitionerService.cc.

Références mesh().

+ Voici le graphe d'appel pour cette fonction :

◆ partitionMesh() [2/2]

void Arcane::ArcaneGeometricMeshPartitionerService::partitionMesh ( bool initial_partition,
Int32 nb_part )
inlineoverridevirtual

Implémente Arcane::IMeshPartitioner.

Définition à la ligne 203 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ setCellsWeight()

void Arcane::ArcaneGeometricMeshPartitionerService::setCellsWeight ( ArrayView< float > weights,
Integer nb_weight )
inlineoverridevirtual

Permet de définir les poids des objets à partitionner : on doit utiliser le ILoadBalanceMng maintenant.

Implémente Arcane::IMeshPartitioner.

Définition à la ligne 223 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ setComputationTimes()

void Arcane::ArcaneGeometricMeshPartitionerService::setComputationTimes ( RealConstArrayView v)
inlineoverridevirtual

Temps de calcul de se sous-domaine. Le premier élément indique le temps de calcul du sous-domaine correspondante aux calcul dont le cout est proportionnel aux mailles. Les suivants doivent être associées à une variable (à faire).

Implémente Arcane::IMeshPartitioner.

Définition à la ligne 214 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ setILoadBalanceMng()

void Arcane::ArcaneGeometricMeshPartitionerService::setILoadBalanceMng ( ILoadBalanceMng * mng)
inlineoverridevirtual

Change le ILoadBalanceMng à utiliser.

Implémente Arcane::IMeshPartitioner.

Définition à la ligne 229 du fichier ArcaneGeometricMeshPartitionerService.cc.

Références ARCANE_THROW.

◆ setImbalance()

void Arcane::ArcaneGeometricMeshPartitionerService::setImbalance ( Real v)
inlineoverridevirtual

Positionne le déséquilibre de temps de calcul.

Implémente Arcane::IMeshPartitioner.

Définition à la ligne 216 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ setMaxImbalance()

void Arcane::ArcaneGeometricMeshPartitionerService::setMaxImbalance ( Real v)
inlineoverridevirtual

Positionne le déséquilibre maximal autorisé

Implémente Arcane::IMeshPartitioner.

Définition à la ligne 218 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ setMaximumComputationTime()

void Arcane::ArcaneGeometricMeshPartitionerService::setMaximumComputationTime ( Real v)
inlineoverridevirtual

Positionne la proportion du temps de calcul.

Proportion du temps de calcul Temps de calcul du sous-domaine le plus chargé

Implémente Arcane::IMeshPartitioner.

Définition à la ligne 212 du fichier ArcaneGeometricMeshPartitionerService.cc.

Documentation des données membres

◆ m_cells_weight

ArrayView<float> Arcane::ArcaneGeometricMeshPartitionerService::m_cells_weight
private

Définition à la ligne 245 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ m_computation_times

UniqueArray<Real> Arcane::ArcaneGeometricMeshPartitionerService::m_computation_times
private

Définition à la ligne 246 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ m_imbalance

Real Arcane::ArcaneGeometricMeshPartitionerService::m_imbalance = 0.0
private

Définition à la ligne 241 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ m_max_computation_time

Real Arcane::ArcaneGeometricMeshPartitionerService::m_max_computation_time = 0.0
private

Définition à la ligne 243 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ m_max_imbalance

Real Arcane::ArcaneGeometricMeshPartitionerService::m_max_imbalance = 0.0
private

Définition à la ligne 242 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ m_nb_part

Int32 Arcane::ArcaneGeometricMeshPartitionerService::m_nb_part = 0
private

Définition à la ligne 247 du fichier ArcaneGeometricMeshPartitionerService.cc.

◆ m_nb_weight

Int32 Arcane::ArcaneGeometricMeshPartitionerService::m_nb_weight = 0
private

Définition à la ligne 244 du fichier ArcaneGeometricMeshPartitionerService.cc.


La documentation de cette classe a été générée à partir du fichier suivant :