TRUST 1.9.8
HPC thermohydraulic platform
Loading...
Searching...
No Matches
Fluide_base.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 <Fluide_Incompressible.h>
17#include <Discretisation_base.h>
18#include <Champ_Fonc_Tabule.h>
19#include <Schema_Temps_base.h>
20#include <Navier_Stokes_std.h>
21#include <Champ_Fonc_MED.h>
22#include <Champ_Uniforme.h>
23#include <Champ_Inc_base.h>
24#include <Probleme_base.h>
25#include <Equation_base.h>
26#include <Fluide_base.h>
27#include <EChaine.h>
28#include <Motcle.h>
29#include <Param.h>
30
31
32Implemente_instanciable(Fluide_base, "Fluide_base", Milieu_base);
33// XD fluide_base milieu_base fluide_base BRACE Basic class for fluids.
34// XD attr indice field_base indice OPT Refractivity of fluid.
35// XD attr kappa field_base kappa OPT Absorptivity of fluid (m-1).
36
38{
39 os << "{" << finl;
40 os << "kappa " << coeff_absorption_ << finl;
41 os << "indice " << indice_refraction_ << finl;
42 os << "longueur_rayo " << longueur_rayo_ << finl;
43 os << "mu " << ch_mu_ << finl;
44 os << "beta_co " << ch_beta_co_ << finl;
46 os << "}" << finl;
47 return os;
48}
49
50/*! @brief Lit les caracteristiques du fluide a partir d'un flot d'entree.
51 *
52 * Format:
53 * Fluide_base
54 * {
55 * Mu type_champ bloc de lecture de champ
56 * Rho Champ_Uniforme 1 vrel
57 * [Cp Champ_Uniforme 1 vrel]
58 * [Lambda type_champ bloc de lecture de champ]
59 * [Beta_th type_champ bloc de lecture de champ]
60 * [Beta_co type_champ bloc de lecture de champ]
61 * }
62 * cf Milieu_base::readOn
63 *
64 * @param (Entree& is) un flot d'entree
65 * @return (Entree&) le flot d'entree modifie
66 * @throws accolade ouvrante attendue
67 */
69{
71 if (ch_mu_) champs_don_.add(ch_mu_.valeur());
72 if (ch_nu_) champs_don_.add(ch_nu_.valeur());
73 if (ch_beta_co_) champs_don_.add(ch_beta_co_.valeur());
74 if (coeff_absorption_) champs_don_.add(coeff_absorption_.valeur());
75 if (indice_refraction_) champs_don_.add(indice_refraction_.valeur());
76 if (longueur_rayo_) champs_don_.add(longueur_rayo_.valeur());
77 return is;
78}
79
80void Fluide_base::set_param(Param& param) const
81{
83 //La lecture de rho n est pas specifiee obligatoire ici car ce champ ne doit pas etre lu pour un fluide dilatable
84 param.ajouter("mu", &ch_mu_, Param::REQUIRED);
85 param.ajouter("beta_co", &ch_beta_co_);
86 param.ajouter("kappa", &coeff_absorption_);
87 param.ajouter("indice", &indice_refraction_);
88}
89
95
97{
98 const Domaine_dis_base& domaine_dis = pb.equation(0).domaine_dis();
99 // mu rho nu revoir
100 double temps = pb.schema_temps().temps_courant();
101 if (ch_mu_)
102 if (sub_type(Champ_Fonc_MED, ch_mu_.valeur()))
103 {
104 Cerr << " on convertit le champ_fonc_med en champ_don" << finl;
105 OWN_PTR(Champ_Don_base) mu_prov;
106 dis.discretiser_champ("champ_elem", domaine_dis, "neant", "neant", 1, temps, mu_prov);
107 mu_prov->affecter(ch_mu_.valeur());
108 ch_mu_.detach();
109 ch_nu_.detach();
110 dis.discretiser_champ("champ_elem", domaine_dis, "neant", "neant", 1, temps, ch_mu_);
111
112 ch_mu_->valeurs() = mu_prov->valeurs();
113
114 }
115 if (!ch_mu_)
116 {
117 dis.discretiser_champ("champ_elem", domaine_dis, "neant", "neant", 1, temps, ch_mu_);
118 dis.discretiser_champ("champ_elem", domaine_dis, "neant", "neant", 1, temps, ch_nu_);
119 }
120 if (ch_mu_)
121 {
122 dis.nommer_completer_champ_physique(domaine_dis, "viscosite_dynamique", "kg/m/s", ch_mu_.valeur(), pb);
123 champs_compris_.ajoute_champ(ch_mu_.valeur());
124 }
125 if (sub_type(Champ_Fonc_Tabule, ch_mu_.valeur()))
126 {
127 dis.discretiser_champ("champ_elem", domaine_dis, "neant", "neant", 1, temps, ch_nu_);
128 }
129 if (!ch_nu_)
130 dis.discretiser_champ("champ_elem", domaine_dis, "neant", "neant", 1, temps, ch_nu_);
131
132 if (ch_nu_)
133 {
134 dis.nommer_completer_champ_physique(domaine_dis, "viscosite_cinematique", "m2/s", ch_nu_.valeur(), pb);
135 champs_compris_.ajoute_champ(ch_nu_.valeur());
136 }
137 if (ch_beta_co_)
138 {
139 dis.nommer_completer_champ_physique(domaine_dis, "dilatabilite_solutale", ".", ch_beta_co_.valeur(), pb);
140 champs_compris_.ajoute_champ(ch_beta_co_.valeur());
141 }
142
144}
145/*! @brief Verifie que les champs lus l'ont ete correctement.
146 *
147 * @throws la masse volumique (rho) n'est pas strictement positive
148 * @throws la masse volumique (rho) n'est pas de type Champ_Uniforme
149 * @throws la viscosite (mu) n'est pas strictement positive
150 * @throws l'une des proprietes (rho ou mu) du fluide n'a pas ete definie
151 * @throws la capacite calorifique (Cp) n'est pas strictement positive
152 * @throws la capacite calorifique (Cp) n'est pas de type Champ_Uniforme
153 * @throws la conductivite (lambda) n'est pas strictement positive
154 * @throws toutes les proprietes du fluide anisotherme n'ont pas ete definies
155 */
157{
158 msg = "";
159 if (ch_rho_)
160 {
161 if (mp_min_vect(ch_rho_->valeurs()) <= 0)
162 {
163 msg += "The density rho is not striclty positive. \n";
164 err = 1;
165 }
166 }
167 else
168 {
169 msg += "The density rho has not been specified. \n";
170 err = 1;
171 }
172 if ((bool(ch_Cp_)) && ((bool(ch_lambda_)) && (bool(ch_beta_th_)))) // Fluide anisotherme
173 {
174 if (sub_type(Champ_Uniforme, ch_Cp_.valeur()))
175 {
176 if (ch_Cp_->valeurs()(0, 0) <= 0)
177 {
178 msg += "The heat capacity Cp is not striclty positive. \n";
179 err = 1;
180 }
181 }
182 else
183 {
184 msg += "The heat capacity Cp is not of type Champ_Uniforme. \n";
185 err = 1;
186 }
187 if (sub_type(Champ_Uniforme, ch_lambda_.valeur()))
188 {
189 if (ch_lambda_->valeurs()(0, 0) < 0)
190 {
191 msg += "The conductivity lambda is not positive. \n";
192 err = 1;
193 }
194 }
195
196 }
197 if (((bool(ch_Cp_)) || (bool(ch_beta_th_))) && (!ch_lambda_))
198 {
199 msg += " Physical properties for an anisotherm case : \n";
200 msg += "the conductivity lambda has not been specified. \n";
201 if (err == 0) err = 2; // if err=1 we keep it since err=1 exits while err=2 displays warning!
202 }
203 if (((bool(ch_lambda_)) || (bool(ch_beta_th_))) && (!ch_Cp_))
204 {
205 msg += " Physical properties for an anisotherm case : \n";
206 msg += "the heat capacity Cp has not been specified. \n";
207 if (err == 0) err = 2;
208 }
209 if (((bool(ch_lambda_)) || (bool(ch_Cp_))) && (!ch_beta_th_))
210 {
211 msg += " Physical properties for an anisotherm case : \n";
212 msg += "the thermal expansion coefficient beta_th has not been specified. \n";
213 if (err == 0) err = 2;
214 }
215
216 // Test de la coherence des proprietees radiatives du fluide incompressible
217 // (pour un milieu semi transparent
218 if ((bool(coeff_absorption_)) && (!indice_refraction_))
219 {
220 msg += " Physical properties for semi tranparent radiation case : \n";
221 msg += "Refraction index has not been specfied while it has been done for absorption coefficient. \n";
222 err = 1;
223 }
224 if ((!coeff_absorption_) && (bool(indice_refraction_)))
225 {
226 msg += " Physical properties for semi tranparent radiation case : \n";
227 msg += "Absorption coefficient has not been specfied while it has been done for refraction index. \n";
228 err = 1;
229 }
230
231 if ((bool(coeff_absorption_)) && indice_refraction_)
232 {
233 if (sub_type(Champ_Uniforme, coeff_absorption_.valeur()))
234 {
235 if (coeff_absorption_->valeurs()(0, 0) <= 0)
236 {
237 msg += "The absorption coefficient kappa is not striclty positive. \n";
238 err = 1;
239 }
240 }
241 }
243}
244
245/*! @brief Si l'objet reference par nu et du type Champ_Uniforme type nu en "Champ_Uniforme" et le remplit
246 *
247 * avec mu(0,0)/rho(0,0).
248 * Sinon n efait rien.
249 *
250 */
252{
253 assert(ch_mu_);
254 assert(ch_rho_);
255 ch_nu_ = ch_mu_;
256 if (sub_type(Champ_Uniforme, ch_mu_.valeur()) && !sub_type(Champ_Uniforme, ch_rho_.valeur()))
257 ch_nu_->valeurs().resize(ch_rho_->valeurs().dimension_tot(0), ch_rho_->valeurs().line_size());
258 ch_nu_->nommer("nu");
259}
260
262{
263 const DoubleTab& tabmu = ch_mu_->valeurs();
264 const DoubleTab& tabrho = ch_rho_->valeurs();
265 DoubleTab& tabnu = ch_nu_->valeurs();
266
267 int cRho = sub_type(Champ_Uniforme, ch_rho_.valeur()),
268 cMu = sub_type(Champ_Uniforme, ch_mu_.valeur());
269 int i, j, n;
270 int Nl = tabnu.dimension_tot(0), N = tabnu.line_size();
271
272 /* valeurs : mu / rho */
273 for (i = j = 0; i < Nl; i++)
274 for (n = 0; n < N; n++, j++)
275 tabnu.addr()[j] = tabmu.addr()[cMu ? n : j] / tabrho.addr()[cRho ? n : j];
276}
277
279{
280 if (!equation_.size() || !e_int_auto_)
281 return true; //pas d'equation associee ou pas de e_int a gerer
282 const Schema_Temps_base& sch = equation_.begin()->second->schema_temps(); //on recupere le schema en temps par la 1ere equation
283 Champ_Inc_base& ch = ref_cast(Champ_Inc_base, ch_e_int_.valeur());
284 for (int i = 1; i <= sch.nb_valeurs_futures(); i++)
285 ch.changer_temps_futur(sch.temps_futur(i), i), ch.futur(i) = ch.valeurs();
286 return true;
287}
288
289/*! @brief Effectue une mise a jour en temps du milieu, et donc de ses parametres caracteristiques.
290 *
291 * Les champs uniformes sont recalcules pour le
292 * nouveau temps specifie, les autres sont mis a
293 * par un appel a CLASSE_DU_CHAMP::mettre_a_jour(double temps).
294 *
295 * @param (double temps) le temps de mise a jour
296 */
298{
300 if (ch_beta_co_)
301 ch_beta_co_->mettre_a_jour(temps);
302 ch_mu_->mettre_a_jour(temps);
303 calculer_nu();
304 ch_nu_->changer_temps(temps);
305 ch_nu_->valeurs().echange_espace_virtuel();
306 if (e_int_auto_)
307 ch_e_int_->mettre_a_jour(temps);
308
309 // Mise a jour des proprietes radiatives du fluide incompressible
310 // (Pour un fluide incompressible semi transparent).
311 if (coeff_absorption_ && indice_refraction_)
312 {
313 coeff_absorption_->mettre_a_jour(temps);
314 indice_refraction_->mettre_a_jour(temps);
315
316 // Mise a jour de longueur_rayo
317 longueur_rayo_->mettre_a_jour(temps);
318
319 if (sub_type(Champ_Uniforme, kappa()))
320 {
321 longueur_rayo().valeurs()(0, 0) = 1 / (3 * kappa().valeurs()(0, 0));
323 }
324 else
325 {
326 DoubleTab& l_rayo = longueur_rayo_->valeurs();
327 const DoubleTab& K = kappa().valeurs();
328 for (int i = 0; i < kappa().nb_valeurs_nodales(); i++)
329 l_rayo[i] = 1 / (3 * K[i]);
330 l_rayo.echange_espace_virtuel();
331 }
332 }
333}
334
335/*! @brief Initialise les parametres du fluide.
336 *
337 */
338int Fluide_base::initialiser(const double temps)
339{
340 Cerr << "Fluide_base::initialiser()" << finl;
342 ch_mu_->initialiser(temps);
343
344 if (ch_beta_co_)
345 ch_beta_co_->initialiser(temps);
346
347 calculer_nu();
348 ch_nu_->valeurs().echange_espace_virtuel();
349 ch_nu_->changer_temps(temps);
350
351 // Initialisation des proprietes radiatives du fluide incompressible
352 // (Pour un fluide incompressible semi transparent).
353 if (coeff_absorption_ && indice_refraction_)
354 {
355 Cerr << "Semi transparent fluid properties initialization." << finl;
356 coeff_absorption_->initialiser(temps);
357 indice_refraction_->initialiser(temps);
358
359 // Initialisation de longueur_rayo
360 longueur_rayo_->initialiser(temps);
361 if (sub_type(Champ_Uniforme, kappa()))
362 longueur_rayo().valeurs()(0, 0) = 1 / (3 * kappa().valeurs()(0, 0));
363 else
364 {
365 DoubleTab& l_rayo = longueur_rayo_->valeurs();
366 const DoubleTab& K = kappa().valeurs();
367 for (int i = 0; i < kappa().nb_valeurs_nodales(); i++)
368 l_rayo[i] = 1 / (3 * K[i]);
369 }
370 }
371 return 1;
372}
373
374void Fluide_base::set_h0_T0(double h0, double T0)
375{
376 T0_ = T0;
377 h0_ = h0;
378}
379
381{
382 OWN_PTR(Champ_Inc_base) e_int_inc;
383 const Equation_base& eq = equation_.count("temperature") ? equation("temperature") : equation("enthalpie");
384 eq.discretisation().discretiser_champ("champ_elem", eq.domaine_dis(), "energie_interne", "J/kg", 1, eq.inconnue().nb_valeurs_temporelles(), eq.inconnue().temps(), e_int_inc);
385 e_int_inc->associer_eqn(eq), e_int_inc->init_champ_calcule(*this, calculer_e_int);
386 ch_e_int_ = e_int_inc;
387 ch_e_int_->mettre_a_jour(eq.inconnue().temps());
388 e_int_auto_ = 1;
389}
390
392{
393 const bool res_en_T = equation_.count("temperature") ? true : false;
394 if (res_en_T) return; /* Do nothing */
395
396 const Equation_base& eq = equation("enthalpie");
397 const Champ_base& ch_h = eq.inconnue(), &ch_Cp = capacite_calorifique();
398 Champ_Inc_base& ch_T = ref_cast_non_const(Champ_Inc_base, ch_h_ou_T_.valeur());
399 const DoubleTab& h = ch_h.valeurs(), &Cp_ = ch_Cp.valeurs();
400 DoubleTab& T = ch_T.valeurs(), &bT = ch_T.val_bord();;
401
402 DoubleTab bh = ch_h.valeur_aux_bords(), bCp;
403
404 int i, zero = 0, Ni = h.dimension_tot(0), Nb = bh.dimension_tot(0), n, n0 = std::max(id_composite_, zero), cCp = Cp_.dimension_tot(0) == 1, N = id_composite_ >= 0 ? 1 : Cp_.dimension(1);
405
406 // T = T0 + (h - h0) / cp
407 for (i = 0; i < Ni; i++)
408 for (n = 0; n < N; n++)
409 T(i, n) = T0_ + (( h(i, n0 + n) - h0_) / Cp_(!cCp * i, n));
410
411 if (ch_Cp.a_un_domaine_dis_base())
412 bCp = ch_Cp.valeur_aux_bords();
413 else
414 {
415 bCp.resize(bh.dimension_tot(0), N);
416 ch_Cp.valeur_aux(ref_cast(Domaine_VF, ch_h.domaine_dis_base()).xv_bord(), bCp);
417 }
418
419 for (i = 0; i < Nb; i++)
420 for (n = 0; n < N; n++)
421 bT(i, n) = T0_ + (( bh(i, n0 + n) - h0_) / bCp(!cCp * i, n));
422}
423
425{
426 const bool res_en_T = equation_.count("temperature") ? true : false;
427 if (res_en_T) return; /* Do nothing */
428
429 const Equation_base& eq = equation("enthalpie");
430 if (!ch_e_int_) creer_e_int();
431 ch_h_ou_T_ = ch_e_int_; // on initialise
432 ch_h_ou_T_->nommer("temperature");
433 ch_h_ou_T_->mettre_a_jour(eq.inconnue().temps());
434}
435
436void Fluide_base::calculer_e_int(const Objet_U& obj, DoubleTab& val, DoubleTab& bval, tabs_t& deriv)
437{
438 const Fluide_base& fl = ref_cast(Fluide_base, obj);
439 const bool res_en_T = fl.equation_.count("temperature") ? true : false;
440
441 const Equation_base& eq = res_en_T ? fl.equation("temperature") : fl.equation("enthalpie");
442 const Champ_base& ch_T_ou_h = eq.inconnue(), &ch_Cp = fl.capacite_calorifique();
443 const DoubleTab& T_ou_h = ch_T_ou_h.valeurs(), &Cp = ch_Cp.valeurs();
444 int i, zero = 0, Ni = val.dimension_tot(0), Nb = bval.dimension_tot(0), n, n0 = std::max(fl.id_composite_, zero), cCp = Cp.dimension_tot(0) == 1, N = fl.id_composite_ >= 0 ? 1 : Cp.dimension(1);
445
446 DoubleTab bT_ou_h = ch_T_ou_h.valeur_aux_bords();
447
448 if (res_en_T)
449 {
450 // e = h0 + Cp * (T - T0)
451 for (i = 0; i < Ni; i++)
452 for (n = 0; n < N; n++)
453 val(i, n) = fl.h0_ + Cp(!cCp * i, n) * (T_ou_h(i, n0 + n) - fl.T0_);
454
455 DoubleTab bCp;
456
457 if (ch_Cp.a_un_domaine_dis_base())
458 bCp = ch_Cp.valeur_aux_bords();
459 else
460 {
461 bCp.resize(bval.dimension_tot(0), N);
462 ch_Cp.valeur_aux(ref_cast(Domaine_VF, ch_T_ou_h.domaine_dis_base()).xv_bord(), bCp);
463 }
464
465 for (i = 0; i < Nb; i++)
466 for (n = 0; n < N; n++)
467 bval(i, n) = fl.h0_ + bCp(i, n) * (bT_ou_h(i, n0 + n) - fl.T0_);
468
469 DoubleTab& der_T = deriv[ch_T_ou_h.le_nom().getString()];
470 for (der_T.resize(Ni, N), i = 0; i < Ni; i++)
471 for (n = 0; n < N; n++)
472 der_T(i, n) = Cp(!cCp * i, n);
473 }
474 else
475 {
476 // e = h - P / rho
477 for (i = 0; i < Ni; i++)
478 for (n = 0; n < N; n++)
479 val(i, n) = T_ou_h(i, n0 + n);
480
481 for (i = 0; i < Nb; i++)
482 for (n = 0; n < N; n++)
483 bval(i, n) = bT_ou_h(i, n0 + n);
484
485 DoubleTab& der_T = deriv["enthalpie"];
486 for (der_T.resize(Ni, N), i = 0; i < Ni; i++)
487 for (n = 0; n < N; n++)
488 der_T(i, n) = 1.;
489 }
490}
491
493{
494 if (!ch_e_int_) creer_e_int();
495 return ch_e_int_;
496}
497
499{
500 if (!ch_e_int_) creer_e_int();
501 return ch_e_int_;
502}
503
505{
506 if (!ch_h_ou_T_ && !ch_e_int_) creer_e_int();
507 return ch_h_ou_T_ ? ch_h_ou_T_ : ch_e_int_;
508}
509
511{
512 if (!ch_h_ou_T_ && !ch_e_int_) creer_e_int();
513 return ch_h_ou_T_ ? ch_h_ou_T_ : ch_e_int_;
514}
515
517{
518 if (!ch_h_ou_T_)
520
521 if (sub_type(Fluide_Incompressible, *this))
522 calculer_temperature_multiphase(); /* sinon rempli dans Fluide_reel_base */
523
524 return ch_h_ou_T_;
525}
526
528{
529 if (!ch_h_ou_T_)
531
532 if (sub_type(Fluide_Incompressible, *this))
533 calculer_temperature_multiphase(); /* sinon rempli dans Fluide_reel_base */
534
535 return ch_h_ou_T_;
536}
classe Champ_Don_base classe de base des Champs donnes (non calcules)
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
int nb_valeurs_nodales() const override
Renvoie le nombre de degre de liberte par composante: le nombre de noeuds.
classe Champ_Fonc_MED Load a field from a MED file for a given time.
Classe Champ_Fonc_Tabule Classe derivee de Champ_Fonc_base qui represente les.
Classe Champ_Inc_base.
DoubleTab & futur(int i=1) override
Renvoie les valeurs du champs a l'instant t+i.
DoubleTab & val_bord()
virtual int nb_valeurs_temporelles() const
Renvoie le nombre de valeurs temporelles actuellement conservees.
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
double changer_temps_futur(double, int i=1)
Fixe le temps du ieme champ futur.
virtual DoubleTab & valeurs()=0
classe Champ_Uniforme Represente un champ constant dans l'espace et dans le temps.
classe Champ_base Cette classe est la base de la hierarchie des champs.
Definition Champ_base.h:43
virtual const Domaine_dis_base & domaine_dis_base() const
virtual DoubleTab valeur_aux_bords() const
renvoie la valeur du champ aux faces de bord
double temps() const
Renvoie le temps du champ.
classe Discretisation_base Cette classe represente un schema de discretisation en espace,...
void nommer_completer_champ_physique(const Domaine_dis_base &domaine_vdf, const Nom &nom_champ, const Nom &unite, Champ_base &champ, const Probleme_base &pbi) 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
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
const Discretisation_base & discretisation() const
Renvoie la discretisation associee a l'equation.
virtual const Champ_Inc_base & inconnue() const =0
Domaine_dis_base & domaine_dis()
Renvoie le domaine discretise associe a l'equation.
const Nom & le_nom() const override
Renvoie le nom du champ.
classe Fluide_Incompressible Cette classe represente un d'un fluide incompressible ainsi que
classe Fluide_base Cette classe represente un d'un fluide incompressible ainsi que
Definition Fluide_base.h:38
virtual void set_h0_T0(double h0, double T0)
void set_param(Param &param) const override
virtual void calculer_nu()
void mettre_a_jour(double) override
Effectue une mise a jour en temps du milieu, et donc de ses parametres caracteristiques.
void calculer_temperature_multiphase() const
const Champ_base & energie_interne() const
OWN_PTR(Champ_base) ch_e_int_
int initialiser(const double temps) override
Initialise les parametres du fluide.
void creer_temperature_multiphase() const
static void calculer_e_int(const Objet_U &obj, DoubleTab &val, DoubleTab &bval, tabs_t &deriv)
void verifier_coherence_champs(int &err, Nom &message) override
Verifie que les champs lus l'ont ete correctement.
const Champ_base & enthalpie() const
void creer_champs_non_lus() override
Champ_Don_base & kappa()
Definition Fluide_base.h:70
void creer_e_int() const
void creer_nu()
Si l'objet reference par nu et du type Champ_Uniforme type nu en "Champ_Uniforme" et le remplit.
Champ_Don_base & longueur_rayo()
Definition Fluide_base.h:79
bool initTimeStep(double dt) override
void discretiser(const Probleme_base &pb, const Discretisation_base &dis) override
const Champ_base & temperature_multiphase() const
classe Milieu_base Cette classe est la base de la hierarchie des milieux (physiques)
Definition Milieu_base.h:50
void ecrire(Sortie &) const
Ecrit un objet milieu sur un flot de sortie.
virtual int initialiser(const double temps)
virtual void creer_champs_non_lus()
virtual const Equation_base & equation(const std::string &nom_inc) const
virtual void mettre_a_jour(double temps)
virtual const Champ_Don_base & capacite_calorifique() const
Renvoie la capacite calorifique du milieu.
virtual void discretiser(const Probleme_base &pb, const Discretisation_base &dis)
virtual void verifier_coherence_champs(int &err, Nom &message)
Champs_compris champs_compris_
virtual void set_param(Param &param) const override
std::map< std::string, const Equation_base * > equation_
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
const std::string & getString() const
Definition Nom.h:92
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
Definition Objet_U.cpp:293
Objet_U()
Constructeur par defaut : attribue un numero d'identifiant unique a l'objet (object_id_),...
Definition Objet_U.cpp:55
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Definition Objet_U.cpp:282
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
Definition Param.cpp:364
@ REQUIRED
Definition Param.h:115
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
const Schema_Temps_base & schema_temps() const
Renvoie le schema en temps associe au probleme.
virtual const Equation_base & equation(int) const =0
class Schema_Temps_base
double temps_courant() const
Renvoie le temps courant.
virtual double temps_futur(int i) const =0
virtual int nb_valeurs_futures() const =0
Classe de base des flux de sortie.
Definition Sortie.h:52
_TYPE_ * addr()
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
Definition TRUSTTab.tpp:469
_SIZE_ dimension_tot(int) const override
Definition TRUSTTab.tpp:160
int line_size() const
Definition TRUSTVect.tpp:67
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")