TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Champ_Generique_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
16#ifndef Champ_Generique_base_included
17#define Champ_Generique_base_included
18
19#include <TRUST_Deriv.h>
20#include <TRUST_Ref.h>
21#include <Domaine.h>
22#include <ArrOfBit.h>
23#include <YAML_data.h>
24
28class Param;
29class Champ_base;
30
31enum class Entity { NODE, SEGMENT, FACE, ELEMENT };
32
33/*! @brief class Champ_Generique_base
34 *
35 * Classe de base des champs generiques pour importation d un champ discret et actions elementaires sur ce champ
36 *
37 * (postraitement, etc)
38 * Attention: toutes les methodes sont PARALLELES, il faut les appeler
39 * simultanement sur tous les processeurs (get_domain() peut par exemple
40 * construire le domaine parallele avant de le renvoyer).
41 *
42 */
44{
45 Declare_base(Champ_Generique_base);
46public:
47
48 /* XXX Elie Saikali : re-mets ici et pas dans Objet_U */
49 virtual std::vector<YAML_data> data_a_sauvegarder() const { return std::vector<YAML_data>(); };
50 int sauvegarder(Sortie& os) const override { return 0; }
51 int reprendre(Entree& is) override { return 1; }
52
53 virtual void set_param(Param& param) const override=0;
54 int lire_motcle_non_standard(const Motcle&, Entree&) override;
55 virtual int get_dimension() const;
56 virtual double get_time() const; //rend le temps du champ encapsule
57 virtual const Probleme_base& get_ref_pb_base() const;
58 virtual const Discretisation_base& get_discretisation() const;
59 virtual const Motcle get_directive_pour_discr() const;
60
61 void nommer(const Nom& nom) override;
62 virtual const Nom& get_nom_post() const;
63 //rend -1 si identifiant est le nom, numero de composante sinon
64 static inline int composante(const Nom& nom_test,const Nom& nom, const Noms& composantes,const Noms& synonyms);
65
66 virtual void get_property_names(Motcles& list) const;
67 virtual const Noms get_property(const Motcle& query) const; //repond aux requetes nom, nom_cible, unites et composantes
68
69 virtual Entity get_localisation(const int index = -1) const; //localisation ELEMENT ou SOM sont post-traitables
70 virtual int get_nb_localisations() const;
71
72 virtual const DoubleTab& get_ref_values() const;
73 virtual void get_copy_values(DoubleTab&) const;
74 virtual void get_xyz_values(const DoubleTab& coords, DoubleTab& values, ArrOfBit& validity_flag) const;
75
76 virtual const Domaine& get_ref_domain() const; //rend une reference au domaine associe au champ
77 virtual void get_copy_domain(Domaine&) const;
78 virtual const Domaine_dis_base& get_ref_domaine_dis_base() const; //rend le domaine discretise lie au domaine
79 virtual const Domaine_Cl_dis_base& get_ref_zcl_dis_base() const; //rend la zcl discretisee liee a l equation portant le champ cible
80
81 virtual const DoubleTab& get_ref_coordinates() const;
82 virtual void get_copy_coordinates(DoubleTab&) const;
83 virtual const IntTab& get_ref_connectivity(Entity index1, Entity index2) const;
84 virtual void get_copy_connectivity(Entity index1, Entity index2, IntTab&) const;
85
86 // Remet l'objet dans l'etat obtenu par le constructeur par defaut
87 virtual void reset() = 0;
88 virtual void completer(const Postraitement_base& post) = 0; //Complete l operateur eventuellement porte par le champ
89 //et nomme les sources par defaut
90 virtual void mettre_a_jour(double temps) = 0; //Mise a jour d un operateur eventuellement porte par le champ
91
92 // La methode get_champ() est en particulier appelee par la classe de postraitement lorsque
93 // le champ doit etre postraite (dt_post ecoule).
94 // L'appelant doit fournir un champ "espace_stockage" non type comme parametre
95 // "espace_stockage".
96 //
97 // Soit elle renvoie un champ existant (voir Champ_Generique_refChamp)
98 // et elle n'utilise pas espace_stockage.
99 // Soit elle construit un nouveau champ qu'elle stocke dans espace_stockage,
100 // et la valeur de retour est espace_stockage
101 // L'appelant recupere le resultat du calcul dans la valeur de retour,
102 // sachant qu'elle peut eventuellement referencer espace_stockage
103 // (donc, ne pas detruire espace_stockage trop tot).
104
105 // Les etapes de creation de l espace de stockage sont :
106 // espace_stockage.typer(type_champ)
107 // espace_stockage.associer_domaine_dis_base(un_domaine_dis)
108 // espace_stockage.fixer_nb_comp(nb_comp);
109 // espace_stockage.fixer_nb_valeurs_nodales(nb_ddl);
110 // Calcul des valeurs par instruction de la forme
111 // espace_stockage.valeurs() = Operateur.calculer(source.valeurs())
112 // espace_stockage.valeurs().echange_espace_virtuel()
113 //return espace_stockage
114
115 virtual const Champ_base& get_champ(OWN_PTR(Champ_base) &espace_stockage) const = 0;
116 virtual const Champ_base& get_champ_without_evaluation(OWN_PTR(Champ_base)& espace_stockage) const=0;
117
118 //get_champ_post() renvoie le champ si l identifiant passe en parametre designe
119 //le nom du champ ou l une de ses composantes
120 virtual const Champ_Generique_base& get_champ_post(const Motcle& nom) const;
121 virtual bool has_champ_post(const Motcle& nom) const;
122
123 //renvoie 1 si le champ est identifie, 0 sinon
124 virtual int comprend_champ_post(const Motcle& identifiant) const;
125
126 //get_info_type_post() renvoie 0 si l on doit postraiter un tableau, 1 pour un tenseur
127 virtual int get_info_type_post() const = 0;
128
129 //fixe l attribut identifiant_appel_ du champ pour indiquer si la requete
130 //a ete lancee par le nom ou une composante du champ (cf Champ_Generique_Interpolation)
131 inline void fixer_identifiant_appel(const Nom& identifiant)
132 {
133 identifiant_appel_ = identifiant;
134 }
135
136 virtual const Noms& fixer_noms_compo(const Noms& noms)
137 {
138 Cerr << "The method " << __func__ << " is not overloaded in " << que_suis_je() << finl;
139 throw;
140 }
141 virtual const Noms& fixer_noms_synonyms(const Noms& noms)
142 {
143 Cerr << "The method " << __func__ << " is not overloaded in " << que_suis_je() << finl;
144 throw;
145 }
146
147protected:
148 static void assert_parallel(int);
149
154};
155
156inline int Champ_Generique_base::composante(const Nom& nom_test,const Nom& nom,const Noms& composantes, const Noms& syno)
157{
158 Motcle motlu(nom_test);
159 if (motlu == Motcle(nom))
160 return -1;
161 for (auto& itr : syno)
162 if (itr==motlu) return -1;
163 int n = composantes.size();
164 Motcles les_noms_comp(n);
165 for (int i=0; i<n; i++)
166 les_noms_comp[i] = composantes[i];
167 int ncomp = les_noms_comp.search(motlu);
168 if (ncomp == -1)
169 {
170 Cerr << "Error TRUST, the identifier : " << nom_test << finl
171 << "did not designate the name of the field tested nor any of its components\n";
172 Cerr <<" the components of field named "<<nom <<" are :"<< finl;
173 for (int ii=0; ii<n; ii++)
174 Cerr << composantes[ii] << " ";
175 Cerr << finl;
176 exit();
177 }
178 return ncomp;
179}
180
181/*
182 * @brief class Champ_Generique_erreur
183 *
184 * Classe Champ_Generique_erreur
185 */
187{
188public:
190
192 {
193 mot1 = mot2;
194 Cerr<<"Error of type : "<<mot1<<finl;
196 }
197};
198
199#endif /* Champ_Generique_base_included */
class Champ_Generique_base
virtual const Noms get_property(const Motcle &query) const
Renvoie la propriete demandee.
virtual const Domaine_dis_base & get_ref_domaine_dis_base() const
Renvoie une ref au domaine_discretisee du domaine sur lequel sera evalue l espace de stockage.
virtual bool has_champ_post(const Motcle &nom) const
virtual void mettre_a_jour(double temps)=0
virtual const Noms & fixer_noms_compo(const Noms &noms)
virtual void get_property_names(Motcles &list) const
Renvoie la liste des "query" possibles pour le champ.
virtual const IntTab & get_ref_connectivity(Entity index1, Entity index2) const
Renvoie le tableau de connectivite entre l'entite geometrique index1 et l'entite index2.
static int composante(const Nom &nom_test, const Nom &nom, const Noms &composantes, const Noms &synonyms)
int reprendre(Entree &is) override
Reprise d'un Objet_U sur un flot d'entree Methode a surcharger.
virtual const Champ_base & get_champ(OWN_PTR(Champ_base) &espace_stockage) const =0
virtual int comprend_champ_post(const Motcle &identifiant) const
virtual void get_copy_connectivity(Entity index1, Entity index2, IntTab &) const
void fixer_identifiant_appel(const Nom &identifiant)
virtual void set_param(Param &param) const override=0
virtual const Noms & fixer_noms_synonyms(const Noms &noms)
virtual const Champ_Generique_base & get_champ_post(const Motcle &nom) const
virtual const Domaine_Cl_dis_base & get_ref_zcl_dis_base() const
Renvoie une ref au domaine_cl_discretisee de l equation portant le champ cible.
virtual double get_time() const
Renvoie le temps du Champ_Generique_base.
virtual int get_dimension() const
Renvoie la dimension de l'espace dans lequel le champ est defini.
virtual void get_copy_values(DoubleTab &) const
Remplit le tableau values avec les valeurs discretes du champ (cree une copie).
virtual int get_info_type_post() const =0
virtual std::vector< YAML_data > data_a_sauvegarder() const
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 int get_nb_localisations() const
virtual void get_copy_domain(Domaine &) const
Cree une copie du domaine sur lequel sera evalue l espace de stockage.
virtual const DoubleTab & get_ref_coordinates() const
Renvoie une reference au tableau des coordonnees des sommets du maillage support du champ,...
virtual void get_xyz_values(const DoubleTab &coords, DoubleTab &values, ArrOfBit &validity_flag) const
Calcule la valeur ponctuelle du champ aux coordonnees donnees dans coords et les met dans values.
virtual const DoubleTab & get_ref_values() const
Renvoie une reference au tableau de valeurs discretes s'il existe en memoire.
virtual const Nom & get_nom_post() const
virtual const Probleme_base & get_ref_pb_base() const
Renvoie le probleme qui porte le champ cible.
virtual Entity get_localisation(const int index=-1) const
Renvoie le type des entites geometriques sur auxquelles les valeurs discretes sont attachees (NODE po...
int sauvegarder(Sortie &os) const override
Sauvegarde d'un Objet_U sur un flot de sortie Methode a surcharger.
virtual void get_copy_coordinates(DoubleTab &) const
virtual const Champ_base & get_champ_without_evaluation(OWN_PTR(Champ_base)&espace_stockage) const =0
void nommer(const Nom &nom) override
Donne un nom a l'Objet_U Methode virtuelle a surcharger.
virtual void reset()=0
virtual const Domaine & get_ref_domain() const
Renvoie une ref au domaine sur lequel sera evalue l espace de stockage.
virtual const Motcle get_directive_pour_discr() const
Renvoie la directive (champ_elem, champ_sommets, champ_face ou pression) pour lancer la discretisatio...
virtual const Discretisation_base & get_discretisation() const
Renvoie la discretisation associee au probleme.
OBS_PTR(Probleme_base) ref_pb_
virtual void completer(const Postraitement_base &post)=0
static void assert_parallel(int)
Champ_Generique_erreur(const Nom &mot2)
classe Champ_base Cette classe est la base de la hierarchie des champs.
Definition Champ_base.h:43
classe Discretisation_base Cette classe represente un schema de discretisation en espace,...
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
Une chaine de caractere (Nom) en majuscules.
Definition Motcle.h:26
Un tableau d'objets de la classe Motcle.
Definition Motcle.h:63
int search(const Motcle &t) const
Definition Motcle.cpp:321
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
Un tableau de chaine de caracteres (VECT(Nom)).
Definition Noms.h:26
friend class Entree
Definition Objet_U.h:76
friend class Sortie
Definition Objet_U.h:75
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
Definition Objet_U.cpp:104
Objet_U()
Constructeur par defaut : attribue un numero d'identifiant unique a l'objet (object_id_),...
Definition Objet_U.cpp:55
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
Classe de base pour l'ensemble des postraitements.
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455