44 const int dimension,
const double rho_m,
45 const DoubleTab& tab_rho, DoubleTab& resu)
const
47 const int nb_faces = le_dom->nb_faces(), premiere_face_interne = le_dom->premiere_face_int();
50 const IntTab& face_voisins = le_dom->face_voisins();
51 const DoubleTab& face_normales = le_dom->face_normales();
52 const DoubleTab& xp = le_dom->xp();
53 const DoubleTab& xv = le_dom->xv();
54 ToDo_Kokkos(
"critical in VEF P0");
56 for (
int num_cl=0 ; num_cl<le_dom->nb_front_Cl() ; num_cl++)
58 const Cond_lim& la_cl = le_dom_Cl->les_conditions_limites(num_cl);
63 for (
int face=ndeb ; face<nfin ; face++)
65 int elem1 = face_voisins(face,0);
66 if (elem1==-1) elem1 = face_voisins(face,1);
70 double delta_coord = (xv(face,comp) - xp(elem1,comp));
71 for (
int i=0 ; i<dimension ; i++)
72 resu(face,i) += (tab_rho(face)-rho_m)*delta_coord*face_normales(face,i)*g(comp);
78 for (
int face=premiere_face_interne ; face<nb_faces; face++)
80 int elem1 = face_voisins(face,0), elem2 = face_voisins(face,1);
81 for (
int comp=0 ; comp<dimension ; comp++)
83 double delta_coord = (xp(elem2,comp) - xp(elem1,comp));
84 for (
int i=0 ; i<dimension ; i++)
85 resu(face,i) += (tab_rho(face)-rho_m)*delta_coord*face_normales(face,i)*g(comp);
91 for (
int face=premiere_face_interne ; face<nb_faces; face++)
93 int elem1 = face_voisins(face,0), elem2 = face_voisins(face,1);
94 for (
int comp=0 ; comp<dimension ; comp++)
96 double delta_coord = (xp(elem2,comp) - xp(elem1,comp));
97 for (
int i=0 ; i<dimension ; i++)
98 resu(face,i) += (tab_rho(face)-rho_m)*delta_coord*face_normales(face,i)*g(comp);
104 CDoubleArrView g_v = g.view_ro();
105 CDoubleArrView porosite_face_v = le_dom_Cl->equation().milieu().porosite_face().view_ro();
106 CDoubleArrView volumes_entrelaces_v = le_dom->volumes_entrelaces().view_ro();
107 CDoubleArrView tab_rho_v =
static_cast<const DoubleVect&
>(tab_rho).view_ro();
108 DoubleTabView resu_v = resu.
view_rw();
110 for (
int num_cl=0 ; num_cl<le_dom->nb_front_Cl() ; num_cl++)
112 const Cond_lim& la_cl = le_dom_Cl->les_conditions_limites(num_cl);
117 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::MDRangePolicy<Kokkos::Rank<2>>({ndeb,0}, {nfin,dimension}), KOKKOS_LAMBDA(
118 const int face,
const int comp)
120 resu_v(face, comp) += (tab_rho_v(face) - rho_m) * volumes_entrelaces_v(face) * porosite_face_v(face) * g_v(comp);
122 end_gpu_timer(__KERNEL_NAME__);
126 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::MDRangePolicy<Kokkos::Rank<2>>({premiere_face_interne,0}, {nb_faces,dimension}), KOKKOS_LAMBDA(
127 const int face,
const int comp)
129 resu_v(face, comp) += (tab_rho_v(face) - rho_m) * volumes_entrelaces_v(face) * porosite_face_v(face) * g_v(comp);
131 end_gpu_timer(__KERNEL_NAME__);
135 Cerr<<
"La discretisation "<<eqn.
discretisation().
que_suis_je()<<
" n'est pas reconnue dans Source_Fluide_Dilatable_VEF_Proto"<<finl;
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.