15#include <Format_Post_Med.h>
16#include <Ecrire_MED.h>
17#include <EcrFicPartage.h>
59 Cerr <<
"Format_Post_Med::printOn : error" << finl;
103 nom_fich +=
".index";
112 nom_fic_base +=
".med";
114 Cerr <<
"MED file " << nom_fic <<
" closed. See .index file for more infos." << finl;
120 const Nature_du_champ& nature,
const int nb_compo,
const Noms& noms_compo,
121 const Motcle& loc_post,
const Nom& le_nom_champ_post)
146 bool append = !est_le_premier_post;
148 assert(domaine_dis_);
149 ecr_med_.set_file_name_and_dom(nom_fich, domaine, &domaine_dis_.valeur());
150 ecr_med_.ecrire_domaine_dual(append);
157 domaine_dis_ = domaine_dis_base;
163 nom_fich +=
".index";
167 nom_fic_base += format;
186 nom_fich +=
".index";
197 int ncomp,
double temps_,
199 const Nom& id_du_domaine,
200 const Nom& localisation,
202 const DoubleTab& valeurs)
205 nom_fich_index +=
".";
207 nom_fich_index += format;
208 nom_fich_index +=
".index";
211 nom_fich_ecrit +=
".";
212 nom_fich_ecrit += format;
214 ecrire_champ_med(domaine,unite_,noms_compo,ncomp,temps_,nom_fich_ecrit,id_champ,id_du_domaine,localisation,valeurs,nom_fich_index);
224 const Nom& id_du_domaine,
225 const Nom& id_domaine,
226 const Nom& localisation,
227 const Nom& reference,
228 const IntVect& valeurs,
229 const int reference_size)
241 s <<
"TRUST Version " << TRUST_VERSION << finl;
243 s <<
"TRUST" << finl;
251 Nom nom_fichier_base = nom_fich;
252 nom_fichier_base.
prefix(
".med.index");
253 Nom nom_fichier(nom_fichier_base);
256 nom_fichier += format;
261 SFichier file3(nom_fichier+
".data");
263 for (
int i=0; i<3; i++)
266 Nom fic2(nom_fichier);
275 file<<motlu<<
" "<<finl;
277 file3<<motlu<<
" "<<finl;
284 s.
ouvrir(nom_fich,ios::app);
295 file.
ouvrir(nom_fich2,ios::app);
296 file <<nom1<<
" "<<nom2<<finl;
302 const Nom& id_du_domaine,
const int est_le_premier_post)
304 Nom nom_fich(nom_fich1);
309 if (est_le_premier_post)
312 file<<
"{ Dimension "<<
dimension<<finl<<
"# export Domaine "<<id_du_domaine<<finl;
317 file<<
" export Domaine "<<id_du_domaine<<finl;
321 if (est_le_premier_post)
324 file<<
"# \n Pbc_MED pbmed\n Lire pbmed { "<<finl;
328 file.
ouvrir(nom_fich2,ios::app);
329 file<<
"} } } , "<<finl;
331 file<<nom_fich<<
" "<<id_du_domaine<<
" { Postraitement { Champs dt_post 1e-9 {"<<finl;
333 if (est_le_premier_post)
336 file2<<
"} } } } }"<<finl;
344 int dim = domaine.les_sommets().
dimension(1);
345 bool append = !est_le_premier_post;
349 s.
ouvrir(nom_fich, ios::app);
350 s <<
"format MED: " <<
ecr_med_.version() << finl;
351 s <<
"dimension: " << dim << finl;
352 s <<
"domaine: " << domaine.
le_nom() << finl;
354 Cerr <<
"Opening MED file " << nom_fic <<
" with " <<
ecr_med_.version() <<
" format. ";
357 ecr_med_.set_file_name_and_dom(nom_fic, domaine, domaine_dis_ ? &domaine_dis_.valeur() :
nullptr);
358 ecr_med_.ecrire_domaine_dis(append);
368 s.
ouvrir(nom_fich,ios::app);
369 s <<
"TEMPS " << temps << finl;
375 int ncomp,
double temps_,
const Nom& nom_pdb,
376 const Nom& id_du_champ,
377 const Nom& id_du_domaine,
379 const DoubleTab& valeurs,
Nom& nom_fich)
382 ecr_med_.set_file_name_and_dom(fic, dom, domaine_dis_ ? &domaine_dis_.valeur() :
nullptr);
384 Nom nom_post(id_du_champ);
385 Noms noms_compo_courts(noms_compo);
388 nom_post = noms_compo[ncomp];
392 for (
int i = 0; i < noms_compo.size(); ++i)
394 if (loc_post ==
"SOM")
399 for (
int i = 0; i < noms_compo.size(); ++i)
400 noms_compo_courts[i] =
Motcle(noms_compo_courts[i]).
getPrefix(
"_SOM_");
402 else if (loc_post ==
"ELEM")
404 nom_post.
prefix(
"_ELEM_");
405 nom_post.
prefix(
"_elem_");
407 for (
int i = 0; i < noms_compo.size(); ++i)
408 noms_compo_courts[i] =
Motcle(noms_compo_courts[i]).
getPrefix(
"_ELEM_");
410 else if (loc_post ==
"FACES")
413 nom_post.
prefix(
"_FACES_");
414 nom_post.
prefix(
"_faces_");
416 for (
int i = 0; i < noms_compo.size(); ++i)
417 noms_compo_courts[i] =
Motcle(noms_compo_courts[i]).
getPrefix(
"_FACES_");
419 Cerr <<
"Post-processing in MED format on faces needs MEDCoupling" << finl;
426 os.
ouvrir(nom_fich, ios::app);
427 os <<
"champ: " << nom_post <<
" " << nom_dom <<
" " << loc_post << finl;
433 for (
int i = 0; i < noms_compo.size(); ++i)
434 noms_compo_courts[i] =
Motcle(noms_compo_courts[i]).
getSuffix(nom_post);
436 if (loc_post ==
"SOM")
437 ecr_med_.ecrire_champ(
"CHAMPPOINT", id_du_champ, valeurs, unite_, noms_compo_courts, type_elem, temps_);
438 else if (loc_post ==
"ELEM")
439 ecr_med_.ecrire_champ(
"CHAMPMAILLE", id_du_champ, valeurs, unite_, noms_compo_courts, type_elem, temps_);
440 else if (loc_post ==
"FACES")
441 ecr_med_.ecrire_champ(
"CHAMPFACES", id_du_champ, valeurs, unite_, noms_compo_courts, type_elem, temps_);
444 Cerr <<
"We do not know to postprocess " << id_du_champ
445 <<
" with the keyword " << loc_post << finl;
const Nom & le_nom() const override
Returns the name of the Objet_U. Virtual method to override: returns "neant" in this implementation.
class Domaine_dis_base This class is the base of the hierarchy of discretized domains.
File for reading. This class is to the C++ ifstream class what the Entree class is to the.
Class defining operators and methods for all reading operation in an input flow (file,...
: Post-processing class for Eulerian fields in MED format.
Format_Post_Med()
Default constructor:
void reset() override
Resets the object to the state obtained by the default constructor.
int ecrire_domaine_dis(const Domaine &domaine, const OBS_PTR(Domaine_dis_base)&domaine_dis_base, const int est_le_premier_post) override
voir Format_Post_base::ecrire_domaine
int completer_post(const Domaine &dom, const int axi, const Nature_du_champ &nature, const int nb_compo, const Noms &noms_compo, const Motcle &loc_post, const Nom &le_nom_champ_post) override
int ecrire_domaine(const Domaine &domaine, const int est_le_premier_post) override
Writing a mesh.
virtual int preparer_post_med(const Nom &nom_fich1, const Nom &nom_fich2, const Nom &nom_fich3, const Nom &id_du_domaine, const int est_le_premier_post)
virtual int finir_med(Nom &nom_fic, int &est_le_dernier_post)
virtual int completer_post_med(const Nom &nom_fich2, const Nom &nom1, const Nom &nom2)
int ecrire_item_int(const Nom &id_item, const Nom &id_du_domaine, const Nom &id_domaine, const Nom &localisation, const Nom &reference, const IntVect &data, const int reference_size) override
Writing an integer array to the post-processing file.
virtual int ecrire_champ_med(const Domaine &domaine, const Noms &unite_, const Noms &noms_compo, int ncomp, double temps_, const Nom &nom_pdb, const Nom &id_du_champ, const Nom &id_du_domaine, const Nom &localisation, const DoubleTab &data, Nom &nom_fich)
int initialize_by_default(const Nom &file_basename) override
Initializes the class with default parameters.
virtual int ecrire_temps_med(const double temps, Nom &nom_fich)
virtual int ecrire_entete_med(Nom &nom_fic, const int est_le_premier_post)
void ecrire_domaine_dual(const Domaine &domaine, const int est_le_premier_post) override
int ecrire_champ(const Domaine &domaine, const Noms &unite_, const Noms &noms_compo, int ncomp, double temps_, const Nom &id_du_champ, const Nom &id_du_domaine, const Nom &localisation, const Nom &nature, const DoubleTab &data) override
voir Format_Post_base::ecrire_champ
void set_param(Param ¶m) const override
int ecrire_temps(const double temps) override
Starts writing a new time step.
int preparer_post(const Nom &id_du_domaine, const int est_le_premier_post, const int reprise, const double t_init) override
int ecrire_entete(const double temps_courant, const int reprise, const int est_le_premier_post) override
int initialize(const Nom &file_basename, const int format, const Nom &option_para) override
int finir(const int est_le_dernier_post) override
virtual int ecrire_domaine_med(const Domaine &domaine, const Nom &nom_fic, const int est_le_premier_post, Nom &nom_fich)
Base class for post-processing output formats for fields (lata, med, cgns, lml, single_lata).
OBS_PTR(Domaine_dis_base) domaine_dis_
Reference to the discretized domain - used for face fields.
A character string (Nom) in uppercase.
class Nom: a character string for naming TRUST objects.
const Nom getPrefix(const char *const) const
Nom nom_me(int, const char *prefix=0, int without_padding=0) const
Inserts _prefix000n (n=me() or nproc()) into a file name (e.g. toto.titi) to produce toto_prefix000n....
const Nom getSuffix(const char *const) const
Nom & prefix(const char *const)
An array of character strings (VECT(Nom)).
const Nom & que_suis_je() const
Returns the string identifying the class.
virtual Entree & readOn(Entree &)
Reads an Objet_U from an input stream. Virtual method to override.
static const Nom & nom_du_cas()
Returns a constant reference to the case name. This method is static.
virtual const Nom & le_nom() const
Returns the name of the Objet_U. Virtual method to override: returns "neant" in this implementation.
virtual Sortie & printOn(Sortie &) const
Writes the object to an output stream. Virtual method to override.
Helper class to factorize the readOn method of Objet_U classes.
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
static int nproc()
Returns the number of processors in the current group. See Comm_Group::nproc() and PE_Groups::current...
static int me()
Returns the rank of the local processor in the current communication group. See Comm_Group::rank() an...
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
static int je_suis_maitre()
Returns 1 if on the master processor of the current group (i.e. me() == 0), 0 otherwise.
SFichier is to the C++ ofstream class what Sortie is to the C++ ostream class.
virtual int ouvrir(const char *name, IOS_OPEN_MODE mode=ios::out)
Base class for output streams.