15#include <ALE_CheckpointManager.h>
16#include <Domaine_ALE.h>
17#include <EcritureLectureSpecial.h>
18#include <Probleme_base.h>
20#include <TRUST_2_PDI.h>
21#include <Schema_Temps_base.h>
29 int bytes = 0, a_faire, special;
33 auto make_champ = [&](
const std::string& name,
int nbComp,
const std::string& directive)
36 Noms noms(1), unit(1);
40 vectoriel, noms, unit, nbComp, 1,
51 OWN_PTR(
Champ_Inc_base) meshCoords = make_champ(
"meshCoords", dimension,
"champ_sommets");
55 Cerr <<
"ATTENTION : parallel calculation, meshCoords not saved in xyz format" << finl;
62 OWN_PTR(
Champ_Inc_base) meshDisplacement = make_champ(
"meshDisplacement", dimension,
"champ_sommets");
65 OWN_PTR(
Champ_Inc_base) meshVelocity = make_champ(
"meshVelocity", dimension,
"champ_sommets");
68 OWN_PTR(
Champ_Inc_base) meshAcceleration = make_champ(
"meshAcceleration", dimension,
"champ_sommets");
71 OWN_PTR(
Champ_Inc_base) meshPosition = make_champ(
"meshPosition", dimension,
"champ_sommets");
75 OWN_PTR(
Champ_Inc_base) meshRefConfig = make_champ(
"meshReferenceConfiguration",
79 OWN_PTR(
Champ_Inc_base) meshTransGrad = make_champ(
"meshTransformationGradient",
87 Cerr <<
"ATTENTION : parallel calculation, mesh fields not saved in xyz format" << finl;
90 bytes += meshDisplacement->sauvegarder(os);
91 bytes += meshVelocity->sauvegarder(os);
92 bytes += meshAcceleration->sauvegarder(os);
93 bytes += meshPosition->sauvegarder(os);
94 bytes += meshRefConfig->sauvegarder(os);
95 bytes += meshTransGrad->sauvegarder(os);
96 bytes += meshStress->sauvegarder(os);
104 (pb.
le_nom() +
"_MeshCoords").majuscule());
128 Cerr <<
"Error in ALE_CheckpointManager::restore !" << finl;
129 Cerr <<
"Use serial checkpoint for parallel calculation." << finl;
134 auto make_champ = [&](
const std::string& name,
int nbComp,
const std::string& directive)
137 Noms noms(1), unit(1);
141 vectoriel, noms, unit, nbComp, 1,
148 OWN_PTR(
Champ_Inc_base) meshCoords = make_champ(
"meshCoords", dimension,
"champ_sommets");
153 meshCoords->reprendre(is);
156 read_pdi(meshCoords,
"_MeshCoords", pb);
164 OWN_PTR(
Champ_Inc_base) meshDisplacement = make_champ(
"meshDisplacement", dimension,
"champ_sommets");
165 OWN_PTR(
Champ_Inc_base) meshVelocity = make_champ(
"meshVelocity", dimension,
"champ_sommets");
166 OWN_PTR(
Champ_Inc_base) meshAcceleration = make_champ(
"meshAcceleration", dimension,
"champ_sommets");
167 OWN_PTR(
Champ_Inc_base) meshPosition = make_champ(
"meshPosition", dimension,
"champ_sommets");
168 OWN_PTR(
Champ_Inc_base) meshRefConfig = make_champ(
"meshReferenceConfiguration",
170 OWN_PTR(
Champ_Inc_base) meshTransGrad = make_champ(
"meshTransformationGradient",
178 meshDisplacement->reprendre(is);
180 meshVelocity->reprendre(is);
182 meshAcceleration->reprendre(is);
184 meshPosition->reprendre(is);
186 meshRefConfig->reprendre(is);
188 meshTransGrad->reprendre(is);
190 meshStress->reprendre(is);
195 read_pdi(meshDisplacement,
"_MeshDisplacement", pb);
196 read_pdi(meshVelocity,
"_MeshVelocity", pb);
197 read_pdi(meshAcceleration,
"_MeshAcceleration", pb);
198 read_pdi(meshPosition,
"_MeshPosition", pb);
199 read_pdi(meshRefConfig,
"_MeshReferenceConfiguration",pb);
200 read_pdi(meshTransGrad,
"_MeshTransformationGradient",pb);
201 read_pdi(meshStress,
"_MeshStress", pb);
206 meshDisplacement->valeurs(), meshVelocity->valeurs(),
207 meshAcceleration->valeurs(), meshPosition->valeurs(),
208 meshRefConfig->valeurs(), meshTransGrad->valeurs(),
209 meshStress->valeurs());
215int ALE_CheckpointManager::write_pdi(
const DoubleTab& d,
const Nom& pdi_name)
const
223 ArrOfDouble garbage(d.
nb_dim());
229void ALE_CheckpointManager::read_pdi(OWN_PTR(
Champ_Inc_base)& champ,
230 const std::string& suffix,
233 TRUST_2_PDI pdi_interface;
236 if (champ->valeurs().dimension_tot(0))
237 pdi_interface.
read(pdi_name.
getChar(), champ->valeurs().addr());
240 ArrOfDouble garbage(champ->valeurs().nb_dim());
241 pdi_interface.
read(pdi_name.
getChar(), garbage.addr());
259 std::transform(name.begin(), name.end(), name.begin(), ::toupper);
260 return YAML_data(name,
"double", nb_dim);
266 constexpr int nb_dim = 2;
267 std::vector<YAML_data> data;
268 data.push_back(
make_yaml(
"_MeshCoords", nb_dim, pb));
271 data.push_back(
make_yaml(
"_MeshDisplacement", nb_dim, pb));
272 data.push_back(
make_yaml(
"_MeshVelocity", nb_dim, pb));
273 data.push_back(
make_yaml(
"_MeshAcceleration", nb_dim, pb));
274 data.push_back(
make_yaml(
"_MeshPosition", nb_dim, pb));
275 data.push_back(
make_yaml(
"_MeshReferenceConfiguration",nb_dim, pb));
276 data.push_back(
make_yaml(
"_MeshTransformationGradient",nb_dim, pb));
277 data.push_back(
make_yaml(
"_MeshStress", nb_dim, pb));
283 const std::string& name,
int nbComp,
289 Noms noms(1), unit(1);
293 vectoriel, noms, unit, nbComp, 1, temps, champ);
295 champ->add_synonymous(name);
Nom generate_field_tag(const Champ_Inc_base &champ, const Probleme_base &pb) const
int restore(Entree &is, Probleme_base &pb, Domaine_ALE &dom)
YAML_data make_yaml(const std::string &suffix, int nb_dim, const Probleme_base &pb) const
void create_field(OWN_PTR(Champ_Inc_base)&champ, const std::string &name, int nbComp, const Motcle &directive, const Probleme_base &pb, Domaine_ALE &dom) const
std::vector< YAML_data > data_a_sauvegarder(const Probleme_base &pb, const Domaine_ALE &dom) const
int save(Sortie &os, const Probleme_base &pb, const Domaine_ALE &dom) const
void ajoute_champ(const FIELD_TYPE &champ)
void discretiser_champ(const Motcle &directive, const Domaine_dis_base &z, const Nom &nom, const Nom &unite, int nb_comp, int nb_pas_dt, double temps, OWN_PTR(Champ_Inc_base)&champ, const Nom &sous_type=NOM_VIDE) const
DoubleTab_t & les_sommets()
const DoubleTab & getMeshTransformationGradient() const
const DoubleTab & getMeshPosition() const
int getMeshMotionModel() const
Champs_compris & get_champs_compris()
void updateMetrics(Domaine_dis_base &, Probleme_base &)
const DoubleTab & getMeshStress() const
void resumptionCoords(DoubleTab &)
const DoubleTab & getMeshDisplacement() const
const int & getMeshStressNbComp() const
const int & getMeshTransformationGradientNbComp() const
Equation_base & getEquation()
const DoubleTab & getMeshVelocity() const
const int & getMeshReferenceConfigurationNbComp() const
void resumptionStructuralDynamicsMesh(double, DoubleTab &, DoubleTab &, DoubleTab &, DoubleTab &, DoubleTab &, DoubleTab &, DoubleTab &)
const DoubleTab & getMeshReferenceConfiguration() const
const DoubleTab & getMeshAcceleration() const
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
const Domaine & domaine() const
static int is_ecriture_special(int &special, int &a_faire)
indique si le format special a ete demande en lecture active par sauvegarde xyz .
static int is_lecture_special()
indique si le format special a ete demande en lecture active par reprise xyz .
Class defining operators and methods for all reading operation in an input flow (file,...
Une chaine de caractere (Nom) en majuscules.
class Nom Une chaine de caractere pour nommer les objets de TRUST
const char * getChar() const
Nom & majuscule()
Transforme le nom en majuscules Seules les lettres 'a'-'z' sont modifiees.
const std::string & getString() const
const Nom & le_nom() const override
Renvoie *this;.
Un tableau de chaine de caracteres (VECT(Nom)).
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
virtual int sauvegarder(Sortie &) const
Sauvegarde d'un Objet_U sur un flot de sortie Methode a surcharger.
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
const Domaine & domaine() const
Renvoie le domaine associe au probleme.
const Discretisation_base & discretisation() const
Renvoie la discretisation associee au probleme.
const Schema_Temps_base & schema_temps() const
Renvoie le schema en temps associe au probleme.
const Domaine_dis_base & domaine_dis() const
Renvoie le domaine discretise associe au probleme.
const char * reprise_format_temps() const
static int nproc()
renvoie le nombre de processeurs dans le groupe courant Voir Comm_Group::nproc() et PE_Groups::curren...
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
double temps_courant() const
Renvoie le temps courant.
Classe de base des flux de sortie.
_SIZE_ size_array() const
_SIZE_ dimension_tot(int) const override
classe TRUST_2_PDI Encapsulation of PDI methods (library used for IO operations). See the website pdi...
void read(const std::string &name, void *data)
static int is_PDI_checkpoint()
static int is_PDI_restart()
void share_TRUSTTab_dimensions(const DoubleTab &tab, const Nom &name, int write)
Generic method to share the dimensions of a TRUST DoubleTab with PDI.
void TRUST_start_sharing(const std::string &name, const void *data)
classe YAML_data : collection of all needed information for data to save/restore in order to write th...