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>
40 os <<
"kappa " << coeff_absorption_ << finl;
42 os <<
"longueur_rayo " << longueur_rayo_ << finl;
43 os <<
"mu " << ch_mu_ << finl;
71 if (ch_mu_) champs_don_.add(ch_mu_.valeur());
74 if (coeff_absorption_) champs_don_.add(coeff_absorption_.valeur());
76 if (longueur_rayo_) champs_don_.add(longueur_rayo_.valeur());
86 param.
ajouter(
"kappa", &coeff_absorption_);
104 Cerr <<
" on convertit le champ_fonc_med en champ_don" << finl;
106 dis.
discretiser_champ(
"champ_elem", domaine_dis,
"neant",
"neant", 1, temps, mu_prov);
107 mu_prov->affecter(ch_mu_.valeur());
110 dis.
discretiser_champ(
"champ_elem", domaine_dis,
"neant",
"neant", 1, temps, ch_mu_);
112 ch_mu_->valeurs() = mu_prov->valeurs();
117 dis.
discretiser_champ(
"champ_elem", domaine_dis,
"neant",
"neant", 1, temps, ch_mu_);
161 if (mp_min_vect(ch_rho_->valeurs()) <= 0)
163 msg +=
"The density rho is not striclty positive. \n";
169 msg +=
"The density rho has not been specified. \n";
176 if (
ch_Cp_->valeurs()(0, 0) <= 0)
178 msg +=
"The heat capacity Cp is not striclty positive. \n";
184 msg +=
"The heat capacity Cp is not of type Champ_Uniforme. \n";
191 msg +=
"The conductivity lambda is not positive. \n";
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;
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;
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;
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";
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";
235 if (coeff_absorption_->valeurs()(0, 0) <= 0)
237 msg +=
"The absorption coefficient kappa is not striclty positive. \n";
257 ch_nu_->valeurs().resize(ch_rho_->valeurs().dimension_tot(0), ch_rho_->valeurs().line_size());
263 const DoubleTab& tabmu = ch_mu_->valeurs();
264 const DoubleTab& tabrho = ch_rho_->valeurs();
265 DoubleTab& tabnu =
ch_nu_->valeurs();
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];
302 ch_mu_->mettre_a_jour(temps);
304 ch_nu_->changer_temps(temps);
305 ch_nu_->valeurs().echange_espace_virtuel();
307 ch_e_int_->mettre_a_jour(temps);
313 coeff_absorption_->mettre_a_jour(temps);
317 longueur_rayo_->mettre_a_jour(temps);
326 DoubleTab& l_rayo = longueur_rayo_->valeurs();
329 l_rayo[i] = 1 / (3 * K[i]);
340 Cerr <<
"Fluide_base::initialiser()" << finl;
342 ch_mu_->initialiser(temps);
348 ch_nu_->valeurs().echange_espace_virtuel();
349 ch_nu_->changer_temps(temps);
355 Cerr <<
"Semi transparent fluid properties initialization." << finl;
356 coeff_absorption_->initialiser(temps);
360 longueur_rayo_->initialiser(temps);
365 DoubleTab& l_rayo = longueur_rayo_->valeurs();
368 l_rayo[i] = 1 / (3 * K[i]);
385 e_int_inc->associer_eqn(eq), e_int_inc->init_champ_calcule(*
this,
calculer_e_int);
386 ch_e_int_ = e_int_inc;
393 const bool res_en_T =
equation_.count(
"temperature") ? true :
false;
394 if (res_en_T)
return;
399 const DoubleTab& h = ch_h.
valeurs(), &Cp_ = ch_Cp.valeurs();
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));
411 if (ch_Cp.a_un_domaine_dis_base())
412 bCp = ch_Cp.valeur_aux_bords();
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));
426 const bool res_en_T =
equation_.count(
"temperature") ? true :
false;
427 if (res_en_T)
return;
439 const bool res_en_T = fl.
equation_.count(
"temperature") ? true :
false;
443 const DoubleTab& T_ou_h = ch_T_ou_h.
valeurs(), &Cp = ch_Cp.valeurs();
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_);
457 if (ch_Cp.a_un_domaine_dis_base())
458 bCp = ch_Cp.valeur_aux_bords();
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_);
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);
477 for (i = 0; i < Ni; i++)
478 for (n = 0; n < N; n++)
479 val(i, n) = T_ou_h(i, n0 + n);
481 for (i = 0; i < Nb; i++)
482 for (n = 0; n < N; n++)
483 bval(i, n) = bT_ou_h(i, n0 + n);
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++)
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.
DoubleTab & futur(int i=1) override
Renvoie les valeurs du champs a l'instant t+i.
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_base Cette classe est la base de la hierarchie des champs.
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
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,...
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
virtual void set_h0_T0(double h0, double T0)
void set_param(Param ¶m) 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
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()
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)
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 ¶m) const override
std::map< std::string, const Equation_base * > equation_
class Nom Une chaine de caractere pour nommer les objets de TRUST
const std::string & getString() const
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.
Helper class to factorize the readOn method of Objet_U classes.
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
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
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.
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
_SIZE_ dimension_tot(int) const override
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")