48 assert (grad_vdf_faces_);
53 const DoubleTab& xp = domaine.xp(), &xv = domaine.xv();
54 const DoubleTab& n_f = domaine.face_normales(), &vf_dir = domaine.volumes_entrelaces_dir();
55 const DoubleVect& vf = domaine.volumes_entrelaces(), &fs = domaine.face_surfaces(), &ve = domaine.volumes();
56 const IntTab& f_e = domaine.face_voisins(), &e_f = domaine.elem_faces();
57 const int N = alpha.
line_size(), nf_tot = domaine.nb_faces_tot(), D =
dimension, ne_tot = domaine.nb_elem_tot(), nf = domaine.nb_faces();
60 DoubleTrav grad_f_a(nf_tot, N);
61 grad_vdf_faces_->calculer(alpha, grad_f_a);
63 DoubleTrav gradAlphaElem(ne_tot, D, N);
65 for (
int n = 0; n < N; n++)
66 for (
int e = 0; e < ne_tot; e++)
67 for (
int d = 0; d < D; d++)
68 for (
int j = 0 ; j < e_f.dimension(1); j++)
70 const int f = e_f(e, j);
74 gradAlphaElem(e, d, n) += (e == f_e(f, 0) ? 1 : -1) * fs(f) * (xv(f, d) - xp(e, d)) / ve(e) * grad_f_a(f, n);
78 double scalGradElem = 0.;
79 for (
int n = 0; n < N; n++)
80 for (
int f = 0; f < nf; f++)
82 for (
int c = 0; c < 2; c++)
83 for (
int d = 0; d < D; d++)
85 const int e = f_e(f, c);
89 gradAlphaFaces(f, d, n) += vf_dir(f, c) / vf(f) * gradAlphaElem(e, d, n);
93 for (
int d = 0; d < D; d++)
94 scalGradElem += gradAlphaFaces(f, d, n) * n_f(f, d) / fs(f);
96 for (
int d = 0; d < D; d++)
97 gradAlphaFaces(f, d, n) += (grad_f_a(f, n) - scalGradElem) * n_f(f, d) / fs(f);
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.