Partitioneur de maillage inspiré de la bibliothèque SplitSD, développé initialement à l'ONERA pour Dassault Aviation. Plus de détails...
#include <arcane/cea/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 |
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. | |
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 223 du fichier SplitSDMeshPartitioner.h.
Arcane::SplitSDMeshPartitioner::SplitSDMeshPartitioner | ( | const ServiceBuildInfo & | sbi | ) |
Définition à la ligne 51 du fichier SplitSDMeshPartitioner.cc.
|
private |
Définition à la ligne 1727 du fichier SplitSDMeshPartitioner.cc.
|
private |
Définition à la ligne 1801 du fichier SplitSDMeshPartitioner.cc.
|
private |
Définition à la ligne 1785 du fichier SplitSDMeshPartitioner.cc.
|
private |
Définition à la ligne 1758 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 233 du fichier SplitSDMeshPartitioner.h.
|
private |
calcul un deltaMin en fonction des transferts locaux
Définition à la ligne 708 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 1349 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 2009 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 1929 du fichier SplitSDMeshPartitioner.cc.
Références Arccore::TraceAccessor::pfatal().
|
private |
phase de transfert entre 2 domaines, MAJ des domaines
Définition à la ligne 986 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 771 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 174 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 1566 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 1642 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 1616 du fichier SplitSDMeshPartitioner.cc.
Références Arcane::IMeshBase::allNodes(), ENUMERATE_NODE, et Arcane::Item::localId().
|
private |
initialisation des structures
Définition à la ligne 92 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 152 du fichier SplitSDMeshPartitioner.cc.
Références ENUMERATE_CELL, et Arcane::IMeshBase::ownCells().
|
private |
Définition à la ligne 1679 du fichier SplitSDMeshPartitioner.cc.
|
private |
Définition à la ligne 1670 du fichier SplitSDMeshPartitioner.cc.
|
private |
Définition à la ligne 1701 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 1293 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 684 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 444 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 192 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 305 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 2076 du fichier SplitSDMeshPartitioner.cc.
|
private |
Stocke les 2 entiers et le double
Définition à la ligne 2147 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 1163 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 62 du fichier SplitSDMeshPartitioner.cc.
|
inlinevirtual |
Implémente Arcane::IMeshPartitioner.
Définition à la ligne 238 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 1852 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 1040 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 2055 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 2138 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 2115 du fichier SplitSDMeshPartitioner.cc.
|
private |
Extrait les 2 entiers et le double d'un tableau en provenance d'une communication.
Définition à la ligne 2165 du fichier SplitSDMeshPartitioner.cc.
|
private |
fonction de vérification de la cohérence (réciprocité) des interfaces
Définition à la ligne 403 du fichier SplitSDMeshPartitioner.cc.
Références StrucListeDomMail::ListeVoisins, StrucListeVoisMail::NbNoeudsInterface, StrucListeDomMail::NbVoisins, et StrucListeVoisMail::NoDomVois.
|
private |
Définition à la ligne 345 du fichier SplitSDMeshPartitioner.h.