145 const DoubleTab& tab_visco=ch_visco.
valeurs();
148 visco=tab_visco(0,0);
154 const IntTab& face_voisins = domaine_VEF.
face_voisins();
155 const DoubleVect& volumes = domaine_VEF.
volumes();
160 const int nb_faces = domaine_VEF.
nb_faces();
163 const int nb_elem = domaine_VEF.
nb_elem();
169 int elem,elem0,elem2;
175 const int ncomp_ch_transporte = transporte.
line_size();
177 DoubleTab gradient(0, ncomp_ch_transporte,
dimension);
180 DoubleTab deriv_seconde_de_gradient_elem(0, ncomp_ch_transporte,
dimension,
dimension);
182 deriv_seconde_de_gradient_elem=0.;
189 DoubleTab gradient_elem(0, ncomp_ch_transporte,
dimension);
192 DoubleTab champ_elem(0, ncomp_ch_transporte,
dimension);
197 deriv_seconde_de_gradient=0.;
199 int fac=-1,elem1,comp;
203 ref_cast_non_const(
Champ_P1NC,vitesse).calcul_gradient(transporte,gradient_elem,ref_cast(
Domaine_Cl_VEF,eq_hydraulique->domaine_Cl_dis()));
209 for (fac=0; fac< premiere_face_int; fac++)
210 for (comp=0; comp<ncomp_ch_transporte; comp++)
213 elem1=face_voisins(fac,0);
214 elem2=face_voisins(fac,1);
217 double vol1=volumes(elem1);
218 double vol2=volumes(elem2);
219 double voltot=vol1+vol2;
220 for (comp=0; comp<ncomp_ch_transporte; comp++)
223 double grad1=gradient_elem(elem1, comp, i);
224 double grad2=gradient_elem(elem2, comp, i);
225 gradient(fac, comp, i) = (vol1*grad1 + vol2*grad2)/voltot;
229 for (comp=0; comp<ncomp_ch_transporte; comp++)
231 gradient(fac, comp, i) = gradient_elem(elem1, comp, i);
235 for (; fac<nb_faces; fac++)
237 elem1=face_voisins(fac,0);
238 elem2=face_voisins(fac,1);
239 double vol1=volumes(elem1);
240 double vol2=volumes(elem2);
241 double voltot=vol1+vol2;
242 for (comp=0; comp<ncomp_ch_transporte; comp++)
245 double grad1=gradient_elem(elem1, comp, i);
246 double grad2=gradient_elem(elem2, comp, i);
247 gradient(fac, comp, i) = (vol1*grad1 + vol2*grad2)/voltot;
251 gradient.echange_espace_virtuel();
259 for (comp=0; comp<ncomp_ch_transporte; comp++)
260 for (fac=0; fac<nb_faces; fac++)
261 champ_face(fac,comp)=gradient(fac, comp, i);
263 ref_cast_non_const(
Champ_P1NC,vitesse).calcul_gradient(champ_face,champ_elem,ref_cast(
Domaine_Cl_VEF,eq_hydraulique->domaine_Cl_dis()));
265 for (comp=0; comp<ncomp_ch_transporte; comp++)
266 for ( elem=0; elem<nb_elem; elem++)
268 deriv_seconde_de_gradient_elem(elem,comp,i,j) = champ_elem(elem,comp,j);
278 for (fac=0; fac< premiere_face_int; fac++)
280 for (comp=0; comp<ncomp_ch_transporte; comp++)
284 elem1=face_voisins(fac,0);
286 deriv_seconde_de_gradient(fac, comp, i, j) = deriv_seconde_de_gradient_elem(elem1, comp, i, j);
289 elem1=face_voisins(fac,1);
290 deriv_seconde_de_gradient(fac, comp, i, j) = deriv_seconde_de_gradient_elem(elem1, comp, i, j);
296 for (; fac<nb_faces; fac++)
298 elem1=face_voisins(fac,0);
299 elem2=face_voisins(fac,1);
300 double vol1=volumes(elem1);
301 double vol2=volumes(elem2);
302 double voltot=vol1+vol2;
303 for (comp=0; comp<ncomp_ch_transporte; comp++)
307 double grad1=deriv_seconde_de_gradient_elem(elem1, comp, i, j);
308 double grad2=deriv_seconde_de_gradient_elem(elem2, comp, i, j);
309 deriv_seconde_de_gradient(fac, comp, i, j) = (vol1*grad1 + vol2*grad2)/voltot;
315 for (fac=0; fac<nb_faces; fac++)
320 double val2 = deriv_seconde_de_gradient(fac,0,1,1)*deriv_seconde_de_gradient(fac,0,1,1);
321 double val3 = deriv_seconde_de_gradient(fac,1,0,0)*deriv_seconde_de_gradient(fac,1,0,0);
327 double val2 = deriv_seconde_de_gradient(fac,1,0,0)+deriv_seconde_de_gradient(fac,2,0,0);
329 double val3 = deriv_seconde_de_gradient(fac,0,1,1)+deriv_seconde_de_gradient(fac,2,1,1);
331 double val4 = deriv_seconde_de_gradient(fac,0,2,2)+deriv_seconde_de_gradient(fac,1,2,2);
333 deriv = val2 + val3 + val4;
336 elem0 = face_voisins(fac,0);
337 elem1 = face_voisins(fac,1);
341 nuturb = visco_turb(elem0)*volumes(elem0)+visco_turb(elem1)*volumes(elem1);
342 nuturb /= volumes(elem0) + volumes(elem1);
344 visco=(tab_visco(elem0)+tab_visco(elem1))/2.;
348 nuturb = visco_turb(elem0);
350 visco=(tab_visco(elem0));
353 E(fac) = 2.*visco*deriv*nuturb;
virtual void creer_tableau_elements(Array_base &, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) const
creation d'un tableau parallele de valeurs aux elements.
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 face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.