55 const DoubleVect& volumes = domaine_VEF.
volumes();
61 const IntTab& elem_faces = domaine_VEF.
elem_faces();
67 ArrOfDouble T0_etat=T0;
79 T_etat->valeurs().
reset();
80 T_etat->valeurs()=val_T_etat;
102 ArrOfDouble Poids(nbpts);
106 double tiers=0.333333333333333;
108 Poids[1]=Poids[2]=Poids[0];
125 Poids[1]=Poids[2]=Poids[3]=Poids[0];
127 double a = 0.5854101966249685;
128 double b = 0.1381966011250105;
153 int nb_comp = le_scalaire.
nb_comp();
154 IntVect les_polygones(nbpts);
155 DoubleTab les_positions(nbpts,
dimension);
156 DoubleTab valeurs_scalaire(nbpts,nb_comp);
157 DoubleTab valeurs_scalaire_etat(nbpts,nb_comp);
158 DoubleTab valeurs_beta(nbpts,nb_comp);
159 DoubleVect valeurs_Psi(nbpts);
164 int modif_traitement_diri=( sub_type(
Domaine_VEF,domaine_VEF) ? ref_cast(
Domaine_VEF,domaine_VEF).get_modif_div_face_dirichlet() : 0);
165 modif_traitement_diri = 0;
171 for (
int elem=0; elem<nb_elem_tot; elem++)
173 if (modif_traitement_diri)
176 int type_elem = (int)rang_elem < 0 ? 0 : domaine_Cl_VEF.
type_elem_Cl(rang_elem);
177 calculer_coef_som(type_elem,
dimension, nb_face_diri, indice_diri);
179 double volume=volumes(elem);
180 for (
int i=0; i<nbpts; i++)
181 les_polygones(i)=elem;
184 const int som_glob = elem_sommets(elem,0);
186 a0[dim]=coord_sommets(som_glob,dim);
188 const int som_glob1 = elem_sommets(elem,1);
190 a0a1[dim]=coord_sommets(som_glob1,dim)-a0[dim];
192 const int som_glob2 = elem_sommets(elem,2);
194 a0a2[dim]=coord_sommets(som_glob2,dim)-a0[dim];
198 const int som_glob3 = elem_sommets(elem,3);
200 a0a3[dim]=coord_sommets(som_glob3,dim)-a0[dim];
206 for (
int pt=0; pt<nbpts; pt++)
209 les_positions(pt,dim)=a0[dim]
210 +coord_bary(pt,1)* a0a1[dim]
211 +coord_bary(pt,2)* a0a2[dim];
216 for (
int pt=0; pt<nbpts; pt++)
219 les_positions(pt,dim)=a0[dim]
220 +coord_bary(pt,1)* a0a1[dim]
221 +coord_bary(pt,2)* a0a2[dim]
222 +coord_bary(pt,3)* a0a3[dim];
230 T_etat->valeur_aux_elems(les_positions,les_polygones,valeurs_scalaire_etat);
236 int num_face=elem_faces(elem, face);
239 for (
int pt=0; pt<nbpts; pt++)
241 valeurs_Psi(pt)=(1-
dimension*coord_bary(pt,face))*porosite_surf(num_face);
244 for (
int pt=0; pt<nbpts; pt++)
249 for (
int comp=0; comp<nb_comp; comp++)
251 contrib+=Poids[pt]*volume*(T0[comp]-valeurs_scalaire(pt,comp))*valeurs_beta(pt,comp)*g(dim)*valeurs_Psi(pt);
252 contrib+=Poids[pt]*volume*(T0_etat[comp]- valeurs_scalaire_etat(pt,comp))*beta_a*g(dim)*valeurs_Psi(pt);
254 resu(num_face,dim)+=contrib;
256 if (modif_traitement_diri)
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(facel,dim)-=contrib;
265 double contrib2=contrib/(
dimension+1-nb_face_diri);
268 int face2=elem_faces(elem,f2);
269 resu(face2,dim)+=contrib2;
280 for (
int n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
287 int nb_faces_bord=le_bord.
nb_faces();
288 IntVect fait(nb_faces_bord);
290 for (
int ind_face=0; ind_face<nb_faces_bord; ind_face++)
292 if (fait(ind_face) == 0)
296 fait(ind_face_associee) = 1;
297 int face = le_bord.
num_face(ind_face);
298 int face_associee = le_bord.
num_face(ind_face_associee);
300 resu(face, dim)=(resu(face_associee, dim)+=resu(face, dim));
310 Cout <<
"Integrale : (";
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
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