Mesh partitioner inspired by the SplitSD library, developed initially at ONERA for Dassault Aviation. More...
#include <arcane/std/SplitSDMeshPartitioner.h>
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. | |
| CaseOptionsSplitSDMeshPartitioner * | options () const |
| Options du jeu de données du service. | |
| Public Member Functions inherited from Arcane::MeshPartitionerBase | |
| MeshPartitionerBase (const ServiceBuildInfo &sbi) | |
| ISubDomain * | subDomain () const |
| IMesh * | mesh () 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. | |
| ILoadBalanceMng * | loadBalanceMng () 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. | |
| IServiceInfo * | serviceInfo () const override |
| Access to service information. See IServiceInfo for details. | |
| IBase * | serviceParent () const override |
| Access to the base interface of main Arcane objects. | |
| IService * | serviceInterface () 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. | |
| TraceAccessor & | operator= (const TraceAccessor &rhs) |
| Copy assignment operator. | |
| virtual | ~TraceAccessor () |
| Frees resources. | |
| ITraceMng * | traceMng () 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 IPrimaryMesh * | primaryMesh () 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 | |
| IItemFamily * | m_cell_family = nullptr |
Mesh partitioner inspired by the SplitSD library, developed initially at ONERA for Dassault Aviation.
Definition at line 227 of file SplitSDMeshPartitioner.h.
| Arcane::SplitSDMeshPartitioner::SplitSDMeshPartitioner | ( | const ServiceBuildInfo & | sbi | ) |
Definition at line 48 of file SplitSDMeshPartitioner.cc.
|
private |
Definition at line 1709 of file SplitSDMeshPartitioner.cc.
|
private |
Definition at line 1783 of file SplitSDMeshPartitioner.cc.
|
private |
Definition at line 1767 of file SplitSDMeshPartitioner.cc.
|
private |
Definition at line 1740 of file SplitSDMeshPartitioner.cc.
|
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.
|
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().
|
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().
|
private |
Function responsible for sending an array with non-blocking communication.
{Note:} The array size is in bytes.
@memo Sending a non-blocking message.
| 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). |
{Note:} The array size is in bytes.
@memo Broadcasting a message.
| 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). |
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().
|
private |
Function responsible for sending an array.
{Note:} The array size is in bytes.
@memo Sending a message.
| 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). |
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().
|
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().
|
private |
iterative phase to balance the load
Definition at line 763 of file SplitSDMeshPartitioner.cc.
References 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(), and UnpackEquil().
Referenced by partitionMesh().
|
private |
memory freeing of structures
Definition at line 171 of file SplitSDMeshPartitioner.cc.
References Arcane::TraceAccessor::info().
Referenced by partitionMesh().
|
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().
|
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().
|
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().
|
private |
initialization of structures
Definition at line 89 of file SplitSDMeshPartitioner.cc.
References 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, and Arcane::ISubDomain::subDomainId().
Referenced by partitionMesh().
|
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().
|
private |
Definition at line 1661 of file SplitSDMeshPartitioner.cc.
|
private |
Definition at line 1652 of file SplitSDMeshPartitioner.cc.
|
private |
Definition at line 1683 of file SplitSDMeshPartitioner.cc.
|
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().
|
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().
|
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().
|
private |
update of the local structure (nodes on interfaces with neighboring subdomains)
Definition at line 189 of file SplitSDMeshPartitioner.cc.
References Arcane::Array< T >::add(), Arccore::Array< T >::add(), Arcane::arcaneCheckArraySize(), Arcane::Face::backCell(), Arcane::Array< T >::begin(), Arcane::TraceAccessor::debug(), ENUMERATE_CELL, ENUMERATE_FACE, Arcane::Array< T >::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(), Arcane::ItemGroup::size(), and Arccore::AbstractArray< T >::size().
Referenced by ConnexifieDomaine(), Equilibrage(), and init().
|
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().
|
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.
| Domaine | (I) StructureBlocEtendu |
| TabTMP | (I/O) array that is filled |
| TailleTMP | (I) total size of the TabTMP array |
| comm | (I) communication environment |
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().
|
private |
Stores the 2 integers and the double
Definition at line 2117 of file SplitSDMeshPartitioner.cc.
References PackEquil().
Referenced by Equilibrage(), and PackEquil().
|
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().
|
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.
Reimplemented from Arcane::IMeshPartitioner.
Definition at line 59 of file SplitSDMeshPartitioner.cc.
References Equilibrage(), fin(), Arcane::TraceAccessor::info(), and init().
|
inlinevirtual |
Implements Arcane::IMeshPartitioner.
Definition at line 242 of file SplitSDMeshPartitioner.h.
|
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.
| 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. |
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().
|
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().
|
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
| Domaine | (I) StructureBlocEtendu |
Definition at line 2025 of file SplitSDMeshPartitioner.cc.
References Arcane::arcaneCheckArraySize(), and StructureBlocEtendu::NbIntf.
Referenced by MAJMaillageMaitre().
|
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().
|
private |
Extracts a Domain from an array received via communication.
@memo Extracting data to populate a StrucListeDomMail
| 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 |
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().
|
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().
|
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().
|
private |
Definition at line 349 of file SplitSDMeshPartitioner.h.