TRUST 1.9.8
HPC thermohydraulic platform
Loading...
Searching...
No Matches
Champ_Generique_Ecart_Type.cpp
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#include <Champ_Generique_Ecart_Type.h>
17#include <Champ_Generique_Moyenne.h>
18#include <Discretisation_base.h>
19#include <Schema_Temps_base.h>
20#include <Postraitement.h>
21#include <Synonyme_info.h>
22
23Implemente_instanciable(Champ_Generique_Ecart_Type,"Champ_Post_Statistiques_Ecart_Type|Ecart_Type",Champ_Generique_Statistiques_base);
24// XD ecart_type champ_post_statistiques_base ecart_type INHERITS_BRACE to calculate the standard deviation (statistic
25// XD_CONT rms) of the field nom_champ.
26
27
29{
30 return s << que_suis_je() << " " << le_nom();
31}
32
34{
36 return s ;
37}
38
40{
42 const Probleme_base& Pb = get_ref_pb_base();
43 const Champ_Generique_base& ch_integre = get_source(0);
45
46 Op_Ecart_Type_.associer(zdis,ch_integre,tstat_deb_,tstat_fin_);
47
48 Noms nom = get_source(0).get_property("nom");
49 Motcle nom_champ = nom[0];
50 Motcle nom_champ_moyenne("Moyenne_");
51 nom_champ_moyenne += nom_champ;
52 nom_champ_moyenne += "_";
53 nom_champ_moyenne += Nom(tstat_deb_,"%e");
54 nom_champ_moyenne += "_";
55 nom_champ_moyenne += Nom(tstat_fin_,"%e");
56
57 const Postraitement& mon_post = ref_cast(Postraitement,post);
58 if (mon_post.comprend_champ_post(nom_champ_moyenne))
59 {
60 const Champ_Generique_base& champ_stat_base = mon_post.get_champ_post(nom_champ_moyenne);
61 const Operateur_Statistique_tps_base& operateur = ref_cast(Champ_Generique_Moyenne,champ_stat_base).Operateur_Statistique();
62 const Op_Moyenne& op_moyenne = ref_cast(Op_Moyenne,operateur);
63 Op_Ecart_Type_.associer_op_stat(op_moyenne);
64
65 Nom prefix = Pb.le_nom() + "_";
66 if(post.le_nom() != "??" && post.le_nom() != "neant")
67 prefix += post.le_nom() +"_";
69 prefix += parent_name_ + "_";
70 Op_Ecart_Type_.completer(Pb, prefix);
71 }
72 else
73 {
74 Cerr<<"The specification of the post-processing rms field "<<finl;
75 Cerr<<get_property("nom")[0]<<finl;
76 Cerr<<"implies to specify before the corresponding "<<finl;
77 Cerr<<"post-processing statistics average field."<<finl;
78 Cerr<<"Please, modify your data set to specify the post-processing statistics"<<finl;
79 Cerr<<"average field before (instead of after) the rms field "<<finl;
80 Cerr<<get_property("nom")[0]<<finl;
81 exit();
82 }
83
84}
85
87{
88 const OBS_PTR(Champ_Generique_base)& mon_champ = integrale().le_champ();
89 OWN_PTR(Champ_base) espace_stockage_source;
90 const Champ_base& source = mon_champ->get_champ(espace_stockage_source);
91 Nature_du_champ nature_source = source.nature_du_champ();
92 int nb_comp = source.nb_comp();
93 OWN_PTR(Champ_Fonc_base) es_tmp;
94 espace_stockage = creer_espace_stockage(nature_source,nb_comp,es_tmp);
95 return espace_stockage;
96}
97
99{
100 // Creation de l'espace_stockage
101 const OBS_PTR(Champ_Generique_base)& mon_champ = integrale().le_champ();
102 OWN_PTR(Champ_base) espace_stockage_source;
103 const Champ_base& source = mon_champ->get_champ(espace_stockage_source);
104 Nature_du_champ nature_source = source.nature_du_champ();
105 int nb_comp = source.nb_comp();
106 if (!espace_stockage_)
107 creer_espace_stockage(nature_source,nb_comp,espace_stockage_);
108 else
109 espace_stockage_->changer_temps(temps());
110 DoubleTab& tab_ecart_type = espace_stockage_->valeurs();
111 tab_ecart_type = Op_Ecart_Type_.calculer_valeurs();
112 tab_ecart_type.echange_espace_virtuel();
113 return espace_stockage_;
114}
115
117{
118 //Creation des composantes serait a faire de maniere dynamique (Ecart_Type_...)
119
120 Motcles motcles(1);
121 motcles[0] = "composantes";
122
123 int rang = motcles.search(query);
124 switch(rang)
125 {
126
127 case 0:
128 {
129 //On fixe les composantes specifiques pour le Champ_Generique_Ecart_Type
130 //car dans Format_Post_Lml::ecrire_champ_lml() dans le cas d une localisation ELEM
131 //elles sont utilisees
132
133 //Actuellement choix fait d ajouter simplement numero de composante
134 /*
135 const Noms compo_cibles = get_source(0).get_property("composantes");
136 int size = compo_cibles.size();
137 Noms mots(size);
138 for (int i=0; i<size; i++) {
139 mots[i] = "Ecart_Type_";
140 mots[i] += compo_cibles[i];
141 }
142
143 return mots;
144
145 break;
146 */
147
148 const Noms source_compos = get_source(0).get_property("composantes");
149 int nb_comp = source_compos.size();
150 Noms compo(nb_comp);
151
152 for (int i=0; i<nb_comp; i++)
153 {
154 Nom nume(i);
155 compo[i] = nom_post_+nume;
156 }
157
158 return compo;
159 }
160 }
162}
163
164//Nomme le champ en tant que source par defaut
165//"Ecart_Type_"+nom_champ_source
167{
168 if (nom_post_=="??")
169 {
170 Nom nom_post_source, nom_champ_source;
171 const Noms nom = get_source(0).get_property("nom");
172 nom_champ_source = nom[0];
173 nom_post_source = "Ecart_Type_";
174 nom_post_source += nom_champ_source;
175 nommer(nom_post_source);
176 }
177}
178
classe Champ_Fonc_base Classe de base des champs qui sont fonction d'une grandeur calculee
const Noms get_property(const Motcle &query) const override
Renvoie la propriete demandee.
void completer(const Postraitement_base &post) override
const Probleme_base & get_ref_pb_base() const override
Renvoie le probleme qui porte le champ cible.
virtual const Champ_Generique_base & get_source(int i) const
const Domaine_dis_base & get_ref_domaine_dis_base() const override
Renvoie une ref au domaine_discretisee du domaine sur lequel sera evalue l espace de stockage.
class Champ_Generique_Ecart_Type OWN_PTR(Champ_base) destine a post-traiter un Ecart_Type d un champ ...
const Noms get_property(const Motcle &query) const override
Renvoie la propriete demandee.
const Integrale_tps_Champ & integrale() const override
void completer(const Postraitement_base &post) override
const Champ_base & get_champ_without_evaluation(OWN_PTR(Champ_base)&espace_stockage) const override
const Champ_base & get_champ(OWN_PTR(Champ_base)&espace_stockage) const override
class Champ_Generique_Moyenne OWN_PTR(Champ_base) destine a post-traiter une moyenne d un champ gener...
Classe Champ_Generique_Statistiques_base Classe de base des classes de champs generiques dedies aux s...
class Champ_Generique_base
virtual const Noms get_property(const Motcle &query) const
Renvoie la propriete demandee.
void nommer(const Nom &nom) override
Donne un nom a l'Objet_U Methode virtuelle a surcharger.
OBS_PTR(Probleme_base) ref_pb_
classe Champ_base Cette classe est la base de la hierarchie des champs.
Definition Champ_base.h:43
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
virtual int nb_comp() const
Definition Field_base.h:56
virtual Nature_du_champ nature_du_champ() const
Definition Field_base.h:77
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
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
Definition Objet_U.cpp:104
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
Definition Objet_U.cpp:293
virtual const Nom & le_nom() const
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
Definition Objet_U.cpp:319
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Definition Objet_U.cpp:282
classe Operateur_Statistique_tps_base Represente des operations statistiques sur les champs.
Classe de base pour l'ensemble des postraitements.
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
classe Postraitement La classe est dotee -d une liste de champs generiques champs_post_complet_ qui c...
int comprend_champ_post(const Motcle &identifiant) const
virtual const Champ_Generique_base & get_champ_post(const Motcle &nom) const
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
Definition Probleme_U.h:109
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
Classe de base des flux de sortie.
Definition Sortie.h:52
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")