Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
Arcane::SplitSDMeshPartitioner Class Reference

Mesh partitioner inspired by the SplitSD library, developed initially at ONERA for Dassault Aviation. More...

#include <arcane/std/SplitSDMeshPartitioner.h>

Inheritance diagram for Arcane::SplitSDMeshPartitioner:
Collaboration diagram for Arcane::SplitSDMeshPartitioner:

Public Member Functions

 SplitSDMeshPartitioner (const ServiceBuildInfo &sbi)
virtual void build ()
 Build-level construction of the service.
virtual void partitionMesh (bool initial_partition)
virtual void partitionMesh (bool initial_partition, Int32 nb_part)
Public Member Functions inherited from Arcane::ArcaneSplitSDMeshPartitionerObject
 ArcaneSplitSDMeshPartitionerObject (const Arcane::ServiceBuildInfo &sbi)
 Constructeur.
virtual ~ArcaneSplitSDMeshPartitionerObject ()
 Destructeur.
CaseOptionsSplitSDMeshPartitioneroptions () const
 Options du jeu de données du service.
Public Member Functions inherited from Arcane::MeshPartitionerBase
 MeshPartitionerBase (const ServiceBuildInfo &sbi)
ISubDomainsubDomain () const
IMeshmesh () const override
 Mesh associated with the partitioner.
void setMaximumComputationTime (Real v) override
 Sets the proportion of computation time.
Real maximumComputationTime () const override
void setImbalance (Real v) override
 Sets the computation time imbalance.
Real imbalance () const override
 Computation time imbalance.
void setMaxImbalance (Real v) override
 Sets the maximum allowed imbalance.
Real maxImbalance () const override
 Maximum allowed imbalance.
void setComputationTimes (RealConstArrayView v) override
 Computation time of this subdomain. The first element indicates the computation time of the subdomain corresponding to calculations whose cost is proportional to the cells. The following must be associated with a variable (to be done).
RealConstArrayView computationTimes () const override
void setCellsWeight (ArrayView< float > weights, Integer nb_weight) override
 Allows defining the weights of objects to be partitioned: ILoadBalanceMng must now be used.
ArrayView< float > cellsWeight () const override
Integer nbCellWeight () const
void setILoadBalanceMng (ILoadBalanceMng *mng) override
 Changes the ILoadBalanceMng to use.
ILoadBalanceMngloadBalanceMng () const override
void notifyEndPartition () override
 Notification when a re-partitioning finishes (after entity exchange).
virtual void changeOwnersFromCells ()
 Positions the new owners of nodes, edges and faces based on the cells.
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 ()
Public Member Functions inherited from Arcane::AbstractService
 ~AbstractService () override
 Destructor.
IServiceInfoserviceInfo () const override
 Access to service information. See IServiceInfo for details.
IBaseserviceParent () const override
 Access to the base interface of main Arcane objects.
IServiceserviceInterface () override
 Returns the low-level IService interface of the service.
Public Member Functions inherited from Arcane::TraceAccessor
 TraceAccessor (ITraceMng *m)
 Constructs an accessor via the trace manager m.
 TraceAccessor (const TraceAccessor &rhs)
 Copy constructor.
TraceAccessoroperator= (const TraceAccessor &rhs)
 Copy assignment operator.
virtual ~TraceAccessor ()
 Frees resources.
ITraceMngtraceMng () const
 Trace manager.
TraceMessage info () const
 Flow for an information message.
TraceMessage pinfo () const
 Flow for a parallel information message.
TraceMessage info (char category) const
 Flow for an information message of a given category.
TraceMessage pinfo (char category) const
 Flow for a parallel information message of a given category.
TraceMessage info (bool v) const
 Flow for an information message.
TraceMessage warning () const
 Flow for a warning message.
TraceMessage pwarning () const
TraceMessage error () const
 Flow for an error message.
TraceMessage perror () const
TraceMessage log () const
 Flow for a log message.
