TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Champ_front_recyclage.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 Champ_front_recyclage_included
17#define Champ_front_recyclage_included
18
19#include <Ch_front_var_instationnaire_dep.h>
20#include <TRUSTArrays.h>
21#include <TRUSTTabs.h>
22#include <TRUST_Ref.h>
23#include <Parser_U.h>
24#include <Noms.h>
25
28class Champ_Inc_base;
29class Front_dis_base;
30class Equation_base;
31class Milieu_base;
32class Param;
33
34/*! @brief classe Champ_front_recyclage
35 *
36 * delt_dist delt_dist
37 * pb1 <----------> pb2 <--------> pb
38 * ch_fr2 ch_fr
39 * _____________________ ____________________________ ____________________________
40 * | | | | | | | |
41 * | dom1 | | | dom2 | | | dom |
42 * | ch1 | | |bord2 | |bord | ch |
43 * |_________________|___| |____________________________| |________|__________________|
44 * plan1 plan
45 *
46 * Fig. 1 Fig. 2
47 *
48 * Cette classe a pour objectif d evaluer les valeurs d un champ_front (ch_fr2) sur le bord d un domaine (bord2)
49 * en exploitant les valeurs d un champ 1 (ch1 dit champ evaluateur) evaluees dans un plan (plan1) distant de
50 * delt_dist de bord2 (Fig. 1).
51 *
52 */
53
54// Les problemes pb2 et pb1, les domaines dom2 et dom1 ainsi que les champs 2 et 1 peuvent etre identiques
55// (pb2=pb1=pb dom2=dom1=dom et ch2=ch1=ch)
56// auquel cas les valeurs du champ front (ch_fr) sur le bord (bord) seront construites
57// a partir des valeurs du champ ch (qui devient le champ evaluateur) calculees dans le plan (plan)
58// distant de delt_dist du bord (Fig. 2).
59
60// L expression des valeurs attribuees au champ front sur le bord2 (ou bord) ont pour expression :
61// val_ch_fr2(dir) = ampli_moy_imposee(dir)*moyenne_imposee(dir)
62// + ampli_fluct(dir)*(val_evaluateur(dir)-ampli_moy_recyclee(dir)*moyenne_recyclee(dir))
63//
64// val_ch_fr2 : valeurs prises par le_champ_front ch_fr2 (ou ch_fr)
65// moyenne_imposee : moyenne de le_champ_front (peut etre impose analytiquement ou lue dans un fichier)
66// val_evaluateur : valeurs du champ_evaluateur dans le plan1 (ou plan) evaluees par interpolation
67// moyenne_recylee : moyenne du champ_evaluateur (peut etre evaluee par moyenne surfacique ou provenir d un traitement_particulier)
68// ampli_moy_imposee : facteur d amplification de la la moyenne imposee
69// ampli_moy_recyclee : facteur d amplification de la la moyenne recyclee
70// ampli_fluct : facteur d amplification de la fluctuation recyclee
71// dir : direction
72
73// Syntaxe utilisateur :
74// Champ_front_recyclage
75// {
76// pb_champ_evaluateur nom_pb1 nom_inco1 nb_compo1
77// [ moyenne_imposee methode_moy [fichier] nom_fich1 (nom_fich2) ]
78// [ moyenne_recyclee methode_recyc [fichier] nom_fich1 (nom_fich2) ]
79// [ direction_anisotrope direction ]
80// [ distance_plan dist0 dist1 (dist2) ]
81// [ ampli_fluctuation nb_comp ampli_fluc0 ampli_fluc1 (ampli_fluc2) ]
82// [ ampli_moyenne_imposee nb_comp ampli_moy0 ampli_moy1 (ampli_moy2) ]
83// [ ampli_moyenne_recyclee nb_comp ampli_recy0 ampli_recy1 (ampli_recy2) ]
84// }
85//
86// methode_moy = 1 (keyword profil)
87// pour imposer un profil analytique
88// methode_moy = 2 (keyword interpolation) :
89// lecture dans un fichier et construction d un champ moyen
90// en realisant une interpolation des donnees lues.
91// La moyenne est construite pour une direction privilegiee
92// (direction_anisotrope) et vaut 0 pour les autres directions
93// methode_moy = 3 (keyword connexion_approchee)
94// lecture dans un fichier et on retient la valeur de la
95// variable lue par connexion avec le point le plus proche
96// de la face de bord consideree
97// methode_moy = 4 (keyword connexion_exacte)
98// lecture dans un fichier geometrie des coordonnees de points
99// situes dans le plan d evaluation et lecture dans un fichier
100// distinct des valeurs moyennes. Les valeurs moyennes lues
101// sont stockees quand la correspondance exacte entre les points
102// en vis a vis est verifiee.
103// methode_moy = 5 (keyword logarithmique)
104// construction de la moyenne par une loi de paroi (logarithmique)
105//
106//
107// methode_moy = 2 et methode_moy = 3 :
108// un fichier unique a lire contennant positions et valeurs de la variable
109// methode_moy = 4 : deux fichiers a lire : le premier contenant les valeurs de la variable
110// et le second contenant les positions
111//
112//
113// methode_recyc = 1 (keyword surfacique)
114// moyenne surfacique des valeurs recyclees
115// (la moyenne est faite sur le bord2 ou l on recupere les valeurs)
116// methode_recyc = 2 (keyword interpolation) :
117// voir methode_moy = 2
118// methode_recyc = 3 (keyword connexion_approchee)
119// voir methode_moy = 3
120// methode_recyc = 4 (keyword connexion_exacte)
121// voir methode_moy = 4
122//
123// methode_recyc = 2 et methode_moy = 3 :
124// un fichier unique a lire contennant positions et valeurs de la variable
125// methode_recyc = 4 : deux fichiers a lire : le premier contenant les valeurs de la variable
126// et le second contenant les positions
127//
128//////////////////////////////////////////////////////////////////////////////
129
131{
132
133 Declare_instanciable_sans_constructeur(Champ_front_recyclage);
134
135public:
136
140 void calcul_moyenne_imposee(const DoubleTab& tab,double temps);
141 void calcul_moyenne_recyclee(const DoubleTab& tab,double temps);
142 void initialiser_moyenne_imposee(DoubleTab& moyenne);
143 void initialiser_moyenne_recyclee(DoubleTab& moyenne);
144 void associer_champ_evaluateur(const Nom&, const Motcle&);
145 int initialiser(double temps, const Champ_Inc_base& inco) override;
146 void mettre_a_jour(double temps) override;
147
148 static void get_coord_faces(const Frontiere_dis_base& fr_vf,
149 DoubleTab& coords,
150 const DoubleVect& delt_dist);
151
152 void lire_fichier_format1(DoubleTab& moyenne,
153 const Frontiere_dis_base& fr_vf,
154 const Nom& nom_fich);
155 void lire_fichier_format2(DoubleTab& moyenne,
156 const Frontiere_dis_base& fr_vf,
157 const Nom& nom_fich);
158 void lire_fichier_format3(DoubleTab& moyenne,
159 const Frontiere_dis_base& fr_vf,
160 const Nom& nom_fich1, const Nom& nom_fich2);
161 double UPb(double y,Nom nom_fich);
162
163protected :
164 void set_param(Param& param) const override;
165 int lire_motcle_non_standard(const Motcle&, Entree&) override;
166
167 OBS_PTR(Champ_Inc_base) l_inconnue1; //Reference au champ inconnu (ch1) qui sert d evaluateur
168 //dans le plan ou l on recupere les valeurs
169
170 DoubleVect delt_dist; //vecteur distance entre bord2 et le plan (plan1)
171 //de calcul des valeurs de ch1
172
173 Nom nom_pb1; //nom du probleme evaluateur (pb1)
174
175 Motcle nom_inco1; //nom du champ inconnu evaluateur (ch1)
176
177 DoubleTab moyenne_imposee_; //Voir description ci dessus
179 DoubleVect ampli_fluct_;
182
183 int methode_moy_impos_; //methode pour evaluer moyenne_imposee_
184 int methode_moy_recycl_; //methode pour evaluer moyenne_recyclee_
185
186 Nom fich_impos_,fich_recycl_; //Noms de fichiers eventuellemment utilises
187 Nom fich_maillage_; //pour evaluer moyenne_imposee_ et moyenne_recyclee_
188
189 int ndir; //direction d anisotropie
190
191 VECT(Parser_U) profil_2; //Parser et expressions pour imposer une moyenne analytique
193
194 double u_tau,diametre,visco_cin; //parametres pour imposer une moyenne en profil log
195
196 // Ensemble des points ou il faut evaluer inconnue1 (uniquement des coordonnees
197 // incluses dans le domaine1 local), classees en fonction du processeur a qui
198 // il faut envoyer le resultat de l'evaluation. Donc attention, on n'a pas forcement
199 // egalite entre l'inconnue locale sur la face et l'inconnue distante sur la face si
200 // les maillages surfaciques des frontieres locales et distantes ne sont pas identiques...
202
203 // Pour chaque point ou il faut evaluer inconnue1, indice de l'element dans lequel
204 // se trouve ce point (toujours par processeur destination)
206
207 // A la reception des valeurs, indices des faces de bord ou on doit stocker le
208 // resultat recu de chaque processeur
210};
211
212#endif
classe Ch_front_var_instationnaire_dep Cette classe abstraite represente un champ sur une frontiere,
Classe Champ_Inc_base.
void calcul_moyenne_recyclee(const DoubleTab &tab, double temps)
void calcul_moyenne_imposee(const DoubleTab &tab, double temps)
void initialiser_moyenne_imposee(DoubleTab &moyenne)
int initialiser(double temps, const Champ_Inc_base &inco) override
Initialisation en debut de calcul.
void lire_fichier_format2(DoubleTab &moyenne, const Frontiere_dis_base &fr_vf, const Nom &nom_fich)
int lire_info_moyenne_recyclee(Entree &is)
void associer_champ_evaluateur(const Nom &, const Motcle &)
void lire_fichier_format1(DoubleTab &moyenne, const Frontiere_dis_base &fr_vf, const Nom &nom_fich)
void initialiser_moyenne_recyclee(DoubleTab &moyenne)
int lire_info_moyenne_imposee(Entree &is)
VECT(Parser_U) profil_2
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.
OBS_PTR(Champ_Inc_base) l_inconnue1
void set_param(Param &param) const override
void mettre_a_jour(double temps) override
NE FAIT RIEN, a surcharger.
double UPb(double y, Nom nom_fich)
static void get_coord_faces(const Frontiere_dis_base &fr_vf, DoubleTab &coords, const DoubleVect &delt_dist)
void lire_fichier_format3(DoubleTab &moyenne, const Frontiere_dis_base &fr_vf, const Nom &nom_fich1, const Nom &nom_fich2)
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
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....
classe Frontiere_dis_base Classe representant une frontiere discretisee.
classe Milieu_base Cette classe est la base de la hierarchie des milieux (physiques)
Definition Milieu_base.h:50
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
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
classe Parser_U Version de la classe Parser, derivant de Objet_U.
Definition Parser_U.h:32