73 const IntTab& les_elems = domaine.les_elems();
74 const DoubleTab& nodes = domaine.les_sommets();
75 const int nb_nodes_per_cell = les_elems.
dimension(1);
84 for (
int ic = 0; ic < cells.
size_array(); ic++)
90 position[k] = positions(ic, k);
92 if (nb_nodes_per_cell == 4)
97 for (
int i = 0; i < 4; i++)
98 cell3D(0, 2 * i) = les_elems(cell, i);
99 calcul_plan_hexa(coeff_plan, d, 0, cell3D, nodes, 0);
102 A += coeff_plan[i] * position[i];
103 if (std::fabs(A) > std::fabs(d) * 1e-5)
105 Cerr <<
"Error point not in the plane " << finl;
111 for (
int dir = 0; dir < 2; dir++)
114 calcul_plan_quadra(coeff_plan, d, cell, les_elems, nodes, dir);
117 A += coeff_plan[i] * position[i];
118 calcul_plan_quadra(coeff_plan, d, cell, les_elems, nodes, dir + 2);
121 B += coeff_plan[i] * position[i];
122 assert(inf_ou_egal((A * B), 0, 1e-10));
123 coord_bar[dir] = A / (A - B);
129 for (
int dir = 0; dir < 3; dir++)
132 calcul_plan_hexa(coeff_plan, d, cell, les_elems, nodes, dir);
134 for (
int i = 0; i < 3; i++)
135 A += coeff_plan[i] * position[i];
136 calcul_plan_hexa(coeff_plan, d, cell, les_elems, nodes, dir + 3);
138 for (
int i = 0; i < 3; i++)
139 B += coeff_plan[i] * position[i];
140 assert(inf_ou_egal((A * B), 0, 1e-10));
141 coord_bar[dir] = A / (A - B);
144 ArrOfDouble val(nb_nodes_per_cell);
145 int nb_dim = resu.
nb_dim();
147 for (
int k = 0; k < nb_components; k++)
151 for (
int j = 0; j < nb_nodes_per_cell; j++)
153 int node = les_elems(cell, j);
154 val[j] = values(node, ncomp);
161 for (
int j = 0; j < nb_nodes_per_cell; j++)
163 int node = les_elems(cell, j);
164 val[j] = values(node);
169 assert(values.
nb_dim() == 2);
170 for (
int j = 0; j < nb_nodes_per_cell; j++)
172 int node = les_elems(cell, j);
173 val[j] = values(node, k);
178 if (nb_nodes_per_cell == 4)
180 const double i = coord_bar[0];
181 const double j = coord_bar[1];
182 double unmi = 1. - i;
183 double unmj = 1. - j;
185 res = unmj * (unmi * val[0] + i * val[1]) + j * (unmi * val[2] + i * val[3]);
190 const double i = coord_bar[0];
191 const double j = coord_bar[1];
192 const double kk = coord_bar[2];
193 double unmi = 1. - i;
194 double unmj = 1. - j;
195 double unmk = 1. - kk;
196 res = unmk * (unmj * (unmi * val[0] + i * val[1]) + j * (unmi * val[2] + i * val[3])) + kk * (unmj * (unmi * val[4] + i * val[5]) + j * (unmi * val[6] + i * val[7]));
int nb_som_elem() const
Renvoie le nombre de sommets des elements geometriques constituants le domaine.
DoubleTab_t & les_sommets()