TraceMessage plog () const
 Flow for a log message.
TraceMessage logdate () const
 Flow for a log message preceded by the date.
TraceMessage fatal () const
 Flow for a fatal error message.
TraceMessage pfatal () const
 Flow for a parallel fatal error message.
TraceMessageDbg debug (Trace::eDebugLevel=Trace::Medium) const
 Flow for a debug message.
Trace::eDebugLevel configDbgLevel () const
 Debug level of the configuration file.
TraceMessage info (Int32 verbose_level) const
 Flow for an information message of a given level.
TraceMessage linfo () const
 Flow for an information message with the local information level of this instance.
TraceMessage linfo (Int32 relative_level) const
 Flow for an information message with the local information level of this instance.
void fatalMessage (const StandaloneTraceMessage &o) const
Public Member Functions inherited from Arcane::IService
virtual ~IService ()
 Releases resources.
Public Member Functions inherited from Arcane::IMeshPartitioner
virtual IPrimaryMeshprimaryMesh () override
 Associated mesh.
Public Member Functions inherited from Arcane::IMeshPartitionerBase
virtual ~IMeshPartitionerBase ()=default
 Releases resources.

Private Member Functions

void init (bool initial_partition, StrucInfoProc *&InfoProc, StructureBlocEtendu *&Domaine, StrucMaillage *&Maillage)
 initialization of structures
void initPoids (bool initial_partition)
 initialization of weights (m_cells_weight => m_poids_aux_mailles)
void fin (StrucInfoProc *&InfoProc, StructureBlocEtendu *&Domaine, StrucMaillage *&Maillage)
 memory freeing of structures
void MAJDomaine (StructureBlocEtendu *Domaine)
 update of the local structure (nodes on interfaces with neighboring subdomains)
void MAJMaillageMaitre (StrucInfoProc *InfoProc, StructureBlocEtendu *Domaine, StrucMaillage *Maillage)
 update of the structure on processor 0
void verifMaillageMaitre (StrucMaillage *Maillage)
 consistency check (reciprocity) of the interfaces
void MAJDeltaGlobal (StrucInfoProc *InfoProc, StrucMaillage *Maillage, double tolerance)
 We use a front-tracking method to go from an overloaded node to other nodes by memorizing the path to update the Deltas on the interfaces.
void MAJDelta (double don, int iDOmTmpPrec, int iDomTmp, StrucListeDomMail *ListeDomaines)
 function to shift the Delta associated with a searched interface for a pair, domain, and neighbor number, specified
double CalculDeltaMin (StrucMaillage *Maillage, double deltaMin, int iterEquilibrage, int NbMaxIterEquil)
 calculates a deltaMin based on local transfers
void Equilibrage (StrucInfoProc *InfoProc, StructureBlocEtendu *Domaine, StrucMaillage *Maillage)
 iterative phase to balance the load
void Equil2Dom (int *MasqueDesNoeuds, int *MasqueDesElements, int marqueVu, int marqueNonVu, StrucInfoProc *InfoProc, StructureBlocEtendu *Domaine, StrucMaillage *Maillage, int indDomCharge, int indDomVois, double Delta)
 transfer phase between 2 domains, MAJ of domains
void SelectElements (int *MasqueDesNoeuds, int *MasqueDesElements, int marqueVu, int marqueNonVu, StrucInfoProc *InfoProc, StructureBlocEtendu *Domaine, double Delta, int indDomVois, Arcane::Array< Arcane::Cell > &ListeElements)
 selection of elements in a domain for balancing between 2 domains, by performing a front-tracking from the 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)
 limited front-tracking following the Delta (cumulative weight of elements taken in the fronts), returns an integer in case of blockage
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)
 makes the domain connected when parts are too small and not connected
int getDomVoisMaxFace (Arcane::Array< Arcane::Cell > &ListeElements, int me)
 searches for the neighboring domain having the max number of shared Faces with the set of cells
