16#ifndef TRUSTChamp_Divers_generique_included
17#define TRUSTChamp_Divers_generique_included
19#include <Champ_Don_base.h>
21enum class Champ_Divers_Type { INUTILE , UNIFORME , CANAL };
23template <Champ_Divers_Type _TYPE_>
29 static constexpr bool IS_UNIFORME = (_TYPE_ == Champ_Divers_Type::UNIFORME), IS_CANAL = (_TYPE_ == Champ_Divers_Type::CANAL);
36 DoubleVect&
valeur_a(
const DoubleVect&, DoubleVect& tab_valeurs)
const override
38 assert (_TYPE_ != Champ_Divers_Type::CANAL);
39 static constexpr bool IS_UNIFORME = (_TYPE_ == Champ_Divers_Type::UNIFORME);
46 return not_implemented_champ_<DoubleVect&>(__func__);
51 static constexpr bool IS_UNIFORME = (_TYPE_ == Champ_Divers_Type::UNIFORME), IS_CANAL = (_TYPE_ == Champ_Divers_Type::CANAL);
52 if (IS_UNIFORME)
return valeurs_(0,ncomp);
54 else return not_implemented_champ_<double>(__func__);
57 DoubleVect&
valeur_a_elem(
const DoubleVect& positions, DoubleVect& tab_valeurs,
int)
const override
59 static constexpr bool IS_UNIFORME = (_TYPE_ == Champ_Divers_Type::UNIFORME), IS_CANAL = (_TYPE_ == Champ_Divers_Type::CANAL);
66 else if (IS_CANAL)
return valeur_a(positions, tab_valeurs);
68 else return not_implemented_champ_<DoubleVect&>(__func__);
73 static constexpr bool IS_UNIFORME = (_TYPE_ == Champ_Divers_Type::UNIFORME);
74 return IS_UNIFORME ?
valeurs_(0,ncomp) : not_implemented_champ_<double>(__func__);
77 DoubleTab&
valeur_aux(
const DoubleTab& , DoubleTab& tab_valeurs)
const override
79 static constexpr bool IS_UNIFORME = (_TYPE_ == Champ_Divers_Type::UNIFORME);
89 DoubleTabView tab_valeurs_v = tab_valeurs.
view_rw();
90 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::MDRangePolicy<Kokkos::Rank<2>>({0, 0}, {size,
nb_comp }),
91 KOKKOS_LAMBDA(
const int i,
const int j)
93 tab_valeurs_v(i, j) =
valeurs(0, j);
95 end_gpu_timer(__KERNEL_NAME__, kernelOnDevice);
100 for (
int i = 0; i < size; i++)
101 for (
int j = 0; j <
nb_comp; j++)
107 return not_implemented_champ_<DoubleTab&>(__func__);
110 DoubleVect&
valeur_aux_compo(
const DoubleTab&, DoubleVect& tab_valeurs,
int ncomp)
const override
112 static constexpr bool IS_UNIFORME = (_TYPE_ == Champ_Divers_Type::UNIFORME);
113 if (IS_UNIFORME)
return tab_valeurs =
valeurs_(0, ncomp);
114 else return not_implemented_champ_<DoubleVect&>(__func__);
117 DoubleTab&
valeur_aux_elems(
const DoubleTab& positions,
const IntVect&, DoubleTab& tab_valeurs)
const override
119 static constexpr bool IS_UNIFORME = (_TYPE_ == Champ_Divers_Type::UNIFORME);
129 DoubleTabView tab_valeurs_v = tab_valeurs.
view_rw();
130 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::MDRangePolicy<Kokkos::Rank<2>>({0, 0}, {size,
nb_comp}),
131 KOKKOS_LAMBDA(
const int i,
const int j)
133 tab_valeurs_v(i, j) =
valeurs(0, j);
135 end_gpu_timer(__KERNEL_NAME__, kernelOnDevice);
140 for (
int i = 0; i < size; i++)
141 for (
int j = 0; j <
nb_comp; j++)
147 else return valeur_aux(positions, tab_valeurs);
150 DoubleVect&
valeur_aux_elems_compo(
const DoubleTab& positions,
const IntVect&, DoubleVect& tab_valeurs,
int ncomp)
const override
152 static constexpr bool IS_UNIFORME = (_TYPE_ == Champ_Divers_Type::UNIFORME);
153 if (IS_UNIFORME)
return tab_valeurs =
valeurs_(0, ncomp);
classe Champ_Don_base classe de base des Champs donnes (non calcules)
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
Champ_base()
Constructeur par defaut d'un Champ_base.
Champ_base & affecter(const Champ_base &)
Affecter un champ dans un autre.
virtual double valeur_a_compo(const DoubleVect &position, int ncomp) const
Calcule la valeur ponctuelle de la composante "compo" du champ au point de coordonnees pos.
virtual int nb_comp() const
DoubleVect & valeur_a_elem(const DoubleVect &positions, DoubleVect &tab_valeurs, int) const override
provoque une erreur ! doit etre surchargee par les classes derivees
Champ_base & affecter(const Champ_base &ch)
DoubleVect & valeur_aux_compo(const DoubleTab &, DoubleVect &tab_valeurs, int ncomp) const override
Idem que valeur_aux(const DoubleTab &, DoubleTab &), mais calcule uniquement la composante compo du c...
DoubleTab & valeur_aux(const DoubleTab &, DoubleTab &tab_valeurs) const override
Provoque une erreur ! Doit etre surchargee par les classes derivees.
DoubleVect & valeur_a(const DoubleVect &, DoubleVect &tab_valeurs) const override
Calcule les "valeurs" du champ au point de coordonnees "pos".
double valeur_a_elem_compo(const DoubleVect &, int, int ncomp) const override
provoque une erreur ! doit etre surchargee par les classes derivees
DoubleTab & valeur_aux_elems(const DoubleTab &positions, const IntVect &, DoubleTab &tab_valeurs) const override
provoque une erreur ! doit etre surchargee par les classes derivees
DoubleVect & valeur_aux_elems_compo(const DoubleTab &positions, const IntVect &, DoubleVect &tab_valeurs, int ncomp) const override
provoque une erreur ! doit etre surchargee par les classes derivees
double valeur_a_compo(const DoubleVect &x, int ncomp) const override
Calcule la valeur ponctuelle de la composante "compo" du champ au point de coordonnees pos.
_SIZE_ dimension_tot(int) const override
std::enable_if_t< is_default_exec_space< EXEC_SPACE >, View< _TYPE_, _SHAPE_ > > view_rw()
_SIZE_ dimension(int d) const