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