TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Postraitement.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 Postraitement_included
17#define Postraitement_included
18
19#include <Operateurs_Statistique_tps.h>
20#include <Champ_Gen_de_Champs_Gen.h>
21#include <Liste_Champ_Generique.h>
22#include <Postraitement_base.h>
23#include <Schema_Temps_base.h>
24#include <Format_Post_base.h>
25#include <Probleme_base.h>
26#include <Champs_Fonc.h>
27#include <Sondes_Int.h>
28#include <TRUST_List.h>
29#include <Interprete.h>
30#include <TRUST_Ref.h>
31#include <Parser_U.h>
32#include <Sondes.h>
33
34/*! @brief classe Postraitement La classe est dotee -d une liste de champs generiques champs_post_complet_ qui contient
35 *
36 * tous les champs generiques du post-traitement
37 * -d une liste d identifiants noms_champs_a_post_ qui contient l identifiant
38 * des champs a post-traiter
39 *
40 * -Lecture des champs generiques declares dans le bloc "definition_champs" (ajoutes dans champs_post_complet_)
41 * et ajout dans cette liste des champs crees par macro (declenche par ancienne syntaxe dans "champs" et "statistiques")
42 * Construction de la liste des identifiants noms_champs_a_post_ au cours des operations de lecture
43 * -Mise a jour des champs generiques, en realite mise a jour des operateurs statistiques pour les champs qui en porte
44 * -postraitement realise dans postraiter_champs()
45 * Parcours des identifiants
46 * Le champ generique correspondant a un identifiant est recupere par : get_champ_post("identifiant")
47 * Pour ce champ generique : on calcul les valeurs a ecrire par : get_champ(espace_stockage)
48 * on recupere les informations complementaires par : get_property(), get_time() ...
49 * Ecriture des valeurs calculees : postraiter(...)
50 *
51 *
52 * Les macros utilises pour la creation des champs generiques sont detaillees dans le .cpp de la classe
53 * Voir creer_champ_post() et creer_champ_post_stat()
54 *
55 *
56 * @sa Hierarchie des champs generiques (Champ_Generique_base), La syntaxe a respecter dans le jdd, Postraitement {, Sondes, {, ..., }, Definition_champs, {, //Specification des champs generiques, }, Champs, {, -Creation de champ generique par macro si utilisation ancienne syntaxe (ex : vitesse elem) et ajout, identifiant dans la liste noms_champs_a_post_, -Ajout dans la liste noms_champs_a_post_ pour cas d un champ declare dans le bloc "definition_champs", }, Statistiques, {, t_deb val_1 t_fin_val_2, -Creation de champ generique par macro si utilisation ancienne syntaxe (ex : Moyenne vitesse elem) et ajout, identifiant dans la liste noms_champs_a_post_, }, }
57 */
59{
60 Declare_instanciable_sans_constructeur(Postraitement);
61public:
62 //
63 // Methodes reimplementees :
64 //
65 void associer_nom_et_pb_base(const Nom&, const Probleme_base&) override;
66 void postraiter(int forcer) override;
67 void mettre_a_jour(double temps) override;
68 void finir() override;
69 std::vector<YAML_data> data_a_sauvegarder() const override;
70 int sauvegarder(Sortie& os) const override;
71 int reprendre(Entree& is) override;
72 void completer() override;
73 void completer_sondes() override;
74 void init() override;
75 void set_param(Param& param) const override;
76 int lire_motcle_non_standard(const Motcle&, Entree&) override;
77 void resetTime(double t, const std::string dirname) override;
78
79 // specifique cgns : avoid duplicated file names
80 void modify_cgns_basenames_and_reinit(const int, const int);
81
82 //
83 // Methodes specifiques :
84 //
86
87 inline const Sondes& les_sondes() const { return les_sondes_; }
88 inline Sondes& les_sondes() { return les_sondes_; }
89 inline Probleme_base& probleme() { return mon_probleme.valeur(); }
90 inline const Probleme_base& probleme() const { return mon_probleme.valeur(); }
91
93 int traiter_sondes();
94 virtual int postraiter_champs();
95 // Called by postraiter_champs - only deal with the writing of the field values, not the geometrical parts:
96 virtual void postprocess_field_values();
97
98 int traiter_champs();
99 virtual int lire_champs_a_postraiter(Entree& is, bool expect_acco); //Lance eventuellement la creation de champs generiques par macro
100 //et construit la liste noms_champs_a_post_ des champs post-traites
101 int lire_champs_stat_a_postraiter(Entree&, bool expect_acco); //idem pour statistiques
102 int lire_champs_operateurs(Entree& is); //Lecture d un champ generique, nomme et complete
103 void complete_champ(Champ_Generique_base& champ,const Motcle& motlu);
105 int traiter_tableaux();
107 inline int lpost(double, double) const;
108 inline int lpost_champ(double) const;
109 inline int lpost_stat(double) const;
110 inline int ind_post(int nb_pas_dt) const { return (nb_pas_dt%nb_pas_dt_post_==0) ? 1 : 0; }
111 int nb_pas_dt_post() const { return nb_pas_dt_post_; }
112
113 inline double dt_post() const { return dt_post_; }
114 inline const Nom& format() const { return format_; }
115 inline Nom nom_fich() const { return nom_fich_; }
116 static inline LIST(Nom)& noms_fichiers_sondes() { return noms_fichiers_sondes_; }
120 inline int sondes_demande() { return sondes_demande_; }
121 inline int champs_demande() { return champs_demande_; }
122 inline int stat_demande() const { return stat_demande_; }
124 inline int tableaux_demande() { return tableaux_demande_; }
126 inline LIST(Nom)& noms_champs_a_post() { return noms_champs_a_post_; }
128
129 //On distingue le postraitement d un tableau et d un tenseur
130 int postraiter(const Domaine& dom,const Noms& unites,const Noms& noms_compo,const int ncomp,
131 const double temps,
132 Nom nom_post,const Nom& localisation,const Nom& nature,const DoubleTab& valeurs,int tenseur);
133
134 int postraiter_tableau(const Domaine& dom,const Noms& unites,const Noms& noms_compo,const int ncomp,
135 const double temps,
136 Nom nom_post,const Nom& localisation,const Nom& nature,const DoubleTab& valeurs);
137
138 int postraiter_tenseur(const Domaine& dom,const Noms& unites,const Noms& noms_compo,const int ncomp,
139 const double temps,
140 Nom nom_post,const Nom& localisation,const Nom& nature,const DoubleTab& valeurs);
141
142
143 virtual const Champ_Generique_base& get_champ_post(const Motcle& nom) const;
144 virtual bool has_champ_post(const Motcle& nom) const;
145
146 Nom set_expression_champ(const Motcle& motlu1,const Motcle& motlu2,
147 const Motcle& motlu3,const Motcle& motlu4,
148 const int trouve);
149
150 //Methodes macro pour generer la creation de :
151 //-Champ_Generique_Interpolation
152 void creer_champ_post(const Motcle& motlu1,const Motcle& motlu2,Entree& s);
153 //-Champ_Generique_Interpolation_Statistiques
154 void creer_champ_post_stat(const Motcle& motlu1,const Motcle& motlu2,const Motcle& motlu3,const Motcle& motlu4,const double t_deb, const
155 double t_fin,Entree& s);
156 //-Champ_Generique_Morceau_Equation
157 void creer_champ_post_moreqn(const Motcle& type,const Motcle& option,const int num_eq,const int num_morceau,const int compo,Entree& s);
158
159 //Methode macro pour le cas des champs med
160 void creer_champ_post_med(const Motcle& motlu1,const Motcle& motlu2,Entree& s);
161
162 //Methode comprend_champ_post() qui indique si l identifiant correspond au nom d un Champ_Generique_base
163 //ou a l une de ses composantes-les sources sont testees recusrivement
164 int comprend_champ_post(const Motcle& identifiant) const;
165
166 //temporaire a reviser
168 static Nom get_nom_localisation(const Entity& loc);
169
171 operateur_statistique) const;
172
173 inline int& compteur_champ_stat();
174 inline const double& tstat_deb() const;
175 inline const double& tstat_fin() const;
177
178 /*! Calls by postraiter_champs() and allows a derived class to write extra meshes if needed
179 * @return -1 if nothing more was written, 1 otherwise.
180 */
181 virtual int write_extra_mesh() { return -1; }
182 const OBS_PTR(Domaine)& domaine() { return le_domaine_; }
183 int DeprecatedKeepDuplicatedProbes=0; // Ancien format des sondes dans les .son qui autorise les sondes dupliquees
184
185protected:
186
188 double dt_post_; ///< ecriture des donnees (champs, stats, int_array) tous les dt_post (un temps)
189 int nb_pas_dt_post_; ///< ecriture des donnees (champs, stats, int_array) tous les dt_post (une periode en nb d'iteration)
191
192 Sondes les_sondes_; // Sondes a traiter
193 Sondes_Int les_sondes_int_; // Sondes pour des tableaux d'entiers
194 Operateurs_Statistique_tps les_statistiques_; // Liste d'operateurs statistiques a traiter
195
196 LIST(Nom) noms_champs_a_post_; //contient les identifiants des champs a postraiter
197 Liste_Champ_Generique champs_post_complet_; //contient l ensemble des champs generiques dedies au post-traitement
198
199 //attributs pour sauvegarde-reprise
200 //redondant avec attributs des Champ_Generique_Statistiques
201 //Tout le processus de sauvegarde reprise devrait etre gere par le champ statistique
204
205 //Otion a gerer par le champ statistique
208
209 LIST(OBS_PTR(IntVect)) tableaux_a_postraiter_; // Liste de references a des tableaux a post-traiter
210 LIST(Nom) noms_tableaux_;
211
213 std::vector<std::string> locs_required_;
214 void add_locs_required_if_not(const Motcle& );
215
216 static LIST(Nom) noms_fichiers_sondes_;
220 Nom suffix_for_reset_; // Suffix appended to post base name when the method resetTime() was invoked - default to "_AFTER_RESET"
221 double temps_, dernier_temps_; // temps du precedent appel a postraiter()
222 OBS_PTR(Domaine) le_domaine_;
223 OBS_PTR(Domaine_dis_base) domaine_dis_pour_faces_;
224};
225
226
227inline int Postraitement::lpost(double temps_courant, double dt_post) const
228{
229 double epsilon = 1.e-8;
230 if (dt_post<=temps_courant - dernier_temps_)
231 return 1;
232 else
233 {
234 // Voir Schema_Temps_base::limpr pour information sur epsilon et modf
235 double i, j;
236 modf(temps_courant/dt_post + epsilon, &i);
237 modf(dernier_temps_/dt_post + epsilon, &j);
238 return ( i>j );
239 }
240}
241
242/*! @brief Test de postraitement en tenant compte de l'evolution en temps du champ.
243 *
244 * Renvoie VRAI si le champ necessite un postraitement, vu
245 * le temps courant et le pas de temps fourni.
246 *
247 * @param (double temps_courant) le temps courant
248 * @param (double dt) le pas de temps qui vient d'etre accompli
249 * @return (int) valeur booleenne, VRAI si le pas de temp et le temps courant fournis indique qu'un postraitement est necessaire, FAUX sinon.
250 */
252inline const double& Postraitement::tstat_deb() const { return tstat_deb_; }
253inline const double& Postraitement::tstat_fin() const { return tstat_fin_; }
254
255#endif /* Postraitement_included */
Classe de base des champs generiques ayant comme source d'autres champs generiques L'utilisation des ...
class Champ_Generique_base
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
Classe de base des formats de postraitements pour les champs (lata, med, cgns, lml,...
classe List_Champ_Generique Represente une liste de Champ_Generique_base
Une chaine de caractere (Nom) en majuscules.
Definition Motcle.h:26
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
classe Operateur_Statistique_tps_base Represente des operations statistiques sur les champs.
classe Operateurs_Statistique_tps Cette classe represente une liste d'operateurs statistiques en temp...
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
classe Parser_U Version de la classe Parser, derivant de Objet_U.
Definition Parser_U.h:32
LIST(Nom) noms_champs_a_post_
double tstat_dernier_calcul_
LIST(OBS_PTR(IntVect)) tableaux_a_postraiter_
void associer_nom_et_pb_base(const Nom &, const Probleme_base &) override
LIST(Nom) noms_tableaux_
static Nom get_nom_localisation(const Entity &loc)
Operateurs_Statistique_tps & les_statistiques()
int lpost(double, double) const
OBS_PTR(Domaine) le_domaine_
int postraiter_tableau(const Domaine &dom, const Noms &unites, const Noms &noms_compo, const int ncomp, const double temps, Nom nom_post, const Nom &localisation, const Nom &nature, const DoubleTab &valeurs)
Operateurs_Statistique_tps les_statistiques_
int est_le_premier_postraitement_pour_nom_fich_
void mettre_a_jour(double temps) override
const Sondes & les_sondes() const
const OBS_PTR(Domaine) &domaine()
int & compteur_champ_stat()
Test de postraitement en tenant compte de l'evolution en temps du champ.
Probleme_base & probleme()
double dt_post() const
virtual int write_extra_mesh()
int comprend_champ_post(const Motcle &identifiant) const
int reprendre(Entree &is) override
Reprise d'un Objet_U sur un flot d'entree Methode a surcharger.
OBS_PTR(Domaine_dis_base) domaine_dis_pour_faces_
int lire_champs_stat_a_postraiter(Entree &, bool expect_acco)
int stat_demande_definition_champs() const
int lire_tableaux_a_postraiter(Entree &)
void completer_sondes() override
int est_le_dernier_postraitement_pour_nom_fich_
int sauvegarder(Sortie &os) const override
Sauvegarde d'un Objet_U sur un flot de sortie Methode a surcharger.
OWN_PTR(Format_Post_base) format_post_
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.
void modify_cgns_basenames_and_reinit(const int, const int)
virtual int lire_champs_a_postraiter(Entree &is, bool expect_acco)
Lit le nom des champs a postraiter sur un flot d'entree.
Sondes_Int les_sondes_int_
int traiter_champs()
Effectue le postraitement des Champs si cela est necessaire.
int nb_pas_dt_post_
ecriture des donnees (champs, stats, int_array) tous les dt_post (une periode en nb d'iteration)
bool stat_demande_definition_champs_
const double & tstat_deb() const
int cherche_stat_dans_les_sources(const Champ_Gen_de_Champs_Gen &ch, Motcle nom)
On recherche les champs statistiques dans les sources du champ courant.
void postraiter(int forcer) override
const Probleme_base & probleme() const
void verifie_nom_et_sources(const Champ_Generique_base &champ)
void creer_champ_post_med(const Motcle &motlu1, const Motcle &motlu2, Entree &s)
int stat_demande() const
virtual void postprocess_field_values()
int lpost_champ(double) const
Nom nom_fich() const
virtual const Champ_Generique_base & get_champ_post(const Motcle &nom) const
std::vector< std::string > locs_required_
int DeprecatedKeepDuplicatedProbes
void add_locs_required_if_not(const Motcle &)
double dernier_temps_
LIST(Nom) &noms_champs_a_post()
void completer() override
virtual int postraiter_champs()
Effectue le postraitement des Champs de facon imperative.
int postraiter_sondes()
Effectue le postraitement lie au sondes de facon imperative.
int & est_le_dernier_postraitement_pour_nom_fich()
Sondes & les_sondes()
int lire_champs_operateurs(Entree &is)
Lit les champs a postraiter sur un flot d'entree.
int traiter_sondes()
Mets a jour (en temps) le sondes.
void init() override
Initialise le postraitement.
void creer_champ_post_moreqn(const Motcle &type, const Motcle &option, const int num_eq, const int num_morceau, const int compo, Entree &s)
void creer_champ_post_stat(const Motcle &motlu1, const Motcle &motlu2, const Motcle &motlu3, const Motcle &motlu4, const double t_deb, const double t_fin, Entree &s)
Parser_U fdt_post_
int postraiter_tenseur(const Domaine &dom, const Noms &unites, const Noms &noms_compo, const int ncomp, const double temps, Nom nom_post, const Nom &localisation, const Nom &nature, const DoubleTab &valeurs)
int champ_fonc(Motcle &nom_champ, OBS_PTR(Champ_base)&mon_champ, OBS_PTR(Operateur_Statistique_tps_base)&operateur_statistique) const
const Nom & format() const
const double & tstat_fin() const
virtual bool has_champ_post(const Motcle &nom) const
void complete_champ(Champ_Generique_base &champ, const Motcle &motlu)
void finir() override
Finalise le postraitement Ferme le fichier associe.
static LIST(Nom) noms_fichiers_sondes_
int nb_pas_dt_post() const
int ind_post(int nb_pas_dt) const
std::vector< YAML_data > data_a_sauvegarder() const override
for PDI IO: retrieve name, type and dimensions of the fields to save/restore
double dt_integr_serie_
Liste_Champ_Generique champs_post_complet_
void set_param(Param &param) const override
int lpost_stat(double) const
void creer_champ_post(const Motcle &motlu1, const Motcle &motlu2, Entree &s)
static LIST(Nom) &noms_fichiers_sondes()
Postraitement()
Constructeur par defaut.
int & est_le_premier_postraitement_pour_nom_fich()
const Liste_Champ_Generique & champs_post_complet() const
double dt_post_
ecriture des donnees (champs, stats, int_array) tous les dt_post (un temps)
Nom set_expression_champ(const Motcle &motlu1, const Motcle &motlu2, const Motcle &motlu3, const Motcle &motlu4, const int trouve)
void resetTime(double t, const std::string dirname) override
bool besoin_postraiter_champs()
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
classe Sondes_Int Cette classe represente une liste d'objets de type Sonde_Int.
Definition Sondes_Int.h:28
classe Sondes Cette classe represente une liste de sondes.
Definition Sondes.h:31