14#ifndef ARCANE_FILES_SPLITSDMESHPARTITIONER_H
15#define ARCANE_FILES_SPLITSDMESHPARTITIONER_H
21#include "arcane/std/MeshPartitionerBase.h"
23#include "arcane/cea/SplitSDMeshPartitioner_axl.h"
26#define MPICH_SKIP_MPICXX
27#define OMPI_SKIP_MPICXX
37#define TAG_MAILLAGEMAITRE 1
39#define CHECK_MPI_PACK_ERR(ier) \
40 if (ier != MPI_SUCCESS) { \
42 case MPI_ERR_COMM:InfoProc->m_service->pfatal()<<"erreur sur MPI_Pack de type MPI_ERR_COMM"; break; \
43 case MPI_ERR_TYPE: InfoProc->m_service->pfatal()<<"erreur sur MPI_Pack de type MPI_ERR_TYPE"; break; \
44 case MPI_ERR_COUNT: InfoProc->m_service->pfatal()<<"erreur sur MPI_Pack de type MPI_ERR_COUNT"; break; \
45 case MPI_ERR_ARG: InfoProc->m_service->pfatal()<<"erreur sur MPI_Pack de type MPI_ERR_ARG"; break; \
46 default: InfoProc->m_service->pfatal()<<"erreur sur MPI_Pack de type inconnu !"; \
50#ifndef CHECK_IF_NOT_NULL
64#define CHECK_IF_NOT_NULL(Ptr) \
66 InfoProc->m_service->pfatal()<<"Pointeur vaut nil, (On manque peut-etre de place memoire !!! )"; \
71#define MAX(a,b) ((a)<(b)?(b):(a))
74#define MIN(a,b) ((a)>(b)?(b):(a))
81typedef struct T_InfoProc
113typedef struct T_INTERFACE
127typedef struct T_BLOC_ETENDU
153typedef struct T_ListeVoisMail
171typedef struct T_ListeDomMail
195typedef struct T_Maillage
224:
public ArcaneSplitSDMeshPartitionerObject
233 virtual void build() {}
237 virtual void partitionMesh(
bool initial_partition);
238 virtual void partitionMesh(
bool initial_partition,Int32 nb_part)
240 ARCANE_UNUSED(initial_partition);
241 ARCANE_UNUSED(nb_part);
250 void initPoids(
bool initial_partition);
267 void MAJDelta(
double don,
int iDOmTmpPrec,
int iDomTmp,
StrucListeDomMail* ListeDomaines);
270 double CalculDeltaMin(
StrucMaillage* Maillage,
double deltaMin,
int iterEquilibrage,
int NbMaxIterEquil);
276 void Equil2Dom(
int* MasqueDesNoeuds,
int* MasqueDesElements,
int marqueVu,
int marqueNonVu,
278 int indDomCharge,
int indDomVois,
double Delta);
281 void SelectElements(
int* MasqueDesNoeuds,
int* MasqueDesElements,
int marqueVu,
int marqueNonVu,
286 int ParcoursFrontalDelta (
int* MasqueDesNoeuds,
int* MasqueDesElements,
287 int marqueVu,
int marqueNonVu,
289 int *pNbFronts,
int NbFrontsMax,
297 void LissageDuFront (
int* MasqueDesNoeuds,
int* MasqueDesElements,
298 int marqueVu,
int marqueNonVu,
324 void* RecoitMessage (
StrucInfoProc* InfoProc,
int FromProc,
int Tag,
int *pTailleTMP);
325 void EnvoieMessage (
StrucInfoProc* InfoProc,
int ToProc,
int Tag,
void* TabTMP,
int TailleTMP);
327 void* DiffuseMessage(
StrucInfoProc* InfoProc,
int FromProc,
void* TabTMP,
int TailleTMP);
334 void UnpackDom(
void* TabTMP,
int TailleTMP, MPI_Comm comm,
StrucListeDomMail* DomMail);
339 void PackEquil(
StrucInfoProc* InfoProc,
int indDomCharge,
int indDomVois,
double Delta,
void* TabTMP,
int TailleTMP, MPI_Comm comm);
341 void UnpackEquil(
void* TabTMP,
int TailleTMP, MPI_Comm comm,
int* indDomCharge,
int* indDomVois,
double* Delta);
Classe de base d'un service.
Structure contenant les informations pour créer un service.
Partitioneur de maillage inspiré de la bibliothèque SplitSD, développé initialement à l'ONERA pour Da...
Classe de base des vecteurs 1D de données.
Vecteur 1D de données avec sémantique par valeur (style STL).
Arcane::AbstractService * m_service
Pour la gestion des traces (messages, erreurs, fatal ...)
StrucListeVoisMail * ListeVoisins
StrucListeDomMail * ListeDomaines
StructureInterface * Intf
Arcane::UniqueArray< Arcane::Node > ListeNoeuds