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 <<
"To use the Coriolis force, the simulation must be 2D or 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;
248 for (num_elem=0; num_elem <nb_elems; num_elem++)
250 rhoelem=tab_rho_elem[num_elem];
252 la_source_(num_elem,i)*=rhoelem;
DoubleTab & valeurs() override
Returns the array of field values at the current time.
virtual DoubleTab & valeurs()=0
class Cond_lim Generic class used to represent any class
Classe Dirichlet_homogene This class is the base class of the hierarchy of homogeneous Dirichlet-type...
Dirichlet This class is the base class of the hierarchy of Dirichlet-type boundary conditions.
class Domaine_Cl_dis_base Domaine_Cl_dis_base objects represent discretized boundary conditions
const Cond_lim & les_conditions_limites(int) const
Returns the i-th boundary condition.
int orientation(int) const override
inline DoubleVect& Domaine_VDF::porosite_face() {
int nb_faces() const
Returns the total number of faces.
DoubleVect & volumes_entrelaces()
int elem_faces(int i, int j) const
Returns the index of the i-th face of element num_elem; the face numbering convention is.
int premiere_face_int() const
A face is internal if and only if it separates two elements.
int face_voisins(int num_face, int i) const
Returns the neighbouring element of num_face in direction i.
class Domaine_dis_base This class is the base of the hierarchy of discretized domains.
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()
Returns the problem associated with the equation.
Domaine_dis_base & domaine_dis()
Returns the discretized domain associated with the equation.
Base class for a dilatable fluid, inheriting from Fluide_base.
int num_premiere_face() const
virtual const Champ_base & masse_volumique() const
Returns the mass density of the medium (const version).
DoubleVect & porosite_face()
const Equation_base & equation() const
Returns the reference to the equation pointed to by MorEqn::mon_equation.
Navier_Stokes_std This class carries the terms of the momentum equation.
const Champ_Inc_base & inconnue() const override
Returns the velocity (unknown field of the equation) (const version).
Neumann_sortie_libre This class represents an open boundary without imposed velocity.
const Nom & que_suis_je() const
Returns the string identifying the class.
virtual Entree & readOn(Entree &)
Reads an Objet_U from an input stream. Virtual method to override.
virtual Sortie & printOn(Sortie &) const
Writes the object to an output stream. Virtual method to override.
Pb_Fluide_base This class provides a base class for.
class Periodique This class represents a periodic boundary condition.
class Probleme_base It is a Probleme_U that is not a coupling.
bool is_dilatable() const
virtual const Equation_base & equation(int) const =0
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
Base class for output streams.
virtual DoubleTab & ajouter(DoubleTab &) const
Symetrie On symmetry faces, the following properties hold:
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")
class Terme_Source_Coriolis_VDF_Face This class computes the Coriolis force in 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