int * GetMasqueDesNoeuds (StrucInfoProc *InfoProc)
 creation of an array that serves as a mask on the LocalId of nodes
int * GetMasqueDesElements (StrucInfoProc *InfoProc)
 creation of an array that serves as a mask on the LocalId of elements
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)
 Gives the size in bytes required for the memory storage of a domain (without the list of interface nodes) for communication purposes.
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)

Private Attributes

VariableCellReal m_poids_aux_mailles

Additional Inherited Members

Public Types inherited from Arcane::MeshPartitionerBase
enum  eMarkCellWithConstraint {
  eCellClassical , eCellReference , eCellGrouped , eCellGhost ,
  eCellInAConstraint
}
Static Public Member Functions inherited from Arcane::ArcaneSplitSDMeshPartitionerObject
template<typename ServiceClassType>
static void fillServiceInfo (Arcane::ServiceInfo *si)
Protected Member Functions inherited from Arcane::MeshPartitionerBase
virtual void dumpObject (String filename="toto")
 Dumps the partitioning information to disk.
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
Protected Member Functions inherited from Arcane::AbstractService
 AbstractService (const ServiceBuildInfo &)
 Constructor from a ServiceBuildInfo.
Protected Member Functions inherited from Arcane::TraceAccessor
void _setLocalVerboseLevel (Int32 v)
Int32 _localVerboseLevel () const
Protected Member Functions inherited from Arcane::IService
 IService ()
 Constructor.
Protected Attributes inherited from Arcane::MeshPartitionerBase
IItemFamilym_cell_family = nullptr

Detailed Description

Mesh partitioner inspired by the SplitSD library, developed initially at ONERA for Dassault Aviation.

Definition at line 227 of file SplitSDMeshPartitioner.h.

Constructor & Destructor Documentation

◆ SplitSDMeshPartitioner()

Arcane::SplitSDMeshPartitioner::SplitSDMeshPartitioner ( const ServiceBuildInfo & sbi)

Definition at line 48 of file SplitSDMeshPartitioner.cc.

Member Function Documentation

◆ AfficheDomaine()

void Arcane::SplitSDMeshPartitioner::AfficheDomaine ( int NbDom,
StructureBlocEtendu * Domaine )
private

Definition at line 1709 of file SplitSDMeshPartitioner.cc.

◆ AfficheEquilMaillage()

void Arcane::SplitSDMeshPartitioner::AfficheEquilMaillage ( StrucMaillage * Maillage)
private

Definition at line 1783 of file SplitSDMeshPartitioner.cc.

◆ AfficheListeDomaines()

void Arcane::SplitSDMeshPartitioner::AfficheListeDomaines ( StrucListeDomMail * ListeDomaines,
int NbDomaines )
private

Definition at line 1767 of file SplitSDMeshPartitioner.cc.

◆ AfficheMaillage()

void Arcane::SplitSDMeshPartitioner::AfficheMaillage ( StrucMaillage * Maillage)
private

Definition at line 1740 of file SplitSDMeshPartitioner.cc.

◆ build()

virtual void Arcane::SplitSDMeshPartitioner::build ( void )
inlinevirtual

Build-level construction of the service.

This method is called right after the constructor.

Reimplemented from Arcane::AbstractService.

Definition at line 237 of file SplitSDMeshPartitioner.h.

◆ CalculDeltaMin()

double Arcane::SplitSDMeshPartitioner::CalculDeltaMin ( StrucMaillage * Maillage,
double deltaMin,
int iterEquilibrage,
int NbMaxIterEquil )
private

calculates a deltaMin based on local transfers

Definition at line 701 of file SplitSDMeshPartitioner.cc.

