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();
140 DoubleTab tab_inconnue;
147 modif_par_porosite_si_flag(
nu_,nu,!marq,porosite_elem);
148 const DoubleTab& inconnue=modif_par_porosite_si_flag(inconnue_org,tab_inconnue,marq,porosite_face);
152 DoubleTab resu2(resu);
155 DoubleTab Aij(nb_elem_tot,nb_faces_elem,nb_faces_elem);
174 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
178 const DoubleVect& inconnueVect = inconnue;
179 DoubleVect& resuVect = resu;
181 const int nb_bords=les_cl.size();
200 for (n_bord=0; n_bord<nb_bords; n_bord++)
212 for (ind_face=num1; ind_face<num2; ind_face++)
217 if (face<face_associee)
218 for (dim=0; dim<nb_comp; dim++)
220 resuVect[face*nb_comp+dim]+=resuVect[face_associee*nb_comp+dim];
221 resuVect[face_associee*nb_comp+dim]=resuVect[face*nb_comp+dim];
229 for (ind_face=num1; ind_face<num2; ind_face++)
232 surface=domaine_VEF.
surface(face);
234 for (dim=0; dim<nb_comp; dim++)
236 flux=la_cl_paroi.
flux_impose(ind_face,dim)*surface;
237 resuVect[face*nb_comp+dim]-=flux;
238 tab_flux_bords(face,dim)=flux;
246 for (ind_face=num1; ind_face<num2; ind_face++)
249 surface=domaine_VEF.
surface(face);
251 for (dim=0; dim<nb_comp; dim++)
253 flux=la_cl_paroi.
h_imp(ind_face,dim)*(la_cl_paroi.
T_ext(ind_face,dim)-inconnueVect[face*nb_comp+dim])*surface;
254 resuVect[face*nb_comp+dim]-=flux;
255 tab_flux_bords(face,dim)=flux;
260 || sub_type(
Symetrie,la_cl.valeur())
263 for (ind_face=num1; ind_face<num2; ind_face++)
267 for (dim=0; dim<nb_comp; dim++)
268 tab_flux_bords(face,dim)=0.;
277 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
285 const DoubleVect& inconnue = inconnueTab;
286 DoubleVect& resu = resuTab;
289 int facei_loc=0,facei=0;
290 int facej_loc=0,facej=0;
297 const IntTab& elem_faces=domaine_VEF.
elem_faces();
299 for (elem=0; elem<nb_elem_tot; elem++)
300 for (facei_loc=0; facei_loc<nb_faces_elem; facei_loc++)
302 facei=elem_faces(elem,facei_loc);
304 for (facej_loc=facei_loc+1; facej_loc<nb_faces_elem; facej_loc++)
306 facej=elem_faces(elem,facej_loc);
308 const double aij=Aij(elem,facei_loc,facej_loc);
310 for (dim=0; dim<nb_comp; dim++)
312 inc_i=inconnue[facei*nb_comp+dim];
313 inc_j=inconnue[facej*nb_comp+dim];
314 delta_ij=aij*(inc_j-inc_i);
316 resu[facei*nb_comp+dim]+=delta_ij;
317 resu[facej*nb_comp+dim]-=delta_ij;
325 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
333 const DoubleVect& inconnue= inconnueTab;
334 DoubleVect& resu= resuTab;
337 int facei_loc=0,facei=0;
338 int facej_loc=0,facej=0;
346 const IntTab& elem_faces=domaine_VEF.
elem_faces();
348 for (elem=0; elem<nb_elem_tot; elem++)
349 for (facei_loc=0; facei_loc<nb_faces_elem; facei_loc++)
351 facei=elem_faces(elem,facei_loc);
353 for (facej_loc=facei_loc+1; facej_loc<nb_faces_elem; facej_loc++)
355 facej=elem_faces(elem,facej_loc);
357 const double aij=Aij(elem,facei_loc,facej_loc);
363 for (dim=0; dim<nb_comp; dim++)
365 inc_i=inconnue[facei*nb_comp+dim];
366 inc_j=inconnue[facej*nb_comp+dim];
367 delta_ij=dij*(inc_j-inc_i);
369 resu[facei*nb_comp+dim]+=delta_ij;
370 resu[facej*nb_comp+dim]-=delta_ij;
379 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
388 const DoubleVect& inconnue = inconnueTab;
389 DoubleVect& resu = resuTab;
391 const DoubleTab& xv=domaine_VEF.
xv();
396 int facei_loc=0,facei=0;
397 int facej_loc=0,facej=0;
404 double delta_imax=0.,delta_imin=0.;
405 double delta_jmax=0.,delta_jmin=0.;
407 double sij_max=DMINFLOAT;
408 double sij_min=DMAXFLOAT;
409 double muij=0.,muji=0.;
416 const IntTab& elem_faces=domaine_VEF.
elem_faces();
418 DoubleTab Minima(nb_faces_tot);
419 DoubleTab Maxima(nb_faces_tot);
422 for (dim=0; dim<nb_comp; dim++)
427 for (elem=0; elem<nb_elem_tot; elem++)
428 for (facei_loc=0; facei_loc<nb_faces_elem; facei_loc++)
430 facei=elem_faces(elem,facei_loc);
431 ok_facei=is_dirichlet_faces_(facei);
432 inc_i=inconnue[facei*nb_comp+dim];
434 delta_imin=Minima(facei)-inc_i;
435 delta_imax=Maxima(facei)-inc_i;
436 assert(delta_imax>=0.);
437 assert(delta_imin<=0.);
439 for (facej_loc=facei_loc+1; facej_loc<nb_faces_elem; facej_loc++)
441 const double aij=Aij(elem,facei_loc,facej_loc);
445 facej=elem_faces(elem,facej_loc);
446 ok_facej=is_dirichlet_faces_(facej);
447 inc_j=inconnue[facej*nb_comp+dim];
450 rij(dim2)=xv(facej,dim2)-xv(facei,dim2);
455 delta_ij=inc_i-inc_j;
456 delta_jmin=Minima(facej)-inc_j;
457 delta_jmax=Maxima(facej)-inc_j;
458 assert(delta_jmax>=0.);
459 assert(delta_jmin<=0.);
470 if (!ok_facei && !ok_facej)
471 sij=minimum(muij,delta_ij,muji);
472 if (!ok_facei && ok_facej)
473 sij=minimum(muij,delta_ij);
474 if (ok_facei && !ok_facej)
475 sij=minimum(delta_ij,muji);
477 else if (delta_ij<0.)
482 if (!ok_facei && !ok_facej)
483 sij=maximum(muij,delta_ij,muji);
484 if (!ok_facei && ok_facej)
485 sij=maximum(muij,delta_ij);
486 if (ok_facei && !ok_facej)
487 sij=maximum(delta_ij,muji);
493 double tmp=sij/delta_ij;
494 if (tmp>sij_max) sij_max=tmp;
495 if (tmp<sij_min) sij_min=tmp;
498 resu[facei*nb_comp+dim]-=aij*sij;
499 resu[facej*nb_comp+dim]+=aij*sij;
511 SFichier mem_fichier(
"sij_memory.txt");
512 mem_fichier<<sij_max<<
" "<<sij_min<<finl;
519 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
524 const IntTab& elem_faces=domaine_VEF.
elem_faces();
528 const DoubleVect& volumes=domaine_VEF.
volumes();
537 int facei_loc=0,facei=0;
538 int facej_loc=0,facej=0;
546 for (elem=0; elem<nb_elem_tot; elem++)
549 volume=1./volumes(elem);
552 for (facei_loc=0; facei_loc<nb_faces_elem; facei_loc++)
554 facei=elem_faces(elem,facei_loc);
557 if (face_voisins(facei,0)!=elem) signei=-1.;
559 for (facej_loc=facei_loc+1; facej_loc<nb_faces_elem; facej_loc++)
561 facej=elem_faces(elem,facej_loc);
564 if (face_voisins(facej,0)!=elem) signej=-1.;
568 psc+=face_normales(facei,dim)*face_normales(facej,dim);
572 Aij(elem,facei_loc,facej_loc)=psc;
573 Aij(elem,facej_loc,facei_loc)=psc;
581 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
585 const IntTab& elem_faces=domaine_VEF.
elem_faces();
590 const DoubleVect& volumes=domaine_VEF.
volumes();
599 int facek_loc=0,facek=0;
603 for (elem_loc=0; elem_loc<2; elem_loc++)
605 facei_loc=get_num_fac_loc(facei,elem_loc);
606 elem=face_voisins(facei,elem_loc);
610 volume+=volumes(elem);
612 for (facek_loc=0; facek_loc<nb_faces_elem; facek_loc++)
613 if (facek_loc!=facei_loc)
615 facek=elem_faces(elem,facek_loc);
618 if (face_voisins(facek,0)!=elem) signek=-1.;
622 psc+=face_normales(facek,dim)*rij(dim);
624 if (psc<0.) psc*=-1.;
638 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
644 const IntTab& elem_faces=domaine_VEF.
elem_faces();
647 int facei_loc=0,facei=0;
648 int facej_loc=0,facej=0;
656 const DoubleVect& inconnue= inconnueTab;
658 assert(Minima.
nb_dim()==1);
659 assert(Minima.
dimension(0)==nb_faces_tot);
662 for (facei=0; facei<nb_faces_tot; facei++)
663 Minima(facei)=inconnue[facei*nb_comp+dim];
665 for (elem=0; elem<nb_elem_tot; elem++)
666 for (facei_loc=0; facei_loc<nb_faces_elem; facei_loc++)
668 facei=elem_faces(elem,facei_loc);
670 inc_i=inconnue[facei*nb_comp+dim];
671 double& mini=Minima(facei);
673 for (facej_loc=facei_loc+1; facej_loc<nb_faces_elem; facej_loc++)
675 facej=elem_faces(elem,facej_loc);
677 inc_j=inconnue[facej*nb_comp+dim];
678 double& minj=Minima(facej);
680 if (inc_j<mini) mini=inc_j;
681 if (inc_i<minj) minj=inc_i;
688 const int nb_bords=les_cl.size();
694 for (n_bord=0; n_bord<nb_bords; n_bord++)
706 for (ind_face=num1; ind_face<num2; ind_face++)
713 double& mini=Minima(facei);
714 double& minj=Minima(facej);
716 if (mini<minj) minj=mini;
717 if (minj<mini) mini=minj;
726 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
732 const IntTab& elem_faces=domaine_VEF.
elem_faces();
735 int facei_loc=0,facei=0;
736 int facej_loc=0,facej=0;
744 const DoubleVect& inconnue = inconnueTab;
746 assert(Maxima.
nb_dim()==1);
747 assert(Maxima.
dimension(0)==nb_faces_tot);
750 for (facei=0; facei<nb_faces_tot; facei++)
751 Maxima(facei)=inconnue[facei*nb_comp+dim];
753 for (elem=0; elem<nb_elem_tot; elem++)
754 for (facei_loc=0; facei_loc<nb_faces_elem; facei_loc++)
756 facei=elem_faces(elem,facei_loc);
758 inc_i=inconnue[facei*nb_comp+dim];
759 double& maxi=Maxima(facei);
761 for (facej_loc=facei_loc+1; facej_loc<nb_faces_elem; facej_loc++)
763 facej=elem_faces(elem,facej_loc);
765 inc_j=inconnue[facej*nb_comp+dim];
766 double& maxj=Maxima(facej);
768 if (inc_j>maxi) maxi=inc_j;
769 if (inc_i>maxj) maxj=inc_i;
776 const int nb_bords=les_cl.size();
782 for (n_bord=0; n_bord<nb_bords; n_bord++)
794 for (ind_face=num1; ind_face<num2; ind_face++)
801 double& maxi=Maxima(facei);
802 double& maxj=Maxima(facej);
804 if (maxi>maxj) maxj=maxi;
805 if (maxj>maxi) maxi=maxj;
818 const Domaine_VEF& domaine_VEF=le_dom_vef.valeur();
823 const int nb_bord=les_cl.size();
828 is_dirichlet_faces_.resize(nb_faces_tot);
829 is_dirichlet_faces_=0;
831 for (
int n_bord=0; n_bord<nb_bord; n_bord++)
838 if ( (sub_type(
Dirichlet,la_cl.valeur()))
841 for (ind_face=0; ind_face<nb_faces_bord_tot; ind_face++)
844 is_dirichlet_faces_(face)=1;
861 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
862 const IntTab& elem_faces = domaine_VEF.
elem_faces();
863 const IntTab& face_voisins = domaine_VEF.
face_voisins();
867 int nb_dim = transporte.
nb_dim();
876 modif_par_porosite_si_flag(
nu_,nu,!marq,porosite_elem);
877 DoubleVect porosite_eventuelle(
equation().milieu().porosite_face());
879 porosite_eventuelle=1;
891 for (
int n_bord=0; n_bord<nb_bords; n_bord++)
896 int num2 = num1 + le_bord.
nb_faces();
904 int num2b=num1+le_bord.
nb_faces()/2;
905 for (num_face=num1; num_face<num2b; num_face++)
907 elem1 = face_voisins(num_face,0);
908 elem2 = face_voisins(num_face,1);
910 for (i=0; i<nb_faces_elem; i++)
912 if ( (j=elem_faces(elem1,i)) > num_face )
914 val =
viscA(num_face,j,elem1,nu(elem1));
916 for (
int nc=0; nc<nb_comp; nc++)
918 int n0=num_face*nb_comp+nc;
921 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
922 matrice(n0,j0)-=val*porosite_eventuelle(j);
923 matrice(j0,n0)-=val*porosite_eventuelle(num_face);
924 matrice(j0,j0)+=val*porosite_eventuelle(j);
929 if ( (j=elem_faces(elem2,i)) > num_face )
931 val=
viscA(num_face,j,elem2,nu(elem2));
933 for (
int nc=0; nc<nb_comp; nc++)
935 int n0=num_face*nb_comp+nc;
937 int n0perio=fac_asso*nb_comp+nc;
938 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
939 matrice(n0,j0)-=val*porosite_eventuelle(j);
940 matrice(j0,n0perio)-=val*porosite_eventuelle(num_face);
941 matrice(j0,j0)+=val*porosite_eventuelle(j);
951 for (num_face=num1; num_face<num2; num_face++)
953 elem1 = face_voisins(num_face,0);
954 for (i=0; i<nb_faces_elem; i++)
956 if ( (j= elem_faces(elem1,i)) > num_face )
958 val =
viscA(num_face,j,elem1,nu(elem1));
960 for (
int nc=0; nc<nb_comp; nc++)
962 int n0=num_face*nb_comp+nc;
965 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
966 matrice(n0,j0)-=val*porosite_eventuelle(j);
967 matrice(j0,n0)-=val*porosite_eventuelle(num_face);
968 matrice(j0,j0)+=val*porosite_eventuelle(j);
977 for (num_face=num_premiere_face; num_face<n1; num_face++)
979 elem1 = face_voisins(num_face,0);
980 elem2 = face_voisins(num_face,1);
982 for (i=0; i<nb_faces_elem; i++)
984 if ( (j=elem_faces(elem1,i)) > num_face )
986 val =
viscA(num_face,j,elem1,nu(elem1));
988 for (
int nc=0; nc<nb_comp; nc++)
990 int n0=num_face*nb_comp+nc;
993 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
994 matrice(n0,j0)-=val*porosite_eventuelle(j);
995 matrice(j0,n0)-=val*porosite_eventuelle(num_face);
996 matrice(j0,j0)+=val*porosite_eventuelle(j);
1001 if ( (j=elem_faces(elem2,i)) > num_face )
1003 val=
viscA(num_face,j,elem2,nu(elem2));
1005 for (
int nc=0; nc<nb_comp; nc++)
1007 int n0=num_face*nb_comp+nc;
1008 int j0=j*nb_comp+nc;
1010 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
1011 matrice(n0,j0)-=val*porosite_eventuelle(j);
1012 matrice(j0,n0)-=val*porosite_eventuelle(num_face);
1013 matrice(j0,j0)+=val*porosite_eventuelle(j);
1033 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
1034 const IntTab& elem_faces = domaine_VEF.
elem_faces();
1035 const IntTab& face_voisins = domaine_VEF.
face_voisins();
1039 int nb_dim = transporte.
nb_dim();
1048 modif_par_porosite_si_flag(
nu_,nu,!marq,porosite_elem);
1049 DoubleVect porosite_eventuelle(
equation().milieu().porosite_face());
1051 porosite_eventuelle=1;
1063 for (
int n_bord=0; n_bord<nb_bords; n_bord++)
1068 int num2 = num1 + le_bord.
nb_faces();
1075 int num2b=num1+le_bord.
nb_faces()/2;
1076 for (num_face=num1; num_face<num2b; num_face++)
1078 elem1 = face_voisins(num_face,0);
1079 elem2 = face_voisins(num_face,1);
1081 for (i=0; i<nb_faces_elem; i++)
1083 if ( (j=elem_faces(elem1,i)) > num_face )
1085 for (
int nc=0; nc<nb_comp; nc++)
1087 val =
viscA(num_face,j,elem1,nu(elem1,nc));
1090 int n0=num_face*nb_comp+nc;
1091 int j0=j*nb_comp+nc;
1093 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
1094 matrice(n0,j0)-=val*porosite_eventuelle(j);
1095 matrice(j0,n0)-=val*porosite_eventuelle(num_face);
1096 matrice(j0,j0)+=val*porosite_eventuelle(j);
1101 if ( (j=elem_faces(elem2,i)) > num_face )
1103 for (
int nc=0; nc<nb_comp; nc++)
1105 val =
viscA(num_face,j,elem2,nu(elem1,nc));
1107 int n0=num_face*nb_comp+nc;
1108 int j0=j*nb_comp+nc;
1109 int n0perio=fac_asso*nb_comp+nc;
1110 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
1111 matrice(n0,j0)-=val*porosite_eventuelle(j);
1112 matrice(j0,n0perio)-=val*porosite_eventuelle(num_face);
1113 matrice(j0,j0)+=val*porosite_eventuelle(j);
1123 for (num_face=num1; num_face<num2; num_face++)
1125 elem1 = face_voisins(num_face,0);
1126 for (i=0; i<nb_faces_elem; i++)
1128 if ( (j= elem_faces(elem1,i)) > num_face )
1130 for (
int nc=0; nc<nb_comp; nc++)
1132 val =
viscA(num_face,j,elem1,nu(elem1,nc));
1134 int n0=num_face*nb_comp+nc;
1135 int j0=j*nb_comp+nc;
1137 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
1138 matrice(n0,j0)-=val*porosite_eventuelle(j);
1139 matrice(j0,n0)-=val*porosite_eventuelle(num_face);
1140 matrice(j0,j0)+=val*porosite_eventuelle(j);
1150 elem1 = face_voisins(num_face,0);
1151 elem2 = face_voisins(num_face,1);
1153 for (i=0; i<nb_faces_elem; i++)
1155 if ( (j=elem_faces(elem1,i)) > num_face )
1157 for (
int nc=0; nc<nb_comp; nc++)
1159 val =
viscA(num_face,j,elem1,nu(elem1,nc));
1161 int n0=num_face*nb_comp+nc;
1162 int j0=j*nb_comp+nc;
1164 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
1165 matrice(n0,j0)-=val*porosite_eventuelle(j);
1166 matrice(j0,n0)-=val*porosite_eventuelle(num_face);
1167 matrice(j0,j0)+=val*porosite_eventuelle(j);
1172 if ( (j=elem_faces(elem2,i)) > num_face )
1174 for (
int nc=0; nc<nb_comp; nc++)
1176 val=
viscA(num_face,j,elem2,nu(elem2,nc));
1178 int n0=num_face*nb_comp+nc;
1179 int j0=j*nb_comp+nc;
1181 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
1182 matrice(n0,j0)-=val*porosite_eventuelle(j);
1183 matrice(j0,n0)-=val*porosite_eventuelle(num_face);
1184 matrice(j0,j0)+=val*porosite_eventuelle(j);
class Cond_lim Generic class used to represent any class
class Conds_lim This class represents a vector of boundary conditions.
Classe Dirichlet_homogene This class is the base class of the hierarchy of homogeneous Dirichlet-type...
Dirichlet This class is the base class of the hierarchy of Dirichlet-type boundary conditions.
int nb_faces_elem(int=0) const
Returns the number of faces of type i of the geometric elements that make up the domain.
const Cond_lim & les_conditions_limites(int) const
Returns the i-th boundary condition.
int nb_faces() const
Returns the total number of faces.
int nb_faces_tot() const
Returns the total number of 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
Returns the index of the i-th face of element num_elem; the face numbering convention is.
int premiere_face_int() const
A face is internal if and only if it separates two elements.
int face_voisins(int num_face, int i) const
Returns the neighbouring element of num_face in direction i.
int nb_faces_bord() const
Returns the number of faces on which boundary conditions are applied:
const Domaine & domaine() const
Classe Echange_externe_impose: This class represents the special case of the class.
virtual double h_imp(int num) const
Returns the value of the imposed heat exchange coefficient on the i-th component.
virtual double T_ext(int num) const
Returns the value of the imposed temperature on the i-th component of the boundary field.
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
Matrice_Morse class - Represents a (sparse) matrix M, not necessarily square,.
DoubleVect & porosite_elem()
DoubleVect & porosite_face()
const Equation_base & equation() const
Returns the reference to the equation pointed to by MorEqn::mon_equation.
Classe Neumann_homogene This class is the base class of the hierarchy of homogeneous Neumann-type bou...
Classe Neumann_paroi This boundary condition corresponds to an imposed flux for the.
Neumann_sortie_libre This class represents an open boundary without imposed velocity.
virtual double flux_impose(int i) const
Returns the value of the imposed flux on the i-th component of the field representing the flux at the...
const Nom & que_suis_je() const
Returns the string identifying the class.
virtual Entree & readOn(Entree &)
Reads an Objet_U from an input stream. Virtual method to override.
virtual Sortie & printOn(Sortie &) const
Writes the object to an output stream. Virtual method to override.
class Op_Diff_VEF_Face_Stab
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
Associates the operator with the domaine_dis, the domaine_Cl_dis, and the unknown of its equation.
void completer() override
Associates the operator with the domaine_dis, the domaine_Cl_dis, and the unknown of its 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
Determine whether to compute div(phi nu grad Psi) or div(nu grad 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
Sums the 2 rows of the associated periodic faces, allowing computations in the code without needing t...
void modifier_matrice_pour_periodique_avant_contribuer(Matrice_Morse &matrice, const Equation_base &) const
Divides the coefficients on the periodic face rows by 2 in preparation for applying modifier_matrice_...
void modifier_flux(const Operateur_base &) const
class Periodique This class represents a periodic boundary condition.
int face_associee(int i) const
static double mp_min(double)
static double mp_max(double)
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
static int je_suis_maitre()
Returns 1 if on the master processor of the current group (i.e. me() == 0), 0 otherwise.
SFichier is to the C++ ofstream class what Sortie is to the C++ ostream class.
Base class for output streams.
virtual void declare_support_masse_volumique(int ok)
The constructor of a derived class that uses the density field must call this function with the value...
Symetrie On symmetry faces, the following properties hold:
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
_SIZE_ dimension(int d) const