210 const Domaine& z = le_dom_VEF.
domaine();
211 const Domaine& dom = z;
216 const IntTab& elem_faces = le_dom_VEF.
elem_faces();
217 const DoubleTab& xv = le_dom_VEF.
xv();
218 const IntTab& KEL = elemvef.
KEL();
222 int idirichlet = -1, n1 = -1, n2 = -1, n3 = -1;
230 IntVect num_som(nsom);
239 for (
int elem = 0; elem < nb_elem; elem++)
242 if (rang_elem(elem) != -1)
244 num_elem = rang_elem(elem);
247 for (isom = 0; isom < nsom; isom++)
248 num_som[isom] = les_Polys(elem, isom);
251 for (isom = 0; isom < nsom; isom++)
252 for (ncomp = 0; ncomp <
dimension; ncomp++)
253 x(isom, ncomp) = les_coords(num_som[isom], ncomp);
263 for (fa7 = 0; fa7 < nfa7; fa7++)
268 int num1 = elem_faces(elem, KEL(0, fa7));
269 int num2 = elem_faces(elem, KEL(1, fa7));
270 for (
int dir = 0; dir <
dimension; dir++)
272 double coord_centre_fa7 = xg(dir);
274 for (
int num_som_fa7 = 0; num_som_fa7 < nb_som_facette - 1; num_som_fa7++)
276 int isom_loc = KEL(num_som_fa7 + 2, fa7);
277 int isom_glob = les_Polys(elem, isom_loc);
278 coord_centre_fa7 += les_coords(isom_glob, dir);
280 coord_centre_fa7 /= nb_som_facette;
364 DoubleTab& ch_tab = ch.
valeurs(temps);
374 int nfin = ndeb + le_bord.
nb_faces();
380 CIntArrView face_associee = la_cl_perio.
face_associee().view_ro();
383 DoubleArrView tab =
static_cast<ArrOfDouble&
>(ch_tab).view_wo();
384 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(ndeb, nfin), KOKKOS_LAMBDA(
const int num_face)
386 int voisine = face_associee(num_face - ndeb) + ndeb;
387 if (tab(num_face) != tab(voisine))
389 double moy = 0.5 * (tab(num_face) + tab(voisine));
397 DoubleTabView tab = ch_tab.
view_wo();
398 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(ndeb, nfin), KOKKOS_LAMBDA(
const int num_face)
400 int voisine = face_associee(num_face - ndeb) + ndeb;
401 for (
int ncomp = 0; ncomp < nb_comp; ncomp++)
402 if (tab(num_face, ncomp) != tab(voisine, ncomp))
404 double moy = 0.5 * (tab(num_face, ncomp) + tab(voisine, ncomp));
405 tab(num_face, ncomp) = moy;
406 tab(voisine, ncomp) = moy;
410 end_gpu_timer(__KERNEL_NAME__);
417 DoubleTabView tab = ch_tab.
view_rw();
418 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(ndeb, nfin), KOKKOS_LAMBDA(
const int num_face)
420 double surf = 0, flux = 0;
421 for (
int ncomp = 0; ncomp < nb_comp; ncomp++)
423 double face_n = face_normales(num_face, ncomp);
424 flux += tab(num_face, ncomp) * face_n;
425 surf += face_n * face_n;
428 if (std::fabs(surf) >= DMINFLOAT)
430 for (
int ncomp = 0; ncomp < nb_comp; ncomp++)
431 tab(num_face, ncomp) -= flux * face_normales(num_face, ncomp);
433 end_gpu_timer(__KERNEL_NAME__);
442 DoubleArrView tab =
static_cast<ArrOfDouble&
>(ch_tab).view_wo();
443 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(ndeb, nfin),
444 KOKKOS_LAMBDA(
const int num_face)
446 tab(num_face) = val_imp(num_face - ndeb, 0);
451 DoubleTabView tab = ch_tab.
view_wo();
452 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(ndeb, nfin), KOKKOS_LAMBDA(
const int num_face)
454 for (
int ncomp = 0; ncomp < nb_comp; ncomp++)
455 tab(num_face, ncomp) = val_imp(num_face - ndeb, ncomp);
458 end_gpu_timer(__KERNEL_NAME__);
466 DoubleArrView tab =
static_cast<ArrOfDouble&
>(ch_tab).view_wo();
467 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(ndeb, nfin),
468 KOKKOS_LAMBDA(
const int num_face)
470 tab(num_face) = val_imp(num_face - ndeb, 0);
475 DoubleTabView tab = ch_tab.
view_wo();
476 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(ndeb, nfin), KOKKOS_LAMBDA(
const int num_face)
478 for (
int ncomp = 0; ncomp < nb_comp; ncomp++)
479 tab(num_face, ncomp) = val_imp(num_face - ndeb, ncomp);
482 end_gpu_timer(__KERNEL_NAME__);
488 DoubleArrView tab =
static_cast<ArrOfDouble&
>(ch_tab).view_wo();
489 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(ndeb, nfin),
490 KOKKOS_LAMBDA(
const int num_face)
497 DoubleTabView tab = ch_tab.
view_wo();
498 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(ndeb, nfin), KOKKOS_LAMBDA(
const int num_face)
500 for (
int ncomp = 0; ncomp < nb_comp; ncomp++)
502 tab(num_face, 0) = 0;
503 tab(num_face, 1) = 0;
507 end_gpu_timer(__KERNEL_NAME__);
513 DoubleArrView tab =
static_cast<ArrOfDouble&
>(ch_tab).view_wo();
514 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(ndeb, nfin),
515 KOKKOS_LAMBDA(
const int num_face)
522 DoubleTabView tab = ch_tab.
view_wo();
523 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(ndeb, nfin), KOKKOS_LAMBDA(
const int num_face)
525 for (
int ncomp = 0; ncomp < nb_comp; ncomp++)
526 tab(num_face, ncomp) = 0;
529 end_gpu_timer(__KERNEL_NAME__);
537 Cerr <<
"Cas non prevu dans Domaine_Cl_VEF::imposer_cond_lim." << finl;
543 DoubleTabView tab = ch_tab.
view_wo();
544 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(ndeb, nfin), KOKKOS_LAMBDA(
const int num_face)
546 double surf = 0, flux = 0;
547 for (
int ncomp = 0; ncomp < nb_comp; ncomp++)
549 double face_n = face_normales(num_face, ncomp);
550 flux += val_imp(num_face - ndeb, ncomp) * face_n;
551 surf += face_n * face_n;
554 if (std::fabs(surf) >= DMINFLOAT)
556 for (
int ncomp = 0; ncomp < nb_comp; ncomp++)
557 tab(num_face, ncomp) = val_imp(num_face - ndeb, ncomp) -
558 flux * face_normales(num_face, ncomp);
560 end_gpu_timer(__KERNEL_NAME__);
567 Cerr <<
"Le type de OWN_PTR(Champ_Inc_base) " << ch.
que_suis_je() <<
" n'est pas prevu en VEF\n" << finl;
581 DoubleTrav tab_surf_loc(nbsom_tot);
586 for (
int i = 0; i < nb_cond_lims; i++)
592 int nbsf =
domaine_vef.face_sommets().dimension(1);
594 CIntTabView faces =
domaine_vef.face_sommets().view_ro();
595 CIntArrView num_face = le_bord.
num_face().view_ro();
596 DoubleArrView pression =
static_cast<DoubleVect&
>(tab_pression).view_rw();
597 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__),
598 Kokkos::RangePolicy<>(0, num2), KOKKOS_LAMBDA(
601 int face = num_face(ind_face);
602 for (
int som = 0; som < nbsf; som++)
604 int som_glob = faces(face, som);
605 Kokkos::atomic_store(&pression(nps + som_glob), 0);
608 end_gpu_timer(__KERNEL_NAME__);
613 for (
int i = 0; i < nb_cond_lims; i++)
620 int nbsf =
domaine_vef.face_sommets().dimension(1);
622 CIntArrView num_face = le_bord.
num_face().view_ro();
623 CIntTabView faces =
domaine_vef.face_sommets().view_ro();
624 CDoubleArrView flux_impose =
static_cast<const DoubleVect&
>(la_sortie_libre.
flux_impose(
true)).view_ro();
625 CDoubleArrView face_surfaces =
domaine_vef.face_surfaces().view_ro();
626 DoubleArrView surf_loc =
static_cast<DoubleVect&
>(tab_surf_loc).view_rw();
627 DoubleArrView pression =
static_cast<DoubleVect&
>(tab_pression).view_rw();
628 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__),
629 Kokkos::RangePolicy<>(0, num2), KOKKOS_LAMBDA(
632 int face = num_face(ind_face);
633 double P_imp = flux_impose(ind_face);
634 double face_surf = face_surfaces(face);
635 for (
int som = 0; som < nbsf; som++)
637 int som_glob = faces(face, som);
638 Kokkos::atomic_add(&pression(nps + som_glob), P_imp * face_surf);
639 Kokkos::atomic_add(&surf_loc[som_glob], face_surf);
642 end_gpu_timer(__KERNEL_NAME__);
646 for (
int i = 0; i < nb_cond_lims; i++)
651 DoubleArrView surf_loc =
static_cast<DoubleVect&
>(tab_surf_loc).view_rw();
652 DoubleArrView pression =
static_cast<DoubleVect&
>(tab_pression).view_rw();
653 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__),
654 Kokkos::RangePolicy<>(0, nbsom_tot), KOKKOS_LAMBDA(
657 if (surf_loc[som_glob] > 0)
659 pression(nps + som_glob) /= surf_loc[som_glob];
660 surf_loc[som_glob] = 0;
663 end_gpu_timer(__KERNEL_NAME__);
667 Debog::verifier(
"pression dans Domaine_Cl_VEF::imposer_cond_lim", tab_pression);