51 const DoubleTab& K_eps,
53 const DoubleTab& visco_turb,
54 const int& interpol_visco,
55 const double& limiteur,
56 const bool& deactivate_production_limiter,
57 const double& cst_production_limiter)
const
64 DoubleTrav gradient_elem(nb_elem_tot, dimension, dimension);
68 const DoubleVect& volumes = domaine_VEF.
volumes();
71 for (
int n_bord = 0; n_bord < domaine_VEF.
nb_front_Cl(); n_bord++)
76 const int last_boundary_face = first_boundary_face + le_bord.
nb_faces();
80 face_voisins, first_boundary_face, last_boundary_face,
81 interpol_visco, limiteur, K_eps,deactivate_production_limiter,cst_production_limiter);
84 face_voisins, first_boundary_face, last_boundary_face,
85 interpol_visco, limiteur, K_eps,deactivate_production_limiter,cst_production_limiter);
90 const int nb_faces_ = domaine_VEF.
nb_faces();
92 face_voisins, premiere_face_int, nb_faces_,
93 interpol_visco, limiteur,K_eps,deactivate_production_limiter,cst_production_limiter);
115 const DoubleTab& tab_gradient_elem,
116 const DoubleTab& tab_visco_turb,
117 const DoubleVect& volumes,
118 const IntTab& tab_face_voisins,
121 const int interpol_visco,
122 const double limiteur,
123 const DoubleTab& tab_K_Omega,
124 const bool& deactivate_production_limiter,
125 const double& cst_production_limiter
129 CDoubleTabView3 gradient_elem = tab_gradient_elem.
view_ro<3>();
130 CDoubleTabView K_Omega = tab_K_Omega.
view_ro();
131 CDoubleArrView visco_turb =
static_cast<const ArrOfDouble&
>(tab_visco_turb).view_ro();
132 CIntTabView face_voisins = tab_face_voisins.
view_ro();
133 DoubleArrView prodK =
static_cast<ArrOfDouble&
>(tab_prodK).view_wo();
134 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(nfaceinit, nfaceend), KOKKOS_LAMBDA(
const int fac)
136 const int poly1 = face_voisins(fac, 0);
137 const double visco_face = visco_turb(poly1);
139 const double du_dx = gradient_elem(poly1, 0, 0);
140 const double du_dy = gradient_elem(poly1, 0, 1);
141 const double dv_dx = gradient_elem(poly1, 1, 0);
142 const double dv_dy = gradient_elem(poly1, 1, 1);
145 prodK(fac) = (2*(du_dx*du_dx + dv_dy*dv_dy)
146 + ((du_dy + dv_dx)*(du_dy + dv_dx)))*visco_face;
150 const double du_dz = gradient_elem(poly1, 0, 2);
151 const double dv_dz = gradient_elem(poly1, 1, 2);
152 const double dw_dx = gradient_elem(poly1, 2, 0);
153 const double dw_dy = gradient_elem(poly1, 2, 1);
154 const double dw_dz = gradient_elem(poly1, 2, 2);
157 prodK(fac) = (2*(du_dx*du_dx + dv_dy*dv_dy + dw_dz*dw_dz)
158 + ((du_dy + dv_dx) * (du_dy + dv_dx)
159 + (du_dz + dw_dx) * (du_dz + dw_dx)
160 + (dw_dy + dv_dz) * (dw_dy + dv_dz)))*visco_face;
162 if (!deactivate_production_limiter)
163 prodK(fac)=std::min(prodK(fac),cst_production_limiter*BETA_K*K_Omega(fac,0)*K_Omega(fac,1));
165 end_gpu_timer(__KERNEL_NAME__);
186 const DoubleTab& tab_gradient_elem,
187 const DoubleTab& tab_visco_turb,
188 const DoubleVect& tab_volumes,
189 const IntTab& tab_face_voisins,
192 const int interpol_visco,
193 const double limiteur,
194 const DoubleTab& tab_K_Omega,
195 const bool& deactivate_production_limiter,
196 const double& cst_production_limiter
200 CDoubleTabView3 gradient_elem = tab_gradient_elem.
view_ro<3>();
201 CDoubleTabView K_Omega = tab_K_Omega.
view_ro();
202 CDoubleArrView visco_turb =
static_cast<const ArrOfDouble&
>(tab_visco_turb).view_ro();
203 CDoubleArrView volumes = tab_volumes.view_ro();
204 CIntTabView face_voisins = tab_face_voisins.
view_ro();
205 DoubleArrView prodK =
static_cast<ArrOfDouble&
>(tab_prodK).view_wo();
206 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(nfaceinit, nfaceend), KOKKOS_LAMBDA(
const int fac)
208 const int poly1 = face_voisins(fac, 0);
209 const int poly2 = face_voisins(fac, 1);
210 const double a = volumes(poly1)/(volumes(poly1) + volumes(poly2));
211 const double b = volumes(poly2)/(volumes(poly1) + volumes(poly2));
214 interpol_visco, poly1, poly2,
217 const double du_dx = a*gradient_elem(poly1, 0, 0) + b*gradient_elem(poly2, 0, 0);
218 const double du_dy = a*gradient_elem(poly1, 0, 1) + b*gradient_elem(poly2, 0, 1);
219 const double dv_dx = a*gradient_elem(poly1, 1, 0) + b*gradient_elem(poly2, 1, 0);
220 const double dv_dy = a*gradient_elem(poly1, 1, 1) + b*gradient_elem(poly2, 1, 1);
224 prodK(fac) = (2*(du_dx*du_dx + dv_dy*dv_dy)
225 + ((du_dy + dv_dx)*(du_dy + dv_dx)))*visco_face;
229 const double du_dz = a*gradient_elem(poly1, 0, 2) + b*gradient_elem(poly2, 0, 2);
230 const double dv_dz = a*gradient_elem(poly1, 1, 2) + b*gradient_elem(poly2, 1, 2);
231 const double dw_dx = a*gradient_elem(poly1, 2, 0) + b*gradient_elem(poly2, 2, 0);
232 const double dw_dy = a*gradient_elem(poly1, 2, 1) + b*gradient_elem(poly2, 2, 1);
233 const double dw_dz = a*gradient_elem(poly1, 2, 2) + b*gradient_elem(poly2, 2, 2);
236 prodK(fac) = (2*(du_dx*du_dx + dv_dy*dv_dy + dw_dz*dw_dz)
237 + ((du_dy + dv_dx)*(du_dy + dv_dx)
238 + (du_dz + dw_dx)*(du_dz + dw_dx)
239 + (dw_dy + dv_dz)*(dw_dy + dv_dz)))*visco_face;
241 if (!deactivate_production_limiter)
242 prodK(fac)=std::min(prodK(fac),cst_production_limiter*BETA_K*K_Omega(fac,0)*K_Omega(fac,1));
244 end_gpu_timer(__KERNEL_NAME__);
249 DoubleTab& P,
const DoubleTab& K,
const DoubleTab& eps,
250 const DoubleTab& vit,
const DoubleTab& visco_turb,
const int& interpol_visco,
const double& limiteur)
const
269 const IntTab& face_voisins = domaine_VEF.
face_voisins();
270 const DoubleVect& volumes = domaine_VEF.
volumes();
273 DoubleTab gradient_elem(nb_elem_tot, dimension, dimension);
288 ToDo_Kokkos(
"critical");
289 for (
int n_bord = 0; n_bord < domaine_VEF.
nb_front_Cl(); n_bord++)
294 const int nfin = ndeb + le_bord.
nb_faces();
298 for (
int fac = ndeb; fac < nfin; fac++)
300 const int poly1 = face_voisins(fac, 0);
301 const int poly2 = face_voisins(fac, 1);
302 const double a = volumes(poly1)/(volumes(poly1) + volumes(poly2));
303 const double b = volumes(poly2)/(volumes(poly1) + volumes(poly2));
306 interpol_visco, poly1, poly2,
309 const double du_dx = a*gradient_elem(poly1, 0, 0) + b*gradient_elem(poly2, 0, 0);
310 const double du_dy = a*gradient_elem(poly1, 0, 1) + b*gradient_elem(poly2, 0, 1);
311 const double dv_dx = a*gradient_elem(poly1, 1, 0) + b*gradient_elem(poly2, 1, 0);
312 const double dv_dy = a*gradient_elem(poly1, 1, 1) + b*gradient_elem(poly2, 1, 1);
314 P(fac) = visco_face*( 2*(du_dx*du_dx + dv_dy*dv_dy)
315 + ((du_dy+dv_dx)*(du_dy+dv_dx) ) );
319 const double du_dz = a*gradient_elem(poly1, 0, 2) + b*gradient_elem(poly2, 0, 2);
320 const double dv_dz = a*gradient_elem(poly1, 1, 2) + b*gradient_elem(poly2, 1, 2);
321 const double dw_dx = a*gradient_elem(poly1, 2, 0) + b*gradient_elem(poly2, 2, 0);
322 const double dw_dy = a*gradient_elem(poly1, 2, 1) + b*gradient_elem(poly2, 2, 1);
323 const double dw_dz = a*gradient_elem(poly1, 2, 2) + b*gradient_elem(poly2, 2, 2);
326 P(fac) = (2*(du_dx*du_dx + dv_dy*dv_dy + dw_dz*dw_dz)
327 + ((du_dy + dv_dx)*(du_dy + dv_dx)
328 + (du_dz + dw_dx)*(du_dz + dw_dx)
329 + (dw_dy + dv_dz)*(dw_dy + dv_dz)))*visco_face;
335 for (
int fac = ndeb; fac < nfin; fac++)
337 const int poly1 = face_voisins(fac,0);
338 const double visco_face = visco_turb(poly1);
340 const double du_dx = gradient_elem(poly1, 0, 0);
341 const double du_dy = gradient_elem(poly1, 0, 1);
342 const double dv_dx = gradient_elem(poly1, 1, 0);
343 const double dv_dy = gradient_elem(poly1, 1, 1);
345 P(fac) = visco_face*( 2*(du_dx*du_dx + dv_dy*dv_dy) + ((du_dy+dv_dx)*(du_dy+dv_dx)));
349 const double du_dz = gradient_elem(poly1, 0, 2);
350 const double dv_dz = gradient_elem(poly1, 1, 2);
351 const double dw_dx = gradient_elem(poly1, 2, 0);
352 const double dw_dy = gradient_elem(poly1, 2, 1);
353 const double dw_dz = gradient_elem(poly1, 2, 2);
355 P(fac) = (2*(du_dx*du_dx + dv_dy*dv_dy + dw_dz*dw_dz)
356 + ( (du_dy + dv_dx)*(du_dy + dv_dx)
357 + (du_dz + dw_dx)*(du_dz + dw_dx)
358 + (dw_dy + dv_dz)*(dw_dy + dv_dz)))*visco_face;
367 const int nb_faces_ = domaine_VEF.
nb_faces();
369 for (
int fac = premiere_face_int; fac < nb_faces_; fac++)
371 const int poly1 = face_voisins(fac, 0);
372 const int poly2 = face_voisins(fac, 1);
373 const double a = volumes(poly1)/(volumes(poly1) + volumes(poly2));
374 const double b = volumes(poly2)/(volumes(poly1) + volumes(poly2));
377 interpol_visco, poly1, poly2,
380 const double du_dx = a*gradient_elem(poly1, 0, 0) + b*gradient_elem(poly2, 0, 0);
381 const double du_dy = a*gradient_elem(poly1, 0, 1) + b*gradient_elem(poly2, 0, 1);
382 const double dv_dx = a*gradient_elem(poly1, 1, 0) + b*gradient_elem(poly2, 1, 0);
383 const double dv_dy = a*gradient_elem(poly1, 1, 1) + b*gradient_elem(poly2, 1, 1);
385 P(fac) = (2*(du_dx*du_dx + dv_dy*dv_dy)
386 + ((du_dy + dv_dx)*(du_dy + dv_dx)))*visco_face;
389 const double du_dz = a*gradient_elem(poly1, 0, 2) + b*gradient_elem(poly2, 0, 2);
390 const double dv_dz = a*gradient_elem(poly1, 1, 2) + b*gradient_elem(poly2, 1, 2);
391 const double dw_dx = a*gradient_elem(poly1, 2, 0) + b*gradient_elem(poly2, 2, 0);
392 const double dw_dy = a*gradient_elem(poly1, 2, 1) + b*gradient_elem(poly2, 2, 1);
393 const double dw_dz = a*gradient_elem(poly1, 2, 2) + b*gradient_elem(poly2, 2, 2);
395 P(fac) = (2*(du_dx*du_dx + dv_dy*dv_dy + dw_dz*dw_dz)
396 + ((du_dy + dv_dx)*(du_dy + dv_dx)
397 + (du_dz + dw_dx)*(du_dz + dw_dx)
398 + (dw_dy + dv_dz)*(dw_dy + dv_dz)))*visco_face;
409 const DoubleTab& K_eps,
410 const DoubleTab& gradient_elem,
411 const DoubleTab& visco_turb,
413 const int& interpol_visco,
414 const double& limiteur)
const
417 if (interpol_visco != 0 && interpol_visco != 1 && interpol_visco != 2)
419 Cerr <<
"interpol_visco must be equal to [0, 1, 2] and its current value is " << interpol_visco <<
".\n";
427 const int nb_faces_ = domaine_VEF.
nb_faces();
430 DoubleTab gradient_face(nb_faces_, dimension, dimension);
433 DoubleTab Re_face(nb_faces_, dimension, dimension);
436 const IntTab& face_voisins = domaine_VEF.
face_voisins();
437 const DoubleVect& volumes = domaine_VEF.
volumes();
440 ToDo_Kokkos(
"critical");
441 for (
int n_bord = 0; n_bord < domaine_VEF.
nb_front_Cl(); n_bord++)
446 const int nfin = ndeb + le_bord.
nb_faces();
450 for (
int fac = ndeb; fac < nfin; fac++)
452 const int poly1 = face_voisins(fac, 0);
453 const int poly2 = face_voisins(fac, 1);
455 interpol_visco, poly1, poly2,
462 for (
int fac = ndeb; fac < nfin; fac++)
464 const int poly1 = face_voisins(fac, 0);
465 const double visco_face = visco_turb(poly1);
473 for (
int fac = first_internal_face; fac < nb_faces_; fac++)
475 const int poly1 = face_voisins(fac, 0);
476 const int poly2 = face_voisins(fac, 1);
478 interpol_visco, poly1, poly2,
588 const DoubleTab& inconnue,
589 const DoubleTab& alpha_turb,
591 const DoubleVect& gravite,
607 const IntTab& face_voisins = domaine_VEF.
face_voisins();
608 const DoubleVect& volumes = domaine_VEF.
volumes();
609 const DoubleTab& tab_beta = ch_beta.
valeurs();
613 if (nb_consti == 0 || nb_consti == 1)
617 DoubleTrav gradient_elem(nb_elem_tot, dimension);
623 DoubleTrav u_theta(nb_faces_tot, dimension);
628 volumes, tab_beta, alpha_turb, gradient_elem,
630 else if (nb_compo == 1)
632 volumes, tab_beta, alpha_turb, gradient_elem,
635 else if (nb_compo > 1)
637 volumes, tab_beta, alpha_turb, gradient_elem,
642 const int nb_faces_ = domaine_VEF.
nb_faces();
643 ToDo_Kokkos(
"critical");
644 for (
int fac = 0; fac < nb_faces_; fac++)
646 G[fac] = gravite(0)*u_theta(fac, 0) + gravite(1)*u_theta(fac, 1);
648 G[fac] += gravite(2)*u_theta(fac, 2);
651 else if (nb_consti > 1)
655 DoubleTrav gradient_elem(nb_elem_tot, nb_consti, dimension);
661 DoubleTrav u_theta(nb_faces_tot, nb_consti, dimension);
666 volumes, tab_beta, alpha_turb, gradient_elem,
668 else if (nb_compo == 1)
670 volumes, tab_beta, alpha_turb, gradient_elem,
672 else if (nb_compo > 1)
674 volumes, tab_beta, alpha_turb, gradient_elem,
678 const int nb_faces_ = domaine_VEF.
nb_faces();
679 ToDo_Kokkos(
"critical");
680 for (
int fac = 0; fac < nb_faces_; fac++)
681 for (
int k = 0; k < nb_consti; k++)
683 G[fac] = gravite(0)*u_theta(fac, k, 0) + gravite(1)*u_theta(fac, k, 1);
685 G[fac] += gravite(2)*u_theta(fac, k, 2);
694 const IntTab& face_voisins,
695 const DoubleVect& volumes,
696 const DoubleTab& tab_beta,
697 const DoubleTab& alpha_turb,
698 const DoubleTrav& gradient_elem,
699 DoubleTrav& u_theta)
const
702 ToDo_Kokkos(
"critical");
703 for (
int n_bord = 0; n_bord < domaine_VEF.
nb_front_Cl(); n_bord++)
708 const int nfin = ndeb + le_bord.
nb_faces();
712 for (
int fac = ndeb ; fac < nfin; fac++)
714 const int elem1 = face_voisins(fac, 0);
715 const int elem2 = face_voisins(fac, 1);
716 const double invVol = 1/(volumes(elem1) + volumes(elem2));
717 const double a = volumes(elem1)*invVol;
718 const double b = volumes(elem2)*invVol;
720 u_theta(fac, i) = a*tab_beta(0, 0)*alpha_turb(elem1)*gradient_elem(elem1, i)
721 + b*tab_beta(0, 0)*alpha_turb(elem2)*gradient_elem(elem2, i);
726 for (
int fac = ndeb; fac < nfin; fac++)
728 const int elem1 = face_voisins(fac, 0);
730 u_theta(fac, i) = tab_beta(0, 0)*alpha_turb(elem1)*gradient_elem(elem1, i);
736 ToDo_Kokkos(
"critical");
738 for (
int fac = 0; fac < nb_faces_tot; fac++)
740 const int elem1 = face_voisins(fac, 0);
741 const int elem2 = face_voisins(fac, 1);
743 if ((elem1 >= 0) && (elem2 >= 0))
745 const double a = volumes(elem1)/(volumes(elem1) + volumes(elem2));
746 const double b = volumes(elem2)/(volumes(elem1) + volumes(elem2));
749 u_theta(fac, i) = a*tab_beta(0, 0)*alpha_turb(elem1)*gradient_elem(elem1, i)
750 + b*tab_beta(0, 0)*alpha_turb(elem2)*gradient_elem(elem2, i);
757 const IntTab& face_voisins,
758 const DoubleVect& volumes,
759 const DoubleTab& tab_beta,
760 const DoubleTab& alpha_turb,
761 const DoubleTrav& gradient_elem,
762 DoubleTrav& u_theta)
const
765 ToDo_Kokkos(
"critical");
766 for (
int n_bord = 0; n_bord < domaine_VEF.
nb_front_Cl(); n_bord++)
771 const int nfin = ndeb + le_bord.
nb_faces();
775 for (
int fac = ndeb; fac < nfin; fac++)
777 const int elem1 = face_voisins(fac, 0);
778 const int elem2 = face_voisins(fac, 1);
779 const double a = volumes(elem1)/(volumes(elem1) + volumes(elem2));
780 const double b = volumes(elem2)/(volumes(elem1) + volumes(elem2));
783 u_theta(fac, i) = a*tab_beta(elem1)*alpha_turb(elem1)*gradient_elem(elem1, i)
784 + b*tab_beta(elem2)*alpha_turb(elem2)*gradient_elem(elem2, i);
789 for (
int fac = ndeb; fac < nfin; fac++)
791 const int elem1 = face_voisins(fac, 0);
794 u_theta(fac, i) = tab_beta(elem1)*alpha_turb(elem1)*gradient_elem(elem1, i);
800 for (
int fac = 0; fac < nb_faces_tot; fac++)
802 const int elem1 = face_voisins(fac, 0);
803 const int elem2 = face_voisins(fac, 1);
805 if ((elem1 >= 0) && (elem2 >= 0))
807 const double a = volumes(elem1)/(volumes(elem1) + volumes(elem2));
808 const double b = volumes(elem2)/(volumes(elem1) + volumes(elem2));
811 u_theta(fac, i) = a*tab_beta(elem1)*alpha_turb(elem1)*gradient_elem(elem1, i)
812 + b*tab_beta(elem2)*alpha_turb(elem2)*gradient_elem(elem2, i);
819 const IntTab& face_voisins,
820 const DoubleVect& volumes,
821 const DoubleTab& tab_beta,
822 const DoubleTab& alpha_turb,
823 const DoubleTrav& gradient_elem,
824 DoubleTrav& u_theta)
const
827 ToDo_Kokkos(
"critical");
828 for (
int n_bord = 0; n_bord < domaine_VEF.
nb_front_Cl(); n_bord++)
833 const int nfin = ndeb + le_bord.
nb_faces();
837 for (
int fac = ndeb; fac < nfin; fac++)
839 const int elem1 = face_voisins(fac, 0);
840 const int elem2 = face_voisins(fac, 1);
841 const double a = volumes(elem1)/(volumes(elem1) + volumes(elem2));
842 const double b = volumes(elem2)/(volumes(elem1) + volumes(elem2));
845 u_theta(fac, i) = a*tab_beta(elem1, 0)*alpha_turb(elem1)*gradient_elem(elem1, i)
846 + b*tab_beta(elem2, 0)*alpha_turb(elem2)*gradient_elem(elem2, i);
852 for (
int fac = ndeb; fac < nfin; fac++)
854 const int elem1 = face_voisins(fac, 0);
857 u_theta(fac, i) = tab_beta(elem1, 0)*alpha_turb(elem1)*gradient_elem(elem1, i);
863 ToDo_Kokkos(
"critical");
864 for (
int fac = 0; fac < nb_faces_tot; fac++)
866 const int elem1 = face_voisins(fac, 0);
867 const int elem2 = face_voisins(fac, 1);
869 if ((elem1 >= 0) && (elem2 >= 0))
871 const double a = volumes(elem1)/(volumes(elem1) + volumes(elem2));
872 const double b = volumes(elem2)/(volumes(elem1) + volumes(elem2));
875 u_theta(fac, i) = a*tab_beta(elem1, 0)*alpha_turb(elem1)*gradient_elem(elem1, i)
876 + b*tab_beta(elem2, 0)*alpha_turb(elem2)*gradient_elem(elem2, i);
883 const IntTab& face_voisins,
884 const DoubleVect& volumes,
885 const DoubleTab& tab_beta,
886 const DoubleTab& alpha_turb,
887 const DoubleTrav& gradient_elem,
889 DoubleTrav& u_theta)
const
892 ToDo_Kokkos(
"critical");
893 for (
int n_bord = 0; n_bord < domaine_VEF.
nb_front_Cl(); n_bord++)
898 const int nfin = ndeb + le_bord.
nb_faces();
902 for (
int fac = ndeb; fac < nfin; fac++)
904 const int elem1 = face_voisins(fac, 0);
905 const int elem2 = face_voisins(fac, 1);
906 const double invVol = 1/(volumes(elem1) + volumes(elem2));
907 const double a = volumes(elem1)*invVol;
908 const double b = volumes(elem2)*invVol;
910 for (
int i = 0; i < nb_consti; i++)
912 u_theta(fac, i, k) = a*tab_beta(0, 0)*alpha_turb(elem1)*gradient_elem(elem1, i, k)
913 + b*tab_beta(0, 0)*alpha_turb(elem2)*gradient_elem(elem2, i, k);
918 for (
int fac = ndeb; fac < nfin; fac++)
920 const int elem1 = face_voisins(fac, 0);
922 for (
int i = 0; i < nb_consti; i++)
924 u_theta(fac, i, k) = tab_beta(0, 0)*alpha_turb(elem1)*gradient_elem(elem1, i, k);
930 ToDo_Kokkos(
"critical");
932 for (
int fac = 0; fac < nb_faces_tot; fac++)
934 const int elem1 = face_voisins(fac, 0);
935 const int elem2 = face_voisins(fac, 1);
937 if ((elem1 >= 0) && (elem2 >= 0))
939 const double invVol = 1/(volumes(elem1) + volumes(elem2));
940 const double a = volumes(elem1)*invVol;
941 const double b = volumes(elem2)*invVol;
943 for (
int i = 0; i < nb_consti; i++)
945 u_theta(fac, i, k) = a*tab_beta(0, 0)*alpha_turb(elem1)*gradient_elem(elem1, i, k)
946 + b*tab_beta(0, 0)*alpha_turb(elem2)*gradient_elem(elem2, i, k);
953 const IntTab& face_voisins,
954 const DoubleVect& volumes,
955 const DoubleTab& tab_beta,
956 const DoubleTab& alpha_turb,
957 const DoubleTrav& gradient_elem,
959 DoubleTrav& u_theta)
const
962 ToDo_Kokkos(
"critical");
963 for (
int n_bord = 0; n_bord < domaine_VEF.
nb_front_Cl(); n_bord++)
968 const int nfin = ndeb + le_bord.
nb_faces();
971 for (
int fac = ndeb; fac < nfin; fac++)
973 const int elem1 = face_voisins(fac, 0);
974 const int elem2 = face_voisins(fac, 1);
975 const double invVol = 1/(volumes(elem1) + volumes(elem2));
976 const double a = volumes(elem1)*invVol;
977 const double b = volumes(elem2)*invVol;
979 for (
int i = 0; i < nb_consti; i++)
981 u_theta(fac, i, k) = a*tab_beta(elem1)*alpha_turb(elem1)*gradient_elem(elem1, i, k)
982 + b*tab_beta(elem2)*alpha_turb(elem2)*gradient_elem(elem2, i, k);
987 for (
int fac = ndeb; fac < nfin; fac++)
989 const int elem1 = face_voisins(fac, 0);
991 for (
int i = 0; i < nb_consti; i++)
993 u_theta(fac, i, k) = tab_beta(elem1)*alpha_turb(elem1)*gradient_elem(elem1, i, k);
998 ToDo_Kokkos(
"critical");
1000 for (
int fac = 0; fac < nb_faces_tot; fac++)
1002 const int elem1 = face_voisins(fac, 0);
1003 const int elem2 = face_voisins(fac, 1);
1005 if ((elem1 >= 0) && (elem2 >= 0))
1007 const double invVol = 1/(volumes(elem1) + volumes(elem2));
1008 const double a = volumes(elem1)*invVol;
1009 const double b = volumes(elem2)*invVol;
1010 for (
int i = 0; i < nb_consti; i++)
1012 u_theta(fac, i, k) = a*tab_beta(elem1)*alpha_turb(elem1)*gradient_elem(elem1, i, k)
1013 + b*tab_beta(elem2)*alpha_turb(elem2)*gradient_elem(elem2, i, k);
1021 const IntTab& face_voisins,
1022 const DoubleVect& volumes,
1023 const DoubleTab& tab_beta,
1024 const DoubleTab& alpha_turb,
1025 const DoubleTrav& gradient_elem,
1026 const int nb_consti,
1027 DoubleTrav& u_theta)
const
1030 ToDo_Kokkos(
"critical");
1031 for (
int n_bord = 0; n_bord < domaine_VEF.
nb_front_Cl(); n_bord++)
1036 const int nfin = ndeb + le_bord.
nb_faces();
1039 for (
int fac = ndeb; fac < nfin; fac++)
1041 const int elem1 = face_voisins(fac, 0);
1042 const int elem2 = face_voisins(fac, 1);
1043 const double invVol = 1/(volumes(elem1) + volumes(elem2));
1044 const double a = volumes(elem1)*invVol;
1045 const double b = volumes(elem2)*invVol;
1047 for (
int i = 0; i < nb_consti; i++)
1049 u_theta(fac, i, k) = a*tab_beta(elem1, 0)*alpha_turb(elem1)*gradient_elem(elem1, i, k)
1050 + b*tab_beta(elem2, 0)*alpha_turb(elem2)*gradient_elem(elem2, i, k);
1055 for (
int fac = ndeb; fac < nfin; fac++)
1057 const int elem1 = face_voisins(fac, 0);
1059 for (
int i = 0; i < nb_consti; i++)
1061 u_theta(fac, i, k) = tab_beta(elem1, 0)*alpha_turb(elem1)*gradient_elem(elem1, i, k);
1067 ToDo_Kokkos(
"critical");
1068 for (
int fac = 0; fac < nb_faces_tot; fac++)
1070 const int elem1 = face_voisins(fac, 0);
1071 const int elem2 = face_voisins(fac, 1);
1072 if ((elem1 >= 0) && (elem2 >= 0))
1074 const double invVol = 1/(volumes(elem1) + volumes(elem2));
1075 const double a = volumes(elem1)*invVol;
1076 const double b = volumes(elem2)*invVol;
1078 for (
int i = 0; i < nb_consti; i++)
1080 u_theta(fac, i, k) = a*tab_beta(elem1, 0)*alpha_turb(elem1)*gradient_elem(elem1, i, k)
1081 + b*tab_beta(elem2, 0)*alpha_turb(elem2)*gradient_elem(elem2, i, k);
1088 const DoubleTab& Tenseur_elem,
1094 const IntTab& face_voisins = domaine_VEF.
face_voisins();
1097 const int nb_cl = les_cl.size();
1098 const DoubleVect& volumes = domaine_VEF.
volumes();
1099 ToDo_Kokkos(
"critical");
1100 for (
int n_bord = 0; n_bord < nb_cl; n_bord++)
1105 const int nfin = ndeb + le_bord.
nb_faces();
1109 for (
int fac = ndeb; fac < nfin; fac++)
1111 const int poly1 = face_voisins(fac, 0);
1112 const int poly2 = face_voisins(fac, 1);
1113 const double invVol = 1/(volumes(poly1) + volumes(poly2));
1114 const double a = volumes(poly1)*invVol;
1115 const double b = volumes(poly2)*invVol;
1117 for (
int i = 0; i < dimension; i++)
1118 for (
int j = 0; j < dimension; j++)
1119 Tenseur_face(fac, i, j) = a*Tenseur_elem(poly1, i, j)
1120 + b*Tenseur_elem(poly2, i, j);
1125 for (
int fac = ndeb; fac < nfin; fac++)
1127 const int poly1 = face_voisins(fac, 0);
1129 for (
int i = 0; i < dimension; i++)
1130 for (
int j = 0; j < dimension; j++)
1131 Tenseur_face(fac, i, j) = Tenseur_elem(poly1, i, j);
1137 const int nb_faces = domaine_VEF.
nb_faces();
1138 ToDo_Kokkos(
"critical");
1139 for (
int fac = n0; fac < nb_faces; fac++)
1141 const int poly1 = face_voisins(fac, 0);
1142 const int poly2 = face_voisins(fac, 1);
1143 const double invVol = 1/(volumes(poly1) + volumes(poly2));
1144 const double a = volumes(poly1)*invVol;
1145 const double b = volumes(poly2)*invVol;
1147 for (
int i = 0; i < dimension; i++)
1148 for (
int j = 0; j < dimension; j++)
1149 Tenseur_face(fac, i, j) = a*Tenseur_elem(poly1, i, j) + b*Tenseur_elem(poly2, i, j);
1152 return Tenseur_face;