TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Partitionneur_base.h
1/****************************************************************************
2* Copyright (c) 2026, CEA
3* All rights reserved.
4*
5* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
6* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8* 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
9*
10* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
11* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
12* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
13*
14*****************************************************************************/
15#ifndef Partitionneur_base_included
16#define Partitionneur_base_included
17
18#include <TRUSTTabs_forward.h>
19#include <Noms.h>
20#include <Static_Int_Lists.h>
21
22#include <Objet_U_With_Params.h>
23class Param;
24#include <Domaine_forward.h>
25
26/*! @brief Classe de base des partitionneurs de domaine (pour decouper un maillage avant un calcul parallele).
27 *
28 * Cette classe decrit l'interface commune a tous les partitionneurs:
29 * Exemple :
30 *
31 * // Creation d'un instance de la classe:
32 * Partitionneur_xxx part;
33 * // Association du domaine de calcul a decouper
34 * part.associer_domaine(domaine);
35 * // Initialisation des parametres specifiques a la classe derivee!
36 * fichier_data >> part; // Lecture des parametres dans le jdd
37 * ou
38 * part.initialiser(nb_parties); // Initialisation directe (depend de la classe)
39 * // Si besoin :
40 * part.declarer_bords_periodiques(liste_noms_bords_perio);
41 * // Construction du tableau de decoupage:
42 * ArrOfInt elem_part;
43 * part.construire_partition(elem_part);
44 *
45 * ATTENTION: en principe, l'implementation de la methode construire_partition()
46 * doit assurer que le decoupage est valide (application des corrections pour les bords
47 * periodiques et autres...)
48 *
49 */
50template <typename _SIZE_>
52{
53 Declare_base_with_param_32_64(Partitionneur_base_32_64);
54
55public:
56 using int_t = _SIZE_;
57 using ArrOfInt_t = ArrOfInt_T<_SIZE_>;
58 using IntVect_t = IntVect_T<_SIZE_>;
59 using IntTab_t = IntTab_T<_SIZE_>;
63
64 using BigArrOfInt_ = TRUSTArray<int, _SIZE_>; // always int as value type, will hold proc/partition number.
66
67 int lire_motcle_non_standard(const Motcle&, Entree&) override { return -1; }
68 virtual void associer_domaine(const Domaine_t& domaine) = 0;
69 virtual void construire_partition(BigIntVect_& elem_part, int& nb_parts_tot) const = 0;
70
71 static void corriger_elem0_sur_proc0(BigIntVect_& elem_part);
72
74 const Static_Int_Lists_t& som_elem, const int_t my_offset,
75 Static_Int_Lists_t& graph);
76
77 static int_t corriger_bords_avec_graphe(const Static_Int_Lists_t& graph_elements_perio, const Static_Int_Lists_t& som_elem,
78 const Domaine_t& domaine, BigIntVect_& elem_part);
79 static void corriger_bords_avec_liste(const Domaine_t& dom, const int_t my_offset, BigIntVect_& elem_part);
80 static int_t corriger_sommets_bord(const Domaine_t& domaine, const ArrOfInt_t& renum_som_perio,
81 const Static_Int_Lists_t& som_elem, BigIntVect_& elem_part);
82 static int_t corriger_multiperiodique(const Domaine_t& domaine, const ArrOfInt_t& renum_som_perio,
83 const Static_Int_Lists_t& som_elem, BigIntVect_& elem_part);
84
85};
86
87using Partitionneur_base = Partitionneur_base_32_64<int>;
88using Partitionneur_base_64 = Partitionneur_base_32_64<trustIdType>;
89
90#endif
Classe Bord Cette classe represente un bord d'un domaine, c'est un type de frontiere.
Definition Bord.h:32
classe Domaine_32_64 un Domaine est un maillage compose d'un ensemble d'elements geometriques de meme...
Definition Domaine.h:62
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
Une chaine de caractere (Nom) en majuscules.
Definition Motcle.h:26
Inherits from Objet_U, adds the very common method set_param for the Objet_U hierarchy.
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
Classe de base des partitionneurs de domaine (pour decouper un maillage avant un calcul parallele).
TRUSTArray< int, _SIZE_ > BigArrOfInt_
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.
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 ...
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 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...
ArrOfInt_T< _SIZE_ > ArrOfInt_t
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...
virtual void associer_domaine(const Domaine_t &domaine)=0
IntVect_T< _SIZE_ > IntVect_t
TRUSTVect< int, _SIZE_ > BigIntVect_
Domaine_32_64< _SIZE_ > Domaine_t
Bord_32_64< _SIZE_ > Bord_t
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 :
IntTab_T< _SIZE_ > IntTab_t
virtual void construire_partition(BigIntVect_ &elem_part, int &nb_parts_tot) const =0
Static_Int_Lists_32_64< _SIZE_ > Static_Int_Lists_t
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.
Cette classe permet de stocker des listes d'entiers accessibles en temps constant.
Represents a an array of int/int64/double/... values.
Definition TRUSTArray.h:81