TrioCFD 1.9.9_beta
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 Milieu_base This class is the base of the (physical) medium hierarchy.
37 *
38 * It groups the (common) functionalities and physical properties
39 * of a medium. This class contains the main data fields
40 * characterizing the medium:
41 * - density (rho)
42 * - diffusivity (alpha)
43 * - conductivity (lambda)
44 * - heat capacity (Cp)
45 * - thermal expansion (beta_th)
46 *
47 * @sa Milieu Solide Fluide_Incompressible Constituant, Abstract class from which all physical media must derive., Abstract methods:, 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 maybe ??
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 associated with the medium
113 virtual void associer_equation(const Equation_base* eqn) const;
114 virtual const Equation_base& equation(const std::string& nom_inc) const;
115
116 // check validity domain of unknowns of equations associated with the medium, by default returns 1 (OK)
117 virtual int check_unknown_range() const { return 1; }
118
119 // Methods of the post-processable fields interface
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 // List of medium fields:
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_; //can be an OWN_PTR(Champ_Don_base) or a 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 // Useful for 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 // attribute useful for porosites (not porosites_champ) ... to check if useful otherwise to remove ...
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 */
class Champ_Don_base base class of Given Fields (not calculated)
class Champ_Fonc_base Base class of fields that are functions of a calculated quantity
class Champ_base This class is the base of the fields hierarchy.
Definition Champ_base.h:43
class Champs_compris_interface This class contains an interface of methods intended to manage
class Discretisation_base This class represents a spatial discretization scheme, which
class Domaine_dis_base This class is the base of the hierarchy of discretized domains.
class Equation_base The role of an equation is the calculation of one or more fields....
Milieu_base This class is the base of the (physical) medium hierarchy.
Definition Milieu_base.h:50
void ecrire(Sortie &) const
Writes a medium object to an output stream.
DoubleVect & porosite_elem()
Definition Milieu_base.h:58
virtual int est_deja_associe()
Returns 0 if the medium is already associated with a problem, 1 otherwise.
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
Assigns a name to the Objet_U. Virtual method to override.
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
Returns the heat capacity of the medium (const version).
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
Returns beta_t of the medium (const version).
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
Returns the conductivity of the medium (const version).
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 &)
Associates (assigns) a gravity field to the medium.
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
Returns the diffusivity of the medium (const version).
virtual const Champ_base & masse_volumique() const
Returns the mass density of the medium (const version).
int lire_motcle_non_standard(const Motcle &, Entree &) override
Reads non-simple-type parameters of an Objet_U from an input stream.
virtual void set_additional_params(Param &param) const
Champs_compris champs_compris_
int associer_(Objet_U &) override
Associates gravity by dynamically checking the type of the object to associate.
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()
Computes 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
Returns 1 if gravity has been initialized.
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
Returns the name of the Objet_U. Virtual method to override: returns "neant" in this implementation.
virtual const Champ_Don_base & gravite() const
Returns the gravity of the medium if it has been associated, raises an error otherwise (const version...
void creer_champ(const Motcle &motlu) override
const Champ_Don_base & get_porosites_champ() const
Definition Milieu_base.h:64
A character string (Nom) in uppercase.
Definition Motcle.h:26
class Nom: a character string for naming TRUST objects.
Definition Nom.h:31
An array of character strings (VECT(Nom)).
Definition Noms.h:26
friend class Entree
Definition Objet_U.h:71
friend class Sortie
Definition Objet_U.h:70
Objet_U()
Default constructor: assigns a unique identifier to the object (object_id_) and registers the object ...
Definition Objet_U.cpp:54
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
class Probleme_base It is a Probleme_U that is not a coupling.