16#include <Domaine_Cl_DG.h>
17#include <Domaine_DG.h>
19#include <Poly_geom_base.h>
20#include <Array_tools.h>
21#include <TRUSTLists.h>
30#include <Quadri_poly.h>
31#include <Tetra_poly.h>
33#include <Interprete_bloc.h>
34#include <Quadrature_base.h>
35#include <Quadrature_Ord1_Polygone.h>
36#include <Quadrature_Ord3_Polygone.h>
37#include <Quadrature_Ord5_Polygone.h>
38#include <BasisFunction.h>
39#include <Champ_Elem_DG.h>
61 quad1_ = std::make_shared<Quadrature_Ord1_Polygone>(*
this);
62 quad3_ = std::make_shared<Quadrature_Ord3_Polygone>(*
this);
63 quad5_ = std::make_shared<Quadrature_Ord5_Polygone>(*
this);
71 int elem1, elem2, size_stencil, face;
73 std::vector<int> elem_stencil;
75 for (
int nelem = 0 ; nelem < nelem_tot ; nelem++)
78 elem_stencil.push_back(nelem);
79 for (
int num_face = 0 ; num_face < nb_faces_max; num_face++)
87 if (elem1 != nelem && elem1 != -1)
88 elem_stencil.push_back(elem1);
89 else if (elem2 != -1 && elem2 != nelem)
90 elem_stencil.push_back(elem2);
92 std::sort(elem_stencil.begin(), elem_stencil.end());
94 size_stencil = (int)elem_stencil.size();
95 for (
int k = 0; k < size_stencil; k++)
165 auto tk = std::make_shared<BasisFunction>();
167 it =
bfunc_maps_.emplace(key, std::move(tk)).first;
182 DoubleTab val_elem(nb_pts_integ_max);
189 const int nb_bfunc = bfunc.
nb_bfunc();
190 DoubleTab fbase(nb_bfunc, nb_pts_integ_max);
192 for (
int i = 0; i < nelem; i++)
197 for (
int l =0; l<nb_bfunc; l++)
198 val_elem(k) += val_source(i*nb_bfunc+l)*fbase(l,k);
200 val_elem(k) = std::fabs(val_elem(k));
207 for (
int i = 0; i < nelem; i++)
210 val_elem(k) = std::fabs(val_source(i*nb_pts_integ_max+k));
227 DoubleTab val_elem(nb_pts_integ_max);
233 const int nb_bfunc = bfunc.
nb_bfunc();
234 DoubleTab fbase(nb_bfunc, nb_pts_integ_max);
236 for (
int i = 0; i < nelem; i++)
241 for (
int l =0; l<nb_bfunc; l++)
242 val_elem(k) += val_source(i*nb_bfunc+l)*fbase(l,k);
244 val_elem(k) = val_elem(k)*val_elem(k);
251 for (
int i = 0; i < nelem; i++)
254 val_elem(k) = val_source(i*nb_pts_integ_max+k)*val_source(i*nb_pts_integ_max+k);
271 DoubleTab val_elem(nb_pts_integ_max);
277 const int nb_bfunc = bfunc.
nb_bfunc();
278 DoubleTab fbase(nb_bfunc, nb_pts_integ_max);
280 for (
int i = 0; i < nelem; i++)
286 for (
int l =0; l<nb_bfunc; l++)
287 val_elem(k) += val_source(i*nb_bfunc+l)*fbase(l,k);
295 for (
int i = 0; i < nelem; i++)
299 val_elem(k) = val_source(i*nb_pts_integ_max+k);
315 DoubleTab val_elem(nb_pts_integ_max);
320 const int nb_bfunc = bfunc.
nb_bfunc();
321 DoubleTab fbase(nb_bfunc, nb_pts_integ_max);
323 for (
int i = 0; i < nelem; i++)
329 for (
int l =0; l<nb_bfunc; l++)
330 val_elem(k) += val_source(i*nb_bfunc+l)*fbase(l,k);
331 val_elem(k) *= porosity(i);
334 volume +=
volumes(i)*porosity(i);
339 for (
int i = 0; i < nelem; i++)
343 val_elem(k) = val_source(i*nb_pts_integ_max+k)*porosity(i);
345 volume +=
volumes(i)*porosity(i);
370 int nb_elem_face = 3;
371 for (
int i_f = 0; i_f < nb_elem_face; i_f++)
385 for (
int f = 0; f < nsom; f++)
388 int s1 = face_som(f_e,0);
389 int s2 = face_som(f_e,1);
396 per_(e)+= std::sqrt((xs(s1,0) - xs(s2,0)) * (xs(s1,0) - xs(s2,0)) + (xs(s1,1) - xs(s2,1)) * (xs(s1,1) - xs(s2,1)));
399 for (
int loc_vert2 = f+1; loc_vert2 < nsom; loc_vert2++)
400 h_e=std::max(h_e,std::sqrt((xs(vert_elems(e, f),0) - xs(vert_elems(e, loc_vert2),0)) * (xs(vert_elems(e, f),0) - xs(vert_elems(e, loc_vert2),0)) + (xs(vert_elems(e, f),1) - xs(vert_elems(e, loc_vert2),1)) * (xs(vert_elems(e, f),1) - xs(vert_elems(e, loc_vert2),1))));
415 for (
int e = 0; e < this->
nb_elem(); e++)
437 bool only_tri_quad=
true;
439 int nb_f_elem_max=elem_face.
dimension(1);
445 if ((nb_f_elem_max == 3) || (elem_face(e, 3) == -1))
449 else if ((nb_f_elem_max == 4) || (elem_face(e, 4) == -1))
456 for (; i_f < nb_f_elem_max; i_f++)
458 if (elem_face(e, i_f) == -1)
464 if (i_f == nb_f_elem_max)
473 return only_tri_quad;
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
DoubleTab_t & les_sommets()
std::shared_ptr< Quadrature_base > quad3_
std::shared_ptr< Quadrature_base > quad1_
void init_equiv() const override
New feature in Trust, not yet available in DG, ask Elie.
bool build_nfaces_elem_()
Create an array that store the number of faces per element.
void get_ind_integ_points(IntTab &ind_integ_points) const override
Create the indirection that give for each cell, the index number of the first integration point.
int get_max_nb_integ_points() const override
void discretiser() override
Compute mesh parameters, allocate quadratures and link them to the domain.
double compute_L1_norm(const DoubleVect &val_source, const bool basis_function, const int order) const override
Compute L_1 norm.
std::map< BasisFunction_Key, std::shared_ptr< BasisFunction > > bfunc_maps_
void set_default_order(int order)
Set the global default order.
void get_nb_integ_points(IntTab &nb_integ_points) const override
Give an IntTab that contains the number of integration points for each cell.
void calculer_h_carre() override
Should disappear, as well as h_carre, as we have dia_, this come with a refactoring of Domaine_Poly_b...
void compute_mesh_param()
Compute geometric quantities used for the computation TODO :: Put this in the Domain_Poly_base and de...
std::shared_ptr< Quadrature_base > quad5_
double compute_L2_norm(const DoubleVect &val_source, const bool basis_function, const int order) const override
Compute L_2 norm.
void compute_average(const DoubleVect &val_source, double &sum, double &average, const bool basis_function, const int order) const override
Compute average.
const Quadrature_base & get_quadrature() const
void get_position(DoubleTab &positions) const override
Compute positions of the quadrature points.
void compute_average_porosity(const DoubleVect &val_source, const DoubleVect &porosity, double &sum, double &average, const bool basis_function, const int order) const override
Compute average with porosity.
const BasisFunction & get_basisFunction(int order) const
void discretiser() override
virtual const DoubleVect & face_surfaces() const
IntTab & face_sommets() override
renvoie le tableau de connectivite faces/sommets.
IntTab & elem_faces()
renvoie le tableau de connectivite element/faces
int elem_faces(int i, int j) const
renvoie le numero de le ieme face de la maille num_elem la facon dont ces faces sont numerotees est
IntTab & face_voisins() override
renvoie le tableaux des volumes des connectivites face elements cf au dessus.
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
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 double mp_max(double)
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
int nb_pts_integ(int e) const
const DoubleTab & get_integ_points() const
int nb_pts_integ_max() const
const IntTab & get_tab_nb_pts_integ() const
double compute_integral_on_elem(int num_elem, Parser_U &parser) const
const IntTab & get_ind_pts_integ() const
Classe de base des flux de sortie.
_SIZE_ dimension(int d) const