References Arcane::arcaneIsDebug(), Arcane::TraceAccessor::debug(), StrucListeVoisMail::Delta, Arcane::TraceAccessor::info(), StrucMaillage::ListeDomaines, StrucListeDomMail::ListeVoisins, StrucMaillage::NbDomainesMax, StrucMaillage::NbDomainesPleins, StrucListeDomMail::NbVoisins, StrucListeDomMail::Poids, and StrucMaillage::Poids.

Referenced by Equilibrage().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ConnexifieDomaine()

void Arcane::SplitSDMeshPartitioner::ConnexifieDomaine ( StrucInfoProc * InfoProc,
StructureBlocEtendu * Domaine,
StrucMaillage * Maillage,
double tolConnexite )
private

makes the domain connected when parts are too small and not connected

Definition at line 1333 of file SplitSDMeshPartitioner.cc.

References Arcane::Array< T >::add(), Arcane::MeshPartitionerBase::changeOwnersFromCells(), Arcane::Array< T >::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(), and Arcane::IMesh::toPrimaryMesh().

Referenced by Equilibrage().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DiffuseMessage()

void * Arcane::SplitSDMeshPartitioner::DiffuseMessage ( StrucInfoProc * InfoProc,
int FromProc,
void * TabTMP,
int TailleTMP )
private

Function responsible for sending an array with non-blocking communication.

{Note:} The array size is in bytes.

@memo Sending a non-blocking message.

Parameters
InfoProc(I) structure describing the processor on which the application runs.
ToProc(I) destination computing node.
Tag(I) tag to differentiate messages.
TabTMP(I) array that is sent.
TailleTMP(I) size of TabTMP (in bytes).
Returns
(MPI_Request*) prequest: pointer to an MPI-specific structure for message management.
See also
Author
Eric Brière de l'Isle, ONERA, DRIS/SRL
Version
Created December 1998 Function responsible for broadcasting an array (sending and receiving). An MPI_Bcast is used, but the array size must be known on all processors.

{Note:} The array size is in bytes.

@memo Broadcasting a message.

Parameters
InfoProc(I) structure describing the processor on which the application runs.
FromProc(I) computing node from which the array is broadcast.
TabTMP(I) array that is sent.
TailleTMP(I) size of TabTMP (in bytes).
Returns
(void *) TabTMP: the array that is received.
See also
Equilibrage
Author
Eric Brière de l'Isle, ONERA, DRIS/SRL
Version
Created October 1998

Definition at line 1984 of file SplitSDMeshPartitioner.cc.

References DiffuseMessage(), StrucInfoProc::m_service, StrucInfoProc::me, Arcane::TraceAccessor::pfatal(), and StrucInfoProc::Split_Comm.

Referenced by DiffuseMessage(), and Equilibrage().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ EnvoieMessage()

void Arcane::SplitSDMeshPartitioner::EnvoieMessage ( StrucInfoProc * InfoProc,
int ToProc,
int Tag,
void * TabTMP,
int TailleTMP )
private

Function responsible for sending an array.

{Note:} The array size is in bytes.

@memo Sending a message.

Parameters
InfoProc(I) structure describing the processor on which the application runs.
ToProc(I) destination computing node.
Tag(I) tag to differentiate messages.
TabTMP(I) array that is sent.
TailleTMP(I) size of TabTMP (in bytes).
Returns
void
See also
Equilibrage,MAJMaillageMaitre
Author
Eric Brière de l'Isle, ONERA, DRIS/SRL
Version
Created January 1997 - 26/08/98

Definition at line 1906 of file SplitSDMeshPartitioner.cc.

References EnvoieMessage(), StrucInfoProc::m_service, StrucInfoProc::me, Arcane::TraceAccessor::pfatal(), and StrucInfoProc::Split_Comm.

Referenced by EnvoieMessage(), and MAJMaillageMaitre().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Equil2Dom()

