16#ifndef Champ_Q1NC_implementation_included
17#define Champ_Q1NC_implementation_included
19#include <Champ_implementation_divers.h>
20#include <Frontiere_dis_base.h>
32 inline double fonction_forme_3D(
double x,
double y,
double z,
int le_poly,
int face);
37 DoubleVect&
valeur_a_elem(
const DoubleVect& position, DoubleVect& val,
int le_poly)
const override;
39 double valeur_a_elem_compo(
const DoubleVect& position,
int le_poly,
int ncomp)
const override;
41 DoubleTab&
valeur_aux_elems(
const DoubleTab& positions,
const IntVect& les_polys, DoubleTab& valeurs)
const override;
42 DoubleVect&
valeur_aux_elems_compo(
const DoubleTab& positions,
const IntVect& les_polys, DoubleVect& valeurs,
int ncomp)
const override;
63 double fonction_de_forme = 1.;
66 return fonction_de_forme;
76 double fonction_de_forme = 1.;
81 return fonction_de_forme;
94 double fonction_de_forme_normalisee, carre_ksi = ksi * ksi, carre_eta = eta * eta;
100 fonction_de_forme_normalisee = 0.25 - 0.5 * ksi + 0.25 * (carre_ksi - carre_eta);
105 fonction_de_forme_normalisee = 0.25 - 0.5 * eta - 0.25 * (carre_ksi - carre_eta);
110 fonction_de_forme_normalisee = 0.25 + 0.5 * ksi + 0.25 * (carre_ksi - carre_eta);
115 fonction_de_forme_normalisee = 0.25 + 0.5 * eta - 0.25 * (carre_ksi - carre_eta);
120 Cerr <<
"Erreur dans Champ_Q1NC_implementation::fonction_forme_2D : " << finl;
121 Cerr <<
"Un quadrangle n'a pas " << face <<
" faces" << finl;
123 fonction_de_forme_normalisee = -1;
126 return fonction_de_forme_normalisee;
143 double fonction_de_forme_normalisee;
144 double six = 1. / 6., tier = 1. / 3., carre_ksi = ksi * ksi, carre_eta = eta * eta, carre_psi = psi * psi;
149 fonction_de_forme_normalisee = six - 0.5 * ksi + tier * (carre_ksi - carre_eta) + six * (carre_eta - carre_psi);
154 fonction_de_forme_normalisee = six - 0.5 * eta - six * (carre_ksi - carre_eta) + six * (carre_eta - carre_psi);
159 fonction_de_forme_normalisee = six - 0.5 * psi - six * (carre_ksi - carre_eta) - tier * (carre_eta - carre_psi);
164 fonction_de_forme_normalisee = six + 0.5 * ksi + tier * (carre_ksi - carre_eta) + six * (carre_eta - carre_psi);
169 fonction_de_forme_normalisee = six + 0.5 * eta - six * (carre_ksi - carre_eta) + six * (carre_eta - carre_psi);
174 fonction_de_forme_normalisee = six + 0.5 * psi - six * (carre_ksi - carre_eta) - tier * (carre_eta - carre_psi);
179 Cerr <<
"Erreur dans Champ_Q1NC_implementation::fonction_forme_2D : " << finl;
180 Cerr <<
"Un quadrangle n'a pas " << face <<
" faces" << finl;
181 fonction_de_forme_normalisee = -1;
185 return fonction_de_forme_normalisee;
DoubleTab & trace(const Frontiere_dis_base &fr, const DoubleTab &y, DoubleTab &x, int distant) const
DoubleTab & valeur_aux_elems(const DoubleTab &positions, const IntVect &les_polys, DoubleTab &valeurs) const override
DoubleTab & valeur_aux_sommets(const Domaine &, DoubleTab &) const override
static double fonction_forme_3D_normalise(double x, double y, double z, int face)
static double fonction_forme_2D_normalise(double x, double y, int face)
double calcule_valeur_a_elem_compo(double xs, double ys, double zs, int le_poly, int ncomp) const
double valeur_a_elem_compo(const DoubleVect &position, int le_poly, int ncomp) const override
DoubleTab & remplir_coord_noeuds(DoubleTab &positions) const override
DoubleVect & valeur_aux_sommets_compo(const Domaine &, DoubleVect &, int) const override
virtual const Domaine_VEF & domaine_vef() const =0
int remplir_coord_noeuds_et_polys(DoubleTab &positions, IntVect &polys) const override
static DoubleTab & Derivee_fonction_forme_3D_normalise(double u, double v, double w, DoubleTab &DF)
double valeur_a_sommet_compo(int num_som, int le_poly, int ncomp) const
void transforme_coord2D()
void transforme_coord3D()
double fonction_forme_3D(double x, double y, double z, int le_poly, int face)
static DoubleTab & Derivee_fonction_forme_2D_normalise(double u, double v, DoubleTab &DF)
~Champ_Q1NC_implementation() override
DoubleVect & valeur_aux_elems_compo(const DoubleTab &positions, const IntVect &les_polys, DoubleVect &valeurs, int ncomp) const override
double fonction_forme_2D(double x, double y, int le_poly, int face)
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.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.