25 #ifndef GRINS_INC_NAVIER_STOKES_STAB_HELPER_H
26 #define GRINS_INC_NAVIER_STOKES_STAB_HELPER_H
43 (
const std::string & helper_name,
44 const GetPot& input );
48 void init( libMesh::FEMSystem& system );
51 libMesh::RealGradient& g )
const;
54 libMesh::Real d_tau_M_d_rho,
55 libMesh::Gradient d_tau_M_d_U,
56 libMesh::RealGradient& g,
58 libMesh::Real &d_tau_C_d_rho,
59 libMesh::Gradient &d_tau_C_d_U
64 libMesh::RealGradient& g,
65 libMesh::RealTensor& G,
69 bool is_steady )
const;
73 libMesh::RealGradient& g,
74 libMesh::RealTensor& G,
79 libMesh::Real &d_tau_M_d_rho,
80 libMesh::Gradient &d_tau_M_d_U,
81 bool is_steady )
const;
85 libMesh::Real mat_prop_sq,
86 libMesh::RealGradient& g,
87 libMesh::RealTensor& G,
90 bool is_steady )
const;
94 libMesh::Real mat_prop_sq,
95 libMesh::RealGradient& g,
96 libMesh::RealTensor& G,
100 libMesh::Real& d_tau_d_rho,
101 libMesh::Gradient& d_tau_d_U,
102 bool is_steady )
const;
107 unsigned int qp )
const;
111 libMesh::Real &res_C,
112 libMesh::Tensor &d_res_C_dgradU )
const;
116 const libMesh::Real rho,
117 const libMesh::Real mu )
const;
121 const libMesh::Real rho,
122 const libMesh::Real mu,
123 libMesh::Gradient &res_M,
124 libMesh::Tensor &d_res_M_dgradp,
125 libMesh::Tensor &d_res_M_dU,
126 libMesh::Gradient &d_res_Muvw_dgraduvw,
127 libMesh::Tensor &d_res_Muvw_dhessuvw
132 const libMesh::Real rho )
const;
136 const libMesh::Real rho,
137 libMesh::RealGradient &res_M,
138 libMesh::Real &d_res_Muvw_duvw
142 libMesh::RealGradient
UdotGradU( libMesh::Gradient& U, libMesh::Gradient& grad_u,
143 libMesh::Gradient& grad_v )
const;
146 libMesh::RealGradient
UdotGradU( libMesh::Gradient& U, libMesh::Gradient& grad_u,
147 libMesh::Gradient& grad_v, libMesh::Gradient& grad_w )
const;
150 libMesh::RealGradient
div_GradU( libMesh::RealTensor& hess_u, libMesh::RealTensor& hess_v )
const;
153 libMesh::RealGradient
div_GradU( libMesh::RealTensor& hess_u, libMesh::RealTensor& hess_v,
154 libMesh::RealTensor& hess_w )
const;
157 libMesh::RealGradient
div_GradU_T( libMesh::RealTensor& hess_u, libMesh::RealTensor& hess_v )
const;
160 libMesh::RealGradient
div_GradU_T( libMesh::RealTensor& hess_u, libMesh::RealTensor& hess_v,
161 libMesh::RealTensor& hess_w )
const;
164 libMesh::RealGradient
div_divU_I( libMesh::RealTensor& hess_u, libMesh::RealTensor& hess_v )
const;
167 libMesh::RealGradient
div_divU_I( libMesh::RealTensor& hess_u, libMesh::RealTensor& hess_v,
168 libMesh::RealTensor& hess_w )
const;
182 libMesh::RealGradient& g )
const
189 ( libMesh::Real tau_M,
190 libMesh::Real d_tau_M_d_rho,
191 libMesh::Gradient d_tau_M_d_U,
192 libMesh::RealGradient& g,
193 libMesh::Real &tau_C,
194 libMesh::Real &d_tau_C_d_rho,
195 libMesh::Gradient &d_tau_C_d_U
198 tau_C = this->_tau_factor/(tau_M*(g*g));
199 libMesh::Real d_tau_C_d_tau_M = -tau_C/tau_M;
200 d_tau_C_d_rho = d_tau_C_d_tau_M * d_tau_M_d_rho;
201 d_tau_C_d_U = d_tau_C_d_tau_M * d_tau_M_d_U;
207 libMesh::RealGradient& g,
208 libMesh::RealTensor& G,
212 bool is_steady )
const
214 return this->
compute_tau( c, qp, mu*mu, g, G, rho, U, is_steady );
221 libMesh::RealGradient& g,
222 libMesh::RealTensor& G,
226 libMesh::Real& tau_M,
227 libMesh::Real &d_tau_M_d_rho,
228 libMesh::Gradient &d_tau_M_d_U,
229 bool is_steady )
const
231 this->compute_tau_and_derivs( c, qp, mu*mu, g, G, rho, U, tau_M,
232 d_tau_M_d_rho, d_tau_M_d_U,
240 libMesh::Real mat_prop_sq,
241 libMesh::RealGradient& ,
242 libMesh::RealTensor& G,
245 bool is_steady )
const
247 libMesh::Real tau = (rho*U)*(G*(rho*U)) + this->
_C*mat_prop_sq*G.contract(G);
250 tau += (2.0*rho/c.get_deltat_value())*(2.0*rho/c.get_deltat_value());
260 libMesh::Real mat_prop_sq,
261 libMesh::RealGradient& ,
262 libMesh::RealTensor& G,
266 libMesh::Real& d_tau_d_rho,
267 libMesh::Gradient& d_tau_d_U,
268 bool is_steady )
const
270 libMesh::Gradient rhoU = rho*U;
271 libMesh::Gradient GrhoU = G*rhoU;
272 libMesh::Real rhoUGrhoU = rhoU * GrhoU;
273 libMesh::Real GG = G.contract(G);
274 tau = rhoUGrhoU + this->_C*mat_prop_sq*GG;
275 d_tau_d_rho = rhoUGrhoU*2/rho;
276 d_tau_d_U = 2*rho*GrhoU;
280 libMesh::Real two_rho_over_dt = 2*rho/c.get_deltat_value();
281 tau += two_rho_over_dt * two_rho_over_dt;
282 d_tau_d_rho += 4*two_rho_over_dt/c.get_deltat_value();
288 libMesh::Real root_oldtau = std::sqrt(tau);
289 libMesh::Real d_tau_d_oldtau = -this->_tau_factor / (tau*root_oldtau) / 2;
291 d_tau_d_rho = d_tau_d_oldtau * d_tau_d_rho;
292 d_tau_d_U = d_tau_d_oldtau * d_tau_d_U;
294 tau = this->_tau_factor / root_oldtau;
298 #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::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
void init(libMesh::FEMSystem &system)
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
PrimitiveFlowVariables _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
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
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