Partitioneur de maillage utilisant la bibliothèque PARMetis. Plus de détails...
Fonctions membres publiques | |
MetisMeshPartitioner (const ServiceBuildInfo &sbi) | |
void | build () override |
Construction de niveau build du service. | |
void | partitionMesh (bool initial_partition) override |
void | partitionMesh (bool initial_partition, Int32 nb_part) override |
Fonctions membres publiques hérités de Arcane::ArcaneMetisMeshPartitionerObject | |
ArcaneMetisMeshPartitionerObject (const Arcane::ServiceBuildInfo &sbi) | |
Constructeur. | |
virtual | ~ArcaneMetisMeshPartitionerObject () |
Destructeur. | |
CaseOptionsMetisMeshPartitioner * | options () const |
Options du jeu de données du service. | |
Fonctions membres publiques hérités de Arcane::MeshPartitionerBase | |
MeshPartitionerBase (const ServiceBuildInfo &sbi) | |
ISubDomain * | subDomain () const |
IMesh * | mesh () const |
Maillage associé au partitionneur. | |
void | setMaximumComputationTime (Real v) override |
Positionne la proportion du temps de calcul. | |
virtual Real | maximumComputationTime () const |
virtual void | setImbalance (Real v) |
Positionne le déséquilibre de temps de calcul. | |
virtual Real | imbalance () const |
Déséquilibre de temps de calcul. | |
virtual void | setMaxImbalance (Real v) |
Positionne le déséquilibre maximal autorisé | |
virtual Real | maxImbalance () const |
Déséquilibre maximal autorisé | |
virtual void | setComputationTimes (RealConstArrayView v) |
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). | |
virtual RealConstArrayView | computationTimes () const |
virtual void | setCellsWeight (ArrayView< float > weights, Integer nb_weight) |
Permet de définir les poids des objets à partitionner : on doit utiliser le ILoadBalanceMng maintenant. | |
virtual ArrayView< float > | cellsWeight () const |
virtual Integer | nbCellWeight () const |
virtual void | setILoadBalanceMng (ILoadBalanceMng *mng) |
Change le ILoadBalanceMng à utiliser. | |
virtual ILoadBalanceMng * | loadBalanceMng () const |
virtual void | notifyEndPartition () |
Notification lors de la fin d'un repartionnement (après échange des entités) | |
virtual void | changeOwnersFromCells () |
Positionne les nouveaux propriétaires des noeuds, arêtes et faces à partir des mailles. | |
virtual void | initConstraints (bool uidref=true) |
virtual void | freeConstraints () |
virtual Int32 | nbOwnCellsWithConstraints () const |
virtual Real | getNeighbourCellsUidWithConstraints (Cell cell, Int64Array &neighbourcells, Array< float > *commWeights=NULL, bool noCellContrib=false) |
virtual Integer | nbNeighbourCellsWithConstraints (Cell cell) |
virtual void | getNeighbourNodesUidWithConstraints (Cell cell, Int64UniqueArray neighbournodes) |
virtual Int32 | localIdWithConstraints (Cell cell) |
virtual Int32 | localIdWithConstraints (Int32 cell_lid) |
virtual void | invertArrayLid2LidCompacted () |
virtual SharedArray< float > | cellsWeightsWithConstraints (Int32 max_nb_weight=0, bool ask_lb_cells=false) |
virtual SharedArray< float > | cellsSizeWithConstraints () |
virtual bool | cellUsedWithConstraints (Cell cell) |
virtual bool | cellUsedWithWeakConstraints (std::pair< Int64, Int64 > &paired_item) |
virtual void | changeCellOwner (Item cell, VariableItemInt32 &cells_new_owner, Int32 new_owner) |
virtual bool | haveConstraints () |
virtual bool | haveWeakConstraints () |
Fonctions membres publiques hérités de Arcane::AbstractService | |
virtual | ~AbstractService () |
Destructeur. | |
virtual IServiceInfo * | serviceInfo () const |
Accès aux informations du service. | |
virtual IBase * | serviceParent () const |
Accès à l'interface de base des principaux objets Arcane. | |
virtual IService * | serviceInterface () |
Retourne l'interface bas niveau IService du service. | |
Fonctions membres publiques hérités de Arccore::TraceAccessor | |
TraceAccessor (ITraceMng *m) | |
Construit un accesseur via le gestionnaire de trace m. | |
TraceAccessor (const TraceAccessor &rhs) | |
Constructeur par recopie. | |
TraceAccessor & | operator= (const TraceAccessor &rhs) |
Opérateur de recopie. | |
virtual | ~TraceAccessor () |
Libère les ressources. | |
ITraceMng * | traceMng () 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::IMeshPartitioner | |
virtual | ~IMeshPartitioner () |
Libère les ressources. | |
virtual IPrimaryMesh * | primaryMesh () override |
Maillage associé | |
Fonctions membres publiques hérités de Arcane::IMeshPartitionerBase | |
virtual | ~IMeshPartitionerBase ()=default |
Libère les ressources. | |
Fonctions membres privées | |
void | _partitionMesh (bool initial_partition, Int32 nb_part) |
void | _removeEmptyPartsV1 (const Int32 nb_part, const Int32 nb_own_cell, ArrayView< idxtype > metis_part) |
Comble les partitions vides (version 1). | |
void | _removeEmptyPartsV2 (Int32 nb_part, ArrayView< idxtype > metis_part) |
Comble les partitions vides (version 2). | |
Int32 | _removeEmptyPartsV2Helper (Int32 nb_part, ArrayView< idxtype > metis_part, Int32 algo_iteration) |
Applique une itération de l'algorithme de suppression des partitions vides. | |
int | _writeGraph (IParallelMng *pm, Span< const idxtype > metis_vtkdist, Span< const idxtype > metis_xadj, Span< const idxtype > metis_adjncy, Span< const idxtype > metis_vwgt, Span< const idxtype > metis_ewgt, const String &Name) const |
Attributs privés | |
IParallelMng * | m_parallel_mng = nullptr |
Integer | m_nb_refine |
Integer | m_random_seed |
bool | m_disable_floatingexception |
Partitioneur de maillage utilisant la bibliothèque PARMetis.
Définition à la ligne 73 du fichier MetisMeshPartitioner.cc.
|
explicit |
Définition à la ligne 112 du fichier MetisMeshPartitioner.cc.
The following loop is used to fix a ParMetis bug: ParMetis does not know how to deal with several imbalances ... If we detect that load imbalance cannot be insured, we increase all load imbalances.
Définition à la ligne 155 du fichier MetisMeshPartitioner.cc.
Références _removeEmptyPartsV1(), _removeEmptyPartsV2(), _writeGraph(), Arcane::IParallelMng::allGather(), ARCANE_FATAL, ARCANE_THROW, Arcane::MeshPartitionerBase::changeOwnersFromCells(), Arcane::IParallelMng::commRank(), Arcane::IParallelMng::commSize(), ENUMERATE_CELL, Arcane::IK_Cell, Arcane::MeshPartitionerBase::imbalance(), Arccore::TraceAccessor::info(), Arcane::IParallelMng::isThreadImplementation(), Arccore::String::localstr(), Arcane::MeshPartitionerBase::maxImbalance(), Arcane::MeshPartitionerBase::mesh(), Arcane::IMeshBase::name(), Arcane::Cell::nbFace(), Arccore::String::null(), Arcane::ArcaneMetisMeshPartitionerObject::options(), Arcane::IMeshBase::ownCells(), Arcane::IVariable::PNoDump, Arcane::IParallelMng::reduce(), Arcane::IMesh::subDomain(), Arcane::CheckedConvert::toInt32(), Arcane::CheckedConvert::toInteger(), Arcane::Convert::toInteger(), Arcane::IMesh::toPrimaryMesh(), et Arccore::String::upper().
|
private |
Comble les partitions vides (version 1).
Cette version est la seule disponible dans les versions 2.18 (février 2020) et antérieure de Arcane. Le sous-domaine qui a le plus de mailles en donne une pour chaque partition vide. Cela ne fonctionne pas s'il y a plus de partititions vide que de mailles dans le sous-domaine le plus remplit. Pour éviter ce problème, la version 2 de l'algorithme applique itérativement celui-ci.
Définition à la ligne 687 du fichier MetisMeshPartitioner.cc.
Références Arcane::IParallelMng::commRank(), Arcane::IParallelMng::computeMinMaxSum(), Arccore::TraceAccessor::info(), et Arcane::CheckedConvert::toInteger().
Référencé par _partitionMesh().
|
private |
Comble les partitions vides (version 2).
Cette version applique la version 1 de manière itérative pour garantir qu'on ne laisse pas de partitions vide.
Définition à la ligne 833 du fichier MetisMeshPartitioner.cc.
Références _removeEmptyPartsV2Helper(), Arccore::TraceAccessor::info(), et Arccore::TraceAccessor::pwarning().
Référencé par _partitionMesh().
|
private |
Applique une itération de l'algorithme de suppression des partitions vides.
Il s'agit du même algorithme que _removeEmptyPartsLegacy() mais en garantissant qu'on ne laisse au moins une maille dans la partition qui donne ses mailles aux partitions vides.
Définition à la ligne 751 du fichier MetisMeshPartitioner.cc.
Références ARCANE_FATAL, Arcane::IParallelMng::commRank(), Arcane::IParallelMng::computeMinMaxSum(), et Arccore::TraceAccessor::info().
Référencé par _removeEmptyPartsV2().
|
private |
This function saves the graph in Scotch distributed file format.
Définition à la ligne 862 du fichier MetisMeshPartitioner.cc.
Références Arcane::IParallelMng::barrier(), Arcane::IParallelMng::commRank(), Arcane::IParallelMng::commSize(), Arccore::ITraceMng::flush(), Arccore::TraceAccessor::info(), Arccore::String::localstr(), Arcane::IParallelMng::reduce(), Arccore::StringBuilder::toString(), et Arccore::TraceAccessor::traceMng().
Référencé par _partitionMesh().
Construction de niveau build du service.
L'appel à build est effectué au moment de sa construction, usuellement au niveau de sa lecture dans les options en phase1.
Réimplémentée à partir de Arcane::AbstractService.
Définition à la ligne 82 du fichier MetisMeshPartitioner.cc.
Repartitionne 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.
Réimplémentée à partir de Arcane::IMeshPartitioner.
Définition à la ligne 128 du fichier MetisMeshPartitioner.cc.
Références Arcane::IParallelMng::commSize(), et partitionMesh().
Référencé par partitionMesh().
|
overridevirtual |
Implémente Arcane::IMeshPartitioner.
Définition à la ligne 138 du fichier MetisMeshPartitioner.cc.
|
private |
Définition à la ligne 95 du fichier MetisMeshPartitioner.cc.
|
private |
Définition à la ligne 93 du fichier MetisMeshPartitioner.cc.
|
private |
Définition à la ligne 92 du fichier MetisMeshPartitioner.cc.
|
private |
Définition à la ligne 94 du fichier MetisMeshPartitioner.cc.