TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Turbulence_paroi_scal_base.h
1/****************************************************************************
2* Copyright (c) 2025, 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 Turbulence_paroi_scal_base_included
17#define Turbulence_paroi_scal_base_included
18
19#include <Champs_compris_interface.h>
20#include <Champ_Fonc_base.h>
21#include <Champs_compris.h>
22#include <TRUSTVects.h>
23#include <TRUST_Ref.h>
24
28class Probleme_base;
29class EcrFicPartage;
30class Domaine_VF;
31
32/*! @brief Classe Turbulence_paroi_scal_base Classe de base pour la hierarchie des classes representant les modeles
33 *
34 * de calcul des grandeurs turbulentes aux voisinages des parois.
35 * La methode principale a implenter dans les classes filles est calculer_scal
36 * qui doit se charger de calculer et remplir le tableau equivalent_distance_ des distances equivalentes
37 * en paroi.
38 *
39 * @sa Classe abstraite, Methodes abstraites
40 */
42{
43 Declare_base_sans_constructeur(Turbulence_paroi_scal_base);
44public:
46
48
49 /* XXX Elie Saikali : re-mets ici et pas dans Objet_U */
50 int sauvegarder(Sortie& os) const override { return 0; }
51 int reprendre(Entree& is) override { return 1; }
52 virtual std::vector<YAML_data> data_a_sauvegarder() const { return std::vector<YAML_data>(); }
53
55 virtual void associer(const Domaine_dis_base&, const Domaine_Cl_dis_base&)=0;
56 virtual void completer() { }
57 virtual int init_lois_paroi() =0;
59 virtual void compute_nusselt() const =0;
60 virtual void imprimer_nusselt(Sortie&) const
61 {
62 Cerr << "imprimer_nusselt non code pour " << que_suis_je() << finl;
63 }
64 void imprimer_premiere_ligne_nusselt(int, const LIST(Nom)&, const Nom&) const;
65 void imprimer_nusselt_mean_only(Sortie&, int, const LIST(Nom)&, const Nom&) const;
66
67 void creer_champ(const Motcle& motlu) override;
68 const Champ_base& get_champ(const Motcle& nom) const override;
69 void get_noms_champs_postraitables(Noms& nom, Option opt = NONE) const override;
70 bool has_champ(const Motcle& nom, OBS_PTR(Champ_base) &ref_champ) const override;
71 bool has_champ(const Motcle& nom) const override;
72
73 // Ecriture dans un fichier separe de u_star, Cisaillement_paroi etc...
74 void ouvrir_fichier_partage(EcrFicPartage&, const Nom&) const;
75 void ouvrir_fichier_partage(EcrFicPartage&, const Nom&, const Nom&) const;
77
78 virtual bool use_equivalent_distance() const;
79 virtual DoubleVect& equivalent_distance_name(DoubleVect& d_eq, const Nom& nom_bord) const = 0;
80
81 inline const DoubleVects& equivalent_distance() const { return equivalent_distance_; }
82 inline const DoubleVect& equivalent_distance(int bord) const
83 {
84 assert(bord < equivalent_distance_.size());
85 return equivalent_distance_[bord];
86 }
87 inline double equivalent_distance(int bord, int face) const
88 {
89 assert(bord < equivalent_distance_.size());
90 assert(face < equivalent_distance_[bord].size());
91 return equivalent_distance_[bord](face);
92 }
93
94 inline const DoubleVects& tab_equivalent_distance() const { return equivalent_distance_; }
95 inline int tab_equivalent_distance_size() { return equivalent_distance_.size(); }
96
97 inline const DoubleVect& tab_equivalent_distance(int bord) const
98 {
99 assert(bord < equivalent_distance_.size());
100 return equivalent_distance_[bord];
101 }
102
103protected:
105 mutable int nb_impr_ = 0, nb_impr0_ = 0; // Compteur d'impression
106 int calcul_ldp_en_flux_impose_; // flag defenissant si on utilise la ldp en flux impose 0 par defaut
107 double Prdt_sur_kappa_; // Constante dans la loi de paroi
108 KOKKOS_INLINE_FUNCTION
109 double T_plus(double y_plus, double Pr, double Prdt_sur_kappa);
110
112 // tableau des distances equivalentes sur chaque bord
113 // calculees lors de l'application des lois
114 // de paroi et a utiliser dans le calcul des
115 // coefficients d'echange a la paroi
116 // En VDF contrairement au VEF, on n'a pas besoin des contributions des faces de
117 // bord virtuelles car le scalaire est au centre des elements en VDF alors
118 // qu'il est au centre des faces en VEF
119 // Comme il faut tenir compte des faces de virtuelles de bord
120 // en VEF pour l'application dans l'operateur de diffusion
121 // de equivalent_distance_, on utilise tableau par bord et
122 // chaque tableau est dimensionne au nombre de faces de
123 // bord totales (reelles+virtuelles)
124 mutable DoubleTab tab_; // Array containing the Nusset fields
125 int nb_fields_ = 6; // Number of Nusselt fields
126
127 OBS_PTR(Domaine_VF) le_dom_dis_;
129private:
130
131 Champs_compris champs_compris_;
132
133};
134
135// Loi analytique avec raccordement des comportements
136// asymptotiques de la temperature adimensionnee T+
137// avec Kader:
138// sous-couche conductrice : T+=Pr y+
139// domaine logarithmique : T+=2.12*ln(y+)+Beta
140KOKKOS_INLINE_FUNCTION
141double Turbulence_paroi_scal_base::T_plus(double y_plus, double Pr, double Prdt_sur_kappa)
142{
143 double Gamma = (0.01 * pow(Pr * y_plus, 4.)) / (1. + 5. * pow(Pr, 3.) * y_plus);
144 double Beta = pow(3.85 * pow(Pr, 1. / 3.) - 1.3, 2.) + Prdt_sur_kappa * log(Pr);
145 return Pr * y_plus * exp(-Gamma) + (Prdt_sur_kappa * log(1. + y_plus) + Beta) * exp(-1. / (Gamma + 1e-20));
146}
147
148/*! @brief Associe un modele de turbulence a l'objet.
149 *
150 * @param (Modele_turbulence_hyd_base& le_modele) le modele de turbulence hydraulique a associer a l'objet
151 */
153{
154 mon_modele_turb_scal = le_modele;
155}
156
157#endif
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 Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
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 Modele_turbulence_scal_base Cette classe represente un modele de turbulence pour une equation ...
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
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
Definition Objet_U.cpp:104
Objet_U()
Constructeur par defaut : attribue un numero d'identifiant unique a l'objet (object_id_),...
Definition Objet_U.cpp:55
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
Classe de base des flux de sortie.
Definition Sortie.h:52
Classe Turbulence_paroi_scal_base Classe de base pour la hierarchie des classes representant les mode...
OBS_PTR(Domaine_VF) le_dom_dis_
int reprendre(Entree &is) override
Reprise d'un Objet_U sur un flot d'entree Methode a surcharger.
double equivalent_distance(int bord, int face) const
int sauvegarder(Sortie &os) const override
Sauvegarde d'un Objet_U sur un flot de sortie Methode a surcharger.
KOKKOS_INLINE_FUNCTION double T_plus(double y_plus, double Pr, double Prdt_sur_kappa)
virtual bool use_equivalent_distance() const
Give a boolean indicating if we need to use equivant distance by default we consider that we use the ...
void imprimer_premiere_ligne_nusselt(int, const LIST(Nom)&, const Nom &) const
Writes header line for Nusselt number and heat transfer statistics file.
static void typer_lire_turbulence_paroi_scal(OWN_PTR(Turbulence_paroi_scal_base)&, const Modele_turbulence_scal_base &, Entree &)
Lit les caracteristques de la loi de parois a partir d'un flot d'entree.
virtual std::vector< YAML_data > data_a_sauvegarder() const
void creer_champ(const Motcle &motlu) override
virtual DoubleVect & equivalent_distance_name(DoubleVect &d_eq, const Nom &nom_bord) const =0
const DoubleVect & tab_equivalent_distance(int bord) const
OBS_PTR(Domaine_Cl_dis_base) le_dom_Cl_dis_
const Champ_base & get_champ(const Motcle &nom) const override
OBS_PTR(Modele_turbulence_scal_base) mon_modele_turb_scal
virtual int init_lois_paroi()=0
void imprimer_nusselt_mean_only(Sortie &, int, const LIST(Nom)&, const Nom &) const
Prints mean Nusselt number and heat transfer statistics to a file for specified boundaries.
const DoubleVects & tab_equivalent_distance() const
void associer_modele(const Modele_turbulence_scal_base &)
Associe un modele de turbulence a l'objet.
const DoubleVect & equivalent_distance(int bord) const
const DoubleVects & equivalent_distance() const
virtual int calculer_scal(Champ_Fonc_base &)=0
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
virtual void compute_nusselt() const =0
bool has_champ(const Motcle &nom, OBS_PTR(Champ_base) &ref_champ) const override
const int & get_flag_calcul_ldp_en_flux_impose() const
virtual void imprimer_nusselt(Sortie &) const
virtual void associer(const Domaine_dis_base &, const Domaine_Cl_dis_base &)=0
void ouvrir_fichier_partage(EcrFicPartage &, const Nom &) const
Ouverture/creation d'un fichier d'impression de Face, d_eq, Nu local, h.