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
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
Fichier en lecture Cette classe est a la classe C++ ifstream ce que la classe Entree est a la.
Class defining operators and methods for all reading operation in an input flow (file,...
: Classe de postraitement des champs euleriens au format med.
Format_Post_Med()
Constructeur par defaut:
void reset() override
Remet l'objet dans l'etat obtenu par le constructeur par defaut.
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
Ecriture d'un maillage.
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
Ecriture d'un tableau d'entiers dans le fichier de postraitement.
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
Initialisation de la classe avec des parametres par defaut.
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
commence l'ecriture d'un nouveau pas de temps
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)
Classe de base des formats de postraitements pour les champs (lata, med, cgns, lml,...
OBS_PTR(Domaine_dis_base) domaine_dis_
Reference to the discretized domain - used for face fields.
Une chaine de caractere (Nom) en majuscules.
class Nom Une chaine de caractere pour nommer les objets de TRUST
const Nom getPrefix(const char *const) const
Nom nom_me(int, const char *prefix=0, int without_padding=0) const
Insere _prefix000n (n=me() ou nproc()) dans un nom de fichier (par ex:toto.
const Nom getSuffix(const char *const) const
Nom & prefix(const char *const)
Un tableau de chaine de caracteres (VECT(Nom)).
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 const Nom & nom_du_cas()
Renvoie une reference constante vers le nom du cas.
virtual const Nom & le_nom() const
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
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()
renvoie le nombre de processeurs dans le groupe courant Voir Comm_Group::nproc() et PE_Groups::curren...
static int me()
renvoie mon rang dans le groupe de communication courant.
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),...
Cette classe est a la classe C++ ofstream ce que la classe Sortie est a la classe C++ ostream Elle re...
virtual int ouvrir(const char *name, IOS_OPEN_MODE mode=ios::out)
Classe de base des flux de sortie.