16#include <Check_espace_virtuel.h>
17#include <MD_Vector_base.h>
24int check_espace_virtuel_vect(
const DoubleVect& v)
30 w.echange_espace_virtuel();
32 const double norme_w = norme_array(w);
35 w.ArrOfDouble::operator-=(v);
36 const double ecart = norme_array(w);
37 if (ecart > (norme_w + 1e-30) * 1e-12)
46int check_espace_virtuel_vect(
const IntVect& v)
51 w.echange_espace_virtuel();
54 for (
int i = 0; i < n; i++)
66void assert_invalide_items_non_calcules(DoubleVect& v,
double valeur)
70 remplir_items_non_calcules(v, valeur);
72 remplir_items_non_calcules(v, valeur);
79template <
typename ExecSpace,
typename _TYPE_>
80void remplir_items_non_calcules_kernel_(
TRUSTVect<_TYPE_>& v, _TYPE_ valeur,
const ArrOfInt& blocs,
const int sz,
const int line_size)
82 auto v_view= v.template view_wo<1, ExecSpace>();
86 for (
int i = 0; i <= sz; i++)
93 const int j_fin = i==sz ? v.
size_array() : blocs[i*2] * line_size;
96 Kokkos::RangePolicy<ExecSpace> policy(j, j_fin);
97 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__),policy,
98 KOKKOS_LAMBDA(
const int k) {v_view[k]=valeur;});
100 end_gpu_timer(__KERNEL_NAME__, is_default_exec_space<ExecSpace>);
103 if (i<sz) j = blocs[i*2+1] * line_size;
109template <
typename _TYPE_>
121 remplir_items_non_calcules_kernel_<Kokkos::DefaultExecutionSpace, _TYPE_>(v, valeur, blocs, sz, line_size);
123 remplir_items_non_calcules_kernel_<Kokkos::DefaultHostExecutionSpace, _TYPE_>(v, valeur, blocs, sz, line_size);
131template void remplir_items_non_calcules_<double>(
TRUSTVect<double>& v,
double valeur);
132template void remplir_items_non_calcules_<int>(
TRUSTVect<int>& v,
int valeur);
133template void remplir_items_non_calcules_<float>(
TRUSTVect<float>& v,
float valeur);
static int check_enabled()
virtual const ArrOfInt & get_blocs_items_to_compute() const =0
static bool is_parallel()
static bool is_sequential()
_SIZE_ size_array() const
virtual const MD_Vector & get_md_vector() const