|
TrioCFD 1.9.8
TrioCFD documentation
|
#include <Scatter.h>
Public Member Functions | |
| Entree & | interpreter (Entree &) override |
| Lit et complete un domaine parallele selon les motcles lus dans le jeu de donnees. | |
| virtual void | lire_domaine (Nom &fil) |
| Lit le domaine dans le fichier de nom "nomentree", de type LecFicDistribueBin ou LecFicDistribue. | |
| Domaine & | domaine () |
| Renvoi le domaine associe. | |
| 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 Entree & | readOn (Entree &) |
| Lecture d'un Objet_U sur un flot d'entree 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 | lire_motcle_non_standard (const Motcle &motlu, Entree &is) |
| Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree. | |
| 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 int | Chercher_Correspondance (const DoubleTab &sommets1, const DoubleTab &sommets2, ArrOfInt &correspondance, const double epsilon) |
| Construit le tableau "correspondance" tel que Pour 0 <= i < sommets2. | |
| static void | construire_correspondance_sommets_par_coordonnees (Domaine &dom, bool allow_resize=false) |
| Construction des tableaux joint_item(JOINT_ITEM::SOMMET).items_communs de tous les joints du domaine(0) du domaine dom. | |
| static void | construire_correspondance_aretes_par_coordonnees (Domaine_VF &zvf) |
| Construction des tableaux joint_item(JOINT_ITEM::ARETE).items_communs de tous les joints du domaine. | |
| static void | construire_correspondance_items_par_coordonnees (Joints &joints, const JOINT_ITEM type_item, const DoubleTab &coord_items, bool allow_resize=false) |
| Generic method to build geometrical item correspondance between the local and the remote processor around a joint. | |
| static void | construire_structures_paralleles (Domaine &dom) |
| Construction des structures paralleles du domaine et du domaine (determination des elements distants en fonction de l'epaisseur de joint,. | |
| static void | calculer_espace_distant (Domaine &domaine, const int nb_items_reels, const ArrsOfInt &items_to_send, const JOINT_ITEM type_item) |
| Determination des items distants en fonction d'une liste d'items a envoyer et de listes d'items communs. | |
| static void | calculer_nb_items_virtuels (Joints &joints, const JOINT_ITEM type_item) |
| Pour un item geometrique "type_item", remplit le champ nb_items_virtuels_ des joints en fonction du nombre d'items distants : | |
| static void | calculer_renum_items_communs (Joints &joints, const JOINT_ITEM type_item) |
| On suppose que chaque joint[i].joint_item(type_item).items_communs() contient les indices locaux des items de joint communs dans le meme ordre sur les deux processeurs (local et voisin) On remplit renum_items_communs : colonne 0=contenu du tableau items_communs sur le PE voisin colonne 1=contenu du tableau items_communs sur le PE local. | |
| static void | calculer_espace_distant_faces (Domaine &domaine, const int nb_faces_reelles, const IntTab &elem_faces) |
| Idem que Scatter::calculer_espace_distant_sommets pour les faces. | |
| static void | calculer_espace_distant_aretes (Domaine &domaine, const int nb_aretes_reelles, const IntTab &elem_aretes) |
| Idem que Scatter::calculer_espace_distant_sommets pour les aretes. | |
| static void | calculer_espace_distant_elements (Domaine &dom) |
| Remplissage du tableau "espace_distant()" des elements dans les joints. | |
| static void | corriger_espace_distant_elements_perio (Domaine &dom) |
| Les algorithmes actuels pour le periodique (assembleur P1B, OpDivElem P1B) ont besoin que pour chaque face virtuelle periodique, la face opposee soit. | |
| static void | calculer_espace_distant_sommets (Domaine &dom) |
| En fonction de l'espace distant des elements, calcule l'espace distant des sommets. | |
| static void | construire_espace_virtuel_traduction (const MD_Vector &md_indice, const MD_Vector &md_valeur, IntTab &tableau, const int error_is_fatal=1) |
| Construit la structure items_communs + espaces virtuels d'un tableau contenant des indices d'items geometriques, indexe par un autre type d'item geometrique. | |
| static void | reordonner_faces_de_joint (Domaine &dom) |
| Reordonne les faces de joint de sorte qu'elles apparaissent dans le meme ordre sur chaque couple de processeur voisin. | |
| static void | ajouter_joints (Domaine &domaine, ArrOfInt &pe_voisins) |
| Ajoute des joints avec tous les pe de pe_voisins. | |
| static void | trier_les_joints (Joints &joints) |
| Sort joints by increasing neighbor proc number. | |
| static void | construire_md_vector (const Domaine &, int nb_items_reels, const JOINT_ITEM, MD_Vector &) |
| construction d'un MD_Vector_std a partir des informations de joint du domaine pour le type d'item demande. | |
| static void | check_consistancy_remote_items (Domaine &dom, const ArrOfInt &mergedDomaines) |
| Merged domains receive joint information from their neighbours to ensure that their common items (vertices) appear in the same order. | |
| template<typename _SIZE_> | |
| static void | init_sequential_domain (Domaine_32_64< _SIZE_ > &dom) |
| Create parallel descriptors for the vertex and element arrays of the domain (necessary because Scatter is never invoked in sequential). | |
| template<typename _SIZE_> | |
| static void | uninit_sequential_domain (Domaine_32_64< _SIZE_ > &dom) |
| methode utilisee par les interpretes qui modifient le domaine (sequentiel), detruit les descripteurs des sommets et elements pour permettre la modification de ces tableaux. | |
| Static Public Member Functions inherited from Interprete | |
| static Objet_U & | objet (const Nom &) |
| Voir Interprete_bloc::objet_global() BM: la classe Interprete n'est pas le meilleur endroit pour cette. | |
| static int | objet_existant (const Nom &) |
| Renvoie 1 si l'objet existe, 0 sinon voir Interprete_bloc::objet_global_existant(). | |
| 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) |
Protected Member Functions | |
| OBS_PTR (Domaine) le_domaine | |
| void | read_domain_no_comm (Entree &fic, bool &read_perio) |
| Does the exact same thing as the readOn of the class Domaine but without collective communication. | |
| 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 |
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 |
|
static |
Ajoute des joints avec tous les pe de pe_voisins.
Pour que l'ensemble des joints soit symetrique, on en cree aussi un joint sur le processeur destination: Si A ajoute un joint avec B, alors B ajoute un joint avec A. On trie les joints par ordre croissant du numero de PE. ATTENTION: les joints sont donc reordonnes ! On met dans pe_voisins la liste des joints effectivement crees.
Definition at line 1028 of file Scatter.cpp.
|
static |
Determination des items distants en fonction d'une liste d'items a envoyer et de listes d'items communs.
exemple: calculer_espace_distant_sommets calculer_espace_distant_faces Pour les sommets: les "items_to_send" sont les sommets des elements distants, Si le processeur A veut que le processeur B connaisse le sommet i, il faut que le processeur qui possede le sommet l'envoie a B. Le processeur qui "possede" le sommet est le plus petit parmi les PEs qui partagent ce sommet (item commun) (requis pour pouvoir faire echange_item_commun et echange_espace_virtuel en une seule passe). De plus, si plusieurs processeurs demandent a envoyer le meme sommet au meme processeur, il ne faut l'inserer qu'une seule fois dans l'espace distant.
| (joints) | les joints dans lesquels on veut calculer un espace distant |
| (nb_items_reels) | le nombre d'items reels (sommets, faces, ...) |
| (items_to_send) | un vecteur de "nproc()" tableaux, pour chaque processeur, la liste des items qu'on veut lui envoyer (exemple:tous les sommets des elements distants, ou toutes les faces) |
| (type_item) | les items dont on veut calculer l'espace distant |
Definition at line 819 of file Scatter.cpp.
|
static |
Idem que Scatter::calculer_espace_distant_sommets pour les aretes.
Definition at line 1201 of file Scatter.cpp.
|
static |
Remplissage du tableau "espace_distant()" des elements dans les joints.
C'est ici qu'on determine les elements de joint en fonction de l'epaisseur de joint. Le tableau espace_distant contient les indices locaux des elements distants (a envoyer aux processeurs voisins) Pour un joint d'epaisseur 1, ce sont tous les elements voisins d'un sommet de joint (sommet sur un face de joint ou sommet isole). Pour un joint d'epaisseur n>1, ce sont tous les elements voisins d'un sommet d'un element du joint d'epaisseur n-1. Le voisinage s'entend sur le domaine global (toutes domaines confondues) Historique: premiere version B.Mathieu le 16/01/2007. Il existe une methode qui determine les elements distants au moment du decoupage (DomaineCutter::construire_elements_distants_ssdom). La methode ci-dessous a ete validee par comparaison avec la methode du decoupeur. Les sorties ont ete verifiees pour des epaisseurs jusqu'a 5 sur des maillages tetra. La difficulte de l'algorithme est d'obtenir les elements virtuels d'epaisseur > 1 qui se trouvent sur des sous-domaines qui ne sont pas en contact direct avec le sous-domaine local. Difficulte resolue par l'algorithme ci-dessous.
Definition at line 2061 of file Scatter.cpp.
|
static |
Idem que Scatter::calculer_espace_distant_sommets pour les faces.
Definition at line 1182 of file Scatter.cpp.
|
static |
En fonction de l'espace distant des elements, calcule l'espace distant des sommets.
Pour chaque joint, on envoie au processeur voisin l'ensemble des sommets de tous les elements du joint. C'est le processeur proprietaire du sommet (plus petit pe qui le possede) qui le met dans son espace distant. Attention, on cree de nouveaux joints. On remplit les tableaux dom.faces_joint(i).joint_item(JOINT_ITEM::SOMMET).items_distants();
Definition at line 1157 of file Scatter.cpp.
|
static |
Pour un item geometrique "type_item", remplit le champ nb_items_virtuels_ des joints en fonction du nombre d'items distants :
Le nombre d'items virtuels sur un joint i du processeur j est le nombre d'items distants du joint j sur le processeur i.
Definition at line 2698 of file Scatter.cpp.
|
static |
On suppose que chaque joint[i].joint_item(type_item).items_communs() contient les indices locaux des items de joint communs dans le meme ordre sur les deux processeurs (local et voisin) On remplit renum_items_communs : colonne 0=contenu du tableau items_communs sur le PE voisin colonne 1=contenu du tableau items_communs sur le PE local.
Definition at line 1222 of file Scatter.cpp.
|
static |
Merged domains receive joint information from their neighbours to ensure that their common items (vertices) appear in the same order.
If it's not the case, the merged domain reorders its common items so that it matches the neighbour's order When 2 neighbouring domains have each been merged, only the processor with the lowest rank proceeds to reordering
Definition at line 270 of file Scatter.cpp.
|
static |
Construit le tableau "correspondance" tel que Pour 0 <= i < sommets2.
size_array(), Si sommet2(i) existe dans le tableau sommet1, alors sommets2(i, ...) == sommets1(correspondance[i], ...) Sinon correspondance[i] = -1 L'egalite est verifiee a epsilon pres en absolu (soit abs(x1-x2)<epsilon) L'algorithme est generalement en n1*log(n1) + n2*log(n1) (recherche basee sur un quicksort). En cas d'echec du tri, on utilise un algorithme en n1*n2. Les tableaux sommets1 et sommets2 doivent etre de dimension 2 Le tableau correspondance doit etre de taille sommets2.size_array(). Valeur de retour: nombre de sommets de sommets2 non trouves dans le tableau sommets1.
Definition at line 2370 of file Scatter.cpp.
|
static |
Construction des tableaux joint_item(JOINT_ITEM::ARETE).items_communs de tous les joints du domaine.
Definition at line 2686 of file Scatter.cpp.
|
static |
Generic method to build geometrical item correspondance between the local and the remote processor around a joint.
See also construire_correspondance_sommets_par_coordonnees() for the very specific usage of allow_resize.
Definition at line 2486 of file Scatter.cpp.
|
static |
Construction des tableaux joint_item(JOINT_ITEM::SOMMET).items_communs de tous les joints du domaine(0) du domaine dom.
| allow_resize | may be set to True in some rare case (see Raffiner_isotrope_parallele) when we know that the current size of 'items_communs' is wrong because part of the domain was reszed / changed. |
Definition at line 2678 of file Scatter.cpp.
|
static |
Construit la structure items_communs + espaces virtuels d'un tableau contenant des indices d'items geometriques, indexe par un autre type d'item geometrique.
Exemple: tableau indexe par md_indice, contenant des indices md_valeur: type_indice type_valeur exemple de tableau: element sommet domaine.les_elems() face sommet faces_sommets element face elem_faces face element faces_voisins element element ? element arete elem_aretes Nb_valeurs_max est le nombre d'items reels de type "type_valeur".
Definition at line 1624 of file Scatter.cpp.
|
static |
construction d'un MD_Vector_std a partir des informations de joint du domaine pour le type d'item demande.
Definition at line 1279 of file Scatter.cpp.
|
static |
Construction des structures paralleles du domaine et du domaine (determination des elements distants en fonction de l'epaisseur de joint,.
determination des sommets distants, creation des sommets et des elements virtuels)
Definition at line 672 of file Scatter.cpp.
|
static |
Les algorithmes actuels pour le periodique (assembleur P1B, OpDivElem P1B) ont besoin que pour chaque face virtuelle periodique, la face opposee soit.
aussi virtuelle. Ceci n'est pas assure a la sortie de la methode calculer_elements_distants. Cette methode ajoute aux elements distants les elements manquants pour assurer cette condition: Si un element est distant pour un PE donne est voisin d'une face periodique, on ajoute a l'espace distant l'element adjacent a la face opposee.
Definition at line 1911 of file Scatter.cpp.
| Domaine & Scatter::domaine | ( | ) |
Renvoi le domaine associe.
Definition at line 73 of file Scatter.cpp.
|
static |
Create parallel descriptors for the vertex and element arrays of the domain (necessary because Scatter is never invoked in sequential).
In 64bit the corresponding number of items might be big. This is here the main justification for the need of the class MD_Vector_seq which unique useful argument is the total number of items (with type trustIdType). Alternative would have been to make all members of MD_Vector_std compatible with trustIdType ...
Definition at line 2742 of file Scatter.cpp.
Lit et complete un domaine parallele selon les motcles lus dans le jeu de donnees.
Format: Scatter [debug] file_name domain_name On lit les sommets, les elements et les sommets et faces de joint, On construit les espaces distants et virtuels en fonction de l'epaisseur de joint.
Implements Interprete.
Definition at line 128 of file Scatter.cpp.
|
virtual |
Lit le domaine dans le fichier de nom "nomentree", de type LecFicDistribueBin ou LecFicDistribue.
Format attendu : Domaine::ReadOn
Reimplemented in ScatterMED.
Definition at line 468 of file Scatter.cpp.
|
protected |
|
protected |
Does the exact same thing as the readOn of the class Domaine but without collective communication.
Necessary when the processors don't have the same numbers of file to read
Definition at line 394 of file Scatter.cpp.
|
static |
Reordonne les faces de joint de sorte qu'elles apparaissent dans le meme ordre sur chaque couple de processeur voisin.
En pratique, pour un couple pe1 < pe2, pe1 envoie ses faces de joint a pe2 et pe2 les traduit en indices de sommets locaux. Les faces de joint du PE2 ne sont donc pas utilisees.
Definition at line 1678 of file Scatter.cpp.
|
static |
Sort joints by increasing neighbor proc number.
Definition at line 712 of file Scatter.cpp.
|
static |
methode utilisee par les interpretes qui modifient le domaine (sequentiel), detruit les descripteurs des sommets et elements pour permettre la modification de ces tableaux.
Definition at line 2757 of file Scatter.cpp.