38   template<
class Mu, 
class SH, 
class TC>
 
   42       _stab_helper( physics_name+
"StabHelper", input )
 
   47   template<
class Mu, 
class SH, 
class TC>
 
   53   template<
class Mu, 
class SH, 
class TC>
 
   60     context.get_element_fe(this->_press_var.p())->get_dphi();
 
   63     context.get_element_fe(this->_flow_vars.u())->get_d2phi();
 
   64     context.get_element_fe(this->_temp_vars.T())->get_d2phi();
 
   69   template<
class Mu, 
class SH, 
class TC>
 
   71                                                                                                unsigned int qp )
 const 
   73     libMesh::Real T = context.fixed_interior_value(this->_temp_vars.T(), qp);
 
   74     libMesh::RealGradient grad_T = context.fixed_interior_gradient(this->_temp_vars.T(), qp);
 
   76     libMesh::RealGradient U( context.fixed_interior_value(this->_flow_vars.u(), qp),
 
   77                              context.fixed_interior_value(this->_flow_vars.v(), qp) );
 
   79     libMesh::RealGradient grad_u, grad_v;
 
   81     grad_u = context.fixed_interior_gradient(this->_flow_vars.u(), qp);
 
   82     grad_v = context.fixed_interior_gradient(this->_flow_vars.v(), qp);
 
   84     libMesh::Real divU = grad_u(0) + grad_v(1);
 
   88         U(2) = context.fixed_interior_value(this->_flow_vars.w(), qp);
 
   89         divU += (context.fixed_interior_gradient(this->_flow_vars.w(), qp))(2);
 
   92     return divU - (U*grad_T)/T;
 
   95   template<
class Mu, 
class SH, 
class TC>
 
   97                                                                                                   unsigned int qp )
 const 
   99     libMesh::Real T = context.fixed_interior_value(this->_temp_vars.T(), qp);
 
  100     libMesh::Real T_dot = context.interior_value(this->_temp_vars.T(), qp);
 
  102     libMesh::Real RC_t = -T_dot/T;
 
  104     if( this->_enable_thermo_press_calc )
 
  106         libMesh::Real p0 = context.fixed_interior_value(this->_p0_var->p0(), qp);
 
  107         libMesh::Real p0_dot = context.interior_value(this->_p0_var->p0(), qp);
 
  115   template<
class Mu, 
class SH, 
class TC>
 
  117                                                                                                      unsigned int qp )
 const 
  119     libMesh::Real T = context.fixed_interior_value(this->_temp_vars.T(), qp);
 
  121     libMesh::Real rho = this->rho(T, this->get_p0_transient(context,qp) );
 
  123     libMesh::RealGradient U( context.fixed_interior_value(this->_flow_vars.u(), qp),
 
  124                              context.fixed_interior_value(this->_flow_vars.v(), qp) );
 
  126       U(2) = context.fixed_interior_value(this->_flow_vars.w(), qp);
 
  128     libMesh::RealGradient grad_p = context.fixed_interior_gradient(this->_press_var.p(), qp);
 
  130     libMesh::RealGradient grad_u = context.fixed_interior_gradient(this->_flow_vars.u(), qp);
 
  131     libMesh::RealGradient grad_v = context.fixed_interior_gradient(this->_flow_vars.v(), qp);
 
  133     libMesh::RealTensor hess_u = context.fixed_interior_hessian(this->_flow_vars.u(), qp);
 
  134     libMesh::RealTensor hess_v = context.fixed_interior_hessian(this->_flow_vars.v(), qp);
 
  136     libMesh::RealGradient rhoUdotGradU;
 
  137     libMesh::RealGradient divGradU;
 
  138     libMesh::RealGradient divGradUT;
 
  139     libMesh::RealGradient divdivU;
 
  143         rhoUdotGradU = rho*_stab_helper.UdotGradU( U, grad_u, grad_v );
 
  144         divGradU  = _stab_helper.div_GradU( hess_u, hess_v );
 
  145         divGradUT = _stab_helper.div_GradU_T( hess_u, hess_v );
 
  146         divdivU   = _stab_helper.div_divU_I( hess_u, hess_v );
 
  150         libMesh::RealGradient grad_w = context.fixed_interior_gradient(this->_flow_vars.w(), qp);
 
  151         libMesh::RealTensor hess_w = context.fixed_interior_hessian(this->_flow_vars.w(), qp);
 
  153         rhoUdotGradU = rho*_stab_helper.UdotGradU( U, grad_u, grad_v, grad_w );
 
  155         divGradU  = _stab_helper.div_GradU( hess_u, hess_v, hess_w );
 
  156         divGradUT = _stab_helper.div_GradU_T( hess_u, hess_v, hess_w );
 
  157         divdivU   = _stab_helper.div_divU_I( hess_u, hess_v, hess_w );
 
  160     libMesh::RealGradient divT = this->_mu(T)*(divGradU + divGradUT - 2.0/3.0*divdivU);
 
  162     if( this->_mu.deriv(T) != 0.0 )
 
  164         libMesh::Gradient grad_T = context.fixed_interior_gradient(this->_temp_vars.T(), qp);
 
  166         libMesh::Gradient grad_u = context.fixed_interior_gradient(this->_flow_vars.u(), qp);
 
  167         libMesh::Gradient grad_v = context.fixed_interior_gradient(this->_flow_vars.v(), qp);
 
  169         libMesh::Gradient gradTgradu( grad_T*grad_u, grad_T*grad_v );
 
  171         libMesh::Gradient gradTgraduT( grad_T(0)*grad_u(0) + grad_T(1)*grad_u(1),
 
  172                                        grad_T(0)*grad_v(0) + grad_T(1)*grad_v(1) );
 
  174         libMesh::Real divU = grad_u(0) + grad_v(1);
 
  176         libMesh::Gradient gradTdivU( grad_T(0)*divU, grad_T(1)*divU );
 
  180             libMesh::Gradient grad_w = context.fixed_interior_gradient(this->_flow_vars.w(), qp);
 
  182             gradTgradu(2) = grad_T*grad_w;
 
  184             gradTgraduT(0) += grad_T(2)*grad_u(2);
 
  185             gradTgraduT(1) += grad_T(2)*grad_v(2);
 
  186             gradTgraduT(2) = grad_T(0)*grad_w(0) + grad_T(1)*grad_w(1) + grad_T(2)*grad_w(2);
 
  189             gradTdivU(0) += grad_T(0)*grad_w(2);
 
  190             gradTdivU(1) += grad_T(1)*grad_w(2);
 
  191             gradTdivU(2) += grad_T(2)*divU;
 
  194         divT += this->_mu.deriv(T)*( gradTgradu + gradTgraduT - 2.0/3.0*gradTdivU );
 
  197     libMesh::RealGradient rhog( rho*this->_g(0), rho*this->_g(1) );
 
  199       rhog(2) = rho*this->_g(2);
 
  201     return rhoUdotGradU + grad_p - divT - rhog;
 
  204   template<
