46 const DoubleVect& face_surfaces = domaine_VEF.
face_surfaces();
48 DoubleVect coeff_faces(nb_faces);
51 const IntTab& som_elem=
domaine.les_elems();
53 double sautdirectionnel;
65 int nb_elem = domaine_VEF.
nb_elem();
68 DoubleTab la_vitesse = vitesse_->valeurs();
69 DoubleTab la_pression = pression_p1isop1b_->valeurs();
71 DoubleTab le_terme_source(vitesse_->valeurs());
79 const DoubleTab& src = ch_bs.
valeurs();
83 le_terme_source = src;
84 DoubleTab gradient_elem(nb_elem_tot,dim,dim);
86 const DoubleTab tabnu=viscosite_cinematique_->valeurs();
89 DoubleVect visc(nb_elem);
101 for (fac=0; fac<nb_faces; fac++)
103 coeff_faces(fac) = pow(face_surfaces(fac),0.5);
116 DoubleTab vite_moye(nb_elem,dim);
118 DoubleTab convec(nb_elem,dim);
121 for (fac=0; fac<nb_faces; fac++)
123 elem1=face_voisins(fac,0);
124 elem2=face_voisins(fac,1);
127 for (i=0; i<dim; i++)
129 vite_moye(elem1,i) += la_vitesse(fac,i);
134 for (i=0; i<dim; i++)
136 vite_moye(elem2,i) += la_vitesse(fac,i);
140 vite_moye /= (dim+1.0);
148 for (ielem=0; ielem<nb_elem; ielem++)
150 for (i=0; i<dim; i++)
152 for (j=0; j<dim; j++)
154 convec(ielem,i) += vite_moye(ielem,j) * gradient_elem(ielem,i,j);
159 DoubleTab grad_pression(nb_elem,dim);
163 for (fac=0; fac<nb_faces; fac++)
165 elem1=face_voisins(fac,0);
166 elem2=face_voisins(fac,1);
171 som_opp = le_dom_VF->get_num_fac_loc(fac, 0);
172 som_opp = som_elem(elem1, som_opp);
173 for (j=0; j<dim; j++)
175 grad_pression(elem1,j) -= signe * la_pression(nps+som_opp) * face_normales(fac,j);
182 som_opp = le_dom_VF->get_num_fac_loc(fac, 1);
183 som_opp = som_elem(elem2, som_opp);
184 for (j=0; j<dim; j++)
186 grad_pression(elem2,j) -= signe * la_pression(nps+som_opp) * face_normales(fac,j);
190 for (ielem=0; ielem<nb_elem; ielem++)
192 for (j=0; j<dim; j++)
194 grad_pression(ielem,j) *= inverse_volumes(ielem)/dim;
199 DoubleTab source_moye(nb_elem,dim);
201 for (fac=0; fac<nb_faces; fac++)
203 elem1=face_voisins(fac,0);
204 elem2=face_voisins(fac,1);
207 for (i=0; i<dim; i++)
209 source_moye(elem1,i) += le_terme_source(fac,i);
214 for (i=0; i<dim; i++)
216 source_moye(elem2,i) += le_terme_source(fac,i);
220 source_moye /= (dim+1.0);
223 for (ielem=0; ielem<nb_elem; ielem++)
226 for (i=0; i<dim; i++)
228 contri_elem_i = ( source_moye(ielem,i) - grad_pression(ielem,i) - convec(ielem,i) );
229 estimloc += contri_elem_i * contri_elem_i;
231 estim(ielem) += estimloc / pow( inverse_volumes(ielem), (1.0 + 2.0/dim) );
245 for (fac=premiere_face_int; fac<nb_faces; fac++)
247 elem1=face_voisins(fac,0);
248 elem2=face_voisins(fac,1);
249 if ( (elem1>=0) && (elem2>=0) )
251 for (i=0; i<dim; i++)
253 sautdirectionnel = 0.;
254 for (j=0; j<dim; j++)
256 sautdirectionnel += ( visc(elem1)*gradient_elem(elem1,i,j) - visc(elem2)*gradient_elem(elem2,i,j) ) * face_normales(fac,j);
258 sautdirectionnel -= ( la_pression(elem1) - la_pression(elem2) ) * face_normales(fac,i);
259 sautdirectionnel *= sautdirectionnel;
260 sautdirectionnel /= coeff_faces(fac);
261 estim(elem1) += sautdirectionnel/2.0;
262 estim(elem2) += sautdirectionnel/2.0;
269 for (fac=premiere_face_int; fac<nb_faces; fac++)
271 elem1=face_voisins(fac,0);
272 elem2=face_voisins(fac,1);
273 if ( (elem1>=0) && (elem2>=0) )
275 for (i=0; i<dim; i++)
277 sautdirectionnel = 0.;
278 for (j=0; j<dim; j++)
280 sautdirectionnel += ( visc(elem1)*gradient_elem(elem1,i,j) - visc(elem2)*gradient_elem(elem2,i,j) ) * face_normales(fac,j);
282 sautdirectionnel *= sautdirectionnel;
283 sautdirectionnel /= coeff_faces(fac);
284 estim(elem1) += sautdirectionnel/2.0;
285 estim(elem2) += sautdirectionnel/2.0;
295 for (fac=premiere_face_int; fac<nb_faces; fac++)
297 elem1=face_voisins(fac,0);
298 elem2=face_voisins(fac,1);
299 if ( (elem1>=0) && (elem2>=0) )
301 for (i=0; i<dim; i++)
303 sautdirectionnel = ( visc(elem1)*gradient_elem(elem1,i,1) - visc(elem2)*gradient_elem(elem2,i,1) ) * face_normales(fac,2) - ( visc(elem1)*gradient_elem(elem1,i,2) - visc(elem2)*gradient_elem(elem2,i,2) ) * face_normales(fac,1);
304 sautdirectionnel *= sautdirectionnel;
305 sautdirectionnel /= coeff_faces(fac);
306 estim(elem1) += sautdirectionnel/2.0;
307 estim(elem2) += sautdirectionnel/2.0;
309 sautdirectionnel = ( visc(elem1)*gradient_elem(elem1,i,2) - visc(elem2)*gradient_elem(elem2,i,2) ) * face_normales(fac,0) - ( visc(elem1)*gradient_elem(elem1,i,0) - visc(elem2)*gradient_elem(elem2,i,0) ) * face_normales(fac,2);
310 sautdirectionnel *= sautdirectionnel;
311 sautdirectionnel /= coeff_faces(fac);
312 estim(elem1) += sautdirectionnel/2.0;
313 estim(elem2) += sautdirectionnel/2.0;
315 sautdirectionnel = ( visc(elem1)*gradient_elem(elem1,i,0) - visc(elem2)*gradient_elem(elem2,i,0) ) * face_normales(fac,1) - ( visc(elem1)*gradient_elem(elem1,i,1) - visc(elem2)*gradient_elem(elem2,i,1) ) * face_normales(fac,0);
316 sautdirectionnel *= sautdirectionnel;
317 sautdirectionnel /= coeff_faces(fac);
318 estim(elem1) += sautdirectionnel/2.0;
319 estim(elem2) += sautdirectionnel/2.0;
360 for (fac=premiere_face_int; fac<nb_faces; fac++)
362 elem1=face_voisins(fac,0);
363 elem2=face_voisins(fac,1);
364 if ( (elem1>=0) && (elem2>=0) )
366 for (i=0; i<dim; i++)
368 sautdirectionnel = 0.;
369 sautdirectionnel = ( visc(elem1)*gradient_elem(elem1,i,0) - visc(elem2)*gradient_elem(elem2,i,0) ) * face_normales(fac,1) - ( visc(elem1)*gradient_elem(elem1,i,1) - visc(elem2)*gradient_elem(elem2,i,1) ) * face_normales(fac,0);
370 sautdirectionnel *= sautdirectionnel;
371 sautdirectionnel /= coeff_faces(fac);
372 estim(elem1) += sautdirectionnel/2.0;
373 estim(elem2) += sautdirectionnel/2.0;
405 for (ielem=0; ielem<nb_elem; ielem++)
407 estimtot += estim(ielem);
408 estim(ielem) = sqrt(estim(ielem));
410 estimtot = sqrt(estimtot);
411 cout <<
"Estimateur_Aposteriori_P0_VEF::mettre_a_jour - estimateur = " << estimtot << endl;