|
TrioCFD 1.9.9_beta
TrioCFD documentation
|
#include <Scatter.h>
Public Member Functions | |
| Entree & | interpreter (Entree &) override |
| Reads and completes a parallel domain according to the keywords read in the data set. | |
| virtual void | lire_domaine (Nom &fil) |
| Reads the domain from the file named "nomentree", of type LecFicDistribueBin or LecFicDistribue. | |
| Domaine & | domaine () |
| Returns the associated domain. | |
| Public Member Functions inherited from Objet_U | |
| ~Objet_U () override | |
| Destructor. Removes the object from the list of objects registered in "memory". | |
| int | numero () const |
| Returns the index of the object in Memoire::data. | |
| virtual int | duplique () const =0 |
| virtual Sortie & | printOn (Sortie &) const |
| Writes the object to an output stream. Virtual method to override. | |
| virtual Entree & | readOn (Entree &) |
| Reads an Objet_U from an input stream. Virtual method to override. | |
| virtual unsigned | taille_memoire () const =0 |
| virtual int | est_egal_a (const Objet_U &) const |
| Returns 1 if x and *this are the same instance (same memory address). | |
| virtual const Nom & | le_nom () const |
| Returns the name of the Objet_U. Virtual method to override: returns "neant" in this implementation. | |
| virtual void | nommer (const Nom &) |
| Assigns a name to the Objet_U. Virtual method to override. | |
| virtual int | reprendre (Entree &) |
| Restores an Objet_U from an input stream. Virtual method to override. | |
| virtual int | sauvegarder (Sortie &) const |
| Saves an Objet_U to an output stream. Virtual method to override. | |
| int | get_object_id () const |
| Returns the unique identifier of the object (object_id_). | |
| virtual const Type_info * | get_info () const |
| Returns type information for the Objet_U. | |
| const Nom & | que_suis_je () const |
| Returns the string identifying the class. | |
| const char * | le_type () const |
| Returns the type name of the Objet_U. | |
| virtual int | change_num (const int *const) |
| Changes the internal number of the Objet_U. | |
| virtual int | lire_motcle_non_standard (const Motcle &motlu, Entree &is) |
| Reads non-simple-type parameters of an Objet_U from an input stream. | |
| virtual int | associer_ (Objet_U &) |
| Associates the Objet_U with another Objet_U. Virtual method to override. | |
| 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) |
| Builds the "correspondance" array such that for 0 <= i < sommets2. | |
| static void | construire_correspondance_sommets_par_coordonnees (Domaine &dom, bool allow_resize=false) |
| Builds the joint_item(JOINT_ITEM::SOMMET).items_communs arrays for all joints of the domain dom. | |
| static void | construire_correspondance_aretes_par_coordonnees (Domaine_VF &zvf) |
| Builds the joint_item(JOINT_ITEM::ARETE).items_communs arrays for all joints of the domain. | |
| 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) |
| Builds the parallel structures of the domain (determination of distant elements as a function of joint thickness,. | |
| static void | calculer_espace_distant (Domaine &domaine, const int nb_items_reels, const ArrsOfInt &items_to_send, const JOINT_ITEM type_item) |
| Determines the distant items from a list of items to send and lists of common items. | |
| static void | calculer_nb_items_virtuels (Joints &joints, const JOINT_ITEM type_item) |
| For a geometric item "type_item", fills the nb_items_virtuels_ field of joints based on the number of remote items: | |
| static void | calculer_renum_items_communs (Joints &joints, const JOINT_ITEM type_item) |
| Assumes that each joint[i].joint_item(type_item).items_communs() contains the local indices of common joint items in the same order on both processors (local and neighbor). Fills renum_items_communs: column 0 = content of the items_communs array on the neighboring PE column 1 = content of the items_communs array on the local PE. | |
| static void | calculer_espace_distant_faces (Domaine &domaine, const int nb_faces_reelles, const IntTab &elem_faces) |
| Same as Scatter::calculer_espace_distant_sommets for faces. | |
| static void | calculer_espace_distant_aretes (Domaine &domaine, const int nb_aretes_reelles, const IntTab &elem_aretes) |
| Same as Scatter::calculer_espace_distant_sommets for edges. | |
| static void | calculer_espace_distant_elements (Domaine &dom) |
| Fills the "espace_distant()" array of elements in the joints. | |
| static void | corriger_espace_distant_elements_perio (Domaine &dom) |
| Current periodic algorithms (P1B assembler, OpDivElem P1B) require that for each virtual periodic face, the opposite face is. | |
| static void | calculer_espace_distant_sommets (Domaine &dom) |
| Based on the remote space of elements, computes the remote space of vertices. | |
| static void | construire_espace_virtuel_traduction (const MD_Vector &md_indice, const MD_Vector &md_valeur, IntTab &tableau, const int error_is_fatal=1) |
| Builds the items_communs + virtual space structure of an array containing indices of geometric items, indexed by another geometric item type. | |
| static void | reordonner_faces_de_joint (Domaine &dom) |
| Reorders joint faces so that they appear in the same order on each pair of neighboring processors. | |
| static void | ajouter_joints (Domaine &domaine, ArrOfInt &pe_voisins) |
| Adds joints with all PEs in 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 &) |
| Builds an MD_Vector_std from the joint information of the domain for the requested item type. | |
| 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) |
| Method used by interpreters that modify the domain (sequential), destroys the descriptors of vertices and elements to allow modification of these arrays. | |
| Static Public Member Functions inherited from Interprete | |
| static Objet_U & | objet (const Nom &) |
| See Interprete_bloc::objet_global(). BM: the Interprete class is not the best place for this. | |
| static int | objet_existant (const Nom &) |
| Returns 1 if the object exists, 0 otherwise. See Interprete_bloc::objet_global_existant(). | |
| Static Public Member Functions inherited from Objet_U | |
| static const Nom & | nom_du_cas () |
| Returns a constant reference to the case name. This method is static. | |
| static Nom & | get_set_nom_du_cas () |
| Returns a non-constant reference to the case name (to allow modification). This method is static. | |
| static const Type_info * | info () |
| Returns type information for the Objet_U (static version). | |
| static const Objet_U & | self_cast (const Objet_U &) |
| Method added for casting in Python. | |
| static Objet_U & | self_cast (Objet_U &) |
| Static Public Member Functions inherited from Process | |
| static int | me () |
| Returns the rank of the local processor in the current communication group. See Comm_Group::rank() and PE_Groups::current_group(). | |
| static int | nproc () |
| Returns the number of processors in the current group. See Comm_Group::nproc() and PE_Groups::current_group(). | |
| static bool | is_parallel () |
| static void | exit (int exit_code=-1) |
| Exit routine for TRUST within a Kokkos region. | |
| static double | mp_sum (double) |
| Computes the sum of x over all processors in the current group. | |
| static float | mp_sum (float) |
| static trustIdType | mp_sum (trustIdType) |
| Computes the sum of x over all processors in the current group. | |
| static double | mp_max (double) |
| static double | mp_min (double) |
| static int | mp_max (int) |
| Returns the maximum value of x across all processors in the current group. | |
| static int | mp_min (int) |
| Returns the minimum value of x across all processors in the current group. | |
| static double | mp_sum_as_double (int v) |
| static trustIdType | mppartial_sum (trustIdType i) |
| Computes the partial sum of x over processors 0 to me()-1 (returns 0 on processor 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) |
| Computes the logical AND of b across all processors in the current group. | |
| static bool | mp_or (bool) |
| static int | check_int_overflow (trustIdType) |
| static int | je_suis_maitre () |
| Returns 1 if on the master processor of the current group (i.e. me() == 0), 0 otherwise. | |
| static KOKKOS_INLINE_FUNCTION void | Kokkos_exit (const char *) |
| Exit routine for TRUST within a Kokkos region. | |
| static int | node_master () |
| Returns 1 if on the NUMA node master processor, 0 otherwise. | |
| static void | exit (const Nom &message, int exit_code=-1) |
| static bool | is_sequential () |
| static void | barrier () |
| Synchronizes all processors in the current group (waits until all processors have reached the barrier). | |
| static void | abort () |
| Abort routine for TRUST on a fatal error. | |
| static Sortie & | Journal (int message_level=0) |
| Returns a static Sortie object used as an event journal. | |
| 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 () | |
| Default constructor: assigns a unique identifier to the object (object_id_) and registers the object in "memory" by giving it a num_obj number. | |
| Objet_U (const Objet_U &) | |
| Copy constructor. | |
| const Objet_U & | operator= (const Objet_U &) |
| Assignment operator: does nothing (the number and identifier are preserved). | |
| 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 |
Adds joints with all PEs in pe_voisins.
To make the set of joints symmetric, a joint is also created on the destination processor: If A adds a joint with B, then B adds a joint with A. Joints are sorted in ascending order of PE number. WARNING: joints are therefore reordered! pe_voisins is updated with the list of joints actually created.
Definition at line 1028 of file Scatter.cpp.
|
static |
Determines the distant items from a list of items to send and lists of common items.
Example: calculer_espace_distant_sommets calculer_espace_distant_faces For vertices: the "items_to_send" are the vertices of distant elements. If processor A wants processor B to know vertex i, the processor that owns the vertex must send it to B. The "owning" processor is the smallest among the PEs sharing this vertex (common item) (required to perform echange_item_commun and echange_espace_virtuel in a single pass). Furthermore, if several processors request that the same vertex be sent to the same processor, it must only be inserted once in the distant space.
| (joints) | the joints in which the distant space is to be computed |
| (nb_items_reels) | the number of real items (vertices, faces, ...) |
| (items_to_send) | a vector of "nproc()" arrays, for each processor, the list of items to send (e.g. all vertices of distant elements, or all faces) |
| (type_item) | the items whose distant space is to be computed |
Definition at line 819 of file Scatter.cpp.
|
static |
Same as Scatter::calculer_espace_distant_sommets for edges.
Definition at line 1199 of file Scatter.cpp.
|
static |
Fills the "espace_distant()" array of elements in the joints.
This is where joint elements are determined based on joint thickness. The espace_distant array contains the local indices of remote elements (to be sent to neighboring processors). For a joint of thickness 1, these are all elements neighboring a joint vertex (vertex on a joint face or isolated vertex). For a joint of thickness n>1, these are all elements neighboring a vertex of an element from the joint of thickness n-1. Neighborhood is defined on the global domain (all subdomains combined). History: first version by B.Mathieu on 16/01/2007. A method that determines remote elements at partition time also exists (DomaineCutter::construire_elements_distants_ssdom). The method below has been validated by comparison with the partitioner method. Outputs have been verified for thicknesses up to 5 on tetrahedral meshes. The difficulty of the algorithm is to obtain virtual elements of thickness > 1 that lie on subdomains not in direct contact with the local subdomain. This difficulty is resolved by the algorithm below.
Definition at line 2058 of file Scatter.cpp.
|
static |
Same as Scatter::calculer_espace_distant_sommets for faces.
Definition at line 1180 of file Scatter.cpp.
|
static |
Based on the remote space of elements, computes the remote space of vertices.
For each joint, the set of vertices of all joint elements is sent to the neighboring processor. It is the processor that owns the vertex (the smallest PE that holds it) that puts it in its remote space. Warning: new joints are created. The following arrays are filled: dom.faces_joint(i).joint_item(JOINT_ITEM::SOMMET).items_distants();
Definition at line 1155 of file Scatter.cpp.
|
static |
For a geometric item "type_item", fills the nb_items_virtuels_ field of joints based on the number of remote items:
The number of virtual items on joint i of processor j is the number of remote items of joint j on processor i.
Definition at line 2695 of file Scatter.cpp.
|
static |
Assumes that each joint[i].joint_item(type_item).items_communs() contains the local indices of common joint items in the same order on both processors (local and neighbor). Fills renum_items_communs: column 0 = content of the items_communs array on the neighboring PE column 1 = content of the items_communs array on the local PE.
Definition at line 1220 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 271 of file Scatter.cpp.
|
static |
Builds the "correspondance" array such that for 0 <= i < sommets2.
size_array(), If sommet2(i) exists in sommets1, then sommets2(i, ...) == sommets1(correspondance[i], ...) Otherwise correspondance[i] = -1 Equality is checked to within epsilon in absolute value (i.e. abs(x1-x2) < epsilon) The algorithm is generally O(n1*log(n1) + n2*log(n1)) (search based on quicksort). If the sort fails, an O(n1*n2) algorithm is used. Arrays sommets1 and sommets2 must be 2-dimensional. The correspondance array must have size sommets2.size_array(). Return value: number of vertices of sommets2 not found in sommets1.
Definition at line 2366 of file Scatter.cpp.
|
static |
Builds the joint_item(JOINT_ITEM::ARETE).items_communs arrays for all joints of the domain.
| zvf | The VF domain to process. |
Definition at line 2683 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 2482 of file Scatter.cpp.
|
static |
Builds the joint_item(JOINT_ITEM::SOMMET).items_communs arrays for all joints of the domain dom.
| dom | The domain to process. |
| 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 resized / changed. |
Definition at line 2674 of file Scatter.cpp.
|
static |
Builds the items_communs + virtual space structure of an array containing indices of geometric items, indexed by another geometric item type.
Example: array indexed by md_indice, containing indices of md_valeur: type_indice type_valeur example array: element vertex domaine.les_elems() face vertex faces_sommets element face elem_faces face element faces_voisins element element ? element edge elem_aretes Nb_valeurs_max is the number of real items of type "type_valeur".
Definition at line 1621 of file Scatter.cpp.
|
static |
Builds an MD_Vector_std from the joint information of the domain for the requested item type.
Definition at line 1277 of file Scatter.cpp.
|
static |
Builds the parallel structures of the domain (determination of distant elements as a function of joint thickness,.
determination of distant vertices, creation of virtual vertices and elements)
Definition at line 673 of file Scatter.cpp.
|
static |
Current periodic algorithms (P1B assembler, OpDivElem P1B) require that for each virtual periodic face, the opposite face is.
also virtual. This is not guaranteed at the output of the calculer_elements_distants method. This method adds the missing elements to the remote spaces to ensure this condition: If a remote element for a given PE is adjacent to a periodic face, the element adjacent to the opposite face is added to the remote space.
Definition at line 1908 of file Scatter.cpp.
| Domaine & Scatter::domaine | ( | ) |
Returns the associated domain.
Definition at line 74 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 2739 of file Scatter.cpp.
Reads and completes a parallel domain according to the keywords read in the data set.
Format: Scatter [debug] file_name domain_name Reads the vertices, elements and joint vertices and faces, builds the distant and virtual spaces according to the joint layer thickness.
Implements Interprete.
Definition at line 129 of file Scatter.cpp.
|
virtual |
Reads the domain from the file named "nomentree", of type LecFicDistribueBin or LecFicDistribue.
Expected format: Domaine::ReadOn
Reimplemented in ScatterMED.
Definition at line 469 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 395 of file Scatter.cpp.
|
static |
Reorders joint faces so that they appear in the same order on each pair of neighboring processors.
In practice, for a pair pe1 < pe2, pe1 sends its joint faces to pe2 and pe2 translates them to local vertex indices. The joint faces of PE2 are therefore not used.
Definition at line 1675 of file Scatter.cpp.
|
static |
Sort joints by increasing neighbor proc number.
Definition at line 712 of file Scatter.cpp.
|
static |
Method used by interpreters that modify the domain (sequential), destroys the descriptors of vertices and elements to allow modification of these arrays.
Definition at line 2754 of file Scatter.cpp.