16#include <Terme_Source_Acceleration_VEF_Face.h>
17#include <Domaine_VEF.h>
18#include <Domaine_Cl_VEF.h>
19#include <Periodique.h>
20#include <Navier_Stokes_std.h>
21#include <Champ_Fonc_P0_VEF.h>
22#include <Milieu_base.h>
49 Cerr <<
"Terme_Source_Acceleration_VEF_Face::associer_domaines" << finl;
66static void TSAVEF_ajouter_liste_faces(
const int premiere_face,
const int derniere_face,
67 const DoubleVect& volumes_entrelaces,
68 const DoubleVect& volumes_elements,
69 const DoubleVect& porosite_surf,
70 const IntTab& face_voisins,
72 const DoubleTab& terme_source,
79 const DoubleTab *
const rho_elem =
80 (bool(ref_rho)) ? &(ref_rho->
valeurs()) : 0;
83 for (num_face=premiere_face; num_face<derniere_face; num_face++)
85 const double vol = volumes_entrelaces(num_face)*porosite_surf(num_face);
86 double src[3] = {0., 0., 0.};
89 for (j = 0; j < dim; j++)
90 src[j] = terme_source(num_face, j);
97 const int elem0 = face_voisins(num_face,0);
98 const int elem1 = face_voisins(num_face,1);
99 double rho0 = 0, rho1 = 0, vol0 = 0, vol1 = 0;
102 rho0 = (*rho_elem)(elem0);
103 vol0 = volumes_elements(elem0);
107 rho1 = (*rho_elem)(elem1);
108 vol1 = volumes_elements(elem1);
110 rho = (rho0 * vol0 + rho1 * vol1) / (vol0 + vol1);
113 for (j = 0; j < dim; j++)
115 double a = src[j] * rho;
116 s_face(num_face, j) = a;
118 resu(num_face, j) += a * vol;
139 const Domaine_VF& domaine = le_dom_VEF_.valeur();
141 const IntTab& face_voisins = domaine.face_voisins();
143 const DoubleVect& volumes_entrelaces = domaine.volumes_entrelaces();
152 DoubleTab acceleration_aux_faces(nb_faces, dim);
157 for (
int n_bord = 0; n_bord < domaine.nb_front_Cl(); n_bord++)
165 const int nfin = ndeb + le_bord.
nb_faces();
167 TSAVEF_ajouter_liste_faces(ndeb, nfin,
173 acceleration_aux_faces,
180 const int ndeb = domaine.premiere_face_int();
181 const int nfin = domaine.nb_faces();
182 TSAVEF_ajouter_liste_faces(ndeb, nfin,
188 acceleration_aux_faces,
196 for (
int n_bord=0; n_bord<domaine.nb_front_Cl(); n_bord++)
203 int nb_faces_bord=le_bord.
nb_faces();
204 ArrOfInt fait(nb_faces_bord);
206 for (
int ind_face=0; ind_face<nb_faces_bord; ind_face++)
208 if (fait[ind_face] == 0)
212 fait[ind_face_associee] = 1;
213 int face = le_bord.
num_face(ind_face);
214 int face_associee = le_bord.
num_face(ind_face_associee);
215 for (
int comp=0; comp<nb_comp; comp++)
217 double val = 0.5*(resu(face_associee, comp)+resu(face, comp));
218 resu(face, comp)=resu(face_associee, comp) = val;
253 Cerr <<
"Erreur dans Terme_Source_Acceleration_VEF_Face::associer_champ_rho" << finl;
254 Cerr <<
" Le champ de masse volumique doit etre de type Champ_Fonc_P0_VEF" << finl;
255 Cerr <<
" Type du champ associe : " << champ_rho.
que_suis_je() << finl;
256 Cerr <<
" Nom du champ associe : " << champ_rho.
le_nom() << finl;
260 ref_rho_ = champ_rho;
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
virtual DoubleTab & valeurs()=0
classe Champ_base Cette classe est la base de la hierarchie des champs.
classe Cond_lim Classe generique servant a representer n'importe quelle classe
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
Class defining operators and methods for all reading operation in an input flow (file,...
virtual const Milieu_base & milieu() const =0
const Nom & le_nom() const override
Renvoie le nom du champ.
int num_premiere_face() const
int num_face(const int) const
DoubleVect & porosite_face()
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
const Champ_Inc_base & inconnue() const override
Renvoie la vitesse (champ inconnue de l'equation) (version const).
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.
classe Periodique Cette classe represente une condition aux limites periodique.
int face_associee(int i) const
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
static int je_suis_maitre()
renvoie 1 si on est sur le processeur maitre du groupe courant (c'est a dire me() == 0),...
Classe de base des flux de sortie.
_SIZE_ dimension(int d) const
Terme source d'acceleration specialise pour la discretisation VDF.
const DoubleTab & calculer_vitesse_faces(DoubleTab &v_faces_stockage) const override
Calcul du champ de vitesse trois composantes aux faces a partir du champ de vitesse aux faces de eq_h...
void associer_domaines(const Domaine_dis_base &, const Domaine_Cl_dis_base &) override
Methode appelee par Source_base::completer() apres associer_domaines Remplit les ref.
void associer_champ_rho(const Champ_base &champ_rho) override
Associe le champ de masse volumique=> Le terme source calcule sera alors homogene a d/dt(integrale(rh...
DoubleTab & ajouter(DoubleTab &) const override
Ajoute le terme (la_source_ * rho * volume_entrelace) au champ resu.
virtual const Navier_Stokes_std & get_eq_hydraulique() const
Renvoie eq_hydraulique_ !
const DoubleTab & calculer_la_source(DoubleTab &src_faces) const
Calcul de la valeur du champ la_source aux faces en fonction de - calculer_vitesse_faces().
virtual Champ_Fonc_base & get_set_terme_source_post() const
virtual void lire_data(Entree &s)
Methode appelee par readOn des classes derivees Terme_Source_Acceleration_VDF_Face,...