16#include <Op_Diff_VEF_Anisotrope_Face.h>
17#include <Echange_externe_radiatif.h>
18#include <Echange_externe_impose.h>
19#include <Neumann_sortie_libre.h>
20#include <Navier_Stokes_std.h>
21#include <Neumann_homogene.h>
22#include <Porosites_champ.h>
23#include <Champ_Uniforme.h>
24#include <Neumann_paroi.h>
25#include <Probleme_base.h>
26#include <Milieu_base.h>
27#include <Champ_P1NC.h>
28#include <Champ_Q1NC.h>
29#include <Periodique.h>
60 return diffusivite_.valeur();
64 DoubleTab& resu, DoubleTab& tab_flux_bords,
74 const IntTab& elemfaces = domaine_VEF.
elem_faces();
77 int nb_faces = domaine_VEF.
nb_faces();
88 for (n_bord=0; n_bord<nb_bords; n_bord++)
95 int nb_faces_bord_reel = le_bord.
nb_faces();
101 for (ind_face=num1; ind_face<nb_faces_bord_reel; ind_face++)
103 num_face = le_bord.
num_face(ind_face);
105 fac_asso = le_bord.
num_face(fac_asso);
106 for (
int kk=0; kk<2; kk++)
108 int elem = face_voisins(num_face,kk);
109 for (i=0; i<nb_faces_elem; i++)
111 if ( ( (j= elemfaces(elem,i)) > num_face ) && (j != fac_asso) )
113 valA =
viscA(num_face,j,elem,nu);
114 resu(num_face)+=valA*inconnue(j);
115 resu(num_face)-=valA*inconnue(num_face);
118 resu(j)+=0.5*valA*inconnue(num_face);
119 resu(j)-=0.5*valA*inconnue(j);
129 for (ind_face=num1; ind_face<num2; ind_face++)
131 num_face = le_bord.
num_face(ind_face);
132 int elem = face_voisins(num_face,0);
134 for (i=0; i<nb_faces_elem; i++)
136 if (( (j= elemfaces(elem,i)) > num_face ) || (ind_face>=nb_faces_bord_reel))
138 valA =
viscA(num_face,j,elem,nu);
140 if (ind_face<nb_faces_bord_reel)
142 flux=valA*(inconnue(j)-inconnue(num_face));
146 tab_flux_bords(num_face,0)-=flux;
147 resu(num_face)+=flux;
152 flux=valA*(inconnue(num_face)-inconnue(j));
153 if (j<premiere_face_int)
154 tab_flux_bords(j,0)-=flux;
164 for (num_face=premiere_face_int; num_face<nb_faces; num_face++)
166 for (
int k=0; k<2; k++)
168 int elem = face_voisins(num_face,k);
170 for (i=0; i<nb_faces_elem; i++)
179 el1 = face_voisins(j,0);
180 el2 = face_voisins(j,1);
181 if((el1==-1)||(el2==-1))
186 valA =
viscA(num_face,j,elem,nu);
187 resu(num_face)+=valA*inconnue(j);
188 resu(num_face)-=valA*inconnue(num_face);
191 resu(j)+=valA*inconnue(num_face);
192 resu(j)-=valA*inconnue(j);
202 for (n_bord=0; n_bord<nb_bords; n_bord++)
211 int nfin = ndeb + le_bord.
nb_faces();
212 for (
int face=ndeb; face<nfin; face++)
216 tab_flux_bords(face,0) = flux;
224 int nfin = ndeb + le_bord.
nb_faces();
225 for (
int face=ndeb; face<nfin; face++)
227 flux=la_cl_paroi.
h_imp(face-ndeb)*(la_cl_paroi.
T_ext(face-ndeb)-inconnue(face))*domaine_VEF.
surface(face);
229 tab_flux_bords(face,0) = flux;
232 const double text = la_cl_paroi.
T_ext(face - ndeb), T = inconnue(face);
233 flux = COEFF_STEFAN_BOLTZMANN * la_cl_paroi.
emissivite(face - ndeb) * (text * text * text * text - T * T * T * T) * domaine_VEF.
face_surfaces(face);
235 tab_flux_bords(face, 0) += flux;
240 || sub_type(
Symetrie,la_cl.valeur())
245 int nfin = ndeb + le_bord.
nb_faces();
246 for (
int face=ndeb; face<nfin; face++)
247 tab_flux_bords(face,0) = 0.;
253 DoubleTab& resu, DoubleTab& tab_flux_bords,
259 Cerr <<
"Error in Op_Diff_VEF_Anisotrope_Face::ajouter_cas_vectoriel()" << finl;
260 Cerr <<
"This case is not coded yet" << finl;
265 DoubleTab& resu, DoubleTab& tab_flux_bords,
274 const IntTab& elemfaces = domaine_VEF.
elem_faces();
275 const IntTab& face_voisins = domaine_VEF.
face_voisins();
277 int nb_faces = domaine_VEF.
nb_faces();
291 for (n_bord=0; n_bord<nb_bords; n_bord++)
298 int nb_faces_bord_reel = le_bord.
nb_faces();
305 for (ind_face=num1; ind_face<nb_faces_bord_reel; ind_face++)
308 fac_asso = le_bord.
num_face(fac_asso);
309 num_face = le_bord.
num_face(ind_face);
310 for (
int kk=0; kk<2; kk++)
312 int elem = face_voisins(num_face, kk);
313 for (i0=0; i0<nb_faces_elem; i0++)
315 if ( ( (j= elemfaces(elem,i0)) > num_face ) && (j != fac_asso ) )
317 for(
int c1=0; c1<nb_comp; c1++)
319 for(
int c2=0; c2<nb_comp; c2++)
321 int diffusivity_index = c1*nb_comp + c2;
323 ArrOfDouble diffu_c1_c2_elem;
325 valA =
viscA(num_face,j,elem,diffu_c1_c2_elem);
327 resu(num_face,c1)+=valA*inconnue(j,c2);
328 resu(num_face,c1)-=valA*inconnue(num_face,c2);
331 resu(j,c1)+=0.5*valA*inconnue(num_face,c2);
332 resu(j,c1)-=0.5*valA*inconnue(j,c2);
343 for (ind_face=num1; ind_face<num2; ind_face++)
345 num_face = le_bord.
num_face(ind_face);
346 int elem=face_voisins(num_face,0);
349 for (
int i=0; i<nb_faces_elem; i++)
350 if (( (j= elemfaces(elem,i)) > num_face ) || (ind_face>=nb_faces_bord_reel))
352 for(
int c1=0; c1<nb_comp; c1++)
354 for(
int c2=0; c2<nb_comp; c2++)
356 int diffusivity_index = c1*nb_comp + c2;
358 ArrOfDouble diffu_c1_c2_elem;
360 valA =
viscA(num_face,j,elem,diffu_c1_c2_elem);
362 if (ind_face<nb_faces_bord_reel)
364 double flux=valA*(inconnue(j,c2)-inconnue(num_face,c2));
365 resu(num_face,c1)+=flux;
366 tab_flux_bords(num_face,c1)+=flux;
370 resu(j,c1)+=valA*inconnue(num_face,c2);
371 resu(j,c1)-=valA*inconnue(j,c2);
385 for (
int k=0; k<2; k++)
387 int elem = face_voisins(num_face,k);
388 for (i0=0; i0<nb_faces_elem; i0++)
390 if ( (j= elemfaces(elem,i0)) > num_face )
396 el1 = face_voisins(j,0);
397 el2 = face_voisins(j,1);
398 if((el1==-1)||(el2==-1))
403 for(
int c1=0; c1<nb_comp; c1++)
405 for(
int c2=0; c2<nb_comp; c2++)
407 int diffusivity_index = c1*nb_comp + c2;
409 ArrOfDouble diffu_c1_c2_elem;
411 valA =
viscA(num_face,j,elem,diffu_c1_c2_elem);
413 resu(num_face,c1)+=valA*inconnue(j,c2);
414 resu(num_face,c1)-=valA*inconnue(num_face,c2);
417 resu(j,c1)+=valA*inconnue(num_face,c2);
418 resu(j,c1)-=valA*inconnue(j,c2);
434 for (n_bord=0; n_bord<nb_bords; n_bord++)
443 int nfin = ndeb + le_bord.
nb_faces();
444 for (
int face=ndeb; face<nfin; face++)
446 for (
int nc=0; nc<nb_comp; nc++)
449 resu(face,nc) += flux0;
450 tab_flux_bords(face,nc) = flux0;
459 int nfin = ndeb + le_bord.
nb_faces();
460 for (
int face=ndeb; face<nfin; face++)
462 for (
int nc=0; nc<nb_comp; nc++)
464 flux0=la_cl_paroi.
h_imp(face-ndeb,nc)*(la_cl_paroi.
T_ext(face-ndeb,nc)-inconnue(face,nc))*domaine_VEF.
surface(face);
465 resu(face,nc) += flux0;
466 tab_flux_bords(face,nc) = flux0;
470 const double text = la_cl_paroi.
T_ext(face - ndeb, nc), T = inconnue(face, nc);
471 flux0 = COEFF_STEFAN_BOLTZMANN * la_cl_paroi.
emissivite(face - ndeb, nc) * (text * text * text * text - T * T * T * T) * domaine_VEF.
face_surfaces(face);
472 resu(face, nc) += flux0;
473 tab_flux_bords(face, nc) += flux0;
479 || sub_type(
Symetrie,la_cl.valeur())
484 int nfin = ndeb + le_bord.
nb_faces();
485 for (
int face=ndeb; face<nfin; face++)
486 for (
int nc=0; nc<nb_comp; nc++)
487 tab_flux_bords(face,nc) = 0.;
497 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
500 int nb_dim = resu.
nb_dim();
504 DoubleTab tab_inconnue;
511 modif_par_porosite_si_flag(
nu_,nu,!marq,porosite_elem);
512 const DoubleTab& inconnue=modif_par_porosite_si_flag(inconnue_org,tab_inconnue,marq,porosite_face);
516 if(nature_champ==scalaire)
518 else if (nature_champ==vectoriel)
520 else if (nature_champ==multi_scalaire)
541 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
542 const IntTab& elem_faces = domaine_VEF.
elem_faces();
543 const IntTab& face_voisins = domaine_VEF.
face_voisins();
547 int nb_dim = transporte.
nb_dim();
556 modif_par_porosite_si_flag(
nu_,nu,!marq,porosite_elem);
557 DoubleVect porosite_eventuelle(
equation().milieu().porosite_face());
559 porosite_eventuelle=1;
571 for (
int n_bord=0; n_bord<nb_bords; n_bord++)
576 int num2 = num1 + le_bord.
nb_faces();
584 int num2b=num1+le_bord.
nb_faces()/2;
585 for (num_face=num1; num_face<num2b; num_face++)
587 elem1 = face_voisins(num_face,0);
588 elem2 = face_voisins(num_face,1);
590 for (i=0; i<nb_faces_elem; i++)
592 if ( (j=elem_faces(elem1,i)) > num_face )
594 val =
viscA(num_face,j,elem1,nu);
595 for (
int nc=0; nc<nb_comp; nc++)
597 int n0=num_face*nb_comp+nc;
600 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
601 matrice(n0,j0)-=val*porosite_eventuelle(j);
602 matrice(j0,n0)-=val*porosite_eventuelle(num_face);
603 matrice(j0,j0)+=val*porosite_eventuelle(j);
608 if ( (j=elem_faces(elem2,i)) > num_face )
610 val=
viscA(num_face,j,elem2,nu);
611 for (
int nc=0; nc<nb_comp; nc++)
613 int n0=num_face*nb_comp+nc;
615 int n0perio=fac_asso*nb_comp+nc;
616 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
617 matrice(n0,j0)-=val*porosite_eventuelle(j);
618 matrice(j0,n0perio)-=val*porosite_eventuelle(num_face);
619 matrice(j0,j0)+=val*porosite_eventuelle(j);
629 for (num_face=num1; num_face<num2; num_face++)
631 elem1 = face_voisins(num_face,0);
632 for (i=0; i<nb_faces_elem; i++)
634 if ( (j= elem_faces(elem1,i)) > num_face )
636 val =
viscA(num_face,j,elem1,nu);
637 for (
int nc=0; nc<nb_comp; nc++)
639 int n0=num_face*nb_comp+nc;
642 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
643 matrice(n0,j0)-=val*porosite_eventuelle(j);
644 matrice(j0,n0)-=val*porosite_eventuelle(num_face);
645 matrice(j0,j0)+=val*porosite_eventuelle(j);
654 for (num_face=n0; num_face<n1; num_face++)
656 elem1 = face_voisins(num_face,0);
657 elem2 = face_voisins(num_face,1);
659 for (i=0; i<nb_faces_elem; i++)
661 if ( (j=elem_faces(elem1,i)) > num_face )
663 val =
viscA(num_face,j,elem1,nu);
664 for (
int nc=0; nc<nb_comp; nc++)
666 int nn0=num_face*nb_comp+nc;
669 matrice(nn0,nn0)+=val*porosite_eventuelle(num_face);
670 matrice(nn0,j0)-=val*porosite_eventuelle(j);
671 matrice(j0,nn0)-=val*porosite_eventuelle(num_face);
672 matrice(j0,j0)+=val*porosite_eventuelle(j);
677 if ( (j=elem_faces(elem2,i)) > num_face )
679 val=
viscA(num_face,j,elem2,nu);
680 for (
int nc=0; nc<nb_comp; nc++)
682 int nn0=num_face*nb_comp+nc;
685 matrice(nn0,nn0)+=val*porosite_eventuelle(num_face);
686 matrice(nn0,j0)-=val*porosite_eventuelle(j);
687 matrice(j0,nn0)-=val*porosite_eventuelle(num_face);
688 matrice(j0,j0)+=val*porosite_eventuelle(j);
695 for (
int n_bord=0; n_bord<nb_bords; n_bord++)
707 int nfin = ndeb + le_bord.
nb_faces();
708 for (
int face=ndeb; face<nfin; face++)
718 int nfin = ndeb + le_bord.
nb_faces();
719 for (
int face=ndeb; face<nfin; face++)
723 const double T = inconnue(face);
724 matrice(face,face) += 4 * COEFF_STEFAN_BOLTZMANN * la_cl_paroi.
emissivite(face-ndeb) * T * T * T *domaine_VEF.
face_surfaces(face);
728 || sub_type(
Symetrie,la_cl.valeur())
743 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
744 const IntTab& elem_faces = domaine_VEF.
elem_faces();
745 const IntTab& face_voisins = domaine_VEF.
face_voisins();
749 int nb_dim = transporte.
nb_dim();
758 modif_par_porosite_si_flag(
nu_,nu,!marq,porosite_elem);
759 DoubleVect porosite_eventuelle(
equation().milieu().porosite_face());
761 porosite_eventuelle=1;
776 for (
int n_bord=0; n_bord<nb_bords; n_bord++)
781 int num2 = num1 + le_bord.
nb_faces();
788 int num2b=num1+le_bord.
nb_faces()/2;
789 for (num_face=num1; num_face<num2b; num_face++)
791 elem1 = face_voisins(num_face,0);
792 elem2 = face_voisins(num_face,1);
794 for (i=0; i<nb_faces_elem; i++)
796 if ( (j=elem_faces(elem1,i)) > num_face )
798 for(
int c1=0; c1<nb_comp; c1++)
799 for(
int c2=0; c2<nb_comp; c2++)
802 int diffusivity_index = c1*nb_comp + c2;
804 ArrOfDouble diffu_c1_c2_elem;
806 val =
viscA(num_face,j,elem1,diffu_c1_c2_elem);
808 int n0=num_face*nb_comp+c1;
810 int n0b=num_face*nb_comp+c2;
811 int j0b=j*nb_comp+c2;
813 matrice(n0,n0b)+=val*porosite_eventuelle(num_face);
814 matrice(n0,j0b)-=val*porosite_eventuelle(j);
815 matrice(j0,n0b)-=val*porosite_eventuelle(num_face);
816 matrice(j0,j0b)+=val*porosite_eventuelle(j);
822 if ( (j=elem_faces(elem2,i)) > num_face )
824 for (
int nc=0; nc<nb_comp; nc++)
826 for(
int c1=0; c1<nb_comp; c1++)
827 for(
int c2=0; c2<nb_comp; c2++)
830 int diffusivity_index = c1*nb_comp + c2;
832 ArrOfDouble diffu_c1_c2_elem;
834 val =
viscA(num_face,j,elem1,diffu_c1_c2_elem);
836 int n0=num_face*nb_comp+c1;
838 int n0b=num_face*nb_comp+c2;
839 int j0b=j*nb_comp+c2;
841 matrice(n0,n0b)+=val*porosite_eventuelle(num_face);
842 matrice(n0,j0b)-=val*porosite_eventuelle(j);
843 matrice(j0,n0b)-=val*porosite_eventuelle(num_face);
844 matrice(j0,j0b)+=val*porosite_eventuelle(j);
846 int n0periob=fac_asso*nb_comp+c2;
847 matrice(j0,n0periob)-=val*porosite_eventuelle(num_face);
856 for (num_face=num1; num_face<num2; num_face++)
858 elem1 = face_voisins(num_face,0);
859 for (i=0; i<nb_faces_elem; i++)
861 if ( (j= elem_faces(elem1,i)) > num_face )
863 for(
int c1=0; c1<nb_comp; c1++)
865 for(
int c2=0; c2<nb_comp; c2++)
868 int diffusivity_index = c1*nb_comp + c2;
870 ArrOfDouble diffu_c1_c2_elem;
872 val =
viscA(num_face,j,elem1,diffu_c1_c2_elem);
874 int n0=num_face*nb_comp+c1;
876 int n0b=num_face*nb_comp+c2;
877 int j0b=j*nb_comp+c2;
879 matrice(n0,n0b)+=val*porosite_eventuelle(num_face);
880 matrice(n0,j0b)-=val*porosite_eventuelle(j);
881 matrice(j0,n0b)-=val*porosite_eventuelle(num_face);
882 matrice(j0,j0b)+=val*porosite_eventuelle(j);
892 elem1 = face_voisins(num_face,0);
893 elem2 = face_voisins(num_face,1);
895 for (i=0; i<nb_faces_elem; i++)
897 if ( (j=elem_faces(elem1,i)) > num_face )
899 for(
int c1=0; c1<nb_comp; c1++)
900 for(
int c2=0; c2<nb_comp; c2++)
902 int diffusivity_index = c1*nb_comp + c2;
904 ArrOfDouble diffu_c1_c2_elem;
906 val =
viscA(num_face,j,elem1,diffu_c1_c2_elem);
908 int n0=num_face*nb_comp+c1;
910 int n0b=num_face*nb_comp+c2;
911 int j0b=j*nb_comp+c2;
913 matrice(n0,n0b)+=val*porosite_eventuelle(num_face);
914 matrice(n0,j0b)-=val*porosite_eventuelle(j);
915 matrice(j0,n0b)-=val*porosite_eventuelle(num_face);
916 matrice(j0,j0b)+=val*porosite_eventuelle(j);
922 if ( (j=elem_faces(elem2,i)) > num_face )
924 for(
int c1=0; c1<nb_comp; c1++)
925 for(
int c2=0; c2<nb_comp; c2++)
927 int diffusivity_index = c1*nb_comp + c2;
929 ArrOfDouble diffu_c1_c2_elem;
931 val =
viscA(num_face,j,elem2,diffu_c1_c2_elem);
933 int n0=num_face*nb_comp+c1;
935 int n0b=num_face*nb_comp+c2;
936 int j0b=j*nb_comp+c2;
938 matrice(n0,n0b)+=val*porosite_eventuelle(num_face);
939 matrice(n0,j0b)-=val*porosite_eventuelle(j);
940 matrice(j0,n0b)-=val*porosite_eventuelle(num_face);
941 matrice(j0,j0b)+=val*porosite_eventuelle(j);
953 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
958 for (
int n_bord=0; n_bord<nb_bords; n_bord++)
966 int nfin = ndeb + le_bord.
nb_faces();
967 for (
int face=ndeb; face<nfin; face++)
968 for (
int comp=0; comp<nb_comp; comp++)
980 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
985 const DoubleTab& xv=domaine_VEF.
xv();
986 DoubleTab vit(
equation().inconnue().valeurs());
992 Cerr <<
" Verification of delta(x,0) " << finl;
1001 resu(i,comp)/=(volumes_entrelaces(i));
1002 for(i=0; i<nbf; i++)
1004 if(std::fabs(resu(i,0))>1.e-10)
1006 Cerr <<
" delta(x,0) ("<<i<<
") = "
1011 Cerr <<
" Verification of delta(y(1-y),0) " << finl;
1012 for(i=0; i<nbf; i++)
1014 vit(i,0)=xv(i,1)*(1-xv(i,1));
1018 for(i=0; i<nbf; i++)
1020 resu(i,comp)/=(volumes_entrelaces(i));
1021 for(i=0; i<nbf; i++)
1023 if(std::fabs(2-resu(i,0))>1.e-10)
1025 Cerr <<
" delta(y(1-y),0) ("<<i<<
") = "
DoubleTab & valeurs() override
Returns the array of field values at the current time.
class Champ_base This class is the base of the fields hierarchy.
class Cond_lim Generic class used to represent any class
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.
virtual const DoubleVect & face_surfaces() const
int nb_faces() const
Returns the total number of faces.
DoubleVect & volumes_entrelaces()
double xv(int num_face, int k) 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.
Echange_externe_radiatif: Combines radiative (sigma * eps * (T^4 - T_ext^4)) and convective (h * (T -...
virtual double h_imp(int num) const
Returns the value of the imposed heat exchange coefficient on the i-th component.
bool has_emissivite() const
virtual double T_ext(int num) const
Returns the value of the imposed temperature on the i-th component of the boundary field.
double emissivite(int num) const
Returns the value of the imposed emissivity on the i-th component.
Class defining operators and methods for all reading operation in an input flow (file,...
virtual const Milieu_base & milieu() const =0
virtual const Champ_Inc_base & inconnue() const =0
virtual Nature_du_champ nature_du_champ() const
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.
void ajouter_cas_multi_scalaire(const DoubleTab &inconnue, DoubleTab &resu, DoubleTab &flux_bords, DoubleTab &nu, const Domaine_Cl_VEF &domaine_Cl_VEF, const Domaine_VEF &domaine_VEF, int nb_comp) const
DoubleTab & ajouter(const DoubleTab &, DoubleTab &) const override
void associer_diffusivite(const Champ_base &) override
Associate the diffusivity field.
void ajouter_contribution(const DoubleTab &, Matrice_Morse &) const
void ajouter_cas_scalaire(const DoubleTab &inconnue, DoubleTab &resu, DoubleTab &flux_bords, DoubleTab &nu, const Domaine_Cl_VEF &domaine_Cl_VEF, const Domaine_VEF &domaine_VEF) const
const Champ_base & diffusivite() const override
void ajouter_cas_vectoriel(const DoubleTab &inconnue, DoubleTab &resu, DoubleTab &flux_bords, DoubleTab &nu, const Domaine_Cl_VEF &domaine_Cl_VEF, const Domaine_VEF &domaine_VEF, int nb_comp) const
void completer() override
Associates the operator with the domaine_dis, the domaine_Cl_dis, and the unknown of its equation.
DoubleTab & calculer(const DoubleTab &, DoubleTab &) const override
void ajouter_contribution_multi_scalaire(const DoubleTab &, Matrice_Morse &) const
void contribue_au_second_membre(DoubleTab &) 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
virtual void completer()
Associates the operator with the domaine_dis, the domaine_Cl_dis, and the unknown of its equation.
class Periodique This class represents a periodic boundary condition.
int face_associee(int i) const
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
Base class for output streams.
Symetrie On symmetry faces, the following properties hold:
virtual void ref_array(TRUSTArray &, _SIZE_ start=0, _SIZE_ sz=-1)
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
_SIZE_ dimension(int d) const