TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Modele_turbulence_hyd_LES_DSGS_VDF.cpp
1/****************************************************************************
2* Copyright (c) 2024, 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
17#include <Modele_turbulence_hyd_LES_DSGS_VDF.h>
18#include <Champ_Fonc_P0_VDF.h>
19#include <Schema_Temps_base.h>
20#include <Champ_Face_VDF.h>
21#include <Domaine_Cl_VDF.h>
22#include <Equation_base.h>
23#include <Domaine_VDF.h>
24#include <TRUSTTrav.h>
25#include <Debog.h>
26
27Implemente_instanciable(Modele_turbulence_hyd_LES_DSGS_VDF, "Modele_turbulence_hyd_sous_maille_DSGS_VDF", Modele_turbulence_hyd_LES_Smago_VDF);
28
30{
31 return s << que_suis_je() << " " << le_nom();
32}
33
35{
37}
38
40{
41 Modele_turbulence_hyd_LES_Smago_VDF::associer(domaine_dis, domaine_Cl_dis);
42
43 Cerr << "Discretisation de coeff_field" << finl;
44 coeff_field.typer("Champ_Fonc_P0_VDF");
45 Champ_Fonc_P0_VDF& coeff = ref_cast(Champ_Fonc_P0_VDF, coeff_field.valeur());
46 coeff.associer_domaine_dis_base(le_dom_VF_.valeur());
47 coeff.nommer("dynamic_coefficient");
48 coeff.fixer_nb_comp(1);
49 coeff.fixer_nb_valeurs_nodales(le_dom_VF_->nb_elem());
50 coeff.fixer_unite("adim");
51 coeff.changer_temps(0.);
52
53 model_coeff.ref(coeff_field->valeurs());
54 champs_compris_.ajoute_champ(coeff_field);
55 // model_coeff.resize(le_dom_VDF->nb_elem_tot());
56}
57
59{
60 double temps = mon_equation_->inconnue().temps();
61 DoubleTab& visco_turb = la_viscosite_turbulente_->valeurs();
62 int nb_elem = ref_cast(Domaine_VDF, le_dom_VF_.valeur()).nb_elem();
63 int nb_elem_tot = ref_cast(Domaine_VDF, le_dom_VF_.valeur()).nb_elem_tot();
64
65 DoubleTrav Sij_test_scale(nb_elem_tot, dimension, dimension);
66 DoubleTrav Sij_grid_scale(nb_elem_tot, dimension, dimension);
67 DoubleTrav cell_cent_vel(nb_elem_tot, dimension);
68 DoubleTrav filt_vel(nb_elem_tot, dimension);
69 DoubleTrav Lij(nb_elem_tot, dimension, dimension);
70 DoubleTrav Mij(nb_elem_tot, dimension, dimension);
71
72 SMA_barre_.resize(nb_elem_tot);
73
74 calculer_cell_cent_vel(cell_cent_vel);
75 calculer_filter_field(cell_cent_vel, filt_vel);
76 calculer_Lij(cell_cent_vel, filt_vel, Lij);
77 calculer_Sij(cell_cent_vel, Sij_grid_scale);
78 calculer_Sij(filt_vel, Sij_test_scale);
79 calculer_Mij(Sij_grid_scale, Sij_test_scale, Mij);
81
83
84 if (visco_turb.size() != nb_elem)
85 {
86 Cerr << "erreur dans la taille du DoubleTab valeurs de la viscosite" << finl;
88 }
89
90 Debog::verifier("Modele_turbulence_hyd_LES_DSGS_VDF::calculer_viscosite_turbulente visco_turb 0", visco_turb);
91
92 for (int elem = 0; elem < nb_elem; elem++)
93 visco_turb[elem] = model_coeff[elem] * l_[elem] * l_[elem] * sqrt(SMA_barre_[elem]);
94
95 Debog::verifier("Modele_turbulence_hyd_LES_DSGS_VDF::calculer_viscosite_turbulente visco_turb 1", visco_turb);
96
97 coeff_field->changer_temps(temps);
98
99 la_viscosite_turbulente_->changer_temps(temps);
100 return la_viscosite_turbulente_;
101}
102
104{
105 const DoubleTab& vitesse = mon_equation_->inconnue().valeurs();
106 const Domaine_VDF& domaine_VDF = ref_cast(Domaine_VDF, le_dom_VF_.valeur());
107 int nb_elem_tot = domaine_VDF.domaine().nb_elem_tot();
108 const IntTab& elem_faces = domaine_VDF.elem_faces();
109 int element_number;
110 int num0, num1, num2, num3, num4 = -1, num5 = -1;
111
112 // This is to calculate the cell centered velocity values
113
114 for (element_number = 0; element_number < nb_elem_tot; element_number++)
115 {
116 num0 = elem_faces(element_number, 0);
117 num1 = elem_faces(element_number, 1);
118 num2 = elem_faces(element_number, 2);
119 num3 = elem_faces(element_number, 3);
120 if (dimension == 3)
121 {
122 num4 = elem_faces(element_number, 4);
123 num5 = elem_faces(element_number, 5);
124 }
125
126 if (dimension == 2)
127 {
128 cell_cent_vel(element_number, 0) = 0.5 * (vitesse[num0] + vitesse[num2]);
129 cell_cent_vel(element_number, 1) = 0.5 * (vitesse[num1] + vitesse[num3]);
130 }
131 else
132 {
133 cell_cent_vel(element_number, 0) = 0.5 * (vitesse[num0] + vitesse[num3]);
134 cell_cent_vel(element_number, 1) = 0.5 * (vitesse[num1] + vitesse[num4]);
135 cell_cent_vel(element_number, 2) = 0.5 * (vitesse[num2] + vitesse[num5]);
136 }
137 }
138}
139
140void Modele_turbulence_hyd_LES_DSGS_VDF::calculer_filter_field(const DoubleTab& in_vel, DoubleTab& out_vel)
141{
142 const Domaine_VDF& domaine_VDF = ref_cast(Domaine_VDF, le_dom_VF_.valeur());
143 const IntTab& face_voisins = domaine_VDF.face_voisins();
144 int nb_elem_tot = domaine_VDF.domaine().nb_elem_tot();
145 const IntTab& elem_faces = domaine_VDF.elem_faces();
146 int element_number;
147 int num0, num1, num2, num3, num4, num5;
148 int f0, f1, f2, f3, f4, f5;
149 int i;
150
151 DoubleTrav temp1(nb_elem_tot, dimension);
152 DoubleTrav temp2(nb_elem_tot, dimension);
153
154 // This is to calculate the filtered velocity field
155
156 if (dimension == 2)
157 {
158 for (element_number = 0; element_number < nb_elem_tot; element_number++)
159 {
160 f0 = elem_faces(element_number, 0);
161 num0 = face_voisins(f0, 0);
162 f2 = elem_faces(element_number, 2);
163 num2 = face_voisins(f2, 1);
164 if ((num0 == -1) || (num2 == -1))
165 for (i = 0; i < dimension; i++)
166 temp1(element_number, i) = in_vel(element_number, i);
167 else
168 {
169 for (i = 0; i < dimension; i++)
170 {
171 temp1(element_number, i) = 0.25 * (in_vel(num0, i) + 2.0 * in_vel(element_number, i) + in_vel(num2, i));
172 }
173 }
174 }
175
176 for (element_number = 0; element_number < nb_elem_tot; element_number++)
177 {
178 f1 = elem_faces(element_number, 1);
179 num1 = face_voisins(f1, 0);
180 f3 = elem_faces(element_number, 3);
181 num3 = face_voisins(f3, 1);
182 if ((num1 == -1) || (num3 == -1))
183 for (i = 0; i < dimension; i++)
184 out_vel(element_number, i) = temp1(element_number, i);
185 else
186 {
187 for (i = 0; i < dimension; i++)
188 {
189 out_vel(element_number, i) = 0.25 * (temp1(num1, i) + 2.0 * temp1(element_number, i) + temp1(num3, i));
190 }
191 }
192 }
193 }
194 else
195 {
196 for (element_number = 0; element_number < nb_elem_tot; element_number++)
197 {
198 f0 = elem_faces(element_number, 0);
199 num0 = face_voisins(f0, 0);
200 f3 = elem_faces(element_number, 3);
201 num3 = face_voisins(f3, 1);
202 if ((num0 == -1) || (num3 == -1))
203 for (i = 0; i < dimension; i++)
204 temp1(element_number, i) = in_vel(element_number, i);
205 else
206 {
207 for (i = 0; i < dimension; i++)
208 {
209 temp1(element_number, i) = 0.25 * (in_vel(num0, i) + 2.0 * in_vel(element_number, i) + in_vel(num3, i));
210 }
211 }
212 }
213
214 for (element_number = 0; element_number < nb_elem_tot; element_number++)
215 {
216 f1 = elem_faces(element_number, 1);
217 num1 = face_voisins(f1, 0);
218 f4 = elem_faces(element_number, 4);
219 num4 = face_voisins(f4, 1);
220 if ((num1 == -1) || (num4 == -1))
221 for (i = 0; i < dimension; i++)
222 temp2(element_number, i) = temp1(element_number, i);
223 else
224 {
225 for (i = 0; i < dimension; i++)
226 {
227 temp2(element_number, i) = 0.25 * (temp1(num1, i) + 2.0 * temp1(element_number, i) + temp1(num4, i));
228 }
229 }
230 }
231
232 for (element_number = 0; element_number < nb_elem_tot; element_number++)
233 {
234 f2 = elem_faces(element_number, 2);
235 num2 = face_voisins(f2, 0);
236 f5 = elem_faces(element_number, 5);
237 num5 = face_voisins(f5, 1);
238 if ((num2 == -1) || (num5 == -1))
239 for (i = 0; i < dimension; i++)
240 out_vel(element_number, i) = temp2(element_number, i);
241 else
242 {
243 for (i = 0; i < dimension; i++)
244 {
245 out_vel(element_number, i) = 0.25 * (temp2(num2, i) + 2.0 * temp2(element_number, i) + temp2(num5, i));
246 }
247 }
248 }
249 }
250}
251
253{
254 const Domaine_VDF& domaine_VDF = ref_cast(Domaine_VDF, le_dom_VF_.valeur());
255 const IntTab& face_voisins = domaine_VDF.face_voisins();
256 int nb_elem_tot = domaine_VDF.domaine().nb_elem_tot();
257 const IntTab& elem_faces = domaine_VDF.elem_faces();
258 int element_number;
259 int num0, num1, num2, num3, num4, num5;
260 int f0, f1, f2, f3, f4, f5;
261 int i, j;
262
263 DoubleTrav temp1(nb_elem_tot, dimension, dimension);
264 DoubleTrav temp2(nb_elem_tot, dimension, dimension);
265
266 // This is to calculate the filtered tensor field
267
268 if (dimension == 2)
269 {
270 for (element_number = 0; element_number < nb_elem_tot; element_number++)
271 {
272 f0 = elem_faces(element_number, 0);
273 num0 = face_voisins(f0, 0);
274 f2 = elem_faces(element_number, 2);
275 num2 = face_voisins(f2, 1);
276 if ((num0 == -1) || (num2 == -1))
277 for (i = 0; i < dimension; i++)
278 for (j = 0; j < dimension; j++)
279 temp1(element_number, i, j) = in_vel(element_number, i, j);
280 else
281 {
282 for (i = 0; i < dimension; i++)
283 for (j = 0; j < dimension; j++)
284 {
285 temp1(element_number, i, j) = 0.25 * (in_vel(num0, i, j) + 2.0 * in_vel(element_number, i, j) + in_vel(num2, i, j));
286 }
287 }
288 }
289
290 for (element_number = 0; element_number < nb_elem_tot; element_number++)
291 {
292 f1 = elem_faces(element_number, 1);
293 num1 = face_voisins(f1, 0);
294 f3 = elem_faces(element_number, 3);
295 num3 = face_voisins(f3, 1);
296 if ((num1 == -1) || (num3 == -1))
297 for (i = 0; i < dimension; i++)
298 for (j = 0; j < dimension; j++)
299 in_vel(element_number, i, j) = temp1(element_number, i, j);
300 else
301 {
302 for (i = 0; i < dimension; i++)
303 for (j = 0; j < dimension; j++)
304 {
305 in_vel(element_number, i, j) = 0.25 * (temp1(num1, i, j) + 2.0 * temp1(element_number, i, j) + temp1(num3, i, j));
306 }
307 }
308 }
309 }
310 else
311 {
312 for (element_number = 0; element_number < nb_elem_tot; element_number++)
313 {
314 f0 = elem_faces(element_number, 0);
315 num0 = face_voisins(f0, 0);
316 f3 = elem_faces(element_number, 3);
317 num3 = face_voisins(f3, 1);
318 if ((num0 == -1) || (num3 == -1))
319 for (i = 0; i < dimension; i++)
320 for (j = 0; j < dimension; j++)
321 temp1(element_number, i, j) = in_vel(element_number, i, j);
322 else
323 {
324 for (i = 0; i < dimension; i++)
325 for (j = 0; j < dimension; j++)
326 {
327 temp1(element_number, i, j) = 0.25 * (in_vel(num0, i, j) + 2.0 * in_vel(element_number, i, j) + in_vel(num3, i, j));
328 }
329 }
330 }
331
332 for (element_number = 0; element_number < nb_elem_tot; element_number++)
333 {
334 f1 = elem_faces(element_number, 1);
335 num1 = face_voisins(f1, 0);
336 f4 = elem_faces(element_number, 4);
337 num4 = face_voisins(f4, 1);
338 if ((num1 == -1) || (num4 == -1))
339 for (i = 0; i < dimension; i++)
340 for (j = 0; j < dimension; j++)
341 temp2(element_number, i, j) = temp1(element_number, i, j);
342 else
343 {
344 for (i = 0; i < dimension; i++)
345 for (j = 0; j < dimension; j++)
346 {
347 temp2(element_number, i, j) = 0.25 * (temp1(num1, i, j) + 2.0 * temp1(element_number, i, j) + temp1(num4, i, j));
348 }
349 }
350 }
351
352 for (element_number = 0; element_number < nb_elem_tot; element_number++)
353 {
354 f2 = elem_faces(element_number, 2);
355 num2 = face_voisins(f2, 0);
356 f5 = elem_faces(element_number, 5);
357 num5 = face_voisins(f5, 1);
358 if ((num2 == -1) || (num5 == -1))
359 for (i = 0; i < dimension; i++)
360 for (j = 0; j < dimension; j++)
361 in_vel(element_number, i, j) = temp2(element_number, i, j);
362 else
363 {
364 for (i = 0; i < dimension; i++)
365 for (j = 0; j < dimension; j++)
366 {
367 in_vel(element_number, i, j) = 0.25 * (temp2(num2, i, j) + 2.0 * temp2(element_number, i, j) + temp2(num5, i, j));
368 }
369 }
370 }
371 }
372}
373
375{
376 const Domaine_VDF& domaine_VDF = ref_cast(Domaine_VDF, le_dom_VF_.valeur());
377 const IntTab& face_voisins = domaine_VDF.face_voisins();
378 int nb_elem_tot = domaine_VDF.domaine().nb_elem_tot();
379 const IntTab& elem_faces = domaine_VDF.elem_faces();
380 int element_number;
381 int num0, num1, num2, num3, num4, num5;
382 int f0, f1, f2, f3, f4, f5;
383
384 DoubleTrav temp1(nb_elem_tot);
385 DoubleTrav temp2(nb_elem_tot);
386
387 // This is to calculate the filtered coefficient field
388
389 if (dimension == 2)
390 {
391 for (element_number = 0; element_number < nb_elem_tot; element_number++)
392 {
393 f0 = elem_faces(element_number, 0);
394 num0 = face_voisins(f0, 0);
395 f2 = elem_faces(element_number, 2);
396 num2 = face_voisins(f2, 1);
397 if ((num0 == -1) || (num2 == -1))
398 temp1(element_number) = 3.0 * in_vel(element_number);
399 else
400 {
401 temp1(element_number) = in_vel(num0) + in_vel(element_number) + in_vel(num2);
402 }
403 }
404
405 for (element_number = 0; element_number < nb_elem_tot; element_number++)
406 {
407 f1 = elem_faces(element_number, 1);
408 num1 = face_voisins(f1, 0);
409 f3 = elem_faces(element_number, 3);
410 num3 = face_voisins(f3, 1);
411 if ((num1 == -1) || (num3 == -1))
412 in_vel(element_number) = temp1(element_number) / 3.0;
413 else
414 {
415 in_vel(element_number) = (temp1(num1) + temp1(element_number) + temp1(num3)) / 9.0;
416 }
417 }
418 }
419 else
420 {
421 for (element_number = 0; element_number < nb_elem_tot; element_number++)
422 {
423 f0 = elem_faces(element_number, 0);
424 num0 = face_voisins(f0, 0);
425 f3 = elem_faces(element_number, 3);
426 num3 = face_voisins(f3, 1);
427 if ((num0 == -1) || (num3 == -1))
428 temp1(element_number) = 3.0 * in_vel(element_number);
429 else
430 {
431 temp1(element_number) = in_vel(num0) + in_vel(element_number) + in_vel(num3);
432 }
433 }
434
435 for (element_number = 0; element_number < nb_elem_tot; element_number++)
436 {
437 f1 = elem_faces(element_number, 1);
438 num1 = face_voisins(f1, 0);
439 f4 = elem_faces(element_number, 4);
440 num4 = face_voisins(f4, 1);
441 if ((num1 == -1) || (num4 == -1))
442 temp2(element_number) = 3.0 * temp1(element_number);
443 else
444 {
445 temp2(element_number) = temp1(num1) + temp1(element_number) + temp1(num4);
446 }
447 }
448
449 for (element_number = 0; element_number < nb_elem_tot; element_number++)
450 {
451 f2 = elem_faces(element_number, 2);
452 num2 = face_voisins(f2, 0);
453 f5 = elem_faces(element_number, 5);
454 num5 = face_voisins(f5, 1);
455 if ((num2 == -1) || (num5 == -1))
456 in_vel(element_number) = temp2(element_number) / 9.0;
457 else
458 {
459 in_vel(element_number) = (temp2(num2) + temp2(element_number) + temp2(num5)) / 27.0;
460 }
461 }
462 }
463}
464
465void Modele_turbulence_hyd_LES_DSGS_VDF::calculer_Lij(const DoubleTab& cell_cent_vel, const DoubleTab& filt_vel, DoubleTab& Lij)
466{
467 const Domaine_VDF& domaine_VDF = ref_cast(Domaine_VDF, le_dom_VF_.valeur());
468 int nb_elem_tot = domaine_VDF.domaine().nb_elem_tot();
469 int element_number;
470
471 DoubleTrav uij_filt(nb_elem_tot, dimension, dimension);
472
473 // This is to calculate the Lij term for the C coefficient
474
475 for (element_number = 0; element_number < nb_elem_tot; element_number++)
476 {
477 for (int i = 0; i < dimension; i++)
478 for (int j = 0; j < dimension; j++)
479 uij_filt(element_number, i, j) = cell_cent_vel(element_number, i) * cell_cent_vel(element_number, j);
480 }
481
482 calculer_filter_tensor(uij_filt);
483
484 for (element_number = 0; element_number < nb_elem_tot; element_number++)
485 {
486 for (int i = 0; i < dimension; i++)
487 for (int j = 0; j < dimension; j++)
488 Lij(element_number, i, j) = uij_filt(element_number, i, j) - filt_vel(element_number, i) * filt_vel(element_number, j);
489 }
490}
491
492void Modele_turbulence_hyd_LES_DSGS_VDF::calculer_Mij(const DoubleTab& Sij_grid_scale, const DoubleTab& Sij_test_scale, DoubleTab& Mij)
493{
494 const Domaine_VDF& domaine_VDF = ref_cast(Domaine_VDF, le_dom_VF_.valeur());
495 int nb_elem_tot = domaine_VDF.domaine().nb_elem_tot();
496 int element_number;
497
498 DoubleTrav sij_filt(nb_elem_tot, dimension, dimension);
499 double temp, coeff = 0;
500 const double alpha = sqrt(6.0);
501 int i, j;
502
503 sij_filt = Sij_grid_scale;
504
505 // This is to calculate the Mij term for the C coefficient
506
507 for (element_number = 0; element_number < nb_elem_tot; element_number++)
508 {
509 temp = 0.;
510 for (i = 0; i < dimension; i++)
511 for (j = 0; j < dimension; j++)
512 temp += Sij_grid_scale(element_number, i, j) * Sij_grid_scale(element_number, i, j);
513
514 coeff = sqrt(2.0 * temp);
515 }
516 //GF
517 Cerr << "dans " << que_suis_je() << " le calcul de coeff est debile!!!!" << finl;
518 Cerr << " On fait planter pour corriger plus tard " << finl;
519 // en sortie de la boucle coeff=sqrt(2*tmp) tmp calculer qu avec le dernier
520 // elt
521 assert(0);
523 sij_filt *= coeff;
524
525 calculer_filter_tensor(sij_filt);
526
527 for (element_number = 0; element_number < nb_elem_tot; element_number++)
528 {
529 temp = 0.;
530 for (i = 0; i < dimension; i++)
531 for (j = 0; j < dimension; j++)
532 temp += Sij_test_scale(element_number, i, j) * Sij_test_scale(element_number, i, j);
533
534 coeff = sqrt(2.0 * temp);
535 for (i = 0; i < dimension; i++)
536 for (j = 0; j < dimension; j++)
537 Mij(element_number, i, j) = l_[element_number] * l_[element_number] * (alpha * alpha * coeff * Sij_test_scale(element_number, i, j) - sij_filt(element_number, i, j));
538 }
539}
540
541void Modele_turbulence_hyd_LES_DSGS_VDF::calculer_model_coefficient(const DoubleTab& Lij, const DoubleTab& Mij)
542{
543 int nb_elem_tot = ref_cast(Domaine_VDF, le_dom_VF_.valeur()).nb_elem_tot();
544 double temp1;
545 double temp2;
546
547 // Evaluate the dynamic model coeficient C
548 int elem;
549 for (elem = 0; elem < nb_elem_tot; elem++)
550 {
551 temp1 = 0.;
552 temp2 = 0.;
553 for (int i = 0; i < dimension; i++)
554 for (int j = 0; j < dimension; j++)
555 {
556 temp1 += Lij(elem, i, j) * Mij(elem, i, j);
557 temp2 += Mij(elem, i, j) * Mij(elem, i, j);
558 }
559 if (std::fabs(temp2) < 1.e-12)
560 model_coeff[elem] = 0.;
561 else
562 model_coeff[elem] = -0.5 * temp1 / temp2;
563 }
564
566 // double coeff_moy = 0.;
567 for (elem = 0; elem < nb_elem_tot; elem++)
568 {
569 if (model_coeff[elem] < 0.0)
570 model_coeff[elem] = 0.0;
571 if (model_coeff[elem] > 0.5)
572 model_coeff[elem] = 0.5;
573 }
574}
575
576void Modele_turbulence_hyd_LES_DSGS_VDF::calculer_Sij(const DoubleTab& in_vel, DoubleTab& out_vel)
577{
578 Champ_Face_VDF& vit = ref_cast(Champ_Face_VDF, mon_equation_->inconnue());
579 const Domaine_VDF& domaine_VDF = ref_cast(Domaine_VDF, le_dom_VF_.valeur());
580
581 int nb_elem_tot = domaine_VDF.domaine().nb_elem_tot();
582 //Nouvaeu calcul de Sij
583 DoubleTab duidxj(nb_elem_tot, dimension, dimension);
584 vit.calcul_duidxj(in_vel, duidxj);
585
586 for (int elem = 0; elem < nb_elem_tot; elem++)
587 for (int i = 0; i < dimension; i++)
588 for (int j = 0; j < dimension; j++)
589 out_vel(elem, i, j) = 0.5 * (duidxj(elem, i, j) + duidxj(elem, j, i));
590}
class Champ_Face_VDF Cette classe sert a representer un champ vectoriel dont on ne calcule
DoubleTab & calcul_duidxj(const DoubleTab &, DoubleTab &) const
Methode qui renvoie gij aux elements a partir de la vitesse aux elements (gij represente la derivee p...
classe Champ_Fonc_P0_VDF
classe Champ_Fonc_base Classe de base des champs qui sont fonction d'une grandeur calculee
double temps() const
Renvoie le temps du champ.
static void verifier(const char *const msg, double)
Definition Debog.cpp:21
int_t nb_elem_tot() const
Definition Domaine.h:132
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
class Domaine_VDF
Definition Domaine_VDF.h:64
int elem_faces(int i, int j) const
renvoie le numero de le ieme face de la maille num_elem la facon dont ces faces sont numerotees est
Definition Domaine_VF.h:543
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
Definition Domaine_VF.h:418
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
void associer(const Domaine_dis_base &, const Domaine_Cl_dis_base &) override
classe Modele_turbulence_hyd_LES_DSGS_VDF Cette classe derivee de Modele_turbulence_hyd_LES_Smago_VDF
void calculer_filter_field(const DoubleTab &, DoubleTab &)
void associer(const Domaine_dis_base &domaine_dis, const Domaine_Cl_dis_base &domaine_Cl_dis) override
void calculer_Lij(const DoubleTab &, const DoubleTab &, DoubleTab &)
void calculer_model_coefficient(const DoubleTab &, const DoubleTab &)
void calculer_Mij(const DoubleTab &, const DoubleTab &, DoubleTab &)
void calculer_Sij(const DoubleTab &, DoubleTab &)
classe Modele_turbulence_hyd_LES_Smago_VDF Cette classe correspond a la mise en oeuvre du modele sous
static int dimension
Definition Objet_U.h:99
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
Definition Objet_U.cpp:104
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
Definition Objet_U.cpp:293
virtual const Nom & le_nom() const
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
Definition Objet_U.cpp:319
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Definition Objet_U.cpp:282
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455
Classe de base des flux de sortie.
Definition Sortie.h:52
_SIZE_ size() const
Definition TRUSTVect.tpp:45