Partitioneur de maillage inspiré de la bibliothèque SplitSD, développé initialement à l'ONERA pour Dassault Aviation. Plus de détails...
#include <arcane/std/SplitSDMeshPartitioner.h>
Fonctions membres publiques | |
SplitSDMeshPartitioner (const ServiceBuildInfo &sbi) | |
virtual void | build () |
Construction de niveau build du service. | |
virtual void | partitionMesh (bool initial_partition) |
virtual void | partitionMesh (bool initial_partition, Int32 nb_part) |
Fonctions membres publiques hérités de Arcane::ArcaneSplitSDMeshPartitionerObject | |
ArcaneSplitSDMeshPartitionerObject (const Arcane::ServiceBuildInfo &sbi) | |
Constructeur. | |
virtual | ~ArcaneSplitSDMeshPartitionerObject () |
Destructeur. | |
CaseOptionsSplitSDMeshPartitioner * | 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 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. | |
Attributs privés | |
VariableCellReal | m_poids_aux_mailles |
Partitioneur de maillage inspiré de la bibliothèque SplitSD, développé initialement à l'ONERA pour Dassault Aviation.
Définition à la ligne 220 du fichier SplitSDMeshPartitioner.h.
Arcane::SplitSDMeshPartitioner::SplitSDMeshPartitioner | ( | const ServiceBuildInfo & | sbi | ) |
Définition à la ligne 50 du fichier SplitSDMeshPartitioner.cc.
|
private |
Définition à la ligne 1726 du fichier SplitSDMeshPartitioner.cc.
|
private |
Définition à la ligne 1800 du fichier SplitSDMeshPartitioner.cc.
|
private |
Définition à la ligne 1784 du fichier SplitSDMeshPartitioner.cc.
|
private |
Définition à la ligne 1757 du fichier SplitSDMeshPartitioner.cc.
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 230 du fichier SplitSDMeshPartitioner.h.
|
private |
calcul un deltaMin en fonction des transferts locaux
Définition à la ligne 707 du fichier SplitSDMeshPartitioner.cc.
Références Arcane::arcaneIsDebug(), StrucListeVoisMail::Delta, StrucListeDomMail::ListeVoisins, StrucListeDomMail::NbVoisins, et StrucListeDomMail::Poids.
|
private |
déplace des parties du sous-domaine lorsqu'elles sont trop petites et non connexes
Définition à la ligne 1348 du fichier SplitSDMeshPartitioner.cc.
Références Arcane::IMeshBase::allCells(), Arcane::IParallelMng::computeMinMaxSum(), ENUMERATE_CELL, Arcane::IPrimaryMesh::exchangeItems(), Arcane::IK_Cell, Arcane::IPrimaryMesh::itemsNewOwner(), Arcane::Item::localId(), Arcane::Item::owner(), Arcane::IMesh::properties(), et Arcane::IMesh::toPrimaryMesh().
|
private |
Fonction qui se charge de diffuser un tableau (envois et réception). Il est fait un MPI_Bcast mais il faut que la taille du tableau soit connue sur tous les processeurs.
{Remarque:} La taille du tableau est en octets.
@memo Diffusion d'un message.
InfoProc | (I) structure décrivant le processeur sur lequel tourne l'application. |
FromProc | (I) noeud de calcul depuis lequel on diffuse le tableau. |
TabTMP | (I) tableau qui est envoyé. |
TailleTMP | (I) taille de TabTMP (en octets). |
Définition à la ligne 2008 du fichier SplitSDMeshPartitioner.cc.
Références Arccore::TraceAccessor::pfatal().
|
private |
Fonction qui se charge d'envoyer un tableau.
{Remarque:} La taille du tableau est en octets.
@memo Envoi d'un message.
InfoProc | (I) structure décrivant le processeur sur lequel tourne l'application. |
ToProc | (I) noeud de calcul de destination. |
Tag | (I) marque pour différencier les messages. |
TabTMP | (I) tableau qui est envoyé. |
TailleTMP | (I) taille de TabTMP (en octets). |
Définition à la ligne 1928 du fichier SplitSDMeshPartitioner.cc.
Références Arccore::TraceAccessor::pfatal().
|
private |
phase de transfert entre 2 domaines, MAJ des domaines
Définition à la ligne 985 du fichier SplitSDMeshPartitioner.cc.
Références Arcane::IK_Cell, Arcane::IPrimaryMesh::itemsNewOwner(), et Arcane::IMesh::toPrimaryMesh().
|
private |
phase itérative pour équilibrer la charge
Définition à la ligne 770 du fichier SplitSDMeshPartitioner.cc.
Références Arcane::IPrimaryMesh::exchangeItems(), Arcane::IK_Cell, Arcane::IPrimaryMesh::itemsNewOwner(), Arcane::IMesh::properties(), et Arcane::IMesh::toPrimaryMesh().
|
private |
libération mémoire des structures
Définition à la ligne 173 du fichier SplitSDMeshPartitioner.cc.
|
private |
recherche le domaine voisin ayant le max de Faces en commun avec le groupe de mailles
Définition à la ligne 1565 du fichier SplitSDMeshPartitioner.cc.
Références Arcane::Face::backCell(), Arcane::Cell::face(), Arcane::Face::frontCell(), Arcane::Face::isSubDomainBoundary(), Arcane::Cell::nbFace(), et Arcane::Item::owner().
|
private |
création d'un tableau qui sert de masque sur les LocalId des éléments
Définition à la ligne 1641 du fichier SplitSDMeshPartitioner.cc.
Références Arcane::IMeshBase::allCells(), ENUMERATE_CELL, et Arcane::Item::localId().
|
private |
création d'un tableau qui sert de masque sur les LocalId des noeuds
Définition à la ligne 1615 du fichier SplitSDMeshPartitioner.cc.
Références Arcane::IMeshBase::allNodes(), ENUMERATE_NODE, et Arcane::Item::localId().
|
private |
initialisation des structures
Définition à la ligne 91 du fichier SplitSDMeshPartitioner.cc.
Références Arcane::IParallelMng::commSize(), ENUMERATE_CELL, Arcane::IK_Cell, Arcane::IMeshBase::ownCells(), et Arcane::Item::owner().
initialisation des poids (m_cells_weight => m_poids_aux_mailles)
Définition à la ligne 151 du fichier SplitSDMeshPartitioner.cc.
Références ENUMERATE_CELL, et Arcane::IMeshBase::ownCells().
|
private |
Définition à la ligne 1678 du fichier SplitSDMeshPartitioner.cc.
|
private |
Définition à la ligne 1669 du fichier SplitSDMeshPartitioner.cc.
|
private |
Définition à la ligne 1700 du fichier SplitSDMeshPartitioner.cc.
|
private |
lissage du dernier front obtenu par parcours frontal, de manière à intégrer dans ce front les éléments dont tous les noeuds sont déjà pris dans les fronts précédents
Définition à la ligne 1292 du fichier SplitSDMeshPartitioner.cc.
Références Arcane::Node::cell(), Arcane::Item::localId(), Arcane::Node::nbCell(), Arcane::ItemWithNodes::nbNode(), et Arcane::ItemWithNodes::node().
|
private |
fonction de décalage du Delta associé à une interface recherchée pour un couple, domaine et numéro de voisin, spécifié
Définition à la ligne 683 du fichier SplitSDMeshPartitioner.cc.
Références StrucListeVoisMail::Delta, StrucListeDomMail::ListeVoisins, StrucListeDomMail::NbVoisins, et StrucListeVoisMail::NoDomVois.
|
private |
On utilise une méthode de parcours frontal pour aller d'un noeud surchargé vers les autres noeuds en mémorisant le chemin pour mettre à jour les Delta sur les interfaces.
Définition à la ligne 443 du fichier SplitSDMeshPartitioner.cc.
Références StrucListeDomMail::ListeVoisins, StrucListeDomMail::NbVoisins, StrucListeVoisMail::NoDomVois, et StrucListeDomMail::Poids.
|
private |
mise à jour de la structure locale (noeuds sur les interfaces avec sous-domaines voisins)
Définition à la ligne 191 du fichier SplitSDMeshPartitioner.cc.
Références Arcane::IMeshBase::allFaces(), Arcane::arcaneCheckArraySize(), Arcane::Face::backCell(), ENUMERATE_CELL, ENUMERATE_FACE, Arcane::Face::frontCell(), Arcane::Face::isSubDomainBoundary(), Arcane::Item::localId(), Arcane::ItemWithNodes::nbNode(), Arcane::ItemWithNodes::node(), Arcane::IMeshBase::nodeFamily(), Arcane::IMeshBase::ownCells(), et Arcane::Item::owner().
|
private |
mise à jour de la structure sur le processeur 0
Définition à la ligne 304 du fichier SplitSDMeshPartitioner.cc.
|
private |
Stocke le contenu d'un Domaine dans un tableau en vue d'une communication (sans la liste des noeuds sur l'interface)
@memo Stockage d'une StructureBlocEtendu dans un tableau.
Domaine | (I) StructureBlocEtendu |
TabTMP | (I/O) tableau que l'on remplit |
TailleTMP | (I) taille totale du tableau TabTMP |
comm | (I) environnement de communication |
Définition à la ligne 2075 du fichier SplitSDMeshPartitioner.cc.
|
private |
Stocke les 2 entiers et le double
Définition à la ligne 2146 du fichier SplitSDMeshPartitioner.cc.
|
private |
parcours frontal limité suivant le Delta (poids cumulés des éléments pris dans les fronts), retourne un en cas de blocage
Définition à la ligne 1162 du fichier SplitSDMeshPartitioner.cc.
Références Arcane::Node::cell(), Arcane::Item::localId(), Arcane::Node::nbCell(), Arcane::ItemWithNodes::nbNode(), et Arcane::ItemWithNodes::node().
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 61 du fichier SplitSDMeshPartitioner.cc.
|
inlinevirtual |
Implémente Arcane::IMeshPartitioner.
Définition à la ligne 235 du fichier SplitSDMeshPartitioner.h.
|
private |
Reçoit un tableau de taille (in)connue via MPI. Alloue ce tableau et le retourne (en sortie).
{Remarque:} la taille du tableau est positive lorsqu'elle est connue sinon il est fait appel aux fonctions MPI_Probe et MPI_Get_count pour connaître la taille.
@memo Réception d'un tableau à l'aide de la libriarie de communication MPI.
InfoProc | (I) structure décrivant le processeur sur lequel tourne l'application. |
FromProc | (I) numéro du processeur qui envoit. |
Tag | (I) marque pour distinguer les messages. |
pTailleTMP | (I/O) pointeur sur taille en octets du tableau TabTMP:\ <=0 si la taille du tableau est inconnue\ > 0 si la taille du tableau est connue. |
Définition à la ligne 1851 du fichier SplitSDMeshPartitioner.cc.
Références Arccore::TraceAccessor::pfatal().
|
private |
sélection d'éléments dans un domaine pour équilibrage entre 2 dom, en faisant un parcour frontal depuis l'interface
Définition à la ligne 1039 du fichier SplitSDMeshPartitioner.cc.
Références Arcane::IMeshBase::allCells(), ENUMERATE_CELL, Arcane::Item::localId(), Arcane::IMeshBase::ownCells(), et Arcane::Item::owner().
|
private |
Donne la taille en octets nécessaire pour le stockage mémoire d'un domaine (sans la liste des noeuds sur l'interface) en vue d'une communication.
@memo Donne la taille en octets d'une StructureBlocEtendu
Domaine | (I) StructureBlocEtendu |
Définition à la ligne 2054 du fichier SplitSDMeshPartitioner.cc.
Références Arcane::arcaneCheckArraySize().
|
private |
Donne la taille en octets nécessaire pour le stockage mémoire d'un entier pour le domaine chargé, un autre entier pour le domaine voisin, et un double pour le Delta (transfert en poids)
Définition à la ligne 2137 du fichier SplitSDMeshPartitioner.cc.
|
private |
Extrait un Domaine d'un tableau en provenance d'une communication.
@memo Extraction des données pour renseigner une StrucListeDomMail
TabTMP | (I) tableau d'où sont extraites les informations |
TailleTMP | (I) taille totale du tableau TabTMP |
comm | (I) environnement de communication pour la librairie |
DomMail | (I/O) StrucListeDomMail |
Définition à la ligne 2114 du fichier SplitSDMeshPartitioner.cc.
|
private |
Extrait les 2 entiers et le double d'un tableau en provenance d'une communication.
Définition à la ligne 2164 du fichier SplitSDMeshPartitioner.cc.
|
private |
fonction de vérification de la cohérence (réciprocité) des interfaces
Définition à la ligne 402 du fichier SplitSDMeshPartitioner.cc.
Références StrucListeDomMail::ListeVoisins, StrucListeVoisMail::NbNoeudsInterface, StrucListeDomMail::NbVoisins, et StrucListeVoisMail::NoDomVois.
|
private |
Définition à la ligne 342 du fichier SplitSDMeshPartitioner.h.