class Mu, 
class SH, 
class TC>
 
  206                                                                                                         unsigned int qp )
 const 
  208     libMesh::Real T = context.fixed_interior_value(this->_temp_vars.T(), qp);
 
  209     libMesh::Real rho = this->rho(T, this->get_p0_transient(context,qp) );
 
  211     libMesh::RealGradient u_dot( context.interior_value(this->_flow_vars.u(), qp), context.interior_value(this->_flow_vars.v(), qp) );
 
  214       u_dot(2) = context.interior_value(this->_flow_vars.w(), qp);
 
  219   template<
class Mu, 
class SH, 
class TC>
 
  221                                                                                            unsigned int qp )
 const 
  223     libMesh::Real T = context.fixed_interior_value(this->_temp_vars.T(), qp);
 
  224     libMesh::Gradient grad_T = context.fixed_interior_gradient(this->_temp_vars.T(), qp);
 
  225     libMesh::Tensor hess_T = context.fixed_interior_hessian(this->_temp_vars.T(), qp);
 
  227     libMesh::Real rho = this->rho(T, this->get_p0_transient(context,qp) );
 
  228     libMesh::Real rho_cp = rho*this->_cp(T);
 
  230     libMesh::RealGradient rhocpU( rho_cp*context.fixed_interior_value(this->_flow_vars.u(), qp),
 
  231                                   rho_cp*context.fixed_interior_value(this->_flow_vars.v(), qp) );
 
  233       rhocpU(2) = rho_cp*context.fixed_interior_value(this->_flow_vars.w(), qp);
 
  235     libMesh::Real hess_term = hess_T(0,0) + hess_T(1,1);
 
  237     hess_term += hess_T(2,2);
 
  240     return rhocpU*grad_T - this->_k.deriv(T)*(grad_T*grad_T) - this->_k(T)*(hess_term);
 
  244   template<
class Mu, 
class SH, 
class TC>
 
  246                                                                                               unsigned int qp )
 const 
  248     libMesh::Real T = context.fixed_interior_value(this->_temp_vars.T(), qp);
 
  249     libMesh::Real rho = this->rho(T, this->get_p0_transient(context,qp) );
 
  250     libMesh::Real rho_cp = rho*this->_cp(T);
 
  251     libMesh::Real T_dot = context.interior_value(this->_temp_vars.T(), qp);
 
  253     libMesh::Real RE_t = rho_cp*T_dot;
 
  255     if( this->_enable_thermo_press_calc )
 
  257         RE_t -= context.interior_value(this->_p0_var->p0(), qp);
 
libMesh::RealGradient compute_res_momentum_transient(AssemblyContext &context, unsigned int qp) const 
 
libMesh::Real compute_res_energy_steady(AssemblyContext &context, unsigned int qp) const 
 
Adds VMS-based stabilization to LowMachNavierStokes physics class. 
 
virtual ~LowMachNavierStokesStabilizationBase()
 
libMesh::Real compute_res_energy_transient(AssemblyContext &context, unsigned int qp) const 
 
Physics class for Incompressible Navier-Stokes. 
 
virtual void init_context(AssemblyContext &context)
Initialize context for added physics variables. 
 
virtual void init_context(AssemblyContext &context)
Initialize context for added physics variables. 
 
libMesh::RealGradient compute_res_momentum_steady(AssemblyContext &context, unsigned int qp) const 
 
libMesh::Real compute_res_continuity_steady(AssemblyContext &context, unsigned int qp) const 
 
libMesh::Real compute_res_continuity_transient(AssemblyContext &context, unsigned int qp) const 
 
LowMachNavierStokesStabilizationBase()