16#include <Champ_Fonc_Face_PolyMAC_CDO.h>
17#include <Domaine_PolyMAC_CDO.h>
18#include <Champ_Uniforme.h>
50 const DoubleTab& v = ch.
valeurs();
53 int nb_faces = domaine_PolyMAC_CDO.
nb_faces();
54 const DoubleVect& surface = domaine_PolyMAC_CDO.
face_surfaces();
55 const DoubleTab& normales = domaine_PolyMAC_CDO.
face_normales();
59 for (
int num_face = 0; num_face < nb_faces; num_face++)
63 vn += v(0, dir) * normales(num_face, dir);
65 vn /= surface(num_face);
71 const DoubleTab& xv = domaine_PolyMAC_CDO.
xv();
74 for (
int num_face = 0; num_face < nb_faces; num_face++)
78 vn += eval(num_face, dir) * normales(num_face, dir);
80 vn /= surface(num_face);
86 const DoubleTab& xv = domaine_PolyMAC_CDO.
xv();
96 Cerr <<
"Champ_Fonc_Face_PolyMAC_CDO::" <<__func__ <<
" is not coded !" << finl;
102 Cerr <<
"Champ_Fonc_Face_PolyMAC_CDO::" <<__func__ <<
" is not coded !" << finl;
111 const DoubleVect& fs =
domaine.face_surfaces(), &ve =
domaine.volumes();
112 const IntTab& e_f =
domaine.elem_faces(), &f_e =
domaine.face_voisins();
119 for (n = 0; n < N * D; n++) val(e, n) = 0;
120 for (j = 0; j < e_f.
dimension(1) && (f = e_f(e, j)) >= 0; j++)
121 for (d = 0; d < D; d++)
122 for (n = 0; n < N; n++)
123 val(e, N * d + n) += fs(f) / ve(e) * (xv(f, d) - xp(e, d)) * (e == f_e(f, 0) ? 1 : -1) * (inco.
nb_dim() == 1 ? inco(f) : inco(f, n));
128 const IntVect& les_polys,
129 DoubleTab& val)
const
141 if (nb_compo == 1)
Process::exit(
"TRUST error in Champ_Fonc_Face_PolyMAC_CDO::valeur_aux_elems : A scalar field cannot be of Champ_Face type !");
143 DoubleTab ve(0, N * D);
149 for (
int p = 0; p < les_polys.
size(); p++)
150 for (
int r = 0, e = les_polys(p); e < domaine_VF.
nb_elem() && r < N * D; r++)
151 val(p, r) = (e==-1) ? 0. : ve(e, r);
154 for (
int p = 0; p < les_polys.
size(); p++)
155 for (
int e = les_polys(p), d = 0; e < domaine_VF.
nb_elem() && d < D; d++)
156 for (
int n = 0; n < N; n++)
157 val(p, N * d + n) = cha.
valeurs()(nf_tot + D * e + d, n);
158 else Process::exit(
"TRUST error in Champ_Fonc_Face_PolyMAC_CDO::valeur_aux_elems : curious number of faces !");
168 if (nb_compo == 1)
Process::exit(
"TRUST error in Champ_Fonc_Face_PolyMAC_CDO::valeur_aux_faces : A scalar field cannot be of Champ_Face type !");
173 for (
int f = 0; f <
domaine.nb_faces(); f++)
174 for (d = 0; d < D; d++)
175 for (n = 0; n < N; n++) val(f, N * d + n) = cha.
valeurs()(f, n) *
domaine.face_normales(f, d) /
domaine.face_surfaces(f);
187 const IntTab& elem_faces = domaine_VF.
elem_faces();
189 const DoubleTab& ch = cha.
valeurs();
193 Cerr<<
"Champ_Face_implementation::valeur_aux_elems"<<finl;
194 Cerr <<
"A scalar field cannot be of Champ_Face type." << finl;
199 ArrOfDouble s(nb_compo);
200 for(
int rang_poly=0; rang_poly<les_polys.
size(); rang_poly++)
202 int le_poly=les_polys(rang_poly);
209 int nb_faces_elem_max=elem_faces.
dimension(1);
210 for (
int nf=0; nf<nb_faces_elem_max; nf++)
212 int face=elem_faces(le_poly,nf);
217 vale += ch(face) * std::fabs(normales(face, ncomp));
218 s[ncomp] += std::fabs(normales(face, ncomp));
221 val(rang_poly)=vale/s[ncomp];
230 Cerr <<
"Champ_Fonc_Face_PolyMAC_CDO::" <<__func__ <<
" is not coded !" << finl;
236 Cerr <<
"Champ_Fonc_Face_PolyMAC_CDO::" <<__func__ <<
" is not coded !" << finl;
242 Cerr <<
"Champ_Fonc_Face_PolyMAC_CDO::" <<__func__ <<
" is not coded !" << finl;
248 Cerr <<
"Champ_Fonc_Face_PolyMAC_CDO::" <<__func__ <<
" is not coded !" << finl;
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
DoubleTab & valeur_aux_elems(const DoubleTab &positions, const IntVect &polys, DoubleTab &result) const override
provoque une erreur ! doit etre surchargee par les classes derivees
DoubleVect & valeur_a_elem(const DoubleVect &position, DoubleVect &result, int poly) const override
provoque une erreur ! doit etre surchargee par les classes derivees
DoubleTab & valeur_aux_faces(DoubleTab &val) const override
renvoie la valeur du champ aux faces
void mettre_a_jour(double) override
Mise a jour en temps du champ.
DoubleTab & valeur_aux_sommets(const Domaine &domain, DoubleTab &result) const override
renvoie les valeurs aux sommets du Domaine dom
int remplir_coord_noeuds_et_polys(DoubleTab &positions, IntVect &polys) const override
NE FAIT RIEN A surcharger dans les classes derivees.
Champ_base & affecter_(const Champ_base &) override
Affecte un Champ_base dans un Champ_Fonc_base.
void interp_valeurs_elem(const DoubleTab &tab_ch, DoubleTab &val) const
double valeur_a_elem_compo(const DoubleVect &position, int poly, int ncomp) const override
provoque une erreur ! doit etre surchargee par les classes derivees
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
virtual Champ_base & le_champ()
int fixer_nb_valeurs_nodales(int n) override
Fixe le nombre de degres de liberte par composante.
DoubleVect & valeur_aux_sommets_compo(const Domaine &domain, DoubleVect &result, int ncomp) const override
renvoie la compo eme valeur aux sommets de dom.
DoubleTab & remplir_coord_noeuds(DoubleTab &positions) const override
NE FAIT RIEN A surcharger dans les classes derivees.
classe Champ_Fonc_base Classe de base des champs qui sont fonction d'une grandeur calculee
virtual const Domaine & domaine() const
virtual const Domaine_VF & domaine_vf() const
void mettre_a_jour(double temps) override
Mise a jour en temps du champ.
virtual void creer_tableau_distribue(const MD_Vector &, RESIZE_OPTIONS=RESIZE_OPTIONS::COPY_INIT)
const Domaine_dis_base & domaine_dis_base() const override
virtual DoubleTab & valeurs()=0
Champ_base()
Constructeur par defaut d'un Champ_base.
virtual DoubleTab & valeur_aux(const DoubleTab &positions, DoubleTab &valeurs) const
Provoque une erreur ! Doit etre surchargee par les classes derivees.
virtual void creer_tableau_elements(Array_base &, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) const
creation d'un tableau parallele de valeurs aux elements.
virtual const DoubleVect & face_surfaces() const
int nb_faces() const
renvoie le nombre global de faces.
const MD_Vector & md_vector_faces() const
int nb_faces_tot() const
renvoie le nombre total de faces.
virtual double face_normales(int face, int comp) const
double xv(int num_face, int k) const
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
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
const Nom & le_nom() const override
Renvoie le nom du champ.
virtual int nb_comp() const
: Cette classe est un OWN_PTR mais l'objet pointe est partage entre plusieurs
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
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 void abort()
Routine de sortie de Trio-U sur une erreur abort().
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
_SIZE_ dimension_tot(int) const override
_SIZE_ dimension(int d) const