57 DoubleTab& resu)
const
62 const DoubleTab& vitesse_face_absolue=la_vitesse.
valeurs();
66 const IntTab& elem_faces = domaine_VEF.
elem_faces();
67 const Domaine& domaine = domaine_VEF.
domaine();
70 const IntTab& elem_sommets = domaine.les_elems();
71 const DoubleTab& coord_sommets=domaine.les_sommets();
78 const DoubleVect& volumes = domaine_VEF.
volumes();
85 int modif_traitement_diri=0;
87 modif_traitement_diri=ref_cast(
Domaine_VEF,domaine_VEF).get_modif_div_face_dirichlet();
88 int elem,i,j,alfa,dim;
92 for (elem=0; elem<nb_elem_tot; elem++)
97 int numSom=elem_sommets(elem, i);
98 for (dim=0; dim<
dimension; dim++) coordSommet(i,dim)=coord_sommets(numSom,dim);
100 if (modif_traitement_diri)
103 int type_elem = rang_elem < 0 ? 0 : domaine_Cl_VEF.
type_elem_Cl(rang_elem);
104 calculer_coef_som(type_elem,
dimension, nb_face_diri, indice_diri);
106 volume=volumes(elem);
107 double invVol = 1./(12*volume);
108 double invVol2 = invVol/volume;
114 int num_face=elem_faces(elem, j);
115 for (dim=0; dim<
dimension; dim++) FacesNormales(j,dim)=face_normales(num_face,dim);
116 if (elem!=face_voisins(num_face,0))
118 for (dim=0; dim<
dimension; dim++) FacesNormales(j,dim)=-FacesNormales(j,dim);
120 vitFaceNormale(j)=0.;
122 vitFaceNormale(j)+=vitesse_face_absolue(num_face,dim)*FacesNormales(j,dim);
128 int num_face=elem_faces(elem, j);
129 rotVit+=vitesse_face_absolue(num_face,1)*FacesNormales(j,0)-vitesse_face_absolue(num_face,0)*FacesNormales(j,1);
137 FiFj(i,j) = FacesNormales(j,0)*FacesNormales(i,1)-FacesNormales(j,1)*FacesNormales(i,0);
138 FiFj(j,i) =-FiFj(i,j);
148 if (i!=j) resu_face(i) += vitFaceNormale(j)*FiFj(j,i);
153 int num_face=elem_faces(elem, i);
157 double contrib_resu=rotVit*FacesNormales(i,dim)*resu_face(i);
158 resu(num_face, dim)+=contrib_resu;
160 for (
int fdiri=0; fdiri<nb_face_diri; fdiri++)
162 int indice=indice_diri[fdiri];
163 int facel = elem_faces(elem,indice);
166 resu(facel,dim)-=contrib_resu;
167 double contrib_resu2=contrib_resu/(
dimension+1-nb_face_diri);
171 int face2=elem_faces(elem,f2);
172 resu(face2,dim)+=contrib_resu2;
183 for ( elem=0; elem<nb_elem_tot; elem++)
188 int numSom=elem_sommets(elem, i);
189 for (dim=0; dim<
dimension; dim++) coordSommet(i,dim)=coord_sommets(numSom,dim);
197 if (modif_traitement_diri)
200 int type_elem = rang_elem < 0 ? 0 : domaine_Cl_VEF.
type_elem_Cl(rang_elem);
201 calculer_coef_som(type_elem,
dimension, nb_face_diri, indice_diri);
203 volume=volumes(elem);
204 for (dim=0; dim<
dimension; dim++) rotVit(dim)=0.;
207 int num_face=elem_faces(elem, i);
209 FacesNormales(i,dim)=face_normales(num_face,dim);
210 if (elem==face_voisins(num_face,0))
213 FacesNormales(i,dim)=-FacesNormales(i,dim);
216 rotVit(0)+=vitesse_face_absolue(num_face,2)*FacesNormales(i,1)-vitesse_face_absolue(num_face,1)*FacesNormales(i,2);
217 rotVit(1)+=vitesse_face_absolue(num_face,0)*FacesNormales(i,2)-vitesse_face_absolue(num_face,2)*FacesNormales(i,0);
218 rotVit(2)+=vitesse_face_absolue(num_face,1)*FacesNormales(i,0)-vitesse_face_absolue(num_face,0)*FacesNormales(i,1);
219 for (j=0; j<=
dimension; j++) rotVitFiFj(i,j)=0.;
220 vitFaceNormale(i)=0.;
221 for (dim=0; dim<
dimension; dim++) vitFaceNormale(i)+=vitesse_face_absolue(num_face,dim)*FacesNormales(i,dim);
224 double rotVol=1./(18.*volume*volume);
225 for (dim=0; dim<
dimension; dim++) rotVit(dim)*=rotVol;
230 rotVitFiFj(0,1)+=rotVit(dim)*(FacesNormales(2,dim)-FacesNormales(3,dim));
231 rotVitFiFj(0,2)+=rotVit(dim)*(FacesNormales(3,dim)-FacesNormales(1,dim));
232 rotVitFiFj(0,3)+=rotVit(dim)*(FacesNormales(1,dim)-FacesNormales(2,dim));
233 rotVitFiFj(1,2)+=rotVit(dim)*(FacesNormales(0,dim)-FacesNormales(3,dim));
234 rotVitFiFj(1,3)+=rotVit(dim)*(FacesNormales(2,dim)-FacesNormales(0,dim));
235 rotVitFiFj(2,3)+=rotVit(dim)*(FacesNormales(0,dim)-FacesNormales(1,dim));
239 for (j=i+1; j<=
dimension; j++) rotVitFiFj(j,i)=-rotVitFiFj(i,j);
247 if (i!=j) resu_face(i)+=vitFaceNormale(j)*rotVitFiFj(i,j);
252 int num_face=elem_faces(elem,i);
255 double contrib=resu_face(i)*FacesNormales(i,alfa);
256 resu(num_face,alfa)+=contrib;
258 for (
int fdiri=0; fdiri<nb_face_diri; fdiri++)
260 int indice=indice_diri[fdiri];
261 int facel = elem_faces(elem,indice);
264 resu(num_face,alfa)-=contrib;
265 double contrib2=contrib/(
dimension+1-nb_face_diri);
269 int face2=elem_faces(elem,f2);
270 resu(face2,alfa)+=contrib2;
288 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
290 const DoubleTab& vitesse_face_absolue=la_vitesse.
valeurs();
291 const IntTab& elem_faces = domaine_VEF.
elem_faces();
292 const DoubleTab& face_normales = domaine_VEF.
face_normales();
293 const Domaine& domaine = domaine_VEF.
domaine();
299 const IntTab& elem_sommets = domaine.les_elems();
315 int ncomp_ch_transporte;
316 if (transporte.
nb_dim() == 1)
317 ncomp_ch_transporte=1;
319 ncomp_ch_transporte= transporte.
dimension(1);
324 DoubleTab vitesse_face_;
328 const DoubleTab& vitesse_face=modif_par_porosite_si_flag(vitesse_face_absolue,vitesse_face_,marq,porosite_face);
350 Cout<<
"Op_Conv_RT_VEF_Face::ajouter_contribution RT\n";
351 const DoubleVect& volumes = domaine_VEF.
volumes();
352 const IntTab& face_voisins = domaine_VEF.
face_voisins();
355 int dim,elem,alfa,beta,k;
358 for (elem=0; elem<nb_elem_tot; elem++)
364 int numSom=elem_sommets(elem, i);
365 for (dim=0; dim<
dimension; dim++) coordSommet(i,dim)=coord_sommets(numSom,dim);
368 double det=coordSommet(0,0)*(coordSommet(1,1)-coordSommet(2,1));
369 det-=coordSommet(1,0)*(coordSommet(0,1)-coordSommet(2,1));
370 det+=coordSommet(2,0)*(coordSommet(0,1)-coordSommet(1,1));
374 Cout<<
"Changer sens triangle " << elem <<
"\n";
377 double temp=coordSommet(1,dim);
378 coordSommet(1,dim)=coordSommet(2,dim);
379 coordSommet(2,dim)=temp;
387 num_face=elem_faces(elem, j);
388 for (dim=0; dim<
dimension; dim++) FacesNormales(j,dim)=face_normales(num_face,dim);
389 if (elem!=face_voisins(num_face,0))
391 for (dim=0; dim<
dimension; dim++) FacesNormales(j,dim)=-FacesNormales(j,dim);
393 vitFaceNormale(j)=0.;
394 for (dim=0; dim<
dimension; dim++) vitFaceNormale(j)+=vitesse_face_absolue(num_face,dim)*FacesNormales(j,dim);
406 FiaFib(i,alfa,j,beta)=FacesNormales(i,alfa)*FacesNormales(j,beta);
407 FiaFib(j,beta,i,beta)=FiaFib(i,alfa,j,beta);
413 volume=volumes(elem);
414 double invVol=1./(12*volume);
415 double invVolvol=invVol/volume;
420 Fij(i,j)= FiaFib(i,0,j,1)-FiaFib(i,1,j,0);
426 DoubleVect vitFaceNormaleFij(
dimension+1);
429 vitFaceNormaleFij(i)=0.;
432 if (k!=i) vitFaceNormaleFij(i)+=vitFaceNormale(k)*Fij(k,i);
434 vitFaceNormaleFij(i)*=invVolvol;
439 int num_face_i=elem_faces(elem, i);
443 int num_face_j=elem_faces(elem, j);
446 matrice(num_i,num_j) -= FiaFib(i,0,j,0)*vitFaceNormaleFij(i);
447 matrice(num_i,num_j+1) += FiaFib(i,0,j,1)*vitFaceNormaleFij(i);
448 matrice(num_i+1,num_j) += FiaFib(i,1,j,0)*vitFaceNormaleFij(i);
449 matrice(num_i+1,num_j+1) -= FiaFib(i,1,j,1)*vitFaceNormaleFij(i);
452 matrice(num_j,num_i) -= FiaFib(j,0,i,0)*vitFaceNormaleFij(j);
453 matrice(num_j,num_i+1) += FiaFib(j,0,i,1)*vitFaceNormaleFij(j);
454 matrice(num_j+1,num_i) += FiaFib(j,1,i,0)*vitFaceNormaleFij(j);
455 matrice(num_j+1,num_i+1) -= FiaFib(j,1,i,1)*vitFaceNormaleFij(j);
468 demi_coordSommet(i,dim)=0.5*coordSommet(i,dim);
469 SiMj(i,i,dim) = -coordSommet(i,dim);
474 SiMj(0,1,dim) = demi_coordSommet(2,dim)-demi_coordSommet(0,dim);
475 SiMj(2,1,dim) = -SiMj(0,1,dim);
476 SiMj(0,2,dim) = demi_coordSommet(1,dim)-demi_coordSommet(0,dim);
477 SiMj(1,2,dim) = -SiMj(0,2,dim);
478 SiMj(1,0,dim) = demi_coordSommet(2,dim)-demi_coordSommet(1,dim);
479 SiMj(2,0,dim) = -SiMj(1,0,dim);
480 SiMj(0,0,dim) += demi_coordSommet(2,dim)+demi_coordSommet(1,dim);
481 SiMj(1,1,dim) += demi_coordSommet(2,dim)+demi_coordSommet(0,dim);
482 SiMj(2,2,dim) += demi_coordSommet(0,dim)+demi_coordSommet(1,dim);
492 for (dim=0; dim<
dimension; dim++) resu_j(j,dim)+=vitFaceNormale(k)*SiMj(k,j,dim);
494 for (dim=0; dim<
dimension; dim++) resu_j(j,dim)*=invVol;
498 int num_face_i=elem_faces(elem, i);
504 int num_face_j=elem_faces(elem, j);
508 matrice(num_i,num_j)-= FacesNormales(i,alfa)*resu_j(j,beta);
509 matrice(num_j,num_i)-= FacesNormales(j,beta)*resu_j(i,alfa);
521 for (elem=0; elem<nb_elem_tot; elem++)
527 int numSom=elem_sommets(elem, i);
528 for (dim=0; dim<
dimension; dim++) coordSommet(i,dim)=coord_sommets(numSom,dim);
536 for (dim=0; dim<
dimension; dim++) S1Si(i,dim)=coordSommet(i+1,dim)-coordSommet(0,dim);
538 S1S2vectS1S3(0)=S1Si(0,1)*S1Si(1,2)-S1Si(0,2)*S1Si(1,1);
539 S1S2vectS1S3(1)=S1Si(0,2)*S1Si(1,0)-S1Si(0,0)*S1Si(1,2);
540 S1S2vectS1S3(2)=S1Si(0,0)*S1Si(1,1)-S1Si(0,1)*S1Si(1,0);
542 for (dim=0; dim<
dimension; dim++) det+=S1S2vectS1S3(dim)*S1Si(2,dim);
547 Cout<<
"Changer sens triangle " << elem <<
"\n";
550 double temp=coordSommet(2,dim);
551 coordSommet(2,dim)=coordSommet(3,dim);
552 coordSommet(3,dim)=temp;
562 num_face=elem_faces(elem, i);
563 for (dim=0; dim<
dimension; dim++) FacesNormales(i,dim)=face_normales(num_face,dim);
564 if (elem!=face_voisins(num_face,0))
566 for (dim=0; dim<
dimension; dim++) FacesNormales(i,dim)=-FacesNormales(i,dim);
568 vitFaceNormale(i)=0.;
569 for (dim=0; dim<
dimension; dim++) vitFaceNormale(i) += vitesse_face_absolue(num_face,dim)*FacesNormales(i,dim);
573 FiFj(i,j,0)=FacesNormales(i,1)*FacesNormales(j,2)-FacesNormales(i,2)*FacesNormales(j,1);
574 FiFj(i,j,1)=FacesNormales(i,2)*FacesNormales(j,0)-FacesNormales(i,0)*FacesNormales(j,2);
575 FiFj(i,j,2)=FacesNormales(i,0)*FacesNormales(j,1)-FacesNormales(i,1)*FacesNormales(j,0);
576 for (dim=0; dim<
dimension; dim++) FiFj(j,i,dim)=-FiFj(i,j,dim);
607 FkiFj(k,i,k,dim)=FiFj(kk,k,dim)-FiFj(ii,k,dim);
608 FkiFj(i,k,k,dim)=-FkiFj(k,i,k,dim);
609 FkiFj(k,i,i,dim)=FiFj(kk,i,dim)-FiFj(ii,i,dim);
610 FkiFj(i,k,i,dim)=-FkiFj(k,i,i,dim);
615 volume=volumes(elem);
616 double invVol=1./(18.*volume*volume);
619 int num_face_i=elem_faces(elem, i);
622 for (dim=0; dim<
dimension; dim++) num_ia(dim)=num_i+dim;
625 int num_face_j=elem_faces(elem, j);
632 if (k!=i) resu_loc+=vitFaceNormale(k)*FkiFj(k,i,j,beta);
634 for (alfa=0; alfa<
dimension; alfa++) matrice(num_ia(alfa),num_j)+=resu_loc*FacesNormales(i,alfa);
644 double c0= 0.13819660112501051518;
645 double c1= 0.58541019662496845446;
646 double c2=-0.75623058987490536338;
649 lambda(0,0)=lambda(0,1)=lambda(0,2)=c0;
651 lambda(1,0)=lambda(1,1)=lambda(1,3)=c0;
653 lambda(2,0)=lambda(2,2)=lambda(2,3)=c0;
655 lambda(3,2)=lambda(3,1)=lambda(3,3)=c0;
659 psi(0,0)=psi(0,1)=psi(0,2)=c1;
661 psi(1,0)=psi(1,1)=psi(1,3)=c1;
663 psi(2,0)=psi(2,2)=psi(2,3)=c1;
665 psi(3,2)=psi(3,1)=psi(3,3)=c1;
670 for (pt=0; pt<nbpt; pt++)
675 for (j=0; j<=
dimension; j++) OXp(pt,beta)+=lambda(pt,j)*coordSommet(j,beta);
678 invVol=1./(24.*volume);
685 for (pt=0; pt<nbpt; pt++) SkXp(k,pt,gamma)=OXp(pt,gamma)-coordSommet(k,gamma);
690 int num_face_i=elem_faces(elem, i);
696 int num_face_j=elem_faces(elem,j);
700 double resu_j_beta=0.;
705 for (pt=0; pt<nbpt; pt++) resu_k+=SkXp(k,pt,beta)*psi(pt,j);
706 resu_k*=vitFaceNormale(k);
709 matrice(num_i,num_j)-=invVol*FacesNormales(i,alfa)*resu_j_beta ;
725 for (n_bord=0; n_bord<nb_bord; n_bord++)
734 int num2 = num1 + le_bord.
nb_faces();
735 for (num_face=num1; num_face<num2; num_face++)
739 psc += vitesse_face(num_face,i)*face_normales(num_face,i);
740 if (!phi_u_transportant_yes)
741 psc*=porosite_face(num_face);
744 for (j=0; j<ncomp_ch_transporte; j++)
746 int n0=num_face*ncomp_ch_transporte+j;