void Arcane::SplitSDMeshPartitioner::Equil2Dom ( int * MasqueDesNoeuds,
int * MasqueDesElements,
int marqueVu,
int marqueNonVu,
StrucInfoProc * InfoProc,
StructureBlocEtendu * Domaine,
StrucMaillage * Maillage,
int indDomCharge,
int indDomVois,
double Delta )
private

transfer phase between 2 domains, MAJ of domains

Definition at line 973 of file SplitSDMeshPartitioner.cc.

References 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(), and Arcane::IMesh::toPrimaryMesh().

Referenced by Equilibrage().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Equilibrage()

void Arcane::SplitSDMeshPartitioner::Equilibrage ( StrucInfoProc * InfoProc,
StructureBlocEtendu * Domaine,
StrucMaillage * Maillage )
private

◆ fin()

void Arcane::SplitSDMeshPartitioner::fin ( StrucInfoProc *& InfoProc,
StructureBlocEtendu *& Domaine,
StrucMaillage *& Maillage )
private

memory freeing of structures

Definition at line 171 of file SplitSDMeshPartitioner.cc.

References Arcane::TraceAccessor::info().

Referenced by partitionMesh().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getDomVoisMaxFace()

int Arcane::SplitSDMeshPartitioner::getDomVoisMaxFace ( Arcane::Array< Arcane::Cell > & ListeElements,
int me )
private

searches for the neighboring domain having the max number of shared Faces with the set of cells

Definition at line 1548 of file SplitSDMeshPartitioner.cc.

References Arcane::Face::backCell(), Arcane::Cell::face(), Arcane::Face::frontCell(), Arcane::Face::isSubDomainBoundary(), Arcane::Cell::nbFace(), Arcane::Item::owner(), Arcane::TraceAccessor::pfatal(), Arcane::TraceAccessor::pinfo(), and Arcane::AbstractArray< T >::size().

Referenced by ConnexifieDomaine().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetMasqueDesElements()

int * Arcane::SplitSDMeshPartitioner::GetMasqueDesElements ( StrucInfoProc * InfoProc)
private

creation of an array that serves as a mask on the LocalId of elements

Definition at line 1624 of file SplitSDMeshPartitioner.cc.

References ENUMERATE_CELL, Arcane::TraceAccessor::info(), and Arcane::Item::localId().

Referenced by ConnexifieDomaine(), and Equilibrage().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetMasqueDesNoeuds()

int * Arcane::SplitSDMeshPartitioner::GetMasqueDesNoeuds ( StrucInfoProc * InfoProc)
private

creation of an array that serves as a mask on the LocalId of nodes

Definition at line 1598 of file SplitSDMeshPartitioner.cc.

References ENUMERATE_NODE, Arcane::TraceAccessor::info(), and Arcane::Item::localId().

Referenced by ConnexifieDomaine(), and Equilibrage().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ init()

void Arcane::SplitSDMeshPartitioner::init ( bool initial_partition,
StrucInfoProc *& InfoProc,
StructureBlocEtendu *& Domaine,
StrucMaillage *& Maillage )
private

◆ initPoids()

void Arcane::SplitSDMeshPartitioner::initPoids ( bool initial_partition)
private

initialization of weights (m_cells_weight => m_poids_aux_mailles)

Definition at line 149 of file SplitSDMeshPartitioner.cc.

References ENUMERATE_CELL.

Referenced by init().

Here is the caller graph for this function:

◆ LibereDomaine()

void Arcane::SplitSDMeshPartitioner::LibereDomaine ( StructureBlocEtendu *& Domaine)
private

Definition at line 1661 of file SplitSDMeshPartitioner.cc.

◆ LibereInfoProc()

void Arcane::SplitSDMeshPartitioner::LibereInfoProc ( StrucInfoProc *& InfoProc)
private

Definition at line 1652 of file SplitSDMeshPartitioner.cc.

◆ LibereMaillage()

void Arcane::SplitSDMeshPartitioner::LibereMaillage ( StrucMaillage *& Maillage)
private

Definition at line 1683 of file SplitSDMeshPartitioner.cc.

