16#ifndef TRUSTChamp_Don_generique_included
17#define TRUSTChamp_Don_generique_included
19#include <Champ_Don_base.h>
20#include <Champ_Uniforme.h>
21#include <Parser_Eval.h>
24#include <Interprete.h>
26enum class Champ_Don_Type { XYZ , TXYZ , LU };
28template <Champ_Don_Type _TYPE_>
35 double valeur_a_compo(
const DoubleVect& position,
int ncomp)
const override;
40 return mon_domaine.valeur();
52 static constexpr bool IS_LU = (_TYPE_ == Champ_Don_Type::LU);
63 DoubleVect&
valeur_a(
const DoubleVect& position, DoubleVect& vals)
const override
65 return valeur_a_<_TYPE_>(position, vals);
68 DoubleVect&
valeur_a_elem(
const DoubleVect& position, DoubleVect& vals,
int le_poly)
const override
70 return valeur_a_elem_<_TYPE_>(position, vals, le_poly);
75 return valeur_a_elem_compo_<_TYPE_>(position, le_poly, ncomp);
78 DoubleTab&
valeur_aux(
const DoubleTab& positions, DoubleTab& vals)
const override
80 return valeur_aux_<_TYPE_>(positions, vals);
83 DoubleVect&
valeur_aux_compo(
const DoubleTab& positions, DoubleVect& vals,
int ncomp)
const override
85 return valeur_aux_compo_<_TYPE_>(positions, vals, ncomp);
88 DoubleTab&
valeur_aux_elems(
const DoubleTab& positions,
const IntVect& les_polys, DoubleTab& vals)
const override
90 return valeur_aux_elems_<_TYPE_>(positions, les_polys, vals);
93 DoubleVect&
valeur_aux_elems_compo(
const DoubleTab& positions,
const IntVect& les_polys, DoubleVect& vals,
int ncomp)
const override
95 return valeur_aux_elems_compo_<_TYPE_>(positions,les_polys,vals,ncomp);
106 template<Champ_Don_Type T = _TYPE_> std::enable_if_t<T != Champ_Don_Type::LU, DoubleVect&>
107 valeur_a_(
const DoubleVect& position, DoubleVect&
valeurs)
const;
109 template<Champ_Don_Type T = _TYPE_> std::enable_if_t<T == Champ_Don_Type::LU, DoubleVect&>
110 valeur_a_(
const DoubleVect& position, DoubleVect&
valeurs)
const;
112 template<Champ_Don_Type T = _TYPE_> std::enable_if_t<T != Champ_Don_Type::LU, DoubleVect&>
113 valeur_a_elem_(
const DoubleVect& position, DoubleVect&
valeurs,
int le_poly)
const;
115 template<Champ_Don_Type T = _TYPE_> std::enable_if_t<T == Champ_Don_Type::LU, DoubleVect&>
116 valeur_a_elem_(
const DoubleVect& position, DoubleVect&
valeurs,
int le_poly)
const;
118 template <Champ_Don_Type T = _TYPE_> std::enable_if_t<T != Champ_Don_Type::TXYZ, double>
119 valeur_a_elem_compo_(
const DoubleVect& position,
int le_poly,
int ncomp)
const;
121 template <Champ_Don_Type T = _TYPE_> std::enable_if_t<T == Champ_Don_Type::TXYZ, double>
122 valeur_a_elem_compo_(
const DoubleVect& position,
int le_poly,
int ncomp)
const;
124 template <Champ_Don_Type T = _TYPE_> std::enable_if_t<T != Champ_Don_Type::LU, DoubleTab&>
125 valeur_aux_(
const DoubleTab& positions, DoubleTab&
valeurs)
const;
127 template<Champ_Don_Type T = _TYPE_> std::enable_if_t<T == Champ_Don_Type::LU, DoubleTab&>
128 valeur_aux_(
const DoubleTab& positions, DoubleTab&
valeurs)
const;
130 template<Champ_Don_Type T = _TYPE_> std::enable_if_t<T != Champ_Don_Type::LU, DoubleVect&>
131 valeur_aux_compo_(
const DoubleTab& positions, DoubleVect&
valeurs,
int ncomp)
const;
133 template<Champ_Don_Type T = _TYPE_> std::enable_if_t<T == Champ_Don_Type::LU, DoubleVect&>
134 valeur_aux_compo_(
const DoubleTab& positions, DoubleVect&
valeurs,
int ncomp)
const;
136 template<Champ_Don_Type T = _TYPE_> std::enable_if_t<T != Champ_Don_Type::LU, DoubleTab&>
137 valeur_aux_elems_(
const DoubleTab& positions,
const IntVect& les_polys, DoubleTab&
valeurs)
const;
139 template<Champ_Don_Type T = _TYPE_> std::enable_if_t<T == Champ_Don_Type::LU, DoubleTab&>
140 valeur_aux_elems_(
const DoubleTab& positions,
const IntVect& les_polys, DoubleTab&
valeurs)
const;
142 template<Champ_Don_Type T = _TYPE_> std::enable_if_t<T != Champ_Don_Type::LU, DoubleVect&>
143 valeur_aux_elems_compo_(
const DoubleTab& positions,
const IntVect& les_polys, DoubleVect&
valeurs,
int ncomp)
const;
145 template<Champ_Don_Type T = _TYPE_> std::enable_if_t<T == Champ_Don_Type::LU, DoubleVect&>
146 valeur_aux_elems_compo_(
const DoubleTab& positions,
const IntVect& les_polys, DoubleVect&
valeurs,
int ncomp)
const;
149#include <TRUSTChamp_Don_generique.tpp>
class Champ_Don_base base class of Given Fields (not calculated)
Champ_base & affecter_(const Champ_base &) override
Causes an error! To be overridden by derived classes! Not a pure virtual for development convenience!
DoubleTab & valeurs() override
Overrides Champ_base::valeurs() Returns the array of values.
virtual DoubleTab & valeurs()=0
Champ_base()
Default constructor of a Champ_base.
static Objet_U & objet(const Nom &)
See Interprete_bloc::objet_global(). BM: the Interprete class is not the best place for this.
class Nom: a character string for naming TRUST objects.
Parser_Eval class - Evaluates the values taken by an analytic function.
Base class for output streams.
void mettre_a_jour(double) override
Time update.
DoubleTab & valeur_aux_elems(const DoubleTab &positions, const IntVect &les_polys, DoubleTab &vals) const override
Causes an error! Must be overridden by derived classes.
DoubleVect & valeur_a(const DoubleVect &position, DoubleVect &vals) const override
Computes the "values" of the field at the point with coordinates "pos".
Champ_base & affecter_(const Champ_base &ch) override
Causes an error! To be overridden by derived classes! Not a pure virtual for development convenience!
Domaine & interprete_get_domaine(const Nom &nom)
Champ_base & affecter(const Champ_base &ch)
DoubleVect & valeur_aux_elems_compo(const DoubleTab &positions, const IntVect &les_polys, DoubleVect &vals, int ncomp) const override
Causes an error! Must be overridden by derived classes.
OBS_PTR(Domaine) mon_domaine
void mettre_a_jour_positions(DoubleTab &)
Sortie & printOn(Sortie &os) const override
Writes the object to an output stream. Virtual method to override.
double valeur_a_compo(const DoubleVect &position, int ncomp) const override
Computes the point value of the component "compo" of the field at the point with coordinates pos.
DoubleVect & valeur_aux_compo(const DoubleTab &positions, DoubleVect &vals, int ncomp) const override
Same as valeur_aux(const DoubleTab &, DoubleTab &), but computes only the component compo of the fiel...
double valeur_a_elem_compo(const DoubleVect &position, int le_poly, int ncomp) const override
Causes an error! Must be overridden by derived classes.
DoubleTab & valeur_aux(const DoubleTab &positions, DoubleTab &vals) const override
Causes an error! Must be overridden by derived classes.
DoubleVect & valeur_a_elem(const DoubleVect &position, DoubleVect &vals, int le_poly) const override
Causes an error! Must be overridden by derived classes.