TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Eq_couch_lim.h
1/****************************************************************************
2* Copyright (c) 2015 - 2016, 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 Eq_couch_lim_included
17#define Eq_couch_lim_included
18
19#include <Diffu_totale_base.h>
20#include <TRUST_Deriv.h>
21#include <TRUSTVect.h>
22#include <TRUST_Ref.h>
23#include <Motcle.h>
24
25class Milieu_base;
26
27/*! @brief Classe Eq_couch_lim Classe resolvant les equations de couche limite simplifiees necessaires
28 *
29 * a l'utilisation des lois de parois de type TBLE (Thin Boundary
30 * Layer Equations)
31 *
32 *
33 *
34 * @sa Macro qui transforme tous les anciens DoubleTab en ArrOfDouble, ATTENTION : cette macro n'est valable que si il existe une dimension commune, a tous les anciens DoubleTab, ici N_comp.
35 */
36#define tabdouble(__tab__,__i__,__j__) __tab__[__i__+(__j__)*N_comp]
37
38class Eq_couch_lim : public Objet_U
39{
40 Declare_instanciable_sans_constructeur_ni_destructeur(Eq_couch_lim);
41
42public :
43
45 ~Eq_couch_lim() override;
46
47 void initialiser(int, int, double, double, int, int) ;
48
49 void aller_au_temps(double) ;
50 void aller_jusqu_a_convergence(int, double) ;
51
52
53 void mailler_fin() ;
54
55 void set_F(int j, double f)
56 {
57 for(int i=0 ; i<N+1 ; i++)
58 {
59 tabdouble(F,j,i) = f;
60 }
61 };
62 void set_F(int j, int i, double f)
63 {
64 tabdouble(F,j,i) = f;
65 };
66 double get_F0(int j) const
67 {
68 return tabdouble(F,j,0);
69 };
70 double get_F(int j, int i) const
71 {
72 return tabdouble(F,j,i);
73 };
74 void set_y0(double y)
75 {
76 y0 = y;
77 };
78 void set_yn(double y)
79 {
80 yn = y;
81 };
82 void set_u_y0(int j, double u)
83 {
84 tabdouble(Unp1,j,0) = u;
85 };
86
87 void set_u_yn(int j, double u)
88 {
89 tabdouble(Unp1,j,N) = u;
90 };
91 void set_nu_t_yn(double nu_t)
92 {
93 nu_t_yn = nu_t;
94 };
95 void set_Uinit_lin(int comp, double f1, double f2)
96 {
97 //Initialisation de la vitesse
98 for (int i = 0 ; i<N+1 ; i++)
99 {
100 tabdouble(Un_old,comp,i) = (f2 - f1)*i/N + f1;
101 tabdouble(Unp1,comp,i) = (f2 - f1)*i/N + f1;
102 }
103 //Initialisation du frottement
104 utau_old = (f2 - f1)/N;
105 //utau_old = 1.;
106 };
107
108 void set_Uinit(int comp, int i, double val)
109 {
110 //Initialisation de la vitesse
111 tabdouble(Un_old,comp,i) = tabdouble(Unp1,comp,i) = val;
112 };
113
114 void set_diffu(Motcle modele)
115 {
116 a.typer(modele);
117 a->associer_eqn(*this);
118 };
119
120 void set_dt(double delta_t)
121 {
122 dt = delta_t;
123 };
124
125 void set_Un_old(int j, int i, double u)
126 {
127 tabdouble(Un_old,j,i) = u;
128 };
129 void set_Unp1(int j, int i, double u)
130 {
131 tabdouble(Unp1,j,i) = u;
132 };
133
134
135 void set_v(int i, double u)
136 {
137 v[i] = u;
138 };
139
140 int get_it()
141 {
142 return it;
143 };
144 int get_N()
145 {
146 return N;
147 };
149 {
150 return N_comp;
151 };
152 double get_y0()
153 {
154 return y0;
155 };
156 double get_yn()
157 {
158 return yn;
159 };
160 double get_nu_t_yn()
161 {
162 return nu_t_yn;
163 };
165 {
166 return nu_t_dyn;
167 };
168
169 double get_visco_tot(int i) const
170 {
171 return visco_tot[i];
172 };
173 double get_nut(int i)
174 {
175 Diffu_totale_base& le_a = a.valeur();
176 return le_a.calculer_a_local(i)-le_a.calculer_a_local(0);
177 };
178
179 double get_D(int i)
180 {
181 Diffu_totale_base& le_a = a.valeur();
182 return le_a.calculer_D_local(i);
183 };
184
185 double get_Unp1(int j, int i)
186 {
187 return tabdouble(Unp1,j,i);
188 };
189 double get_Un_old(int j, int i)
190 {
191 return tabdouble(Un_old,j,i);
192 };
193 double get_v(int i)
194 {
195 return v[i];
196 };
197 double get_cis(int j)
198 {
199 return cis[j];
200 };
202 {
203 return utau_old;
204 };
205 double get_y(int i)
206 {
207 return y_[i];
208 };
209 double get_yc(int i)
210 {
211 return yc[i];
212 };
213
214 double get_Unp1(int j, int i) const
215 {
216 return tabdouble(Unp1,j,i);
217 };
218 double get_Un_old(int j, int i) const
219 {
220 return tabdouble(Un_old,j,i);
221 };
222 double get_v(int i) const
223 {
224 return v[i];
225 };
226 double get_cis(int j) const
227 {
228 return cis[j];
229 };
230 double get_utau_old() const
231 {
232 return utau_old;
233 };
234 double get_utau() const
235 {
236 return utau;
237 };
238 double get_y(int i) const
239 {
240 return y_[i];
241 };
242 double get_yc(int i) const
243 {
244 return yc[i];
245 };
246
248 {
249 return a.valeur();
250 };
251
253 {
254 milieu = m;
255 };
257 {
258 return milieu.valeur();
259 };
260
261
262private :
263
264 //Les DoubleTab et DoubleVect ont ete remplaces par des
265 //ArrOfDouble par souci d'economie memoire.
266 //Voir la macro tabdouble pour la transformation des
267 //DoubleTab en ArrOfDouble.
268
269 int it, max_it;
270 int N, N_comp ; //Nombre de points du maillage fin 1D
271 int nu_t_dyn;
272
273 OWN_PTR(Diffu_totale_base) a ; //diffusivite totale
274
275 ArrOfDouble F ; //second membre
276 ArrOfDouble Unp1, Un_old ; // inconnues et champs moyens
277
278 ArrOfDouble v; //vitesse verticale
279 ArrOfDouble cis; //gradient a la paroi
280 ArrOfDouble aa, bb, cc, dd, visco_tot;
281 ArrOfDouble y_, yc;
282
283 double dt, y0, yn, nu_t_yn ;
284 double utau, utau_old;
285 double facteur;
286 double eps;
287
288 OBS_PTR(Milieu_base) milieu;
289
290
291};
292
293
294#endif
295
296
297
Classe Diffu_totale_base Classe abstraite calculant la diffusivite totale (somme diffusivite.
virtual double calculer_D_local(int ind)=0
virtual double calculer_a_local(int ind)=0
void initialiser(int, int, double, double, int, int)
double get_Un_old(int j, int i) const
double get_Unp1(int j, int i) const
double get_nut(int i)
void set_F(int j, int i, double f)
void set_u_y0(int j, double u)
double get_nu_t_yn()
double get_D(int i)
void set_u_yn(int j, double u)
~Eq_couch_lim() override
void set_Unp1(int j, int i, double u)
void set_Un_old(int j, int i, double u)
double get_yn()
double get_visco_tot(int i) const
double get_v(int i)
double get_y(int i) const
double get_cis(int j)
double get_yc(int i) const
double get_cis(int j) const
double get_yc(int i)
double get_y(int i)
void set_v(int i, double u)
void aller_au_temps(double)
void set_Uinit_lin(int comp, double f1, double f2)
double get_F0(int j) const
Diffu_totale_base & get_diffu()
void set_F(int j, double f)
void set_diffu(Motcle modele)
void set_nu_t_yn(double nu_t)
double get_F(int j, int i) const
double get_Unp1(int j, int i)
double get_nu_t_dyn()
double get_utau_old()
void associer_milieu(const Milieu_base &m)
void set_yn(double y)
void aller_jusqu_a_convergence(int, double)
double get_v(int i) const
void set_y0(double y)
Milieu_base & get_milieu()
void set_dt(double delta_t)
void set_Uinit(int comp, int i, double val)
double get_utau_old() const
double get_y0()
double get_Un_old(int j, int i)
double get_utau() const
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
Objet_U()
Constructeur par defaut : attribue un numero d'identifiant unique a l'objet (object_id_),...
Definition Objet_U.cpp:55