16#include <Op_Diff_VEF_Face_Stab.h>
17#include <Champ_P1NC.h>
18#include <Champ_Q1NC.h>
20#include <Periodique.h>
22#include <Neumann_paroi.h>
23#include <Echange_externe_impose.h>
24#include <Neumann_sortie_libre.h>
26#include <Dirichlet_homogene.h>
27#include <Neumann_homogene.h>
30#include <Milieu_base.h>
33#include <Probleme_base.h>
34#include <Navier_Stokes_std.h>
35#include <Porosites_champ.h>
39#include <Schema_Temps_base.h>
43double minimum(
double a,
double b,
double c)
48 else if (b<=c)
return b;
52double maximum(
double a,
double b,
double c)
57 else if (b>=c)
return b;
61double minimum(
double a,
double b)
67double maximum(
double a,
double b)
85 Motcle motlu,accouverte=
"{",accfermee=
"}";
88 les_mots[0]=
"standard";
90 les_mots[2]=
"new_jacobian";
94 if (motlu!=accouverte)
96 Cerr<<
"Error in Op_Diff_VEF_Face_Stab::readOn()"<<finl;
97 Cerr<<
"Option keywords must be preceded by an open brace"<<finl;
102 while (motlu!=accfermee)
104 int rang=les_mots.search(motlu);
117 Cerr<<
"Error in Op_Diff_VEF_Face_Stab::readOn()"<<finl;
118 Cerr<<
"Word "<<motlu<<
" is unknown"<<finl;
119 Cerr<<
"Known keywords are : "<<les_mots<<finl;
132 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
141 DoubleTab tab_inconnue;
148 modif_par_porosite_si_flag(
nu_,nu,!marq,porosite_elem);
149 const DoubleTab& inconnue=modif_par_porosite_si_flag(inconnue_org,tab_inconnue,marq,porosite_face);
153 DoubleTab resu2(resu);
156 DoubleTab Aij(nb_elem_tot,nb_faces_elem,nb_faces_elem);
175 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
179 const DoubleVect& inconnueVect = inconnue;
180 DoubleVect& resuVect = resu;
182 const int nb_bords=les_cl.size();
201 for (n_bord=0; n_bord<nb_bords; n_bord++)
213 for (ind_face=num1; ind_face<num2; ind_face++)
218 if (face<face_associee)
219 for (dim=0; dim<nb_comp; dim++)
221 resuVect[face*nb_comp+dim]+=resuVect[face_associee*nb_comp+dim];
222 resuVect[face_associee*nb_comp+dim]=resuVect[face*nb_comp+dim];
230 for (ind_face=num1; ind_face<num2; ind_face++)
233 surface=domaine_VEF.
surface(face);
235 for (dim=0; dim<nb_comp; dim++)
237 flux=la_cl_paroi.
flux_impose(ind_face,dim)*surface;
238 resuVect[face*nb_comp+dim]-=flux;
239 tab_flux_bords(face,dim)=flux;
247 for (ind_face=num1; ind_face<num2; ind_face++)
250 surface=domaine_VEF.
surface(face);
252 for (dim=0; dim<nb_comp; dim++)
254 flux=la_cl_paroi.
h_imp(ind_face,dim)*(la_cl_paroi.
T_ext(ind_face,dim)-inconnueVect[face*nb_comp+dim])*surface;
255 resuVect[face*nb_comp+dim]-=flux;
256 tab_flux_bords(face,dim)=flux;
261 || sub_type(
Symetrie,la_cl.valeur())
264 for (ind_face=num1; ind_face<num2; ind_face++)
268 for (dim=0; dim<nb_comp; dim++)
269 tab_flux_bords(face,dim)=0.;
278 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
286 const DoubleVect& inconnue = inconnueTab;
287 DoubleVect& resu = resuTab;
290 int facei_loc=0,facei=0;
291 int facej_loc=0,facej=0;
298 const IntTab& elem_faces=domaine_VEF.
elem_faces();
300 for (elem=0; elem<nb_elem_tot; elem++)
301 for (facei_loc=0; facei_loc<nb_faces_elem; facei_loc++)
303 facei=elem_faces(elem,facei_loc);
305 for (facej_loc=facei_loc+1; facej_loc<nb_faces_elem; facej_loc++)
307 facej=elem_faces(elem,facej_loc);
309 const double aij=Aij(elem,facei_loc,facej_loc);
311 for (dim=0; dim<nb_comp; dim++)
313 inc_i=inconnue[facei*nb_comp+dim];
314 inc_j=inconnue[facej*nb_comp+dim];
315 delta_ij=aij*(inc_j-inc_i);
317 resu[facei*nb_comp+dim]+=delta_ij;
318 resu[facej*nb_comp+dim]-=delta_ij;
326 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
334 const DoubleVect& inconnue= inconnueTab;
335 DoubleVect& resu= resuTab;
338 int facei_loc=0,facei=0;
339 int facej_loc=0,facej=0;
347 const IntTab& elem_faces=domaine_VEF.
elem_faces();
349 for (elem=0; elem<nb_elem_tot; elem++)
350 for (facei_loc=0; facei_loc<nb_faces_elem; facei_loc++)
352 facei=elem_faces(elem,facei_loc);
354 for (facej_loc=facei_loc+1; facej_loc<nb_faces_elem; facej_loc++)
356 facej=elem_faces(elem,facej_loc);
358 const double aij=Aij(elem,facei_loc,facej_loc);
364 for (dim=0; dim<nb_comp; dim++)
366 inc_i=inconnue[facei*nb_comp+dim];
367 inc_j=inconnue[facej*nb_comp+dim];
368 delta_ij=dij*(inc_j-inc_i);
370 resu[facei*nb_comp+dim]+=delta_ij;
371 resu[facej*nb_comp+dim]-=delta_ij;
380 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
389 const DoubleVect& inconnue = inconnueTab;
390 DoubleVect& resu = resuTab;
392 const DoubleTab& xv=domaine_VEF.
xv();
397 int facei_loc=0,facei=0;
398 int facej_loc=0,facej=0;
405 double delta_imax=0.,delta_imin=0.;
406 double delta_jmax=0.,delta_jmin=0.;
408 double sij_max=DMINFLOAT;
409 double sij_min=DMAXFLOAT;
410 double muij=0.,muji=0.;
417 const IntTab& elem_faces=domaine_VEF.
elem_faces();
419 DoubleTab Minima(nb_faces_tot);
420 DoubleTab Maxima(nb_faces_tot);
423 for (dim=0; dim<nb_comp; dim++)
428 for (elem=0; elem<nb_elem_tot; elem++)
429 for (facei_loc=0; facei_loc<nb_faces_elem; facei_loc++)
431 facei=elem_faces(elem,facei_loc);
432 ok_facei=is_dirichlet_faces_(facei);
433 inc_i=inconnue[facei*nb_comp+dim];
435 delta_imin=Minima(facei)-inc_i;
436 delta_imax=Maxima(facei)-inc_i;
437 assert(delta_imax>=0.);
438 assert(delta_imin<=0.);
440 for (facej_loc=facei_loc+1; facej_loc<nb_faces_elem; facej_loc++)
442 const double aij=Aij(elem,facei_loc,facej_loc);
446 facej=elem_faces(elem,facej_loc);
447 ok_facej=is_dirichlet_faces_(facej);
448 inc_j=inconnue[facej*nb_comp+dim];
451 rij(dim2)=xv(facej,dim2)-xv(facei,dim2);
456 delta_ij=inc_i-inc_j;
457 delta_jmin=Minima(facej)-inc_j;
458 delta_jmax=Maxima(facej)-inc_j;
459 assert(delta_jmax>=0.);
460 assert(delta_jmin<=0.);
471 if (!ok_facei && !ok_facej)
472 sij=minimum(muij,delta_ij,muji);
473 if (!ok_facei && ok_facej)
474 sij=minimum(muij,delta_ij);
475 if (ok_facei && !ok_facej)
476 sij=minimum(delta_ij,muji);
478 else if (delta_ij<0.)
483 if (!ok_facei && !ok_facej)
484 sij=maximum(muij,delta_ij,muji);
485 if (!ok_facei && ok_facej)
486 sij=maximum(muij,delta_ij);
487 if (ok_facei && !ok_facej)
488 sij=maximum(delta_ij,muji);
494 double tmp=sij/delta_ij;
495 if (tmp>sij_max) sij_max=tmp;
496 if (tmp<sij_min) sij_min=tmp;
499 resu[facei*nb_comp+dim]-=aij*sij;
500 resu[facej*nb_comp+dim]+=aij*sij;
512 SFichier mem_fichier(
"sij_memory.txt");
513 mem_fichier<<sij_max<<
" "<<sij_min<<finl;
520 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
525 const IntTab& elem_faces=domaine_VEF.
elem_faces();
529 const DoubleVect& volumes=domaine_VEF.
volumes();
538 int facei_loc=0,facei=0;
539 int facej_loc=0,facej=0;
547 for (elem=0; elem<nb_elem_tot; elem++)
550 volume=1./volumes(elem);
553 for (facei_loc=0; facei_loc<nb_faces_elem; facei_loc++)
555 facei=elem_faces(elem,facei_loc);
558 if (face_voisins(facei,0)!=elem) signei=-1.;
560 for (facej_loc=facei_loc+1; facej_loc<nb_faces_elem; facej_loc++)
562 facej=elem_faces(elem,facej_loc);
565 if (face_voisins(facej,0)!=elem) signej=-1.;
569 psc+=face_normales(facei,dim)*face_normales(facej,dim);
573 Aij(elem,facei_loc,facej_loc)=psc;
574 Aij(elem,facej_loc,facei_loc)=psc;
582 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
586 const IntTab& elem_faces=domaine_VEF.
elem_faces();
591 const DoubleVect& volumes=domaine_VEF.
volumes();
600 int facek_loc=0,facek=0;
604 for (elem_loc=0; elem_loc<2; elem_loc++)
606 facei_loc=get_num_fac_loc(facei,elem_loc);
607 elem=face_voisins(facei,elem_loc);
611 volume+=volumes(elem);
613 for (facek_loc=0; facek_loc<nb_faces_elem; facek_loc++)
614 if (facek_loc!=facei_loc)
616 facek=elem_faces(elem,facek_loc);
619 if (face_voisins(facek,0)!=elem) signek=-1.;
623 psc+=face_normales(facek,dim)*rij(dim);
625 if (psc<0.) psc*=-1.;
639 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
645 const IntTab& elem_faces=domaine_VEF.
elem_faces();
648 int facei_loc=0,facei=0;
649 int facej_loc=0,facej=0;
657 const DoubleVect& inconnue= inconnueTab;
659 assert(Minima.
nb_dim()==1);
660 assert(Minima.
dimension(0)==nb_faces_tot);
663 for (facei=0; facei<nb_faces_tot; facei++)
664 Minima(facei)=inconnue[facei*nb_comp+dim];
666 for (elem=0; elem<nb_elem_tot; elem++)
667 for (facei_loc=0; facei_loc<nb_faces_elem; facei_loc++)
669 facei=elem_faces(elem,facei_loc);
671 inc_i=inconnue[facei*nb_comp+dim];
672 double& mini=Minima(facei);
674 for (facej_loc=facei_loc+1; facej_loc<nb_faces_elem; facej_loc++)
676 facej=elem_faces(elem,facej_loc);
678 inc_j=inconnue[facej*nb_comp+dim];
679 double& minj=Minima(facej);
681 if (inc_j<mini) mini=inc_j;
682 if (inc_i<minj) minj=inc_i;
689 const int nb_bords=les_cl.size();
695 for (n_bord=0; n_bord<nb_bords; n_bord++)
707 for (ind_face=num1; ind_face<num2; ind_face++)
714 double& mini=Minima(facei);
715 double& minj=Minima(facej);
717 if (mini<minj) minj=mini;
718 if (minj<mini) mini=minj;
727 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
733 const IntTab& elem_faces=domaine_VEF.
elem_faces();
736 int facei_loc=0,facei=0;
737 int facej_loc=0,facej=0;
745 const DoubleVect& inconnue = inconnueTab;
747 assert(Maxima.
nb_dim()==1);
748 assert(Maxima.
dimension(0)==nb_faces_tot);
751 for (facei=0; facei<nb_faces_tot; facei++)
752 Maxima(facei)=inconnue[facei*nb_comp+dim];
754 for (elem=0; elem<nb_elem_tot; elem++)
755 for (facei_loc=0; facei_loc<nb_faces_elem; facei_loc++)
757 facei=elem_faces(elem,facei_loc);
759 inc_i=inconnue[facei*nb_comp+dim];
760 double& maxi=Maxima(facei);
762 for (facej_loc=facei_loc+1; facej_loc<nb_faces_elem; facej_loc++)
764 facej=elem_faces(elem,facej_loc);
766 inc_j=inconnue[facej*nb_comp+dim];
767 double& maxj=Maxima(facej);
769 if (inc_j>maxi) maxi=inc_j;
770 if (inc_i>maxj) maxj=inc_i;
777 const int nb_bords=les_cl.size();
783 for (n_bord=0; n_bord<nb_bords; n_bord++)
795 for (ind_face=num1; ind_face<num2; ind_face++)
802 double& maxi=Maxima(facei);
803 double& maxj=Maxima(facej);
805 if (maxi>maxj) maxj=maxi;
806 if (maxj>maxi) maxi=maxj;
819 const Domaine_VEF& domaine_VEF=le_dom_vef.valeur();
824 const int nb_bord=les_cl.size();
829 is_dirichlet_faces_.resize(nb_faces_tot);
830 is_dirichlet_faces_=0;
832 for (
int n_bord=0; n_bord<nb_bord; n_bord++)
839 if ( (sub_type(
Dirichlet,la_cl.valeur()))
842 for (ind_face=0; ind_face<nb_faces_bord_tot; ind_face++)
845 is_dirichlet_faces_(face)=1;
863 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
864 const IntTab& elem_faces = domaine_VEF.
elem_faces();
865 const IntTab& face_voisins = domaine_VEF.
face_voisins();
869 int nb_dim = transporte.
nb_dim();
878 modif_par_porosite_si_flag(
nu_,nu,!marq,porosite_elem);
879 DoubleVect porosite_eventuelle(
equation().milieu().porosite_face());
881 porosite_eventuelle=1;
893 for (
int n_bord=0; n_bord<nb_bords; n_bord++)
898 int num2 = num1 + le_bord.
nb_faces();
906 int num2b=num1+le_bord.
nb_faces()/2;
907 for (num_face=num1; num_face<num2b; num_face++)
909 elem1 = face_voisins(num_face,0);
910 elem2 = face_voisins(num_face,1);
912 for (i=0; i<nb_faces_elem; i++)
914 if ( (j=elem_faces(elem1,i)) > num_face )
916 val =
viscA(num_face,j,elem1,nu(elem1));
918 for (
int nc=0; nc<nb_comp; nc++)
920 int n0=num_face*nb_comp+nc;
923 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
924 matrice(n0,j0)-=val*porosite_eventuelle(j);
925 matrice(j0,n0)-=val*porosite_eventuelle(num_face);
926 matrice(j0,j0)+=val*porosite_eventuelle(j);
931 if ( (j=elem_faces(elem2,i)) > num_face )
933 val=
viscA(num_face,j,elem2,nu(elem2));
935 for (
int nc=0; nc<nb_comp; nc++)
937 int n0=num_face*nb_comp+nc;
939 int n0perio=fac_asso*nb_comp+nc;
940 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
941 matrice(n0,j0)-=val*porosite_eventuelle(j);
942 matrice(j0,n0perio)-=val*porosite_eventuelle(num_face);
943 matrice(j0,j0)+=val*porosite_eventuelle(j);
953 for (num_face=num1; num_face<num2; num_face++)
955 elem1 = face_voisins(num_face,0);
956 for (i=0; i<nb_faces_elem; i++)
958 if ( (j= elem_faces(elem1,i)) > num_face )
960 val =
viscA(num_face,j,elem1,nu(elem1));
962 for (
int nc=0; nc<nb_comp; nc++)
964 int n0=num_face*nb_comp+nc;
967 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
968 matrice(n0,j0)-=val*porosite_eventuelle(j);
969 matrice(j0,n0)-=val*porosite_eventuelle(num_face);
970 matrice(j0,j0)+=val*porosite_eventuelle(j);
979 for (num_face=num_premiere_face; num_face<n1; num_face++)
981 elem1 = face_voisins(num_face,0);
982 elem2 = face_voisins(num_face,1);
984 for (i=0; i<nb_faces_elem; i++)
986 if ( (j=elem_faces(elem1,i)) > num_face )
988 val =
viscA(num_face,j,elem1,nu(elem1));
990 for (
int nc=0; nc<nb_comp; nc++)
992 int n0=num_face*nb_comp+nc;
995 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
996 matrice(n0,j0)-=val*porosite_eventuelle(j);
997 matrice(j0,n0)-=val*porosite_eventuelle(num_face);
998 matrice(j0,j0)+=val*porosite_eventuelle(j);
1003 if ( (j=elem_faces(elem2,i)) > num_face )
1005 val=
viscA(num_face,j,elem2,nu(elem2));
1007 for (
int nc=0; nc<nb_comp; nc++)
1009 int n0=num_face*nb_comp+nc;
1010 int j0=j*nb_comp+nc;
1012 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
1013 matrice(n0,j0)-=val*porosite_eventuelle(j);
1014 matrice(j0,n0)-=val*porosite_eventuelle(num_face);
1015 matrice(j0,j0)+=val*porosite_eventuelle(j);
1036 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
1037 const IntTab& elem_faces = domaine_VEF.
elem_faces();
1038 const IntTab& face_voisins = domaine_VEF.
face_voisins();
1042 int nb_dim = transporte.
nb_dim();
1051 modif_par_porosite_si_flag(
nu_,nu,!marq,porosite_elem);
1052 DoubleVect porosite_eventuelle(
equation().milieu().porosite_face());
1054 porosite_eventuelle=1;
1066 for (
int n_bord=0; n_bord<nb_bords; n_bord++)
1071 int num2 = num1 + le_bord.
nb_faces();
1078 int num2b=num1+le_bord.
nb_faces()/2;
1079 for (num_face=num1; num_face<num2b; num_face++)
1081 elem1 = face_voisins(num_face,0);
1082 elem2 = face_voisins(num_face,1);
1084 for (i=0; i<nb_faces_elem; i++)
1086 if ( (j=elem_faces(elem1,i)) > num_face )
1088 for (
int nc=0; nc<nb_comp; nc++)
1090 val =
viscA(num_face,j,elem1,nu(elem1,nc));
1093 int n0=num_face*nb_comp+nc;
1094 int j0=j*nb_comp+nc;
1096 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
1097 matrice(n0,j0)-=val*porosite_eventuelle(j);
1098 matrice(j0,n0)-=val*porosite_eventuelle(num_face);
1099 matrice(j0,j0)+=val*porosite_eventuelle(j);
1104 if ( (j=elem_faces(elem2,i)) > num_face )
1106 for (
int nc=0; nc<nb_comp; nc++)
1108 val =
viscA(num_face,j,elem2,nu(elem1,nc));
1110 int n0=num_face*nb_comp+nc;
1111 int j0=j*nb_comp+nc;
1112 int n0perio=fac_asso*nb_comp+nc;
1113 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
1114 matrice(n0,j0)-=val*porosite_eventuelle(j);
1115 matrice(j0,n0perio)-=val*porosite_eventuelle(num_face);
1116 matrice(j0,j0)+=val*porosite_eventuelle(j);
1126 for (num_face=num1; num_face<num2; num_face++)
1128 elem1 = face_voisins(num_face,0);
1129 for (i=0; i<nb_faces_elem; i++)
1131 if ( (j= elem_faces(elem1,i)) > num_face )
1133 for (
int nc=0; nc<nb_comp; nc++)
1135 val =
viscA(num_face,j,elem1,nu(elem1,nc));
1137 int n0=num_face*nb_comp+nc;
1138 int j0=j*nb_comp+nc;
1140 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
1141 matrice(n0,j0)-=val*porosite_eventuelle(j);
1142 matrice(j0,n0)-=val*porosite_eventuelle(num_face);
1143 matrice(j0,j0)+=val*porosite_eventuelle(j);
1153 elem1 = face_voisins(num_face,0);
1154 elem2 = face_voisins(num_face,1);
1156 for (i=0; i<nb_faces_elem; i++)
1158 if ( (j=elem_faces(elem1,i)) > num_face )
1160 for (
int nc=0; nc<nb_comp; nc++)
1162 val =
viscA(num_face,j,elem1,nu(elem1,nc));
1164 int n0=num_face*nb_comp+nc;
1165 int j0=j*nb_comp+nc;
1167 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
1168 matrice(n0,j0)-=val*porosite_eventuelle(j);
1169 matrice(j0,n0)-=val*porosite_eventuelle(num_face);
1170 matrice(j0,j0)+=val*porosite_eventuelle(j);
1175 if ( (j=elem_faces(elem2,i)) > num_face )
1177 for (
int nc=0; nc<nb_comp; nc++)
1179 val=
viscA(num_face,j,elem2,nu(elem2,nc));
1181 int n0=num_face*nb_comp+nc;
1182 int j0=j*nb_comp+nc;
1184 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
1185 matrice(n0,j0)-=val*porosite_eventuelle(j);
1186 matrice(j0,n0)-=val*porosite_eventuelle(num_face);
1187 matrice(j0,j0)+=val*porosite_eventuelle(j);
classe Cond_lim Classe generique servant a representer n'importe quelle classe
classe Conds_lim Cette classe represente un vecteur de conditions aux limites.
Classe Dirichlet_homogene Cette classe est la classe de base de la hierarchie des conditions aux limi...
classe Dirichlet Cette classe est la classe de base de la hierarchie des conditions aux limites de ty...
int nb_faces_elem(int=0) const
Renvoie le nombre de face de type i des elements geometriques constituants le domaine.
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
int nb_faces() const
renvoie le nombre global de faces.
int nb_faces_tot() const
renvoie le nombre total de faces.
virtual double face_normales(int face, int comp) const
double xv(int num_face, int k) const
double volumes(int i) const
const IntTab & get_num_fac_loc() const
virtual double surface(int i) const
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
int premiere_face_int() const
une face est interne ssi elle separe deux elements.
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
int nb_faces_bord() const
renvoie le nombre de faces sur lesquelles sont appliquees les conditions limites :
const Domaine & domaine() const
Classe Echange_externe_impose: Cette classe represente le cas particulier de la classe.
virtual double h_imp(int num) const
Renvoie la valeur du coefficient d'echange de chaleur impose sur la i-eme composante.
virtual double T_ext(int num) const
Renvoie la valeur de la temperature imposee sur la i-eme composante du champ de frontiere.
Class defining operators and methods for all reading operation in an input flow (file,...
virtual const Milieu_base & milieu() const =0
int num_premiere_face() const
int num_face(const int) const
Classe Matrice_Morse Represente une matrice M (creuse), non necessairement carree.
DoubleVect & porosite_elem()
DoubleVect & porosite_face()
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
Classe Neumann_homogene Cette classe est la classe de base de la hierarchie des conditions aux limite...
Classe Neumann_paroi Cette condition limite correspond a un flux impose pour l'equation de.
classe Neumann_sortie_libre Cette classe represente une frontiere ouverte sans vitesse imposee
virtual double flux_impose(int i) const
Renvoie la valeur du flux impose sur la i-eme composante du champ representant le flux a la frontiere...
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
class Op_Diff_VEF_Face_Stab Cette classe represente l'operateur de diffusion
void ajouter_contribution(const DoubleTab &, Matrice_Morse &) const
void calculer_min(const DoubleTab &, int &, DoubleTab &) const
void ajouter_antidiffusion(const DoubleTab &, const DoubleTab &, DoubleTab &) const
void modifie_pour_Cl(const DoubleTab &, DoubleTab &) const
DoubleTab & ajouter(const DoubleTab &, DoubleTab &) const override
void ajouter_diffusion(const DoubleTab &, const DoubleTab &, DoubleTab &) const
void calculer_max(const DoubleTab &, int &, DoubleTab &) const
void calculer_coefficients(const DoubleTab &, DoubleTab &) const
double calculer_gradients(int, const DoubleTab &) const
void ajouter_contribution_multi_scalaire(const DoubleTab &, Matrice_Morse &) const
void ajouter_operateur_centre(const DoubleTab &, const DoubleTab &, DoubleTab &) const
void completer() override
Associe l'operateur au domaine_dis, le domaine_Cl_dis, et a l'inconnue de son equation.
class Op_Diff_VEF_Face Cette classe represente l'operateur de diffusion
void completer() override
Associe l'operateur au domaine_dis, le domaine_Cl_dis, et a l'inconnue de son equation.
void ajouter_contribution_multi_scalaire(const DoubleTab &, Matrice_Morse &) const
void ajouter_contribution(const DoubleTab &, Matrice_Morse &) const
int phi_psi_diffuse(const Equation_base &eq) const
definit si on calcule div(phi nu grad Psi) ou div(nu grap Phi psi)
virtual void remplir_nu(DoubleTab &) const
double viscA(int face_i, int face_j, int num_elem, const _TYPE_ &diffu) const
void modifier_matrice_pour_periodique_apres_contribuer(Matrice_Morse &matrice, const Equation_base &) const
Somme les 2 lignes des faces periodiques associees permet de calculer dans le code sans se poser de q...
void modifier_matrice_pour_periodique_avant_contribuer(Matrice_Morse &matrice, const Equation_base &) const
divise les coefficients sur les ligne des faces periodiques par 2 en prevision de l'application modif...
void modifier_flux(const Operateur_base &) const
classe Periodique Cette classe represente une condition aux limites periodique.
int face_associee(int i) const
static double mp_min(double)
static double mp_max(double)
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
static int je_suis_maitre()
renvoie 1 si on est sur le processeur maitre du groupe courant (c'est a dire me() == 0),...
Cette classe est a la classe C++ ofstream ce que la classe Sortie est a la classe C++ ostream Elle re...
Classe de base des flux de sortie.
virtual void declare_support_masse_volumique(int ok)
Le constructeur d'une classe derivee qui se sert de la masse volumique doit appeler cette fonction av...
classe Symetrie Sur les faces de symetrie on a les proprietes suivantes:
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
_SIZE_ dimension(int d) const