16#include <Operateur_Statistique_tps_base.h>
17#include <Ecrire_fichier_xyz_valeur.h>
18#include <Domaine_Cl_dis_base.h>
19#include <Schema_Temps_base.h>
20#include <Postraitement.h>
21#include <Equation_base.h>
22#include <EcrFicPartage.h>
23#include <Champ_base.h>
39 param.lire_avec_accolades_depuis(is);
43 for(
auto fname : fields_names_ )
44 eqn_->probleme().creer_champ(fname);
55 param.
ajouter(
"fields", &fields_names_);
57 param.
ajouter(
"boundaries", &boundary_names_);
62bool Ecrire_fichier_xyz_valeur::write_field_during_current_timestep_()
const
64 const double timestep = eqn_->schema_temps().temps_courant();
65 const double scheme_dt = eqn_->schema_temps().pas_de_temps();
66 const double tmax = eqn_->schema_temps().temps_max();
67 const int nb_pas_dt_max = eqn_->schema_temps().nb_pas_dt_max();
68 const int nb_pas_dt = eqn_->schema_temps().nb_pas_dt();
69 const int stationnaire_atteint = eqn_->schema_temps().stationnaire_atteint();
71 if (dt_<=scheme_dt || tmax<=timestep || nb_pas_dt_max<=nb_pas_dt || nb_pas_dt<=1 || stationnaire_atteint || eqn_->schema_temps().stop_lu())
76 double i, j, epsilon = 1.e-8;
77 modf(timestep/dt_ + epsilon, &i);
78 modf((timestep-scheme_dt)/dt_ + epsilon, &j);
86 bool champ_stat =
false;
89 for (
auto &itr : eqn_->probleme().postraitements())
90 if (sub_type(Postraitement, itr.valeur()))
92 const Postraitement& post = ref_cast(Postraitement, itr.valeur());
94 Motcle nom_test = fname;
109void Ecrire_fichier_xyz_valeur::writeValuesOnBoundary_(
const Nom& fname,
const std::string& bname,
const DoubleTab& pos,
const DoubleTab& val)
const
113 const double timestep = eqn_->schema_temps().temps_courant();
115 Nom nom_fic(eqn_->probleme().le_nom());
121 nom_fic+=Nom(timestep);
128 fic.
setf(ios::scientific);
137 fic <<
"binary" << finl;
138 fic << nb_val_tot << finl;
144 for (
int i2=0; i2<nb_val; i2++)
148 fic << pos(i2,j2) <<
" ";
150 for (
int nb=0; nb<nb_compo; nb++)
151 fic << val(i2,nb) <<
" " ;
165 if (!write_field_during_current_timestep_())
168 for (
auto fname : fields_names_ )
172 bool champ_stat = getStatField_(fname, field, op_stat);
177 field = eqn_->probleme().get_champ(fname);
180 const int nb_bords_post = (int)boundary_names_.size();
183 int nb_cl = eqn_->domaine_Cl_dis().nb_cond_lim();
184 for (
auto bname : boundary_names_ )
186 int boundary_found = 0 ;
187 for (
int i=0; i<nb_cl && !boundary_found; i++)
191 if (la_frontiere.
le_nom() == bname)
200 const int nb_val = la_frontiere.
nb_faces();
201 int nb_compo = field->
nb_comp();
202 DoubleTab val(nb_val,nb_compo);
206 DoubleTab copie(field->
valeurs());
220 Cerr <<
"You try to use the method Ecrire_fichier_xyz_valeur with an unknown boundary name" << finl;
221 Cerr <<
"The boundary named " << bname <<
" is not recognized"<< finl;
228 Cerr <<
"The option of post processing the entire domain with Ecrire_fichier_xyz_valeur is now obsolete." <<finl;
virtual DoubleTab & valeurs()=0
classe Champ_base Cette classe est la base de la hierarchie des champs.
virtual DoubleTab & valeur_aux(const DoubleTab &positions, DoubleTab &valeurs) const
Provoque une erreur ! Doit etre surchargee par les classes derivees.
classe Cond_lim_base Classe de base pour la hierarchie des classes qui representent les differentes c...
Domaine_Cl_dis_base & domaine_Cl_dis()
Renvoie le domaine des conditions aux limites discretisee dont l'objet fait partie.
virtual Frontiere_dis_base & frontiere_dis()
Renvoie la frontiere discretisee a laquelle les conditions aux limites s'appliquent.
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
Sortie & unlockfile() override
Permet de debloquer la ressource critique pour leprocessus suivant.
Sortie & lockfile() override
Permet au processus appelant de bloquer en attente de la ressource commune a tous les processus qui e...
void set_bin(bool bin) override
int ouvrir(const char *name, IOS_OPEN_MODE mode=ios::out) override
Ouvre le fichier avec les parametres mode et prot donnes Ces parametres sont les parametres de la met...
Sortie & syncfile() override
Provoque l'ecriture sur disque des donnees accumulees sur les differents processeurs depuis le dernie...
void precision(int) override
classe Ecrire_fichier_xyz_valeur This class allows to dump fields values on some boundaries into a de...
void set_param(Param ¶m) const override
void write_fields() const
Class defining operators and methods for all reading operation in an input flow (file,...
void calculer_centres_gravite(DoubleTab_t &xv) const
Calcule les centres de gravite de chaque face.
virtual int nb_comp() const
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
int_t nb_faces() const
Renvoie le nombre de faces de la frontiere.
const Faces_t & faces() const
const Frontiere & frontiere() const
Renvoie la frontiere geometrique associee.
class Nom Une chaine de caractere pour nommer les objets de TRUST
Nom & majuscule()
Transforme le nom en majuscules Seules les lettres 'a'-'z' sont modifiees.
const std::string & getString() const
classe Objet_U Cette classe est la classe de base des Objets de TRUST
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
static int format_precision_geom
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
classe Operateur_Statistique_tps_base Represente des operations statistiques sur les champs.
virtual DoubleTab calculer_valeurs() const =0
Helper class to factorize the readOn method of Objet_U classes.
void ajouter_flag(const char *keyword, const bool *value)
Register a boolean flag whose mere presence switches it to true.
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
int champ_fonc(Motcle &nom_champ, OBS_PTR(Champ_base)&mon_champ, OBS_PTR(Operateur_Statistique_tps_base)&operateur_statistique) const
static double mp_sum(double)
Calcule la somme de x sur tous les processeurs du groupe courant.
static void barrier()
Synchronise tous les processeurs du groupe courant (attend que tous les processeurs soient arrives a ...
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
static int je_suis_maitre()
renvoie 1 si on est sur le processeur maitre du groupe courant (c'est a dire me() == 0),...
void setf(IOS_FORMAT code) override
Classe de base des flux de sortie.
_SIZE_ dimension(int d) const