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
Returns the name of the Objet_U. Virtual method to override: returns "neant" in this implementation.
const Domaine & domaine() const
static int is_ecriture_special(int &special, int &a_faire)
Indicates whether the special format was requested in active writing by xyz save.
static int is_lecture_special()
Indicates whether the special format was requested in active reading by xyz restart.
Class defining operators and methods for all reading operation in an input flow (file,...
A character string (Nom) in uppercase.
class Nom: a character string for naming TRUST objects.
const char * getChar() const
Nom & majuscule()
Converts the name to uppercase. Only letters 'a'-'z' are modified.
const std::string & getString() const
const Nom & le_nom() const override
Returns *this.
An array of character strings (VECT(Nom)).
const Nom & que_suis_je() const
Returns the string identifying the class.
virtual int sauvegarder(Sortie &) const
Saves an Objet_U to an output stream. Virtual method to override.
const Nom & le_nom() const override
Returns the name of the Objet_U. Virtual method to override: returns "neant" in this implementation.
class Probleme_base It is a Probleme_U that is not a coupling.
const Domaine & domaine() const
Returns the domain associated with the problem.
const Discretisation_base & discretisation() const
Returns the discretization associated with the problem.
const Schema_Temps_base & schema_temps() const
Returns the time scheme associated with the problem.
const Domaine_dis_base & domaine_dis() const
Returns the discretized domain associated with the problem (const version).
const char * reprise_format_temps() const
static int nproc()
Returns the number of processors in the current group. See Comm_Group::nproc() and PE_Groups::current...
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
double temps_courant() const
Returns the current time.
Base class for output streams.
_SIZE_ size_array() const
_SIZE_ dimension_tot(int) const override
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)
YAML_data class: collection of all needed information for data to save/restore in order to write the ...