◆ LissageDuFront()

void Arcane::SplitSDMeshPartitioner::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 )
private

smoothing of the last front obtained by front-tracking, in order to include in this front the elements whose all nodes are already taken in previous fronts

Definition at line 1277 of file SplitSDMeshPartitioner.cc.

References Arcane::Array< T >::add(), Arcane::Node::cell(), Arcane::TraceAccessor::debug(), Arcane::TraceAccessor::info(), Arcane::Item::localId(), Arcane::Node::nbCell(), Arcane::ItemWithNodes::nbNode(), Arcane::ItemWithNodes::node(), and Arcane::AbstractArray< T >::size().

Referenced by SelectElements().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MAJDelta()

void Arcane::SplitSDMeshPartitioner::MAJDelta ( double don,
int iDOmTmpPrec,
int iDomTmp,
StrucListeDomMail * ListeDomaines )
private

function to shift the Delta associated with a searched interface for a pair, domain, and neighbor number, specified

Definition at line 679 of file SplitSDMeshPartitioner.cc.

References StrucListeVoisMail::Delta, Arcane::TraceAccessor::info(), StrucListeDomMail::ListeVoisins, StrucListeDomMail::NbVoisins, StrucListeVoisMail::NoDomVois, and Arcane::TraceAccessor::pfatal().

Referenced by MAJDeltaGlobal().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MAJDeltaGlobal()

void Arcane::SplitSDMeshPartitioner::MAJDeltaGlobal ( StrucInfoProc * InfoProc,
StrucMaillage * Maillage,
double tolerance )
private

We use a front-tracking method to go from an overloaded node to other nodes by memorizing the path to update the Deltas on the interfaces.

Definition at line 439 of file SplitSDMeshPartitioner.cc.

References Arcane::TraceAccessor::fatal(), Arcane::TraceAccessor::info(), StrucMaillage::ListeDomaines, StrucListeDomMail::ListeVoisins, MAJDelta(), StrucMaillage::NbDomainesMax, StrucMaillage::NbDomainesPleins, StrucListeDomMail::NbVoisins, StrucListeVoisMail::NoDomVois, StrucListeDomMail::Poids, and StrucMaillage::Poids.

Referenced by Equilibrage().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MAJDomaine()

void Arcane::SplitSDMeshPartitioner::MAJDomaine ( StructureBlocEtendu * Domaine)
private

◆ MAJMaillageMaitre()

void Arcane::SplitSDMeshPartitioner::MAJMaillageMaitre ( StrucInfoProc * InfoProc,
StructureBlocEtendu * Domaine,
StrucMaillage * Maillage )
private

update of the structure on processor 0

Definition at line 302 of file SplitSDMeshPartitioner.cc.

References 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(), and verifMaillageMaitre().

Referenced by ConnexifieDomaine(), Equilibrage(), and init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ PackDom()

void Arcane::SplitSDMeshPartitioner::PackDom ( StrucInfoProc * InfoProc,
StructureBlocEtendu * Domaine,
void * TabTMP,
int TailleTMP,
MPI_Comm comm )
private

Stores the content of a Domain in an array for communication (without the list of interface nodes).

@memo Storing a StructureBlocEtendu in an array.

Parameters
Domaine(I) StructureBlocEtendu
TabTMP(I/O) array that is filled
TailleTMP(I) total size of the TabTMP array
comm(I) communication environment
Returns
void
See also
TailleDom, UnpackDom
Author
Eric Brière de l'Isle, November 2007

Definition at line 2046 of file SplitSDMeshPartitioner.cc.

References StructureBlocEtendu::Intf, StructureInterface::ListeNoeuds, StructureBlocEtendu::NbElements, StructureBlocEtendu::NbIntf, StructureInterface::NoDomVois, StructureBlocEtendu::PoidsDom, and Arccore::AbstractArray< T >::size().

