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 &)
Projection du champ P1NC "cha" sur l'espace des champs P1.
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
classe Frontiere_dis_base Classe representant une frontiere discretisee.
const Frontiere & frontiere() const
Renvoie la frontiere geometrique associee.
Classe Matrice_Morse_Sym Represente une matrice M (creuse) symetrique stockee au format Morse.
Classe Matrice Classe generique de la hierarchie des matrices.
class SolveurSys Un SolveurSys represente n'importe qu'elle classe
Classe de base des flux de sortie.
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")