25 #ifndef GRINS_INC_NAVIER_STOKES_STAB_HELPER_H
26 #define GRINS_INC_NAVIER_STOKES_STAB_HELPER_H
38 class VelocityFEVariables;
39 class PressureFEVariable;
46 (
const std::string & helper_name,
47 const GetPot& input );
52 libMesh::RealGradient& g )
const;
55 libMesh::Real d_tau_M_d_rho,
56 libMesh::Gradient d_tau_M_d_U,
57 libMesh::RealGradient& g,
59 libMesh::Real &d_tau_C_d_rho,
60 libMesh::Gradient &d_tau_C_d_U
65 libMesh::RealGradient& g,
66 libMesh::RealTensor& G,
70 bool is_steady )
const;
74 libMesh::RealGradient& g,
75 libMesh::RealTensor& G,
80 libMesh::Real &d_tau_M_d_rho,
81 libMesh::Gradient &d_tau_M_d_U,
82 bool is_steady )
const;
86 libMesh::Real mat_prop_sq,
87 libMesh::RealGradient& g,
88 libMesh::RealTensor& G,
91 bool is_steady )
const;
95 libMesh::Real mat_prop_sq,
96 libMesh::RealGradient& g,
97 libMesh::RealTensor& G,
101 libMesh::Real& d_tau_d_rho,
102 libMesh::Gradient& d_tau_d_U,
103 bool is_steady )
const;
108 unsigned int qp )
const;
112 libMesh::Real &res_C,
113 libMesh::Tensor &d_res_C_dgradU )
const;
117 const libMesh::Real rho,
118 const libMesh::Real mu )
const;
122 const libMesh::Real rho,
123 const libMesh::Real mu,
124 libMesh::Gradient &res_M,
125 libMesh::Tensor &d_res_M_dgradp,
126 libMesh::Tensor &d_res_M_dU,
127 libMesh::Gradient &d_res_Muvw_dgraduvw,
128 libMesh::Tensor &d_res_Muvw_dhessuvw
133 const libMesh::Real rho )
const;
137 const libMesh::Real rho,
138 libMesh::RealGradient &res_M,
139 libMesh::Real &d_res_Muvw_duvw
143 libMesh::RealGradient
UdotGradU( libMesh::Gradient& U, libMesh::Gradient& grad_u,
144 libMesh::Gradient& grad_v )
const;
147 libMesh::RealGradient
UdotGradU( libMesh::Gradient& U, libMesh::Gradient& grad_u,
148 libMesh::Gradient& grad_v, libMesh::Gradient& grad_w )
const;
151 libMesh::RealGradient
div_GradU( libMesh::RealTensor& hess_u, libMesh::RealTensor& hess_v )
const;
153 libMesh::RealGradient
div_GradU_axi( libMesh::Real r,
const libMesh::Gradient& U,
154 const libMesh::Gradient& grad_u,
const libMesh::Gradient& grad_v,
155 const libMesh::RealTensor& hess_u,
const libMesh::RealTensor& hess_v )
const;
158 libMesh::RealGradient
div_GradU( libMesh::RealTensor& hess_u, libMesh::RealTensor& hess_v,
159 libMesh::RealTensor& hess_w )
const;
162 libMesh::RealGradient
div_GradU_T( libMesh::RealTensor& hess_u, libMesh::RealTensor& hess_v )
const;
164 libMesh::RealGradient
div_GradU_T_axi( libMesh::Real r,
const libMesh::Gradient& U,
const libMesh::Gradient& grad_u,
165 const libMesh::RealTensor& hess_u,
const libMesh::RealTensor& hess_v )
const;
168 libMesh::RealGradient
div_GradU_T( libMesh::RealTensor& hess_u, libMesh::RealTensor& hess_v,
169 libMesh::RealTensor& hess_w )
const;
172 libMesh::RealGradient
div_divU_I( libMesh::RealTensor& hess_u, libMesh::RealTensor& hess_v )
const;
174 libMesh::RealGradient
div_divU_I_axi( libMesh::Real r,
const libMesh::Gradient& U,
const libMesh::Gradient& grad_u,
175 const libMesh::RealTensor& hess_u,
const libMesh::RealTensor& hess_v )
const;
178 libMesh::RealGradient
div_divU_I( libMesh::RealTensor& hess_u, libMesh::RealTensor& hess_v,
179 libMesh::RealTensor& hess_w )
const;
194 libMesh::RealGradient& g )
const
201 ( libMesh::Real tau_M,
202 libMesh::Real d_tau_M_d_rho,
203 libMesh::Gradient d_tau_M_d_U,
204 libMesh::RealGradient& g,
205 libMesh::Real &tau_C,
206 libMesh::Real &d_tau_C_d_rho,
207 libMesh::Gradient &d_tau_C_d_U
210 tau_C = this->_tau_factor/(tau_M*(g*g));
211 libMesh::Real d_tau_C_d_tau_M = -tau_C/tau_M;
212 d_tau_C_d_rho = d_tau_C_d_tau_M * d_tau_M_d_rho;
213 d_tau_C_d_U = d_tau_C_d_tau_M * d_tau_M_d_U;
219 libMesh::RealGradient& g,
220 libMesh::RealTensor& G,
224 bool is_steady )
const
226 return this->
compute_tau( c, qp, mu*mu, g, G, rho, U, is_steady );
233 libMesh::RealGradient& g,
234 libMesh::RealTensor& G,
238 libMesh::Real& tau_M,
239 libMesh::Real &d_tau_M_d_rho,
240 libMesh::Gradient &d_tau_M_d_U,
241 bool is_steady )
const
243 this->compute_tau_and_derivs( c, qp, mu*mu, g, G, rho, U, tau_M,
244 d_tau_M_d_rho, d_tau_M_d_U,
252 libMesh::Real mat_prop_sq,
253 libMesh::RealGradient& ,
254 libMesh::RealTensor& G,
257 bool is_steady )
const
259 libMesh::Real tau = (rho*U)*(G*(rho*U)) + this->
_C*mat_prop_sq*G.contract(G);
262 tau += (2.0*rho/c.get_deltat_value())*(2.0*rho/c.get_deltat_value());
272 libMesh::Real mat_prop_sq,
273 libMesh::RealGradient& ,
274 libMesh::RealTensor& G,
278 libMesh::Real& d_tau_d_rho,
279 libMesh::Gradient& d_tau_d_U,
280 bool is_steady )
const
282 libMesh::Gradient rhoU = rho*U;
283 libMesh::Gradient GrhoU = G*rhoU;
284 libMesh::Real rhoUGrhoU = rhoU * GrhoU;
285 libMesh::Real GG = G.contract(G);
286 tau = rhoUGrhoU + this->_C*mat_prop_sq*GG;
287 d_tau_d_rho = rhoUGrhoU*2/rho;
288 d_tau_d_U = 2*rho*GrhoU;
292 libMesh::Real two_rho_over_dt = 2*rho/c.get_deltat_value();
293 tau += two_rho_over_dt * two_rho_over_dt;
294 d_tau_d_rho += 4*two_rho_over_dt/c.get_deltat_value();
300 libMesh::Real root_oldtau = std::sqrt(tau);
301 libMesh::Real d_tau_d_oldtau = -this->_tau_factor / (tau*root_oldtau) / 2;
303 d_tau_d_rho = d_tau_d_oldtau * d_tau_d_rho;
304 d_tau_d_U = d_tau_d_oldtau * d_tau_d_U;
306 tau = this->_tau_factor / root_oldtau;
310 #endif // GRINS_INC_NAVIER_STOKES_STAB_HELPER_H
libMesh::RealGradient div_divU_I(libMesh::RealTensor &hess_u, libMesh::RealTensor &hess_v) const
void compute_tau_momentum_and_derivs(AssemblyContext &c, unsigned int qp, libMesh::RealGradient &g, libMesh::RealTensor &G, libMesh::Real rho, libMesh::Gradient U, libMesh::Real T, libMesh::Real &tau_M, libMesh::Real &d_tau_M_d_rho, libMesh::Gradient &d_tau_M_d_U, bool is_steady) const
libMesh::RealGradient div_divU_I_axi(libMesh::Real r, const libMesh::Gradient &U, const libMesh::Gradient &grad_u, const libMesh::RealTensor &hess_u, const libMesh::RealTensor &hess_v) const
libMesh::Real compute_tau_continuity(libMesh::Real tau_C, libMesh::RealGradient &g) const
libMesh::RealGradient compute_res_momentum_steady(AssemblyContext &context, unsigned int qp, const libMesh::Real rho, const libMesh::Real mu) const
libMesh::RealGradient compute_res_momentum_transient(AssemblyContext &context, unsigned int qp, const libMesh::Real rho) const
void compute_tau_and_derivs(AssemblyContext &c, unsigned int qp, libMesh::Real mat_prop_sq, libMesh::RealGradient &g, libMesh::RealTensor &G, libMesh::Real rho, libMesh::Gradient U, libMesh::Real &tau, libMesh::Real &d_tau_d_rho, libMesh::Gradient &d_tau_d_U, bool is_steady) const
libMesh::RealGradient div_GradU(libMesh::RealTensor &hess_u, libMesh::RealTensor &hess_v) const
libMesh::RealGradient div_GradU_axi(libMesh::Real r, const libMesh::Gradient &U, const libMesh::Gradient &grad_u, const libMesh::Gradient &grad_v, const libMesh::RealTensor &hess_u, const libMesh::RealTensor &hess_v) const
void compute_tau_continuity_and_derivs(libMesh::Real tau_M, libMesh::Real d_tau_M_d_rho, libMesh::Gradient d_tau_M_d_U, libMesh::RealGradient &g, libMesh::Real &tau_C, libMesh::Real &d_tau_C_d_rho, libMesh::Gradient &d_tau_C_d_U) const
const VelocityFEVariables & _flow_vars
libMesh::RealGradient UdotGradU(libMesh::Gradient &U, libMesh::Gradient &grad_u, libMesh::Gradient &grad_v) const
libMesh::RealGradient div_GradU_T(libMesh::RealTensor &hess_u, libMesh::RealTensor &hess_v) const
const PressureFEVariable & _press_var
void compute_res_momentum_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
void compute_res_momentum_transient_and_derivs(AssemblyContext &context, unsigned int qp, const libMesh::Real rho, libMesh::RealGradient &res_M, libMesh::Real &d_res_Muvw_duvw) const
libMesh::Real compute_tau_momentum(AssemblyContext &c, unsigned int qp, libMesh::RealGradient &g, libMesh::RealTensor &G, libMesh::Real rho, libMesh::Gradient U, libMesh::Real mu, bool is_steady) const
void compute_res_continuity_and_derivs(AssemblyContext &context, unsigned int qp, libMesh::Real &res_C, libMesh::Tensor &d_res_C_dgradU) const
libMesh::RealGradient div_GradU_T_axi(libMesh::Real r, const libMesh::Gradient &U, const libMesh::Gradient &grad_u, const libMesh::RealTensor &hess_u, const libMesh::RealTensor &hess_v) const
IncompressibleNavierStokesStabilizationHelper(const std::string &helper_name, const GetPot &input)
libMesh::Real compute_tau(AssemblyContext &c, unsigned int qp, libMesh::Real mat_prop_sq, libMesh::RealGradient &g, libMesh::RealTensor &G, libMesh::Real rho, libMesh::Gradient U, bool is_steady) const
~IncompressibleNavierStokesStabilizationHelper()
libMesh::Real compute_res_continuity(AssemblyContext &context, unsigned int qp) const
libMesh::Real _tau_factor