16#include <Champ_Elem_DG.h>
17#include <TRUSTTab_parts.h>
18#include <Domaine_Cl_dis_base.h>
19#include <Domaine_DG.h>
21#include <Matrix_tools.h>
22#include <Array_tools.h>
23#include <BasisFunction.h>
40 const DoubleTab& coord=
domaine.coord_sommets();
41 const int nb_som =
domaine.nb_som();
42 const DoubleTab& val =
valeurs();
45 for (som=0; som<nb_som; som++)
48 os << coord(som,0) <<
" " << coord(som,1) <<
" " << coord(som,2) <<
" " ;
50 os << coord(som,0) <<
" " << coord(som,1) <<
" " ;
52 os << val(som) << finl;
54 os << val(som,ncomp) << finl;
57 Cout <<
"Champ_Elem_DG::imprime FIN >>>>>>>>>> " << finl;
83 const DoubleVect& volume =
domaine.volumes();
99 int nb_elem =
domaine.nb_elem();
101 DoubleTab product(nb_pts_integ_max);
102 int nb_pts_integ = integ_points.
dimension(0);
103 DoubleTab values(nb_pts_integ,dim);
107 DoubleTab fbase(
nb_bfunc_, nb_pts_integ_max);
111 for (
int num_elem = 0; num_elem < nb_elem; num_elem++)
117 for (
int d =0; d<dim; d++)
122 product(k) = values(quad.
ind_pts_integ(num_elem) + k,d) * fbase(fb, k);
162 les_polys.
resize(tab_valeurs.
dimension(0), RESIZE_OPTIONS::NOCOPY_NOINIT);
164 domaine.chercher_elements(positions, les_polys);
167 const DoubleTab& values = ch_base.
valeurs();
168 int nb_polys = les_polys.
size();
174 DoubleTab fbase(
nb_bfunc_,nb_pts_integ_max);
175 DoubleTab coords(nb_pts_integ_max,dim);
176 for (
int i = 0; i < nb_polys; i++)
178 int cell = les_polys(i);
184 for (
int k = 0; k<dim; k++)
192 tab_valeurs(i,j) = 0.;
194 tab_valeurs(i,j) += values(cell,l) * fbase(l,j);
206 const int nb_elem =
domaine.nb_elem();
217 const DoubleTab& values = ch_base.
valeurs();
219 assert(tab_valeurs.
dimension(0) == nb_elem && tab_valeurs.
dimension(1) == dim*nb_pts_integ_max );
221 DoubleTab fbase(
nb_bfunc_,nb_pts_integ_max);
223 for (
int i = 0; i < nb_elem; i++)
227 for (
int d =0; d<dim; d++)
233 tab_valeurs(i,j+d*nb_pts_integ_max) += values(i,l+d*
nb_bfunc_) * fbase(l,j);
246 const DoubleVect& volume =
domaine.volumes();
255 const DoubleTab& values = ch_base.
valeurs();
256 int nb_polys = polys.
size();
262 ToDo_Kokkos(
"critical");
264 DoubleTab fbase(
nb_bfunc_, nb_pts_integ_max);
265 DoubleTab product(nb_pts_integ_max);
267 for (
int i = 0; i < nb_polys; i++)
276 for (
int j = 0; j<ndim; j++)
281 product(k) += values(cell,j*
nb_bfunc_ + l) * fbase(l,k);
284 result(i,j) /= volume(cell);
Manages the local polynomial basis functions for Discontinuous Galerkin elements.
void eval_bfunc(const Quadrature_base &quad, const int &nelem, DoubleTab &fbasis) const
Evaluates all basis functions at the element quadrature points.
const int & nb_bfunc() const
const int & get_default_quadrature_order() const
const Matrice_Dense eval_invMassMatrix(const Quadrature_base &quad, const int &nelem) const
Computes the inverse of the local L2 mass matrix for element nelem.
DoubleTab & eval_elem(DoubleTab &valeurs) const override
int fixer_nb_valeurs_nodales(int n) override
Champ_base & affecter_(const Champ_base &ch) override
int imprime(Sortie &, int) const override
DoubleTab & valeur_aux_elems(const DoubleTab &positions, const IntVect &les_polys, DoubleTab &valeurs) const override
provoque une erreur ! doit etre surchargee par les classes derivees
void associer_domaine_dis_base(const Domaine_dis_base &) override
DoubleTab & valeur_aux(const DoubleTab &positions, DoubleTab &valeurs) const override
Provoque une erreur ! Doit etre surchargee par les classes derivees.
: class Champ_Inc_P0_base
Champ_base & le_champ() override
const Domaine & domaine() const
virtual void creer_tableau_distribue(const MD_Vector &, RESIZE_OPTIONS=RESIZE_OPTIONS::COPY_INIT)
int lire_donnees(Entree &)
Lit les valeurs du champs a partir d'un flot d'entree.
const Domaine_dis_base & domaine_dis_base() const override
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
virtual DoubleTab & valeurs()=0
Champ_base()
Constructeur par defaut d'un Champ_base.
virtual DoubleTab & valeur_aux(const DoubleTab &positions, DoubleTab &valeurs) const
Provoque une erreur ! Doit etre surchargee par les classes derivees.
const Quadrature_base & get_quadrature(int order) const
const BasisFunction & get_basisFunction(int order) const
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
const Nom & le_nom() const override
Renvoie le nom du champ.
bool is_vectorial() const
DoubleVect & ajouter_multvect_(const DoubleVect &x, DoubleVect &r) const override
Operation de multiplication-accumulation (saxpy) matrice vecteur.
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
static int Nb_col_from_order(const int order)
static int Get_order_for(const Nom &n)
int ind_pts_integ(int e) const
int nb_pts_integ(int e) const
const DoubleTab & get_integ_points() const
int nb_pts_integ_max() const
double compute_integral_on_elem(int num_elem, Parser_U &parser) const
Classe de base des flux de sortie.
void ref_array(TRUSTArray< _TYPE_, _SIZE_ > &, _SIZE_ start=0, _SIZE_ sz=-1) override
_SIZE_ dimension_tot(int) const override
_SIZE_ dimension(int d) const
void resize(_SIZE_, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")