16#include <Terme_Source_Coriolis_VDF_Face.h>
17#include <Domaine_VDF.h>
18#include <Domaine_Cl_VDF.h>
19#include <Neumann_sortie_libre.h>
21#include <Dirichlet_homogene.h>
23#include <Periodique.h>
24#include <Pb_Fluide_base.h>
25#include <Navier_Stokes_std.h>
26#include <Fluide_Dilatable_base.h>
74 Cerr <<
"Error for the method Terme_Source_Coriolis_VDF_Face::associer_pb" << finl;
75 Cerr <<
"The source term "<<
que_suis_je()<<
" cannot be activated for the problem "<<pb.
que_suis_je()<< finl;
80 le_dom_VDF->domaine().creer_tableau_elements(
la_source);
95 const Domaine_VDF& domaine_VDF = le_dom_VDF.valeur();
98 const IntVect& orientation = domaine_VDF.
orientation();
103 int ndeb,nfin,ncomp,num_face,num_elem;
110 for (
int n_bord=0; n_bord<domaine_VDF.
nb_front_Cl(); n_bord++)
127 for (num_face=ndeb; num_face<nfin; num_face++)
129 vol = volumes_entrelaces(num_face)*porosite_surf(num_face);
130 ncomp = orientation(num_face);
132 num_elem = face_voisins(num_face,0);
134 num_elem = face_voisins(num_face,1);
136 secmem(num_face)+=
la_source(num_elem,ncomp)*vol;
140 else if (sub_type(
Symetrie,la_cl.valeur()))
142 else if ( (sub_type(
Dirichlet,la_cl.valeur()))
153 for (num_face=ndeb; num_face<nfin; num_face++)
155 vol = volumes_entrelaces(num_face)*porosite_surf(num_face);
156 ncomp = orientation(num_face);
158 secmem(num_face)+= 0.5*(
la_source(face_voisins(num_face,0),ncomp)
159 +
la_source(face_voisins(num_face,1),ncomp))*vol;
169 vol = volumes_entrelaces(num_face)*porosite_surf(num_face);
170 ncomp = orientation(num_face);
171 secmem(num_face)+= 0.5*(
la_source(face_voisins(num_face,0),ncomp)+
172 la_source(face_voisins(num_face,1),ncomp))*vol;
186 const Domaine_VDF& domaine_VDF = le_dom_VDF.valeur();
190 const IntTab& elem_faces = domaine_VDF.
elem_faces();
192 DoubleVect om =
omega();
197 DoubleTab& la_source_ = ref_cast_non_const(DoubleTab,
la_source);
203 for (num_elem=0; num_elem <nb_elems; num_elem++)
206 vit[i] = 0.5*(vitesse(elem_faces(num_elem,i))+vitesse(elem_faces(num_elem,i+
dimension)));
208 la_source_(num_elem,0)= 2.*om(0)*vit[1];
209 la_source_(num_elem,1)=-2.*om(0)*vit[0];
215 for (num_elem=0; num_elem <nb_elems; num_elem++)
218 vit[i] = 0.5*(vitesse(elem_faces(num_elem,i))+vitesse(elem_faces(num_elem,i+
dimension)));
220 la_source_(num_elem,0)=-2.*(om(1)*vit[2]-om(2)*vit[1]);
221 la_source_(num_elem,1)=-2.*(om(2)*vit[0]-om(0)*vit[2]);
222 la_source_(num_elem,2)=-2.*(om(0)*vit[1]-om(1)*vit[0]);
228 Cerr <<
"Pour pouvoir utiliser la force de Coriolis, il faut etre en 2D ou 3D" << finl;
235 Cerr <<
"Terme_Source_Coriolis_VDF_Face is not yet tested for a Weakly Compressible fluid !" << finl;
236 Cerr <<
"Contact the TRUST support if you want to use this source term." << finl;
249 for (num_elem=0; num_elem <nb_elems; num_elem++)
251 rhoelem=tab_rho_elem[num_elem];
253 la_source_(num_elem,i)*=rhoelem;
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
virtual DoubleTab & valeurs()=0
classe Cond_lim Classe generique servant a representer n'importe quelle classe
Classe Dirichlet_homogene Cette classe est la classe de base de la hierarchie des conditions aux limi...
classe Dirichlet Cette classe est la classe de base de la hierarchie des conditions aux limites de ty...
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.
int orientation(int) const override
inline DoubleVect& Domaine_VDF::porosite_face() {
int nb_faces() const
renvoie le nombre global de faces.
DoubleVect & volumes_entrelaces()
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
int premiere_face_int() const
une face est interne ssi elle separe deux elements.
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
virtual const Milieu_base & milieu() const =0
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
Domaine_dis_base & domaine_dis()
Renvoie le domaine discretise associe a l'equation.
classe Fluide_Dilatable_base Cette classe represente un d'un fluide dilatable,
int num_premiere_face() const
virtual const Champ_base & masse_volumique() const
Renvoie la masse volumique du milieu.
DoubleVect & porosite_face()
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
classe Navier_Stokes_std Cette classe porte les termes de l'equation de la dynamique
const Champ_Inc_base & inconnue() const override
Renvoie la vitesse (champ inconnue de l'equation) (version const).
classe Neumann_sortie_libre Cette classe represente une frontiere ouverte sans vitesse imposee
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 Pb_Fluide_base Cette classe a pour but de disposer d une classe amont pour
classe Periodique Cette classe represente une condition aux limites periodique.
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
bool is_dilatable() const
virtual const Equation_base & equation(int) const =0
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
virtual DoubleTab & ajouter(DoubleTab &) const
classe Symetrie Sur les faces de symetrie on a les proprietes suivantes:
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")
class Terme_Source_Coriolis_VDF_Face Cette classe permet de calculer la force de Coriolis en VDF
void calculer_force_de_Coriolis() const
DoubleTab & calculer(DoubleTab &) const override
void associer_domaines(const Domaine_dis_base &, const Domaine_Cl_dis_base &) override
void associer_pb(const Probleme_base &) override
void ajouter_blocs(matrices_t matrices, DoubleTab &secmem, const tabs_t &semi_impl) const override
const DoubleVect & omega() const
void associer_eqn(const Navier_Stokes_std &eq_hyd)
const Navier_Stokes_std & eq_hydraulique() const