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);
131 for (ind_face=num1; ind_face<num2; ind_face++)
133 num_face = le_bord.
num_face(ind_face);
134 int elem = face_voisins(num_face,0);
136 for (i=0; i<nb_faces_elem; i++)
138 if (( (j= elemfaces(elem,i)) > num_face ) || (ind_face>=nb_faces_bord_reel))
140 valA =
viscA(num_face,j,elem,nu);
142 if (ind_face<nb_faces_bord_reel)
144 flux=valA*(inconnue(j)-inconnue(num_face));
148 tab_flux_bords(num_face,0)-=flux;
149 resu(num_face)+=flux;
154 flux=valA*(inconnue(num_face)-inconnue(j));
155 if (j<premiere_face_int)
156 tab_flux_bords(j,0)-=flux;
166 for (num_face=premiere_face_int; num_face<nb_faces; num_face++)
168 for (
int k=0; k<2; k++)
170 int elem = face_voisins(num_face,k);
172 for (i=0; i<nb_faces_elem; i++)
181 el1 = face_voisins(j,0);
182 el2 = face_voisins(j,1);
183 if((el1==-1)||(el2==-1))
188 valA =
viscA(num_face,j,elem,nu);
189 resu(num_face)+=valA*inconnue(j);
190 resu(num_face)-=valA*inconnue(num_face);
193 resu(j)+=valA*inconnue(num_face);
194 resu(j)-=valA*inconnue(j);
204 for (n_bord=0; n_bord<nb_bords; n_bord++)
213 int nfin = ndeb + le_bord.
nb_faces();
214 for (
int face=ndeb; face<nfin; face++)
218 tab_flux_bords(face,0) = flux;
226 int nfin = ndeb + le_bord.
nb_faces();
227 for (
int face=ndeb; face<nfin; face++)
229 flux=la_cl_paroi.
h_imp(face-ndeb)*(la_cl_paroi.
T_ext(face-ndeb)-inconnue(face))*domaine_VEF.
surface(face);
231 tab_flux_bords(face,0) = flux;
234 const double text = la_cl_paroi.
T_ext(face - ndeb), T = inconnue(face);
235 flux = COEFF_STEFAN_BOLTZMANN * la_cl_paroi.
emissivite(face - ndeb) * (text * text * text * text - T * T * T * T) * domaine_VEF.
face_surfaces(face);
237 tab_flux_bords(face, 0) += flux;
242 || sub_type(
Symetrie,la_cl.valeur())
247 int nfin = ndeb + le_bord.
nb_faces();
248 for (
int face=ndeb; face<nfin; face++)
249 tab_flux_bords(face,0) = 0.;
255 DoubleTab& resu, DoubleTab& tab_flux_bords,
261 Cerr <<
"Error in Op_Diff_VEF_Anisotrope_Face::ajouter_cas_vectoriel()" << finl;
262 Cerr <<
"This case is not coded yet" << finl;
267 DoubleTab& resu, DoubleTab& tab_flux_bords,
276 const IntTab& elemfaces = domaine_VEF.
elem_faces();
277 const IntTab& face_voisins = domaine_VEF.
face_voisins();
279 int nb_faces = domaine_VEF.
nb_faces();
293 for (n_bord=0; n_bord<nb_bords; n_bord++)
300 int nb_faces_bord_reel = le_bord.
nb_faces();
307 for (ind_face=num1; ind_face<nb_faces_bord_reel; ind_face++)
310 fac_asso = le_bord.
num_face(fac_asso);
311 num_face = le_bord.
num_face(ind_face);
312 for (
int kk=0; kk<2; kk++)
314 int elem = face_voisins(num_face, kk);
315 for (i0=0; i0<nb_faces_elem; i0++)
317 if ( ( (j= elemfaces(elem,i0)) > num_face ) && (j != fac_asso ) )
319 for(
int c1=0; c1<nb_comp; c1++)
321 for(
int c2=0; c2<nb_comp; c2++)
323 int diffusivity_index = c1*nb_comp + c2;
325 ArrOfDouble diffu_c1_c2_elem;
327 valA =
viscA(num_face,j,elem,diffu_c1_c2_elem);
329 resu(num_face,c1)+=valA*inconnue(j,c2);
330 resu(num_face,c1)-=valA*inconnue(num_face,c2);
333 resu(j,c1)+=0.5*valA*inconnue(num_face,c2);
334 resu(j,c1)-=0.5*valA*inconnue(j,c2);
345 for (ind_face=num1; ind_face<num2; ind_face++)
347 num_face = le_bord.
num_face(ind_face);
348 int elem=face_voisins(num_face,0);
351 for (
int i=0; i<nb_faces_elem; i++)
352 if (( (j= elemfaces(elem,i)) > num_face ) || (ind_face>=nb_faces_bord_reel))
354 for(
int c1=0; c1<nb_comp; c1++)
356 for(
int c2=0; c2<nb_comp; c2++)
358 int diffusivity_index = c1*nb_comp + c2;
360 ArrOfDouble diffu_c1_c2_elem;
362 valA =
viscA(num_face,j,elem,diffu_c1_c2_elem);
364 if (ind_face<nb_faces_bord_reel)
366 double flux=valA*(inconnue(j,c2)-inconnue(num_face,c2));
367 resu(num_face,c1)+=flux;
368 tab_flux_bords(num_face,c1)+=flux;
372 resu(j,c1)+=valA*inconnue(num_face,c2);
373 resu(j,c1)-=valA*inconnue(j,c2);
387 for (
int k=0; k<2; k++)
389 int elem = face_voisins(num_face,k);
390 for (i0=0; i0<nb_faces_elem; i0++)
392 if ( (j= elemfaces(elem,i0)) > num_face )
398 el1 = face_voisins(j,0);
399 el2 = face_voisins(j,1);
400 if((el1==-1)||(el2==-1))
405 for(
int c1=0; c1<nb_comp; c1++)
407 for(
int c2=0; c2<nb_comp; c2++)
409 int diffusivity_index = c1*nb_comp + c2;
411 ArrOfDouble diffu_c1_c2_elem;
413 valA =
viscA(num_face,j,elem,diffu_c1_c2_elem);
415 resu(num_face,c1)+=valA*inconnue(j,c2);
416 resu(num_face,c1)-=valA*inconnue(num_face,c2);
419 resu(j,c1)+=valA*inconnue(num_face,c2);
420 resu(j,c1)-=valA*inconnue(j,c2);
436 for (n_bord=0; n_bord<nb_bords; n_bord++)
445 int nfin = ndeb + le_bord.
nb_faces();
446 for (
int face=ndeb; face<nfin; face++)
448 for (
int nc=0; nc<nb_comp; nc++)
451 resu(face,nc) += flux0;
452 tab_flux_bords(face,nc) = flux0;
461 int nfin = ndeb + le_bord.
nb_faces();
462 for (
int face=ndeb; face<nfin; face++)
464 for (
int nc=0; nc<nb_comp; nc++)
466 flux0=la_cl_paroi.
h_imp(face-ndeb,nc)*(la_cl_paroi.
T_ext(face-ndeb,nc)-inconnue(face,nc))*domaine_VEF.
surface(face);
467 resu(face,nc) += flux0;
468 tab_flux_bords(face,nc) = flux0;
472 const double text = la_cl_paroi.
T_ext(face - ndeb, nc), T = inconnue(face, nc);
473 flux0 = COEFF_STEFAN_BOLTZMANN * la_cl_paroi.
emissivite(face - ndeb, nc) * (text * text * text * text - T * T * T * T) * domaine_VEF.
face_surfaces(face);
474 resu(face, nc) += flux0;
475 tab_flux_bords(face, nc) += flux0;
481 || sub_type(
Symetrie,la_cl.valeur())
486 int nfin = ndeb + le_bord.
nb_faces();
487 for (
int face=ndeb; face<nfin; face++)
488 for (
int nc=0; nc<nb_comp; nc++)
489 tab_flux_bords(face,nc) = 0.;
499 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
502 int nb_dim = resu.
nb_dim();
506 DoubleTab tab_inconnue;
513 modif_par_porosite_si_flag(
nu_,nu,!marq,porosite_elem);
514 const DoubleTab& inconnue=modif_par_porosite_si_flag(inconnue_org,tab_inconnue,marq,porosite_face);
518 if(nature_champ==scalaire)
520 else if (nature_champ==vectoriel)
522 else if (nature_champ==multi_scalaire)
544 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
545 const IntTab& elem_faces = domaine_VEF.
elem_faces();
546 const IntTab& face_voisins = domaine_VEF.
face_voisins();
550 int nb_dim = transporte.
nb_dim();
559 modif_par_porosite_si_flag(
nu_,nu,!marq,porosite_elem);
560 DoubleVect porosite_eventuelle(
equation().milieu().porosite_face());
562 porosite_eventuelle=1;
574 for (
int n_bord=0; n_bord<nb_bords; n_bord++)
579 int num2 = num1 + le_bord.
nb_faces();
587 int num2b=num1+le_bord.
nb_faces()/2;
588 for (num_face=num1; num_face<num2b; num_face++)
590 elem1 = face_voisins(num_face,0);
591 elem2 = face_voisins(num_face,1);
593 for (i=0; i<nb_faces_elem; i++)
595 if ( (j=elem_faces(elem1,i)) > num_face )
597 val =
viscA(num_face,j,elem1,nu);
598 for (
int nc=0; nc<nb_comp; nc++)
600 int n0=num_face*nb_comp+nc;
603 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
604 matrice(n0,j0)-=val*porosite_eventuelle(j);
605 matrice(j0,n0)-=val*porosite_eventuelle(num_face);
606 matrice(j0,j0)+=val*porosite_eventuelle(j);
611 if ( (j=elem_faces(elem2,i)) > num_face )
613 val=
viscA(num_face,j,elem2,nu);
614 for (
int nc=0; nc<nb_comp; nc++)
616 int n0=num_face*nb_comp+nc;
618 int n0perio=fac_asso*nb_comp+nc;
619 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
620 matrice(n0,j0)-=val*porosite_eventuelle(j);
621 matrice(j0,n0perio)-=val*porosite_eventuelle(num_face);
622 matrice(j0,j0)+=val*porosite_eventuelle(j);
632 for (num_face=num1; num_face<num2; num_face++)
634 elem1 = face_voisins(num_face,0);
635 for (i=0; i<nb_faces_elem; i++)
637 if ( (j= elem_faces(elem1,i)) > num_face )
639 val =
viscA(num_face,j,elem1,nu);
640 for (
int nc=0; nc<nb_comp; nc++)
642 int n0=num_face*nb_comp+nc;
645 matrice(n0,n0)+=val*porosite_eventuelle(num_face);
646 matrice(n0,j0)-=val*porosite_eventuelle(j);
647 matrice(j0,n0)-=val*porosite_eventuelle(num_face);
648 matrice(j0,j0)+=val*porosite_eventuelle(j);
657 for (num_face=n0; num_face<n1; num_face++)
659 elem1 = face_voisins(num_face,0);
660 elem2 = face_voisins(num_face,1);
662 for (i=0; i<nb_faces_elem; i++)
664 if ( (j=elem_faces(elem1,i)) > num_face )
666 val =
viscA(num_face,j,elem1,nu);
667 for (
int nc=0; nc<nb_comp; nc++)
669 int nn0=num_face*nb_comp+nc;
672 matrice(nn0,nn0)+=val*porosite_eventuelle(num_face);
673 matrice(nn0,j0)-=val*porosite_eventuelle(j);
674 matrice(j0,nn0)-=val*porosite_eventuelle(num_face);
675 matrice(j0,j0)+=val*porosite_eventuelle(j);
680 if ( (j=elem_faces(elem2,i)) > num_face )
682 val=
viscA(num_face,j,elem2,nu);
683 for (
int nc=0; nc<nb_comp; nc++)
685 int nn0=num_face*nb_comp+nc;
688 matrice(nn0,nn0)+=val*porosite_eventuelle(num_face);
689 matrice(nn0,j0)-=val*porosite_eventuelle(j);
690 matrice(j0,nn0)-=val*porosite_eventuelle(num_face);
691 matrice(j0,j0)+=val*porosite_eventuelle(j);
698 for (
int n_bord=0; n_bord<nb_bords; n_bord++)
710 int nfin = ndeb + le_bord.
nb_faces();
711 for (
int face=ndeb; face<nfin; face++)
721 int nfin = ndeb + le_bord.
nb_faces();
722 for (
int face=ndeb; face<nfin; face++)
726 const double T = inconnue(face);
727 matrice(face,face) += 4 * COEFF_STEFAN_BOLTZMANN * la_cl_paroi.
emissivite(face-ndeb) * T * T * T *domaine_VEF.
face_surfaces(face);
731 || sub_type(
Symetrie,la_cl.valeur())
747 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
748 const IntTab& elem_faces = domaine_VEF.
elem_faces();
749 const IntTab& face_voisins = domaine_VEF.
face_voisins();
753 int nb_dim = transporte.
nb_dim();
762 modif_par_porosite_si_flag(
nu_,nu,!marq,porosite_elem);
763 DoubleVect porosite_eventuelle(
equation().milieu().porosite_face());
765 porosite_eventuelle=1;
780 for (
int n_bord=0; n_bord<nb_bords; n_bord++)
785 int num2 = num1 + le_bord.
nb_faces();
792 int num2b=num1+le_bord.
nb_faces()/2;
793 for (num_face=num1; num_face<num2b; num_face++)
795 elem1 = face_voisins(num_face,0);
796 elem2 = face_voisins(num_face,1);
798 for (i=0; i<nb_faces_elem; i++)
800 if ( (j=elem_faces(elem1,i)) > num_face )
802 for(
int c1=0; c1<nb_comp; c1++)
803 for(
int c2=0; c2<nb_comp; c2++)
806 int diffusivity_index = c1*nb_comp + c2;
808 ArrOfDouble diffu_c1_c2_elem;
810 val =
viscA(num_face,j,elem1,diffu_c1_c2_elem);
812 int n0=num_face*nb_comp+c1;
814 int n0b=num_face*nb_comp+c2;
815 int j0b=j*nb_comp+c2;
817 matrice(n0,n0b)+=val*porosite_eventuelle(num_face);
818 matrice(n0,j0b)-=val*porosite_eventuelle(j);
819 matrice(j0,n0b)-=val*porosite_eventuelle(num_face);
820 matrice(j0,j0b)+=val*porosite_eventuelle(j);
826 if ( (j=elem_faces(elem2,i)) > num_face )
828 for (
int nc=0; nc<nb_comp; nc++)
830 for(
int c1=0; c1<nb_comp; c1++)
831 for(
int c2=0; c2<nb_comp; c2++)
834 int diffusivity_index = c1*nb_comp + c2;
836 ArrOfDouble diffu_c1_c2_elem;
838 val =
viscA(num_face,j,elem1,diffu_c1_c2_elem);
840 int n0=num_face*nb_comp+c1;
842 int n0b=num_face*nb_comp+c2;
843 int j0b=j*nb_comp+c2;
845 matrice(n0,n0b)+=val*porosite_eventuelle(num_face);
846 matrice(n0,j0b)-=val*porosite_eventuelle(j);
847 matrice(j0,n0b)-=val*porosite_eventuelle(num_face);
848 matrice(j0,j0b)+=val*porosite_eventuelle(j);
850 int n0periob=fac_asso*nb_comp+c2;
851 matrice(j0,n0periob)-=val*porosite_eventuelle(num_face);
860 for (num_face=num1; num_face<num2; num_face++)
862 elem1 = face_voisins(num_face,0);
863 for (i=0; i<nb_faces_elem; i++)
865 if ( (j= elem_faces(elem1,i)) > num_face )
867 for(
int c1=0; c1<nb_comp; c1++)
869 for(
int c2=0; c2<nb_comp; c2++)
872 int diffusivity_index = c1*nb_comp + c2;
874 ArrOfDouble diffu_c1_c2_elem;
876 val =
viscA(num_face,j,elem1,diffu_c1_c2_elem);
878 int n0=num_face*nb_comp+c1;
880 int n0b=num_face*nb_comp+c2;
881 int j0b=j*nb_comp+c2;
883 matrice(n0,n0b)+=val*porosite_eventuelle(num_face);
884 matrice(n0,j0b)-=val*porosite_eventuelle(j);
885 matrice(j0,n0b)-=val*porosite_eventuelle(num_face);
886 matrice(j0,j0b)+=val*porosite_eventuelle(j);
896 elem1 = face_voisins(num_face,0);
897 elem2 = face_voisins(num_face,1);
899 for (i=0; i<nb_faces_elem; i++)
901 if ( (j=elem_faces(elem1,i)) > num_face )
903 for(
int c1=0; c1<nb_comp; c1++)
904 for(
int c2=0; c2<nb_comp; c2++)
906 int diffusivity_index = c1*nb_comp + c2;
908 ArrOfDouble diffu_c1_c2_elem;
910 val =
viscA(num_face,j,elem1,diffu_c1_c2_elem);
912 int n0=num_face*nb_comp+c1;
914 int n0b=num_face*nb_comp+c2;
915 int j0b=j*nb_comp+c2;
917 matrice(n0,n0b)+=val*porosite_eventuelle(num_face);
918 matrice(n0,j0b)-=val*porosite_eventuelle(j);
919 matrice(j0,n0b)-=val*porosite_eventuelle(num_face);
920 matrice(j0,j0b)+=val*porosite_eventuelle(j);
926 if ( (j=elem_faces(elem2,i)) > num_face )
928 for(
int c1=0; c1<nb_comp; c1++)
929 for(
int c2=0; c2<nb_comp; c2++)
931 int diffusivity_index = c1*nb_comp + c2;
933 ArrOfDouble diffu_c1_c2_elem;
935 val =
viscA(num_face,j,elem2,diffu_c1_c2_elem);
937 int n0=num_face*nb_comp+c1;
939 int n0b=num_face*nb_comp+c2;
940 int j0b=j*nb_comp+c2;
942 matrice(n0,n0b)+=val*porosite_eventuelle(num_face);
943 matrice(n0,j0b)-=val*porosite_eventuelle(j);
944 matrice(j0,n0b)-=val*porosite_eventuelle(num_face);
945 matrice(j0,j0b)+=val*porosite_eventuelle(j);
957 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
962 for (
int n_bord=0; n_bord<nb_bords; n_bord++)
970 int nfin = ndeb + le_bord.
nb_faces();
971 for (
int face=ndeb; face<nfin; face++)
972 for (
int comp=0; comp<nb_comp; comp++)
984 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
989 const DoubleTab& xv=domaine_VEF.
xv();
990 DoubleTab vit(
equation().inconnue().valeurs());
996 Cerr <<
" Verification de delta(x,0) " << finl;
1003 for(i=0; i<nbf; i++)
1005 resu(i,comp)/=(volumes_entrelaces(i));
1006 for(i=0; i<nbf; i++)
1008 if(std::fabs(resu(i,0))>1.e-10)
1010 Cerr <<
" delta(x,0) ("<<i<<
") = "
1015 Cerr <<
" Verification de delta(y(1-y),0) " << finl;
1016 for(i=0; i<nbf; i++)
1018 vit(i,0)=xv(i,1)*(1-xv(i,1));
1022 for(i=0; i<nbf; i++)
1024 resu(i,comp)/=(volumes_entrelaces(i));
1025 for(i=0; i<nbf; i++)
1027 if(std::fabs(2-resu(i,0))>1.e-10)
1029 Cerr <<
" delta(y(1-y),0) ("<<i<<
") = "
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
classe Champ_base Cette classe est la base de la hierarchie des champs.
classe Cond_lim Classe generique servant a representer n'importe quelle classe
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.
virtual const DoubleVect & face_surfaces() const
int nb_faces() const
renvoie le nombre global de 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
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.
classe Echange_externe_radiatif: Combines radiative (sigma * eps * (T^4 - T_ext^4)) and convective (h...
virtual double h_imp(int num) const
Renvoie la valeur du coefficient d'echange de chaleur impose sur la i-eme composante.
bool has_emissivite() const
virtual double T_ext(int num) const
Renvoie la valeur de la temperature imposee sur la i-eme composante du champ de frontiere.
double emissivite(int num) const
Renvoie la valeur de l'emissivite impose sur la i-eme composante.
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
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.
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
associe le champ de diffusivite
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
Associe l'operateur au domaine_dis, le domaine_Cl_dis, et a l'inconnue de son 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
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
virtual void completer()
Associe l'operateur au domaine_dis, le domaine_Cl_dis, et a l'inconnue de son equation.
classe Periodique Cette classe represente une condition aux limites periodique.
int face_associee(int i) const
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
classe Symetrie Sur les faces de symetrie on a les proprietes suivantes:
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