TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Traitement_particulier_NS_THI_VDF.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 <Traitement_particulier_NS_THI_VDF.h>
17#include <Domaine_VDF.h>
18#include <Domaine_Cl_VDF.h>
19#include <Periodique.h>
20#include <Champ_Face_VDF.h>
21#include <Navier_Stokes_std.h>
22#include <calcul_spectres.h>
23#include <SFichier.h>
24
25Implemente_instanciable(Traitement_particulier_NS_THI_VDF,"Traitement_particulier_NS_THI_VDF",Traitement_particulier_NS_THI);
26
27
28/*! @brief
29 *
30 * @param (Sortie& is) un flot de sortie
31 * @return (Sortie&) le flot de sortie modifie
32 */
34{
35 return is;
36}
37
38
39/*! @brief
40 *
41 * @param (Entree& is) un flot d'entree
42 * @return (Entree&) le flot d'entree modifie
43 */
45{
46 return is;
47}
48
50{
51 const Domaine_dis_base& zdis = mon_equation->domaine_dis();
52 const Domaine& domaine = zdis.domaine();
53 int nb_som = domaine.nb_som();
54 calcul_nb_som_dir(domaine);
55 DoubleTab vit(nb_som,dimension);
56 double Ec=0.,D=0;
57 double temps_crt = mon_equation->inconnue().temps();
58
59 if (Process::nproc()==1)
60 {
61 ch_vit_pour_fft(vit);
62 calc_sp_nouveau_2(vit,nb_som_dir,temps_crt,Ec,D);
63 // Dans Sorties_THI_2, il y a : temps Ecsp : energie cinetique jusqu a kc
64 SFichier fic2 ("Sorties_THI_2",ios::app);
65 fic2 << temps_crt << " " << Ec << " " << D << finl;
66 }
67 else
68 {
69 Cerr << "Traitement_particulier_NS_THI_VDF::init_calc_spectre n'est pas parallelise..." << finl;
70 }
71}
72
74{
75 const Domaine_dis_base& zdis = mon_equation->domaine_dis();
76 const Domaine& domaine = zdis.domaine();
77 int nb_som = domaine.nb_som();
78 DoubleTab vit(nb_som,dimension);
79 double temps_crt = mon_equation->inconnue().temps();
80 double Eccoup=0.,D=0;
81
82 if (Process::nproc()==1)
83 {
84 ch_vit_pour_fft(vit);
85 calc_sp_nouveau_2(vit,nb_som_dir,temps_crt,Eccoup,D);
86
87 // Dans Sorties_THI_2, il y a : temps Ecsp : energie cinetique jusqu a kc
88 SFichier fic2 ("Sorties_THI_2",ios::app);
89 fic2 << temps_crt << " " << Eccoup << " " << D << finl;
90 }
91 else
92 {
93 Cerr << "Traitement_particulier_NS_THI_VDF::calcul_spectre n'est pas parallelise..." << finl;
94 }
95}
96
98{
99 //const Domaine_dis_base& zdis = mon_equation->domaine_dis();
100 //const Domaine& domaine = zdis.domaine();
101 //int nb_som = domaine.nb_som();
102 //DoubleTab vit(nb_som,dimension);
103 double temps_crt = mon_equation->inconnue().temps();
104
105 // dans ce fichier : il y aura : tps_crt, Ec, D, Skewness
106 double skewness=0., Ec=0., D=0.;
107
108 calcul_skewness_ordre_2(skewness);
109 calcul_Ec_D(Ec,D);
110 if (je_suis_maitre())
111 {
112 SFichier fic ("Sorties_THI",ios::app);
113 fic << temps_crt << " " << Ec << " " << D << " " << skewness << finl;
114 }
115 Cerr << "temps=" << temps_crt << " Ec=" << Ec << " D=" << D << " skewness=" << skewness << finl;
116}
117
119{
120 double Ec=0,D=0;
121 DoubleTab& vitesse = mon_equation->inconnue().valeurs();
122 Cerr << "Renormalisation pour les premiers instants de la turb_grille" << finl;
123 if (fac_init==0)
124 {
125 calcul_Ec_D(Ec,D);
126 }
127 else
128 {
129 const Domaine_dis_base& zdis = mon_equation->domaine_dis();
130 const Domaine& domaine = zdis.domaine();
131 int nb_som = domaine.nb_som();
132 DoubleTab vit(nb_som,dimension);
133 double temps_crt = mon_equation->inconnue().temps();
134 double dD=0;
135
136 ch_vit_pour_fft(vit);
137 calc_sp_nouveau_2(vit,nb_som_dir,temps_crt,Ec,dD);
138 }
139 double nE=pow(Ec/Ec_init,0.5);
140 Cerr << "Ec = " << Ec << finl;
141 Cerr << "Renormalisation!!" << finl;
142
143 vitesse/=nE;
144 // Ec=vitesse*vitesse;
145 // Ec/=(2.*nb_faces/3.);
146 // Cerr << "Ec = " << Ec << finl;
147 return;
148}
149
150/*! @brief Calcul de Ec = 1/2 < u^2 > D = 1/2 < w^2 > ou w est le rotationnel de u
151 *
152 * x^2 est le produit scalaire x*x
153 * < x > est la moyenne sur le volume
154 *
155 * < x > = INTEGRALE(x_i d Omega) / INTEGRALE(d Omega)
156 * sur Omega sur Omega
157 *
158 */
160{
161 const Domaine_dis_base& zdisbase=mon_equation->inconnue().domaine_dis_base();
162 const Domaine_VDF& domaine_VDF=ref_cast(Domaine_VDF, zdisbase);
163 const Domaine& domaine = zdisbase.domaine();
164 const int nb_elem=domaine.nb_elem();
165
166 const Champ_Face_VDF& vit = ref_cast(Champ_Face_VDF,mon_equation->inconnue());
167 // Calcul de l'Energie cinetique et de l enstrophie
168 const DoubleVect& vitesse =mon_equation->inconnue().valeurs();
169 const int dim = Objet_U::dimension;
170 DoubleTab vorticite(nb_elem, dim);
172
173 const IntTab& elem_faces = domaine_VDF.elem_faces();
174 const DoubleVect& volumes_elem = domaine_VDF.volumes();
175 const int nb_faces_elem = elem_faces.line_size();
176 int elem;
177 double somme_v2 = 0.;
178 double somme_v_elem = 0.;
179 double somme_w2 = 0.;
180 // Calcul de l'energie cinetique: somme sur les volumes de controle de la pression.
181 // Un volume de pression contient deux demi-volumes de controle de vitesse dans
182 // chaque direction. On fait donc pour chaque element reel la somme des v^2 des faces.
183 // (astuce qui permet de tenir compte naturellement des faces periodiques et
184 // des faces de joint)
185 // Somme sur les elements reels
186 for (elem = 0; elem < nb_elem; elem++)
187 {
188 const double volume = volumes_elem[elem];
189 somme_v_elem += volume;
190 // Calcul de la contribution de l'element a l'integrale de v^2
191 {
192 int i_face;
193 double s = 0.;
194 for (i_face = 0; i_face < nb_faces_elem; i_face++)
195 {
196 const int face = elem_faces(elem, i_face);
197 const double v = vitesse(face);
198 s += v * v;
199 }
200 // Chaque face contribue pour la moitie du volume de l'element
201 somme_v2 += volume * 0.5 * s;
202 }
203 // Calcul de la contribution de l'element a l'integrale de w^2
204 {
205 int i;
206 double s = 0.;
207 for (i = 0; i < dim; i++)
208 {
209 const double w_i = vorticite(elem, i);
210 s += w_i * w_i;
211 }
212 somme_w2 += volume * s;
213 }
214 }
215 const double mp_somme_volume = mp_sum(somme_v_elem);
216 const double mp_somme_v2 = mp_sum(somme_v2);
217 const double mp_somme_w2 = mp_sum(somme_w2);
218 if (mp_somme_volume > 0.)
219 {
220 Ec = mp_somme_v2 * 0.5 / mp_somme_volume;
221 D = mp_somme_w2 * 0.5 / mp_somme_volume;
222 }
223 else
224 {
225 Ec = 0.;
226 D = 0.;
227 }
228}
229
230//**********************************************************************//
231
233{
234 const Domaine_dis_base& zdisbase=mon_equation->inconnue().domaine_dis_base();
235 const Domaine_VDF& domaine_vdf=ref_cast(Domaine_VDF, zdisbase);
236 const DoubleTab& vitesse = mon_equation->inconnue().valeurs();
237 const Domaine& domaine_geom = domaine_vdf.domaine();
238 const IntVect& orientation = domaine_vdf.orientation();
239 const IntTab& face_sommets = domaine_vdf.face_sommets();
240 const int nb_faces_ = domaine_vdf.nb_faces();
241 const int nb_som = domaine_geom.nb_som();
242 double temps_crt = mon_equation->inconnue().temps();
243 const char* methode_actuelle="Traitement_particulier_NS_THI_VDF::ch_vit_pour_fft";
244
245 IntTab compteur(nb_som,dimension);
246 int num_face,num_som,i,j,k;
247 vit = 0;
248 compteur = 0;
249
250 vit = -100.0;
251 for (num_face=0; num_face<nb_faces_; num_face++)
252 {
253 j = 0;
254 num_som = face_sommets(num_face,j);
255 k = orientation(num_face);
256 compteur(num_som,k)++;
257 vit(num_som,k) = vitesse[num_face];
258 }
259 i=0;
260 j=0;
261 k=0;
262 IntTab corresp(nb_som_dir+1,nb_som_dir+1,nb_som_dir+1);
263 corresp = -1;
264 for (num_som = 0; num_som < nb_som; num_som++)
265 {
266 corresp(i,j,k) = num_som;
267 if (i<nb_som_dir)
268 i++;
269 else
270 {
271 i=0;
272 if (j<nb_som_dir)
273 j++;
274 else
275 {
276 j=0;
277 if (k<nb_som_dir)
278 k++;
279 }
280 }
281 }
282 for (j=0; j<nb_som_dir; j++)
283 for (i=0; i<=nb_som_dir; i++)
284 {
285 if (corresp(i,j,nb_som_dir) == -1)
286 msg_erreur_maillage(methode_actuelle);
287 vit(corresp(i,j,nb_som_dir),0)=vit(corresp(i,j,0),0);
288 }
289 for (k=0; k<=nb_som_dir; k++)
290 for (i=0; i<=nb_som_dir; i++)
291 {
292 if (corresp(i,nb_som_dir,k) == -1)
293 msg_erreur_maillage(methode_actuelle);
294 vit(corresp(i,nb_som_dir,k),0)=vit(corresp(i,0,k),0);
295 }
296
297 for (k=0; k<nb_som_dir; k++)
298 for (j=0; j<=nb_som_dir; j++)
299 {
300 if (corresp(nb_som_dir,j,k) == -1)
301 msg_erreur_maillage(methode_actuelle);
302 vit(corresp(nb_som_dir,j,k),1)=vit(corresp(0,j,k),1);
303 }
304 for (i=0; i<=nb_som_dir; i++)
305 for (j=0; j<=nb_som_dir; j++)
306 {
307 if (corresp(i,j,nb_som_dir) == -1)
308 msg_erreur_maillage(methode_actuelle);
309 vit(corresp(i,j,nb_som_dir),1)=vit(corresp(i,j,0),1);
310 }
311
312 for (j=0; j<nb_som_dir; j++)
313 for (k=0; k<=nb_som_dir; k++)
314 {
315 if (corresp(nb_som_dir,j,k) == -1)
316 msg_erreur_maillage(methode_actuelle);
317 vit(corresp(nb_som_dir,j,k),2)=vit(corresp(0,j,k),2);
318 }
319 for (i=0; i<=nb_som_dir; i++)
320 for (k=0; k<=nb_som_dir; k++)
321 {
322 if (corresp(i,nb_som_dir,k) == -1)
323 msg_erreur_maillage(methode_actuelle);
324 vit(corresp(i,nb_som_dir,k),2)=vit(corresp(i,0,k),2);
325 }
326
327 // ALEX
328 ////////////////
329 // Rajoute pour ecriture du champ des vitesses dans un fichier
330 // pour nouveau calcul de spectre (postraitement separe).
331 // Ecriture du champ pour un spectre calcule sur la grille a x=cte.
332 ////////////////
333 Nom fichier_vit_0 = "chp_vit_VDF_0_";
334 Nom tps = Nom(temps_crt);
335 fichier_vit_0 += tps;
336 SFichier fic77 (fichier_vit_0);
337 fic77 << nb_som_dir <<finl;
338 fic77 << nb_som_dir <<finl;
339 fic77 << nb_som_dir <<finl;
340
341 for (i=0; i<nb_som_dir; i++)
342 for (j=0; j<nb_som_dir; j++)
343 for (k=0; k<nb_som_dir; k++)
344 fic77 << vit(corresp(i,j,k),0) <<finl;
345
346 for (i=0; i<nb_som_dir; i++)
347 for (j=0; j<nb_som_dir; j++)
348 for (k=0; k<nb_som_dir; k++)
349 fic77 << vit(corresp(i,j,k),1) <<finl;
350
351 for (i=0; i<nb_som_dir; i++)
352 for (j=0; j<nb_som_dir; j++)
353 for (k=0; k<nb_som_dir; k++)
354 fic77 << vit(corresp(i,j,k),2) <<finl;
355 return;
356}
357
359{
360 // Calcul du skewness : -<(du1/dx1)~3>/(<(du1/dx1)~2>)~(3/2)
361 // ce calcul n est valable que pour une periodicite en x
362 const Domaine_dis_base& zdisbase=mon_equation->inconnue().domaine_dis_base();
363 const Domaine_VDF& domaine_vdf=ref_cast(Domaine_VDF, zdisbase);
364
365 const Domaine_Cl_dis_base& zcldis = mon_equation->domaine_Cl_dis();
366 const Domaine_Cl_VDF& domaine_Cl_VDF = ref_cast(Domaine_Cl_VDF,zcldis);
367
368 const DoubleTab& vitesse = mon_equation->inconnue().valeurs();
369 const IntTab& face_voisins = domaine_vdf.face_voisins();
370 const IntTab& elem_faces = domaine_vdf.elem_faces();
371 const IntVect& orientation = domaine_vdf.orientation();
372 const int ndeb_int = domaine_vdf.premiere_face_int();
373
374 int num_face,elem,num_face_2,num_face_2_int,compt=0,ori,num_face_int,num_face_asso,elem_2;
375 double deriv,Skewness_num=0.,Skewness_den=0.,dist;
376
377 int i_cl=0;
378 // i_cl=0 car on veut uniquement u1!!
379
380 const Cond_lim_base& la_cl = domaine_Cl_VDF.les_conditions_limites(i_cl).valeur();
381 if (sub_type(Periodique,la_cl))
382 {
383 const Periodique& la_cl_perio = ref_cast(Periodique,la_cl);
384
385 const Front_VF& le_bord = ref_cast(Front_VF,la_cl.frontiere_dis());
386 int ndeb = le_bord.num_premiere_face();
387 int nfin = ndeb + le_bord.nb_faces();
388
389 for(num_face = ndeb; num_face<nfin; num_face++)
390 {
391 elem = face_voisins(num_face,1);
392 num_face_2_int = elem_faces(elem,dimension);
393 elem_2 = face_voisins(num_face_2_int,1);
394 num_face_2 = elem_faces(elem_2,dimension);
395
396 num_face_int = num_face;
397 deriv = vitesse(num_face_2)-vitesse(num_face_int);
398 dist = domaine_vdf.dist_face(num_face_int,num_face_2,0);
399 if (dist < 0.)
400 {
401 num_face_asso = la_cl_perio.face_associee(num_face-ndeb)+ndeb;
402 dist = domaine_vdf.dist_face(num_face_asso,num_face_2,0);
403 }
404 deriv /=dist;
405 Skewness_num += deriv*deriv*deriv;
406 Skewness_den += deriv*deriv;
407 compt ++;
408 }
409 }
410
411 num_face = ndeb_int;
412 ori = orientation(num_face);
413
414 while(ori == 0)
415 {
416 // Attention : cela ne va etre vrai qu en maillage regulier (idem seulement o2 en reg)
417 elem = face_voisins(num_face,1);
418 if (elem != -1)
419 {
420 num_face_2_int = elem_faces(elem,dimension);
421 elem_2 = face_voisins(num_face_2_int,1);
422 if (elem_2 != -1)
423 {
424 num_face_2 = elem_faces(elem_2,dimension);
425
426 deriv = vitesse(num_face_2)-vitesse(num_face);
427 deriv /= 2*domaine_vdf.dist_face(num_face,num_face_2,0); // on prend 2*delta_x
428
429 Skewness_num += deriv*deriv*deriv;
430 Skewness_den += deriv*deriv;
431 compt ++;
432 }
433 }
434 num_face ++;
435 ori = orientation(num_face);
436 }
437 compt = Process::check_int_overflow(mp_sum(compt));
438 Skewness_num = mp_sum(Skewness_num);
439 Skewness_den = mp_sum(Skewness_den);
440
441 Skewness_num /= compt;
442 Skewness_den /= compt;
443 Skewness_den = pow(Skewness_den,1.5);
444 if (Skewness_den < 1.e-20 )
445 {
446 Cerr << "ATTENTION : denominateur de Skewness < 1.e-20!!!!!" << finl;
447 Skewness = 1.e20;
448 }
449 else
450 Skewness = -Skewness_num/Skewness_den;
451 return;
452}
453
454
455void Traitement_particulier_NS_THI_VDF::calcul_spectre_operateur(int nb_op, DoubleTab& u, DoubleTab& u_av, double dt)
456{
457 const Domaine_dis_base& zdis = mon_equation->domaine_dis();
458 const Domaine& domaine = zdis.domaine();
459 int nb_som = domaine.nb_som();
460 calcul_nb_som_dir(domaine);
461 DoubleTab vit(nb_som,dimension);
462
463 double temps_crt = mon_equation->inconnue().temps();
464
465 const Domaine_dis_base& zdisbase=mon_equation->inconnue().domaine_dis_base();
466 const Domaine_VDF& domaine_VDF=ref_cast(Domaine_VDF, zdisbase);
467 const int nb_faces_ = domaine_VDF.nb_faces();
468 const DoubleVect& volumes_entrelaces = domaine_VDF.volumes_entrelaces();
469
470 DoubleTab u_ap(nb_faces_);
471 DoubleVect E_av(nb_som_dir),E_ap(nb_som_dir);
472
473 // il faut d abord diviser par les volumes entrelaces!! pour la diffusion et la convection mais pas pour les autres
474 int i,j;
475 u *= dt;
476 Cerr << "dt=" << dt << finl;
477 if ((nb_op == 0)||(nb_op==1))
478 for (i=0; i<nb_faces_; i++)
479 {
480 u_ap[i] = u[i]/volumes_entrelaces[i] +u_av[i];
481 }
482 else
483 for (i=0; i<nb_faces_; i++)
484 {
485 u_ap[i] = u[i] +u_av[i];
486 }
487
489 calc_sp_nouveau_2_operateur(vit,nb_som_dir,temps_crt,nb_op,dt,E_av);
490
492 calc_sp_nouveau_2_operateur(vit,nb_som_dir,temps_crt,nb_op,dt,E_ap);
493
494 Nom fichier = "Transfert_";
495 Nom op;
496 if (nb_op==0)
497 op="diff";
498 else if (nb_op==1)
499 op="conv";
500 else if (nb_op==2)
501 op="press";
502 else if (nb_op==3)
503 op="tot";
504 else
505 op =Nom(nb_op);
506
507
508 fichier += op;
509 fichier += "_";
510 Nom tps = Nom(temps_crt);
511 fichier += tps;
512 SFichier fic7 (fichier,ios::app);
513
514 for (j=0; j<nb_som_dir; j++)
515 if (std::fabs(E_ap[j]-E_av[j])>1.e-30)
516 {
517 fic7 << j+1 << " " << (E_ap[j]-E_av[j])/dt << finl;
518 }
519 fic7 << " " << finl;
520 u_av = u_ap;
521
522 return;
523}
524
526{
527 const Domaine_dis_base& zdisbase=mon_equation->inconnue().domaine_dis_base();
528 const Domaine_VDF& domaine_vdf=ref_cast(Domaine_VDF, zdisbase);
529 const Domaine& domaine_geom = domaine_vdf.domaine();
530 const IntVect& orientation = domaine_vdf.orientation();
531 const IntTab& face_sommets = domaine_vdf.face_sommets();
532 const int nb_faces_ = domaine_vdf.nb_faces();
533 const int nb_som = domaine_geom.nb_som();
534 const char* methode_actuelle="Traitement_particulier_NS_THI_VDF::ch_vit_pour_fft_operateur";
535
536 IntTab compteur(nb_som,dimension);
537 int num_face,num_som,i,j,k;
538 vit = 0;
539 compteur = 0;
540
541 vit = -100.0;
542 for (num_face=0; num_face<nb_faces_; num_face++)
543 {
544 j = 0;
545 num_som = face_sommets(num_face,j);
546 k = orientation(num_face);
547 compteur(num_som,k)++;
548 vit(num_som,k) = u[num_face];
549 }
550 i=0;
551 j=0;
552 k=0;
553 IntTab corresp(nb_som_dir+1,nb_som_dir+1,nb_som_dir+1);
554
555 for (num_som = 0; num_som < nb_som; num_som++)
556 {
557 corresp(i,j,k) = num_som;
558 if (i<nb_som_dir)
559 i++;
560 else
561 {
562 i=0;
563 if (j<nb_som_dir)
564 j++;
565 else
566 {
567 j=0;
568 if (k<nb_som_dir)
569 k++;
570 }
571 }
572 }
573
574 for (j=0; j<nb_som_dir; j++)
575 for (i=0; i<=nb_som_dir; i++)
576 {
577 if (corresp(i,j,nb_som_dir) == -1)
578 msg_erreur_maillage(methode_actuelle);
579 vit(corresp(i,j,nb_som_dir),0)=vit(corresp(i,j,0),0);
580 }
581 for (k=0; k<=nb_som_dir; k++)
582 for (i=0; i<=nb_som_dir; i++)
583 {
584 if (corresp(i,nb_som_dir,k) == -1)
585 msg_erreur_maillage(methode_actuelle);
586 vit(corresp(i,nb_som_dir,k),0)=vit(corresp(i,0,k),0);
587 }
588
589 for (k=0; k<nb_som_dir; k++)
590 for (j=0; j<=nb_som_dir; j++)
591 {
592 if (corresp(nb_som_dir,j,k) == -1)
593 msg_erreur_maillage(methode_actuelle);
594 vit(corresp(nb_som_dir,j,k),1)=vit(corresp(0,j,k),1);
595 }
596 for (i=0; i<=nb_som_dir; i++)
597 for (j=0; j<=nb_som_dir; j++)
598 {
599 if (corresp(i,j,nb_som_dir) == -1)
600 msg_erreur_maillage(methode_actuelle);
601 vit(corresp(i,j,nb_som_dir),1)=vit(corresp(i,j,0),1);
602 }
603
604 for (j=0; j<nb_som_dir; j++)
605 for (k=0; k<=nb_som_dir; k++)
606 {
607 if (corresp(nb_som_dir,j,k) == -1)
608 msg_erreur_maillage(methode_actuelle);
609 vit(corresp(nb_som_dir,j,k),2)=vit(corresp(0,j,k),2);
610 }
611 for (i=0; i<=nb_som_dir; i++)
612 for (k=0; k<=nb_som_dir; k++)
613 {
614 if (corresp(i,nb_som_dir,k) == -1)
615 msg_erreur_maillage(methode_actuelle);
616 vit(corresp(i,nb_som_dir,k),2)=vit(corresp(i,0,k),2);
617 }
618 return ;
619}
620
621
622
class Champ_Face_VDF Cette classe sert a representer un champ vectoriel dont on ne calcule
void calculer_rotationnel_ordre2_centre_element(DoubleTab &) const
classe Cond_lim_base Classe de base pour la hierarchie des classes qui representent les differentes c...
virtual Frontiere_dis_base & frontiere_dis()
Renvoie la frontiere discretisee a laquelle les conditions aux limites s'appliquent.
int_t nb_elem() const
Definition Domaine.h:131
int_t nb_som() const
Renvoie le nombre de sommets du domaine.
Definition Domaine.h:121
class Domaine_Cl_VDF
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
class Domaine_VDF
Definition Domaine_VDF.h:64
int orientation(int) const override
inline DoubleVect& Domaine_VDF::porosite_face() {
double dist_face(int, int, int k) const
int nb_faces() const
renvoie le nombre global de faces.
Definition Domaine_VF.h:471
DoubleVect & volumes_entrelaces()
Definition Domaine_VF.h:99
double volumes(int i) const
Definition Domaine_VF.h:113
int face_sommets(int i, int j) const
renvoie le numero du ieme sommet de la face num_face.
Definition Domaine_VF.h:583
int elem_faces(int i, int j) const
renvoie le numero de le ieme face de la maille num_elem la facon dont ces faces sont numerotees est
Definition Domaine_VF.h:543
int premiere_face_int() const
une face est interne ssi elle separe deux elements.
Definition Domaine_VF.h:463
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
Definition Domaine_VF.h:418
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
class Front_VF
Definition Front_VF.h:36
int nb_faces() const
Definition Front_VF.h:53
int num_premiere_face() const
Definition Front_VF.h:63
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
static int dimension
Definition Objet_U.h:99
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
classe Periodique Cette classe represente une condition aux limites periodique.
Definition Periodique.h:31
int face_associee(int i) const
Definition Periodique.h:35
static int check_int_overflow(trustIdType)
Definition Process.cpp:428
static int nproc()
renvoie le nombre de processeurs dans le groupe courant Voir Comm_Group::nproc() et PE_Groups::curren...
Definition Process.cpp:104
static double mp_sum(double)
Calcule la somme de x sur tous les processeurs du groupe courant.
Definition Process.cpp:146
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
Cette classe est a la classe C++ ofstream ce que la classe Sortie est a la classe C++ ostream Elle re...
Definition SFichier.h:27
Classe de base des flux de sortie.
Definition Sortie.h:52
int line_size() const
Definition TRUSTVect.tpp:67
classe Traitement_particulier_NS_THI_VDF Cette classe permet de faire les traitements particuliers
void calcul_Ec_D(double &, double &)
Calcul de Ec = 1/2 < u^2 > D = 1/2 < w^2 > ou w est le rotationnel de u.
void calcul_spectre_operateur(int, DoubleTab &, DoubleTab &, double) override
classe Traitement_particulier_THI Cette classe permet de faire les traitements particuliers