16#include <EcritureLectureSpecial.h>
17#include <Scalaire_impose_paroi.h>
18#include <Domaine_Cl_dis_base.h>
19#include <Schema_Temps_base.h>
20#include <Champ_Inc_P0_base.h>
21#include <Champ_Inc_P1_base.h>
22#include <Neumann_val_ext.h>
23#include <MD_Vector_tools.h>
24#include <Champ_Inc_base.h>
25#include <Equation_base.h>
26#include <Probleme_base.h>
27#include <TRUST_2_PDI.h>
28#include <Domaine_VF.h>
78 Cerr <<
" the file does not contain the correct number of values to fill the field" << finl;
82 for (
int i = 0; i < n; i++)
89 Cerr <<
"Internal error in Champ_Inc_base::fixer_nb_valeurs_nodales: method has not been implemented for class " <<
que_suis_je() << finl;
97 for (
int i = 0; i < n; i++)
99 DoubleTab& tab =
futur(i);
112 Cerr <<
"Internal error in Champ_Inc_base::creer_tableau_distribue:\n" <<
" array has alreary a (wrong) parallel descriptor" << finl;
126 const DoubleTab& v =
valeurs();
159 else if (
temps() > tps)
170 Cerr <<
"ERROR : in Champ_Inc_base::valeurs(double), time " << tps <<
" not found, returns the present?" << finl;
171 Cerr <<
"Contact TRUST support." << finl;
201 else if (
temps() > tps)
213 Cerr <<
"ERROR : in Champ_Inc_base::valeurs(double), time " << tps <<
" not found, returns the present?" << finl;
214 Cerr <<
"Contact TRUST support." << finl;
275 Cerr <<
"In Champ_Inc_base::mettre_a_jour(double), " << finl;
276 Cerr <<
"time " << un_temps <<
" not found in field " <<
le_nom() << finl;
277 Cerr <<
"The times available are :" << finl;
351 Cerr <<
"Champ_Inc_base::get_PDI_dname equation has not been associated yet. Please set the dataset name with Champ_Inc_base::set_PDI_dname()." << finl;
366 std::vector<YAML_data> data;
381 int a_faire, special;
390 fich << mon_ident << finl;
410 if(
valeurs().dimension_tot(0) )
415 ArrOfDouble garbage(
valeurs().nb_dim() );
430 Cerr <<
"Backup of the field " <<
nom_ <<
" performed on time : " <<
Nom(
temps_,
"%e") << finl;
431 if (!est_egal(
temps_,
equation().probleme().schema_temps().temps_courant()))
452 Cerr <<
"Resume of the field " <<
nom_ << finl;
458 if(
valeurs().dimension_tot(0) )
462 ArrOfDouble garbage(
valeurs().nb_dim() );
477 Cerr << finl <<
"Problem in the resumption " << finl;
478 Cerr <<
"The field wich is read, does not have same number of nodal values" << finl;
479 Cerr <<
"that the field created by the discretization " << finl;
483 Cerr <<
" performed." << finl;
489 Cerr << finl <<
"Problem in the resumption " << finl;
490 Cerr <<
"PDI format does not require to navigate through file..." << finl;
510 domaine.chercher_elements(positions, les_polys);
526 domaine.chercher_elements(positions, les_polys);
540 domaine.chercher_elements(position, le_poly);
554 if (
valeurs().size_reelle_ok())
569 Cerr <<
"Champ_Inc_base::affecter_ not coded if size_reelle_ok()==0" << finl;
610 Cerr <<
que_suis_je() <<
"did not overloaded Champ_Inc_base::trace" << finl;
655 Cerr <<
que_suis_je() <<
"::imprime not coded." << finl;
662 Cerr <<
que_suis_je() <<
"::integrale_espace not coded." << finl;
700 mon_dom_cl_dis = zcl;
713 return mon_dom_cl_dis.valeur();
721 return mon_dom_cl_dis.valeur();
745 const IntTab& f_e =
domaine.face_voisins(), &f_s =
domaine.face_sommets();
746 DoubleTrav result(
domaine.xv_bord().dimension_tot(0),
valeurs().line_size());
750 for (
const auto& itr : cls)
757 result(fb, n) = is_p ? ref_cast(
Neumann, itr.valeur()).flux_impose(j, n) : ref_cast(
Dirichlet, itr.valeur()).val_imp(j, n);
765 result(fb, n) =
valeurs()(f_e(f, f_e(f, 0) == -1), n);
770 for (n_som = 0; n_som < f_s.dimension(1) && f_s(f, n_som) >= 0;)
772 for (n = 0; n < N; n++)
774 for (k = 0; k < n_som; k++)
775 for (s = f_s(f, k), n = 0; n < N; n++)
776 result(fb, n) +=
valeurs()(s, n) / n_som;
781 result(fb, n) =
valeurs()(f, n);
783 Process::exit(
"Champ_Inc_base::valeur_aux_bords() : must code something!");
: class Champ_Inc_P0_base
const Domaine & domaine() const
void associer_domaine_dis_base(const Domaine_dis_base &) override
virtual int remplir_coord_noeuds_et_polys(DoubleTab &, IntVect &) const
NE FAIT RIEN Methode a surcharger.
virtual void creer_tableau_distribue(const MD_Vector &, RESIZE_OPTIONS=RESIZE_OPTIONS::COPY_INIT)
DoubleTab & futur(int i=1) override
Renvoie les valeurs du champs a l'instant t+i.
int fixer_nb_valeurs_nodales(int) override
int lire_donnees(Entree &)
Lit les valeurs du champs a partir d'un flot d'entree.
virtual void associer_domaine_cl_dis(const Domaine_Cl_dis_base &)
virtual int fixer_nb_valeurs_temporelles(int)
Fixe le nombre de valeurs temporelles a conserver.
void init_champ_calcule(const Objet_U &obj, fonc_calc_t fonc)
virtual int nb_valeurs_temporelles() const
Renvoie le nombre de valeurs temporelles actuellement conservees.
bool bord_fluide_multiphase_
DoubleVect & valeur_aux_compo(const DoubleTab &positions, DoubleVect &valeurs, int ncomp) const override
Calcule les valeurs du champs inconnue aux positions specifiees, pour une certaine composante du cham...
const Domaine_Cl_dis_base & domaine_Cl_dis() const
void mettre_a_jour(double temps) override
Effectue une mise a jour en temps du champ inconnue.
virtual DoubleTab & remplir_coord_noeuds_compo(DoubleTab &, int) const
Simple appel a Champ_Inc_base::remplir_coord_noeuds(DoubleTab&).
void resetTime(double time) override
const Domaine_dis_base & domaine_dis_base() const override
double changer_temps(const double temps) override
Fixe le temps du champ.
virtual std::vector< YAML_data > data_a_sauvegarder() const
for PDI IO: retrieve name, type and dimensions of the field to save/restore.
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
virtual void associer_eqn(const Equation_base &)
Associe le champ a l'equation dont il represente une inconnue.
virtual int remplir_coord_noeuds_et_polys_compo(DoubleTab &, IntVect &, int) const
Simple appel a: Champ_Inc_base::remplir_coord_noeuds_et_polys(DoubleTab&,IntVect& poly).
virtual void verifie_valeurs_cl()
int sauvegarder(Sortie &) const override
Sauvegarde le champ inconnue sur un flot de sortie.
Champ_Inc_base & avancer(int i=1)
Avance le pointeur courant de i pas de temps, dans la liste des valeurs temporelles conservees.
double changer_temps_passe(double, int i=1)
Fixe le temps du ieme champ passe.
virtual double integrale_espace(int ncomp) const
int nb_valeurs_nodales() const override
Returns the number of "real" geometric positions of the degrees of freedom, or -1 if not applicable (...
DoubleVect & valeur_a(const DoubleVect &position, DoubleVect &valeurs) const override
Calcule la valeur du champs inconnue a la position specifiee.
double recuperer_temps_passe(int i=1) const
Retourne le temps du ieme champ passe.
virtual DoubleTab & remplir_coord_noeuds(DoubleTab &) const =0
Champ_Inc_base & reculer(int i=1)
Recule le pointeur courant de i pas de temps, dans la liste des valeurs temporelles conservees.
int reprendre(Entree &) override
Lecture d'un champ inconnue a partir d'un flot d'entree en vue d'une reprise.
DoubleTab & trace(const Frontiere_dis_base &, DoubleTab &, double, int distant) const override
voir Champ_base Cas particulier (malheureusement) du Champ_P0_VDF :
DoubleTab & valeur_aux(const DoubleTab &positions, DoubleTab &valeurs) const override
Calcule les valeurs du champs inconnue aux positions specifiees.
Champ_base & affecter_compo(const Champ_base &, int compo) override
Affectation d'une composante d'un OWN_PTR(Champ_base) quelconque (Champ_base) dans une composante d'u...
Champ_base & affecter_(const Champ_base &) override
Affectation d'un OWN_PTR(Champ_base) generique (Champ_base) dans un champ inconnue.
Nom get_PDI_dname() const
for PDI IO: retrieve the name of the HDF5 dataset in which the field will be saved or be restored fro...
int imprime(Sortie &, int) const override
DoubleTab valeur_aux_bords() const override
renvoie la valeur du champ aux faces de bord
double recuperer_temps_futur(int i=1) const
Retourne le temps du ieme champ futur.
double changer_temps_futur(double, int i=1)
Fixe le temps du ieme champ futur.
classe Champ_base Cette classe est la base de la hierarchie des champs.
Champ_base()
Constructeur par defaut d'un Champ_base.
virtual DoubleVect & valeur_aux_elems_compo(const DoubleTab &positions, const IntVect &les_polys, DoubleVect &valeurs, int ncomp) const
provoque une erreur ! doit etre surchargee par les classes derivees
double temps() const
Renvoie le temps du champ.
virtual DoubleTab & valeur_aux(const DoubleTab &positions, DoubleTab &valeurs) const
Provoque une erreur ! Doit etre surchargee par les classes derivees.
virtual DoubleTab & valeur_aux_elems(const DoubleTab &positions, const IntVect &les_polys, DoubleTab &valeurs) const
provoque une erreur ! doit etre surchargee par les classes derivees
virtual DoubleVect & valeur_a_elem(const DoubleVect &position, DoubleVect &valeurs, int le_poly) const
provoque une erreur ! doit etre surchargee par les classes derivees
virtual DoubleVect & valeur_aux_compo(const DoubleTab &positions, DoubleVect &valeurs, int ncomp) const
Idem que valeur_aux(const DoubleTab &, DoubleTab &), mais calcule uniquement la composante compo du c...
classe Conds_lim Cette classe represente un vecteur de conditions aux limites.
classe Dirichlet Cette classe est la classe de base de la hierarchie des conditions aux limites de ty...
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
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.
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 .
static int ecriture_special(const Champ_base &ch, Sortie &fich)
simple appel a EcritureLectureSpecial::ecriture_special (const Domaine_VF& zvf,Sortie& fich,...
static void lecture_special(Champ_base &ch, Entree &fich)
simple appel a EcritureLectureSpecial::lecture_special (const Domaine_VF& zvf,Entree& fich,...
Class defining operators and methods for all reading operation in an input flow (file,...
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
virtual Domaine_Cl_dis_base & domaine_Cl_dis()
Renvoie le domaine des conditions aux limite discretisee associee a l'equation.
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
const Nom & le_nom() const override
Renvoie le nom du champ.
int num_face(const int) const
classe Frontiere_dis_base Classe representant une frontiere discretisee.
: Cette classe est un OWN_PTR mais l'objet pointe est partage entre plusieurs
int mon_equation_non_nul() const
void associer_eqn(const Equation_base &)
Associe une equation a l'objet.
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
Une chaine de caractere (Nom) en majuscules.
Classe Neumann_val_ext Cette classe est la classe de base de la hierarchie des conditions.
Classe Neumann Cette classe est la classe de base de la hierarchie des conditions aux limites de type...
class Nom Une chaine de caractere pour nommer les objets de TRUST
const char * getChar() const
virtual int debute_par(const char *const n) const
const std::string & getString() const
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.
Objet_U()
Constructeur par defaut : attribue un numero d'identifiant unique a l'objet (object_id_),...
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet 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.
const Domaine & domaine() const
Renvoie le domaine associe au probleme.
const Schema_Temps_base & schema_temps() const
Renvoie le schema en temps associe au probleme.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe Roue utilisee dans Champ_Inc_Base.
double temps() const
Retoune la valeur du temps de la Roue.
double changer_temps(const double t)
Change le temps de la Roue.
const DoubleTab & valeurs() const
Retourne le tableau des valeurs de la Roue.
const Roue & futur(int i=1) const
Retourne la Roue correspondant a la ieme case future.
const Roue & passe(int i=1) const
Retourne la Roue correspondant a la ieme case passee.
classe Scalaire_impose_paroi Impose un scalaire a la paroi dans une equation de type Convection-Difus...
double temps_courant() const
Renvoie le temps courant.
Classe de base des flux de sortie.
_SIZE_ size_array() const
void jump(Entree &) override
virtual void ref(const TRUSTTab &)
void lit(Entree &, bool resize_and_read=true) override
virtual void ref_tab(TRUSTTab &, _SIZE_ start_line=0, _SIZE_ nb_lines=-1)
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
void ecrit(Sortie &) const override
_SIZE_ dimension(int d) const
_SIZE_ size_reelle_ok() const
virtual const MD_Vector & get_md_vector() const
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")
classe TRUST_2_PDI Encapsulation of PDI methods (library used for IO operations). See the website pdi...
void share_type(const Nom &name, const Nom &type)
Generic method to share the type of a TRUST object.
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...
void set_save_field_type(bool b)