|
TRUST 1.9.8
HPC thermohydraulic platform
|
Classe de base des partitionneurs de domaine (pour decouper un maillage avant un calcul parallele). More...
#include <Partitionneur_base.h>
Public Types | |
| using | int_t = _SIZE_ |
| using | ArrOfInt_t = ArrOfInt_T<_SIZE_> |
| using | IntVect_t = IntVect_T<_SIZE_> |
| using | IntTab_t = IntTab_T<_SIZE_> |
| using | Domaine_t = Domaine_32_64<_SIZE_> |
| using | Static_Int_Lists_t = Static_Int_Lists_32_64<_SIZE_> |
| using | Bord_t = Bord_32_64<_SIZE_> |
| using | BigArrOfInt_ = TRUSTArray<int, _SIZE_> |
| using | BigIntVect_ = TRUSTVect<int, _SIZE_> |
Public Member Functions | |
| int | lire_motcle_non_standard (const Motcle &, Entree &) override |
| Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree. | |
| virtual void | associer_domaine (const Domaine_t &domaine)=0 |
| virtual void | construire_partition (BigIntVect_ &elem_part, int &nb_parts_tot) const =0 |
| Public Member Functions inherited from Objet_U | |
| ~Objet_U () override | |
| Destructeur, supprime l'objet de la liste d'objets enregistres dans "memoire". | |
| int | numero () const |
| Renvoie l'indice de l'objet dans Memoire::data. | |
| virtual int | duplique () const =0 |
| virtual Sortie & | printOn (Sortie &) const |
| Ecriture de l'objet sur un flot de sortie Methode a surcharger. | |
| virtual unsigned | taille_memoire () const =0 |
| virtual int | est_egal_a (const Objet_U &) const |
| Renvoie 1 si l'objet x et *this sont une seule et meme instance (meme adresse en memoire). | |
| virtual const Nom & | le_nom () const |
| Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation. | |
| virtual void | nommer (const Nom &) |
| Donne un nom a l'Objet_U Methode virtuelle a surcharger. | |
| virtual int | reprendre (Entree &) |
| Reprise d'un Objet_U sur un flot d'entree Methode a surcharger. | |
| virtual int | sauvegarder (Sortie &) const |
| Sauvegarde d'un Objet_U sur un flot de sortie Methode a surcharger. | |
| int | get_object_id () const |
| Renvoie l'identifiant unique de l'objet object_id_. | |
| virtual const Type_info * | get_info () const |
| Donne des informations sur le type de l'Objet_U. | |
| const Nom & | que_suis_je () const |
| renvoie la chaine identifiant la classe. | |
| const char * | le_type () const |
| Donne le nom du type de l'Objet_U. | |
| virtual int | change_num (const int *const) |
| Change le numero interne de l'Objet_U. | |
| virtual int | associer_ (Objet_U &) |
| Associe l'Objet_U a un autre Objet_U Methode virtuelle a surcharger. | |
| const Interprete & | interprete () const |
| Interprete & | interprete () |
| Public Member Functions inherited from Process | |
| virtual | ~Process () |
Static Public Member Functions | |
| static void | corriger_elem0_sur_proc0 (BigIntVect_ &elem_part) |
| corrige la partition pour que l'element 0 du domaine initial se trouve sur le premier sous-domaine de la partition. | |
| static int_t | calculer_graphe_connexions_periodiques (const Domaine_t &domaine, const Static_Int_Lists_t &som_elem, const int_t my_offset, Static_Int_Lists_t &graph) |
| Calcul d'un graphe de connectivite entre les elements lies par des faces periodiques. | |
| static int_t | corriger_bords_avec_graphe (const Static_Int_Lists_t &graph_elements_perio, const Static_Int_Lists_t &som_elem, const Domaine_t &domaine, BigIntVect_ &elem_part) |
| corrige la partition elem_part pour qu'un element i se trouve sur la meme partition elem_part[i] que tous les elements auxquels il est lie dans le graphe | |
| static void | corriger_bords_avec_liste (const Domaine_t &dom, const int_t my_offset, BigIntVect_ &elem_part) |
| Calcul des graphes de connectivite elements periodiques et appel a corriger_periodique_avec_graphe. | |
| static int_t | corriger_sommets_bord (const Domaine_t &domaine, const ArrOfInt_t &renum_som_perio, const Static_Int_Lists_t &som_elem, BigIntVect_ &elem_part) |
| Modifie elem_part pour assurer les proprietes suivantes : 1) Les elements possedant un sommet de bord sont associes. | |
| static int_t | corriger_multiperiodique (const Domaine_t &domaine, const ArrOfInt_t &renum_som_perio, const Static_Int_Lists_t &som_elem, BigIntVect_ &elem_part) |
| applique des corrections a elem_part pour que le multi-periodique soit correct : | |
| Static Public Member Functions inherited from Objet_U | |
| static const Nom & | nom_du_cas () |
| Renvoie une reference constante vers le nom du cas. | |
| static Nom & | get_set_nom_du_cas () |
| Renvoie une reference non constante vers le nom du cas (pour pouvoir le modifier). | |
| static const Type_info * | info () |
| Donne des informations sur le type de l'Objet_U. | |
| static const Objet_U & | self_cast (const Objet_U &) |
| methode ajoutee pour caster en python | |
| static Objet_U & | self_cast (Objet_U &) |
| Static Public Member Functions inherited from Process | |
| static int | me () |
| renvoie mon rang dans le groupe de communication courant. | |
| static int | nproc () |
| renvoie le nombre de processeurs dans le groupe courant Voir Comm_Group::nproc() et PE_Groups::current_group() | |
| static bool | is_parallel () |
| static void | exit (int exit_code=-1) |
| Routine de sortie de TRUST dans une region Kokkos. | |
| static double | mp_sum (double) |
| Calcule la somme de x sur tous les processeurs du groupe courant. | |
| static float | mp_sum (float) |
| static trustIdType | mp_sum (trustIdType) |
| Calcule la somme de x sur tous les processeurs du groupe courant. | |
| static double | mp_max (double) |
| static double | mp_min (double) |
| static int | mp_max (int) |
| renvoie le plus grand int i sur l'ensemble des processeurs du groupe courant. | |
| static int | mp_min (int) |
| renvoie le plus petit int i sur l'ensemble des processeurs du groupe courant. | |
| static double | mp_sum_as_double (int v) |
| static trustIdType | mppartial_sum (trustIdType i) |
| Calul de la somme partielle de i sur les processeurs 0 a me()-1 (renvoie 0 sur le processeur 0). | |
| template<typename T> | |
| static void | mp_sum_for_each (T &arg1, T &arg2) |
| C++14 compatible mp_sum_for_each: combine multiple mp_sum calls into one collective operation Usage: mp_sum_for_each(a, b); mp_sum_for_each(a, b, c); mp_sum_for_each(a, b, c, d); mp_sum_for_each(a, b, c, d, e); All arguments must be of the same type (double or int) and are modified in place. Supports 2-5 parameters. | |
| template<typename T> | |
| static void | mp_sum_for_each (T &arg1, T &arg2, T &arg3) |
| template<typename T> | |
| static void | mp_sum_for_each (T &arg1, T &arg2, T &arg3, T &arg4) |
| template<typename T> | |
| static void | mp_sum_for_each (T &arg1, T &arg2, T &arg3, T &arg4, T &arg5) |
| template<typename T> | |
| static void | mp_max_for_each (T &arg1, T &arg2) |
| C++14 compatible mp_max_for_each: combine multiple mp_max calls into one collective operation. | |
| template<typename T> | |
| static void | mp_max_for_each (T &arg1, T &arg2, T &arg3) |
| template<typename T> | |
| static void | mp_max_for_each (T &arg1, T &arg2, T &arg3, T &arg4) |
| template<typename T> | |
| static void | mp_max_for_each (T &arg1, T &arg2, T &arg3, T &arg4, T &arg5) |
| template<typename T> | |
| static void | mp_min_for_each (T &arg1, T &arg2) |
| C++14 compatible mp_min_for_each: combine multiple mp_min calls into one collective operation. | |
| template<typename T> | |
| static void | mp_min_for_each (T &arg1, T &arg2, T &arg3) |
| template<typename T> | |
| static void | mp_min_for_each (T &arg1, T &arg2, T &arg3, T &arg4) |
| template<typename T> | |
| static void | mp_min_for_each (T &arg1, T &arg2, T &arg3, T &arg4, T &arg5) |
| template<typename _TYPE_> | |
| static void | mp_sum_for_each_item (TRUSTArray< _TYPE_ > &x, int n=-1) |
| template<typename _TYPE_> | |
| static void | mp_max_for_each_item (TRUSTArray< _TYPE_ > &x, int n=-1) |
| template<typename _TYPE_> | |
| static void | mp_min_for_each_item (TRUSTArray< _TYPE_ > &x, int n=-1) |
| static bool | mp_and (bool) |
| Calcule le 'et' logique de b sur tous les processeurs du groupe courant. | |
| static bool | mp_or (bool) |
| static int | check_int_overflow (trustIdType) |
| static int | je_suis_maitre () |
| renvoie 1 si on est sur le processeur maitre du groupe courant (c'est a dire me() == 0), 0 sinon. | |
| static KOKKOS_INLINE_FUNCTION void | Kokkos_exit (const char *) |
| Routine de sortie de TRUST dans une region Kokkos. | |
| static int | node_master () |
| renvoie 1 si on est sur le processeur maitre du noeud numa, 0 sinon. | |
| static void | exit (const Nom &message, int exit_code=-1) |
| static bool | is_sequential () |
| static void | barrier () |
| Synchronise tous les processeurs du groupe courant (attend que tous les processeurs soient arrives a la barriere). | |
| static void | abort () |
| Routine de sortie de Trio-U sur une erreur abort(). | |
| static Sortie & | Journal (int message_level=0) |
| Renvoie un objet statique de type Sortie qui sert de journal d'evenements. | |
| static double | ram_processeur () |
| static void | imprimer_ram_totale (int all_process=0) |
| static bool | force_single_file (const int ranks, const Nom &filename) |
Additional Inherited Members | |
| Static Public Attributes inherited from Objet_U | |
| static double | precision_geom = 1e-10 |
| static constexpr bool | HAS_POINTER = false |
| static int | dimension =0 |
| static int | format_precision_geom =11 |
| static int | axi =0 |
| static int | bidim_axi =0 |
| static int | DEACTIVATE_SIGINT_CATCH =0 |
| static Type_info | info_obj |
| static bool | disable_TU =false |
| Flag to disable or not the writing of the .TU files. | |
| static bool | stat_per_proc_perf_log =false |
| Flag to enable the writing of the statistics detailed per processor in _csv.TU file. | |
| Static Public Attributes inherited from Process | |
| static int | exception_sur_exit =0 |
| static int | multiple_files =5120 |
| Protected Member Functions inherited from Objet_U_With_Params | |
| Entree & | readOn (Entree &) override final |
| Reading of the input stream (dataset) with the helper class Param. | |
| virtual void | validate_params () const |
| Called in the readOn of Objet_U_With_Params, after reading the params. | |
| Protected Member Functions inherited from Objet_U | |
| Objet_U () | |
| Constructeur par defaut : attribue un numero d'identifiant unique a l'objet (object_id_), et enregistre l'objet en "memoire". | |
| Objet_U (const Objet_U &) | |
| Constructeur par copie. | |
| const Objet_U & | operator= (const Objet_U &) |
| Operateur= : ne fait rien (on conserve le numero et l'identifiant). | |
| virtual void | set_param (Param &) const |
Classe de base des partitionneurs de domaine (pour decouper un maillage avant un calcul parallele).
Cette classe decrit l'interface commune a tous les partitionneurs: Exemple :
// Creation d'un instance de la classe: Partitionneur_xxx part; // Association du domaine de calcul a decouper part.associer_domaine(domaine); // Initialisation des parametres specifiques a la classe derivee! fichier_data >> part; // Lecture des parametres dans le jdd ou part.initialiser(nb_parties); // Initialisation directe (depend de la classe) // Si besoin : part.declarer_bords_periodiques(liste_noms_bords_perio); // Construction du tableau de decoupage: ArrOfInt elem_part; part.construire_partition(elem_part);
ATTENTION: en principe, l'implementation de la methode construire_partition() doit assurer que le decoupage est valide (application des corrections pour les bords periodiques et autres...)
Definition at line 51 of file Partitionneur_base.h.
| using Partitionneur_base_32_64< _SIZE_ >::ArrOfInt_t = ArrOfInt_T<_SIZE_> |
Definition at line 57 of file Partitionneur_base.h.
| using Partitionneur_base_32_64< _SIZE_ >::BigArrOfInt_ = TRUSTArray<int, _SIZE_> |
Definition at line 64 of file Partitionneur_base.h.
| using Partitionneur_base_32_64< _SIZE_ >::BigIntVect_ = TRUSTVect<int, _SIZE_> |
Definition at line 65 of file Partitionneur_base.h.
| using Partitionneur_base_32_64< _SIZE_ >::Bord_t = Bord_32_64<_SIZE_> |
Definition at line 62 of file Partitionneur_base.h.
| using Partitionneur_base_32_64< _SIZE_ >::Domaine_t = Domaine_32_64<_SIZE_> |
Definition at line 60 of file Partitionneur_base.h.
| using Partitionneur_base_32_64< _SIZE_ >::int_t = _SIZE_ |
Definition at line 56 of file Partitionneur_base.h.
| using Partitionneur_base_32_64< _SIZE_ >::IntTab_t = IntTab_T<_SIZE_> |
Definition at line 59 of file Partitionneur_base.h.
| using Partitionneur_base_32_64< _SIZE_ >::IntVect_t = IntVect_T<_SIZE_> |
Definition at line 58 of file Partitionneur_base.h.
| using Partitionneur_base_32_64< _SIZE_ >::Static_Int_Lists_t = Static_Int_Lists_32_64<_SIZE_> |
Definition at line 61 of file Partitionneur_base.h.
|
pure virtual |
Implemented in Partitionneur_Fichier_Decoupage, Partitionneur_Fichier_MED, Partitionneur_Metis_32_64< _SIZE_ >, Partitionneur_Parmetis, Partitionneur_Partition, Partitionneur_Ptscotch, Partitionneur_Sous_Domaine, Partitionneur_Sous_Domaines, Partitionneur_Tranche_32_64< _SIZE_ >, Partitionneur_Tranche_32_64< int >, Partitionneur_Tranche_32_64< trustIdType >, and Partitionneur_Union.
|
static |
Calcul d'un graphe de connectivite entre les elements lies par des faces periodiques.
Si l'element i est voisin de l'element j par une face periodique, alors il existe k tel que graph(i,k)==j et il existe k2 tel que graph(j,k2)==i.
| (domaine) | le domaine a traiter |
| (liste_bords_periodiques) | liste des noms des bords periodiques. ATTENTION: on suppose que les faces des bords periodiques sont rangees selon la convention des bords periodiques. Voir check_faces_periodiques(). |
| (som_elem) | la connectivite sommets-elements pour le domaine donnee. |
| (graph) | On y stocke le resultat. Valeur de retour: nombre d'elements dans le graphe (egal au nombre de faces periodiques) |
Definition at line 130 of file Partitionneur_base.cpp.
|
pure virtual |
Implemented in Partitionneur_Fichier_Decoupage, Partitionneur_Fichier_MED, Partitionneur_Metis_32_64< _SIZE_ >, Partitionneur_Parmetis, Partitionneur_Partition, Partitionneur_Ptscotch, Partitionneur_Sous_Domaine, Partitionneur_Sous_Domaines, Partitionneur_Tranche_32_64< _SIZE_ >, Partitionneur_Tranche_32_64< int >, Partitionneur_Tranche_32_64< trustIdType >, and Partitionneur_Union.
|
static |
corrige la partition elem_part pour qu'un element i se trouve sur la meme partition elem_part[i] que tous les elements auxquels il est lie dans le graphe
(elements d'indices graph_elements_perio(i, j) pour tout j).
| (graph_elements_perio) | graphe calcule par la methode calculer_graphe_connexions_periodiques |
| (elem_part) | pour chaque element, a quelle partie appartient-il. Valeur de retour: nombre d'elements dont la partition a ete corrigee. |
Definition at line 605 of file Partitionneur_base.cpp.
|
static |
Calcul des graphes de connectivite elements periodiques et appel a corriger_periodique_avec_graphe.
(Methode a utiliser quand on ne dispose pas encore du graphe de de connectivite, si on a le graphe sous la main, appeler directement corriger_periodique_avec_graphe)
Definition at line 658 of file Partitionneur_base.cpp.
|
static |
corrige la partition pour que l'element 0 du domaine initial se trouve sur le premier sous-domaine de la partition.
On echange le premier sous-domaine et celui qui contient l'element 0.
Definition at line 49 of file Partitionneur_base.cpp.
|
static |
applique des corrections a elem_part pour que le multi-periodique soit correct :
Si un sommet appartient a plusieurs frontieres periodiques, tous les elements adjacents sont rattaches au meme processeur.
Definition at line 398 of file Partitionneur_base.cpp.
|
static |
Modifie elem_part pour assurer les proprietes suivantes : 1) Les elements possedant un sommet de bord sont associes.
a un processeur possedant une face de bord adjacente a ce sommet.
2) Si un processeur possede un sommet periodique reel, il possede forcement le renum_som_perio associe (donc un element qui possede ce sommet et un face periodique). Cette propriete est indispensable pour le periodique (existence de renum_som_perio pour tous les sommets). Pour les autres bords, cette correction est peut-etre inutile, mais pas sur. Sans cette correction, il peut exister des sommets de bord isoles (un processeur possede un sommet de bord mais aucune face). Si on cherche les sommets de bord en parcourant les faces de bord, c'est faux. Avec cette correction, cet algorithme est correct.
Definition at line 238 of file Partitionneur_base.cpp.
|
inlineoverridevirtual |
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
| (Motcle& | motlu) le nom du terme a lire |
| (Entree& | is) un flot d'entree |
Reimplemented from Objet_U.
Reimplemented in Partitionneur_Metis_32_64< _SIZE_ >, Partitionneur_Parmetis, and Partitionneur_Ptscotch.
Definition at line 67 of file Partitionneur_base.h.