TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Statistiques_dns_ijk.cpp
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#include <Statistiques_dns_ijk.h>
17#include <IJK_Field_vector.h>
18#include <Domaine_IJK.h>
19#include <TRUSTTab.h>
20#include <communications.h>
21#include <IJK_Navier_Stokes_tools.h> // pour initialiser les IJK_double
22#include <Probleme_FTD_IJK_base.h>
23
24Implemente_instanciable_sans_constructeur(Statistiques_dns_ijk,"Statistiques_dns_ijk",Objet_U);
25
26#define U_MOY 0
27#define V_MOY 1
28#define W_MOY 2
29#define UU_MOY 3
30#define VV_MOY 4
31#define WW_MOY 5
32#define UV_MOY 6
33#define VW_MOY 7
34#define UW_MOY 8
35#define UP_MOY 9
36#define VP_MOY 10
37#define WP_MOY 11
38#define UUU_MOY 12
39#define VVV_MOY 13
40#define WWW_MOY 14
41#define RHO_MOY 15
42#define T_MOY 16
43#define UT_MOY 17
44#define VT_MOY 18
45#define WT_MOY 19
46#define URHO_MOY 20
47#define VRHO_MOY 21
48#define WRHO_MOY 22
49#define RHOP_MOY 23
50#define TP_MOY 24
51#define P_MOY 25
52#define T2_MOY 26
53#define T3_MOY 27
54#define T4_MOY 28
55#define RHO2_MOY 29
56#define RHO3_MOY 30
57#define RHO4_MOY 31
58#define UUW_MOY 32
59#define VVW_MOY 33
60#define U4_MOY 34
61#define V4_MOY 35
62#define W4_MOY 36
63#define MU_MOY 37
64#define LAMBDA_MOY 38
65#define PP_MOY 39
66#define WFACE_MOY 40
67#define NU_MOY 41
68#define UN_SUR_RHO_MOY 42
69#define NU2_MOY 43
70#define MU2_MOY 44
71#define NUTURB_MOY 45
72#define LAMBDADTDZ_MOY 46
73#define KAPPATURB_MOY 47
74#define RHOWFACE_MOY 48
75#define RHOTWFACE_MOY 49
76#define RHOUU_MOY 50
77#define RHOVV_MOY 51
78#define RHOWW_MOY 52
79#define RHOUV_MOY 53
80#define RHOVW_MOY 54
81#define RHOUW_MOY 55
82#define RHOUT_MOY 56
83#define RHOVT_MOY 57
84#define RHOWT_MOY 58
85#define NUTURB_XX_MOY 59
86#define NUTURB_XY_MOY 60
87#define NUTURB_XZ_MOY 61
88#define NUTURB_YY_MOY 62
89#define NUTURB_YZ_MOY 63
90#define NUTURB_ZZ_MOY 64
91#define KAPPATURB_X_MOY 65
92#define KAPPATURB_Y_MOY 66
93#define KAPPATURB_Z_MOY 67
94#define NUTURB_XX_DUDX_MOY 68
95#define NUTURB_XY_DUDY_MOY 69
96#define NUTURB_XZ_DUDZ_MOY 70
97#define NUTURB_XY_DVDX_MOY 71
98#define NUTURB_YY_DVDY_MOY 72
99#define NUTURB_YZ_DVDZ_MOY 73
100#define NUTURB_XZ_DWDX_MOY 74
101#define NUTURB_YZ_DWDY_MOY 75
102#define NUTURB_ZZ_DWDZ_MOY 76
103#define KAPPATURB_X_DSCALARDX_MOY 77
104#define KAPPATURB_Y_DSCALARDY_MOY 78
105#define KAPPATURB_Z_DSCALARDZ_MOY 79
106#define STRUCTURAL_UU_MOY 80
107#define STRUCTURAL_UV_MOY 81
108#define STRUCTURAL_UW_MOY 82
109#define STRUCTURAL_VV_MOY 83
110#define STRUCTURAL_VW_MOY 84
111#define STRUCTURAL_WW_MOY 85
112#define STRUCTURAL_USCALAR_MOY 86
113#define STRUCTURAL_VSCALAR_MOY 87
114#define STRUCTURAL_WSCALAR_MOY 88
115#define NUTURB_XX_DUDX_DUDX_MOY 89
116#define NUTURB_XY_DUDY_DUDY_MOY 90
117#define NUTURB_XZ_DUDZ_DUDZ_MOY 91
118#define NUTURB_XY_DVDX_DVDX_MOY 92
119#define NUTURB_YY_DVDY_DVDY_MOY 93
120#define NUTURB_YZ_DVDZ_DVDZ_MOY 94
121#define NUTURB_XZ_DWDX_DWDX_MOY 95
122#define NUTURB_YZ_DWDY_DWDY_MOY 96
123#define NUTURB_ZZ_DWDZ_DWDZ_MOY 97
124#define NUTURB_XY_DVDX_DUDY_MOY 98
125#define NUTURB_XZ_DWDX_DUDZ_MOY 99
126#define NUTURB_YZ_DWDY_DVDZ_MOY 100
127#define KAPPATURB_X_DSCALARDX_DSCALARDX_MOY 101
128#define KAPPATURB_Y_DSCALARDY_DSCALARDY_MOY 102
129#define KAPPATURB_Z_DSCALARDZ_DSCALARDZ_MOY 103
130#define STRUCTURAL_UU_DUDX_MOY 104
131#define STRUCTURAL_UV_DUDY_MOY 105
132#define STRUCTURAL_UW_DUDZ_MOY 106
133#define STRUCTURAL_UV_DVDX_MOY 107
134#define STRUCTURAL_VV_DVDY_MOY 108
135#define STRUCTURAL_VW_DVDZ_MOY 109
136#define STRUCTURAL_UW_DWDX_MOY 110
137#define STRUCTURAL_VW_DWDY_MOY 111
138#define STRUCTURAL_WW_DWDZ_MOY 112
139#define STRUCTURAL_USCALAR_DSCALARDX_MOY 113
140#define STRUCTURAL_VSCALAR_DSCALARDY_MOY 114
141#define STRUCTURAL_WSCALAR_DSCALARDZ_MOY 115
142#define LAMBDADTDZ2_MOY 116
143
144// termes de l'equation d'evolution de la demi-trace du tenseur des correlations de fluctuation de vitesse
145#define KW_MOY 0
146
147#define CORRELATION_EC_DIVERGENCE_MOY 1
148#define CORRELATION_PRESSION_DIVERGENCE_MOY 2
149
150#define P_WFLUC_MOY 3
151#define DIFFUSION_PRESSION_RHOFLUC_ADERIVE_MOY 4
152#define DIFFUSION_PRESSION_DERIVRHO_MOY 5
153
154#define DISSIPATION_INCOMPRESSIBLE_UN_AFOISNUMOY_MOY 6
155#define DISSIPATION_INCOMPRESSIBLE_DEUX_AFOISNUMOY_MOY 7
156#define DISSIPATION_COMPESSIBLE_UN_MOY 8
157#define DISSIPATION_COMPESSIBLE_DEUX_MOY 9
158#define DISSIPATION_COMPESSIBLE_TROIS_MOY 10
159
160#define DIFFUSION_VISQUEUSE_INCOMPRESSIBLE_DEUX_MOY 11
161#define DIFFUSION_VISQUEUSE_NUFLUC_ADERIVE_UN_MOY 12
162#define DIFFUSION_VISQUEUSE_NUFLUC_ADERIVE_DEUX_MOY 13
163#define DIFFUSION_VISQUEUSE_NUFLUC_ADERIVE_TROIS_MOY 14
164#define DIFFUSION_VISQUEUSE_DERIVRHO_UN_MOY 15
165#define DIFFUSION_VISQUEUSE_DERIVRHO_DEUX_MOY 16
166#define DIFFUSION_VISQUEUSE_DERIVRHO_TROIS_MOY 17
167
168#define TERME_NON_CLASSE_MOY 18
169
170#define FLUC_U_MOY 19
171#define FLUC_V_MOY 20
172#define FLUC_W_MOY 21
173#define FLUC_RHO_MOY 22
174#define FLUC_NU_MOY 23
175#define FLUC_DIV_U_MOY 24
176#define TOTAL_DIV_U_MOY 25
177#define MEAN_DIV_U_MOY 26
178#define TERME_SOURCE_MOY 27
179
180Statistiques_dns_ijk::Statistiques_dns_ijk()
181{
182
183
184 // Pour generer cette liste, envoyer la liste des #define dans
185 // sed 's/#define /"/g;s/_MOY.*/",/g' >resultat
186 // et copier ci-dessous:
187 const char *noms_moyennes_prov[] =
188 {
189 "U",
190 "V",
191 "W",
192 "UU",
193 "VV",
194 "WW",
195 "UV",
196 "VW",
197 "UW",
198 "UP",
199 "VP",
200 "WP",
201 "UUU",
202 "VVV",
203 "WWW",
204 "RHO",
205 "T",
206 "UT",
207 "VT",
208 "WT",
209 "URHO",
210 "VRHO",
211 "WRHO",
212 "RHOP",
213 "TP",
214 "P",
215 "T2",
216 "T3",
217 "T4",
218 "RHO2",
219 "RHO3",
220 "RHO4",
221 "UUW",
222 "VVW",
223 "U4",
224 "V4",
225 "W4",
226 "MU",
227 "LAMBDA",
228 "PP",
229 "WFACE",
230 "NU",
231 "UN_SUR_RHO",
232 "NU2",
233 "MU2",
234 "NUTURB",
235 "LAMBDADTDZ",
236 "KAPPATURB",
237 "RHOWFACE",
238 "RHOTWFACE",
239 "RHOUU_MOY",
240 "RHOVV_MOY",
241 "RHOWW_MOY",
242 "RHOUV_MOY",
243 "RHOVW_MOY",
244 "RHOUW_MOY",
245 "RHOUT_MOY",
246 "RHOVT_MOY",
247 "RHOWT_MOY",
248 "NUTURB_XX",
249 "NUTURB_XY",
250 "NUTURB_XZ",
251 "NUTURB_YY",
252 "NUTURB_YZ",
253 "NUTURB_ZZ",
254 "KAPPATURB_X",
255 "KAPPATURB_Y",
256 "KAPPATURB_Z",
257 "NUTURB_XX_DUDX",
258 "NUTURB_XY_DUDY",
259 "NUTURB_XZ_DUDZ",
260 "NUTURB_XY_DVDX",
261 "NUTURB_YY_DVDY",
262 "NUTURB_YZ_DVDZ",
263 "NUTURB_XZ_DWDX",
264 "NUTURB_YZ_DWDY",
265 "NUTURB_ZZ_DWDZ",
266 "KAPPATURB_X_DSCALARDX",
267 "KAPPATURB_Y_DSCALARDY",
268 "KAPPATURB_Z_DSCALARDZ",
269 "STRUCTURAL_UU",
270 "STRUCTURAL_UV",
271 "STRUCTURAL_UW",
272 "STRUCTURAL_VV",
273 "STRUCTURAL_VW",
274 "STRUCTURAL_WW",
275 "STRUCTURAL_USCALAR",
276 "STRUCTURAL_VSCALAR",
277 "STRUCTURAL_WSCALAR",
278 "NUTURB_XX_DUDX_DUDX_MOY",
279 "NUTURB_XY_DUDY_DUDY_MOY",
280 "NUTURB_XZ_DUDZ_DUDZ_MOY",
281 "NUTURB_XY_DVDX_DVDX_MOY",
282 "NUTURB_YY_DVDY_DVDY_MOY",
283 "NUTURB_YZ_DVDZ_DVDZ_MOY",
284 "NUTURB_XZ_DWDX_DWDX_MOY",
285 "NUTURB_YZ_DWDY_DWDY_MOY",
286 "NUTURB_ZZ_DWDZ_DWDZ_MOY",
287 "NUTURB_XY_DVDX_DUDY_MOY",
288 "NUTURB_XZ_DWDX_DUDZ_MOY",
289 "NUTURB_YZ_DWDY_DVDZ_MOY",
290 "KAPPATURB_X_DSCALARDX_DSCALARDX_MOY",
291 "KAPPATURB_Y_DSCALARDY_DSCALARDY_MOY",
292 "KAPPATURB_Z_DSCALARDZ_DSCALARDZ_MOY",
293 "STRUCTURAL_UU_DUDX_MOY",
294 "STRUCTURAL_UV_DUDY_MOY",
295 "STRUCTURAL_UW_DUDZ_MOY",
296 "STRUCTURAL_UV_DVDX_MOY",
297 "STRUCTURAL_VV_DVDY_MOY",
298 "STRUCTURAL_VW_DVDZ_MOY",
299 "STRUCTURAL_UW_DWDX_MOY",
300 "STRUCTURAL_VW_DWDY_MOY",
301 "STRUCTURAL_WW_DWDZ_MOY",
302 "STRUCTURAL_USCALAR_DSCALARDX_MOY",
303 "STRUCTURAL_VSCALAR_DSCALARDY_MOY",
304 "STRUCTURAL_WSCALAR_DSCALARDZ_MOY",
305 "LAMBDADTDZ2"
306 };
307 nval_=117;
308 noms_moyennes_.dimensionner(nval_);
309 for (int i=0; i<nval_; i++)
310 noms_moyennes_[i]=noms_moyennes_prov[i];
311
312 static const char *noms_k_prov[] =
313 {
314 "KW_MOY",
315 "CORRELATION_EC_DIVERGENCE_MOY",
316 "CORRELATION_PRESSION_DIVERGENCE_MOY",
317 "P_WFLUC_MOY",
318 "DIFFUSION_PRESSION_RHOFLUC_ADERIVE_MOY",
319 "DIFFUSION_PRESSION_DERIVRHO_MOY",
320 "DISSIPATION_INCOMPRESSIBLE_UN_AFOISNUMOY_MOY",
321 "DISSIPATION_INCOMPRESSIBLE_DEUX_AFOISNUMOY_MOY",
322 "DISSIPATION_COMPESSIBLE_UN_MOY",
323 "DISSIPATION_COMPESSIBLE_DEUX_MOY",
324 "DISSIPATION_COMPESSIBLE_TROIS_MOY",
325 "DIFFUSION_VISQUEUSE_INCOMPRESSIBLE_DEUX_MOY",
326 "DIFFUSION_VISQUEUSE_NUFLUC_ADERIVE_UN_MOY",
327 "DIFFUSION_VISQUEUSE_NUFLUC_ADERIVE_DEUX_MOY",
328 "DIFFUSION_VISQUEUSE_NUFLUC_ADERIVE_TROIS_MOY",
329 "DIFFUSION_VISQUEUSE_DERIVRHO_UN_MOY",
330 "DIFFUSION_VISQUEUSE_DERIVRHO_DEUX_MOY",
331 "DIFFUSION_VISQUEUSE_DERIVRHO_TROIS_MOY",
332 "TERME_NON_CLASSE_MOY",
333 "FLUC_U_MOY",
334 "FLUC_V_MOY",
335 "FLUC_W_MOY",
336 "FLUC_RHO_MOY",
337 "FLUC_NU_MOY",
338 "FLUC_DIV_U_MOY",
339 "TOTAL_DIV_U_MOY",
340 "MEAN_DIV_U_MOY",
341 "TERME_SOURCE_MOY",
342 };
343 kval_=28;
344 noms_k_.dimensionner(kval_);
345 for (int i=0; i<kval_; i++)
346 noms_k_[i]=noms_k_prov[i];
347}
348
349/*
350static inline double calculer_lambda_air(double temperature)
351{
352 const double fac_a = -5.05628e-18;
353 const double fac_b = 2.469e-14;
354 const double fac_c = -4.98344e-11;
355 const double fac_d = 7.06714e-08;
356 const double fac_e = 1.0894e-06;
357 const double facteur = 1.93198026315789000e-3 / 1.461e-6;
358
359 double val = temperature;
360 double calc = val * fac_a + fac_b;
361 calc = val * calc + fac_c;
362 calc = val * calc + fac_d;
363 calc = val * calc + fac_e;
364 return calc * facteur;
365} */
366
367/*
368static inline double calculer_mu_air(double temperature)
369{
370 const double fac_a = -5.05628e-18;
371 const double fac_b = 2.469e-14;
372 const double fac_c = -4.98344e-11;
373 const double fac_d = 7.06714e-08;
374 const double fac_e = 1.0894e-06;
375
376 double val = temperature;
377 double calc = val * fac_a + fac_b;
378 calc = val * calc + fac_c;
379 calc = val * calc + fac_d;
380 calc = val * calc + fac_e;
381 return calc;
382} */
383
384namespace
385{
386
387inline double calculer_rho_air(double temperature, double constante_specifique_gaz, double pression_thermodynamique)
388{
389 return ( pression_thermodynamique / ( constante_specifique_gaz * temperature ) );
390}
391
392// calcule la derivee premiere en maillage anisotrope !!
393inline double derivee_aniso( double alpha /* rapport des distances a la maille sup et inf */
394 , double un_sur_alpha /* inverse de alpha */
395 , double un_sur_dp_plus_dm /* inverse de la somme des distances aux elems inf et sup */
396 , double val_moins /* valeur dans la maille inf */
397 , double val_centre /* valeur dans la maille */
398 , double val_plus /* valeur dans la maille sup */ )
399{
400 double derivee = (val_plus - val_centre) * un_sur_alpha; // contribution sup pondere
401 derivee += (val_centre - val_moins ) * alpha; // contribution moins pondere
402 derivee *= un_sur_dp_plus_dm; // division
403 return derivee;
404}
405
406}
407//static inline double derivee_2_aniso( double un_sur_delta_moins /* inverse da la distance a la maille inf */
408// , double un_sur_delta_plus /* inverse da la distance a la maille sup */
409// , double un_sur_dp_plus_dm /* inverse de la somme des distances aux elems inf et sup */
410// , double val_moins /* valeur dans la maille inf */
411// , double val_centre/* valeur dans la maille */
412// , double val_plus /* valeur dans la maille sup */)
413//{
414// double derivee_2 = (val_plus - val_centre) * un_sur_delta_plus; // contribution sup pondere
415// derivee_2 -= (val_centre - val_moins ) * un_sur_delta_moins; // contribution moins pondere
416// derivee_2 *= 2. * un_sur_dp_plus_dm; // division (le 2. disparait naturellement lorsque dp = dm => 2* 1/ (dp + dm ) = 2*1/ 2d = 1/d
417// return derivee_2;
418//}
419
420// Attention, cette methode est appelee apres readOn(),
421// il ne faut pas casser les donnees lues
422void Statistiques_dns_ijk::initialize(const Domaine_IJK& geom,double T_KMAX , double T_KMIN, double constante_specifique_gaz)
423{
424 // F.A ajout recuperation des temperatures des CLs
425 TCL_kmax_ = T_KMAX;
426 TCL_kmin_ = T_KMIN;
427 constante_specifique_gaz_ = constante_specifique_gaz;
428 // check_converge_ =1; // !!! uniquement pour tester les stats k !!!
429 dx_=geom.get_constant_delta(0); //modif AT 20/06/2013
430 dy_=geom.get_constant_delta(1); //modif AT 20/06/2013
431 tab_dz_=geom.get_delta(2); //modif AT 20/06/2013
432 const int n = geom.get_nb_elem_tot(DIRECTION_K);
433 elem_coord_.resize_array(n);
434 int i;
435 const ArrOfDouble& coord_z = geom.get_node_coordinates(DIRECTION_K);
436 for (i = 0; i < n; i++)
437 elem_coord_[i] = (coord_z[i] + coord_z[i+1]) * 0.5;
438
440 {
441 moyenne_spatiale_instantanee_.dimensionner(nval_);
442 for (i = 0; i < nval_; i++)
443 {
444 moyenne_spatiale_instantanee_[i].resize_array(n);
445 }
446 moyenne_spatiale_instantanee_[WFACE_MOY].resize_array(n+1);//En effet, il y a une face de plus que d'elem et ce tableau est au face
447 }
448
449 int flag = 0;
450 if (integrale_temporelle_.size() == 0)
451 {
452 integrale_temporelle_.dimensionner(nval_);
453 t_integration_ = 0.;
454 }
455 else
456 flag = 1;
457
458 for (i = 0; i < nval_; i++)
459 {
460 if (flag)
461 {
462 if ( ((integrale_temporelle_[i].size_array() != n) && (i!=WFACE_MOY)) ||
463 ((integrale_temporelle_[WFACE_MOY].size_array() != n+1) && (i==WFACE_MOY)) )
464 {
465 Cerr << "Erreur dans Statistiques_dns_ijk::initialize: reprise avec mauvais nombre de mailles en z" << finl;
467 }
468 }
469 else
470 {
471 if (i!=WFACE_MOY)
472 integrale_temporelle_[i].resize_array(n);
473 else
474 integrale_temporelle_[i].resize_array(n+1);
475 }
476 }
477 //modif AT 20/06/2013
478 if (check_converge_)
479 {
480 // DD 16/10/2015: on recupere la masse_volumique moyenne pour calculer les fluctuations de masse_volumique
481 rho_moy_.resize_array(n);
482 rho_moy_=integrale_temporelle_[15];
483 rho_moy_/=t_integration_; // Il ne faut pas oublier de diviser par le temps d'integration !!!
484 // DD 16/10/2015: on recupere la viscosite_cinematique moyenne pour calculer les fluctuations de viscosite_cinematique
485 nu_moy_.resize_array(n);
486 nu_moy_=integrale_temporelle_[41];
487 nu_moy_/=t_integration_; // Il ne faut pas oublier de diviser par le temps d'integration !!!
488
489 //on recupere les vitesses moyennes aux faces pour calculer les fluctuations de vitesse.
490 vit_moy_.dimensionner(3);
491 for (i = 0; i < 3; i++)
492 vit_moy_[i].resize_array(n);
493
494 vit_moy_[0]=integrale_temporelle_[0];
495 vit_moy_[0]/=t_integration_; // Il ne faut pas oublier de diviser par le temps d'integration !!!
496 vit_moy_[1]=integrale_temporelle_[1];
497 vit_moy_[1]/=t_integration_;
498 vit_moy_[2]=integrale_temporelle_[40];//car on veut w aux faces !
499 vit_moy_[2]/=t_integration_;
500 int flag2 = 0;
501 if ((integrale_k_.size() == 0 )|| (integrale_k_[0].size_array() ==0))
502 {
503 integrale_k_.dimensionner(kval_);
504 t_integration_k_ = 0.;
505 }
506 else
507 flag2 = 1;
508
509 for (i = 0; i < kval_; i++)
510 {
511 if (flag2)
512 {
513 if (integrale_k_[i].size_array() != n)
514 {
515 Cerr << "Erreur dans Statistiques_dns_ijk::initialize: reprise stat k avec mauvais nombre de mailles en z" << finl;
517 }
518 }
519 else
520 {
521 integrale_k_[i].resize_array(n);
522 }
523 }
525 {
526 moyenne_spatiale_ec_.dimensionner(kval_);
527 for (int ii = 0; ii < kval_; ii++)
528 {
529 moyenne_spatiale_ec_[ii].resize_array(n);
530 }
531 }
532 }
533}
534
536{
537 domaine_ijk_ = dom_ijk;
538}
539
540// Warning: this one looking at t_debut_statistiques_ too
542{
543 return ref_ijk_ft_->get_post().is_stats_plans_activated();
544}
545
546/** Was the field of name 'nom' requested for postprocessing?
547 */
549{
550 return ref_ijk_ft_->get_post().is_post_required(nom);
551 //return (std::find(list_post_required_.begin(), list_post_required_.end(), nom) != list_post_required_.end());
552}
553
554void Statistiques_dns_ijk::Fill_postprocessable_fields(std::vector<FieldInfo_t>& chps)
555{
556 std::vector<FieldInfo_t> c =
557 {
558 // Name / Localisation (elem, face, ...) / Nature (scalare, vector) / Located on interface?
559 // exemple: { "GRAD2_P", Entity::ELEMENT, Nature_du_champ::vectoriel, false },
560
561 /* DEPRECATED NAMES:
562 { "ANA_GRAD_U", Entity::ELEMENT, Nature_du_champ::vectoriel, false },
563 { "ANA_GRAD_V", Entity::ELEMENT, Nature_du_champ::vectoriel, false },
564 { "ANA_GRAD_W", Entity::ELEMENT, Nature_du_champ::vectoriel, false },
565 { "ANA_GRAD2_P", Entity::ELEMENT, Nature_du_champ::scalaire, false },
566 // A mettre dans un unique tenseur? :
567 { "ANA_GRAD2_U", Entity::ELEMENT, Nature_du_champ::vectoriel, false },
568 { "ANA_GRAD2_V", Entity::ELEMENT, Nature_du_champ::vectoriel, false },
569 { "ANA_GRAD2_W", Entity::ELEMENT, Nature_du_champ::vectoriel, false },
570
571 { "GRAD_P", Entity::FACE, Nature_du_champ::vectoriel, false },
572 { "ANA_GRAD_P", Entity::FACE, Nature_du_champ::vectoriel, false },
573 */
574 };
575
576 chps.insert(chps.end(), c.begin(), c.end());
577
578 // VECTOR at FACES :
579 const std::vector<std::string> noms_faces = {"dPd"};
580 for (const auto& nam : noms_faces)
581 {
582 const Nom fld_nam = Nom("ANA_")+Nom(nam);
583 const std::string ana_nam = fld_nam.getString();
584 chps.insert(chps.end(),
585 {
586 { nam, Entity::FACE, Nature_du_champ::vectoriel, false },
587 { ana_nam, Entity::FACE, Nature_du_champ::vectoriel, false },
588 });
589 }
590
591 // VECTOR at ELEMENT :
592 const std::vector<std::string> noms = {"dUd", "dVd", "dWd", "ddPdd", "ddUdd", "ddVdd", "ddWdd"};
593 for (const auto& nam : noms)
594 {
595 const Nom fld_nam = Nom("ANA_")+Nom(nam);
596 const std::string nam2 = Nom(nam+"c").getString(); // For off-diagonal components
597 const std::string ana_nam = fld_nam.getString();
598 const std::string ana_nam2 = Nom(fld_nam+"c").getString();
599 chps.insert(chps.end(),
600 {
601 { nam, Entity::ELEMENT, Nature_du_champ::vectoriel, false },
602 { nam2, Entity::ELEMENT, Nature_du_champ::vectoriel, false },
603 { ana_nam, Entity::ELEMENT, Nature_du_champ::vectoriel, false },
604 { ana_nam2, Entity::ELEMENT, Nature_du_champ::vectoriel, false },
605 });
606 }
607}
608
610{
611 for (const auto& n : champs_compris_.liste_noms_compris())
612 noms.add(n);
613 for (const auto& n : champs_compris_.liste_noms_compris_vectoriel())
614 noms.add(n);
615}
616
617/** Retrieve requested field for postprocessing, potentially updating it.
618 */
619const IJK_Field_double& Statistiques_dns_ijk::get_IJK_field(const Motcle& nom)
620{
621 if (!has_champ(nom))
622 {
623 Cerr << "ERROR in Statistiques_dns_ijk::get_IJK_field : " << finl;
624 Cerr << "Requested field '" << nom << "' is not recognized by Statistiques_dns_ijk::get_IJK_field()." << finl;
625 throw;
626 }
627
628
629 return champs_compris_.get_champ(nom);
630
631
632}
633
634const IJK_Field_vector3_double& Statistiques_dns_ijk::get_IJK_field_vector(const Motcle& nom)
635{
636 if (!has_champ_vectoriel(nom))
637 {
638 Cerr << "ERROR in Statistiques_dns_ijk::get_IJK_field_vector : " << finl;
639 Cerr << "Requested field '" << nom << "' is not recognized by Statistiques_dns_ijk::get_IJK_field_vector()." << finl;
640 throw;
641 }
642
643
644
645 return champs_compris_.get_champ_vectoriel(nom);
646}
647
648
649void Statistiques_dns_ijk::update_stat(const IJK_Field_vector3_double& vitesse,
650 const IJK_Field_double& pression,
651 const IJK_Field_double& temperature,
652 const IJK_Field_double& masse_vol,
653 const IJK_Field_double& champ_mu,
654 const IJK_Field_double& champ_lambda,
655 const ArrOfDouble_with_ghost& delta_z_local_pour_delta,
656 const bool flag_nu_anisotropic,
657 const int flag_turbulent_viscosity,
658 const IJK_Field_double& champ_turbulent_mu_xx,
659 const IJK_Field_double& champ_turbulent_mu_xy,
660 const IJK_Field_double& champ_turbulent_mu_xz,
661 const IJK_Field_double& champ_turbulent_mu_yy,
662 const IJK_Field_double& champ_turbulent_mu_yz,
663 const IJK_Field_double& champ_turbulent_mu_zz,
664 const bool flag_kappa_anisotropic,
665 const int flag_turbulent_diffusivity,
666 const IJK_Field_double& champ_turbulent_kappa_x,
667 const IJK_Field_double& champ_turbulent_kappa_y,
668 const IJK_Field_double& champ_turbulent_kappa_z,
669 const int flag_structural_uu,
670 const FixedVector<IJK_Field_double, 6>& structural_uu_tensor,
671 const int flag_structural_uscalar,
672 const IJK_Field_vector3_double& structural_uscalar_vector,
673 const int flag_formulation_favre,
674 const int flag_formulation_velocity,
675 const double cp_gaz,
676 const double pression_thermodynamique,
677 double dt)
678{
679 if (elem_coord_.size_array() == 0)
680 {
681 Cerr << "Erreur dans Statistiques_dns_ijk::update_stat: non initialise" << finl;
683 }
684
685 const IJK_Field_double& vitesse_i = vitesse[0];
686 const IJK_Field_double& vitesse_j = vitesse[1];
687 const IJK_Field_double& vitesse_k = vitesse[2];
688
689 const IJK_Field_double& structural_uu_xx = structural_uu_tensor[0];
690 const IJK_Field_double& structural_uu_xy = structural_uu_tensor[1];
691 const IJK_Field_double& structural_uu_xz = structural_uu_tensor[2];
692 const IJK_Field_double& structural_uu_yy = structural_uu_tensor[3];
693 const IJK_Field_double& structural_uu_yz = structural_uu_tensor[4];
694 const IJK_Field_double& structural_uu_zz = structural_uu_tensor[5];
695
696 const IJK_Field_double& structural_uscalar_x = structural_uscalar_vector[0];
697 const IJK_Field_double& structural_uscalar_y = structural_uscalar_vector[1];
698 const IJK_Field_double& structural_uscalar_z = structural_uscalar_vector[2];
699
700 // Nombre total de mailles en K
701 const int nktot = pression.get_domaine().get_nb_items_global(Domaine_IJK::ELEM, DIRECTION_K);
702
703 // Nombre local de mailles en K
704 const int kmax = pression.nk();
705 const int offset = pression.get_domaine().get_offset_local(DIRECTION_K);
706
707 DoubleTab tmp(nktot, nval_);
708 const int imax = pression.ni();
709 const int jmax = pression.nj();
710
711 const double rho_kmin = calculer_rho_air(TCL_kmin_, constante_specifique_gaz_, pression_thermodynamique);
712 const double rho_kmax = calculer_rho_air(TCL_kmax_, constante_specifique_gaz_, pression_thermodynamique);
713
714 const double unsurdx = 1./dx_;
715 const double unsurdy = 1./dy_;
716 const double nu_dx_delta = flag_nu_anisotropic ? dx_ : 1.;
717 const double nu_dy_delta = flag_nu_anisotropic ? dy_ : 1.;
718 const double kappa_dx_delta = flag_kappa_anisotropic ? dx_ : 1.;
719 const double kappa_dy_delta = flag_kappa_anisotropic ? dy_ : 1.;
720
721 for (int k = 0; k < kmax; k++)
722 {
723 const int kg=k+offset;
724 double unsurdz = 1./tab_dz_[kg];
725 double delta_m = kg== 0 ? tab_dz_[kg] * 0.5 : ( tab_dz_[kg] + tab_dz_[kg-1] ) * 0.5;
726 double delta_p = kg==(nktot-1) ? tab_dz_[kg] * 0.5 : ( tab_dz_[kg] + tab_dz_[kg+1] ) * 0.5;
727 double alpha = delta_p/delta_m;
728 double unsalpha = delta_m/delta_p;
729 double unsdpdm = 1./(delta_p + delta_m);
730 double unsurdm = 1./delta_m;
731 double unsurdp = 1./delta_p;
732 double nu_dz_delta = flag_nu_anisotropic ? delta_z_local_pour_delta[k] : 1.;
733 double nu_delta_m_delta = flag_nu_anisotropic ? (kg==0 ? 0. : (delta_z_local_pour_delta[k] + delta_z_local_pour_delta[k-1])*0.5) : 1.;
734 double nu_delta_p_delta = flag_nu_anisotropic ? (kg==(nktot-1) ? 0. : (delta_z_local_pour_delta[k] + delta_z_local_pour_delta[k+1])*0.5) : 1.;
735 double kappa_delta_m_delta = flag_kappa_anisotropic ? (kg==0 ? 0. : (delta_z_local_pour_delta[k] + delta_z_local_pour_delta[k-1])*0.5) : 1.;
736 double kappa_delta_p_delta = flag_kappa_anisotropic ? (kg==(nktot-1) ? 0. : (delta_z_local_pour_delta[k] + delta_z_local_pour_delta[k+1])*0.5) : 1.;
737
738 // Calcul des moyennes spatiales sur le plan ij
739 // On y stocke la somme de toutes les valeurs sur le plan ij, on divisera apres
740 ArrOfDouble moy(nval_);
741 for (int i = 0; i < nval_; i++)
742 {
743 moy[i] = 0.;
744 }
745 for (int j = 0; j < jmax; j++)
746 {
747 for (int i = 0; i < imax; i++)
748 {
749 // Vitesses au centre de la maille i,j,k
750 // On peut ici interpoler plus finement si on veut:
751 double uf = vitesse_i(i,j,k);
752 double vf = vitesse_j(i,j,k);
753 double wf_k = vitesse_k(i,j,k);
754 double wf_kp1 = vitesse_k(i,j,k+1);
755 double ue = (vitesse_i(i,j,k) + vitesse_i(i+1, j, k)) * 0.5;
756 double ve = (vitesse_j(i,j,k) + vitesse_j(i, j+1, k)) * 0.5;
757 double we = (vitesse_k(i,j,k) + vitesse_k(i, j, k+1)) * 0.5;
758 double p = pression(i,j,k);
759
760 double t = temperature(i,j,k);
761 double t_plus_k = kg==(nktot-1) ? TCL_kmax_ : temperature(i,j,k+1);
762 double t_moins_k = kg==0 ? TCL_kmin_ : temperature(i,j,k-1);
763 double dtdz = derivee_aniso(alpha, unsalpha, unsdpdm, t_moins_k, t, t_plus_k);
764 double tf_k = (t + t_moins_k) * 0.5;
765 //double tf_kp1 = (t + t_plus_k) * 0.5;
766
767 double rho = masse_vol(i,j,k);
768 double rho_moins_k = kg==0 ? rho_kmin : masse_vol(i,j,k-1);
769 double rhof_k = (rho + rho_moins_k) * 0.5;
770 double rho_plus_k = kg==(nktot-1) ? rho_kmax : masse_vol(i,j,k+1);
771 //double rhof_kp1 = (rho + rho_plus_k) * 0.5;
772 //double drhodz = derivee_aniso(alpha, unsalpha, unsdpdm, rho_moins_k, rho, rho_plus_k);
773
774 double mu = champ_mu(i,j,k);
775 double lambda = champ_lambda(i,j,k);
776 double nu = mu/rho;
777 double unsrho = 1/rho;
778
779 // derivees de vitesse pour viscosite turbulente
780 const double nu_deltaunsurdx = nu_dx_delta * unsurdx;
781 const double nu_deltaunsurdy = nu_dy_delta * unsurdy;
782
783 const double nu_deltaunsurdz = nu_dz_delta * unsurdz;
784 const double nu_deltaunsurdelta_m = nu_delta_m_delta * unsurdm;
785 const double nu_deltaunsurdelta_p = nu_delta_p_delta * unsurdp;
786
787 const double uf_i = vitesse_i(i,j,k);
788 const double uf_ip1 = vitesse_i(i+1,j,k);
789 const double uf_i_jm1 = vitesse_i(i,j-1,k);
790 const double uf_i_km1 = kg==0 ? 0. : vitesse_i(i,j,k-1);
791 const double uf_i_kp1 = kg==(nktot-1) ? 0. : vitesse_i(i,j,k+1);
792
793 const double vf_j = vitesse_j(i,j,k);
794 const double vf_jp1 = vitesse_j(i,j+1,k);
795 const double vf_j_im1 = vitesse_j(i-1,j,k);
796 const double vf_j_km1 = kg==0 ? 0. : vitesse_j(i,j,k-1);
797 const double vf_j_kp1 = kg==(nktot-1) ? 0. : vitesse_j(i,j,k+1);
798
799 const double wf_k_im1 = vitesse_k(i-1,j,k);
800 const double wf_k_jm1 = vitesse_k(i,j-1,k);
801 const double wf_kp1_im1 = kg==(nktot-1) ? 0. : vitesse_k(i-1,j,k+1);
802 const double wf_kp1_jm1 = kg==(nktot-1) ? 0. : vitesse_k(i,j-1,k+1);
803
804 const double duidx = nu_deltaunsurdx * (uf_ip1 - uf_i);
805 const double duidy_ij = nu_deltaunsurdy * (uf_i - uf_i_jm1);
806 const double duidz_ik = nu_deltaunsurdelta_m * (uf_i - uf_i_km1);
807 const double duidz_ikp1 = nu_deltaunsurdelta_p * (uf_i_kp1 - uf_i);
808 const double dujdx_ij = nu_deltaunsurdx * (vf_j - vf_j_im1);
809 const double dujdy = nu_deltaunsurdy * (vf_jp1 - vf_j);
810 const double dujdz_jk = nu_deltaunsurdelta_m * (vf_j - vf_j_km1);
811 const double dujdz_jkp1 = nu_deltaunsurdelta_p * (vf_j_kp1 - vf_j);
812 const double dukdx_ik = nu_deltaunsurdx * (wf_k - wf_k_im1);
813 const double dukdx_ikp1 = nu_deltaunsurdx * (wf_kp1 - wf_kp1_im1);
814 const double dukdy_jk = nu_deltaunsurdy * (wf_k - wf_k_jm1);
815 const double dukdy_jkp1 = nu_deltaunsurdy * (wf_kp1 - wf_kp1_jm1);
816 const double dukdz = nu_deltaunsurdz * (wf_kp1 - wf_k);
817
818 // scalaire pour diffusivite turbulente
819 const double kappa_deltaunsurdx = kappa_dx_delta * unsurdx;
820 const double kappa_deltaunsurdy = kappa_dy_delta * unsurdy;
821
822 const double kappa_deltaunsurdelta_m = kappa_delta_m_delta * unsurdm;
823 const double kappa_deltaunsurdelta_p = kappa_delta_p_delta * unsurdp;
824
825 double scalar = 0.;
826 double scalar_im1 = 0.;
827 double scalar_jm1 = 0.;
828 double scalar_km1 = 0.;
829 double scalar_kp1 = 0.;
830
831 if (flag_formulation_favre)
832 {
833 scalar = 1/masse_vol(i,j,k);
834 scalar_im1 = 1/masse_vol(i-1,j,k);
835 scalar_jm1 = 1/masse_vol(i,j-1,k);
836 scalar_km1 = kg==0 ? 1/rho_kmin : 1/masse_vol(i,j,k-1);
837 scalar_kp1 = kg==(nktot-1) ? 1/rho_kmax : 1/masse_vol(i,j,k+1);
838 }
839 if (flag_formulation_velocity)
840 {
841 scalar = masse_vol(i,j,k);
842 scalar_im1 = masse_vol(i-1,j,k);
843 scalar_jm1 = masse_vol(i,j-1,k);
844 scalar_km1 = kg==0 ? rho_kmin : masse_vol(i,j,k-1);
845 scalar_kp1 = kg==(nktot-1) ? rho_kmax : masse_vol(i,j,k+1);
846 }
847 const double dscalardxf_i = kappa_deltaunsurdx * (scalar - scalar_im1);
848 const double dscalardyf_j = kappa_deltaunsurdy * (scalar - scalar_jm1);
849 const double dscalardzf_k = kappa_deltaunsurdelta_m * (scalar - scalar_km1);
850 const double dscalardzf_kp1 = kappa_deltaunsurdelta_p * (scalar_kp1 - scalar);
851
852 // viscosite ou diffusivite turbulente
853 double nuturb_xx = 0.;
854 double nuturb_xy = 0.;
855 double nuturb_xz = 0.;
856 double nuturb_yy = 0.;
857 double nuturb_yz = 0.;
858 double nuturb_zz = 0.;
859
860 double nuturb_xx_dudx = 0.;
861 double nuturb_xy_dudy = 0.;
862 double nuturb_xz_dudz = 0.;
863 double nuturb_xy_dvdx = 0.;
864 double nuturb_yy_dvdy = 0.;
865 double nuturb_yz_dvdz = 0.;
866 double nuturb_xz_dwdx = 0.;
867 double nuturb_yz_dwdy = 0.;
868 double nuturb_zz_dwdz = 0.;
869
870 double nuturb_xx_dudx_dudx = 0.;
871 double nuturb_xy_dudy_dudy = 0.;
872 double nuturb_xz_dudz_dudz = 0.;
873 double nuturb_xy_dvdx_dvdx = 0.;
874 double nuturb_yy_dvdy_dvdy = 0.;
875 double nuturb_yz_dvdz_dvdz = 0.;
876 double nuturb_xz_dwdx_dwdx = 0.;
877 double nuturb_yz_dwdy_dwdy = 0.;
878 double nuturb_zz_dwdz_dwdz = 0.;
879 double nuturb_xy_dvdx_dudy = 0.;
880 double nuturb_xz_dwdx_dudz = 0.;
881 double nuturb_yz_dwdy_dvdz = 0.;
882
883 if (flag_turbulent_viscosity)
884 {
885 double nuturb_xy_im1 = 0.;
886 double nuturb_xy_jm1 = 0.;
887 double nuturb_xy_im1_jm1 = 0.;
888
889 double nuturb_xz_im1 = 0.;
890 double nuturb_xz_km1 = 0.;
891 double nuturb_xz_im1_km1 = 0.;
892 double nuturb_xz_kp1 = 0.;
893 double nuturb_xz_im1_kp1 = 0.;
894
895 double nuturb_yz_jm1 = 0.;
896 double nuturb_yz_km1 = 0.;
897 double nuturb_yz_jm1_km1 = 0.;
898 double nuturb_yz_kp1 = 0.;
899 double nuturb_yz_jm1_kp1 = 0.;
900
901 if (flag_formulation_favre)
902 {
903 const double rho_im1 = masse_vol(i-1,j,k);
904 const double rho_jm1 = masse_vol(i,j-1,k);
905 const double rho_im1_jm1 = masse_vol(i-1,j-1,k);
906 const double rho_im1_km1 = kg==0 ? rho_kmin : masse_vol(i-1,j,k-1);
907 const double rho_im1_kp1 = kg==(nktot-1) ? rho_kmax : masse_vol(i-1,j,k+1);
908 const double rho_jm1_km1 = kg==0 ? rho_kmin : masse_vol(i,j-1,k-1);
909 const double rho_jm1_kp1 = kg==(nktot-1) ? rho_kmax : masse_vol(i,j-1,k+1);
910
911 nuturb_xx = champ_turbulent_mu_xx(i,j,k)/rho;
912
913 nuturb_xy = champ_turbulent_mu_xy(i,j,k)/rho;
914 nuturb_xy_im1 = champ_turbulent_mu_xy(i-1,j,k)/rho_im1;
915 nuturb_xy_jm1 = champ_turbulent_mu_xy(i,j-1,k)/rho_jm1;
916 nuturb_xy_im1_jm1 = champ_turbulent_mu_xy(i-1,j-1,k)/rho_im1_jm1;
917
918 nuturb_xz = champ_turbulent_mu_xz(i,j,k)/rho;
919 nuturb_xz_im1 = champ_turbulent_mu_xz(i-1,j,k)/rho_im1;
920 nuturb_xz_km1 = kg==0 ? 0. : champ_turbulent_mu_xz(i,j,k-1)/rho_moins_k;
921 nuturb_xz_im1_km1 = kg==0 ? 0. : champ_turbulent_mu_xz(i-1,j,k-1)/rho_im1_km1;
922 nuturb_xz_kp1 = kg==(nktot-1) ? 0. : champ_turbulent_mu_xz(i,j,k+1)/rho_plus_k;
923 nuturb_xz_im1_kp1 = kg==(nktot-1) ? 0. : champ_turbulent_mu_xz(i-1,j,k+1)/rho_im1_kp1;
924
925 nuturb_yy = champ_turbulent_mu_yy(i,j,k)/rho;
926
927 nuturb_yz = champ_turbulent_mu_yz(i,j,k)/rho;
928 nuturb_yz_jm1 = champ_turbulent_mu_yz(i,j-1,k)/rho_jm1;
929 nuturb_yz_km1 = kg==0 ? 0. : champ_turbulent_mu_yz(i,j,k-1)/rho_moins_k;
930 nuturb_yz_jm1_km1 = kg==0 ? 0. : champ_turbulent_mu_yz(i,j-1,k-1)/rho_jm1_km1;
931 nuturb_yz_kp1 = kg==(nktot-1) ? 0. : champ_turbulent_mu_yz(i,j,k+1)/rho_plus_k;
932 nuturb_yz_jm1_kp1 = kg==(nktot-1) ? 0. : champ_turbulent_mu_yz(i,j-1,k+1)/rho_jm1_kp1;
933
934 nuturb_zz = champ_turbulent_mu_zz(i,j,k)/rho;
935 }
936 if (flag_formulation_velocity)
937 {
938 nuturb_xx = champ_turbulent_mu_xx(i,j,k);
939
940 nuturb_xy = champ_turbulent_mu_xy(i,j,k);
941 nuturb_xy_im1 = champ_turbulent_mu_xy(i-1,j,k);
942 nuturb_xy_jm1 = champ_turbulent_mu_xy(i,j-1,k);
943 nuturb_xy_im1_jm1 = champ_turbulent_mu_xy(i-1,j-1,k);
944
945 nuturb_xz = champ_turbulent_mu_xz(i,j,k);
946 nuturb_xz_im1 = champ_turbulent_mu_xz(i-1,j,k);
947 nuturb_xz_km1 = kg==0 ? 0. : champ_turbulent_mu_xz(i,j,k-1);
948 nuturb_xz_im1_km1 = kg==0 ? 0. : champ_turbulent_mu_xz(i-1,j,k-1);
949 nuturb_xz_kp1 = kg==(nktot-1) ? 0. : champ_turbulent_mu_xz(i,j,k+1);
950 nuturb_xz_im1_kp1 = kg==(nktot-1) ? 0. : champ_turbulent_mu_xz(i-1,j,k+1);
951
952 nuturb_yy = champ_turbulent_mu_yy(i,j,k);
953
954 nuturb_yz = champ_turbulent_mu_yz(i,j,k);
955 nuturb_yz_jm1 = champ_turbulent_mu_yz(i,j-1,k);
956 nuturb_yz_km1 = kg==0 ? 0. : champ_turbulent_mu_yz(i,j,k-1);
957 nuturb_yz_jm1_km1 = kg==0 ? 0. : champ_turbulent_mu_yz(i,j-1,k-1);
958 nuturb_yz_kp1 = kg==(nktot-1) ? 0. : champ_turbulent_mu_yz(i,j,k+1);
959 nuturb_yz_jm1_kp1 = kg==(nktot-1) ? 0. : champ_turbulent_mu_yz(i,j-1,k+1);
960
961 nuturb_zz = champ_turbulent_mu_zz(i,j,k);
962 }
963
964 const double nuturb_xy_ij = 0.25 * (nuturb_xy + nuturb_xy_im1 + nuturb_xy_jm1 + nuturb_xy_im1_jm1);
965 const double nuturb_xz_ik = 0.25 * (nuturb_xz + nuturb_xz_im1 + nuturb_xz_km1 + nuturb_xz_im1_km1);
966 const double nuturb_xz_ikp1 = 0.25 * (nuturb_xz_kp1 + nuturb_xz_im1_kp1 + nuturb_xz + nuturb_xz_im1);
967 const double nuturb_yz_jk = 0.25 * (nuturb_yz + nuturb_yz_jm1 + nuturb_yz_km1 + nuturb_yz_jm1_km1);
968 const double nuturb_yz_jkp1 = 0.25 * (nuturb_yz_kp1 + nuturb_yz_jm1_kp1 + nuturb_yz + nuturb_yz_jm1);
969
970 nuturb_xx_dudx = nuturb_xx*duidx;
971 nuturb_xy_dudy = nuturb_xy_ij*duidy_ij;
972 nuturb_xz_dudz = 0.5 * (nuturb_xz_ikp1*duidz_ikp1 + nuturb_xz_ik*duidz_ik);
973 nuturb_xy_dvdx = nuturb_xy_ij*dujdx_ij;
974 nuturb_yy_dvdy = nuturb_yy*dujdy;
975 nuturb_yz_dvdz = 0.5 * (nuturb_yz_jkp1*dujdz_jkp1 + nuturb_yz_jk*dujdz_jk);
976 nuturb_xz_dwdx = 0.5 * (nuturb_xz_ikp1*dukdx_ikp1 + nuturb_xz_ik*dukdx_ik);
977 nuturb_yz_dwdy = 0.5 * (nuturb_yz_jkp1*dukdy_jkp1 + nuturb_yz_jk*dukdy_jk);
978 nuturb_zz_dwdz = nuturb_zz*dukdz;
979
980 nuturb_xx_dudx_dudx = nuturb_xx*duidx*duidx;
981 nuturb_xy_dudy_dudy = nuturb_xy_ij*duidy_ij*duidy_ij;
982 nuturb_xz_dudz_dudz = 0.5 * (nuturb_xz_ikp1*duidz_ikp1*duidz_ikp1 + nuturb_xz_ik*duidz_ik*duidz_ik);
983 nuturb_xy_dvdx_dvdx = nuturb_xy_ij*dujdx_ij*dujdx_ij;
984 nuturb_yy_dvdy_dvdy = nuturb_yy*dujdy*dujdy;
985 nuturb_yz_dvdz_dvdz = 0.5 * (nuturb_yz_jkp1*dujdz_jkp1*dujdz_jkp1 + nuturb_yz_jk*dujdz_jk*dujdz_jk);
986 nuturb_xz_dwdx_dwdx = 0.5 * (nuturb_xz_ikp1*dukdx_ikp1*dukdx_ikp1 + nuturb_xz_ik*dukdx_ik*dukdx_ik);
987 nuturb_yz_dwdy_dwdy = 0.5 * (nuturb_yz_jkp1*dukdy_jkp1*dukdy_jkp1 + nuturb_yz_jk*dukdy_jk*dukdy_jk);
988 nuturb_zz_dwdz_dwdz = nuturb_zz*dukdz*dukdz;
989 nuturb_xy_dvdx_dudy = nuturb_xy_ij*dujdx_ij*duidy_ij;
990 nuturb_xz_dwdx_dudz = 0.5 * (nuturb_xz_ikp1*dukdx_ikp1*duidz_ikp1 + nuturb_xz_ik*dukdx_ik*duidz_ik);
991 nuturb_yz_dwdy_dvdz = 0.5 * (nuturb_yz_jkp1*dukdy_jkp1*dujdz_jkp1 + nuturb_yz_jk*dukdy_jk*dujdz_jk);
992 }
993
994 double kappaturb_x = 0.;
995 double kappaturb_y = 0.;
996 double kappaturb_z = 0.;
997
998 double kappaturb_x_dscalardx = 0.;
999 double kappaturb_y_dscalardy = 0.;
1000 double kappaturb_z_dscalardz = 0.;
1001
1002 double kappaturb_x_dscalardx_dscalardx = 0.;
1003 double kappaturb_y_dscalardy_dscalardy = 0.;
1004 double kappaturb_z_dscalardz_dscalardz = 0.;
1005
1006 if (flag_turbulent_diffusivity)
1007 {
1008 double kappaturb_x_im1 = 0.;
1009 double kappaturb_y_jm1 = 0.;
1010 double kappaturb_z_km1 = 0.;
1011 double kappaturb_z_kp1 = 0.;
1012
1013 if (flag_formulation_favre)
1014 {
1015 const double rho_im1 = masse_vol(i-1,j,k);
1016 const double rho_jm1 = masse_vol(i,j-1,k);
1017
1018 kappaturb_x = champ_turbulent_kappa_x(i,j,k)/(rho*cp_gaz);
1019 kappaturb_x_im1 = champ_turbulent_kappa_x(i-1,j,k)/(rho_im1*cp_gaz);
1020
1021 kappaturb_y = champ_turbulent_kappa_y(i,j,k)/(rho*cp_gaz);
1022 kappaturb_y_jm1 = champ_turbulent_kappa_y(i,j-1,k)/(rho_jm1*cp_gaz);
1023
1024 kappaturb_z = champ_turbulent_kappa_z(i,j,k)/(rho*cp_gaz);
1025 kappaturb_z_km1 = kg==0 ? 0. : champ_turbulent_kappa_z(i,j,k-1)/(rho_moins_k*cp_gaz);
1026 kappaturb_z_kp1 = kg==(nktot-1) ? 0. : champ_turbulent_kappa_z(i,j,k+1)/(rho_plus_k*cp_gaz);
1027 }
1028 if (flag_formulation_velocity)
1029 {
1030 kappaturb_x = champ_turbulent_kappa_x(i,j,k);
1031 kappaturb_x_im1 = champ_turbulent_kappa_x(i-1,j,k);
1032
1033 kappaturb_y = champ_turbulent_kappa_y(i,j,k);
1034 kappaturb_y_jm1 = champ_turbulent_kappa_y(i,j-1,k);
1035
1036 kappaturb_z = champ_turbulent_kappa_z(i,j,k);
1037 kappaturb_z_km1 = kg==0 ? 0. : champ_turbulent_kappa_z(i,j,k-1);
1038 kappaturb_z_kp1 = kg==(nktot-1) ? 0. : champ_turbulent_kappa_z(i,j,k+1);
1039 }
1040
1041 const double kappaturb_xf_i = 0.5 * (kappaturb_x + kappaturb_x_im1);
1042 const double kappaturb_yf_j = 0.5 * (kappaturb_y + kappaturb_y_jm1);
1043 const double kappaturb_zf_k = 0.5 * (kappaturb_z + kappaturb_z_km1);
1044 const double kappaturb_zf_kp1 = 0.5 * (kappaturb_z + kappaturb_z_kp1);
1045
1046 kappaturb_x_dscalardx = kappaturb_xf_i*dscalardxf_i;
1047 kappaturb_y_dscalardy = kappaturb_yf_j*dscalardyf_j;
1048 kappaturb_z_dscalardz = 0.5 * (kappaturb_zf_k*dscalardzf_k + kappaturb_zf_kp1*dscalardzf_kp1);
1049
1050 kappaturb_x_dscalardx_dscalardx = kappaturb_xf_i*dscalardxf_i*dscalardxf_i;
1051 kappaturb_y_dscalardy_dscalardy = kappaturb_yf_j*dscalardyf_j*dscalardyf_j;
1052 kappaturb_z_dscalardz_dscalardz = 0.5 * (kappaturb_zf_k*dscalardzf_k*dscalardzf_k + kappaturb_zf_kp1*dscalardzf_kp1*dscalardzf_kp1);
1053 }
1054
1055 // terme sous maille structurel
1056 double structural_uu = 0.;
1057 double structural_uv = 0.;
1058 double structural_uw = 0.;
1059 double structural_vv = 0.;
1060 double structural_vw = 0.;
1061 double structural_ww = 0.;
1062
1063 double structural_uu_dudx = 0.;
1064 double structural_uv_dudy = 0.;
1065 double structural_uw_dudz = 0.;
1066 double structural_uv_dvdx = 0.;
1067 double structural_vv_dvdy = 0.;
1068 double structural_vw_dvdz = 0.;
1069 double structural_uw_dwdx = 0.;
1070 double structural_vw_dwdy = 0.;
1071 double structural_ww_dwdz = 0.;
1072
1073 if (flag_structural_uu)
1074 {
1075 const double structural_uu_e = structural_uu_xx(i,j,k);
1076
1077 const double structural_uv_ij = structural_uu_xy(i,j,k);
1078
1079 const double structural_uw_ik = structural_uu_xz(i,j,k);
1080 const double structural_uw_ikp1 = kg==(nktot-1) ? 0. : structural_uu_xz(i,j,k+1);
1081
1082 const double structural_vv_e = structural_uu_yy(i,j,k);
1083
1084 const double structural_vw_jk = structural_uu_yz(i,j,k);
1085 const double structural_vw_jkp1 = kg==(nktot-1) ? 0. : structural_uu_yz(i,j,k+1);
1086
1087 const double structural_ww_e = structural_uu_zz(i,j,k);
1088
1089 structural_uu = structural_uu_e;
1090 structural_uv = structural_uv_ij;
1091 structural_uw = 0.5 * (structural_uw_ikp1 + structural_uw_ik);
1092 structural_vv = structural_vv_e;
1093 structural_vw = 0.5 * (structural_vw_jkp1 + structural_vw_jk);
1094 structural_ww = structural_ww_e;
1095
1096 structural_uu_dudx = structural_uu_e*duidx;
1097 structural_uv_dudy = structural_uv_ij*duidy_ij;
1098 structural_uw_dudz = 0.5 * (structural_uw_ikp1*duidz_ikp1 + structural_uw_ik*duidz_ik);
1099 structural_uv_dvdx = structural_uv_ij*dujdx_ij;
1100 structural_vv_dvdy = structural_vv_e*dujdy;
1101 structural_vw_dvdz = 0.5 * (structural_vw_jkp1*dujdz_jkp1 + structural_vw_jk*dujdz_jk);
1102 structural_uw_dwdx = 0.5 * (structural_uw_ikp1*dukdx_ikp1 + structural_uw_ik*dukdx_ik);
1103 structural_vw_dwdy = 0.5 * (structural_vw_jkp1*dukdy_jkp1 + structural_vw_jk*dukdy_jk);
1104 structural_ww_dwdz = structural_ww_e*dukdz;
1105 }
1106
1107 double structural_uscalar = 0.;
1108 double structural_vscalar = 0.;
1109 double structural_wscalar = 0.;
1110
1111 double structural_uscalar_dscalardx = 0.;
1112 double structural_vscalar_dscalardy = 0.;
1113 double structural_wscalar_dscalardz = 0.;
1114
1115 if (flag_structural_uscalar)
1116 {
1117 const double structural_uscalarf_i = structural_uscalar_x(i,j,k);
1118
1119 const double structural_vscalarf_j = structural_uscalar_y(i,j,k);
1120
1121 const double structural_wscalarf_k = structural_uscalar_z(i,j,k);
1122 const double structural_wscalarf_kp1 = kg==(nktot-1) ? 0. : structural_uscalar_z(i,j,k+1);
1123
1124 structural_uscalar = structural_uscalarf_i;
1125 structural_vscalar = structural_vscalarf_j;
1126 structural_wscalar = 0.5 * (structural_wscalarf_kp1 + structural_wscalarf_k);
1127
1128 structural_uscalar_dscalardx = structural_uscalarf_i*dscalardxf_i;
1129 structural_vscalar_dscalardy = structural_vscalarf_j*dscalardyf_j;
1130 structural_wscalar_dscalardz = 0.5 * (structural_wscalarf_kp1*dscalardzf_kp1 + structural_wscalarf_k*dscalardzf_k);
1131 }
1132
1133#define AJOUT(somme,val) moy[somme] += val
1134 // moyennes
1135 AJOUT(U_MOY,uf);
1136 AJOUT(V_MOY,vf);
1137 AJOUT(W_MOY,we);
1138 // moyennes des carres
1139 AJOUT(UU_MOY,uf*uf);
1140 AJOUT(VV_MOY,vf*vf);
1141 AJOUT(WW_MOY,0.5*(wf_k*wf_k+wf_kp1*wf_kp1));
1142 // correlations
1143 AJOUT(UV_MOY,ue*ve);
1144 AJOUT(VW_MOY,ve*we);
1145 AJOUT(UW_MOY,ue*we);
1146 AJOUT(UP_MOY,ue*p);
1147 AJOUT(VP_MOY,ve*p);
1148 AJOUT(WP_MOY,we*p);
1149 // 3 eme ordre
1150 AJOUT(UUU_MOY,uf*uf*uf);
1151 AJOUT(VVV_MOY,vf*vf*vf);
1152 AJOUT(WWW_MOY,0.5*(wf_k*wf_k*wf_k+wf_kp1*wf_kp1*wf_kp1));
1153 // energie
1154 AJOUT(RHO_MOY,rho);
1155 AJOUT(T_MOY,t);
1156 AJOUT(UT_MOY,ue*t);
1157 AJOUT(VT_MOY,ve*t);
1158 AJOUT(WT_MOY,we*t);
1159 AJOUT(URHO_MOY,ue*rho);
1160 AJOUT(VRHO_MOY,ve*rho);
1161 AJOUT(WRHO_MOY,we*rho);
1162 AJOUT(RHOP_MOY,rho*p);
1163 AJOUT(TP_MOY,t*p);
1164 AJOUT(P_MOY,p);
1165 AJOUT(T2_MOY,t*t);
1166 AJOUT(T3_MOY,t*t*t);
1167 AJOUT(T4_MOY,t*t*t*t);
1168 AJOUT(RHO2_MOY,rho*rho);
1169 AJOUT(RHO3_MOY,rho*rho*rho);
1170 AJOUT(RHO4_MOY,rho*rho*rho*rho);
1171 AJOUT(UUW_MOY,ue*ue*ve);
1172 AJOUT(VVW_MOY,we*we*ve);
1173 AJOUT(U4_MOY,uf*uf*uf*uf);
1174 AJOUT(V4_MOY,vf*vf*vf*vf);
1175 AJOUT(W4_MOY,0.5*(wf_k*wf_k*wf_k*wf_k+wf_kp1*wf_kp1*wf_kp1*wf_kp1));
1176 AJOUT(MU_MOY,mu);
1177 AJOUT(LAMBDA_MOY,lambda);
1178 AJOUT(PP_MOY,p*p);
1179 AJOUT(WFACE_MOY,wf_k);
1180 AJOUT(NU_MOY,nu);
1181 AJOUT(UN_SUR_RHO_MOY,unsrho);
1182 AJOUT(NU2_MOY,nu*nu);
1183 AJOUT(MU2_MOY,mu*mu);
1184 AJOUT(NUTURB_MOY,nuturb_xx);
1185 AJOUT(LAMBDADTDZ_MOY,lambda*dtdz);
1186 AJOUT(KAPPATURB_MOY,kappaturb_x);
1187 AJOUT(RHOWFACE_MOY,rhof_k*wf_k);
1188 AJOUT(RHOTWFACE_MOY,rhof_k*tf_k*wf_k);
1189 AJOUT(RHOUU_MOY,rho*uf*uf);
1190 AJOUT(RHOVV_MOY,rho*vf*vf);
1191 AJOUT(RHOWW_MOY,rho*0.5*(wf_k*wf_k+wf_kp1*wf_kp1));
1192 AJOUT(RHOUV_MOY,rho*ue*ve);
1193 AJOUT(RHOVW_MOY,rho*ve*we);
1194 AJOUT(RHOUW_MOY,rho*ue*we);
1195 AJOUT(RHOUT_MOY,rho*ue*t);
1196 AJOUT(RHOVT_MOY,rho*ve*t);
1197 AJOUT(RHOWT_MOY,rho*we*t);
1198 AJOUT(NUTURB_XX_MOY,nuturb_xx);
1199 AJOUT(NUTURB_XY_MOY,nuturb_xy);
1200 AJOUT(NUTURB_XZ_MOY,nuturb_xz);
1201 AJOUT(NUTURB_YY_MOY,nuturb_yy);
1202 AJOUT(NUTURB_YZ_MOY,nuturb_yz);
1203 AJOUT(NUTURB_ZZ_MOY,nuturb_zz);
1204 AJOUT(KAPPATURB_X_MOY,kappaturb_x);
1205 AJOUT(KAPPATURB_Y_MOY,kappaturb_y);
1206 AJOUT(KAPPATURB_Z_MOY,kappaturb_z);
1207 AJOUT(NUTURB_XX_DUDX_MOY,nuturb_xx_dudx);
1208 AJOUT(NUTURB_XY_DUDY_MOY,nuturb_xy_dudy);
1209 AJOUT(NUTURB_XZ_DUDZ_MOY,nuturb_xz_dudz);
1210 AJOUT(NUTURB_XY_DVDX_MOY,nuturb_xy_dvdx);
1211 AJOUT(NUTURB_YY_DVDY_MOY,nuturb_yy_dvdy);
1212 AJOUT(NUTURB_YZ_DVDZ_MOY,nuturb_yz_dvdz);
1213 AJOUT(NUTURB_XZ_DWDX_MOY,nuturb_xz_dwdx);
1214 AJOUT(NUTURB_YZ_DWDY_MOY,nuturb_yz_dwdy);
1215 AJOUT(NUTURB_ZZ_DWDZ_MOY,nuturb_zz_dwdz);
1216 AJOUT(KAPPATURB_X_DSCALARDX_MOY,kappaturb_x_dscalardx);
1217 AJOUT(KAPPATURB_Y_DSCALARDY_MOY,kappaturb_y_dscalardy);
1218 AJOUT(KAPPATURB_Z_DSCALARDZ_MOY,kappaturb_z_dscalardz);
1219 AJOUT(STRUCTURAL_UU_MOY,structural_uu);
1220 AJOUT(STRUCTURAL_UV_MOY,structural_uv);
1221 AJOUT(STRUCTURAL_UW_MOY,structural_uw);
1222 AJOUT(STRUCTURAL_VV_MOY,structural_vv);
1223 AJOUT(STRUCTURAL_VW_MOY,structural_vw);
1224 AJOUT(STRUCTURAL_WW_MOY,structural_ww);
1225 AJOUT(STRUCTURAL_USCALAR_MOY,structural_uscalar);
1226 AJOUT(STRUCTURAL_VSCALAR_MOY,structural_vscalar);
1227 AJOUT(STRUCTURAL_WSCALAR_MOY,structural_wscalar);
1228 AJOUT(NUTURB_XX_DUDX_DUDX_MOY,nuturb_xx_dudx_dudx);
1229 AJOUT(NUTURB_XY_DUDY_DUDY_MOY,nuturb_xy_dudy_dudy);
1230 AJOUT(NUTURB_XZ_DUDZ_DUDZ_MOY,nuturb_xz_dudz_dudz);
1231 AJOUT(NUTURB_XY_DVDX_DVDX_MOY,nuturb_xy_dvdx_dvdx);
1232 AJOUT(NUTURB_YY_DVDY_DVDY_MOY,nuturb_yy_dvdy_dvdy);
1233 AJOUT(NUTURB_YZ_DVDZ_DVDZ_MOY,nuturb_yz_dvdz_dvdz);
1234 AJOUT(NUTURB_XZ_DWDX_DWDX_MOY,nuturb_xz_dwdx_dwdx);
1235 AJOUT(NUTURB_YZ_DWDY_DWDY_MOY,nuturb_yz_dwdy_dwdy);
1236 AJOUT(NUTURB_ZZ_DWDZ_DWDZ_MOY,nuturb_zz_dwdz_dwdz);
1237 AJOUT(NUTURB_XY_DVDX_DUDY_MOY,nuturb_xy_dvdx_dudy);
1238 AJOUT(NUTURB_XZ_DWDX_DUDZ_MOY,nuturb_xz_dwdx_dudz);
1239 AJOUT(NUTURB_YZ_DWDY_DVDZ_MOY,nuturb_yz_dwdy_dvdz);
1240 AJOUT(KAPPATURB_X_DSCALARDX_DSCALARDX_MOY,kappaturb_x_dscalardx_dscalardx);
1241 AJOUT(KAPPATURB_Y_DSCALARDY_DSCALARDY_MOY,kappaturb_y_dscalardy_dscalardy);
1242 AJOUT(KAPPATURB_Z_DSCALARDZ_DSCALARDZ_MOY,kappaturb_z_dscalardz_dscalardz);
1243 AJOUT(STRUCTURAL_UU_DUDX_MOY,structural_uu_dudx);
1244 AJOUT(STRUCTURAL_UV_DUDY_MOY,structural_uv_dudy);
1245 AJOUT(STRUCTURAL_UW_DUDZ_MOY,structural_uw_dudz);
1246 AJOUT(STRUCTURAL_UV_DVDX_MOY,structural_uv_dvdx);
1247 AJOUT(STRUCTURAL_VV_DVDY_MOY,structural_vv_dvdy);
1248 AJOUT(STRUCTURAL_VW_DVDZ_MOY,structural_vw_dvdz);
1249 AJOUT(STRUCTURAL_UW_DWDX_MOY,structural_uw_dwdx);
1250 AJOUT(STRUCTURAL_VW_DWDY_MOY,structural_vw_dwdy);
1251 AJOUT(STRUCTURAL_WW_DWDZ_MOY,structural_ww_dwdz);
1252 AJOUT(STRUCTURAL_USCALAR_DSCALARDX_MOY,structural_uscalar_dscalardx);
1253 AJOUT(STRUCTURAL_VSCALAR_DSCALARDY_MOY,structural_vscalar_dscalardy);
1254 AJOUT(STRUCTURAL_WSCALAR_DSCALARDZ_MOY,structural_wscalar_dscalardz);
1255 AJOUT(LAMBDADTDZ2_MOY,lambda*dtdz*lambda*dtdz);
1256#undef AJOUT
1257 }
1258 }
1259 // facteur 1./(ni*nj) car sommation de ni*nj valeurs sur des mailles de meme taille
1260 // facteur delta_z / taille_totale_en_z car mailles non uniformes en z
1261 const int ni_tot = pression.get_domaine().get_nb_elem_tot(DIRECTION_I);
1262 const int nj_tot = pression.get_domaine().get_nb_elem_tot(DIRECTION_J);
1263
1264 double facteur = 1./(double)(ni_tot * nj_tot);
1265
1266 for (int i = 0; i < nval_; i++)
1267 tmp(k + offset, i) = moy[i] * facteur;
1268 }
1269 // Somme sur tous les processeurs:
1271
1272 // Sur processeur 0, ajout de la contribution a l'integrale temporelle:
1274 {
1275 for (int i = 0; i < nval_; i++)
1276 {
1277 for (int k = 0; k < nktot; k++)
1278 {
1279 integrale_temporelle_[i][k] += tmp(k, i) * dt;
1280 moyenne_spatiale_instantanee_[i][k] = tmp(k, i);
1281 }
1282 }
1283 t_integration_ += dt;
1284 }
1285}
1286
1287//modif AT 20/06/2013
1288// ce post traitement calcule les correlations en 1 points sur lenergie cinetique turbulente.
1289
1290void Statistiques_dns_ijk::update_stat_k(const IJK_Field_vector3_double& vitesse,
1291 const IJK_Field_double& pression,
1292 const IJK_Field_double& masse_vol,
1293 const IJK_Field_double& champ_mu,
1294 const double pression_thermodynamique,
1295 const double terme_source_acceleration,
1296 double dt)
1297{
1298 if (elem_coord_.size_array() == 0)
1299 {
1300 Cerr << "Erreur dans Statistiques_dns_ijk::update_stat: non initialise" << finl;
1301 Process::exit();
1302 }
1303 Cerr.setf(ios::scientific);
1304 Cerr.precision(20);
1305 // Copie des champs utiles des vitesses
1306 const IJK_Field_double& vitesse_i = vitesse[0];
1307 const IJK_Field_double& vitesse_j = vitesse[1];
1308 const IJK_Field_double& vitesse_k = vitesse[2];
1309
1310 // copie des champs moyen existant
1311 const ArrOfDouble& vit_moy_i = vit_moy_[0];
1312 const ArrOfDouble& vit_moy_j = vit_moy_[1];
1313 const ArrOfDouble& vit_moy_k = vit_moy_[2]; // Ici c'est bien la vitesse aux face !!!
1314 const ArrOfDouble& rho_moy = rho_moy_; // DD 16/10/2015
1315 const ArrOfDouble& nu_moy = nu_moy_; // DD 16/10/2015
1316
1317 // Nombre total de mailles en K
1318 const int nktot = pression.get_domaine().get_nb_items_global(Domaine_IJK::ELEM, DIRECTION_K);
1319
1320 // Nombre local de mailles en K
1321 const int kmax = pression.nk();
1322 const int offsetk = pression.get_domaine().get_offset_local(DIRECTION_K);
1323
1324 DoubleTab tmp(nktot, kval_);
1325 const int imax = pression.ni();
1326 const int jmax = pression.nj();
1327
1328 const double unsurdx=1./dx_;
1329 const double unsurdy=1./dy_;
1330
1331 // on calcule les proprietes du fluides sur la Cl :
1332 const double rho_kmin = calculer_rho_air(TCL_kmin_, constante_specifique_gaz_, pression_thermodynamique);
1333 const double rho_kmax = calculer_rho_air(TCL_kmax_, constante_specifique_gaz_, pression_thermodynamique);
1334 /*
1335 double lambda_kmin = calculer_lambda_air(TCL_kmin);
1336 double lambda_kmax = calculer_lambda_air(TCL_kmax);
1337 */
1338
1339 const Domaine_IJK& split = pression.get_domaine();
1340 IJK_Field_double Ener_cin;
1341
1342
1343 Ener_cin.allocate(split, Domaine_IJK::ELEM, 1);
1344 Ener_cin.data()=0;
1345
1346 IJK_Field_double Div_fluc_U;
1347 Div_fluc_U.allocate(split, Domaine_IJK::ELEM, 1);
1348 Div_fluc_U.data()=0;
1349
1350 IJK_Field_double Div_tot_U;
1351 Div_tot_U.allocate(split, Domaine_IJK::ELEM, 1);
1352 Div_tot_U.data()=0;
1353 // on precalcule l'ener cinetique fluctuations de pression !!! (le div u
1354 // pour la paroi
1355 int KMAX = kmax;
1356 if ((kmax+offsetk)!=nktot) // si je ne suis pas a la paroi je remplit le ghost
1357 KMAX++;
1358 int KMIN = 0;
1359 if (offsetk!=0)// si je ne suis pas a la paroi je remplit le ghost
1360 KMIN--;
1361
1362 for (int k = KMIN; k < KMAX; k++)
1363 {
1364 const int kg=k+offsetk; // position en k sur la grille globale
1365 const double unsurdz=1./tab_dz_[kg]; // taille de la maille dans la direction z
1366 for (int j = -1; j < (jmax+1); j++)
1367 for (int i = -1; i < (imax+1); i++)
1368 {
1369 double uf_i = vitesse_i(i,j,k);
1370 double vf_j = vitesse_j(i,j,k);
1371 double wf_k = vitesse_k(i,j,k);
1372
1373 double uf_ip1 = vitesse_i(i+1,j,k);
1374 double vf_jp1 = vitesse_j(i,j+1,k);
1375 double wf_kp1 = vitesse_k(i,j,k+1);
1376
1377 // divergence de la valeur totale
1378 double duidx=(uf_ip1-uf_i)*unsurdx;
1379 double dujdy=(vf_jp1-vf_j)*unsurdy;
1380 double dukdz=(wf_kp1-wf_k)*unsurdz;
1381 double divu= duidx+dujdy+dukdz;
1382 Div_tot_U(i,j,k)= divu;
1383
1384 // ici on calcule les fluctuations
1385 uf_i -= vit_moy_i[kg];
1386 vf_j -= vit_moy_j[kg];
1387 wf_k -= vit_moy_k[kg];
1388
1389 uf_ip1 -= vit_moy_i[kg];
1390 vf_jp1 -= vit_moy_j[kg];
1391 wf_kp1 -= vit_moy_k[kg+1];
1392
1393 double Ec=0.25*(uf_i*uf_i+uf_ip1*uf_ip1+vf_j*vf_j+vf_jp1*vf_jp1+wf_k*wf_k+wf_kp1*wf_kp1);
1394 Ener_cin(i,j,k)=Ec;
1395
1396 // divergence des fluctuations
1397 duidx=(uf_ip1-uf_i)*unsurdx;
1398 dujdy=(vf_jp1-vf_j)*unsurdy;
1399 dukdz=(wf_kp1-wf_k)*unsurdz;
1400 divu= duidx+dujdy+dukdz;
1401 Div_fluc_U(i,j,k)=divu;
1402 }
1403 }
1404 for (int k = 0; k < kmax; k++)
1405 {
1406 // Calcul des moyennes spatiales sur le plan ij
1407 const int kg=k+offsetk; // position en k sur la grille globale
1408 const double unsurdz=1./tab_dz_[k+offsetk];
1409 double delta_m = kg== 0 ? tab_dz_[kg] *0.5 : ( tab_dz_[kg] + tab_dz_[kg-1] ) * 0.5; // distance entre les centre de gravite avec gestion de la paroi !!!
1410 double delta_p = kg==(nktot-1) ? tab_dz_[kg] *0.5 : ( tab_dz_[kg] + tab_dz_[kg+1] ) * 0.5; // distance entre les centre de gravite
1411
1412 double alpha = delta_p/delta_m; // rapport des distance
1413 double unsalpha = delta_m/delta_p; //
1414 double unsdpdm = 1. / ( delta_p + delta_m );
1415 // On y stocke la somme de toutes les valeurs sur le plan ij, on divisera apres
1416 ArrOfDouble moy(kval_);
1417 for (int i = 0; i < kval_; i++)
1418 {
1419 moy[i] = 0.;
1420 }
1421 for (int j = 0; j < jmax; j++)
1422 {
1423 for (int i = 0; i < imax; i++)
1424 {
1425 // calcul des fluctuations de vitesses aux faces.
1426 const double uf_i = vitesse_i(i,j,k) -vit_moy_i[kg];
1427 const double uf_ip1 = vitesse_i(i+1,j,k)-vit_moy_i[kg];
1428 const double vf_j = vitesse_j(i,j,k) -vit_moy_j[kg];
1429 const double vf_jp1 = vitesse_j(i,j+1,k)-vit_moy_j[kg];
1430 const double wf_k = vitesse_k(i,j,k) -vit_moy_k[kg];
1431 const double wf_kp1 = vitesse_k(i,j,k+1)-vit_moy_k[kg+1];
1432
1433 // Fluctuations de vitesses aux elems
1434 const double ue = (uf_ip1+uf_i)*0.5;
1435 const double ve = (vf_jp1+vf_j)*0.5;
1436 const double we = (wf_kp1+wf_k)*0.5;
1437
1438 // vitesses aux elems
1439 const double uetot = 0.5*(vitesse_i(i+1,j,k) + vitesse_i(i,j,k));
1440 const double vetot = 0.5*(vitesse_j(i,j+1,k) + vitesse_j(i,j,k));
1441 const double wetot = 0.5*(vitesse_k(i,j,k+1) + vitesse_k(i,j,k));
1442
1443
1444 // calcul des grandeurs composites a partir de ces vitesse !!!
1445 const double duidx=(uf_ip1-uf_i)*unsurdx;
1446 const double dujdy=(vf_jp1-vf_j)*unsurdy;
1447 const double dukdz=(wf_kp1-wf_k)*unsurdz;
1448 const double divu= Div_fluc_U(i,j,k);
1449
1450 // calcul des grandeurs scalaire !!
1451 const double unsurrho = 1./masse_vol(i,j,k);
1452 const double rho = masse_vol(i,j,k);
1453 const double mu = champ_mu(i,j,k);
1454 const double nu = mu * unsurrho;
1455 const double p = pression(i,j,k);
1456 const double unsurrho_moy = 1./rho_moy[kg];
1457 const double rho_fluc = (rho - rho_moy[kg]);
1458 const double nu_fluc = (nu - nu_moy[kg]);
1459
1460 // derivee de Ec
1461 const double Ec = Ener_cin(i,j,k);
1462 const double Ec_plus_i = Ener_cin(i+1,j,k);
1463 const double Ec_plus_j = Ener_cin(i,j+1,k);
1464 const double Ec_plus_k = kg==(nktot-1)? 0. :Ener_cin(i,j,k+1);
1465
1466 const double Ec_moins_i = Ener_cin(i-1,j,k);
1467 const double Ec_moins_j = Ener_cin(i,j-1,k);
1468 const double Ec_moins_k = kg==0 ? 0. : Ener_cin(i,j,k-1);
1469
1470 double dEcdx = (Ec_plus_i - Ec_moins_i) * 0.5 * unsurdx;
1471 double dEcdy = (Ec_plus_j - Ec_moins_j) * 0.5 * unsurdy;
1472 double dEcdz = derivee_aniso(alpha, unsalpha, unsdpdm, Ec_moins_k, Ec, Ec_plus_k);
1473
1474 // derivee de Rho
1475 const double rho_plus_i = masse_vol(i+1,j,k);
1476 const double rho_plus_j = masse_vol(i,j+1,k);
1477 const double rho_plus_k = kg==(nktot-1) ? rho_kmax : masse_vol(i,j,k+1);
1478
1479 const double rho_moins_i = masse_vol(i-1,j,k);
1480 const double rho_moins_j = masse_vol(i,j-1,k);
1481 const double rho_moins_k = kg==0 ? rho_kmin : masse_vol(i,j,k-1);
1482
1483 const double drhodx = (rho_plus_i - rho_moins_i ) * 0.5 * unsurdx;
1484 const double drhody = (rho_plus_j - rho_moins_j ) * 0.5 * unsurdy;
1485 const double drhodz = derivee_aniso(alpha , unsalpha ,unsdpdm ,rho_moins_k, rho , rho_plus_k);
1486
1487 // derivation direction x de Uy
1488 double Vf_im = vitesse_j(i-1,j,k)-vit_moy_j[kg];
1489 double dujdx_0 = (vf_j - Vf_im ) * unsurdx;
1490
1491 double nu_arrette_ij = 0.25*( ( champ_mu(i,j,k) /masse_vol(i,j,k))
1492 + ( champ_mu(i-1,j,k) /masse_vol(i-1,j,k))
1493 + ( champ_mu(i,j-1,k) /masse_vol(i,j-1,k))
1494 + ( champ_mu(i-1,j-1,k)/masse_vol(i-1,j-1,k)) );
1495 double contrib_dujdx = dujdx_0*dujdx_0;
1496
1497 // derivation direction x de de Uz
1498 double Wf_mi = vitesse_k(i-1,j,k)-vit_moy_k[kg];
1499 double dukdx_0 = (wf_k - Wf_mi ) * unsurdx;
1500
1501 double Wf_mipk = vitesse_k(i-1,j,k+1)-vit_moy_k[kg+1];
1502 double dukdx_1 = (wf_kp1 - Wf_mipk ) * unsurdx;
1503
1504 double nu_face_i = 0.5 *( ( champ_mu(i,j,k) /masse_vol(i,j,k))
1505 + ( champ_mu(i-1,j,k)/masse_vol(i-1,j,k)) );
1506 double contrib_dukdx = (dukdx_0* dukdx_0 + dukdx_1 * dukdx_1) *0.5;
1507
1508 // derivation direction y de Ux
1509 double Uf_mj = vitesse_i(i,j-1,k)-vit_moy_i[kg];
1510 double duidy_0 = (uf_i - Uf_mj ) * unsurdy;
1511 double contrib_duidy = duidy_0*duidy_0;
1512
1513 // derivation direction y de Uz
1514 double Wf_mj = vitesse_k(i,j-1,k)-vit_moy_k[kg];
1515 double dukdy_0 = (wf_k - Wf_mj ) * unsurdy;
1516
1517 double Wf_mj_pk = vitesse_k(i,j-1,k+1)-vit_moy_k[kg+1];
1518 double dukdy_1 = (wf_kp1 - Wf_mj_pk ) * unsurdy;
1519
1520 double nu_face_j = 0.5 *( ( champ_mu(i,j,k) /masse_vol(i,j,k))
1521 + ( champ_mu(i,j-1,k)/masse_vol(i,j-1,k)) );
1522 double contrib_dukdy = (dukdy_0* dukdy_0 + dukdy_1 * dukdy_1) *0.5;
1523
1524 // derivation direction z de Ux
1525 double Uf_mk_0 = kg == 0 ? 0. : vitesse_i(i,j,k-1)-vit_moy_i[kg-1];
1526 double Uf_pk_0 = kg == (nktot-1) ? 0. : vitesse_i(i,j,k+1)-vit_moy_i[kg+1];
1527 double duidz_0 = derivee_aniso(alpha, unsalpha, unsdpdm, Uf_mk_0, uf_i, Uf_pk_0);
1528
1529 double Uf_mk_1 = kg == 0 ? 0. : vitesse_i(i+1,j,k-1)-vit_moy_i[kg-1];
1530 double Uf_pk_1 = kg == (nktot-1) ? 0. : vitesse_i(i+1,j,k+1)-vit_moy_i[kg+1];
1531 double duidz_1 = derivee_aniso(alpha, unsalpha, unsdpdm, Uf_mk_1, uf_i, Uf_pk_1);
1532
1533 double Uf_mk_0_tot = kg == 0 ? 0. : vitesse_i(i,j,k-1);
1534 double Uf_pk_0_tot = kg == (nktot-1) ? 0. : vitesse_i(i,j,k+1);
1535 double duidz_0_tot = derivee_aniso(alpha , unsalpha ,unsdpdm ,Uf_mk_0_tot, vitesse_i(i,j,k) , Uf_pk_0_tot);
1536
1537 double Uf_mk_1_tot = kg == 0 ? 0. : vitesse_i(i+1,j,k-1);
1538 double Uf_pk_1_tot = kg == (nktot-1) ? 0. : vitesse_i(i+1,j,k+1);
1539 double duidz_1_tot = derivee_aniso(alpha , unsalpha ,unsdpdm ,Uf_mk_1_tot, vitesse_i(i+1,j,k) , Uf_pk_1_tot);
1540
1541 double contrib_duidz = duidz_0 * duidz_0;
1542 double contrib_duidz_tot = duidz_0 * duidz_0_tot;
1543
1544 // derivation direction z de Uy
1545 double Vf_mk= kg == 0 ? 0. : vitesse_j(i,j,k-1)-vit_moy_j[kg-1];
1546 double Vf_pk= kg == (nktot-1) ? 0. : vitesse_j(i,j,k+1)-vit_moy_j[kg+1];
1547 double dujdz_0 = derivee_aniso(alpha , unsalpha ,unsdpdm ,Vf_mk, vf_j , Vf_pk);
1548
1549 double Vf_mk_1= kg == 0 ? 0. : vitesse_j(i,j+1,k-1)-vit_moy_j[kg-1];
1550 double Vf_pk_1= kg == (nktot-1) ? 0. : vitesse_j(i,j+1,k+1)-vit_moy_j[kg+1];
1551 double dujdz_1 = derivee_aniso(alpha , unsalpha ,unsdpdm ,Vf_mk_1, vf_jp1 , Vf_pk_1);
1552
1553 double contrib_dujdz = dujdz_0 * dujdz_0;
1554
1555 double contrib_div = (duidx*duidx + dujdy*dujdy + dukdz*dukdz);
1556
1557 // derivation direction z de Uz
1558 double dukdz_tot = ( vitesse_k(i,j,k+1) - vitesse_k(i,j,k) ) * unsurdz;
1559
1560 // c'est parti pour les vitesses moyennes
1561 // dUx/dz
1562 double Umoyf_0 = vit_moy_i[kg];
1563 double Umoyf_1 = kg == (nktot-1) ? 0. : vit_moy_i[kg+1];
1564 double Umoyf_00 = kg == 0 ? 0. : vit_moy_i[kg-1];
1565 double dUmoydz = derivee_aniso(alpha, unsalpha, unsdpdm, Umoyf_00, Umoyf_0, Umoyf_1);
1566
1567 // dUz/dz
1568 double Wmoyf_0 = vit_moy_k[kg];
1569 double Wmoyf_1 = vit_moy_k[kg+1];
1570 double dWmoydz = (Wmoyf_1-Wmoyf_0)*unsurdz;
1571
1572 // derivees centrees
1573 // de Uy ; ATTENTION on veux calculer la moyenne entre (i,j,k) et (i,j+1,k) aux mailles i-1 et i+1
1574 double Ve_mi = 0.5*( (vitesse_j(i-1,j,k) - vit_moy_j[kg]) + (vitesse_j(i-1,j+1,k) - vit_moy_j[kg]) );
1575 double Ve_pi = 0.5*( (vitesse_j(i+1,j,k) - vit_moy_j[kg]) + (vitesse_j(i+1,j+1,k) - vit_moy_j[kg]) );
1576 double dujdx = (Ve_pi - Ve_mi) * 0.5 * unsurdx;
1577
1578 // de Uz ; ATTENTION on veux calculer la moyenne entre (i,j,k) et (i,j,k+1) aux mailles i-1 et i+1
1579 double We_mi = 0.5*( (vitesse_k(i-1,j,k) - vit_moy_k[kg] ) + (vitesse_k(i-1,j,k+1) - vit_moy_k[kg+1]) );
1580 double We_pi = 0.5*( (vitesse_k(i+1,j,k) - vit_moy_k[kg] ) + (vitesse_k(i+1,j,k+1) - vit_moy_k[kg+1]) );
1581 double dukdx = (We_pi - We_mi) * 0.5 * unsurdx;
1582
1583
1584 // derivation direction y
1585 // de Ux ; ATTENTION on veux calculer la moyenne entre (i,j,k) et (i+1,j,k) aux mailles j-1 et j+1
1586 double Ue_mj = 0.5*( (vitesse_i(i,j-1,k) - vit_moy_i[kg]) + (vitesse_i(i+1,j-1,k) - vit_moy_i[kg]) );
1587 double Ue_pj = 0.5*( (vitesse_i(i,j+1,k) - vit_moy_i[kg]) + (vitesse_i(i+1,j+1,k) - vit_moy_i[kg]) );
1588 double duidy = (Ue_pj - Ue_mj) * 0.5 * unsurdy;
1589
1590 // de Uz ; ATTENTION on veux calculer la moyenne entre (i,j,k) et (i,j,k+1) aux mailles j-1 et j+1
1591 double We_mj = 0.5*( (vitesse_k(i,j-1,k) - vit_moy_k[kg]) + (vitesse_k(i,j-1,k+1) - vit_moy_k[kg+1]) );
1592 double We_pj = 0.5*( (vitesse_k(i,j+1,k) - vit_moy_k[kg]) + (vitesse_k(i,j+1,k+1) - vit_moy_k[kg+1]) );
1593 double dukdy = (We_pj - We_mj ) * 0.5 * unsurdy;
1594
1595 /* *
1596 *
1597 *
1598 * */
1599
1600 double divtotu = Div_tot_U(i,j,k);
1601 double divergence_moy = (vit_moy_k[kg+1] - vit_moy_k[kg]) * unsurdz;
1602
1603 // ------------------------------------------------------------
1604 // ============================================================
1605
1606 const double contrib_divtot = (duidx*duidx + dujdy*dujdy + dukdz*dukdz_tot);
1607 const double duidz = 0.5*(duidz_0 + duidz_1);
1608 const double dujdz = 0.5*(dujdz_0 + dujdz_1);
1609 const double duidz_tot = 0.5*(duidz_0_tot + duidz_1_tot);
1610
1611 // ------------------------------------------------------------
1612 // PRODUCTION
1613 // ------------------------------------------------------------
1614 // production incompressible
1615 // [<ux uy>] [d<Ux>/dy]
1616
1617 // production thermique
1618 // [<uy uy>] [d<Uy>/dy]
1619
1620 // ------------------------------------------------------------
1621 // ADVECTION
1622 // ------------------------------------------------------------
1623 // [<Uy>] [d<e>/dy] ; Ec=uiui/2
1624
1625 // ------------------------------------------------------------
1626 // DIFFUSION TURBULENTE
1627 // ------------------------------------------------------------
1628 // d<Ec uy>/dy ; Ec=uiui/2
1629 const double Ec_we = Ec * we;
1630
1631 // ------------------------------------------------------------
1632 // CORRELATION EC-DILATATION
1633 // ------------------------------------------------------------
1634 // <Ec duidx_i> ; Ec=uiui/2
1635 const double Ec_divu = Ec * divu;
1636
1637 // ------------------------------------------------------------
1638 // CORRELATION PRESSION-DILATATION
1639 // ------------------------------------------------------------
1640 // <P/rho duidx_i>
1641 const double p_unsrho_divu = p * unsurrho * divu;
1642
1643 // ------------------------------------------------------------
1644 // DIFFUSION PAR LA PRESSION
1645 // ------------------------------------------------------------
1646 // diffusion par la pression incompressible
1647 // [1/<rho>] <[d/dy](uy P)>
1648 const double p_we = p * we;
1649
1650 // diffusion par la pression compressible, en d<rho>/dy
1651 // [<uy P>/<rho>2] [<d<rho>/dy]
1652 // meme terme que pour "diffusion par la pression incompressible"
1653
1654 // diffusion par la pression compressible, en rho' et rho
1655 // <[d/dy]((uy P rho')/(<rho> rho))>
1656 const double rhofluc_unsrho_unsrhomoy_P_we = unsurrho_moy * unsurrho * we * p * rho_fluc;
1657
1658 // diffusion par la pression compressible, en drho
1659 // <ui P/rho2 drho/dxi>
1660 const double somme_unsrho_unsrho_P_ui_drhodxi = unsurrho * unsurrho * p * (ue*drhodx + ve*drhody + we*drhodz);
1661
1662 // ------------------------------------------------------------
1663 // DISSIPATION
1664 // ------------------------------------------------------------
1665 // dissipation incompressible, premiere partie
1666 // [<nu>] <dui/dx_j dui/dx_j>
1667 const double somme_duidxj_duidxj = contrib_div
1668 + contrib_dujdz + contrib_duidz
1669 + contrib_dukdy + contrib_duidy
1670 + contrib_dujdx + contrib_dukdx;
1671
1672 // dissipation incompressible, seconde partie
1673 // [<nu>] <dui/dx_j duj/dx_i>
1674 const double somme_duidxj_dujdxi = contrib_div
1675 + 2*duidy*dujdx + 2*duidz*dukdx + 2*dujdz*dukdy;
1676
1677 // dissipation compressible, premiere partie
1678 // <nu' dui/dx_j dUi/dx_j>
1679 const double somme_nufluc_dujdxi_dUidxj = contrib_divtot*nu_fluc
1680 + contrib_dujdz*(nu_face_j - nu_moy[kg]) + contrib_duidz_tot*(nu_face_i - nu_moy[kg])
1681 + contrib_dukdy*(nu_face_j - nu_moy[kg]) + contrib_duidy*(nu_arrette_ij - nu_moy[kg])
1682 + contrib_dujdx*(nu_arrette_ij - nu_moy[kg]) + contrib_dukdx*(nu_face_i - nu_moy[kg]);
1683
1684 // dissipation compressible, seconde partie
1685 // <nu' dui/dx_j dUj/dx_i>
1686 const double somme_nufluc_duidxj_dUjdxi = nu_fluc * ( contrib_divtot
1687 + 2*duidy*dujdx + duidz*dukdx + duidz_tot*dukdx + 2*dujdz*dukdy );
1688
1689 // dissipation compressible, troisieme partie
1690 // <2/3 nu' dui/dx_i dUj/dx_j>
1691 const double deuxtiers_nu_divu_divU = (2./3.) * nu * divu * divtotu;
1692
1693 // ------------------------------------------------------------
1694 // DIFFUSION VISQUEUSE
1695 // ------------------------------------------------------------
1696 // diffusion visqueuse incompressible, premiere partie
1697 // [<nu>] [d2<Ec>/dy2] ; Ec=uiui/2
1698
1699 // diffusion visqueuse incompressible, seconde partie
1700 // [<nu>] <[d/dy](ui duy/dx_i)>
1701 const double somme_ui_dukdxi = ue*dukdx + ve*dukdy + we*dukdz;
1702
1703 // diffusion visqueuse compressible, en d<nu>/dy, premiere partie
1704 // [d<nu>dy] [d<Ec>/dy] ; Ec=uiui/2
1705
1706 // diffusion visqueuse compressible, en d<nu>/dy, seconde partie
1707 // [d<nu>dy] [d(ui duy/dx_i)/dy]
1708 // meme terme que pour "diffusion visqueuse incompressible, seconde partie"
1709
1710 // diffusion visqueuse compressible, en nu' et nu, premiere partie
1711 // <[d/dy](nu' ui dUidy)>
1712 const double somme_nufluc_dEcdxk = nu_fluc * dEcdz;
1713 const double somme_nufluc_ui_dUimoydxk = nu_fluc * (ue*dUmoydz + we*dWmoydz);
1714 const double somme_nufluc_ui_dUidxk = somme_nufluc_dEcdxk + somme_nufluc_ui_dUimoydxk;
1715
1716 // diffusion visqueuse compressible, en nu' et nu, seconde partie
1717 // <[d/dy](nu' ui dUydx_i)>
1718 const double somme_nufluc_ui_dUkdxi = nu_fluc * (ue*dukdx + ve*dukdy + we*dukdz_tot);
1719
1720 // diffusion visqueuse compressible, en nu' et nu, troisieme partie
1721 // <2/3 [d/dy](nu uy dUydy)>
1722 const double somme_deuxtiers_nu_uk_divU = (2./3.) * nu * we * divtotu;
1723
1724 // diffusion visqueuse compressible, en drho, premiere partie
1725 // <nu/rho ui dUi/dx_j drho/dx_j>
1726 const double somme_nusrho_dEcdxj_drhodxj = nu * unsurrho * (dEcdx*drhodx + dEcdy*drhody + dEcdz*drhodz);
1727 const double somme_nusrho_ui_dUimoydxk_drhodxk = nu * unsurrho * (ue*dUmoydz + we*dWmoydz) * drhodz;
1728 const double somme_nusrho_ui_dUidxj_drhodxj = somme_nusrho_dEcdxj_drhodxj + somme_nusrho_ui_dUimoydxk_drhodxk;
1729
1730 // diffusion visqueuse compressible, en drho, seconde partie
1731 // <nu/rho ui dUj/dx_i drho/dx_j>
1732 const double ui_dUjdxi_drhodxj = ue * (drhodx*duidx + drhody*dujdx + drhodz*dukdx);
1733 const double uj_dUjdxj_drhodxj = ve * (drhodx*duidy + drhody*dujdy + drhodz*dukdy);
1734 const double uk_dUjdxk_drhodxj = we * (drhodx*duidz_tot + drhody*dujdz + drhodz*dukdz_tot);
1735 const double somme_nusrho_ui_dUjdxi_drhodxj = nu * unsurrho * (ui_dUjdxi_drhodxj + uj_dUjdxj_drhodxj + uk_dUjdxk_drhodxj);
1736
1737 // diffusion visqueuse compressible, en drho, troisieme partie
1738 // <2/3 nu/rho ui dUj/dx_j drho/dx_i>
1739 const double somme_ui_divU_drhodxi = (ue * drhodx + ve * drhody + we * drhodz) * divtotu;
1740 const double somme_deuxtiers_nusrho_ui_divU_drhodxi = (2./3.) * nu * unsurrho * somme_ui_divU_drhodxi;
1741
1742 // ------------------------------------------------------------
1743 // TERME NON CLASSE
1744 // ------------------------------------------------------------
1745 // <Uj Ec/rho drho/dx_j> ; Ec=uiui/2
1746 const double somme_unsrho_Ec_Uj_drhodxj = unsurrho * Ec * (uetot*drhodx + vetot*drhody + wetot*drhodz);
1747
1748 // ------------------------------------------------------------
1749 // TERME SOURCE
1750 // ------------------------------------------------------------
1751 // <ux F/rho> ; M/O terme_source_acceleration = F/rho
1752 const double ux_terme_source_acceleration = ue * terme_source_acceleration;
1753
1754 // ------------------------------------------------------------
1755 // ============================================================
1756
1757#define AJOUT(somme,val) moy[somme] += val
1758
1759 AJOUT(KW_MOY, Ec_we);
1760 AJOUT(CORRELATION_EC_DIVERGENCE_MOY, Ec_divu);
1761 AJOUT(CORRELATION_PRESSION_DIVERGENCE_MOY, p_unsrho_divu);
1762 AJOUT(P_WFLUC_MOY, p_we);
1763 AJOUT(DIFFUSION_PRESSION_RHOFLUC_ADERIVE_MOY, rhofluc_unsrho_unsrhomoy_P_we);
1764 AJOUT(DIFFUSION_PRESSION_DERIVRHO_MOY, - somme_unsrho_unsrho_P_ui_drhodxi);
1765 AJOUT(DISSIPATION_INCOMPRESSIBLE_UN_AFOISNUMOY_MOY, - somme_duidxj_duidxj);
1766 AJOUT(DISSIPATION_INCOMPRESSIBLE_DEUX_AFOISNUMOY_MOY, - somme_duidxj_dujdxi);
1767 AJOUT(DISSIPATION_COMPESSIBLE_UN_MOY, - somme_nufluc_dujdxi_dUidxj);
1768 AJOUT(DISSIPATION_COMPESSIBLE_DEUX_MOY, - somme_nufluc_duidxj_dUjdxi);
1769 AJOUT(DISSIPATION_COMPESSIBLE_TROIS_MOY, deuxtiers_nu_divu_divU);
1770 AJOUT(DIFFUSION_VISQUEUSE_INCOMPRESSIBLE_DEUX_MOY, somme_ui_dukdxi);
1771 AJOUT(DIFFUSION_VISQUEUSE_NUFLUC_ADERIVE_UN_MOY, somme_nufluc_ui_dUidxk);
1772 AJOUT(DIFFUSION_VISQUEUSE_NUFLUC_ADERIVE_DEUX_MOY, somme_nufluc_ui_dUkdxi);
1773 AJOUT(DIFFUSION_VISQUEUSE_NUFLUC_ADERIVE_TROIS_MOY, - somme_deuxtiers_nu_uk_divU);
1774 AJOUT(DIFFUSION_VISQUEUSE_DERIVRHO_UN_MOY, somme_nusrho_ui_dUidxj_drhodxj);
1775 AJOUT(DIFFUSION_VISQUEUSE_DERIVRHO_DEUX_MOY, somme_nusrho_ui_dUjdxi_drhodxj);
1776 AJOUT(DIFFUSION_VISQUEUSE_DERIVRHO_TROIS_MOY, - somme_deuxtiers_nusrho_ui_divU_drhodxi);
1777 AJOUT(TERME_NON_CLASSE_MOY, somme_unsrho_Ec_Uj_drhodxj);
1778
1779 AJOUT(TERME_SOURCE_MOY, ux_terme_source_acceleration);
1780
1781 // convergence des stats et stats annexes
1782 AJOUT(FLUC_U_MOY, ue);
1783 AJOUT(FLUC_V_MOY, ve);
1784 AJOUT(FLUC_W_MOY, we);
1785 AJOUT(FLUC_RHO_MOY, rho_fluc);
1786 AJOUT(FLUC_NU_MOY, nu_fluc);
1787 AJOUT(FLUC_DIV_U_MOY, divu);
1788 AJOUT(TOTAL_DIV_U_MOY, divtotu);
1789 AJOUT(MEAN_DIV_U_MOY, divergence_moy);
1790
1791#undef AJOUT
1792 }
1793 }
1794 // facteur 1./(ni*nj) car sommation de ni*nj valeurs sur des mailles de meme taille
1795 // facteur delta_z / taille_totale_en_z car mailles non uniformes en z
1796 const int ni_tot = pression.get_domaine().get_nb_elem_tot(DIRECTION_I);
1797 const int nj_tot = pression.get_domaine().get_nb_elem_tot(DIRECTION_J);
1798
1799 double facteur = 1./(double)(ni_tot * nj_tot);
1800
1801 for (int i = 0; i < kval_; i++)
1802 tmp(k + offsetk, i) = moy[i] * facteur;
1803 }
1804 // Somme sur tous les processeurs:
1806
1807 // Sur processeur 0, ajout de la contribution a l'integrale temporelle:
1809 {
1810 for (int i = 0; i < kval_; i++)
1811 {
1812 for (int k = 0; k < nktot; k++)
1813 {
1814 integrale_k_[i][k] += tmp(k, i) * dt;
1815 moyenne_spatiale_ec_[i][k] = tmp(k, i);
1816 }
1817 }
1818 t_integration_k_ += dt;
1819 }
1820}
1821
1822
1823// If flag_valeur_instantanee==1 : write the last computed instantaneous value,
1824// if flag_valeur_instantanee==0 : write the time averaged value
1825void Statistiques_dns_ijk::postraiter(Sortie& os, int flag_valeur_instantanee) const
1826{
1828 return;
1829
1830 const int n = elem_coord_.size_array(); // nombre de points en K
1831 if (flag_valeur_instantanee == 0)
1832 {
1833 os << "# temps_integration " << t_integration_ << finl;
1834 os << "# Impression des moyennes temporelles" << finl;
1835 }
1836 else if (flag_valeur_instantanee == 1)
1837 {
1838 os << "# Impression des moyennes spatiales instantanee" << finl;
1839 }
1840 else
1841 {
1842 Cerr << "Erreur dans Statistiques_dns_ijk::postraiter: flag inconnu" << finl;
1843 Process::exit();
1844 }
1845 os << "# colonne 1 : coordonnee_K" << finl;
1846 for (int i = 0; i < nval_; i++)
1847 {
1848 os << "# colonne " << i+2 << " : " << noms_moyennes_[i] << finl;
1849 }
1850 for (int j = 0; j < n; j++)
1851 {
1852 char s[100];
1853 snprintf(s,100, "%16.16e ", elem_coord_[j]);
1854 os << s;
1855 for (int i = 0; i < nval_; i++)
1856 {
1857 double x;
1858 if (flag_valeur_instantanee == 0)
1859 x = integrale_temporelle_[i][j] / t_integration_;
1860 else
1861 x = moyenne_spatiale_instantanee_[i][j];
1862 snprintf(s,100, "%16.16e ", x);
1863 os << s;
1864 }
1865 os << finl;
1866 }
1867}
1868
1869void Statistiques_dns_ijk::postraiter_k(Sortie& os, int flag_valeur_instantanee) const
1870{
1872 return;
1873
1874 const int n = elem_coord_.size_array(); // nombre de points en K
1875 if (flag_valeur_instantanee == 0)
1876 {
1877 os << "# temps_integration_k " << t_integration_k_ << finl;
1878 os << "# Impression des moyennes temporelles" << finl;
1879 }
1880 else if (flag_valeur_instantanee == 1)
1881 {
1882 os << "# Impression des moyennes spatiales instantanee" << finl;
1883 }
1884 else
1885 {
1886 Cerr << "Erreur dans Statistiques_dns_ijk::postraiter: flag inconnu" << finl;
1887 Process::exit();
1888 }
1889
1890 os << "# colonne 1 : coordonnee_K" << finl;
1891 for (int i = 0; i < kval_; i++)
1892 {
1893 os << "# colonne " << i+2 << " : " << noms_k_[i] << finl;
1894 }
1895 for (int j = 0; j < n; j++)
1896 {
1897 char s[100];
1898 snprintf(s,100, "%16.16e ", elem_coord_[j]);
1899 os << s;
1900 for (int i = 0; i < kval_; i++)
1901 {
1902 double x;
1903 if ( flag_valeur_instantanee == 0)
1904 {
1905 if (t_integration_k_ !=0)
1906 {
1907 x = integrale_k_[i][j] / t_integration_k_;
1908 }
1909 else
1910 {
1911 x = integrale_k_[i][j];
1912 }
1913 }
1914 else
1915 {
1916 x = moyenne_spatiale_ec_[i][j];
1917 }
1918 snprintf(s,100, "%16.16e ", x);
1919 os << s;
1920 }
1921 os << finl;
1922 }
1923}
1924
1925// Impression des donnees pour reprise
1927{
1929 {
1930 os << "{\n";
1931 if (check_converge_)
1932 os << " converge " << "\n";
1933
1934 os << " temps_integration " << t_integration_ << "\n";
1935 os << " fields { " << "\n";
1936 for (int i = 0; i < nval_; i++)
1937 {
1938 os << noms_moyennes_[i] << " " << integrale_temporelle_[i] << finl;
1939 }
1940 os << " }" << finl;
1941 completer_print(os); // Pour imprimer d'autres listes par exemple.
1942 //modif AT 20/06/2013
1943 if (check_converge_)
1944 {
1945 os << " temps_integration_k " << t_integration_k_ << "\n";
1946 for (int i = 0; i < kval_; i++)
1947 {
1948 os << noms_k_[i] << " " << integrale_k_[i] << finl;
1949 }
1950 }
1951 os << "}" << finl;
1952 if (check_converge_)
1953 {
1954 Cout << "Ecriture des donnees statistiques d'energie pour reprise: t_integration_k_=" << t_integration_k_ << finl;
1955 }
1956 Cout << "Ecriture des donnees statistiques pour reprise: t_integration=" << t_integration_ << finl;
1957 }
1958 return os;
1959}
1960
1962{
1963 Cerr << "[Statistiques_dns_ijk] Motcle : " << mot << finl;
1964 Param param(que_suis_je()+Nom("_fields"));
1965
1966 if (mot=="fields")
1967 {
1968 for (int i = 0; i < nval_; i++)
1969 {
1970 param.ajouter(noms_moyennes_[i], &integrale_temporelle_[i]);
1971 }
1972 }
1973 else
1974 {
1975 Cerr << "Motcle : " << mot << " inconnu" << finl;
1976 Cerr << "Keyword " << mot << " is not understood by Statistiques_dns_ijk::lire_motcle_non_standard(..)" << finl;
1977 Process::exit();
1978 }
1979 param.lire_avec_accolades(is);
1980 Cerr << "End of reading 'fields' in Statistiques_dns_ijk " << finl;
1981 return 1;
1982}
1983
1984// Reprise des donnees stat dans un fichier reprise
1985// Attention, cette methode peut etre appelee avant initialize() !
1987{
1988 integrale_temporelle_.dimensionner(nval_);
1989 t_integration_ = 0.;
1990 check_converge_=0;//modif AT 20/06/2013
1991 Param param(que_suis_je());
1992 param.ajouter_flag("converge", &check_converge_);//modif AT 20/06/2013
1993 param.ajouter("temps_integration", &t_integration_);
1994
1995 // Pour lire les nouveaux champs :
1996 param.ajouter_non_std("fields",(this));
1997 // ou pour lire quand meme les anciens directement sans accolade :
1998 for (int i = 0; i < nval_; i++)
1999 {
2000 param.ajouter(noms_moyennes_[i], &integrale_temporelle_[i]);
2001 }
2002
2003 completer_read(param);
2004 integrale_k_.dimensionner(kval_);//modif AT 20/06/2013
2006 param.ajouter("temps_integration_k", &t_integration_k_);
2007
2008 for (int i = 0; i < kval_; i++)
2009 {
2010 param.ajouter(noms_k_[i], &integrale_k_[i]);
2011 }
2012
2013 param.lire_avec_accolades(is);
2014
2015 // // Seul le maitre conserve le tab d'integration temporelle lu en reprise :
2016 // // Les autres n'en ont pas besoin.
2017 // if (!Process::je_suis_maitre()) {
2018 // integrale_temporelle_.reset();
2019 // integrale_k_.reset();
2020 // }
2021 Cerr << "Check_converge " << int(check_converge_) << finl;
2022 Cout << "Reprise des donnees statistiques: t_integration=" << t_integration_ << finl;
2023 if ( check_converge_ )
2024 {
2025 Cout << "Reprise des donnees statistiques d'energie : t_integration_k_=" << t_integration_k_ << finl;
2026 }
2027 return is;
2028}
2029
2030// bc_type : Le type de boundary_condition :
2031// 0 : Pour la vitesse, suppose une valeur nulle sur les bords.
2032// 1 : Pour le gradient_pression, on suppose que la valeur au bord
2033// du gradient tangeant est la meme que celle au centre de
2034// la premiere cellule.
2035double Statistiques_dns_ijk::face_to_cell_gradient(const IJK_Field_double& vitesse_i,
2036 const IJK_Field_double& vitesse_j,
2037 const IJK_Field_double& vitesse_k,
2038 const int i, const int j, const int k,
2039 const double dz,
2040 double& duidx,
2041 double& dujdx,
2042 double& dukdx,
2043 double& duidy,
2044 double& dujdy,
2045 double& dukdy,
2046 double& duidz,
2047 double& dujdz,
2048 double& dukdz,
2049 const bool on_the_first_cell,
2050 const bool on_the_last_cell,
2051 const int bc_type) const
2052{
2053
2054 bool perio_k=vitesse_k.get_domaine().get_periodic_flag(DIRECTION_K);
2055 // ******************************** //
2056 // derivation direction x
2057 // de Ux
2058 duidx = (vitesse_i(i+1, j, k) - vitesse_i(i,j,k))/dx_;
2059
2060 // de Uy !!!!!! ATTENTION on veux calculer la moyenne entre (i,j,k) et (i,j+1,k) aux mailles i-1 et i+1
2061 double Ve_mi = ( vitesse_j(i-1,j,k) + vitesse_j(i-1,j+1,k) )*0.5;
2062 double Ve_pi = ( vitesse_j(i+1,j,k) + vitesse_j(i+1,j+1,k) )*0.5;
2063 dujdx = (Ve_pi - Ve_mi ) / (2*dx_);
2064
2065 // de Uz !!!!!! ATTENTION on veux calculer la moyenne entre (i,j,k) et (i,j,k+1) aux mailles i-1 et i+1
2066 double We_mi = ( vitesse_k(i-1,j,k) + vitesse_k(i-1,j,k+1) )*0.5;
2067 double We_pi = ( vitesse_k(i+1,j,k) + vitesse_k(i+1,j,k+1) )*0.5;
2068 dukdx = (We_pi - We_mi ) / (2*dx_);
2069
2070 // ******************************** //
2071 // derivation direction y
2072 // de Ux !!!!!! ATTENTION on veux calculer la moyenne entre (i,j,k) et (i+1,j,k) aux mailles j-1 et j+1
2073 double Ue_mj = ( vitesse_i(i,j-1,k) + vitesse_i(i+1,j-1,k) )*0.5;
2074 double Ue_pj = ( vitesse_i(i,j+1,k) + vitesse_i(i+1,j+1,k) )*0.5;
2075 duidy = (Ue_pj - Ue_mj ) / (2*dy_);
2076
2077 // de Uy
2078 dujdy = (vitesse_j(i, j+1, k) - vitesse_j(i,j,k))/dy_;
2079
2080 // de Uz !!!!!! ATTENTION on veux calculer la moyenne entre (i,j,k) et (i,j,k+1) aux mailles j-1 et j+1
2081 double We_mj = ( vitesse_k(i,j-1,k) + vitesse_k(i,j-1,k+1) )*0.5;
2082 double We_pj = ( vitesse_k(i,j+1,k) + vitesse_k(i,j+1,k+1) )*0.5;
2083 dukdy = (We_pj - We_mj ) / (2*dy_);
2084
2085 // ******************************** //
2086 // derivation direction z
2087 // Si on est sur un bord, on utilise l'info que la vitesse y est nulle.
2088 // Cette info est a dz/2 donc on utilise la formule centree d'ordre 2 pour pas variable :
2089 // Formule centree (ordre 2) pour pas variable dans le domaine :
2090 // grad[1:-1] = (h1/h2*u_pl - h2/h1*u_m + (h2**2-h1**2)/(h1*h2)*u_c) / (h1+h2)
2091 //
2092 if (on_the_first_cell)
2093 {
2094 if (!perio_k)
2095 {
2096 // de Ux
2097 double Ue_ck = ( vitesse_i(i,j,k ) + vitesse_i(i+1,j,k ) )*0.5;
2098 double Ue_pk = ( vitesse_i(i,j,k+1) + vitesse_i(i+1,j,k+1) )*0.5;
2099 double Ue_mk = (bc_type ? Ue_ck+(Ue_ck-Ue_pk)/8. : 0.);
2100 // Formule decentree (ordre 2) pour pas variable sur le bord gauche :
2101 duidz = (- 4*Ue_mk + 3*Ue_ck +Ue_pk ) / (3*dz);
2102
2103 // de Uy
2104 double Ve_ck = ( vitesse_j(i,j,k ) + vitesse_j(i,j+1,k ) )*0.5;
2105 double Ve_pk = ( vitesse_j(i,j,k+1) + vitesse_j(i,j+1,k+1) )*0.5;
2106 double Ve_mk = (bc_type ? Ve_ck+(Ve_ck-Ve_pk)/8. : 0.);
2107 dujdz = (- 4*Ve_mk + 3*Ve_ck +Ve_pk ) / (3*dz) ;
2108 }
2109 }
2110 else if (on_the_last_cell)
2111 {
2112 if (!perio_k)
2113 {
2114 // de Ux
2115
2116 double Ue_mk = ( vitesse_i(i,j,k-1) + vitesse_i(i+1,j,k-1) )*0.5;
2117 double Ue_ck = ( vitesse_i(i,j,k ) + vitesse_i(i+1,j,k ) )*0.5;
2118 double Ue_pk = (bc_type ? Ue_ck+(Ue_ck-Ue_mk)/8. : 0.);
2119 // Formule decentree (ordre 2) pour pas variable sur le bord droit :
2120 duidz = (- Ue_mk - 3*Ue_ck +4*Ue_pk ) / (3*dz);
2121
2122 // de Uy
2123 double Ve_mk = ( vitesse_j(i,j,k-1) + vitesse_j(i,j+1,k-1) )*0.5;
2124 double Ve_ck = ( vitesse_j(i,j,k ) + vitesse_j(i,j+1,k ) )*0.5;
2125 double Ve_pk = (bc_type ? Ve_ck+(Ve_ck-Ve_mk)/8. : 0.);
2126 dujdz = (- Ve_mk - 3*Ve_ck +4*Ve_pk ) / (3*dz) ;
2127 }
2128 }
2129 else
2130 {
2131 // For any interior cell... Formule centree pour pas cste
2132
2133 // de Ux !!!!!! ATTENTION on veux calculer la moyenne entre (i,j,k) et (i+1,j,k) aux mailles k-1 et k+1
2134 double Ue_mk = ( vitesse_i(i,j,k-1) + vitesse_i(i+1,j,k-1) )*0.5;
2135 double Ue_pk = ( vitesse_i(i,j,k+1) + vitesse_i(i+1,j,k+1) )*0.5;
2136 duidz = (Ue_pk - Ue_mk ) / (2*dz);
2137
2138 // de Uy !!!!!! ATTENTION on veux calculer la moyenne entre (i,j,k) et (i,j+1,k) aux mailles k-1 et k+1
2139 double Ve_mk = ( vitesse_j(i,j,k-1) + vitesse_j(i,j+1,k-1) )*0.5;
2140 double Ve_pk = ( vitesse_j(i,j,k+1) + vitesse_j(i,j+1,k+1) )*0.5;
2141 dujdz = (Ve_pk - Ve_mk ) / (2*dz) ;
2142 }
2143
2144 // de Uz
2145 dukdz = (vitesse_k(i, j, k+1) - vitesse_k(i,j,k))/dz;
2146
2147 // ******************************** //
2148 double dissip = duidx*duidx + dujdx*dujdx + dukdx*dukdx
2149 + duidy*duidy + dujdy*dujdy + dukdy*dukdy
2150 + duidz*duidz + dujdz*dujdz + dukdz*dukdz;
2151
2152 return dissip;
2153}
2154
2155// Calcul le gradient de U aux cellules a partir de la vitesse aux faces
2156void Statistiques_dns_ijk::compute_and_store_gradU_cell(const IJK_Field_double& vitesse_i,
2157 const IJK_Field_double& vitesse_j,
2158 const IJK_Field_double& vitesse_k)
2159{
2160 IJK_Field_vector3_double& gradU=vect_post_fields_.at("dUd");
2161 IJK_Field_vector3_double& gradV=vect_post_fields_.at("dVd");
2162 IJK_Field_vector3_double& gradW=vect_post_fields_.at("dWd");
2163
2164 // TODO : Should be centralised here:
2165 if (0)
2166 {
2167 compute_and_store_gradU_cell(vitesse_i, vitesse_j, vitesse_k);
2168 return;
2169 }
2170 IJK_Field_double& dudx = gradU[0];
2171 IJK_Field_double& dvdy = gradV[1];
2172 IJK_Field_double& dwdx = gradW[0];
2173 IJK_Field_double& dudz = gradU[2];
2174 IJK_Field_double& dvdz = gradV[2];
2175 IJK_Field_double& dwdz = gradW[2];
2176
2177 const Domaine_IJK& splitting = vitesse_i.get_domaine();
2178
2179 // Nombre total de mailles en K
2180 const int nktot = splitting.get_nb_items_global(Domaine_IJK::ELEM, DIRECTION_K);
2181 // Nombre local de mailles :
2182 const int imax = splitting.get_nb_items_local(Domaine_IJK::ELEM, 0);
2183 const int jmax = splitting.get_nb_items_local(Domaine_IJK::ELEM, 1);
2184 const int kmax = splitting.get_nb_items_local(Domaine_IJK::ELEM, 2);
2185
2186 const int offset = splitting.get_offset_local(DIRECTION_K);
2187
2188 for (int k = 0; k < kmax; k++)
2189 {
2190 const double dz = tab_dz_[k+offset];
2191 bool on_the_first_cell = false;
2192 bool on_the_last_cell = false;
2193 if (k + offset == 0)
2194 on_the_first_cell = true;
2195 if (k + offset == nktot - 1)
2196 on_the_last_cell = true;
2197 for (int j = 0; j < jmax; j++)
2198 {
2199 for (int i = 0; i < imax; i++)
2200 {
2201 // ******************************** //
2202 // derivation direction x
2203 // de Ux
2204 dudx(i,j,k) = (vitesse_i(i+1, j, k) - vitesse_i(i,j,k))/dx_;
2205
2206 // de Uz !!!!!! ATTENTION on veux calculer la moyenne entre (i,j,k) et (i,j,k+1) aux mailles i-1 et i+1
2207 double We_mi = ( vitesse_k(i-1,j,k) + vitesse_k(i-1,j,k+1) )*0.5;
2208 double We_pi = ( vitesse_k(i+1,j,k) + vitesse_k(i+1,j,k+1) )*0.5;
2209 dwdx(i,j,k) = (We_pi - We_mi ) / (2*dx_);
2210
2211 // ******************************** //
2212 // derivation direction y
2213 // de Uy
2214 dvdy(i,j,k) = (vitesse_j(i, j+1, k) - vitesse_j(i,j,k))/dy_;
2215
2216 // ******************************** //
2217 // derivation direction z
2218 // Si on est sur un bord, on utilise l'info que la vitesse y est nulle.
2219 // Cette info est a dz/2 donc on utilise la formule centree d'ordre 2 pour pas variable :
2220 // Formule centree (ordre 2) pour pas variable dans le domaine :
2221 // grad[1:-1] = (h1/h2*u_pl - h2/h1*u_m + (h2**2-h1**2)/(h1*h2)*u_c) / (h1+h2)
2222 //
2223 if (on_the_first_cell)
2224 {
2225 // de Ux
2226 double Ue_mk = 0.;
2227 double Ue_ck = ( vitesse_i(i,j,k ) + vitesse_i(i+1,j,k ) )*0.5;
2228 double Ue_pk = ( vitesse_i(i,j,k+1) + vitesse_i(i+1,j,k+1) )*0.5;
2229 // Formule decentree (ordre 2) pour pas variable sur le bord gauche :
2230 dudz(i,j,k) = (- 4*Ue_mk + 3*Ue_ck +Ue_pk ) / (3*dz);
2231
2232 // de Uy
2233 double Ve_mk = 0.;
2234 double Ve_ck = ( vitesse_j(i,j,k ) + vitesse_j(i,j+1,k ) )*0.5;
2235 double Ve_pk = ( vitesse_j(i,j,k+1) + vitesse_j(i,j+1,k+1) )*0.5;
2236 dvdz(i,j,k) = (- 4*Ve_mk + 3*Ve_ck +Ve_pk ) / (3*dz) ;
2237 }
2238 else if (on_the_last_cell)
2239 {
2240 // de Ux
2241 double Ue_mk = ( vitesse_i(i,j,k-1) + vitesse_i(i+1,j,k-1) )*0.5;
2242 double Ue_ck = ( vitesse_i(i,j,k ) + vitesse_i(i+1,j,k ) )*0.5;
2243 double Ue_pk = 0.;
2244 // Formule decentree (ordre 2) pour pas variable sur le bord droit :
2245 dudz(i,j,k) = (- Ue_mk - 3*Ue_ck +4*Ue_pk ) / (3*dz);
2246
2247 // de Uy
2248 double Ve_mk = ( vitesse_j(i,j,k-1) + vitesse_j(i,j+1,k-1) )*0.5;
2249 double Ve_ck = ( vitesse_j(i,j,k ) + vitesse_j(i,j+1,k ) )*0.5;
2250 double Ve_pk = 0.;
2251 dvdz(i,j,k) = (- Ve_mk - 3*Ve_ck +4*Ve_pk ) / (3*dz) ;
2252 }
2253 else
2254 {
2255 // For any interior cell... Formule centree pour pas cste
2256
2257 // de Ux !!!!!! ATTENTION on veux calculer la moyenne entre (i,j,k) et (i+1,j,k) aux mailles k-1 et k+1
2258 double Ue_mk = ( vitesse_i(i,j,k-1) + vitesse_i(i+1,j,k-1) )*0.5;
2259 double Ue_pk = ( vitesse_i(i,j,k+1) + vitesse_i(i+1,j,k+1) )*0.5;
2260 dudz(i,j,k) = (Ue_pk - Ue_mk ) / (2*dz);
2261
2262 // de Uy !!!!!! ATTENTION on veux calculer la moyenne entre (i,j,k) et (i,j+1,k) aux mailles k-1 et k+1
2263 double Ve_mk = ( vitesse_j(i,j,k-1) + vitesse_j(i,j+1,k-1) )*0.5;
2264 double Ve_pk = ( vitesse_j(i,j,k+1) + vitesse_j(i,j+1,k+1) )*0.5;
2265 dvdz(i,j,k) = (Ve_pk - Ve_mk ) / (2*dz) ;
2266 }
2267
2268 // de Uz
2269 dwdz(i,j,k) = (vitesse_k(i, j, k+1) - vitesse_k(i,j,k))/dz;
2270 }
2271 }
2272 }
2273
2274 // Mise a jour des espaces virtuels :
2275 dudx.echange_espace_virtuel(dudx.ghost());
2276 dvdy.echange_espace_virtuel(dvdy.ghost());
2277 dwdx.echange_espace_virtuel(dwdx.ghost());
2278 dudz.echange_espace_virtuel(dudz.ghost());
2279 dvdz.echange_espace_virtuel(dvdz.ghost());
2280 dwdz.echange_espace_virtuel(dwdz.ghost());
2281 return;
2282}
2283
2285 const IJK_Field_double& v1_i, const IJK_Field_double& v1_j, const IJK_Field_double& v1_k,
2286 const IJK_Field_double& v2_i,const IJK_Field_double& v2_j,const IJK_Field_double& v2_k)
2287{
2288 // champ scalaire qui accueuille le resultat
2289 IJK_Field_double v1v2 = v1_i;
2290 v1v2.data()=0;
2291
2292 const Domaine_IJK& splitting = v1_i.get_domaine();
2293 // Nombre total de mailles en K
2294 //const int nktot = splitting.get_nb_items_global(Domaine_IJK::ELEM, DIRECTION_K);
2295 // Nombre local de mailles :
2296 const int imax = splitting.get_nb_items_local(Domaine_IJK::ELEM, 0);
2297 const int jmax = splitting.get_nb_items_local(Domaine_IJK::ELEM, 1);
2298 const int kmax = splitting.get_nb_items_local(Domaine_IJK::ELEM, 2);
2299
2300 //const int offset = splitting.get_offset_local(DIRECTION_K);
2301
2302 for (int k = 0; k < kmax; k++)
2303 for (int j = 0; j < jmax; j++)
2304 for (int i = 0; i < imax; i++)
2305 {
2306 v1v2(i,j,k) += v1_i(i,j,k)*v2_i(i,j,k);
2307 v1v2(i,j,k) += v1_j(i,j,k)*v2_j(i,j,k);
2308 v1v2(i,j,k) += v1_k(i,j,k)*v2_k(i,j,k);
2309 }
2310 return v1v2;
2311}
2312
2313// Fonction pour calculer le gradient d'un champs aux elems
2314// Le champ retourne est aussi aux elems.
2315// On ne calcule pas de derivee selon z (pas necessaire, evite de se poser des questions de bords...)
2316// Le seul choix sur les inputs : au lieu de dwdx on peut prendre dwdy.
2317void Statistiques_dns_ijk::cell_to_cell_gradient(const int i, const int j, const int k,
2318 const IJK_Field_double& dudx, const IJK_Field_double& dvdy, const IJK_Field_double& dwdx,
2319 const IJK_Field_double& dudz, const IJK_Field_double& dvdz, const IJK_Field_double& dwdz,
2320 /* Et les outputs en ref aussi!! */
2321 double& ddudxy, double& ddudxz, double& ddudyz,
2322 double& ddvdxy, double& ddvdxz, double& ddvdyz,
2323 double& ddwdxy, double& ddwdxz, double& ddwdyz) const
2324{
2325 // ******************************** //
2326 // derivation direction x
2327 ddudxz = (dudz(i+1,j,k) - dudz(i-1,j,k) ) / (2*dx_);
2328 ddvdxy = (dvdy(i+1,j,k) - dvdy(i-1,j,k) ) / (2*dx_);
2329 ddvdxz = (dvdz(i+1,j,k) - dvdz(i-1,j,k) ) / (2*dx_);
2330 ddwdxz = (dwdz(i+1,j,k) - dwdz(i-1,j,k) ) / (2*dx_);
2331
2332 // ******************************** //
2333 // derivation direction y
2334 ddudxy = (dudx(i,j+1,k) - dudx(i,j-1,k) ) / (2*dy_);
2335 ddudyz = (dudz(i,j+1,k) - dudz(i,j-1,k) ) / (2*dy_);
2336 ddvdyz = (dvdz(i,j+1,k) - dvdz(i,j-1,k) ) / (2*dy_);
2337 ddwdxy = (dwdx(i,j+1,k) - dwdx(i,j-1,k) ) / (2*dy_);
2338 ddwdyz = (dwdz(i,j+1,k) - dwdz(i,j-1,k) ) / (2*dy_);
2339 return;
2340}
2341
2342// Calcul le gradient et la derivee seconde de la vitesse
2343double Statistiques_dns_ijk::calculer_gradients_vitesse(const IJK_Field_double& vitesse_i,
2344 const IJK_Field_double& vitesse_j,
2345 const IJK_Field_double& vitesse_k,
2346 const int i, const int j, const int k,
2347 const double dz,
2348 double& duidx, double& dujdx, double& dukdx,
2349 double& duidy, double& dujdy, double& dukdy,
2350 double& duidz, double& dujdz, double& dukdz,
2351 double& dduidxx, double& ddujdxx, double& ddukdxx,
2352 double& dduidyy, double& ddujdyy, double& ddukdyy,
2353 double& dduidzz, double& ddujdzz, double& ddukdzz,
2354 const bool on_the_first_cell,
2355 const bool on_the_last_cell) const
2356{
2357 const double dx2 = dx_*dx_;
2358 const double dy2 = dy_*dy_;
2359 const double dz2 = dz*dz;
2360
2361
2362 // ******************************** //
2363 // derivation direction x
2364 // de Ux
2365 duidx = (vitesse_i(i+1, j, k) - vitesse_i(i,j,k))/dx_;
2366 dduidxx = (vitesse_i(i+2, j, k) - vitesse_i(i+1,j,k) - vitesse_i(i, j, k) + vitesse_i(i-1,j,k))/(2*dx2);
2367
2368 // de Uy
2369 double Ve_mi = ( vitesse_j(i-1,j,k) + vitesse_j(i-1,j+1,k) )*0.5;
2370 double Ve_ci = ( vitesse_j(i ,j,k) + vitesse_j(i ,j+1,k) )*0.5;
2371 double Ve_pi = ( vitesse_j(i+1,j,k) + vitesse_j(i+1,j+1,k) )*0.5;
2372 dujdx = (Ve_pi - Ve_mi ) / (2*dx_);
2373 ddujdxx = (Ve_pi - 2*Ve_ci + Ve_mi ) / dx2;
2374
2375 // de Uz
2376 double We_mi = ( vitesse_k(i-1,j,k) + vitesse_k(i-1,j,k+1) )*0.5;
2377 double We_ci = ( vitesse_k(i ,j,k) + vitesse_k(i ,j,k+1) )*0.5;
2378 double We_pi = ( vitesse_k(i+1,j,k) + vitesse_k(i+1,j,k+1) )*0.5;
2379 dukdx = (We_pi - We_mi ) / (2*dx_);
2380 ddukdxx = (We_pi - 2*We_ci + We_mi ) / dx2;
2381
2382 // ******************************** //
2383 // derivation direction y
2384 // de Ux
2385 double Ue_mj = ( vitesse_i(i,j-1,k) + vitesse_i(i+1,j-1,k) )*0.5;
2386 double Ue_cj = ( vitesse_i(i,j ,k) + vitesse_i(i+1,j ,k) )*0.5;
2387 double Ue_pj = ( vitesse_i(i,j+1,k) + vitesse_i(i+1,j+1,k) )*0.5;
2388 duidy = (Ue_pj - Ue_mj ) / (2*dy_);
2389 dduidyy = (Ue_pj - 2*Ue_cj + Ue_mj ) / dy2;
2390
2391 // de Uy
2392 dujdy = (vitesse_j(i, j+1, k) - vitesse_j(i,j,k))/dy_;
2393 ddujdyy = (vitesse_j(i, j+2, k) - vitesse_j(i,j+1,k) - vitesse_j(i, j, k) + vitesse_j(i,j-1,k))/(2*dy2);
2394
2395 // de Uz
2396 double We_mj = ( vitesse_k(i,j-1,k) + vitesse_k(i,j-1,k+1) )*0.5;
2397 double We_cj = ( vitesse_k(i,j ,k) + vitesse_k(i,j ,k+1) )*0.5;
2398 double We_pj = ( vitesse_k(i,j+1,k) + vitesse_k(i,j+1,k+1) )*0.5;
2399 dukdy = (We_pj - We_mj ) / (2*dy_);
2400 ddukdyy = (We_pj - 2*We_cj + We_mj ) / dy2;
2401
2402 // ******************************** //
2403 // derivation direction z
2404 // Si on est sur un bord, on utilise l'info que la vitesse y est nulle.
2405 // Cette info est a dz/2 donc on utilise la formule centree d'ordre 2 pour pas variable :
2406 // Formule centree (ordre 2) pour pas variable dans le domaine :
2407 // grad[1:-1] = (h1/h2*u_pl - h2/h1*u_m + (h2**2-h1**2)/(h1*h2)*u_c) / (h1+h2)
2408 //
2409 if (on_the_first_cell)
2410 {
2411 // de Ux
2412 double Ue_mk = 0.;
2413 double Ue_ck = ( vitesse_i(i,j,k ) + vitesse_i(i+1,j,k ) )*0.5;
2414 double Ue_pk = ( vitesse_i(i,j,k+1) + vitesse_i(i+1,j,k+1) )*0.5;
2415 // Formule decentree (ordre 2) pour pas variable sur le bord gauche :
2416 duidz = (- 4*Ue_mk + 3*Ue_ck +Ue_pk ) / (3*dz);
2417 dduidzz = (4*Ue_pk - 12*Ue_ck + 8*Ue_mk ) / (3*dz2);
2418
2419 // de Uy
2420 double Ve_mk = 0.;
2421 double Ve_ck = ( vitesse_j(i,j,k ) + vitesse_j(i,j+1,k ) )*0.5;
2422 double Ve_pk = ( vitesse_j(i,j,k+1) + vitesse_j(i,j+1,k+1) )*0.5;
2423 dujdz = (- 4*Ve_mk + 3*Ve_ck +Ve_pk ) / (3*dz) ;
2424 ddujdzz = (4*Ve_pk -12*Ve_ck + 8*Ve_mk ) / (3*dz2);
2425 }
2426 else if (on_the_last_cell)
2427 {
2428 // de Ux
2429 double Ue_mk = ( vitesse_i(i,j,k-1) + vitesse_i(i+1,j,k-1) )*0.5;
2430 double Ue_ck = ( vitesse_i(i,j,k ) + vitesse_i(i+1,j,k ) )*0.5;
2431 double Ue_pk = 0.;
2432 // Formule decentree (ordre 2) pour pas variable sur le bord droit :
2433 duidz = (- Ue_mk - 3*Ue_ck +4*Ue_pk ) / (3*dz);
2434 dduidzz = (8*Ue_pk - 12*Ue_ck + 4*Ue_mk ) / (3*dz2);
2435
2436 // de Uy
2437 double Ve_mk = ( vitesse_j(i,j,k-1) + vitesse_j(i,j+1,k-1) )*0.5;
2438 double Ve_ck = ( vitesse_j(i,j,k ) + vitesse_j(i,j+1,k ) )*0.5;
2439 double Ve_pk = 0.;
2440 dujdz = (- Ve_mk - 3*Ve_ck +4*Ve_pk ) / (3*dz) ;
2441 ddujdzz = (8*Ve_pk - 12*Ve_ck + 4*Ve_mk ) / (3*dz2);
2442 }
2443 else
2444 {
2445 // For any interior cell... Formule centree pour pas cste
2446
2447 // de Ux !!!!!! ATTENTION on veux calculer la moyenne entre (i,j,k) et (i+1,j,k) aux mailles k-1 et k+1
2448 double Ue_mk = ( vitesse_i(i,j,k-1) + vitesse_i(i+1,j,k-1) )*0.5;
2449 double Ue_ck = ( vitesse_i(i,j,k ) + vitesse_i(i+1,j,k ) )*0.5;
2450 double Ue_pk = ( vitesse_i(i,j,k+1) + vitesse_i(i+1,j,k+1) )*0.5;
2451 duidz = (Ue_pk - Ue_mk ) / (2*dz);
2452 dduidzz = (Ue_pk - 2*Ue_ck + Ue_mk ) / dz2;
2453
2454 // de Uy !!!!!! ATTENTION on veux calculer la moyenne entre (i,j,k) et (i,j+1,k) aux mailles k-1 et k+1
2455 double Ve_mk = ( vitesse_j(i,j,k-1) + vitesse_j(i,j+1,k-1) )*0.5;
2456 double Ve_ck = ( vitesse_j(i,j,k ) + vitesse_j(i,j+1,k ) )*0.5;
2457 double Ve_pk = ( vitesse_j(i,j,k+1) + vitesse_j(i,j+1,k+1) )*0.5;
2458 dujdz = (Ve_pk - Ve_mk ) / (2*dz) ;
2459 ddujdzz = (Ve_pk - 2*Ve_ck + Ve_mk ) / dz2;
2460 }
2461
2462 // de Uz
2463 dukdz = (vitesse_k(i, j, k+1) - vitesse_k(i,j,k))/dz;
2464
2465 if (on_the_first_cell)
2466 {
2467 // left sided second derivative (first order) :
2468 ddukdzz = (vitesse_k(i, j, k+2) - 2*vitesse_k(i,j,k+1) + vitesse_k(i, j, k) )/(dz2);
2469 }
2470 else if (on_the_last_cell)
2471 {
2472 // right sided second derivative (first order) :
2473 ddukdzz = (vitesse_k(i,j,k+1) -2* vitesse_k(i, j, k) + vitesse_k(i,j,k-1) )/(dz2);
2474 }
2475 else
2476 {
2477 ddukdzz = (vitesse_k(i, j, k+2) - vitesse_k(i,j,k+1) - vitesse_k(i, j, k) + vitesse_k(i,j,k-1))/(2*dz2);
2478 }
2479
2480 // ******************************** //
2481 /*
2482 * pseudo_dissip = nu (djui+djui)
2483 * ET ON MET PAS LE nu
2484 */
2485 double pseudo_dissip = duidx*duidx + dujdx*dujdx + dukdx*dukdx
2486 + duidy*duidy + dujdy*dujdy + dukdy*dukdy
2487 + duidz*duidz + dujdz*dujdz + dukdz*dukdz;
2488 return (pseudo_dissip);
2489}
2490
2491double Statistiques_dns_ijk::calculer_vraie_dissipation(const double& pseudo_dissip,
2492 const double& duidx, const double& duidy, const double& duidz,
2493 const double& dujdx, const double& dujdy, const double& dujdz,
2494 const double& dukdx, const double& dukdy, const double& dukdz) const
2495{
2496 /*
2497 * true_dissip = 2 nu sij sij = 2 nu ( 1/2(djui+diuj) 1/2(djui+diuj) )
2498 * = pseudo_dissip + nu djui diuj
2499 * CONLCUSION : pas besoin de mettre de facteur 0.5 ou 0.25 ou quoi
2500 * ou qu'est-ce.
2501 */
2502 double true_dissip = pseudo_dissip
2503 + duidx*duidx + duidy*dujdx + duidz*dukdx
2504 + dujdx*duidy + dujdy*dujdy + dujdz*dukdy
2505 + dukdx*duidz + dukdy*dujdz + dukdz*dukdz;
2506 return(true_dissip);
2507}
2508
2510 const IJK_Field_double& ui, const IJK_Field_double& uj, const IJK_Field_double& uk,
2511 const IJK_Field_double& vi, const IJK_Field_double& vj, const IJK_Field_double& vk,
2512 const int i, const int j, const int k)
2513{
2514 // Retourne le resultat u.v pour u et v des vecteurs aux faces.
2515 // Le resultat se situe au centre de l'element
2516 double produit_scalaire = (
2517 (ui(i,j,k)*vi(i,j,k) + ui(i+1,j,k)*vi(i+1,j,k))*0.5 +
2518 (uk(i,j,k)*vk(i,j,k) + uk(i,j,k+1)*vj(i,j,k+1))*0.5 +
2519 (uk(i,j,k)*vk(i,j,k) + uk(i,j,k+1)*vj(i,j,k+1))*0.5
2520 );
2521
2522 return produit_scalaire;
2523}
2524
2525void Statistiques_dns_ijk::compute_vecA_minus_vecB_in_vecA(IJK_Field_vector3_double& vecA, const IJK_Field_vector3_double& vecB)
2526{
2527 const Domaine_IJK& splitting = vecA.get_domaine();
2528 // Nombre total de mailles en K
2529 //const int nktot = splitting.get_nb_items_global(Domaine_IJK::ELEM, DIRECTION_K);
2530 // Nombre local de mailles :
2531 const int imax = splitting.get_nb_items_local(Domaine_IJK::ELEM, 0);
2532 const int jmax = splitting.get_nb_items_local(Domaine_IJK::ELEM, 1);
2533 const int kmax = splitting.get_nb_items_local(Domaine_IJK::ELEM, 2);
2534
2535 //const int offset = splitting.get_offset_local(DIRECTION_K);
2536 for (int k = 0; k < kmax; k++)
2537 for (int j = 0; j < jmax; j++)
2538 for (int i = 0; i < imax; i++)
2539 for (int dir = 0; dir < 3; ++dir)
2540 {
2541 vecA[dir](i,j,k) -= vecB[dir](i,j,k);
2542 }
2543}
2544
This class encapsulates all the information related to the eulerian mesh for TrioIJK.
Definition Domaine_IJK.h:47
int get_offset_local(int direction) const
Returns the local offset in requested direction.
bool get_periodic_flag(int direction) const
Method returns true if periodic in this direction.
int get_nb_items_local(Localisation loc, int direction) const
Returns the number of local items (on this processor) for the given localisation in the requested dir...
double get_constant_delta(int direction) const
Returns the size of cells in a direction.
const ArrOfDouble & get_delta(int direction) const
Returns the array of mesh cell sizes in requested direction.
int get_nb_items_global(Localisation loc, int direction) const
Returns the number of local items (on this processor) for the given localisation in the requested dir...
int get_nb_elem_tot(int direction) const
Returns the total (global) number of mesh cells in requested direction.
const ArrOfDouble & get_node_coordinates(int direction) const
Returns an array with the coordinates of all nodes in the mesh in requested direction.
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
void allocate(const Domaine_IJK &d, Domaine_IJK::Localisation l, int ghost_size, int additional_k_layers=0, int nb_compo=1, const Nom &name=Nom(), bool external_storage=false, int monofluide=0, double rov=0., double rol=0., int use_inv_rho_in_pressure_solver=0)
void echange_espace_virtuel(int ghost)
Exchange data over "ghost" number of cells.
const Domaine_IJK & get_domaine() const
const Domaine_IJK & get_domaine() const
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
const std::string & getString() const
Definition Nom.h:92
Un tableau de chaine de caracteres (VECT(Nom)).
Definition Noms.h:26
classe Objet_U Cette classe est la classe de base des Objets de TRUST
Definition Objet_U.h:73
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
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
Definition Objet_U.cpp:293
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Definition Objet_U.cpp:282
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
Definition Param.cpp:364
int lire_avec_accolades(Entree &is)
Alias of lire_avec_accolades_depuis.
Definition Param.h:577
static void mp_sum_for_each_item(TRUSTArray< _TYPE_ > &x, int n=-1)
Definition Process.cpp:193
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455
static int je_suis_maitre()
renvoie 1 si on est sur le processeur maitre du groupe courant (c'est a dire me() == 0),...
Definition Process.cpp:86
Classe de base des flux de sortie.
Definition Sortie.h:52
bool is_post_required(const Motcle &nom) const
IJK_Field_double compute_and_store_scalar_product_face_to_face(const IJK_Field_double &v1_i, const IJK_Field_double &v1_j, const IJK_Field_double &v1_k, const IJK_Field_double &v2_i, const IJK_Field_double &v2_j, const IJK_Field_double &v2_k)
void get_noms_champs_postraitables(Noms &noms, Option opt=NONE) const
void update_stat(const IJK_Field_vector3_double &vitesse, const IJK_Field_double &pression, const IJK_Field_double &temperature, const IJK_Field_double &masse_vol, const IJK_Field_double &champ_mu, const IJK_Field_double &champ_lambda, const ArrOfDouble_with_ghost &delta_z_local_pour_delta, const bool flag_nu_anisotropic, const int flag_turbulent_viscosity, const IJK_Field_double &champ_turbulent_mu_xx, const IJK_Field_double &champ_turbulent_mu_xy, const IJK_Field_double &champ_turbulent_mu_xz, const IJK_Field_double &champ_turbulent_mu_yy, const IJK_Field_double &champ_turbulent_mu_yz, const IJK_Field_double &champ_turbulent_mu_zz, const bool flag_kappa_anisotropic, const int flag_turbulent_diffusivity, const IJK_Field_double &champ_turbulent_kappa_x, const IJK_Field_double &champ_turbulent_kappa_y, const IJK_Field_double &champ_turbulent_kappa_z, const int flag_structural_uu, const FixedVector< IJK_Field_double, 6 > &structural_uu_tensor, const int flag_structural_uscalar, const IJK_Field_vector3_double &structural_uscalar_vector, const int flag_formulation_favre, const int flag_formulation_velocity, const double cp_gaz, const double pression_thermodynamique, double dt)
double calculer_vraie_dissipation(const double &pseudo_dissip, const double &duidx, const double &duidy, const double &duidz, const double &dujdx, const double &dujdy, const double &dujdz, const double &dukdx, const double &dukdy, const double &dukdz) const
bool has_champ_vectoriel(const Motcle &nom) const override
bool has_champ(const Motcle &nom) const override
void compute_vecA_minus_vecB_in_vecA(IJK_Field_vector3_double &vecA, const IJK_Field_vector3_double &vecB)
void postraiter(Sortie &, int flag_valeur_instantanee=0) const
double face_to_cell_gradient(const IJK_Field_double &vitesse_i, const IJK_Field_double &vitesse_j, const IJK_Field_double &vitesse_k, const int i, const int j, const int k, const double dz, double &duidx, double &dujdx, double &dukdx, double &duidy, double &dujdy, double &dukdy, double &duidz, double &dujdz, double &dukdz, const bool on_the_first_cell, const bool on_the_last_cell, const int bc_type) const
double calculer_produit_scalaire_faces_to_center(const IJK_Field_double &ui, const IJK_Field_double &uj, const IJK_Field_double &uk, const IJK_Field_double &vi, const IJK_Field_double &vj, const IJK_Field_double &vk, const int i, const int j, const int k)
void update_stat_k(const IJK_Field_vector3_double &vitesse, const IJK_Field_double &pression, const IJK_Field_double &masse_vol, const IJK_Field_double &champ_mu, const double pression_thermodynamique, const double terme_source_acceleration, double dt)
virtual void initialize(const Domaine_IJK &)
const IJK_Field_double & get_IJK_field(const Motcle &nom) override
std::map< Motcle, IJK_Field_vector3_double > vect_post_fields_
double calculer_gradients_vitesse(const IJK_Field_double &vitesse_i, const IJK_Field_double &vitesse_j, const IJK_Field_double &vitesse_k, const int i, const int j, const int k, const double dz, double &duidx, double &dujdx, double &dukdx, double &duidy, double &dujdy, double &dukdy, double &duidz, double &dujdz, double &dukdz, double &dduidxx, double &ddujdxx, double &ddukdxx, double &dduidyy, double &ddujdyy, double &ddukdyy, double &dduidzz, double &ddujdzz, double &ddukdzz, const bool on_the_first_cell, const bool on_the_last_cell) const
int lire_motcle_non_standard(const Motcle &mot, Entree &is) override
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
const IJK_Field_vector3_double & get_IJK_field_vector(const Motcle &nom) override
virtual void completer_read(Param &param)
Champs_compris_IJK champs_compris_
the actual fields registered and managed by the post-processing part (=all the extra fields,...
void compute_and_store_gradU_cell(const IJK_Field_double &vitesse_i, const IJK_Field_double &vitesse_j, const IJK_Field_double &vitesse_k)
static void Fill_postprocessable_fields(std::vector< FieldInfo_t > &chps)
void associer_domaine(Domaine_IJK &dom_ijk)
void cell_to_cell_gradient(const int i, const int j, const int k, const IJK_Field_double &dudx, const IJK_Field_double &dvdy, const IJK_Field_double &dwdx, const IJK_Field_double &dudz, const IJK_Field_double &dvdz, const IJK_Field_double &dwdz, double &ddudxy, double &ddudxz, double &ddudyz, double &ddvdxy, double &ddvdxz, double &ddvdyz, double &ddwdxy, double &ddwdxz, double &ddwdyz) const
void postraiter_k(Sortie &, int flag_valeur_instantanee=0) const
virtual Sortie & completer_print(Sortie &os) const