Referenced by MAJMaillageMaitre().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ PackEquil()

void Arcane::SplitSDMeshPartitioner::PackEquil ( StrucInfoProc * InfoProc,
int indDomCharge,
int indDomVois,
double Delta,
void * TabTMP,
int TailleTMP,
MPI_Comm comm )
private

Stores the 2 integers and the double

Definition at line 2117 of file SplitSDMeshPartitioner.cc.

References PackEquil().

Referenced by Equilibrage(), and PackEquil().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ParcoursFrontalDelta()

int Arcane::SplitSDMeshPartitioner::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 )
private

limited front-tracking following the Delta (cumulative weight of elements taken in the fronts), returns an integer in case of blockage

Definition at line 1149 of file SplitSDMeshPartitioner.cc.

References Arcane::Array< T >::add(), Arcane::Node::cell(), Arcane::TraceAccessor::info(), Arcane::Item::localId(), Arcane::Node::nbCell(), Arcane::ItemWithNodes::nbNode(), Arcane::ItemWithNodes::node(), and Arcane::AbstractArray< T >::size().

Referenced by ConnexifieDomaine(), and SelectElements().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ partitionMesh() [1/2]

void Arcane::SplitSDMeshPartitioner::partitionMesh ( bool initial_partition)
virtual

Re-partitions the mesh mesh

This method changes the owners of the entities and fills the IItemFamily::itemsNewOwner() variable of each entity family of the mesh mesh with the number of the new owning subdomain.

Note
This method is reserved for Arcane developers. If a module wishes to perform a re-partitioning, it must call the method IMeshUtilities::partitionAndExchangeMeshWithReplication() which handles both the partitioning and the exchange of information and supports domain replication.

Reimplemented from Arcane::IMeshPartitioner.

Definition at line 59 of file SplitSDMeshPartitioner.cc.

References Equilibrage(), fin(), Arcane::TraceAccessor::info(), and init().

Here is the call graph for this function:

◆ partitionMesh() [2/2]

virtual void Arcane::SplitSDMeshPartitioner::partitionMesh ( bool initial_partition,
Int32 nb_part )
inlinevirtual

Implements Arcane::IMeshPartitioner.

Definition at line 242 of file SplitSDMeshPartitioner.h.

◆ RecoitMessage()

void * Arcane::SplitSDMeshPartitioner::RecoitMessage ( StrucInfoProc * InfoProc,
int FromProc,
int Tag,
int * pTailleTMP )
private

Receives an array of unknown size via MPI. Allocates this array and returns it (as output).

{Note:} the array size is positive when known; otherwise, MPI_Probe and MPI_Get_count functions are called to determine the size.

@memo Receiving an array using the MPI communication library.

Parameters
InfoProc(I) structure describing the processor on which the application runs.
FromProc(I) number of the sending processor.
Tag(I) tag to distinguish messages.
pTailleTMP(I/O) pointer to the size in bytes of the TabTMP array: <=0 if the array size is unknown > 0 if the array size is known.
Returns
(void*) TabTMP: the array that is sent.
See also
MAJMaillageMaitre
Author
Eric Brière de l'Isle, ONERA, DRIS/SRL
Version
Created September 1996 - 26/08/98

Definition at line 1833 of file SplitSDMeshPartitioner.cc.

References StrucInfoProc::m_service, StrucInfoProc::me, Arcane::TraceAccessor::pfatal(), RecoitMessage(), and StrucInfoProc::Split_Comm.

Referenced by MAJMaillageMaitre(), and RecoitMessage().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SelectElements()

void Arcane::SplitSDMeshPartitioner::SelectElements ( int * MasqueDesNoeuds,
int * MasqueDesElements,
int marqueVu,
int marqueNonVu,
StrucInfoProc * InfoProc,
StructureBlocEtendu * Domaine,
double Delta,
int indDomVois,
Arcane::Array< Arcane::Cell > & ListeElements )
private

