Partitioneur de maillage utilisant la bibliothèque PARMetis. Plus de détails...
Graphe d'héritage de Arcane::MetisMeshPartitioner:
Graphe de collaboration de Arcane::MetisMeshPartitioner: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 override |
| Maillage associé au partitionneur. | |
| void | setMaximumComputationTime (Real v) override |
| Positionne la proportion du temps de calcul. | |
| Real | maximumComputationTime () 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é | |
| 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 | setCellsWeight (ArrayView< float > weights, Integer nb_weight) override |
| Permet de définir les poids des objets à partitionner : on doit utiliser le ILoadBalanceMng maintenant. | |
| ArrayView< float > | cellsWeight () const override |
| Integer | nbCellWeight () const |
| void | setILoadBalanceMng (ILoadBalanceMng *mng) override |
| Change le ILoadBalanceMng à utiliser. | |
| ILoadBalanceMng * | loadBalanceMng () const override |
| void | notifyEndPartition () override |
| Notification lors de la fin d'un re-partitionnement (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 | |
| ~AbstractService () override | |
| Destructeur. | |
| IServiceInfo * | serviceInfo () const override |
| Accès aux informations du service. Voir IServiceInfo pour les détails. | |
| IBase * | serviceParent () const override |
| Accès à l'interface de base des principaux objets Arcane. | |
| IService * | serviceInterface () 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. | |
| 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 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 (Int32 nb_part, 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 = -1 |
| Integer | m_random_seed = 15 |
| bool | m_disable_floatingexception = false |
Membres hérités additionnels | |
Types publics hérités de Arcane::MeshPartitionerBase | |
| enum | eMarkCellWithConstraint { eCellClassical , eCellReference , eCellGrouped , eCellGhost , eCellInAConstraint } |
Fonctions membres publiques statiques hérités de Arcane::ArcaneMetisMeshPartitionerObject | |
| template<typename ServiceClassType> | |
| static void | fillServiceInfo (Arcane::ServiceInfo *si) |
Fonctions membres protégées hérités de Arcane::MeshPartitionerBase | |
| virtual void | dumpObject (String filename="toto") |
| Dump les informations de repartitionnement sur le disque. | |
| virtual void * | getCommunicator () const |
| virtual Parallel::Communicator | communicator () const |
| virtual bool | cellComm () |
| virtual void | _initArrayCellsWithConstraints () |
| virtual void | _initFilterLidCells () |
| virtual void | _initUidRef () |
| virtual void | _initUidRef (VariableCellInteger &cell_renum_uid) |
| virtual void | _initLid2LidCompacted () |
| virtual void | _initNbCellsWithConstraints () |
| virtual void | _clearCellWgt () |
| bool | _isNonManifoldMesh () const |
| Int32 | _meshDimension () const |
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. | |
Attributs protégés hérités de Arcane::MeshPartitionerBase | |
| IItemFamily * | m_cell_family = nullptr |
Partitioneur de maillage utilisant la bibliothèque PARMetis.
Définition à la ligne 72 du fichier MetisMeshPartitioner.cc.
|
explicit |
Définition à la ligne 111 du fichier MetisMeshPartitioner.cc.
|
private |
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 151 du fichier MetisMeshPartitioner.cc.
Références _removeEmptyPartsV1(), _removeEmptyPartsV2(), _writeGraph(), Arcane::Array< DataType >::add(), Arcane::IParallelMng::allGather(), ARCANE_FATAL, ARCANE_THROW, Arcane::Array< DataType >::begin(), Arcane::MetisWrapper::callAdaptiveRepart(), Arcane::MetisWrapper::callPartKway(), Arcane::MeshPartitionerBase::changeOwnersFromCells(), Arcane::ISubDomain::commonVariables(), Arcane::IParallelMng::commRank(), Arcane::IParallelMng::commSize(), Arcane::IParallelMng::communicator(), Arcane::Array< DataType >::constView(), Arcane::Array< DataType >::data(), ENUMERATE_, ENUMERATE_CELL, Arcane::Array< DataType >::fill(), Arcane::platform::getEnvironmentVariable(), Arcane::CommonVariables::globalIteration(), Arcane::Item::hasFlags(), Arcane::IK_Cell, Arcane::MeshPartitionerBase::imbalance(), Arcane::TraceAccessor::info(), Arcane::GraphDistributor::initWithOneRankPerNode(), Arcane::IParallelMng::isThreadImplementation(), Arcane::String::localstr(), Arcane::MeshPartitionerBase::maxImbalance(), Arcane::Cell::nbEdge(), Arcane::Cell::nbFace(), Arcane::String::null(), Arcane::ArcaneMetisMeshPartitionerObject::options(), Arcane::IVariable::PNoDump, Arcane::MessagePassing::ReduceMax, Arcane::Array< DataType >::reserve(), Arcane::Array< DataType >::resize(), Arcane::AbstractArray< T >::size(), Arcane::CheckedConvert::toInt32(), Arcane::CheckedConvert::toInteger(), Arcane::Convert::toInteger(), Arcane::StringBuilder::toString(), et Arcane::String::upper().
Voici le graphe d'appel pour cette fonction :
|
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 685 du fichier MetisMeshPartitioner.cc.
Références Arcane::IParallelMng::commRank(), Arcane::IParallelMng::computeMinMaxSum(), Arcane::TraceAccessor::info(), et Arcane::CheckedConvert::toInteger().
Référencé par _partitionMesh().
Voici le graphe d'appel pour cette fonction :
Voici le graphe des appelants de cette fonction :
|
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 831 du fichier MetisMeshPartitioner.cc.
Références _removeEmptyPartsV2Helper(), Arcane::TraceAccessor::info(), et Arcane::TraceAccessor::pwarning().
Référencé par _partitionMesh().
Voici le graphe d'appel pour cette fonction :
Voici le graphe des appelants de cette fonction :
|
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 749 du fichier MetisMeshPartitioner.cc.
Références Arcane::Array< DataType >::add(), ARCANE_FATAL, Arcane::IParallelMng::commRank(), Arcane::IParallelMng::computeMinMaxSum(), Arcane::TraceAccessor::info(), et Arcane::ArrayView< T >::size().
Référencé par _removeEmptyPartsV2().
Voici le graphe d'appel pour cette fonction :
Voici le graphe des appelants de cette fonction :
|
private |
This function saves the graph in Scotch distributed file format.
Définition à la ligne 860 du fichier MetisMeshPartitioner.cc.
Références Arcane::IParallelMng::barrier(), Arcane::IParallelMng::commRank(), Arcane::IParallelMng::commSize(), Arcane::ITraceMng::flush(), Arcane::TraceAccessor::info(), Arcane::String::localstr(), Arcane::IParallelMng::reduce(), Arcane::MessagePassing::ReduceSum, Arcane::SpanImpl< T, SizeType, Extent, MinValue >::size(), Arcane::StringBuilder::toString(), et Arcane::TraceAccessor::traceMng().
Référencé par _partitionMesh().
Voici le graphe d'appel pour cette fonction :
Voici le graphe des appelants de cette fonction :
|
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 81 du fichier MetisMeshPartitioner.cc.
|
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.
Réimplémentée à partir de Arcane::IMeshPartitioner.
Définition à la ligne 124 du fichier MetisMeshPartitioner.cc.
Références partitionMesh().
Référencé par partitionMesh().
Voici le graphe d'appel pour cette fonction :
Voici le graphe des appelants de cette fonction :
|
overridevirtual |
Implémente Arcane::IMeshPartitioner.
Définition à la ligne 134 du fichier MetisMeshPartitioner.cc.
|
private |
Définition à la ligne 94 du fichier MetisMeshPartitioner.cc.
|
private |
Définition à la ligne 92 du fichier MetisMeshPartitioner.cc.
|
private |
Définition à la ligne 91 du fichier MetisMeshPartitioner.cc.
|
private |
Définition à la ligne 93 du fichier MetisMeshPartitioner.cc.