37 #include "libmesh/getpot.h"
38 #include "libmesh/mesh.h"
39 #include "libmesh/fem_system.h"
47 _C( input(
"Stabilization/tau_constant_vel", input(
"Stabilization/tau_constant", 1.0 ) ) ),
48 _tau_factor( input(
"Stabilization/tau_factor_vel", input(
"Stabilization/tau_factor", 0.5 ) ) ),
52 _spalart_allmaras_helper(input),
55 this->
set_parameter(this->
_C ,input,
"Stabilization/tau_constant_vel" , this->
_C );
64 this->_sa_params.register_parameter(param_name, param_pointer);
77 this->
_dim = system.get_mesh().mesh_dimension();
81 unsigned int qp,
const libMesh::Real rho,
const libMesh::Real mu,
const libMesh::Real distance_qp,
const bool infinite_distance)
const
85 u = context.interior_value(this->
_flow_vars.
u(), qp);
86 v = context.interior_value(this->
_flow_vars.
v(), qp);
88 libMesh::NumberVectorValue U(u,v);
89 if ( context.get_system().get_mesh().mesh_dimension() == 3 )
90 U(2) = context.interior_value(this->
_flow_vars.
w(), qp);
92 libMesh::RealGradient grad_u = context.fixed_interior_gradient(this->
_flow_vars.
u(), qp);
93 libMesh::RealGradient grad_v = context.fixed_interior_gradient(this->
_flow_vars.
v(), qp);
97 libMesh::RealGradient grad_nu = context.fixed_interior_gradient(this->
_turbulence_vars.
nu(), qp);
99 libMesh::RealTensor hess_nu = context.fixed_interior_hessian(this->
_turbulence_vars.
nu(), qp);
102 libMesh::Number rhoUdotGradnu = rho*(U*grad_nu);
105 libMesh::Number inv_sigmadivnuplusnuphysicalGradnu = (1./this->
_sa_params.
get_sigma())*(grad_nu*grad_nu + ((nu_value + mu)*(hess_nu(0,0) + hess_nu(1,1) + (this->
_dim == 3)?hess_nu(2,2):0)) + this->
_sa_params.
get_cb2()*grad_nu*grad_nu);
109 libMesh::Real S_tilde = this->
_sa_params.
source_fn(nu_value, mu, distance_qp, vorticity_value_qp, infinite_distance);
117 libMesh::Real destruction_term = 0.0;
118 if(infinite_distance)
120 destruction_term = 0.0;
124 destruction_term = cw1*fw*pow(nu_value/distance_qp, 2.);
127 return rhoUdotGradnu + source_term + inv_sigmadivnuplusnuphysicalGradnu - destruction_term;
132 unsigned int ,
const libMesh::Real ,
const libMesh::Real ,
141 libmesh_not_implemented();
156 const libMesh::Real ,
157 libMesh::RealGradient& ,
161 libmesh_not_implemented();
virtual void set_parameter(libMesh::Number ¶m_variable, const GetPot &input, const std::string ¶m_name, libMesh::Number param_default)
Each subclass can simultaneously read a parameter value from.
void compute_res_spalart_transient_and_derivs(AssemblyContext &context, unsigned int qp, const libMesh::Real rho, libMesh::RealGradient &res_M, libMesh::Real &d_res_Muvw_duvw) const
const TurbulenceFEVariables & _turbulence_vars
libMesh::Real source_fn(libMesh::Number nu, libMesh::Real mu, libMesh::Real wall_distance, libMesh::Real vorticity_value, bool infinite_distance) const
~SpalartAllmarasStabilizationHelper()
libMesh::Real get_sigma() const
libMesh::Real get_cb2() const
libMesh::Real compute_res_spalart_transient(AssemblyContext &context, unsigned int qp, const libMesh::Real rho) const
void init(libMesh::FEMSystem &system)
virtual void register_parameter(const std::string ¶m_name, libMesh::ParameterMultiAccessor< libMesh::Number > ¶m_pointer) const
Each subclass will register its copy of an independent.
libMesh::Real _tau_factor
const VelocityFEVariables & _flow_vars
SpalartAllmarasHelper _spalart_allmaras_helper
libMesh::Real vorticity(AssemblyContext &context, unsigned int qp) const
libMesh::Real get_cb1() const
SpalartAllmarasStabilizationHelper(const std::string &helper_name, const GetPot &input)
SpalartAllmarasParameters _sa_params
libMesh::Real destruction_fn(libMesh::Number nu, libMesh::Real wall_distance, libMesh::Real S_tilde, bool infinite_distance) const
libMesh::Real get_kappa() const
unsigned int _dim
Physical dimension of problem.
virtual void register_parameter(const std::string ¶m_name, libMesh::ParameterMultiAccessor< libMesh::Number > ¶m_pointer) const
Each subclass will register its copy of an independent.
void init_variables(libMesh::FEMSystem *system)
void compute_res_spalart_steady_and_derivs(AssemblyContext &context, unsigned int qp, const libMesh::Real rho, const libMesh::Real mu, libMesh::Gradient &res_M, libMesh::Tensor &d_res_M_dgradp, libMesh::Tensor &d_res_M_dU, libMesh::Gradient &d_res_Muvw_dgraduvw, libMesh::Tensor &d_res_Muvw_dhessuvw) const
libMesh::Real compute_res_spalart_steady(AssemblyContext &context, unsigned int qp, const libMesh::Real rho, const libMesh::Real mu, const libMesh::Real distance_qp, const bool infinite_distance) const