77 const Domaine_VEF& domaine_VEF = le_dom_VEF.valeur();
79 const IntTab& elem_faces = domaine_VEF.
elem_faces();
81 const DoubleVect& volumes = domaine_VEF.
volumes();
86 DoubleTab resu_sauv(resu);
88 const int nbpts = (
dimension==2) ? 7 : 15;
95 ArrOfDouble Poids(nbpts);
98 double tiers=0.333333333333333;
102 Poids[1]=Poids[2]=Poids[3]=0.125939180544827;
103 Poids[4]=Poids[5]=Poids[6]=0.132394152788506;
105 coord_bary(0,0)=coord_bary(0,1)=coord_bary(0,2)=tiers;
107 coord_bary(1,0)=0.797426985353087;
108 coord_bary(1,1)=coord_bary(1,2)=0.101286507323456;
109 coord_bary(2,1)=0.797426985353087;
110 coord_bary(2,0)=coord_bary(2,2)=0.101286507323456;
111 coord_bary(3,2)=0.797426985353087;
112 coord_bary(3,0)=coord_bary(3,1)=0.101286507323456;
114 coord_bary(4,0)=0.059715871789770;
115 coord_bary(4,1)=coord_bary(4,2)=0.470142064105115;
116 coord_bary(5,1)=0.059715871789770;
117 coord_bary(5,0)=coord_bary(5,2)=0.470142064105115;
118 coord_bary(6,2)=0.059715871789770;
119 coord_bary(6,0)=coord_bary(6,1)=0.470142064105115;
123 Poids[0]=0.030283678097089;
124 Poids[1]=Poids[2]=Poids[3]=Poids[4]=0.006026785714286;
125 Poids[5]=Poids[6]=Poids[7]=Poids[8]=0.011645249086029;
126 Poids[9]=Poids[10]=Poids[11]=
127 Poids[12]=Poids[13]=Poids[14]=0.010949141561386;
131 coord_bary(0,0)=coord_bary(0,1)=coord_bary(0,2)
132 =coord_bary(0,3)=0.250000000000000;
135 coord_bary(1,1)=coord_bary(1,2)=coord_bary(1,3)=tiers;
137 coord_bary(2,0)=coord_bary(2,2)=coord_bary(2,3)=tiers;
139 coord_bary(3,0)=coord_bary(3,1)=coord_bary(3,3)=tiers;
141 coord_bary(4,0)=coord_bary(4,1)=coord_bary(4,2)=tiers;
144 coord_bary(5,0)=0.727272727272727;
145 coord_bary(5,1)=coord_bary(5,2)=coord_bary(5,3)=0.090909090909091;
146 coord_bary(6,1)=0.727272727272727;
147 coord_bary(6,0)=coord_bary(6,2)=coord_bary(6,3)=0.090909090909091;
148 coord_bary(7,2)=0.727272727272727;
149 coord_bary(7,0)=coord_bary(7,1)=coord_bary(7,3)=0.090909090909091;
150 coord_bary(8,3)=0.727272727272727;
151 coord_bary(8,0)=coord_bary(8,1)=coord_bary(8,2)=0.090909090909091;
153 coord_bary(9,0)=coord_bary(9,1)=0.066550153573664;
154 coord_bary(9,2)=coord_bary(9,3)=0.433449846426336;
156 coord_bary(10,0)=coord_bary(10,2)=0.066550153573664;
157 coord_bary(10,1)=coord_bary(10,3)=0.433449846426336;
159 coord_bary(11,0)=coord_bary(11,3)=0.066550153573664;
160 coord_bary(11,1)=coord_bary(11,2)=0.433449846426336;
162 coord_bary(12,1)=coord_bary(12,2)=0.066550153573664;
163 coord_bary(12,0)=coord_bary(12,3)=0.433449846426336;
165 coord_bary(13,1)=coord_bary(13,3)=0.066550153573664;
166 coord_bary(13,0)=coord_bary(13,2)=0.433449846426336;
168 coord_bary(14,2)=coord_bary(14,3)=0.066550153573664;
169 coord_bary(14,0)=coord_bary(14,1)=0.433449846426336;
173 IntVect les_polygones(nbpts);
174 DoubleTab les_positions(nbpts,
dimension);
175 DoubleTab valeurs_source(nbpts,
dimension);
180 int modif_traitement_diri=0;
182 modif_traitement_diri=ref_cast(
Domaine_VEF, domaine_VEF).get_modif_div_face_dirichlet();
183 for (
int elem=0; elem<nb_elem_tot; elem++)
186 int type_elem = rang_elem < 0 ? 0 : (int)domaine_Cl_VEF.
type_elem_Cl(rang_elem);
187 if (modif_traitement_diri)
188 calculer_coef_som(type_elem,
dimension, nb_face_diri, indice_diri);
189 volume=volumes(elem);
190 for (
int i=0; i<nbpts; i++)
191 les_polygones(i)=elem;
194 const int som_glob = elem_sommets(elem,0);
196 a0[dim]=coord_sommets(som_glob,dim);
198 const int som_glob1 = elem_sommets(elem,1);
200 a0a1[dim]=coord_sommets(som_glob1,dim)-a0[dim];
202 const int som_glob2 = elem_sommets(elem,2);
204 a0a2[dim]=coord_sommets(som_glob2,dim)-a0[dim];
208 const int som_glob3 = elem_sommets(elem,3);
210 a0a3[dim]=coord_sommets(som_glob3,dim)-a0[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];
226 for (
int pt=0; pt<nbpts; pt++)
229 les_positions(pt,dim)=a0[dim]
230 +coord_bary(pt,1)* a0a1[dim]
231 +coord_bary(pt,2)* a0a2[dim]
232 +coord_bary(pt,3)* a0a3[dim];
239 la_source->valeur_aux_elems(les_positions,les_polygones,
246 int num_face=elem_faces(elem, face);
250 for (
int pt=0; pt<nbpts; pt++)
253 valeurs_Psi(pt, dim)=1-
dimension*coord_bary(pt,face);
257 for (
int pt=0; pt<nbpts; pt++)
261 double contrib=Poids[pt]*volume
262 *valeurs_source(pt,dim)*valeurs_Psi(pt,dim);
263 resu(num_face, dim)+=contrib;
266 for (
int fdiri=0; fdiri<nb_face_diri; fdiri++)
268 int indice=indice_diri[fdiri];
269 int facel = elem_faces(elem,indice);
273 resu(facel,dim)-=contrib;
274 double contrib2=contrib/(
dimension+1-nb_face_diri);
278 int face2=elem_faces(elem,f2);
279 resu(face2,dim)+=contrib2;
291 for (
int sommet=0; sommet<=
dimension; sommet++)
293 for (
int dim=0; dim<
dimension; dim++) coord_sommets_loc(sommet,dim)=coord_sommets(elem_sommets(elem,sommet),dim);
297 int num_face=elem_faces(elem, face);
299 for (
int pt=0; pt<nbpts; pt++)
302 for (
int dim=0; dim<
dimension; dim++) contrib_pt+=(les_positions(pt,dim)-coord_sommets_loc(face,dim))*valeurs_source(pt,dim);
303 contrib+=contrib_pt*Poids[pt];
307 if(elem!=face_voisins(num_face,0))
311 double contrib_resu=signe*face_normales(num_face,dim)*contrib;
312 resu(num_face, dim)+=contrib_resu;
314 for (
int fdiri=0; fdiri<nb_face_diri; fdiri++)
316 int indice=indice_diri[fdiri];
317 int facel = elem_faces(elem,indice);
321 resu(facel,dim)-=contrib_resu;
322 double contrib_resu2=contrib_resu/(
dimension+1-nb_face_diri);
325 int face2=elem_faces(elem,f2);
326 resu(face2,dim)+=contrib_resu2;
337 for (
int n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
344 int nb_faces_bord=le_bord.
nb_faces();
345 IntVect fait(nb_faces_bord);
347 for (
int ind_face=0; ind_face<nb_faces_bord; ind_face++)
349 if (fait(ind_face) == 0)
353 fait(ind_face_associee) = 1;
354 int face = le_bord.
num_face(ind_face);
355 int face_associee = le_bord.
num_face(ind_face_associee);
356 for (
int comp=0; comp<nb_comp; comp++)
358 resu(face, comp)=(resu(face_associee, comp)+=resu(face, comp));
365 ArrOfDouble tab_bilan(nb_comp);