16#ifndef Champ_Face_PolyMAC_MPFA_included
17#define Champ_Face_PolyMAC_MPFA_included
19#include <Champ_Face_PolyMAC_HFV.h>
20#include <Domaine_PolyMAC_MPFA.h>
21#include <SolveurSys.h>
43 DoubleTab&
valeur_aux_elems(
const DoubleTab& positions,
const IntVect& polys, DoubleTab& result)
const override;
44 DoubleTab&
valeur_aux_elems_passe(
const DoubleTab& positions,
const IntVect& polys, DoubleTab& result)
const override;
45 DoubleVect&
valeur_aux_elems_compo(
const DoubleTab& positions,
const IntVect& polys, DoubleVect& result,
int ncomp)
const override;
56 void update_ve2(DoubleTab& val,
int incr = 0)
const;
61 inline double v_norm(
const DoubleTab& val,
const DoubleTab& val_f,
int e,
int f,
int k,
int l,
double *v_ext,
double *dnv)
const
65 const DoubleTab& nf =
domaine.face_normales();
66 const DoubleVect& fs =
domaine.face_surfaces();
67 double scal = 0, vf = f >= 0 ? val_f(f, k) - (l >= 0 ? val_f(f, l) : 0) : 0, v_temp[3], *v = v_ext ? v_ext : v_temp;
68 for (d = 0; d < D; d++) v[d] = val(nf_tot + D * e + d, k) - (l >= 0 ? val(nf_tot + D * e + d, l) : 0);
70 for (d = 0, scal =
domaine.dot(v, &nf(f, 0)) / fs(f); d < D; d++) v[d] += (vf - scal) * nf(f, d) / fs(f);
71 double nv = sqrt(
domaine.dot(v, v));
73 for (d = 0; d < D; d++) dnv[d] = nv ? (v[d] - (f >= 0 ? vf * nf(f, d) / fs(f) : 0)) / nv : 0;
74#ifdef _COMPILE_AVEC_PGCC
75 if (dnv) dnv[3] = f >= 0 && nv ? vf / (nv+DMINFLOAT) : 0;
77 if (dnv) dnv[3] = f >= 0 && nv ? vf / nv : 0;
82 DoubleTab& valeur_aux_elems_(
const DoubleTab& val_face ,
const DoubleTab& positions,
const IntVect& les_polys, DoubleTab&
valeurs)
const override;
: class Champ_Face_PolyMAC_HFV
: class Champ_Face_PolyMAC_MPFA
Champ_base & affecter_(const Champ_base &) override
const Domaine_PolyMAC_MPFA & domaine_PolyMAC_MPFA() const
DoubleTab & trace(const Frontiere_dis_base &, DoubleTab &, double, int distant) const override
Calcule la trace d'un champ sur une frontiere au temps tps.
DoubleTab & valeur_aux_elems_passe(const DoubleTab &positions, const IntVect &polys, DoubleTab &result) const override
double v_norm(const DoubleTab &val, const DoubleTab &val_f, int e, int f, int k, int l, double *v_ext, double *dnv) const
int fixer_nb_valeurs_nodales(int n) override
DoubleVect & valeur_aux_elems_compo(const DoubleTab &positions, const IntVect &polys, DoubleVect &result, int ncomp) const override
provoque une erreur ! doit etre surchargee par les classes derivees
DoubleTab & valeur_aux_elems(const DoubleTab &positions, const IntVect &polys, DoubleTab &result) const override
provoque une erreur ! doit etre surchargee par les classes derivees
void init_auxiliary_variables() override
void update_ve(DoubleTab &val) const
Interpolates face-based velocity to element centers using a first-order method.
void init_ve2() const
Initializes second-order interpolation coefficients from faces to element centers.
int reprendre(Entree &fich) override
Reprise d'un Objet_U sur un flot d'entree Methode a surcharger.
void update_ve2(DoubleTab &val, int incr=0) const
Applies the second-order interpolation from face velocities to element centers.
const Domaine & domaine() const
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
classe Champ_base Cette classe est la base de la hierarchie des champs.
Class defining operators and methods for all reading operation in an input flow (file,...
classe Frontiere_dis_base Classe representant une frontiere discretisee.