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) |
![]() | |
ArcaneSplitSDMeshPartitionerObject (const Arcane::ServiceBuildInfo &sbi) | |
Constructeur. | |
virtual | ~ArcaneSplitSDMeshPartitionerObject () |
Destructeur. | |
CaseOptionsSplitSDMeshPartitioner * | options () const |
Options du jeu de données du service. | |
![]() | |
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 () |
![]() | |
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. | |
![]() | |
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 |
![]() | |
virtual | ~IService () |
Libère les ressources. | |
![]() | |
virtual | ~IMeshPartitioner () |
Libère les ressources. | |
virtual IPrimaryMesh * | primaryMesh () override |
Maillage associé | |
![]() | |
virtual | ~IMeshPartitionerBase ()=default |
Libère les ressources. | |
Fonctions membres privées | |
void | init (bool initial_partition, StrucInfoProc *&InfoProc, StructureBlocEtendu *&Domaine, StrucMaillage *&Maillage) |
initialisation des structures | |
void | initPoids (bool initial_partition) |
initialisation des poids (m_cells_weight => m_poids_aux_mailles) | |
void | fin (StrucInfoProc *&InfoProc, StructureBlocEtendu *&Domaine, StrucMaillage *&Maillage) |
libération mémoire des structures | |
void | MAJDomaine (StructureBlocEtendu *Domaine) |
mise à jour de la structure locale (noeuds sur les interfaces avec sous-domaines voisins) | |
void | MAJMaillageMaitre (StrucInfoProc *InfoProc, StructureBlocEtendu *Domaine, StrucMaillage *Maillage) |
mise à jour de la structure sur le processeur 0 | |
void | verifMaillageMaitre (StrucMaillage *Maillage) |
fonction de vérification de la cohérence (réciprocité) des interfaces | |
void | MAJDeltaGlobal (StrucInfoProc *InfoProc, StrucMaillage *Maillage, double tolerance) |
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. | |
void | MAJDelta (double don, int iDOmTmpPrec, int iDomTmp, StrucListeDomMail *ListeDomaines) |
fonction de décalage du Delta associé à une interface recherchée pour un couple, domaine et numéro de voisin, spécifié | |
double | CalculDeltaMin (StrucMaillage *Maillage, double deltaMin, int iterEquilibrage, int NbMaxIterEquil) |
calcul un deltaMin en fonction des transferts locaux | |
void | Equilibrage (StrucInfoProc *InfoProc, StructureBlocEtendu *Domaine, StrucMaillage *Maillage) |
phase itérative pour équilibrer la charge | |
void | Equil2Dom (int *MasqueDesNoeuds, int *MasqueDesElements, int marqueVu, int marqueNonVu, StrucInfoProc *InfoProc, StructureBlocEtendu *Domaine, StrucMaillage *Maillage, int indDomCharge, int indDomVois, double Delta) |
phase de transfert entre 2 domaines, MAJ des domaines | |
void | SelectElements (int *MasqueDesNoeuds, int *MasqueDesElements, int marqueVu, int marqueNonVu, StrucInfoProc *InfoProc, StructureBlocEtendu *Domaine, double Delta, int indDomVois, Arcane::Array< Arcane::Cell > &ListeElements) |
sélection d'éléments dans un domaine pour équilibrage entre 2 dom, en faisant un parcour frontal depuis l'interface | |
int | ParcoursFrontalDelta (int *MasqueDesNoeuds, int *MasqueDesElements, int marqueVu, int marqueNonVu, double Delta, int *pNbFronts, int NbFrontsMax, Arcane::Array< Arcane::Node > &FrontsNoeuds, int *IndFrontsNoeuds, Arcane::Array< Arcane::Cell > &FrontsElements, int *IndFrontsElements) |
parcours frontal limité suivant le Delta (poids cumulés des éléments pris dans les fronts), retourne un en cas de blocage | |
void | LissageDuFront (int *MasqueDesNoeuds, int *MasqueDesElements, int marqueVu, int marqueNonVu, int NbFronts, Arcane::Array< Arcane::Node > &FrontsNoeuds, int *IndFrontsNoeuds, Arcane::Array< Arcane::Cell > &FrontsElements, int *IndFrontsElements) |
void | ConnexifieDomaine (StrucInfoProc *InfoProc, StructureBlocEtendu *Domaine, StrucMaillage *Maillage, double tolConnexite) |
déplace des parties du sous-domaine lorsqu'elles sont trop petites et non connexes | |
int | getDomVoisMaxFace (Arcane::Array< Arcane::Cell > &ListeElements, int me) |
recherche le domaine voisin ayant le max de Faces en commun avec le groupe de mailles | |
int * | GetMasqueDesNoeuds (StrucInfoProc *InfoProc) |
création d'un tableau qui sert de masque sur les LocalId des noeuds | |
int * | GetMasqueDesElements (StrucInfoProc *InfoProc) |
création d'un tableau qui sert de masque sur les LocalId des éléments | |
void | LibereInfoProc (StrucInfoProc *&InfoProc) |
void | LibereDomaine (StructureBlocEtendu *&Domaine) |
void | LibereMaillage (StrucMaillage *&Maillage) |
void | AfficheDomaine (int NbDom, StructureBlocEtendu *Domaine) |
void | AfficheMaillage (StrucMaillage *Maillage) |
void | AfficheListeDomaines (StrucListeDomMail *ListeDomaines, int NbDomaines) |
void | AfficheEquilMaillage (StrucMaillage *Maillage) |
void * | RecoitMessage (StrucInfoProc *InfoProc, int FromProc, int Tag, int *pTailleTMP) |
void | EnvoieMessage (StrucInfoProc *InfoProc, int ToProc, int Tag, void *TabTMP, int TailleTMP) |
void * | DiffuseMessage (StrucInfoProc *InfoProc, int FromProc, void *TabTMP, int TailleTMP) |
int | TailleDom (StructureBlocEtendu *Domaine) |
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. | |
void | PackDom (StrucInfoProc *InfoProc, StructureBlocEtendu *Domaine, void *TabTMP, int TailleTMP, MPI_Comm comm) |
void | UnpackDom (void *TabTMP, int TailleTMP, MPI_Comm comm, StrucListeDomMail *DomMail) |
int | TailleEquil () |
void | PackEquil (StrucInfoProc *InfoProc, int indDomCharge, int indDomVois, double Delta, void *TabTMP, int TailleTMP, MPI_Comm comm) |
void | UnpackEquil (void *TabTMP, int TailleTMP, MPI_Comm comm, int *indDomCharge, int *indDomVois, double *Delta) |
Attributs privés | |
VariableCellReal | m_poids_aux_mailles |
Membres hérités additionnels | |
![]() | |
enum | eMarkCellWithConstraint { eCellClassical , eCellReference , eCellGrouped , eCellGhost , eCellInAConstraint } |
![]() | |
template<typename ServiceClassType> | |
static void | fillServiceInfo (Arcane::ServiceInfo *si) |
![]() | |
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 () |
![]() | |
AbstractService (const ServiceBuildInfo &) | |
Constructeur à partir d'un ServiceBuildInfo. | |
![]() | |
void | _setLocalVerboseLevel (Int32 v) |
Int32 | _localVerboseLevel () const |
![]() | |
IService () | |
Constructeur. | |
![]() | |
IItemFamily * | m_cell_family = nullptr |
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.
|
inlinevirtual |
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(), Arcane::TraceAccessor::debug(), StrucListeVoisMail::Delta, Arcane::TraceAccessor::info(), StrucMaillage::ListeDomaines, StrucListeDomMail::ListeVoisins, StrucMaillage::NbDomainesMax, StrucMaillage::NbDomainesPleins, StrucListeDomMail::NbVoisins, StrucListeDomMail::Poids, et StrucMaillage::Poids.
Référencé par Equilibrage().
|
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::Array< DataType >::add(), Arcane::MeshPartitionerBase::changeOwnersFromCells(), Arcane::Array< DataType >::clear(), Arcane::IParallelMng::computeMinMaxSum(), ENUMERATE_CELL, getDomVoisMaxFace(), GetMasqueDesElements(), GetMasqueDesNoeuds(), Arcane::IK_Cell, Arcane::TraceAccessor::info(), Arcane::Item::localId(), MAJDomaine(), MAJMaillageMaitre(), StrucInfoProc::me, StructureBlocEtendu::NbElements, Arcane::Item::owner(), Arcane::ISubDomain::parallelMng(), ParcoursFrontalDelta(), Arcane::TraceAccessor::pfatal(), StructureBlocEtendu::PoidsDom, Arcane::AbstractArray< T >::size(), et Arcane::IMesh::toPrimaryMesh().
Référencé par Equilibrage().
|
private |
Fonction qui se charge d'envoyer un tableau avec une communication non bloquante.
{Remarque:} La taille du tableau est en octets.
@memo Envoi d'un message non-bloquants.
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). |
{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 DiffuseMessage(), StrucInfoProc::m_service, StrucInfoProc::me, Arcane::TraceAccessor::pfatal(), et StrucInfoProc::Split_Comm.
Référencé par DiffuseMessage(), et Equilibrage().
|
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 EnvoieMessage(), StrucInfoProc::m_service, StrucInfoProc::me, Arcane::TraceAccessor::pfatal(), et StrucInfoProc::Split_Comm.
Référencé par EnvoieMessage(), et MAJMaillageMaitre().
|
private |
phase de transfert entre 2 domaines, MAJ des domaines
Définition à la ligne 985 du fichier SplitSDMeshPartitioner.cc.
Références Arcane::TraceAccessor::debug(), Arcane::IK_Cell, Arcane::TraceAccessor::info(), StructureBlocEtendu::Intf, StrucInfoProc::me, StructureBlocEtendu::NbIntf, StructureInterface::NoDomVois, Arcane::TraceAccessor::pinfo(), SelectElements(), Arcane::AbstractArray< T >::size(), et Arcane::IMesh::toPrimaryMesh().
Référencé par Equilibrage().
|
private |
phase itérative pour équilibrer la charge
Définition à la ligne 770 du fichier SplitSDMeshPartitioner.cc.
Références CalculDeltaMin(), Arcane::MeshPartitionerBase::changeOwnersFromCells(), ConnexifieDomaine(), Arcane::TraceAccessor::debug(), StrucListeVoisMail::Delta, DiffuseMessage(), Equil2Dom(), GetMasqueDesElements(), GetMasqueDesNoeuds(), Arcane::IK_Cell, Arcane::TraceAccessor::info(), StrucMaillage::ListeDomaines, StrucListeDomMail::ListeVoisins, MAJDeltaGlobal(), MAJDomaine(), MAJMaillageMaitre(), Arcane::MeshPartitionerBase::maxImbalance(), StrucInfoProc::me, StrucMaillage::NbDomainesMax, StrucListeDomMail::NbElements, StrucListeDomMail::NbVoisins, StrucListeVoisMail::NoDomVois, PackEquil(), StrucListeDomMail::Poids, StrucMaillage::Poids, StrucInfoProc::Split_Comm, TailleEquil(), Arcane::IMesh::toPrimaryMesh(), et UnpackEquil().
Référencé par partitionMesh().
|
private |
libération mémoire des structures
Définition à la ligne 173 du fichier SplitSDMeshPartitioner.cc.
Références Arcane::TraceAccessor::info().
Référencé par partitionMesh().
|
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(), Arcane::Item::owner(), Arcane::TraceAccessor::pfatal(), Arcane::TraceAccessor::pinfo(), et Arcane::AbstractArray< T >::size().
Référencé par ConnexifieDomaine().
|
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 ENUMERATE_CELL, Arcane::TraceAccessor::info(), et Arcane::Item::localId().
Référencé par ConnexifieDomaine(), et Equilibrage().
|
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 ENUMERATE_NODE, Arcane::TraceAccessor::info(), et Arcane::Item::localId().
Référencé par ConnexifieDomaine(), et Equilibrage().
|
private |
initialisation des structures
Définition à la ligne 91 du fichier SplitSDMeshPartitioner.cc.
Références Arcane::MeshPartitionerBase::changeOwnersFromCells(), Arcane::IParallelMng::commSize(), ENUMERATE_CELL, Arcane::IK_Cell, Arcane::TraceAccessor::info(), initPoids(), StructureBlocEtendu::Intf, StrucMaillage::ListeDomaines, StrucInfoProc::m_service, MAJDomaine(), MAJMaillageMaitre(), StrucInfoProc::me, StrucMaillage::NbDomainesMax, StrucMaillage::NbDomainesPleins, StrucMaillage::NbElements, StructureBlocEtendu::NbElements, StructureBlocEtendu::NbIntf, StrucMaillage::NbProcsVides, StrucInfoProc::nbSubDomain, Arcane::Item::owner(), Arcane::ISubDomain::parallelMng(), StrucMaillage::Poids, StructureBlocEtendu::PoidsDom, StrucInfoProc::Split_Comm, et Arcane::ISubDomain::subDomainId().
Référencé par partitionMesh().
|
private |
initialisation des poids (m_cells_weight => m_poids_aux_mailles)
Définition à la ligne 151 du fichier SplitSDMeshPartitioner.cc.
Références ENUMERATE_CELL.
Référencé par init().
|
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::Array< DataType >::add(), Arcane::Node::cell(), Arcane::TraceAccessor::debug(), Arcane::TraceAccessor::info(), Arcane::Item::localId(), Arcane::Node::nbCell(), Arcane::ItemWithNodes::nbNode(), Arcane::ItemWithNodes::node(), et Arcane::AbstractArray< T >::size().
Référencé par SelectElements().
|
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, Arcane::TraceAccessor::info(), StrucListeDomMail::ListeVoisins, StrucListeDomMail::NbVoisins, StrucListeVoisMail::NoDomVois, et Arcane::TraceAccessor::pfatal().
Référencé par MAJDeltaGlobal().
|
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 Arcane::TraceAccessor::fatal(), Arcane::TraceAccessor::info(), StrucMaillage::ListeDomaines, StrucListeDomMail::ListeVoisins, MAJDelta(), StrucMaillage::NbDomainesMax, StrucMaillage::NbDomainesPleins, StrucListeDomMail::NbVoisins, StrucListeVoisMail::NoDomVois, StrucListeDomMail::Poids, et StrucMaillage::Poids.
Référencé par Equilibrage().
|
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::Array< DataType >::add(), Arccore::Array< DataType >::add(), Arcane::arcaneCheckArraySize(), Arcane::Face::backCell(), Arcane::Array< DataType >::begin(), Arcane::TraceAccessor::debug(), ENUMERATE_CELL, ENUMERATE_FACE, Arcane::Array< DataType >::fill(), Arcane::Face::frontCell(), Arcane::TraceAccessor::info(), StructureBlocEtendu::Intf, Arcane::Face::isSubDomainBoundary(), StructureInterface::ListeNoeuds, Arcane::Item::localId(), StructureBlocEtendu::NbElements, StructureBlocEtendu::NbIntf, Arcane::ItemWithNodes::nbNode(), Arcane::ItemWithNodes::node(), StructureInterface::NoDomVois, Arcane::Item::owner(), StructureBlocEtendu::PoidsDom, Arcane::AbstractArray< T >::size(), et Arcane::ItemGroup::size().
Référencé par ConnexifieDomaine(), Equilibrage(), et init().
|
private |
mise à jour de la structure sur le processeur 0
Définition à la ligne 304 du fichier SplitSDMeshPartitioner.cc.
Références EnvoieMessage(), Arcane::TraceAccessor::info(), StrucMaillage::ListeDomaines, StrucListeDomMail::ListeVoisins, StrucInfoProc::me, StrucMaillage::NbDomainesPleins, StrucListeDomMail::NbElements, StrucMaillage::NbElements, StrucMaillage::NbProcsVides, StrucInfoProc::nbSubDomain, StrucListeDomMail::NbVoisins, PackDom(), StrucListeDomMail::Poids, StrucMaillage::Poids, RecoitMessage(), StrucInfoProc::Split_Comm, TailleDom(), UnpackDom(), et verifMaillageMaitre().
Référencé par ConnexifieDomaine(), Equilibrage(), et init().
|
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.
Références StructureBlocEtendu::Intf, StructureInterface::ListeNoeuds, StructureBlocEtendu::NbElements, StructureBlocEtendu::NbIntf, StructureInterface::NoDomVois, StructureBlocEtendu::PoidsDom, et Arcane::AbstractArray< T >::size().
Référencé par MAJMaillageMaitre().
|
private |
Stocke les 2 entiers et le double
Définition à la ligne 2146 du fichier SplitSDMeshPartitioner.cc.
Références PackEquil().
Référencé par Equilibrage(), et PackEquil().
|
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::Array< DataType >::add(), Arcane::Node::cell(), Arcane::TraceAccessor::info(), Arcane::Item::localId(), Arcane::Node::nbCell(), Arcane::ItemWithNodes::nbNode(), Arcane::ItemWithNodes::node(), et Arcane::AbstractArray< T >::size().
Référencé par ConnexifieDomaine(), et SelectElements().
|
virtual |
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.
Références Equilibrage(), fin(), Arcane::TraceAccessor::info(), et init().
|
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 StrucInfoProc::m_service, StrucInfoProc::me, Arcane::TraceAccessor::pfatal(), RecoitMessage(), et StrucInfoProc::Split_Comm.
Référencé par MAJMaillageMaitre(), et RecoitMessage().
|
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::Array< DataType >::add(), ENUMERATE_CELL, Arcane::TraceAccessor::info(), StructureBlocEtendu::Intf, LissageDuFront(), StructureInterface::ListeNoeuds, Arcane::Item::localId(), StructureBlocEtendu::NbElements, StructureBlocEtendu::NbIntf, StructureInterface::NoDomVois, Arcane::Item::owner(), ParcoursFrontalDelta(), Arcane::TraceAccessor::perror(), Arcane::TraceAccessor::pfatal(), Arcane::TraceAccessor::pinfo(), StructureBlocEtendu::PoidsDom, et Arcane::AbstractArray< T >::size().
Référencé par Equil2Dom().
|
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(), et StructureBlocEtendu::NbIntf.
Référencé par MAJMaillageMaitre().
|
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.
Références TailleEquil().
Référencé par Equilibrage(), et TailleEquil().
|
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.
Références StrucListeVoisMail::Delta, StrucListeDomMail::ListeVoisins, StrucListeDomMail::NbElements, StrucListeVoisMail::NbNoeudsInterface, StrucListeDomMail::NbVoisins, StrucListeVoisMail::NoDomVois, StrucListeDomMail::Poids, et UnpackDom().
Référencé par MAJMaillageMaitre(), et UnpackDom().
|
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.
Références UnpackEquil().
Référencé par Equilibrage(), et UnpackEquil().
|
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 Arcane::TraceAccessor::info(), StrucMaillage::ListeDomaines, StrucListeDomMail::ListeVoisins, StrucMaillage::NbDomainesPleins, StrucListeVoisMail::NbNoeudsInterface, StrucListeDomMail::NbVoisins, StrucListeVoisMail::NoDomVois, et Arcane::TraceAccessor::perror().
Référencé par MAJMaillageMaitre().
|
private |
Définition à la ligne 342 du fichier SplitSDMeshPartitioner.h.