TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Momentum_Euler.cpp
1/****************************************************************************
2* Copyright (c) 2026, CEA
3* All rights reserved.
4*
5* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
6* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8* 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
9*
10* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
11* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
12* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
13*
14*****************************************************************************/
15
16#include <Milieu_composite_Euler.h>
17#include <Schema_Temps_base.h>
18#include <Champ_Composite.h>
19#include <TRUSTTab_parts.h>
20#include <Momentum_Euler.h>
21#include <Discret_Thyd.h>
22#include <Fluide_base.h>
23#include <Pb_Euler.h>
24#include <EChaine.h>
25#include <Param.h>
26
27Implemente_instanciable(Momentum_Euler,"Momentum_Euler|QDM_Euler",Navier_Stokes_std);
28// XD momentum_euler eqn_base qdm_euler INHERITS_BRACE Momentum conservation equation for a multi-phase Euler problem
29// XD_CONT where the unknown is the velocity
30// XD attr termes_non_conservatifs bloc_op_non_conservativtifs non_conservative_terms OPT Keyword to alter the
31// XD_CONT non-conservative scheme.
32
34
36{
37 assert(l_inco_ch_ && le_fluide);
39
40 if (!sub_type(Pb_Euler, probleme()))
41 {
42 Cerr << "Equation " << que_suis_je() << " can only used with a pb of type Pb_Euler not " << probleme().que_suis_je() << " !!" << finl;
44 }
45
46 // si monophasique et termes_non_conservatifs non-lu ... on type sans error !
47 const bool is_single_phase = (ref_cast(Pb_Euler, probleme()).nb_phases() == 1);
48 if (is_single_phase && !terme_nconserv_)
49 {
50 EChaine str(" { negligeable } ");
51 str >> terme_nconserv_;
52 terme_nconserv_.associer_eqn(*this);
53 }
54 else if (!is_single_phase && !terme_nconserv_)
55 {
56 Cerr << "Error while reading " << que_suis_je() << " !!! non_conservative_terms operator is not read although it is required !!! Fix your data file ..." << finl;
58 }
59
60 terme_convectif.set_fichier("Convection_qdm");
61 terme_convectif.set_description("Momentum flow rate=Integral(rho*u*u*ndS) [N] if SI units used");
62
63 terme_nconserv_.set_fichier("Non_conservative_qdm");
64 terme_nconserv_.set_description("Conribution of non_conservative operator in QDM equation");
65
66 return is;
67}
68
70{
72 param.ajouter_non_std("convection", (this), Param::REQUIRED);
73 param.ajouter_non_std("termes_non_conservatifs|non_conservative_terms", (this));
74}
75
77{
78 if (mot == "termes_non_conservatifs|non_conservative_terms")
79 {
80 Cerr << "Reading and typing of the termes_non_conservatifs operator : " << finl;
81 is >> terme_nconserv_;
82 terme_nconserv_.associer_eqn(*this);
83 return 1;
84 }
85 else
87}
88
90{
91 switch(i)
92 {
93 case 0:
94 return terme_convectif;
95 case 1:
96 return terme_nconserv_;
97 default :
98 Cerr << "Error for Momentum_Euler::operateur(int i)" << finl;
99 Cerr << "Momentum_Euler has " << nombre_d_operateurs() <<" operators "<<finl;
100 Cerr << "and you are trying to access the " << i <<" th one."<< finl;
101 exit();
102 }
103 // Pour les compilos!!
104 return terme_convectif;
105}
106
108{
109 switch(i)
110 {
111 case 0:
112 return terme_convectif;
113 case 1:
114 return terme_nconserv_;
115 default :
116 Cerr << "Error for Momentum_Euler::operateur(int i)" << finl;
117 Cerr << "Momentum_Euler has " << nombre_d_operateurs() <<" operators "<<finl;
118 Cerr << "and you are trying to access the " << i <<" th one."<< finl;
119 exit();
120 }
121 // Pour les compilos!!
122 return terme_convectif;
123}
124
126{
128 // Mise a jour du temps dans la pression
129 for (int i = 1; i <= sch.nb_valeurs_futures(); i++)
130 {
131 la_pression->changer_temps_futur(sch.temps_futur(i), i);
132 la_pression->futur(i) = la_pression->valeurs();
133 }
135}
136
141
143{
144 Process::exit("Momentum_Euler::diffusivite_pour_transport() should not be called !!! \n");
145 return le_fluide->viscosite_dynamique();
146}
147
149{
150 Process::exit("Momentum_Euler::diffusivite_pour_transport() should not be called !!! \n");
151 return le_fluide->viscosite_cinematique();
152}
153
155{
156 Cerr << " Momentum_Euler::completer" << finl;
158 la_pression->associer_domaine_cl_dis(le_dom_Cl_dis);
159 Cerr << "unknow field type " << inconnue().que_suis_je() << finl;
160 Cerr << "unknow field name " << inconnue().le_nom() << finl;
161 Cerr << "equation type " << inconnue().equation().que_suis_je() << finl;
162
163 const Domaine_VF& dom = ref_cast(Domaine_VF, domaine_dis());
164 const Pb_Euler& pb = ref_cast(Pb_Euler, probleme());
165
166 vitesse_normale_.resize(dom.nb_faces(), 2 * pb.nb_phases()); // dimension du tab à changer pour 3 pahses
168 assert(vitesse_normale_.dimension(0) == dom.nb_faces());
169 assert(vitesse_normale_.dimension_tot(0) == dom.nb_faces_tot());
170 assert(vitesse_normale_.line_size() == 2 * pb.nb_phases());
171}
172
174{
176
177 Noms noms_compris = champs_compris_.liste_noms_compris();
178
179 const Pb_Euler& pb = ref_cast(Pb_Euler, probleme());
180 for (int i = 0; i < pb.nb_phases(); i++)
181 noms_compris.add(noms_vit_phases_[i]);
182
183 if (opt == DESCRIPTION)
184 Cerr << " Momentum_Euler : " << noms_compris << finl;
185 else
186 noms.add(noms_compris);
187}
188
190{
192 int i = noms_vit_phases_.rang(motlu);
193 if (i >= 0 && !vit_phases_[i])
194 {
196 champs_compris_.ajoute_champ(vit_phases_[i]);
197 }
198}
199
200void Momentum_Euler::verifie_ch_init_nb_comp(const Champ_Inc_base& ch_ref, const int nb_comp) const
201{
202 const Pb_Euler& pb = ref_cast(Pb_Euler, probleme());
203 const Nature_du_champ nature = ch_ref.nature_du_champ();
204 const Nom& nom = ch_ref.le_nom();
205
206 if (nature == vectoriel)
207 {
208 if (nb_comp != pb.nb_phases() * Objet_U::dimension)
209 {
210 Cerr << "The nature of the field " << nom << " unknown to the equation name " << le_nom() << " is vector." << finl;
211 Cerr << "The number of components readed for this field " << nb_comp << " is not compatible with its nature." << finl;
212 Cerr << "It should read " << pb.nb_phases() * Objet_U::dimension << " components for this field." << finl;
214 }
215 }
216 else
218}
219
221{
222 Cerr << "Reading of initial conditions\n";
223 Nom nom;
224 is >> nom;
225 if (nom != "{")
226 {
227 Cerr << que_suis_je() << ": expected { instead of " << nom << finl;
229 }
230 int vit_lu = 0, press_lu = 0;
231 for (is >> nom; nom != "}"; is >> nom)
232 if (nom == "vitesse" || nom == "velocity")
233 {
235 is >> src;
236 if (src->que_suis_je() == "Champ_Composite")
237 {
238 const int nb_phases = ref_cast(Pb_Euler, probleme()).nb_phases(), nb_dim = ref_cast(Champ_Composite,src.valeur()).get_champ_composite_dim();
239 if (nb_dim != nb_phases)
240 {
241 Cerr << que_suis_je() << ": velocity initial condition Champ_Composite should have " << nb_phases << " fields and not " << nb_dim << " !" << finl;
243 }
244 }
245
246 verifie_ch_init_nb_comp(la_vitesse, src->nb_comp());
247 la_vitesse->affecter(src), vit_lu = 1;
248 la_vitesse->passe() = la_vitesse->valeurs();
249 }
250 else if (nom == "pression" || nom == "pressure")
251 {
253 is >> src, verifie_ch_init_nb_comp(la_pression, src->nb_comp());
254 la_pression->affecter(src);
255 la_pression->passe() = la_pression->valeurs();
256 press_lu = 1;
257 }
258 else
259 {
260 Cerr << que_suis_je() << ": expected vitesse|velocity|pression|pressure instead of " << nom << finl;
262 }
263
264 if (!vit_lu)
265 {
266 Cerr << que_suis_je() << ": velocity initial condition not found." << finl;
268 }
269 if (!press_lu)
270 {
271 Cerr << que_suis_je() << ": pressure initial condition not found." << finl;
273 }
274
275 return is;
276}
277
279{
280 Equation_base::preparer_calcul(); //pour eviter Navier_Stokes_std::preparer_calcul() !
281
282 // XXX Elie Saikali : utile pour cas reprise !
283 const double temps = schema_temps().temps_courant();
284 la_pression->changer_temps(temps);
285
286 return 1;
287}
288
290{
291 const Pb_Euler& pb = ref_cast(Pb_Euler, probleme());
292 if (pb.nb_phases() == 1)
293 return 0.;
294 return -1.;
295}
296
298{
299 Cerr << "Momentum_Euler discretization" << finl;
300 const Discret_Thyd& dis = ref_cast(Discret_Thyd, discretisation());
301 const Pb_Euler& pb = ref_cast(Pb_Euler, probleme());
302
303 const double temps = schema_temps().temps_courant();
304 const int nb_valeurs_temp = schema_temps().nb_valeurs_temporelles();
305 const int N = pb.nb_phases();
306
307 dis.vitesse(schema_temps(), domaine_dis(), la_vitesse, N);
308 la_vitesse->fixer_nature_du_champ(vectoriel);
309 la_vitesse->add_synonymous(Nom("velocity"));
310 champs_compris_.ajoute_champ(la_vitesse);
311
312 /* vitesse par phase */
313 noms_vit_phases_.dimensionner(N);
314 vit_phases_.resize(N);
315
316 for (int i = 0; i < N; i++)
317 {
318 noms_vit_phases_[i] = Nom("vitesse_") + pb.nom_phase(i);
319 if (!vit_phases_[i])
320 {
322 champs_compris_.ajoute_champ(vit_phases_[i]);
323 }
324 }
325
326 Cerr << "Pressure discretization" << finl;
327 dis.discretiser_champ("pression", domaine_dis(), "pression", "Pa.m3/kg", N, nb_valeurs_temp, temps, la_pression);
328 la_pression->fixer_nature_du_champ(N == 1 ? scalaire : multi_scalaire);
329 la_pression->associer_eqn(*this);
330
331 /* nom pression par phase */
332 for (int i = 0; i < pb.nb_phases(); i++)
333 la_pression->fixer_nom_compo(i, Nom("pression_") + pb.nom_phase(i));
334
335 champs_compris_.ajoute_champ(la_pression);
336
337 // on copie la structure //
338 vitesse_son_ = la_pression->valeurs(); // nb_elem_tot * nb_phase
339
340 Cerr << "Unknown alpha_rho_u discretization" << finl;
341 dis.discretiser_champ("vitesse", domaine_dis(), "alpha_rho_u", "kg/sm3", dimension * N, nb_valeurs_temp, temps, l_inco_ch_);
342 champs_compris_.ajoute_champ(l_inco_ch_);
343
345 Cerr << "Momentum_Euler discretization ==> ok" << finl;
346}
347
349{
350 int bytes = 0;
351 bytes += Equation_base::sauvegarder(os);
352 sauver();
353
354 return bytes;
355}
356
364
366{
367 ref_cast(Milieu_composite_Euler,milieu()).calculer_pression(la_pression->valeurs());
368 ref_cast(Milieu_composite_Euler,milieu()).calculer_vitesse_son(vitesse_son_);
369}
370
372{
373 const Schema_Temps_base& sh = schema_temps();
374 const Domaine_VF& dom = ref_cast(Domaine_VF, domaine_dis());
375 const IntTab& elem_faces = dom.elem_faces();
376 const DoubleVect& surf = dom.face_surfaces();
377 const DoubleVect& vol = dom.volumes();
378 const int nb_phases = ref_cast(Pb_Euler,probleme()).nb_phases();
379 const DoubleTab& u_n = vitesse_normale();
380 double dt = sh.pas_temps_max();
381
382 DoubleTrav dt_e(dom.nb_elem());
383 for (int n = 0; n < nb_phases; n++)
384 {
385 for (int e = 0; e < dom.nb_elem(); e++)
386 {
387 double som = 0;
388 for (int i = 0; i < elem_faces.line_size(); i++)
389 {
390 int f = elem_faces(e, i);
391 som += (f >= 0) ? (fabs(u_n(f, n)) + vitesse_son_(e, n)) * surf(f) : 0;
392 }
393 dt_e(e) = vol(e) / som;
394 }
395 dt = std::min(dt, mp_min_vect(dt_e)); // @suppress("Invalid arguments") // @suppress("Function cannot be resolved")
396 }
397 return ((sh.facteur_securite_pas() * dt) < sh.temps_max() - sh.temps_courant()) ? dt : (sh.temps_max() - sh.temps_courant()) / sh.facteur_securite_pas();
398}
399
401{
402 const Domaine_VF& dom = ref_cast(Domaine_VF, domaine_dis());
403 const DoubleTab& alpha_rho = ref_cast(Pb_Euler,probleme()).equation_masse().inconnue().valeurs();
404 const DoubleTab& vit = vitesse().valeurs();
405 const int Nb_phase = ref_cast(Pb_Euler, probleme()).nb_phases(), D = Objet_U::dimension;
406 assert(vit.line_size() == Nb_phase * D);
407 assert(vit.dimension(0) == dom.nb_elem());
408
409 DoubleTab& alpha_rhoU = inconnue().valeurs();
410 for (int n = 0; n < Nb_phase; n++)
411 {
412 assert(vit_phases_[n]);
413 DoubleTab& vit_phase = vit_phases_[n]->valeurs();
414
415 for (int j = 0; j < dom.nb_elem(); j++)
416 for (int d = 0; d < D; d++)
417 {
418 vit_phase(j, d) = vit(j, Nb_phase * d + n);
419 alpha_rhoU(j, Nb_phase * d + n) = vit(j, Nb_phase * d + n) * alpha_rho(j, n);
420 }
421 vit_phase.echange_espace_virtuel();
422 }
423 alpha_rhoU.echange_espace_virtuel();
424}
425
427{
428 const Domaine_VF& dom = ref_cast(Domaine_VF, domaine_dis());
429 const DoubleTab& alpha_rho_U = inconnue().valeurs();
430 const DoubleTab& alpha_rho = ref_cast(Pb_Euler,probleme()).equation_masse().inconnue().valeurs();
431 const int Nb_phase = ref_cast(Pb_Euler, probleme()).nb_phases(), D = Objet_U::dimension;
432 assert(alpha_rho_U.line_size() == Nb_phase * D);
433 assert(alpha_rho_U.dimension(0) == dom.nb_elem());
434
435 DoubleTab& vit = vitesse().valeurs();
436 for (int n = 0; n < Nb_phase; n++)
437 {
438 assert(vit_phases_[n]);
439 DoubleTab& vit_phase = vit_phases_[n]->valeurs();
440
441 for (int j = 0; j < dom.nb_elem(); j++)
442 for (int d = 0; d < D; d++)
443 {
444 vit_phase(j, d) = alpha_rho_U(j, Nb_phase * d + n) / alpha_rho(j, n);
445 vit(j, Nb_phase * d + n) = alpha_rho_U(j, Nb_phase * d + n) / alpha_rho(j, n);
446 }
447 vit_phase.echange_espace_virtuel();
448 }
450}
451
453{
454 assert(i >= 0 && i < (int )vit_phases_.size());
455 return vit_phases_[i].valeur();
456}
457
459{
460 assert(i >= 0 && i < (int )vit_phases_.size());
461 return vit_phases_[i].valeur();
462}
463
465{
466 assert(Objet_U::dimension == 2);
467 const int Nb_phase = ref_cast(Pb_Euler, probleme()).nb_phases();
468 const Domaine_VF& dom = ref_cast(Domaine_VF, domaine_dis());
469 const DoubleTab& vit = vitesse().valeurs();
470 const IntTab& f_e = dom.face_voisins();
471 for (int n = 0; n < Nb_phase; n++)
472 for (int f = 0; f < dom.nb_faces(); f++)
473 {
474 // attention : u_n( faces , 0 ) est la vitesse normale left (au sens de la normale sortante) et u_n( faces , 0 ) est vit norma right
475 // CE N EST PAS la dimesion de l espae
476 int el = f_e(f, 0), er = f_e(f, 1);
477 double nx = dom.face_normales(f, 0) / dom.face_surfaces(f);
478 double ny = dom.face_normales(f, 1) / dom.face_surfaces(f);
479 vitesse_normale_(f, n) = (el >= 0) ? vit(el, n) * nx + vit(el, n + Nb_phase) * ny : -123.123;
480 vitesse_normale_(f, n + Nb_phase) = (er >= 0) ? vit(er, n) * nx + vit(er, n + Nb_phase) * ny : -123.123;
481 }
482
483 vitesse_normale_.echange_espace_virtuel();
484}
classe Champ_Don_base classe de base des Champs donnes (non calcules)
Classe Champ_Inc_base.
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
classe Champ_base Cette classe est la base de la hierarchie des champs.
Definition Champ_base.h:43
classe Discret_Thyd Cette classe est la classe de base representant une discretisation
void vitesse(const Schema_Temps_base &, Domaine_dis_base &, OWN_PTR(Champ_Inc_base)&, int nb_comp=1) const
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
class Domaine_VF
Definition Domaine_VF.h:44
virtual const DoubleVect & face_surfaces() const
Definition Domaine_VF.h:51
int nb_faces() const
renvoie le nombre global de faces.
Definition Domaine_VF.h:471
int nb_faces_tot() const
renvoie le nombre total de faces.
Definition Domaine_VF.h:481
void creer_tableau_faces(Array_base &, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) const
virtual double face_normales(int face, int comp) const
Definition Domaine_VF.h:47
double volumes(int i) const
Definition Domaine_VF.h:113
int elem_faces(int i, int j) const
renvoie le numero de le ieme face de la maille num_elem la facon dont ces faces sont numerotees est
Definition Domaine_VF.h:543
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
Definition Domaine_VF.h:418
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
virtual void set_param(Param &titi) const override
const Nom & le_nom() const override
Renvoie le nom de l'equation.
const Discretisation_base & discretisation() const
Renvoie la discretisation associee a l'equation.
virtual void mettre_a_jour_champs_conserves(double temps, int reset=0)
virtual void abortTimeStep()
Reinitialiser ce qui doit l'etre.
virtual void completer()
Complete la construction (initialisation) des objets associes a l'equation.
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
virtual int preparer_calcul()
Tout ce qui ne depend pas des autres problemes eventuels.
int sauvegarder(Sortie &) const override
On sauvegarde l'inconnue, puis les sources sur un flot de sortie.
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
virtual void verifie_ch_init_nb_comp(const Champ_Inc_base &ch_ref, const int nb_comp) const
Verification du nombre de composantes lues pour la specification d un champ.
void creer_champ(const Motcle &motlu) override
Schema_Temps_base & schema_temps()
Renvoie le schema en temps associe a l'equation.
virtual bool initTimeStep(double dt)
Allocation et initialisation de l'inconnue et des CLs jusqu'a present+dt.
virtual void discretiser()
Discretise l'equation.
Champs_compris champs_compris_
Domaine_dis_base & domaine_dis()
Renvoie le domaine discretise associe a l'equation.
const Nom & le_nom() const override
Renvoie le nom du champ.
virtual Nature_du_champ nature_du_champ() const
Definition Field_base.h:77
DoubleTab vitesse_normale_
const DoubleTab & vitesse_normale() const
DoubleTab vitesse_son_
void verifie_ch_init_nb_comp(const Champ_Inc_base &ch_ref, const int nb_comp) const override
Verification du nombre de composantes lues pour la specification d un champ.
const Champ_Inc_base & vitesse() const override
const Champ_base & diffusivite_pour_pas_de_temps() const override
void discretiser() override
Discretise l'equation.
void set_param(Param &param) const override
int preparer_calcul() override
Tout ce qui ne depend pas des autres problemes eventuels.
Operateur_NConserv terme_nconserv_
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
const Champ_Inc_base & vitesse_phase(const int i) const
void completer() override
Complete la construction (initialisation) des objets associes a l'equation.
OWN_PTR(Champ_Inc_base) l_inco_ch_
double alpha_res() const
Motcles noms_vit_phases_
void mettre_a_jour_champs_conserves(double temps, int reset) override
void calculer_vitesse_normale()
void creer_champ(const Motcle &motlu) override
int sauvegarder(Sortie &os) const override
On sauvegarde l'inconnue, puis les sources sur un flot de sortie.
const Champ_Don_base & diffusivite_pour_transport() const override
void abortTimeStep() override
Reinitialiser ce qui doit l'etre.
int lire_motcle_non_standard(const Motcle &, Entree &) override
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
const Champ_Inc_base & inconnue() const override
bool initTimeStep(double dt) override
Allocation et initialisation de l'inconnue et des CLs jusqu'a present+dt.
double calculer_pas_de_temps() const override
Calcul du prochain pas de temps.
Entree & lire_cond_init(Entree &) override
Lecture des conditions initiales dans un flot d'entree.
int nombre_d_operateurs() const override
std::vector< OWN_PTR(Champ_Inc_base)> vit_phases_
const Operateur & operateur(int) const override
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
Definition MorEqn.h:62
Une chaine de caractere (Nom) en majuscules.
Definition Motcle.h:26
classe Navier_Stokes_std Cette classe porte les termes de l'equation de la dynamique
const Milieu_base & milieu() const override
Renvoie le milieu physique de l'equation (le Fluide_base upcaste en Milieu_base).
Operateur_Conv terme_convectif
int lire_motcle_non_standard(const Motcle &, Entree &) override
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
virtual void sauver() const
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
Un tableau de chaine de caracteres (VECT(Nom)).
Definition Noms.h:26
friend class Entree
Definition Objet_U.h:76
static int dimension
Definition Objet_U.h:99
friend class Sortie
Definition Objet_U.h:75
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
Definition Objet_U.cpp:104
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
Definition Objet_U.cpp:293
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Definition Objet_U.cpp:282
classe Operateur Classe generique de la hierarchie des operateurs.
Definition Operateur.h:39
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
@ REQUIRED
Definition Param.h:115
void ajouter_non_std(const char *keyword, const Objet_U *value, Param::Nature nat=Param::OPTIONAL)
Register a keyword handled by Objet_U::lire_motcle_non_standard.
Definition Param.cpp:489
const Nom & nom_phase(int i) const
Definition Pb_Euler.h:52
int nb_phases() const
Definition Pb_Euler.h:51
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455
class Schema_Temps_base
double temps_courant() const
Renvoie le temps courant.
virtual double temps_futur(int i) const =0
double pas_temps_max() const
Renvoie le pas de temps maximum.
double temps_max() const
Renvoie une reference sur le temps maximum.
virtual int nb_valeurs_futures() const =0
virtual int nb_valeurs_temporelles() const =0
double facteur_securite_pas() const
Renvoie le facteur de securite ou multiplicateur de delta_t.
Classe de base des flux de sortie.
Definition Sortie.h:52
_SIZE_ dimension(int d) const
Definition TRUSTTab.tpp:133
int line_size() const
Definition TRUSTVect.tpp:67
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")