92 DoubleTrav val_flux(nb_faces, 1);
94 CDoubleTabView val_flux0 = ch_front_source_->valeurs().view_ro();
95 DoubleTabView view_val_flux = val_flux.
view_rw();
96 const int val_flux0_line_sz = ch_front_source_->valeurs().line_size();
99 CDoubleArrView rho =
static_cast<const DoubleVect&
>(fluide.
masse_volumique().valeurs()).view_ro();
102 DoubleArrView view_resu = resu.view_rw();
107 bool ok_post_src_ch = post_src_ch ?
true:
false;
108 DoubleArrView valeurs;
109 if (ok_post_src_ch) valeurs =
static_cast<DoubleVect&
>((*post_src_ch).valeurs()).view_wo();
119 for (
int n_bord = 0; n_bord < domaine_cl_dis_->nb_cond_lim(); n_bord++)
121 const Cond_lim& la_cl = domaine_cl_dis_->les_conditions_limites(n_bord);
130 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(ndeb, nfin), KOKKOS_LAMBDA (
const int num_face)
132 for (
int ncomp = 0; ncomp < val_flux0_line_sz; ncomp++)
133 view_val_flux(num_face, 0) += is_uniforme ? val_flux0(0, ncomp) : val_flux0(num_face - ndeb, ncomp);
135 end_gpu_timer(__KERNEL_NAME__);
140 for (
int n_bord = 0; n_bord < domaine_cl_dis_->nb_cond_lim(); n_bord++)
142 const Cond_lim& la_cl = domaine_cl_dis_->les_conditions_limites(n_bord);
148 CIntTabView elem_faces = zvf.
elem_faces().view_ro();
149 CDoubleArrView Y =
static_cast<const ArrOfDouble&
>(eqn.
inconnue().valeurs()).view_ro();
150 int elem_faces_line_size = zvf.
elem_faces().line_size();
152 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(ndeb, nfin), KOKKOS_LAMBDA (
const int num_face)
154 const int elem1 = face_voisins(num_face, 0), elem2 = face_voisins(num_face, 1);
155 int elem = elem1 == -1 ? elem2 : elem1;
156 const double surface_elem = face_surfaces(num_face);
167 for (
int j = 0; j < elem_faces_line_size; j++)
168 YY += Y(elem_faces(elem, j));
170 YY /= elem_faces_line_size;
171 double srcmass = -(YY * view_val_flux(num_face, 0) * surface_elem) / rho(num_face);
173 srcmass /= volumes_entrelaces(num_face);
174 view_resu(num_face) += srcmass;
178 valeurs(elem) = srcmass;
180 end_gpu_timer(__KERNEL_NAME__);
197 const int nb_faces = zp1b.
nb_faces();
198 const int val_flux0_line_sz = ch_front_source_->valeurs().line_size();
199 DoubleTrav tab_val_flux(nb_faces, 1);
201 CDoubleTabView val_flux0 = ch_front_source_->valeurs().view_ro();
202 DoubleTabView val_flux = tab_val_flux.
view_rw();
212 for (
int n_bord = 0; n_bord < domaine_cl_dis_->nb_cond_lim(); n_bord++)
214 const Cond_lim& la_cl = domaine_cl_dis_->les_conditions_limites(n_bord);
223 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(ndeb, nfin), KOKKOS_LAMBDA (
const int num_face)
225 for (
int ncomp = 0; ncomp < val_flux0_line_sz; ncomp++)
226 val_flux(num_face, 0) += is_uniforme ? val_flux0(0, ncomp) : val_flux0(num_face - ndeb, ncomp);
228 end_gpu_timer(__KERNEL_NAME__);
240 CDoubleArrView face_surfaces = zp1b.
face_surfaces().view_ro();
241 CDoubleArrView volumes = zp1b.
volumes().view_ro();
243 CIntTabView face_voisins = zp1b.
face_voisins().view_ro();
244 CIntTabView face_sommets = zp1b.
face_sommets().view_ro();
245 DoubleArrView flux_faces =
static_cast<DoubleVect&
>(tab_flux_faces).view_rw();
247 for (
int n_bord = 0; n_bord < domaine_cl_dis_->nb_cond_lim(); n_bord++)
249 const Cond_lim& la_cl = domaine_cl_dis_->les_conditions_limites(n_bord);
256 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(ndeb, nfin), KOKKOS_LAMBDA (
const int num_face)
258 const int elem1 = face_voisins(num_face, 0), elem2 = face_voisins(num_face, 1);
259 int elem = elem1 == -1 ? elem2 : elem1;
260 const double surf = face_surfaces(num_face);
261 flux_faces(num_face) = val_flux(num_face, 0) * surf / volumes(elem);
263 end_gpu_timer(__KERNEL_NAME__);
267 DoubleTrav tab_flux_som(nb_som_tot), tab_volume_int_som(nb_som_tot);
268 tab_volume_int_som = 0.;
273 DoubleArrView volume_int_som =
static_cast<DoubleVect&
>(tab_volume_int_som).view_rw();
274 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), nb_faces_tot, KOKKOS_LAMBDA (
const int face)
276 for (
int som = 0; som < nsf; som++)
278 int som_glob = renum_som_perio(face_sommets(face, som));
279 Kokkos::atomic_add(&volume_int_som(som_glob), volumes_entrelaces(face));
282 end_gpu_timer(__KERNEL_NAME__);
286 DoubleArrView flux_som =
static_cast<DoubleVect&
>(tab_flux_som).view_rw();
287 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), nb_faces_tot, KOKKOS_LAMBDA (
const int face)
289 for (
int som = 0; som < nsf; som++)
291 int som_glob = renum_som_perio(face_sommets(face, som));
292 double pond = volumes_entrelaces(face) / volume_int_som(som_glob);
293 Kokkos::atomic_add(&flux_som(som_glob), flux_faces(face) * pond);
296 end_gpu_timer(__KERNEL_NAME__);
298 bool ok_post_src_ch = post_src_ch ?
true:
false;
301 int nb_case = nb_elem_tot * p_has_elem;
302 DoubleArrView valeurs;
303 if (ok_post_src_ch) valeurs =
static_cast<DoubleVect&
>((*post_src_ch).valeurs()).view_wo();
304 CIntTabView elem_faces = zp1b.
elem_faces().view_ro();
305 DoubleArrView resu = tab_resu.view_rw();
306 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), nb_case, KOKKOS_LAMBDA (
const int elem)
309 for (
int face = 0; face < nfe; face++)
310 fll += flux_faces(elem_faces(elem, face));
314 if (ok_post_src_ch) valeurs(elem) = fll;
316 end_gpu_timer(__KERNEL_NAME__);
321 nb_case = nb_som_tot * p_has_som;
323 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), nb_case, KOKKOS_LAMBDA (
const int som)
325 resu(decal + som) -= flux_som(som);
327 end_gpu_timer(__KERNEL_NAME__);
int nb_faces_elem(int=0) const
Renvoie le nombre de face de type i des elements geometriques constituants le domaine.
int_t nb_som_tot() const
Renvoie le nombre total de sommets du domaine i.e. le nombre de sommets reels et virtuels sur le proc...
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
Domaine_dis_base & domaine_dis()
Renvoie une reference sur le domaine discretise associe aux conditions aux limites.
virtual const DoubleVect & face_surfaces() const
int nb_faces() const
renvoie le nombre global de faces.
int nb_faces_tot() const
renvoie le nombre total de faces.
int face_sommets(int i, int j) const
renvoie le numero du ieme sommet de la face num_face.
int nb_som_face() const
renvoie le nombre de sommets par 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.