TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Milieu_base.h
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#ifndef Milieu_base_included
17#define Milieu_base_included
18
19#include <Champs_compris_interface.h>
20#include <Porosites_champ.h>
21#include <Interface_blocs.h>
22#include <Champ_Inc_base.h>
23#include <Champs_compris.h>
24
25#include <TRUST_Ref.h>
26
27
28
31class Champ_Don_base;
32class Probleme_base;
33class Motcle;
34class Param;
35
36/*! @brief classe Milieu_base Cette classe est la base de la hierarchie des milieux (physiques)
37 *
38 * Elle regroupe les fonctionnalites (communes) et les proprietes physiques
39 * d'un milieu. Cette classe contient les principaux champs donnees
40 * caracterisant le milieu:
41 * - masse volumique (rho)
42 * - diffusivite (alpha)
43 * - conductivite (lambda)
44 * - capacite calorifique (Cp)
45 * - dilatabilite (beta_th)
46 *
47 * @sa Milieu Solide Fluide_Incompressible Constituant, Classe abstraite dont tous les milieux physiques doivent deriver., Methodes abstraites:, void tester_champs_lus(), void mettre_a_jour(double temps), void initialiser()
48 */
50{
51 Declare_base(Milieu_base);
52public:
53 int lire_motcle_non_standard(const Motcle&, Entree&) override;
54 int associer_(Objet_U&) override;
55 void nommer(const Nom&) override;
56 const Nom& le_nom() const override;
57
58 inline DoubleVect& porosite_elem() { return static_cast<DoubleVect&>(ch_porosites_->valeurs()); }
59 inline const DoubleVect& porosite_elem() const { return static_cast<const DoubleVect&>(ch_porosites_->valeurs()); }
60 inline double porosite_elem(const int i) const { return ch_porosites_->valeurs()(i,0); }
61 bool has_porosites() const { return bool(ch_porosites_); }
62 inline DoubleVect& porosite_face() { return porosite_face_; }
63 inline const DoubleVect& porosite_face() const { return porosite_face_; }
64 inline const Champ_Don_base& get_porosites_champ() const { return ch_porosites_; }
65 inline double porosite_face(const int i) const { return porosite_face_[i]; }
66 inline const DoubleVect& section_passage_face() const { return section_passage_face_; }
67 inline double section_passage_face(int i) const { return section_passage_face_[i]; }
68
69 // TODO : FIXME : DoubleVect peut etre ??
70 inline DoubleTab& diametre_hydraulique_elem() { return ch_diametre_hyd_->valeurs(); }
71 inline const DoubleTab& diametre_hydraulique_elem() const { return ch_diametre_hyd_->valeurs(); }
73 inline const DoubleVect& diametre_hydraulique_face() const { return diametre_hydraulique_face_; }
74 inline double diametre_hydraulique_face(int i) const { return diametre_hydraulique_face_[i]; }
75
76 virtual int est_deja_associe();
77 virtual void set_param(Param& param) const override;
78 virtual void preparer_calcul();
79 virtual void verifier_coherence_champs(int& err, Nom& message);
80 virtual void creer_champs_non_lus();
81 virtual void discretiser(const Probleme_base& pb, const Discretisation_base& dis);
82 virtual bool is_rayo_semi_transp() const { return false; }
83 virtual bool is_rayo_transp() const { return false; }
84 virtual void mettre_a_jour(double temps);
85 virtual bool initTimeStep(double dt) { return true; }
86 virtual void abortTimeStep();
87 virtual void resetTime(double time);
88 virtual int initialiser(const double temps);
89 virtual void associer_gravite(const Champ_Don_base&);
90 virtual const Champ_base& masse_volumique() const;
91 virtual Champ_base& masse_volumique();
92 bool has_masse_volumique() const { return bool(ch_rho_); }
93 virtual const Champ_Don_base& diffusivite() const;
94 virtual Champ_Don_base& diffusivite();
95 bool has_diffusivite() const { return bool(ch_alpha_); }
96 virtual const Champ_Don_base& diffusivite_fois_rho() const;
98 virtual const Champ_Don_base& conductivite() const;
100 bool has_conductivite() const { return bool(ch_lambda_); }
101 virtual const Champ_Don_base& capacite_calorifique() const;
103 bool has_capacite_calorifique() const { return bool(ch_Cp_); }
104 virtual const Champ_Don_base& beta_t() const;
105 virtual Champ_Don_base& beta_t();
106 bool has_beta_t() const { return bool(ch_beta_th_); }
107 virtual const Champ_Don_base& gravite() const;
108 virtual Champ_Don_base& gravite();
109 virtual int a_gravite() const;
110 virtual void update_rho_cp(double temps);
111
112 // equations associees au milieu
113 virtual void associer_equation(const Equation_base* eqn) const;
114 virtual const Equation_base& equation(const std::string& nom_inc) const;
115
116 // controle du domaine de validite des inconnues des equations associees au milieu par defaut renvoie 1 (OK)
117 virtual int check_unknown_range() const { return 1; }
118
119 //Methodes de l interface des champs postraitables
120 void creer_champ(const Motcle& motlu) override { }
121 const Champ_base& get_champ(const Motcle& nom) const override;
122 void get_noms_champs_postraitables(Noms& nom,Option opt=NONE) const override;
123 bool has_champ(const Motcle& nom, OBS_PTR(Champ_base) &ref_champ) const override;
124 bool has_champ(const Motcle& nom) const override;
125
126 const bool& has_hydr_diam() { return has_hydr_diam_; }
127 void set_id_composite(const int i);
129
130 // Liste des champs des milieux:
131 const LIST(OBS_PTR(Champ_Don_base))& champs_don() const { return champs_don_; }
132
133 virtual bool is_dilatable() const { return false; }
134
135protected:
137 OWN_PTR(Champ_base) ch_rho_; //peut etre un OWN_PTR(Champ_Don_base) ou un Champ_Inc
140 Champs_compris champs_compris_;
144
145 mutable std::map<std::string, const Equation_base *> equation_;
146 virtual void calculer_alpha();
147 void ecrire(Sortie& ) const;
148 void creer_alpha();
149 //void creer_derivee_rho();
150
151 // Utile pour F5
152 void discretiser_porosite(const Probleme_base& pb, const Discretisation_base& dis);
154 virtual void set_additional_params(Param& param) const;
155 virtual void calculate_face_porosity();
156 virtual void calculate_face_hydr_diam();
157 void mettre_a_jour_porosite(double temps);
159 int initialiser_porosite(const double temps);
160 void check_gravity_vector() const;
161
162private:
163 // attribue utile pour porosites (pas porosites_champ) ... a voir si utile sinon a virer ...
164 Porosites porosites_;
165 bool is_user_porosites_ = false, is_field_porosites_ = false, has_hydr_diam_ = false;
166 void verifie_champ_porosites();
167 void nettoie_champ_porosites();
168 const bool& is_user_porosites() { return is_user_porosites_; }
169 const bool& is_field_porosites() { return is_field_porosites_; }
170
171 mutable int deja_associe_ = 0;
172 bool via_associer_ = false;
173 void warn_old_syntax();
174 OBS_PTR(Champ_Don_base) g_via_associer_;
175};
176
177#endif /* Milieu_base_included */
classe Champ_Don_base classe de base des Champs donnes (non calcules)
classe Champ_Fonc_base Classe de base des champs qui sont fonction d'une grandeur calculee
classe Champ_base Cette classe est la base de la hierarchie des champs.
Definition Champ_base.h:43
classe Champs_compris_interface Cette classe contient une interface de methodes destinees a gerer
classe Discretisation_base Cette classe represente un schema de discretisation en espace,...
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
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.
DoubleVect & porosite_elem()
Definition Milieu_base.h:58
virtual int est_deja_associe()
Renvoie 0 si le milieu est deja associe a un probleme, 1 sinon.
virtual void associer_equation(const Equation_base *eqn) const
bool has_masse_volumique() const
Definition Milieu_base.h:92
const LIST(OBS_PTR(Champ_Don_base)) &champs_don() const
DoubleVect diametre_hydraulique_face_
bool has_conductivite() const
virtual int initialiser(const double temps)
virtual bool is_dilatable() const
void nommer(const Nom &) override
Donne un nom a l'Objet_U Methode virtuelle a surcharger.
LIST(OBS_PTR(Champ_Don_base)) champs_don_
void creer_alpha()
virtual void creer_champs_non_lus()
double porosite_face(const int i) const
Definition Milieu_base.h:65
virtual bool is_rayo_transp() const
Definition Milieu_base.h:83
void discretiser_porosite(const Probleme_base &pb, const Discretisation_base &dis)
virtual const Equation_base & equation(const std::string &nom_inc) const
virtual void mettre_a_jour(double temps)
virtual void resetTime(double time)
virtual void preparer_calcul()
virtual void calculate_face_porosity()
double diametre_hydraulique_face(int i) const
Definition Milieu_base.h:74
double section_passage_face(int i) const
Definition Milieu_base.h:67
virtual const Champ_Don_base & capacite_calorifique() const
Renvoie la capacite calorifique du milieu.
virtual void abortTimeStep()
virtual void update_rho_cp(double temps)
bool has_capacite_calorifique() const
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
virtual bool initTimeStep(double dt)
Definition Milieu_base.h:85
int initialiser_porosite(const double temps)
bool has_champ(const Motcle &nom, OBS_PTR(Champ_base) &ref_champ) const override
const DoubleVect & porosite_elem() const
Definition Milieu_base.h:59
OBS_PTR(Domaine_dis_base) zdb_
virtual void discretiser(const Probleme_base &pb, const Discretisation_base &dis)
OWN_PTR(Champ_base) ch_rho_
virtual void calculate_face_hydr_diam()
const Champ_base & get_champ(const Motcle &nom) const override
virtual const Champ_Don_base & diffusivite_fois_rho() const
DoubleVect & diametre_hydraulique_face()
Definition Milieu_base.h:72
virtual const Champ_Don_base & beta_t() const
Renvoie beta_t du milieu.
DoubleVect porosite_face_
const DoubleVect & diametre_hydraulique_face() const
Definition Milieu_base.h:73
void set_id_composite(const int i)
virtual const Champ_Don_base & conductivite() const
Renvoie la conductivite du milieu.
bool has_porosites() const
Definition Milieu_base.h:61
void discretiser_diametre_hydro(const Probleme_base &pb, const Discretisation_base &dis)
virtual void associer_gravite(const Champ_Don_base &)
Associe (affecte) un champ de gravite au milieu.
virtual int check_unknown_range() const
virtual void verifier_coherence_champs(int &err, Nom &message)
virtual bool is_rayo_semi_transp() const
Definition Milieu_base.h:82
virtual const Champ_Don_base & diffusivite() const
Renvoie la diffusivite du milieu.
virtual const Champ_base & masse_volumique() const
Renvoie la masse volumique du milieu.
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 set_additional_params(Param &param) const
Champs_compris champs_compris_
int associer_(Objet_U &) override
Associe la gravite en controlant dynamiquement le type de l'objet a associer.
const DoubleTab & diametre_hydraulique_elem() const
Definition Milieu_base.h:71
DoubleTab & diametre_hydraulique_elem()
Definition Milieu_base.h:70
void check_gravity_vector() const
const DoubleVect & section_passage_face() const
Definition Milieu_base.h:66
virtual void set_param(Param &param) const override
virtual void calculer_alpha()
Calcul de alpha=lambda/(rho*Cp).
void mettre_a_jour_porosite(double temps)
DoubleVect & porosite_face()
Definition Milieu_base.h:62
double porosite_elem(const int i) const
Definition Milieu_base.h:60
std::map< std::string, const Equation_base * > equation_
DoubleVect section_passage_face_
const DoubleVect & porosite_face() const
Definition Milieu_base.h:63
virtual int a_gravite() const
Renvoie 1 si la gravite a ete initialisee.
bool has_beta_t() const
void fill_section_passage_face()
bool has_diffusivite() const
Definition Milieu_base.h:95
const bool & has_hydr_diam()
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
virtual const Champ_Don_base & gravite() const
Renvoie la gravite du milieu si elle a ete associe provoque une erreur sinon.
void creer_champ(const Motcle &motlu) override
const Champ_Don_base & get_porosites_champ() const
Definition Milieu_base.h:64
Une chaine de caractere (Nom) en majuscules.
Definition Motcle.h:26
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
friend class Sortie
Definition Objet_U.h:75
Objet_U()
Constructeur par defaut : attribue un numero d'identifiant unique a l'objet (object_id_),...
Definition Objet_U.cpp:55
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.