selection of elements in a domain for balancing between 2 domains, by performing a front-tracking from the interface

Definition at line 1025 of file SplitSDMeshPartitioner.cc.

References Arcane::Array< T >::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, Arcane::AbstractArray< T >::size(), and Arccore::AbstractArray< T >::size().

Referenced by Equil2Dom().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ TailleDom()

Integer Arcane::SplitSDMeshPartitioner::TailleDom ( StructureBlocEtendu * Domaine)
private

Gives the size in bytes required for the memory storage of a domain (without the list of interface nodes) for communication purposes.

@memo Gives the size in bytes of a StructureBlocEtendu

Parameters
Domaine(I) StructureBlocEtendu
Returns
(int) : the size in bytes
See also
PackDom, UnpackDom
Author
Eric Brière de l'Isle, November 2007

Definition at line 2025 of file SplitSDMeshPartitioner.cc.

References Arcane::arcaneCheckArraySize(), and StructureBlocEtendu::NbIntf.

Referenced by MAJMaillageMaitre().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ TailleEquil()

int Arcane::SplitSDMeshPartitioner::TailleEquil ( )
private

Gives the size in bytes required for the memory storage of an integer for the loaded domain, another integer for the neighbor domain, and a double for Delta (weight transfer).

Definition at line 2108 of file SplitSDMeshPartitioner.cc.

References TailleEquil().

Referenced by Equilibrage(), and TailleEquil().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ UnpackDom()

void Arcane::SplitSDMeshPartitioner::UnpackDom ( void * TabTMP,
int TailleTMP,
MPI_Comm comm,
StrucListeDomMail * DomMail )
private

Extracts a Domain from an array received via communication.

@memo Extracting data to populate a StrucListeDomMail

Parameters
TabTMP(I) array from which the information is extracted
TailleTMP(I) total size of the TabTMP array
comm(I) communication environment for the library
DomMail(I/O) StrucListeDomMail
Returns
void
See also
TailleDom, PackDom
Author
Eric Brière de l'Isle, November 2007

Definition at line 2085 of file SplitSDMeshPartitioner.cc.

References StrucListeVoisMail::Delta, StrucListeDomMail::ListeVoisins, StrucListeDomMail::NbElements, StrucListeVoisMail::NbNoeudsInterface, StrucListeDomMail::NbVoisins, StrucListeVoisMail::NoDomVois, StrucListeDomMail::Poids, and UnpackDom().

Referenced by MAJMaillageMaitre(), and UnpackDom().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ UnpackEquil()

void Arcane::SplitSDMeshPartitioner::UnpackEquil ( void * TabTMP,
int TailleTMP,
MPI_Comm comm,
int * indDomCharge,
int * indDomVois,
double * Delta )
private

Extracts the 2 integers and the double from an array received via communication.

Definition at line 2135 of file SplitSDMeshPartitioner.cc.

References UnpackEquil().

Referenced by Equilibrage(), and UnpackEquil().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ verifMaillageMaitre()

void Arcane::SplitSDMeshPartitioner::verifMaillageMaitre ( StrucMaillage * Maillage)
private

consistency check (reciprocity) of the interfaces

Definition at line 399 of file SplitSDMeshPartitioner.cc.

References Arcane::TraceAccessor::info(), StrucMaillage::ListeDomaines, StrucListeDomMail::ListeVoisins, StrucMaillage::NbDomainesPleins, StrucListeVoisMail::NbNoeudsInterface, StrucListeDomMail::NbVoisins, StrucListeVoisMail::NoDomVois, and Arcane::TraceAccessor::perror().

Referenced by MAJMaillageMaitre().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ m_poids_aux_mailles

VariableCellReal Arcane::SplitSDMeshPartitioner::m_poids_aux_mailles
private

Definition at line 349 of file SplitSDMeshPartitioner.h.


The documentation for this class was generated from the following files: