16#ifndef Champ_P1NC_implementation_included
17#define Champ_P1NC_implementation_included
19#include <Champ_implementation_divers.h>
20#include <Champ_implementation_P1.h>
21#include <Frontiere_dis_base.h>
22#include <Matrice_Morse_Sym.h>
23#include <Equation_base.h>
24#include <SolveurSys.h>
39 KOKKOS_INLINE_FUNCTION
double fonction_forme_2D_v(
double x,
double y,
int le_poly,
int face, CIntTabView sommet_poly, CDoubleTabView coord)
const
41 return 1 - 2 * coord_barycentrique_P1_triangle(sommet_poly, coord, x, y, le_poly, face);
44 KOKKOS_INLINE_FUNCTION
double fonction_forme_3D_v(
double x,
double y,
double z,
int le_poly,
int face, CIntTabView sommet_poly, CDoubleTabView coord)
const
46 return 1 - 3 * coord_barycentrique_P1_tetraedre(sommet_poly, coord, x, y, z, le_poly, face);
49 inline double fonction_forme_2D(
double x,
double y,
int le_poly,
int face,
const IntTab& sommet_poly,
const DoubleTab& coord)
const
51 return 1 - 2 * coord_barycentrique_P1_triangle(sommet_poly, coord, x, y, le_poly, face);
54 inline double fonction_forme_3D(
double x,
double y,
double z,
int le_poly,
int face,
const IntTab& sommet_poly,
const DoubleTab& coord)
const
56 return 1 - 3 * coord_barycentrique_P1_tetraedre(sommet_poly, coord, x, y, z, le_poly, face);
59 inline double coord_barycentrique(
const IntTab& sommet_poly,
const DoubleTab& coord,
double x,
double y,
int le_poly,
int face)
const
61 return coord_barycentrique_P1_triangle(sommet_poly, coord, x, y, le_poly, face);
64 inline double coord_barycentrique(
const IntTab& sommet_poly,
const DoubleTab& coord,
double x,
double y,
double z,
int le_poly,
int face)
const
66 return coord_barycentrique_P1_tetraedre(sommet_poly, coord, x, y, z, le_poly, face);
70 DoubleVect&
valeur_a_elem(
const DoubleVect& position, DoubleVect& val,
int le_poly)
const override;
72 double valeur_a_elem_compo(
const DoubleVect& position,
int le_poly,
int ncomp)
const override;
76 DoubleTab&
valeur_aux_elems(
const DoubleTab& positions,
const IntVect& les_polys, DoubleTab& valeurs)
const override;
78 DoubleVect&
valeur_aux_elems_compo(
const DoubleTab& positions,
const IntVect& les_polys, DoubleVect& valeurs,
int ncomp)
const override ;
85 KOKKOS_INLINE_FUNCTION
86 double valeur_a_sommet_compo(
int num_som,
int num_elem,
int ncomp, CIntTabView elem_faces, CIntTabView sommet_elem, CDoubleTabView ch)
const;
93 IntVect& polys)
const override;
int fixer_nb_valeurs_nodales(int)
double valeur_a_sommet_compo(int num_som, int le_poly, int ncomp) const
const SolveurSys & get_solveur_H1() const
DoubleTab & valeur_aux_sommets(const Domaine &dom, DoubleTab &ch_som) const override
virtual const Domaine_VEF & domaine_vef() const =0
Matrice_Morse_Sym MatP1NC2P1_L2
const SolveurSys & get_solveur_L2() const
double valeur_a_elem_compo(const DoubleVect &position, int le_poly, int ncomp) const override
friend DoubleTab & valeur_P1_H1(const Champ_P1NC &, const Domaine &, DoubleTab &)
int imprime_P1NC(Sortie &, int) const
DoubleTab & trace(const Frontiere_dis_base &fr, const DoubleTab &y, DoubleTab &x, int distant) const
DoubleVect & valeur_aux_elems_compo(const DoubleTab &positions, const IntVect &les_polys, DoubleVect &valeurs, int ncomp) const override
DoubleTab & remplir_coord_noeuds(DoubleTab &positions) const override
double coord_barycentrique(const IntTab &sommet_poly, const DoubleTab &coord, double x, double y, double z, int le_poly, int face) const
DoubleVect & valeur_aux_elems_compo_smooth(const DoubleTab &positions, const IntVect &les_polys, DoubleVect &valeurs, int ncomp)
double coord_barycentrique(const IntTab &sommet_poly, const DoubleTab &coord, double x, double y, int le_poly, int face) const
double fonction_forme_3D(double x, double y, double z, int le_poly, int face, const IntTab &sommet_poly, const DoubleTab &coord) const
friend int construire_secmem_L2(Champ_P1NC &, const Domaine &, DoubleTab &)
const Matrice_Morse_Sym & get_MatP1NC2P1_H1() const
int filtrer_L2_deja_appele_
const Matrice_Morse_Sym & get_MatP1NC2P1_L2_H1() const
Matrice_Morse_Sym MatP1NC2P1_L2_H1
Champ_P1NC_implementation()
void dimensionner_Mat_Bloc_Morse_Sym(Matrice &matrice_tmp)
DoubleVect & valeur_aux_sommets_compo(const Domaine &dom, DoubleVect &ch_som, int ncomp) const override
DoubleVect & ch_som_vect()
void filtrer_H1(DoubleTab &) const
int remplir_coord_noeuds_et_polys(DoubleTab &positions, IntVect &polys) const override
void Mat_Morse_to_Mat_Bloc(Matrice &matrice_tmp)
void filtrer_resu(DoubleTab &) const
DoubleTab & valeur_aux_elems_smooth(const DoubleTab &positions, const IntVect &les_polys, DoubleTab &valeurs)
friend int construire_MatP1NC2P1_H1(Champ_P1NC &, const Domaine &, double &)
KOKKOS_INLINE_FUNCTION double fonction_forme_3D_v(double x, double y, double z, int le_poly, int face, CIntTabView sommet_poly, CDoubleTabView coord) const
friend int construire_MatP1NC2P1_L2(Champ_P1NC &, const Domaine &)
DoubleTab & valeur_aux_centres_de_gravite(const Domaine &, DoubleTab &valeurs) const
Computes values at the centers of gravity for a P1NC field.
DoubleTab & valeur_aux_elems(const DoubleTab &positions, const IntVect &les_polys, DoubleTab &valeurs) const override
friend int test(Champ_P1NC &, const Domaine &)
friend DoubleTab & valeur_P1_L2(Champ_P1NC &, const Domaine &)
Project the P1NC field "cha" onto the P1 field space.
Matrice_Morse_Sym MatP1NC2P1_H1
const SolveurSys & get_solveur_L2_H1() const
const Matrice_Morse_Sym & get_MatP1NC2P1_L2() const
Matrice MatP1NC2P1_L2_Parallele
friend int construire_secmem_H1(Champ_P1NC &, const Domaine &, DoubleTab &, const double)
friend DoubleTab & valeur_P1_L2_H1(Champ_P1NC &, const Domaine &, DoubleTab &)
KOKKOS_INLINE_FUNCTION double fonction_forme_2D_v(double x, double y, int le_poly, int face, CIntTabView sommet_poly, CDoubleTabView coord) const
~Champ_P1NC_implementation() override
void filtrer_L2(DoubleTab &) const
double fonction_forme_2D(double x, double y, int le_poly, int face, const IntTab &sommet_poly, const DoubleTab &coord) const
DoubleVect & valeur_a_elem(const DoubleVect &position, DoubleVect &val, int le_poly) const override
virtual void trace_face_distant(const DoubleTab &, DoubleTab &) const
virtual void trace_face_local(const DoubleTab &, DoubleTab &) const
class Frontiere_dis_base Class representing a discretized boundary.
const Frontiere & frontiere() const
Returns the associated geometric boundary.
Matrice_Morse_Sym class - Represents a sparse symmetric matrix M stored in Morse format.
Matrice class - Generic class in the matrix hierarchy.
class SolveurSys A SolveurSys represents any class
Base class for output streams.
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")