155 int face, nb_compo_ = cha.
nb_comp();
160 if (init == 0 && D == 2)
162 if (init == 0 && D == 3)
167 Cerr <<
"Erreur TRUST dans Champ_Q1NC_implementation::valeur_aux_elems()\n";
168 Cerr <<
"Le DoubleTab val a plus de 2 entrees\n";
173 const DoubleTab& ch = cha.
valeurs();
175 for (
int rang_poly = 0; rang_poly < les_polys.
size(); rang_poly++)
177 le_poly = les_polys(rang_poly);
179 for (
int ncomp = 0; ncomp < nb_compo_; ncomp++)
180 val(rang_poly, ncomp) = 0;
183 for (
int ncomp = 0; ncomp < nb_compo_; ncomp++)
185 val(rang_poly, ncomp) = 0;
186 xs = positions(rang_poly, 0);
187 ys = positions(rang_poly, 1);
188 zs = (D == 3) ? positions(rang_poly, 2) : 0.;
189 for (
int i = 0; i < 2 * D; i++)
192 val(rang_poly, ncomp) += ch(face, ncomp)
210 const DoubleTab& ch = cha.
valeurs();
213 if (init == 0 && D == 2)
215 if (init == 0 && D == 3)
218 for (
int rang_poly = 0; rang_poly < les_polys.
size(); rang_poly++)
220 le_poly = les_polys(rang_poly);
227 xs = positions(rang_poly, 0);
228 ys = positions(rang_poly, 1);
229 zs = (D == 3) ? positions(rang_poly, 2) : 0.;
230 for (
int i = 0; i < 2 * D; i++)
233 val(rang_poly) += ch(face, ncomp)
245 const Domaine& mon_dom = domaine_dis.
domaine();
249 IntVect compteur(nb_som);
250 int ncomp, num_elem, num_som, j;
255 for (num_elem = 0; num_elem < nb_elem_tot; num_elem++)
256 for (j = 0; j < nb_som_elem; j++)
261 position(k) = dom.
coord(num_som, k);
263 if (num_som < nb_som)
266 for (ncomp = 0; ncomp < nb_compo_; ncomp++)
274 for (num_som = 0; num_som < nb_som; num_som++)
275 for (ncomp = 0; ncomp < nb_compo_; ncomp++)
276 ch_som(num_som, ncomp) /= compteur[num_som];
353 const IntTab& elem_faces = domaine_VEF.
elem_faces();
354 const Domaine& dom = domaine_geom;
356 double lec0, lec1, alpha, beta;
357 int i, poly, som0, som1;
361 int Nb_noeud_elem = 4;
362 DoubleVect le_coord0(Nb_noeud_elem), le_coord1(Nb_noeud_elem);
363 for (poly = 0; poly < nb_elem_tot; poly++)
365 for (i = 0; i < Nb_noeud_elem; i++)
367 som0 = sommet_face(elem_faces(poly, i), 0);
368 som1 = sommet_face(elem_faces(poly, i), 1);
369 le_coord0(i) = 0.5 * (coords(som0, 0) + coords(som1, 0));
370 le_coord1(i) = 0.5 * (coords(som0, 1) + coords(som1, 1));
388 lec0 = carre(le_coord0(2)) + carre(le_coord0(0)) - 2. * le_coord0(2) * le_coord0(0);
389 lec1 = carre(le_coord1(2)) + carre(le_coord1(0)) - 2. * le_coord1(2) * le_coord1(0);
390 alpha = 2. / (lec0 + lec1);
391 lec0 = (le_coord0(2) - le_coord0(0)) * le_coord0(2);
392 lec1 = (le_coord1(2) - le_coord1(0)) * le_coord1(2);
393 beta = 1. - (lec0 + lec1) * alpha;
395 tab_param(poly, 0) = alpha * (le_coord0(2) - le_coord0(0));
396 tab_param(poly, 1) = alpha * (le_coord1(2) - le_coord1(0));
401 lec0 = carre(le_coord0(3)) + carre(le_coord0(1)) - 2. * le_coord0(3) * le_coord0(1);
402 lec1 = carre(le_coord1(3)) + carre(le_coord1(1)) - 2. * le_coord1(3) * le_coord1(1);
403 alpha = 2. / (lec0 + lec1);
404 lec0 = (le_coord0(3) - le_coord0(1)) * le_coord0(3);
405 lec1 = (le_coord1(3) - le_coord1(1)) * le_coord1(3);
406 beta = 1. - (lec0 + lec1) * alpha;
408 tab_param(poly, 3) = alpha * (le_coord0(3) - le_coord0(1));
409 tab_param(poly, 4) = alpha * (le_coord1(3) - le_coord1(1));
420 const IntTab& elem_faces = domaine_VEF.
elem_faces();
421 const Domaine& dom = domaine_geom;
423 double lec0, lec1, lec2;
426 int som0, som1, som2, som3;
430 int Nb_noeud_elem = 6;
431 DoubleVect le_coord0(Nb_noeud_elem), le_coord1(Nb_noeud_elem), le_coord2(Nb_noeud_elem);
432 for (poly = 0; poly < nb_elem_tot; poly++)
434 for (i = 0; i < Nb_noeud_elem; i++)
436 som0 = sommet_face(elem_faces(poly, i), 0);
437 som1 = sommet_face(elem_faces(poly, i), 1);
438 som2 = sommet_face(elem_faces(poly, i), 2);
439 som3 = sommet_face(elem_faces(poly, i), 3);
440 le_coord0(i) = 0.25 * (coords(som0, 0) + coords(som1, 0) + coords(som2, 0) + coords(som3, 0));
441 le_coord1(i) = 0.25 * (coords(som0, 1) + coords(som1, 1) + coords(som2, 1) + coords(som3, 1));
442 le_coord2(i) = 0.25 * (coords(som0, 2) + coords(som1, 2) + coords(som2, 2) + coords(som3, 2));
447 lec0 = carre(le_coord0(3)) + carre(le_coord0(0)) - 2. * le_coord0(3) * le_coord0(0);
448 lec1 = carre(le_coord1(3)) + carre(le_coord1(0)) - 2. * le_coord1(3) * le_coord1(0);
449 lec2 = carre(le_coord2(3)) + carre(le_coord2(0)) - 2. * le_coord2(3) * le_coord2(0);
450 alpha = 2. / (lec0 + lec1 + lec2);
451 lec0 = (le_coord0(3) - le_coord0(0)) * le_coord0(3);
452 lec1 = (le_coord1(3) - le_coord1(0)) * le_coord1(3);
453 lec2 = (le_coord2(3) - le_coord2(0)) * le_coord2(3);
454 beta = 1. - (lec0 + lec1 + lec2) * alpha;
456 tab_param(poly, 0) = alpha * (le_coord0(3) - le_coord0(0));
457 tab_param(poly, 1) = alpha * (le_coord1(3) - le_coord1(0));
458 tab_param(poly, 2) = alpha * (le_coord2(3) - le_coord2(0));
463 lec0 = carre(le_coord0(4)) + carre(le_coord0(1)) - 2. * le_coord0(4) * le_coord0(1);
464 lec1 = carre(le_coord1(4)) + carre(le_coord1(1)) - 2. * le_coord1(4) * le_coord1(1);
465 lec2 = carre(le_coord2(4)) + carre(le_coord2(1)) - 2. * le_coord2(4) * le_coord2(1);
466 alpha = 2. / (lec0 + lec1 + lec2);
467 lec0 = (le_coord0(4) - le_coord0(1)) * le_coord0(4);
468 lec1 = (le_coord1(4) - le_coord1(1)) * le_coord1(4);
469 lec2 = (le_coord2(4) - le_coord2(1)) * le_coord2(4);
470 beta = 1. - (lec0 + lec1 + lec2) * alpha;
472 tab_param(poly, 4) = alpha * (le_coord0(4) - le_coord0(1));
473 tab_param(poly, 5) = alpha * (le_coord1(4) - le_coord1(1));
474 tab_param(poly, 6) = alpha * (le_coord2(4) - le_coord2(1));
479 lec0 = carre(le_coord0(5)) + carre(le_coord0(2)) - 2. * le_coord0(5) * le_coord0(2);
480 lec1 = carre(le_coord1(5)) + carre(le_coord1(2)) - 2. * le_coord1(5) * le_coord1(2);
481 lec2 = carre(le_coord2(5)) + carre(le_coord2(2)) - 2. * le_coord2(5) * le_coord2(2);
482 alpha = 2. / (lec0 + lec1 + lec2);
483 lec0 = (le_coord0(5) - le_coord0(2)) * le_coord0(5);
484 lec1 = (le_coord1(5) - le_coord1(2)) * le_coord1(5);
485 lec2 = (le_coord2(5) - le_coord2(2)) * le_coord2(5);
486 beta = 1. - (lec0 + lec1 + lec2) * alpha;
488 tab_param(poly, 8) = alpha * (le_coord0(5) - le_coord0(2));
489 tab_param(poly, 9) = alpha * (le_coord1(5) - le_coord1(2));
490 tab_param(poly, 10) = alpha * (le_coord2(5) - le_coord2(2));
int nb_som_elem() const
Renvoie le nombre de sommets des elements geometriques constituants le domaine.
int_t nb_elem_tot() const
DoubleTab_t & les_sommets()
double coord(int_t i, int j) const
int_t nb_som() const
Renvoie le nombre de sommets du domaine.
int_t sommet_elem(int_t i, int j) const
Renvoie le numero (global) du j-ieme sommet du i-ieme element.
int nb_faces() const
renvoie le nombre global de faces.
double xv(int num_face, int k) const
int face_sommets(int i, int j) const
renvoie le numero du ieme sommet de la face num_face.
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.
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
const Domaine & domaine() const