48 const DoubleVect& volumes_entrelaces_Cl = ref_cast(
Domaine_Cl_VEF,le_dom_Cl.valeur()).volumes_entrelaces_Cl();
62 elem1 = face_voisins(face, 0);
64 elem1 = face_voisins(face, 1);
66 for (comp1 = 0; comp1 <
dimension; comp1++)
67 grad(face, comp1) = diff * face_normales(face, comp1);
72 for (
int n_bord = 0; n_bord < dom.
nb_front_Cl(); n_bord++)
74 const Cond_lim& la_cl = le_dom_Cl->les_conditions_limites(n_bord);
80 int num2 = num1 + le_bord.
nb_faces();
81 for (face = num1; face < num2; face++)
83 elem1 = face_voisins(face, 0);
84 elem2 = face_voisins(face, 1);
85 diff = inco[elem2] - inco[elem1];
86 for (
int comp2 = 0; comp2 <
dimension; comp2++)
87 grad(face, comp2) = diff * face_normales(face, comp2);
96 elem1 = face_voisins(face, 0);
97 elem2 = face_voisins(face, 1);
98 diff = inco[elem2] - inco[elem1];
99 for (
int comp = 0; comp <
dimension; comp++)
100 grad(face, comp) = diff * face_normales(face, comp);
104 for (face = 0; face < premiere_fac_std; face++)
106 if (volumes_entrelaces_Cl(face) != 0)
107 for (
int comp = 0; comp <
dimension; comp++)
108 grad(face, comp) /= volumes_entrelaces_Cl(face);
110 for (
int comp = 0; comp <
dimension; comp++)
111 grad(face, comp) = 0.;
113 for (face = premiere_fac_std; face < dom.
nb_faces(); face++)
115 for (
int comp = 0; comp <
dimension; comp++)
116 grad(face, comp) /= volumes_entrelaces(face);
126 int s0, s1, elem0, elem1;
129 const DoubleTab& xp = dom.
xp();
131 DoubleTab incosom(nb_som);
132 DoubleTab volsom(nb_som);
137 for (elem = 0; elem < dom.
nb_elem(); elem++)
141 for (som = 0; som < nse; som++)
143 nsom = som_elem(elem, som);
144 incosom(nsom) += v * inc;
148 for (nsom = 0; nsom < nb_som; nsom++)
150 incosom(nsom) /= volsom(nsom);
152 double xs0, ys0, xs1, ys1, xe0, ye0, xe1, ye1, ds, de;
154 for (
int n_bord = 0; n_bord < dom.
nb_front_Cl(); n_bord++)
156 const Cond_lim& la_cl = le_dom_Cl->les_conditions_limites(n_bord);
160 int num2 = num1 + le_bord.
nb_faces();
161 for (face = num1; face < num2; face++)
163 s0 = face_sommets(face, 0);
164 s1 = face_sommets(face, 1);
165 xs0 = coord_sommets(s0, 0);
166 ys0 = coord_sommets(s0, 1);
167 xs1 = coord_sommets(s1, 0);
168 ys1 = coord_sommets(s1, 1);
169 v = volumes_entrelaces(face);
170 ds = (incosom(s1) - incosom(s0)) / ((xs1 - xs0) * (xs1 - xs0) + (ys1 - ys0) * (ys1 - ys0));
171 grad(face, 0) = v * (ds * (xs1 - xs0));
172 grad(face, 1) = v * (ds * (ys1 - ys0));
179 s0 = face_sommets(face, 0);
180 s1 = face_sommets(face, 1);
181 elem0 = face_voisins(face, 0);
182 elem1 = face_voisins(face, 1);
183 xs0 = coord_sommets(s0, 0);
184 ys0 = coord_sommets(s0, 1);
185 xs1 = coord_sommets(s1, 0);
186 ys1 = coord_sommets(s1, 1);
191 v = volumes_entrelaces(face);
192 ds = (incosom(s1) - incosom(s0)) / ((xs1 - xs0) * (xs1 - xs0) + (ys1 - ys0) * (ys1 - ys0));
193 de = (inco(elem1) - inco(elem0)) / ((xe1 - xe0) * (xe1 - xe0) + (ye1 - ye0) * (ye1 - ye0));
194 grad(face, 0) = v * (ds * (xs1 - xs0) + de * (xe1 - xe0));
195 grad(face, 1) = v * (ds * (ys1 - ys0) + de * (ye1 - ye0));
199 Cerr <<
"ATTENTION : gradient de l'inco mal calcule en 3D" << finl;
int nb_som_elem() const
Renvoie le nombre de sommets des elements geometriques constituants le domaine.
int_t nb_som() const
Renvoie le nombre de sommets du domaine.
int nb_faces() const
renvoie le nombre global de faces.
virtual double face_normales(int face, int comp) const
int face_sommets(int i, int j) const
renvoie le numero du ieme sommet de la face num_face.
double xp(int num_elem, int k) const
int premiere_face_int() const
une face est interne ssi elle separe deux elements.
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.