131 const IntTab& face_voisins = domaine_VDF.
face_voisins();
132 const IntTab& elem_faces = domaine_VDF.
elem_faces();
133 const DoubleTab& xp = domaine_VDF.
xp();
135 DoubleTab& vorticite = la_vorticite_->valeurs();
137 la_vorticite_->mettre_a_jour(vitesse.
temps());
140 int elx0, elx1, ely0, ely1, elz0, elz1;
141 double norme, norme_moyen, prod, angle;
142 DoubleTrav vorti_moyen(3);
148 static double kappa = K_DEF;
149 static double a = 23. * M_PI / 180.;
150 static double b = -0.4;
151 static double borne_y;
157 Cerr <<
"Problem with the input data of the sous_maille_selectif_mod model." << finl;
158 Cerr <<
"A necessary parameter : THI or Canal has not been specified." << finl;
164 Cerr <<
"WARNING!!! WARNING!!! Modele_turbulence_hyd_LES_selectif_mod_VDF" << finl;
165 Cerr <<
"A 4 points formulation is used." << finl;
166 Cerr <<
"Your planes are orthogonal to the direction : " <<
dir3_ << finl;
167 Cerr <<
"while the given direction for the walls is :" <<
dir_par_ << finl;
168 Cerr <<
"Check that you really wish these directions to be different ..." << finl;
169 Cerr <<
"WARNING!!! WARNING!!! dans Modele_turbulence_hyd_LES_selectif_mod_VDF" << finl;
172 for (num_elem = 0; num_elem < nb_poly; num_elem++)
184 y_elem = 2. *
demi_h_ - y_elem;
187 if (y_elem < borne_y)
196 rapport = lm / (2. * dy);
201 else if ((rapport >= 1.) && (rapport < 10.))
202 angle = a * pow(rapport, b);
204 angle = 9. * M_PI / 180.;
206 Sin2Angl = sin(angle);
207 Sin2Angl *= Sin2Angl;
209 elx0 = face_voisins(elem_faces(num_elem, 0), 0);
210 elx1 = face_voisins(elem_faces(num_elem, 3), 1);
211 ely0 = face_voisins(elem_faces(num_elem, 1), 0);
212 ely1 = face_voisins(elem_faces(num_elem, 4), 1);
213 elz0 = face_voisins(elem_faces(num_elem, 2), 0);
214 elz1 = face_voisins(elem_faces(num_elem, 5), 1);
216 double dx0 = 0., dx1 = 0., dy0 = 0., dy1 = 0., dz0 = 0., dz1 = 0.;
218 for (i = 0; i < 3; i++)
234 if (std::fabs(dx0) > DMINFLOAT)
235 dx0 = 1. / sqrt(dx0);
236 if (std::fabs(dx1) > DMINFLOAT)
237 dx1 = 1. / sqrt(dx1);
238 if (std::fabs(dy0) > DMINFLOAT)
239 dy0 = 1. / sqrt(dy0);
240 if (std::fabs(dy1) > DMINFLOAT)
241 dy1 = 1. / sqrt(dy1);
242 if (std::fabs(dz0) > DMINFLOAT)
243 dz0 = 1. / sqrt(dz0);
244 if (std::fabs(dz1) > DMINFLOAT)
245 dz1 = 1. / sqrt(dz1);
247 if ((elx0 != -1) && (elx1 != -1) && (ely0 != -1) && (ely1 != -1) && (elz0 != -1) && (elz1 != -1))
250 for (
int k = 0; k < 3; k++)
251 vorti_moyen(k) = (dx0 * vorticite(elx0, k) + dx1 * vorticite(elx1, k) + dy0 * vorticite(ely0, k) + dy1 * vorticite(ely1, k) + dz0 * vorticite(elz0, k) + dz1 * vorticite(elz1, k))
252 / (dx0 + dx1 + dy0 + dy1 + dz0 + dz1);
254 else if ((elx0 != -1) && (elx1 != -1) && (ely0 != -1) && (ely1 != -1))
256 for (
int k = 0; k < 3; k++)
257 vorti_moyen(k) = (dx0 * vorticite(elx0, k) + dx1 * vorticite(elx1, k) + dy0 * vorticite(ely0, k) + dy1 * vorticite(ely1, k)) / (dx0 + dx1 + dy0 + dy1);
259 else if ((elx0 != -1) && (elx1 != -1) && (elz0 != -1) && (elz1 != -1))
261 for (
int k = 0; k < 3; k++)
262 vorti_moyen(k) = (dx0 * vorticite(elx0, k) + dx1 * vorticite(elx1, k) + dz0 * vorticite(elz0, k) + dz1 * vorticite(elz1, k)) / (dx0 + dx1 + dz0 + dz1);
264 else if ((ely0 != -1) && (ely1 != -1) && (elz0 != -1) && (elz1 != -1))
266 for (
int k = 0; k < 3; k++)
267 vorti_moyen(k) = (dy0 * vorticite(ely0, k) + dy1 * vorticite(ely1, k) + dz0 * vorticite(elz0, k) + dz1 * vorticite(elz1, k)) / (dy0 + dy1 + dz0 + dz1);
269 else if ((elx0 != -1) && (elx1 != -1))
271 for (
int k = 0; k < 3; k++)
272 vorti_moyen(k) = (dx0 * vorticite(elx0, k) + dx1 * vorticite(elx1, k)) / (dx0 + dx1);
274 else if ((ely0 != -1) && (ely1 != -1))
276 for (
int k = 0; k < 3; k++)
277 vorti_moyen(k) = (dy0 * vorticite(ely0, k) + dy1 * vorticite(ely1, k)) / (dy0 + dy1);
279 else if ((elz0 != -1) && (elz1 != -1))
281 for (
int k = 0; k < 3; k++)
282 vorti_moyen(k) = (dz0 * vorticite(elz0, k) + dz1 * vorticite(elz1, k)) / (dz0 + dz1);
287 for (
int k = 0; k < 3; k++)
296 for (k = 0; k < 3; k++)
297 norme += carre(vorticite(num_elem, k));
300 for (k = 0; k < 3; k++)
301 norme_moyen += carre(vorti_moyen(k));
303 if ((norme > 1.e-10) && (norme_moyen > 1.e-10))
305 prod = carre(vorti_moyen(1) * vorticite(num_elem, 2) - vorti_moyen(2) * vorticite(num_elem, 1)) + carre(vorti_moyen(2) * vorticite(num_elem, 0) - vorti_moyen(0) * vorticite(num_elem, 2))
306 + carre(vorti_moyen(0) * vorticite(num_elem, 1) - vorti_moyen(1) * vorticite(num_elem, 0));
307 prod /= (norme * norme_moyen);
309 if (prod <= Sin2Angl)
317 F2_.echange_espace_virtuel();
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
double xp(int num_elem, int k) const
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.