GRINS-0.6.0
Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes | Private Member Functions | List of all members
GRINS::LowMachNavierStokes< Viscosity, SpecificHeat, ThermalConductivity > Class Template Reference

Physics class for Incompressible Navier-Stokes. More...

#include <low_mach_navier_stokes.h>

Inheritance diagram for GRINS::LowMachNavierStokes< Viscosity, SpecificHeat, ThermalConductivity >:
Inheritance graph
[legend]
Collaboration diagram for GRINS::LowMachNavierStokes< Viscosity, SpecificHeat, ThermalConductivity >:
Collaboration graph
[legend]

Public Member Functions

 LowMachNavierStokes (const PhysicsName &physics_name, const GetPot &input)
 
 ~LowMachNavierStokes ()
 
virtual void read_input_options (const GetPot &input)
 Read options from GetPot input file. More...
 
virtual void register_postprocessing_vars (const GetPot &input, PostProcessedQuantities< libMesh::Real > &postprocessing)
 Register postprocessing variables for LowMachNavierStokes. More...
 
virtual void init_context (AssemblyContext &context)
 Initialize context for added physics variables. More...
 
virtual void element_time_derivative (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Time dependent part(s) of physics for element interiors. More...
 
virtual void side_time_derivative (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Time dependent part(s) of physics for boundaries of elements on the domain boundary. More...
 
virtual void side_constraint (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Constraint part(s) of physics for boundaries of elements on the domain boundary. More...
 
virtual void mass_residual (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Mass matrix part(s) for element interiors. All boundary terms lie within the time_derivative part. More...
 
virtual void compute_element_time_derivative_cache (const AssemblyContext &context, CachedValues &cache)
 
virtual void compute_postprocessed_quantity (unsigned int quantity_index, const AssemblyContext &context, const libMesh::Point &point, libMesh::Real &value)
 
virtual void init_variables (libMesh::FEMSystem *system)
 Initialize variables for this physics. More...
 
virtual void set_time_evolving_vars (libMesh::FEMSystem *system)
 Sets velocity variables to be time-evolving. More...
 
libMesh::Real T (const libMesh::Point &p, const AssemblyContext &c) const
 
libMesh::Real rho (libMesh::Real T, libMesh::Real p0) const
 
libMesh::Real d_rho_dT (libMesh::Real T, libMesh::Real p0) const
 
libMesh::Real get_p0_steady (const AssemblyContext &c, unsigned int qp) const
 
libMesh::Real get_p0_steady (const AssemblyContext &c, const libMesh::Point &p) const
 
libMesh::Real get_p0_steady_side (const AssemblyContext &c, unsigned int qp) const
 
libMesh::Real get_p0_transient (AssemblyContext &c, unsigned int qp) const
 
virtual void register_parameter (const std::string &param_name, libMesh::ParameterMultiPointer< libMesh::Number > &param_pointer) const
 Each subclass will register its copy of an independent. More...
 
virtual bool enabled_on_elem (const libMesh::Elem *elem)
 Find if current physics is active on supplied element. More...
 
void set_is_steady (bool is_steady)
 Sets whether this physics is to be solved with a steady solver or not. More...
 
bool is_steady () const
 Returns whether or not this physics is being solved with a steady solver. More...
 
virtual void auxiliary_init (MultiphysicsSystem &system)
 Any auxillary initialization a Physics class may need. More...
 
virtual void nonlocal_time_derivative (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Time dependent part(s) of physics for scalar variables. More...
 
virtual void element_constraint (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Constraint part(s) of physics for element interiors. More...
 
virtual void nonlocal_constraint (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Constraint part(s) of physics for scalar variables. More...
 
virtual void nonlocal_mass_residual (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Mass matrix part(s) for scalar variables. More...
 
void init_bcs (libMesh::FEMSystem *system)
 
void init_ics (libMesh::FEMSystem *system, libMesh::CompositeFunction< libMesh::Number > &all_ics)
 
void attach_neumann_bound_func (GRINS::NBCContainer &neumann_bcs)
 
void attach_dirichlet_bound_func (const GRINS::DBCContainer &dirichlet_bc)
 
virtual void compute_side_time_derivative_cache (const AssemblyContext &context, CachedValues &cache)
 
virtual void compute_nonlocal_time_derivative_cache (const AssemblyContext &context, CachedValues &cache)
 
virtual void compute_element_constraint_cache (const AssemblyContext &context, CachedValues &cache)
 
virtual void compute_side_constraint_cache (const AssemblyContext &context, CachedValues &cache)
 
virtual void compute_nonlocal_constraint_cache (const AssemblyContext &context, CachedValues &cache)
 
virtual void compute_mass_residual_cache (const AssemblyContext &context, CachedValues &cache)
 
virtual void compute_nonlocal_mass_residual_cache (const AssemblyContext &context, CachedValues &cache)
 
BCHandlingBaseget_bc_handler ()
 
ICHandlingBaseget_ic_handler ()
 
virtual void set_parameter (libMesh::Number &param_variable, const GetPot &input, const std::string &param_name, libMesh::Number param_default)
 Each subclass can simultaneously read a parameter value from. More...
 

Protected Member Functions

void assemble_mass_time_deriv (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Helper function. More...
 
void assemble_momentum_time_deriv (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Helper function. More...
 
void assemble_energy_time_deriv (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Helper function. More...
 
void assemble_continuity_mass_residual (bool compute_jacobian, AssemblyContext &c)
 Helper function. More...
 
void assemble_momentum_mass_residual (bool compute_jacobian, AssemblyContext &c)
 Helper function. More...
 
void assemble_energy_mass_residual (bool compute_jacobian, AssemblyContext &c)
 Helper function. More...
 
void assemble_thermo_press_elem_time_deriv (bool compute_jacobian, AssemblyContext &c)
 
void assemble_thermo_press_side_time_deriv (bool compute_jacobian, AssemblyContext &c)
 
void assemble_thermo_press_mass_residual (bool compute_jacobian, AssemblyContext &c)
 

Protected Attributes

bool _pin_pressure
 Enable pressure pinning. More...
 
PressurePinning _p_pinning
 
unsigned int _rho_index
 Cache index for density post-processing. More...
 
libMesh::Number _p0_over_R
 Thermodynamic pressure divided by gas constant. More...
 
libMesh::Number _p0
 
libMesh::Number _R
 
libMesh::Number _T0
 
unsigned int _dim
 Physical dimension of problem. More...
 
VariableIndex _u_var
 Indices for each (owned) variable;. More...
 
VariableIndex _v_var
 
VariableIndex _w_var
 
VariableIndex _p_var
 
VariableIndex _T_var
 
VariableIndex _p0_var
 
std::string _u_var_name
 Names of each (owned) variable in the system. More...
 
std::string _v_var_name
 
std::string _w_var_name
 
std::string _p_var_name
 
std::string _T_var_name
 
std::string _p0_var_name
 
GRINSEnums::FEFamily _V_FE_family
 Element type, read from input. More...
 
GRINSEnums::FEFamily _P_FE_family
 
GRINSEnums::FEFamily _T_FE_family
 
GRINSEnums::Order _V_order
 Element orders, read from input. More...
 
GRINSEnums::Order _P_order
 
GRINSEnums::Order _T_order
 
Viscosity _mu
 Viscosity object. More...
 
SpecificHeat _cp
 Specific heat object. More...
 
ThermalConductivity _k
 Thermal conductivity object. More...
 
libMesh::Point _g
 Gravity vector. More...
 
bool _enable_thermo_press_calc
 Flag to enable thermodynamic pressure calculation. More...
 
const PhysicsName _physics_name
 Name of the physics object. Used for reading physics specific inputs. More...
 
GRINS::BCHandlingBase_bc_handler
 
GRINS::ICHandlingBase_ic_handler
 
std::set< libMesh::subdomain_id_type > _enabled_subdomains
 Subdomains on which the current Physics class is enabled. More...
 
bool _is_axisymmetric
 

Static Protected Attributes

static bool _is_steady = false
 Caches whether or not the solver that's being used is steady or not. More...
 

Private Member Functions

 LowMachNavierStokes ()
 

Detailed Description

template<class Viscosity, class SpecificHeat, class ThermalConductivity>
class GRINS::LowMachNavierStokes< Viscosity, SpecificHeat, ThermalConductivity >

Physics class for Incompressible Navier-Stokes.

This physics class implements the classical Incompressible Navier-Stokes equations.

Definition at line 41 of file low_mach_navier_stokes.h.

Constructor & Destructor Documentation

template<class Mu , class SH , class TC >
GRINS::LowMachNavierStokes< Mu, SH, TC >::LowMachNavierStokes ( const PhysicsName physics_name,
const GetPot &  input 
)

Definition at line 46 of file low_mach_navier_stokes.C.

References GRINS::Physics::_bc_handler, GRINS::Physics::_ic_handler, and GRINS::LowMachNavierStokes< Viscosity, SpecificHeat, ThermalConductivity >::read_input_options().

47  : LowMachNavierStokesBase<Mu,SH,TC>(physics_name,input),
48  _p_pinning(input,physics_name),
49  _rho_index(0) // Initialize to zero
50  {
51  this->read_input_options(input);
52 
53  // This is deleted in the base class
54  this->_bc_handler = new LowMachNavierStokesBCHandling( physics_name, input );
55  this->_ic_handler = new GenericICHandler( physics_name, input );
56 
57  return;
58  }
GRINS::ICHandlingBase * _ic_handler
Definition: physics.h:258
GRINS::BCHandlingBase * _bc_handler
Definition: physics.h:256
virtual void read_input_options(const GetPot &input)
Read options from GetPot input file.
unsigned int _rho_index
Cache index for density post-processing.
template<class Mu , class SH , class TC >
GRINS::LowMachNavierStokes< Mu, SH, TC >::~LowMachNavierStokes ( )

Definition at line 61 of file low_mach_navier_stokes.C.

62  {
63  return;
64  }
template<class Viscosity , class SpecificHeat , class ThermalConductivity >
GRINS::LowMachNavierStokes< Viscosity, SpecificHeat, ThermalConductivity >::LowMachNavierStokes ( )
private

Member Function Documentation

template<class Mu , class SH , class TC >
void GRINS::LowMachNavierStokes< Mu, SH, TC >::assemble_continuity_mass_residual ( bool  compute_jacobian,
AssemblyContext c 
)
protected

Helper function.

Definition at line 739 of file low_mach_navier_stokes.C.

741  {
742  // Element Jacobian * quadrature weights for interior integration
743  const std::vector<libMesh::Real> &JxW =
744  context.get_element_fe(this->_u_var)->get_JxW();
745 
746  // The shape functions at interior quadrature points.
747  const std::vector<std::vector<libMesh::Real> >& p_phi =
748  context.get_element_fe(this->_p_var)->get_phi();
749 
750  // The number of local degrees of freedom in each variable
751  const unsigned int n_p_dofs = context.get_dof_indices(this->_p_var).size();
752 
753  // The subvectors and submatrices we need to fill:
754  libMesh::DenseSubVector<libMesh::Real> &F_p = context.get_elem_residual(this->_p_var);
755 
756  unsigned int n_qpoints = context.get_element_qrule().n_points();
757 
758  for (unsigned int qp = 0; qp != n_qpoints; ++qp)
759  {
760  // For the mass residual, we need to be a little careful.
761  // The time integrator is handling the time-discretization
762  // for us so we need to supply M(u_fixed)*u' for the residual.
763  // u_fixed will be given by the fixed_interior_value function
764  // while u' will be given by the interior_rate function.
765  libMesh::Real T_dot;
766  context.interior_rate(this->_T_var, qp, T_dot);
767 
768  libMesh::Real T = context.fixed_interior_value(this->_T_var, qp);
769 
770  for (unsigned int i = 0; i != n_p_dofs; ++i)
771  {
772  F_p(i) -= T_dot/T*p_phi[i][qp]*JxW[qp];
773  } // End DoF loop i
774 
775  } // End quadrature loop qp
776 
777  return;
778  }
VariableIndex _u_var
Indices for each (owned) variable;.
libMesh::Real T(const libMesh::Point &p, const AssemblyContext &c) const
template<class Mu , class SH , class TC >
void GRINS::LowMachNavierStokes< Mu, SH, TC >::assemble_energy_mass_residual ( bool  compute_jacobian,
AssemblyContext c 
)
protected

Helper function.

Definition at line 860 of file low_mach_navier_stokes.C.

862  {
863  // Element Jacobian * quadrature weights for interior integration
864  const std::vector<libMesh::Real> &JxW =
865  context.get_element_fe(this->_T_var)->get_JxW();
866 
867  // The shape functions at interior quadrature points.
868  const std::vector<std::vector<libMesh::Real> >& T_phi =
869  context.get_element_fe(this->_T_var)->get_phi();
870 
871  // The number of local degrees of freedom in each variable
872  const unsigned int n_T_dofs = context.get_dof_indices(this->_T_var).size();
873 
874  // The subvectors and submatrices we need to fill:
875  libMesh::DenseSubVector<libMesh::Real> &F_T = context.get_elem_residual(this->_T_var);
876 
877  unsigned int n_qpoints = context.get_element_qrule().n_points();
878 
879  for (unsigned int qp = 0; qp != n_qpoints; ++qp)
880  {
881  // For the mass residual, we need to be a little careful.
882  // The time integrator is handling the time-discretization
883  // for us so we need to supply M(u_fixed)*u' for the residual.
884  // u_fixed will be given by the fixed_interior_value function
885  // while u will be given by the interior_rate function.
886  libMesh::Real T_dot;
887  context.interior_rate(this->_T_var, qp, T_dot);
888 
889  libMesh::Real T = context.fixed_interior_value(this->_T_var, qp);
890 
891  libMesh::Real cp = this->_cp(T);
892 
893  libMesh::Number rho = this->rho(T, this->get_p0_transient(context, qp));
894 
895  for (unsigned int i = 0; i != n_T_dofs; ++i)
896  {
897  F_T(i) -= rho*cp*T_dot*T_phi[i][qp]*JxW[qp];
898  } // End DoF loop i
899 
900  } // End quadrature loop qp
901 
902  return;
903  }
SpecificHeat _cp
Specific heat object.
libMesh::Real T(const libMesh::Point &p, const AssemblyContext &c) const
libMesh::Real get_p0_transient(AssemblyContext &c, unsigned int qp) const
libMesh::Real rho(libMesh::Real T, libMesh::Real p0) const
template<class Mu , class SH , class TC >
void GRINS::LowMachNavierStokes< Mu, SH, TC >::assemble_energy_time_deriv ( bool  compute_jacobian,
AssemblyContext context,
CachedValues cache 
)
protected

Helper function.

Definition at line 627 of file low_mach_navier_stokes.C.

References GRINS::CachedValues::get_cached_gradient_values(), GRINS::CachedValues::get_cached_values(), GRINS::Cache::TEMPERATURE, GRINS::Cache::TEMPERATURE_GRAD, GRINS::Cache::THERMO_PRESSURE, GRINS::Cache::X_VELOCITY, GRINS::Cache::Y_VELOCITY, and GRINS::Cache::Z_VELOCITY.

630  {
631  // The number of local degrees of freedom in each variable.
632  const unsigned int n_T_dofs = context.get_dof_indices(this->_T_var).size();
633  const unsigned int n_u_dofs = context.get_dof_indices(this->_u_var).size();
634 
635  // Element Jacobian * quadrature weights for interior integration.
636  const std::vector<libMesh::Real> &JxW =
637  context.get_element_fe(this->_T_var)->get_JxW();
638 
639  // The temperature shape functions at interior quadrature points.
640  const std::vector<std::vector<libMesh::Real> >& T_phi =
641  context.get_element_fe(this->_T_var)->get_phi();
642  const std::vector<std::vector<libMesh::Real> >& u_phi =
643  context.get_element_fe(this->_u_var)->get_phi();
644 
645  // The temperature shape functions gradients at interior quadrature points.
646  const std::vector<std::vector<libMesh::RealGradient> >& T_gradphi =
647  context.get_element_fe(this->_T_var)->get_dphi();
648 
649  libMesh::DenseSubVector<libMesh::Number> &FT = context.get_elem_residual(this->_T_var); // R_{T}
650 
651  unsigned int n_qpoints = context.get_element_qrule().n_points();
652  for (unsigned int qp=0; qp != n_qpoints; qp++)
653  {
654  libMesh::Number u, v, T, p0;
655  u = cache.get_cached_values(Cache::X_VELOCITY)[qp];
656  v = cache.get_cached_values(Cache::Y_VELOCITY)[qp];
657  T = cache.get_cached_values(Cache::TEMPERATURE)[qp];
658  p0 = cache.get_cached_values(Cache::THERMO_PRESSURE)[qp];
659 
660  libMesh::Gradient grad_T = cache.get_cached_gradient_values(Cache::TEMPERATURE_GRAD)[qp];
661 
662  libMesh::NumberVectorValue U(u,v);
663  if (this->_dim == 3)
664  U(2) = cache.get_cached_values(Cache::Z_VELOCITY)[qp]; // w
665 
666  libMesh::DenseSubMatrix<libMesh::Number> &KTu = context.get_elem_jacobian(this->_T_var, this->_u_var); // R_{u},{u}
667  libMesh::DenseSubMatrix<libMesh::Number> &KTv = context.get_elem_jacobian(this->_T_var, this->_v_var); // R_{u},{u}
668  libMesh::DenseSubMatrix<libMesh::Number>* KTw = NULL;
669 
670  libMesh::DenseSubMatrix<libMesh::Number> &KTT = context.get_elem_jacobian(this->_T_var, this->_T_var); // R_{u},{u}
671 
672  if( this->_dim == 3 )
673  {
674  KTw = &context.get_elem_jacobian(this->_T_var, this->_w_var); // R_{u},{w}
675  }
676 
677  libMesh::Number k = this->_k(T);
678  libMesh::Number dk_dT = this->_k.deriv(T);
679  libMesh::Number cp = this->_cp(T);
680  libMesh::Number d_cp = this->_cp.deriv(T);
681  libMesh::Number rho = this->rho( T, p0 );
682  libMesh::Number d_rho = this->d_rho_dT( T, p0 );
683 
684  // Now a loop over the pressure degrees of freedom. This
685  // computes the contributions of the continuity equation.
686  for (unsigned int i=0; i != n_T_dofs; i++)
687  {
688  FT(i) += ( -rho*cp*U*grad_T*T_phi[i][qp] // convection term
689  - k*grad_T*T_gradphi[i][qp] // diffusion term
690  )*JxW[qp];
691 
692 
693  if(compute_jacobian)
694  {
695  for (unsigned int j=0; j!=n_u_dofs; j++)
696  {
697  //pre-compute repeated term
698  libMesh::Number r0 = rho*cp*T_phi[i][qp]*u_phi[j][qp];
699 
700  KTu(i,j) += JxW[qp]*
701  -r0*grad_T(0);
702  //-rho*cp*u_phi[j][qp]*grad_T(0)*T_phi[i][qp];
703 
704  KTv(i,j) += JxW[qp]*
705  -r0*grad_T(1);
706  //-rho*cp*u_phi[j][qp]*grad_T(1)*T_phi[i][qp];
707 
708  if (this->_dim == 3)
709  {
710  (*KTw)(i,j) += JxW[qp]*
711  -r0*grad_T(2);
712  //-rho*cp*u_phi[j][qp]*grad_T(2)*T_phi[i][qp];
713  }
714 
715  } // end u_dofs loop (j)
716 
717 
718  for (unsigned int j=0; j!=n_T_dofs; j++)
719  {
720  KTT(i,j) += JxW[qp]* (
721  -rho*(
722  cp*U*T_phi[i][qp]*T_gradphi[j][qp]
723  + U*grad_T*T_phi[i][qp]*d_cp*T_phi[j][qp]
724  )
725  -cp*U*grad_T*T_phi[i][qp]*d_rho*T_phi[j][qp]
726  -k*T_gradphi[i][qp]*T_gradphi[j][qp]
727  -grad_T*T_gradphi[i][qp]*dk_dT*T_phi[j][qp]
728  );
729  } // end T_dofs loop (j)
730 
731  } // end if compute_jacobian
732  } // end outer T_dofs loop (i)
733  } //end qp loop
734 
735  return;
736  }
VariableIndex _u_var
Indices for each (owned) variable;.
unsigned int _dim
Physical dimension of problem.
SpecificHeat _cp
Specific heat object.
ThermalConductivity _k
Thermal conductivity object.
libMesh::Real T(const libMesh::Point &p, const AssemblyContext &c) const
libMesh::Real d_rho_dT(libMesh::Real T, libMesh::Real p0) const
libMesh::Real rho(libMesh::Real T, libMesh::Real p0) const
template<class Mu , class SH , class TC >
void GRINS::LowMachNavierStokes< Mu, SH, TC >::assemble_mass_time_deriv ( bool  compute_jacobian,
AssemblyContext context,
CachedValues cache 
)
protected

Helper function.

Definition at line 205 of file low_mach_navier_stokes.C.

References GRINS::CachedValues::get_cached_gradient_values(), GRINS::CachedValues::get_cached_values(), GRINS::Cache::TEMPERATURE, GRINS::Cache::TEMPERATURE_GRAD, GRINS::Cache::X_VELOCITY, GRINS::Cache::X_VELOCITY_GRAD, GRINS::Cache::Y_VELOCITY, GRINS::Cache::Y_VELOCITY_GRAD, GRINS::Cache::Z_VELOCITY, and GRINS::Cache::Z_VELOCITY_GRAD.

208  {
209  // The number of local degrees of freedom in each variable.
210  const unsigned int n_p_dofs = context.get_dof_indices(this->_p_var).size();
211 
212  // Element Jacobian * quadrature weights for interior integration.
213  const std::vector<libMesh::Real> &JxW =
214  context.get_element_fe(this->_u_var)->get_JxW();
215 
216  // The pressure shape functions at interior quadrature points.
217  const std::vector<std::vector<libMesh::Real> >& p_phi =
218  context.get_element_fe(this->_p_var)->get_phi();
219 
220 
221 
222  // The velocity shape functions at interior quadrature points.
223  const std::vector<std::vector<libMesh::Real> >& u_phi =
224  context.get_element_fe(this->_u_var)->get_phi();
225 
226  // The velocity shape function gradients (in global coords.)
227  // at interior quadrature points.
228  const std::vector<std::vector<libMesh::RealGradient> >& u_gradphi =
229  context.get_element_fe(this->_u_var)->get_dphi();
230 
231  // The temperature shape functions at interior quadrature points.
232  const std::vector<std::vector<libMesh::Real> >& T_phi =
233  context.get_element_fe(this->_T_var)->get_phi();
234 
235  // The temperature shape function gradients (in global coords.)
236  // at interior quadrature points.
237  const std::vector<std::vector<libMesh::RealGradient> >& T_gradphi =
238  context.get_element_fe(this->_T_var)->get_dphi();
239 
240 
241 
242  libMesh::DenseSubVector<libMesh::Number> &Fp = context.get_elem_residual(this->_p_var); // R_{p}
243 
244  unsigned int n_qpoints = context.get_element_qrule().n_points();
245 
246  // The number of local degrees of freedom in each variable.
247  const unsigned int n_t_dofs = context.get_dof_indices(this->_T_var).size();
248 
249  // The number of local degrees of freedom in each variable.
250  const unsigned int n_u_dofs = context.get_dof_indices(this->_u_var).size();
251 
252  // Check number of dofs is same for _u_var, v_var and w_var.
253  libmesh_assert (n_u_dofs == context.get_dof_indices(this->_v_var).size());
254  if (this->_dim == 3)
255  libmesh_assert (n_u_dofs == context.get_dof_indices(this->_w_var).size());
256 
257  for (unsigned int qp=0; qp != n_qpoints; qp++)
258  {
259  libMesh::Number u, v, T;
260  u = cache.get_cached_values(Cache::X_VELOCITY)[qp];
261  v = cache.get_cached_values(Cache::Y_VELOCITY)[qp];
262 
263  T = cache.get_cached_values(Cache::TEMPERATURE)[qp];
264 
265  libMesh::Gradient grad_u = cache.get_cached_gradient_values(Cache::X_VELOCITY_GRAD)[qp];
266  libMesh::Gradient grad_v = cache.get_cached_gradient_values(Cache::Y_VELOCITY_GRAD)[qp];
267 
268  libMesh::Gradient grad_T = cache.get_cached_gradient_values(Cache::TEMPERATURE_GRAD)[qp];
269 
270  libMesh::NumberVectorValue U(u,v);
271  if (this->_dim == 3)
272  U(2) = cache.get_cached_values(Cache::Z_VELOCITY)[qp]; // w
273 
274  libMesh::Number divU = grad_u(0) + grad_v(1);
275  if (this->_dim == 3)
276  {
277  libMesh::Gradient grad_w = cache.get_cached_gradient_values(Cache::Z_VELOCITY_GRAD)[qp];
278  divU += grad_w(2);
279  }
280 
281 
282  libMesh::DenseSubMatrix<libMesh::Number> &KPu = context.get_elem_jacobian(this->_p_var, this->_u_var);
283  libMesh::DenseSubMatrix<libMesh::Number> &KPv = context.get_elem_jacobian(this->_p_var, this->_v_var);
284  libMesh::DenseSubMatrix<libMesh::Number> &KPT = context.get_elem_jacobian(this->_p_var, this->_T_var);
285 
286  libMesh::DenseSubMatrix<libMesh::Number>* KPw = NULL;
287 
288  if( this->_dim == 3 )
289  {
290  KPw = &context.get_elem_jacobian(this->_p_var, this->_w_var);
291  }
292 
293  // Now a loop over the pressure degrees of freedom. This
294  // computes the contributions of the continuity equation.
295  for (unsigned int i=0; i != n_p_dofs; i++)
296  {
297  Fp(i) += (-U*grad_T/T + divU)*p_phi[i][qp]*JxW[qp];
298 
299 
300  if (compute_jacobian)
301  {
302 
303  for (unsigned int j=0; j!=n_u_dofs; j++)
304  {
305  KPu(i,j) += JxW[qp]*(
306  +u_gradphi[j][qp](0)*p_phi[i][qp]
307  -u_phi[j][qp]*p_phi[i][qp]*grad_T(0)/T
308  );
309 
310  KPv(i,j) += JxW[qp]*(
311  +u_gradphi[j][qp](1)*p_phi[i][qp]
312  -u_phi[j][qp]*p_phi[i][qp]*grad_T(1)/T
313  );
314 
315  if (this->_dim == 3)
316  {
317  (*KPw)(i,j) += JxW[qp]*(
318  +u_gradphi[j][qp](2)*p_phi[i][qp]
319  -u_phi[j][qp]*p_phi[i][qp]*grad_T(2)/T
320  );
321  }
322 
323  }
324 
325  for (unsigned int j=0; j!=n_t_dofs; j++)
326  {
327  KPT(i,j) += JxW[qp]*(
328  -T_gradphi[j][qp]*U*p_phi[i][qp]/T
329  +U*p_phi[i][qp]*grad_T*T_phi[j][qp])/(T*T);
330  }
331  } // end if compute_jacobian
332  } // end p_dofs loop
333  } // end qp loop
334 
335  return;
336  }
VariableIndex _u_var
Indices for each (owned) variable;.
unsigned int _dim
Physical dimension of problem.
libMesh::Real T(const libMesh::Point &p, const AssemblyContext &c) const
template<class Mu , class SH , class TC >
void GRINS::LowMachNavierStokes< Mu, SH, TC >::assemble_momentum_mass_residual ( bool  compute_jacobian,
AssemblyContext c 
)
protected

Helper function.

Definition at line 781 of file low_mach_navier_stokes.C.

783  {
784  // Element Jacobian * quadrature weights for interior integration
785  const std::vector<libMesh::Real> &JxW =
786  context.get_element_fe(this->_u_var)->get_JxW();
787 
788  // The shape functions at interior quadrature points.
789  const std::vector<std::vector<libMesh::Real> >& u_phi =
790  context.get_element_fe(this->_u_var)->get_phi();
791 
792  // The number of local degrees of freedom in each variable
793  const unsigned int n_u_dofs = context.get_dof_indices(this->_u_var).size();
794 
795  // for convenience
796  if (this->_dim != 3)
797  this->_w_var = this->_u_var;
798 
799  // The subvectors and submatrices we need to fill:
800  libMesh::DenseSubVector<libMesh::Real> &F_u = context.get_elem_residual(this->_u_var);
801  libMesh::DenseSubVector<libMesh::Real> &F_v = context.get_elem_residual(this->_v_var);
802  libMesh::DenseSubVector<libMesh::Real> &F_w = context.get_elem_residual(this->_w_var);
803 
804  unsigned int n_qpoints = context.get_element_qrule().n_points();
805 
806  for (unsigned int qp = 0; qp != n_qpoints; ++qp)
807  {
808  // For the mass residual, we need to be a little careful.
809  // The time integrator is handling the time-discretization
810  // for us so we need to supply M(u_fixed)*u' for the residual.
811  // u_fixed will be given by the fixed_interior_value function
812  // while u' will be given by the interior_rate function.
813  libMesh::Real u_dot, v_dot, w_dot = 0.0;
814  context.interior_rate(this->_u_var, qp, u_dot);
815  context.interior_rate(this->_v_var, qp, v_dot);
816 
817  if( this->_dim == 3 )
818  context.interior_rate(this->_w_var, qp, w_dot);
819 
820  libMesh::Real T = context.fixed_interior_value(this->_T_var, qp);
821 
822  libMesh::Number rho = this->rho(T, this->get_p0_transient(context, qp));
823 
824  for (unsigned int i = 0; i != n_u_dofs; ++i)
825  {
826  F_u(i) -= rho*u_dot*u_phi[i][qp]*JxW[qp];
827  F_v(i) -= rho*v_dot*u_phi[i][qp]*JxW[qp];
828 
829  if( this->_dim == 3 )
830  F_w(i) -= rho*w_dot*u_phi[i][qp]*JxW[qp];
831 
832  /*
833  if( compute_jacobian )
834  {
835  for (unsigned int j=0; j != n_u_dofs; j++)
836  {
837  // Assuming rho is constant w.r.t. u, v, w
838  // and T (if Boussinesq added).
839  libMesh::Real value = JxW[qp]*_rho*u_phi[i][qp]*u_phi[j][qp];
840 
841  M_uu(i,j) += value;
842  M_vv(i,j) += value;
843 
844  if( _dim == 3)
845  {
846  M_ww(i,j) += value;
847  }
848 
849  } // End DoF loop j
850  } // End Jacobian check
851  */
852 
853  } // End DoF loop i
854  } // End quadrature loop qp
855 
856  return;
857  }
VariableIndex _u_var
Indices for each (owned) variable;.
unsigned int _dim
Physical dimension of problem.
libMesh::Real T(const libMesh::Point &p, const AssemblyContext &c) const
libMesh::Real get_p0_transient(AssemblyContext &c, unsigned int qp) const
libMesh::Real rho(libMesh::Real T, libMesh::Real p0) const
template<class Mu , class SH , class TC >
void GRINS::LowMachNavierStokes< Mu, SH, TC >::assemble_momentum_time_deriv ( bool  compute_jacobian,
AssemblyContext context,
CachedValues cache 
)
protected

Helper function.

Definition at line 339 of file low_mach_navier_stokes.C.

References GRINS::CachedValues::get_cached_gradient_values(), GRINS::CachedValues::get_cached_values(), GRINS::Cache::PRESSURE, GRINS::Cache::TEMPERATURE, GRINS::Cache::THERMO_PRESSURE, GRINS::Cache::X_VELOCITY, GRINS::Cache::X_VELOCITY_GRAD, GRINS::Cache::Y_VELOCITY, GRINS::Cache::Y_VELOCITY_GRAD, GRINS::Cache::Z_VELOCITY, and GRINS::Cache::Z_VELOCITY_GRAD.

342  {
343  // The number of local degrees of freedom in each variable.
344  const unsigned int n_u_dofs = context.get_dof_indices(this->_u_var).size();
345  const unsigned int n_p_dofs = context.get_dof_indices(this->_p_var).size();
346  const unsigned int n_T_dofs = context.get_dof_indices(this->_T_var).size();
347 
348  // Check number of dofs is same for _u_var, v_var and w_var.
349  libmesh_assert (n_u_dofs == context.get_dof_indices(this->_v_var).size());
350  if (this->_dim == 3)
351  libmesh_assert (n_u_dofs == context.get_dof_indices(this->_w_var).size());
352 
353  // Element Jacobian * quadrature weights for interior integration.
354  const std::vector<libMesh::Real> &JxW =
355  context.get_element_fe(this->_u_var)->get_JxW();
356 
357  // The pressure shape functions at interior quadrature points.
358  const std::vector<std::vector<libMesh::Real> >& u_phi =
359  context.get_element_fe(this->_u_var)->get_phi();
360  const std::vector<std::vector<libMesh::Real> >& p_phi =
361  context.get_element_fe(this->_p_var)->get_phi();
362  const std::vector<std::vector<libMesh::Real> >& T_phi =
363  context.get_element_fe(this->_T_var)->get_phi();
364 
365  // The velocity shape function gradients at interior quadrature points.
366  const std::vector<std::vector<libMesh::RealGradient> >& u_gradphi =
367  context.get_element_fe(this->_u_var)->get_dphi();
368 
369  libMesh::DenseSubVector<libMesh::Number> &Fu = context.get_elem_residual(this->_u_var); // R_{u}
370  libMesh::DenseSubVector<libMesh::Number> &Fv = context.get_elem_residual(this->_v_var); // R_{v}
371  libMesh::DenseSubVector<libMesh::Number> &Fw = context.get_elem_residual(this->_w_var); // R_{w}
372 
373  unsigned int n_qpoints = context.get_element_qrule().n_points();
374  for (unsigned int qp=0; qp != n_qpoints; qp++)
375  {
376  libMesh::Number u, v, p, p0, T;
377  u = cache.get_cached_values(Cache::X_VELOCITY)[qp];
378  v = cache.get_cached_values(Cache::Y_VELOCITY)[qp];
379 
380  T = cache.get_cached_values(Cache::TEMPERATURE)[qp];
381  p = cache.get_cached_values(Cache::PRESSURE)[qp];
382  p0 = cache.get_cached_values(Cache::THERMO_PRESSURE)[qp];
383 
384  libMesh::Gradient grad_u = cache.get_cached_gradient_values(Cache::X_VELOCITY_GRAD)[qp];
385  libMesh::Gradient grad_v = cache.get_cached_gradient_values(Cache::Y_VELOCITY_GRAD)[qp];
386 
387  libMesh::Gradient grad_w;
388  if (this->_dim == 3)
389  grad_w = cache.get_cached_gradient_values(Cache::Z_VELOCITY_GRAD)[qp];
390 
391  libMesh::NumberVectorValue grad_uT( grad_u(0), grad_v(0) );
392  libMesh::NumberVectorValue grad_vT( grad_u(1), grad_v(1) );
393  libMesh::NumberVectorValue grad_wT;
394  if( this->_dim == 3 )
395  {
396  grad_uT(2) = grad_w(0);
397  grad_vT(2) = grad_w(1);
398  grad_wT = libMesh::NumberVectorValue( grad_u(2), grad_v(2), grad_w(2) );
399  }
400 
401  libMesh::NumberVectorValue U(u,v);
402  if (this->_dim == 3)
403  U(2) = cache.get_cached_values(Cache::Z_VELOCITY)[qp]; // w
404 
405  libMesh::Number divU = grad_u(0) + grad_v(1);
406  if (this->_dim == 3)
407  divU += grad_w(2);
408 
409  libMesh::Number rho = this->rho( T, p0 );
410  libMesh::Number d_rho = this->d_rho_dT( T, p0 );
411  libMesh::Number d_mu = this->_mu.deriv(T);
412 
413  libMesh::DenseSubMatrix<libMesh::Number> &Kuu = context.get_elem_jacobian(this->_u_var, this->_u_var); // R_{u},{u}
414  libMesh::DenseSubMatrix<libMesh::Number> &Kuv = context.get_elem_jacobian(this->_u_var, this->_v_var); // R_{u},{v}
415  libMesh::DenseSubMatrix<libMesh::Number>* Kuw = NULL;
416 
417  libMesh::DenseSubMatrix<libMesh::Number> &Kvu = context.get_elem_jacobian(this->_v_var, this->_u_var); // R_{v},{u}
418  libMesh::DenseSubMatrix<libMesh::Number> &Kvv = context.get_elem_jacobian(this->_v_var, this->_v_var); // R_{v},{v}
419  libMesh::DenseSubMatrix<libMesh::Number>* Kvw = NULL;
420 
421  libMesh::DenseSubMatrix<libMesh::Number>* Kwu = NULL;
422  libMesh::DenseSubMatrix<libMesh::Number>* Kwv = NULL;
423  libMesh::DenseSubMatrix<libMesh::Number>* Kww = NULL;
424 
425  libMesh::DenseSubMatrix<libMesh::Number> &Kup = context.get_elem_jacobian(this->_u_var, this->_p_var); // R_{u},{p}
426  libMesh::DenseSubMatrix<libMesh::Number> &Kvp = context.get_elem_jacobian(this->_v_var, this->_p_var); // R_{v},{p}
427  libMesh::DenseSubMatrix<libMesh::Number>* Kwp = NULL;
428 
429  libMesh::DenseSubMatrix<libMesh::Number> &KuT = context.get_elem_jacobian(this->_u_var, this->_T_var); // R_{u},{p}
430  libMesh::DenseSubMatrix<libMesh::Number> &KvT = context.get_elem_jacobian(this->_v_var, this->_T_var); // R_{v},{p}
431  libMesh::DenseSubMatrix<libMesh::Number>* KwT = NULL;
432 
433  if( this->_dim == 3 )
434  {
435  Kuw = &context.get_elem_jacobian(this->_u_var, this->_w_var); // R_{u},{w}
436  Kvw = &context.get_elem_jacobian(this->_v_var, this->_w_var); // R_{v},{w}
437  Kwu = &context.get_elem_jacobian(this->_w_var, this->_u_var); // R_{w},{u};
438  Kwv = &context.get_elem_jacobian(this->_w_var, this->_v_var); // R_{w},{v};
439  Kww = &context.get_elem_jacobian(this->_w_var, this->_w_var); // R_{w},{w}
440  Kwp = &context.get_elem_jacobian(this->_w_var, this->_p_var); // R_{w},{p}
441  KwT = &context.get_elem_jacobian(this->_w_var, this->_T_var); // R_{w},{T}
442  }
443 
444  // Now a loop over the pressure degrees of freedom. This
445  // computes the contributions of the continuity equation.
446  for (unsigned int i=0; i != n_u_dofs; i++)
447  {
448  Fu(i) += ( -rho*U*grad_u*u_phi[i][qp] // convection term
449  + p*u_gradphi[i][qp](0) // pressure term
450  - this->_mu(T)*(u_gradphi[i][qp]*grad_u + u_gradphi[i][qp]*grad_uT
451  - 2.0/3.0*divU*u_gradphi[i][qp](0) ) // diffusion term
452  + rho*this->_g(0)*u_phi[i][qp] // hydrostatic term
453  )*JxW[qp];
454 
455  Fv(i) += ( -rho*U*grad_v*u_phi[i][qp] // convection term
456  + p*u_gradphi[i][qp](1) // pressure term
457  - this->_mu(T)*(u_gradphi[i][qp]*grad_v + u_gradphi[i][qp]*grad_vT
458  - 2.0/3.0*divU*u_gradphi[i][qp](1) ) // diffusion term
459  + rho*this->_g(1)*u_phi[i][qp] // hydrostatic term
460  )*JxW[qp];
461  if (this->_dim == 3)
462  {
463  Fw(i) += ( -rho*U*grad_w*u_phi[i][qp] // convection term
464  + p*u_gradphi[i][qp](2) // pressure term
465  - this->_mu(T)*(u_gradphi[i][qp]*grad_w + u_gradphi[i][qp]*grad_wT
466  - 2.0/3.0*divU*u_gradphi[i][qp](2) ) // diffusion term
467  + rho*this->_g(2)*u_phi[i][qp] // hydrostatic term
468  )*JxW[qp];
469  }
470 
471  if (compute_jacobian && context.get_elem_solution_derivative())
472  {
473  libmesh_assert (context.get_elem_solution_derivative() == 1.0);
474 
475  for (unsigned int j=0; j != n_u_dofs; j++)
476  {
477  //precompute repeated terms
478  libMesh::Number r0 = rho*U*u_phi[i][qp]*u_gradphi[j][qp];
479  libMesh::Number r1 = u_gradphi[i][qp]*u_gradphi[j][qp];
480  libMesh::Number r2 = rho*u_phi[i][qp]*u_phi[j][qp];
481 
482 
483  Kuu(i,j) += JxW[qp]*(
484  -r0
485  //-rho*U*u_gradphi[j][qp]*u_phi[i][qp]
486  -r2*grad_u(0)
487  //-rho*u_phi[i][qp]*grad_u(0)*u_phi[j][qp]
488  -this->_mu(T)*(
489  r1
490  //u_gradphi[i][qp]*u_gradphi[j][qp]
491  + u_gradphi[i][qp](0)*u_gradphi[j][qp](0) // transpose
492  - 2.0/3.0*u_gradphi[i][qp](0)*u_gradphi[j][qp](0)
493  ));
494  Kvv(i,j) += JxW[qp]*(
495  -r0
496  //-rho*U*u_gradphi[j][qp]*u_phi[i][qp]
497  -r2*grad_v(1)
498  //-rho*u_phi[i][qp]*grad_v(1)*u_phi[j][qp]
499  -this->_mu(T)*(
500  r1
501  //u_gradphi[i][qp]*u_gradphi[j][qp]
502  + u_gradphi[i][qp](1)*u_gradphi[j][qp](1) // transpose
503  - 2.0/3.0*u_gradphi[i][qp](1)*u_gradphi[j][qp](1)
504  ));
505 
506  Kuv(i,j) += JxW[qp]*(
507  +2.0/3.0*this->_mu(T)*u_gradphi[i][qp](0)*u_gradphi[j][qp](1)
508  -this->_mu(T)*u_gradphi[i][qp](1)*u_gradphi[j][qp](0)
509  -r2*grad_u(1)
510  //-rho*u_phi[i][qp]*u_phi[j][qp]*grad_u(1));
511  );
512 
513  Kvu(i,j) += JxW[qp]*(
514  +2.0/3.0*this->_mu(T)*u_gradphi[i][qp](1)*u_gradphi[j][qp](0)
515  -this->_mu(T)*u_gradphi[i][qp](0)*u_gradphi[j][qp](1)
516  -r2*grad_v(0)
517  //-rho*u_phi[i][qp]*u_phi[j][qp]*grad_v(0));
518  );
519 
520 
521 
522  if (this->_dim == 3)
523  {
524  (*Kuw)(i,j) += JxW[qp]*(
525  +2.0/3.0*this->_mu(T)*u_gradphi[i][qp](0)*u_gradphi[j][qp](2)
526  -this->_mu(T)*u_gradphi[i][qp](2)*u_gradphi[j][qp](0)
527  -r2*grad_u(2)
528  //-rho*u_phi[i][qp]*u_phi[j][qp]*grad_u(2)
529  );
530 
531  (*Kvw)(i,j) += JxW[qp]*(
532  +2.0/3.0*this->_mu(T)*u_gradphi[i][qp](1)*u_gradphi[j][qp](2)
533  -this->_mu(T)*u_gradphi[i][qp](2)*u_gradphi[j][qp](1)
534  -r2*grad_v(2)
535  //-rho*u_phi[i][qp]*u_phi[j][qp]*grad_v(2)
536  );
537 
538  (*Kwu)(i,j) += JxW[qp]*(
539  +2.0/3.0*this->_mu(T)*u_gradphi[i][qp](2)*u_gradphi[j][qp](0)
540  -this->_mu(T)*u_gradphi[i][qp](0)*u_gradphi[j][qp](2)
541  -r2*grad_w(0)
542  //-rho*u_phi[i][qp]*u_phi[j][qp]*grad_w(0)
543  );
544 
545  (*Kwv)(i,j) += JxW[qp]*(
546  +2.0/3.0*this->_mu(T)*u_gradphi[i][qp](2)*u_gradphi[j][qp](1)
547  -this->_mu(T)*u_gradphi[i][qp](1)*u_gradphi[j][qp](2)
548  -r2*grad_w(1)
549  //-rho*u_phi[i][qp]*u_phi[j][qp]*grad_w(1)
550  );
551 
552  (*Kww)(i,j) += JxW[qp]*(
553  -r0
554  //-rho*U*u_gradphi[j][qp]*u_phi[i][qp]
555  -r2*grad_w(2)
556  //-rho*u_phi[i][qp]*grad_w(2)*u_phi[j][qp]
557  -this->_mu(T)*(
558  r1
559  //u_gradphi[i][qp]*u_gradphi[j][qp]
560  + u_gradphi[i][qp](2)*u_gradphi[j][qp](2) // transpose
561  - 2.0/3.0*u_gradphi[i][qp](2)*u_gradphi[j][qp](2)
562  ));
563 
564  } // end if _dim==3
565  } // end of the inner dof (j) loop
566 
567  for (unsigned int j=0; j!=n_T_dofs; j++)
568  {
569 
570  //precompute repeated term
571  libMesh:: Number r3 = d_rho*u_phi[i][qp]*T_phi[j][qp];
572 
573  // Analytical Jacobains
574  KuT(i,j) += JxW[qp]*(
575  -r3*U*grad_u
576  //-d_rho*T_phi[j][qp]*U*grad_u*u_phi[i][qp]
577  -d_mu*T_phi[j][qp]*grad_u*u_gradphi[i][qp]
578  -d_mu*T_phi[j][qp]*grad_u(0)*u_gradphi[i][qp](0) // transpose
579  +2.0/3.0*d_mu*T_phi[j][qp]*divU*u_gradphi[i][qp](0)
580  +r3*this->_g(0)
581  //+d_rho*T_phi[j][qp]*this->_g(0)*u_phi[i][qp]
582  );
583 
584  KvT(i,j) += JxW[qp]*(
585  -r3*U*grad_v
586  //-d_rho*T_phi[j][qp]*U*grad_v*u_phi[i][qp]
587  -d_mu*T_phi[j][qp]*grad_v*u_gradphi[i][qp]
588  -d_mu*T_phi[j][qp]*grad_v(1)*u_gradphi[i][qp](1) // transpose
589  +2.0/3.0*d_mu*T_phi[j][qp]*divU*u_gradphi[i][qp](1)
590  +r3*this->_g(1)
591  //+d_rho*T_phi[j][qp]*this->_g(1)*u_phi[i][qp]
592  );
593 
594  if (this->_dim == 3)
595  {
596  (*KwT)(i,j) += JxW[qp]*(
597  -r3*U*grad_w
598  //-d_rho*T_phi[j][qp]*U*grad_v*u_phi[i][qp]
599  -d_mu*T_phi[j][qp]*grad_w*u_gradphi[i][qp]
600  -d_mu*T_phi[j][qp]*grad_w(2)*u_gradphi[i][qp](2) // transpose
601  +2.0/3.0*d_mu*T_phi[j][qp]*divU*u_gradphi[i][qp](2)
602  +r3*this->_g(2)
603  //+d_rho*T_phi[j][qp]*this->_g(2)*u_phi[i][qp]
604  );
605 
606  } // end if _dim==3
607  } // end T_dofs loop
608 
609  // Matrix contributions for the up, vp and wp couplings
610  for (unsigned int j=0; j != n_p_dofs; j++)
611  {
612  Kup(i,j) += JxW[qp]*p_phi[j][qp]*u_gradphi[i][qp](0);
613  Kvp(i,j) += JxW[qp]*p_phi[j][qp]*u_gradphi[i][qp](1);
614  if (this->_dim == 3)
615  (*Kwp)(i,j) += JxW[qp]*p_phi[j][qp]*u_gradphi[i][qp](2);
616  } // end of the inner dof (j) loop
617 
618  } // end - if (compute_jacobian && context.get_elem_solution_derivative())
619 
620  } // end of the outer dof (i) loop
621  } // end of the quadrature point (qp) loop
622 
623  return;
624  }
VariableIndex _u_var
Indices for each (owned) variable;.
unsigned int _dim
Physical dimension of problem.
libMesh::Real T(const libMesh::Point &p, const AssemblyContext &c) const
libMesh::Point _g
Gravity vector.
libMesh::Real d_rho_dT(libMesh::Real T, libMesh::Real p0) const
libMesh::Real rho(libMesh::Real T, libMesh::Real p0) const
template<class Mu , class SH , class TC >
void GRINS::LowMachNavierStokes< Mu, SH, TC >::assemble_thermo_press_elem_time_deriv ( bool  compute_jacobian,
AssemblyContext c 
)
protected

Definition at line 906 of file low_mach_navier_stokes.C.

908  {
909  // Element Jacobian * quadrature weights for interior integration
910  const std::vector<libMesh::Real> &JxW =
911  context.get_element_fe(this->_T_var)->get_JxW();
912 
913  // The number of local degrees of freedom in each variable
914  const unsigned int n_p0_dofs = context.get_dof_indices(this->_p0_var).size();
915 
916  // The subvectors and submatrices we need to fill:
917  libMesh::DenseSubVector<libMesh::Real> &F_p0 = context.get_elem_residual(this->_p0_var);
918 
919  unsigned int n_qpoints = context.get_element_qrule().n_points();
920 
921  for (unsigned int qp = 0; qp != n_qpoints; ++qp)
922  {
923  libMesh::Number T;
924  T = context.interior_value(this->_T_var, qp);
925 
926  libMesh::Gradient grad_u, grad_v, grad_w;
927  grad_u = context.interior_gradient(this->_u_var, qp);
928  grad_v = context.interior_gradient(this->_v_var, qp);
929  if (this->_dim == 3)
930  grad_w = context.interior_gradient(this->_w_var, qp);
931 
932  libMesh::Number divU = grad_u(0) + grad_v(1);
933  if(this->_dim==3)
934  divU += grad_w(2);
935 
936  //libMesh::Number cp = this->_cp(T);
937  //libMesh::Number cv = cp + this->_R;
938  //libMesh::Number gamma = cp/cv;
939  //libMesh::Number gamma_ratio = gamma/(gamma-1.0);
940 
941  libMesh::Number p0 = context.interior_value( this->_p0_var, qp );
942 
943  for (unsigned int i = 0; i != n_p0_dofs; ++i)
944  {
945  F_p0(i) += (p0/T - this->_p0/this->_T0)*JxW[qp];
946  //F_p0(i) -= p0*gamma_ratio*divU*JxW[qp];
947  } // End DoF loop i
948  }
949 
950  return;
951  }
VariableIndex _u_var
Indices for each (owned) variable;.
unsigned int _dim
Physical dimension of problem.
libMesh::Real T(const libMesh::Point &p, const AssemblyContext &c) const
template<class Mu , class SH , class TC >
void GRINS::LowMachNavierStokes< Mu, SH, TC >::assemble_thermo_press_mass_residual ( bool  compute_jacobian,
AssemblyContext c 
)
protected

Definition at line 1004 of file low_mach_navier_stokes.C.

1006  {
1007  // The number of local degrees of freedom in each variable.
1008  const unsigned int n_p0_dofs = context.get_dof_indices(this->_p0_var).size();
1009  const unsigned int n_T_dofs = context.get_dof_indices(this->_T_var).size();
1010  const unsigned int n_p_dofs = context.get_dof_indices(this->_p_var).size();
1011 
1012  // Element Jacobian * quadrature weights for interior integration
1013  const std::vector<libMesh::Real> &JxW =
1014  context.get_element_fe(this->_T_var)->get_JxW();
1015 
1016  // The temperature shape functions at interior quadrature points.
1017  const std::vector<std::vector<libMesh::Real> >& T_phi =
1018  context.get_element_fe(this->_T_var)->get_phi();
1019 
1020  // The temperature shape functions at interior quadrature points.
1021  const std::vector<std::vector<libMesh::Real> >& p_phi =
1022  context.get_element_fe(this->_p_var)->get_phi();
1023 
1024  // The subvectors and submatrices we need to fill:
1025  libMesh::DenseSubVector<libMesh::Real> &F_p0 = context.get_elem_residual(this->_p0_var);
1026  libMesh::DenseSubVector<libMesh::Real> &F_T = context.get_elem_residual(this->_T_var);
1027  libMesh::DenseSubVector<libMesh::Real> &F_p = context.get_elem_residual(this->_p_var);
1028 
1029  unsigned int n_qpoints = context.get_element_qrule().n_points();
1030 
1031  for (unsigned int qp = 0; qp != n_qpoints; ++qp)
1032  {
1033  libMesh::Number T;
1034  T = context.fixed_interior_value(this->_T_var, qp);
1035 
1036  libMesh::Number cp = this->_cp(T);
1037  libMesh::Number cv = cp + this->_R;
1038  libMesh::Number gamma = cp/cv;
1039  libMesh::Number one_over_gamma = 1.0/(gamma-1.0);
1040 
1041  libMesh::Number p0_dot;
1042  context.interior_rate(this->_p0_var, qp, p0_dot);
1043 
1044  libMesh::Number p0 = context.fixed_interior_value(this->_p0_var, qp );
1045 
1046  for (unsigned int i=0; i != n_p0_dofs; i++)
1047  {
1048  F_p0(i) -= p0_dot*one_over_gamma*JxW[qp];
1049  }
1050 
1051  for (unsigned int i=0; i != n_T_dofs; i++)
1052  {
1053  F_T(i) += p0_dot*T_phi[i][qp]*JxW[qp];
1054  }
1055 
1056  for (unsigned int i=0; i != n_p_dofs; i++)
1057  {
1058  F_p(i) += p0_dot/p0*p_phi[i][qp]*JxW[qp];
1059  }
1060 
1061  }
1062  return;
1063  }
SpecificHeat _cp
Specific heat object.
libMesh::Real T(const libMesh::Point &p, const AssemblyContext &c) const
template<class Mu , class SH , class TC >
void GRINS::LowMachNavierStokes< Mu, SH, TC >::assemble_thermo_press_side_time_deriv ( bool  compute_jacobian,
AssemblyContext c 
)
protected

Definition at line 954 of file low_mach_navier_stokes.C.

956  {
957  // The number of local degrees of freedom in each variable.
958  const unsigned int n_p0_dofs = context.get_dof_indices(this->_p0_var).size();
959 
960  // Element Jacobian * quadrature weight for side integration.
961  //const std::vector<libMesh::Real> &JxW_side = context.get_side_fe(this->_T_var)->get_JxW();
962 
963  //const std::vector<Point> &normals = context.get_side_fe(this->_T_var)->get_normals();
964 
965  //libMesh::DenseSubVector<libMesh::Number> &F_p0 = context.get_elem_residual(this->_p0_var); // residual
966 
967  // Physical location of the quadrature points
968  //const std::vector<libMesh::Point>& qpoint = context.get_side_fe(this->_T_var)->get_xyz();
969 
970  unsigned int n_qpoints = context.get_side_qrule().n_points();
971  for (unsigned int qp=0; qp != n_qpoints; qp++)
972  {
973  /*
974  libMesh::Number T = context.side_value( this->_T_var, qp );
975  libMesh::Gradient U = ( context.side_value( this->_u_var, qp ),
976  context.side_value( this->_v_var, qp ) );
977  libMesh::Gradient grad_T = context.side_gradient( this->_T_var, qp );
978 
979 
980  libMesh::Number p0 = context.side_value( this->_p0_var, qp );
981 
982  libMesh::Number k = this->_k(T);
983  libMesh::Number cp = this->_cp(T);
984 
985  libMesh::Number cv = cp + this->_R;
986  libMesh::Number gamma = cp/cv;
987  libMesh::Number gamma_ratio = gamma/(gamma-1.0);
988  */
989 
990  //std::cout << "U = " << U << std::endl;
991 
992  //std::cout << "x = " << qpoint[qp] << ", grad_T = " << grad_T << std::endl;
993 
994  for (unsigned int i=0; i != n_p0_dofs; i++)
995  {
996  //F_p0(i) += (k*grad_T*normals[qp] - p0*gamma_ratio*U*normals[qp] )*JxW_side[qp];
997  }
998  }
999 
1000  return;
1001  }
void GRINS::Physics::attach_dirichlet_bound_func ( const GRINS::DBCContainer dirichlet_bc)
inherited

Definition at line 150 of file physics.C.

References GRINS::Physics::_bc_handler, and GRINS::BCHandlingBase::attach_dirichlet_bound_func().

151  {
152  _bc_handler->attach_dirichlet_bound_func( dirichlet_bc );
153  return;
154  }
GRINS::BCHandlingBase * _bc_handler
Definition: physics.h:256
void attach_dirichlet_bound_func(const GRINS::DBCContainer &dirichlet_bc)
void GRINS::Physics::attach_neumann_bound_func ( GRINS::NBCContainer neumann_bcs)
inherited

Definition at line 144 of file physics.C.

References GRINS::Physics::_bc_handler, and GRINS::BCHandlingBase::attach_neumann_bound_func().

145  {
146  _bc_handler->attach_neumann_bound_func( neumann_bcs );
147  return;
148  }
GRINS::BCHandlingBase * _bc_handler
Definition: physics.h:256
void attach_neumann_bound_func(GRINS::NBCContainer &neumann_bcs)
void GRINS::Physics::auxiliary_init ( MultiphysicsSystem system)
virtualinherited

Any auxillary initialization a Physics class may need.

This is called after all variables are added, so this method can safely query the MultiphysicsSystem about variable information.

Definition at line 113 of file physics.C.

114  {
115  return;
116  }
void GRINS::Physics::compute_element_constraint_cache ( const AssemblyContext context,
CachedValues cache 
)
virtualinherited

Definition at line 185 of file physics.C.

Referenced by GRINS::MultiphysicsSystem::element_constraint().

187  {
188  return;
189  }
template<class Mu , class SH , class TC >
void GRINS::LowMachNavierStokes< Mu, SH, TC >::compute_element_time_derivative_cache ( const AssemblyContext context,
CachedValues cache 
)
virtual

Reimplemented from GRINS::Physics.

Definition at line 1066 of file low_mach_navier_stokes.C.

References GRINS::Cache::PRESSURE, GRINS::CachedValues::set_gradient_values(), GRINS::CachedValues::set_values(), GRINS::Cache::TEMPERATURE, GRINS::Cache::TEMPERATURE_GRAD, GRINS::Cache::THERMO_PRESSURE, GRINS::Cache::X_VELOCITY, GRINS::Cache::X_VELOCITY_GRAD, GRINS::Cache::Y_VELOCITY, GRINS::Cache::Y_VELOCITY_GRAD, GRINS::Cache::Z_VELOCITY, and GRINS::Cache::Z_VELOCITY_GRAD.

1068  {
1069  const unsigned int n_qpoints = context.get_element_qrule().n_points();
1070 
1071  std::vector<libMesh::Real> u, v, w, T, p, p0;
1072  u.resize(n_qpoints);
1073  v.resize(n_qpoints);
1074  if( this->_dim > 2 )
1075  w.resize(n_qpoints);
1076 
1077  T.resize(n_qpoints);
1078  p.resize(n_qpoints);
1079  p0.resize(n_qpoints);
1080 
1081  std::vector<libMesh::Gradient> grad_u, grad_v, grad_w, grad_T;
1082  grad_u.resize(n_qpoints);
1083  grad_v.resize(n_qpoints);
1084  if( this->_dim > 2 )
1085  grad_w.resize(n_qpoints);
1086 
1087  grad_T.resize(n_qpoints);
1088 
1089  for (unsigned int qp = 0; qp != n_qpoints; ++qp)
1090  {
1091  u[qp] = context.interior_value(this->_u_var, qp);
1092  v[qp] = context.interior_value(this->_v_var, qp);
1093 
1094  grad_u[qp] = context.interior_gradient(this->_u_var, qp);
1095  grad_v[qp] = context.interior_gradient(this->_v_var, qp);
1096  if( this->_dim > 2 )
1097  {
1098  w[qp] = context.interior_value(this->_w_var, qp);
1099  grad_w[qp] = context.interior_gradient(this->_w_var, qp);
1100  }
1101  T[qp] = context.interior_value(this->_T_var, qp);
1102  grad_T[qp] = context.interior_gradient(this->_T_var, qp);
1103 
1104  p[qp] = context.interior_value(this->_p_var, qp);
1105  p0[qp] = this->get_p0_steady(context, qp);
1106  }
1107 
1108  cache.set_values(Cache::X_VELOCITY, u);
1109  cache.set_values(Cache::Y_VELOCITY, v);
1110 
1111  cache.set_gradient_values(Cache::X_VELOCITY_GRAD, grad_u);
1112  cache.set_gradient_values(Cache::Y_VELOCITY_GRAD, grad_v);
1113 
1114  if(this->_dim > 2)
1115  {
1116  cache.set_values(Cache::Z_VELOCITY, w);
1117  cache.set_gradient_values(Cache::Z_VELOCITY_GRAD, grad_w);
1118  }
1119 
1120  cache.set_values(Cache::TEMPERATURE, T);
1121  cache.set_gradient_values(Cache::TEMPERATURE_GRAD, grad_T);
1122 
1123  cache.set_values(Cache::PRESSURE, p);
1124  cache.set_values(Cache::THERMO_PRESSURE, p0);
1125 
1126  return;
1127  }
VariableIndex _u_var
Indices for each (owned) variable;.
libMesh::Real get_p0_steady(const AssemblyContext &c, unsigned int qp) const
unsigned int _dim
Physical dimension of problem.
libMesh::Real T(const libMesh::Point &p, const AssemblyContext &c) const
void GRINS::Physics::compute_mass_residual_cache ( const AssemblyContext context,
CachedValues cache 
)
virtualinherited

Definition at line 203 of file physics.C.

Referenced by GRINS::MultiphysicsSystem::mass_residual().

205  {
206  return;
207  }
void GRINS::Physics::compute_nonlocal_constraint_cache ( const AssemblyContext context,
CachedValues cache 
)
virtualinherited

Definition at line 197 of file physics.C.

Referenced by GRINS::MultiphysicsSystem::nonlocal_constraint().

199  {
200  return;
201  }
void GRINS::Physics::compute_nonlocal_mass_residual_cache ( const AssemblyContext context,
CachedValues cache 
)
virtualinherited

Definition at line 209 of file physics.C.

Referenced by GRINS::MultiphysicsSystem::nonlocal_mass_residual().

211  {
212  return;
213  }
void GRINS::Physics::compute_nonlocal_time_derivative_cache ( const AssemblyContext context,
CachedValues cache 
)
virtualinherited

Definition at line 179 of file physics.C.

Referenced by GRINS::MultiphysicsSystem::nonlocal_time_derivative().

181  {
182  return;
183  }
template<class Mu , class SH , class TC >
void GRINS::LowMachNavierStokes< Mu, SH, TC >::compute_postprocessed_quantity ( unsigned int  quantity_index,
const AssemblyContext context,
const libMesh::Point &  point,
libMesh::Real &  value 
)
virtual

Reimplemented from GRINS::Physics.

Definition at line 1130 of file low_mach_navier_stokes.C.

1134  {
1135  if( quantity_index == this->_rho_index )
1136  {
1137  libMesh::Real T = this->T(point,context);
1138  libMesh::Real p0 = this->get_p0_steady(context,point);
1139 
1140  value = this->rho( T, p0 );
1141  }
1142 
1143  return;
1144  }
libMesh::Real get_p0_steady(const AssemblyContext &c, unsigned int qp) const
libMesh::Real T(const libMesh::Point &p, const AssemblyContext &c) const
unsigned int _rho_index
Cache index for density post-processing.
libMesh::Real rho(libMesh::Real T, libMesh::Real p0) const
void GRINS::Physics::compute_side_constraint_cache ( const AssemblyContext context,
CachedValues cache 
)
virtualinherited

Definition at line 191 of file physics.C.

Referenced by GRINS::MultiphysicsSystem::side_constraint().

193  {
194  return;
195  }
void GRINS::Physics::compute_side_time_derivative_cache ( const AssemblyContext context,
CachedValues cache 
)
virtualinherited

Reimplemented in GRINS::ReactingLowMachNavierStokes< Mixture, Evaluator >.

Definition at line 173 of file physics.C.

Referenced by GRINS::MultiphysicsSystem::side_time_derivative().

175  {
176  return;
177  }
template<class V , class SH , class TC >
libMesh::Real GRINS::LowMachNavierStokesBase< V, SH, TC >::d_rho_dT ( libMesh::Real  T,
libMesh::Real  p0 
) const
inlineinherited

Definition at line 151 of file low_mach_navier_stokes_base.h.

152  {
153  return -p0/(this->_R*(T*T));
154  }
libMesh::Real T(const libMesh::Point &p, const AssemblyContext &c) const
void GRINS::Physics::element_constraint ( bool  compute_jacobian,
AssemblyContext context,
CachedValues cache 
)
virtualinherited
template<class Mu , class SH , class TC >
void GRINS::LowMachNavierStokes< Mu, SH, TC >::element_time_derivative ( bool  compute_jacobian,
AssemblyContext context,
CachedValues cache 
)
virtual

Time dependent part(s) of physics for element interiors.

Reimplemented from GRINS::Physics.

Definition at line 130 of file low_mach_navier_stokes.C.

133  {
134 #ifdef GRINS_USE_GRVY_TIMERS
135  this->_timer->BeginTimer("LowMachNavierStokes::element_time_derivative");
136 #endif
137 
138  this->assemble_mass_time_deriv( compute_jacobian, context, cache );
139  this->assemble_momentum_time_deriv( compute_jacobian, context, cache );
140  this->assemble_energy_time_deriv( compute_jacobian, context, cache );
141 
142  if( this->_enable_thermo_press_calc )
143  this->assemble_thermo_press_elem_time_deriv( compute_jacobian, context );
144 
145 #ifdef GRINS_USE_GRVY_TIMERS
146  this->_timer->EndTimer("LowMachNavierStokes::element_time_derivative");
147 #endif
148 
149  return;
150  }
void assemble_energy_time_deriv(bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
Helper function.
bool _enable_thermo_press_calc
Flag to enable thermodynamic pressure calculation.
void assemble_thermo_press_elem_time_deriv(bool compute_jacobian, AssemblyContext &c)
void assemble_momentum_time_deriv(bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
Helper function.
void assemble_mass_time_deriv(bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
Helper function.
bool GRINS::Physics::enabled_on_elem ( const libMesh::Elem *  elem)
virtualinherited

Find if current physics is active on supplied element.

Definition at line 83 of file physics.C.

References GRINS::Physics::_enabled_subdomains.

84  {
85  // Check if enabled_subdomains flag has been set and if we're
86  // looking at a real element (rather than a nonlocal evaluation)
87  if( !elem || _enabled_subdomains.empty() )
88  return true;
89 
90  // Check if current physics is enabled on elem
91  if( _enabled_subdomains.find( elem->subdomain_id() ) == _enabled_subdomains.end() )
92  return false;
93 
94  return true;
95  }
std::set< libMesh::subdomain_id_type > _enabled_subdomains
Subdomains on which the current Physics class is enabled.
Definition: physics.h:261
BCHandlingBase * GRINS::Physics::get_bc_handler ( )
inlineinherited

Definition at line 282 of file physics.h.

References GRINS::Physics::_bc_handler.

283  {
284  return _bc_handler;
285  }
GRINS::BCHandlingBase * _bc_handler
Definition: physics.h:256
ICHandlingBase * GRINS::Physics::get_ic_handler ( )
inlineinherited

Definition at line 288 of file physics.h.

References GRINS::Physics::_ic_handler.

289  {
290  return _ic_handler;
291  }
GRINS::ICHandlingBase * _ic_handler
Definition: physics.h:258
template<class V , class SH , class TC >
libMesh::Real GRINS::LowMachNavierStokesBase< V, SH, TC >::get_p0_steady ( const AssemblyContext c,
unsigned int  qp 
) const
inlineinherited

Definition at line 158 of file low_mach_navier_stokes_base.h.

160  {
161  libMesh::Real p0;
162  if( this->_enable_thermo_press_calc )
163  {
164  p0 = c.interior_value( _p0_var, qp );
165  }
166  else
167  {
168  p0 = _p0;
169  }
170  return p0;
171  }
bool _enable_thermo_press_calc
Flag to enable thermodynamic pressure calculation.
template<class V , class SH , class TC >
libMesh::Real GRINS::LowMachNavierStokesBase< V, SH, TC >::get_p0_steady ( const AssemblyContext c,
const libMesh::Point &  p 
) const
inlineinherited

Definition at line 192 of file low_mach_navier_stokes_base.h.

194  {
195  libMesh::Real p0;
196  if( this->_enable_thermo_press_calc )
197  {
198  p0 = c.point_value( _p0_var, p );
199  }
200  else
201  {
202  p0 = _p0;
203  }
204  return p0;
205  }
bool _enable_thermo_press_calc
Flag to enable thermodynamic pressure calculation.
template<class V , class SH , class TC >
libMesh::Real GRINS::LowMachNavierStokesBase< V, SH, TC >::get_p0_steady_side ( const AssemblyContext c,
unsigned int  qp 
) const
inlineinherited

Definition at line 175 of file low_mach_navier_stokes_base.h.

177  {
178  libMesh::Real p0;
179  if( this->_enable_thermo_press_calc )
180  {
181  p0 = c.side_value( _p0_var, qp );
182  }
183  else
184  {
185  p0 = _p0;
186  }
187  return p0;
188  }
bool _enable_thermo_press_calc
Flag to enable thermodynamic pressure calculation.
template<class V , class SH , class TC >
libMesh::Real GRINS::LowMachNavierStokesBase< V, SH, TC >::get_p0_transient ( AssemblyContext c,
unsigned int  qp 
) const
inlineinherited

Definition at line 209 of file low_mach_navier_stokes_base.h.

210  {
211  libMesh::Real p0;
212  if( this->_enable_thermo_press_calc )
213  {
214  p0 = c.fixed_interior_value( _p0_var, qp );
215  }
216  else
217  {
218  p0 = _p0;
219  }
220  return p0;
221  }
bool _enable_thermo_press_calc
Flag to enable thermodynamic pressure calculation.
void GRINS::Physics::init_bcs ( libMesh::FEMSystem *  system)
inherited

Definition at line 118 of file physics.C.

References GRINS::Physics::_bc_handler, GRINS::BCHandlingBase::init_bc_data(), GRINS::BCHandlingBase::init_dirichlet_bc_func_objs(), GRINS::BCHandlingBase::init_dirichlet_bcs(), and GRINS::BCHandlingBase::init_periodic_bcs().

119  {
120  // Only need to init BC's if the physics actually created a handler
121  if( _bc_handler )
122  {
123  _bc_handler->init_bc_data( *system );
124  _bc_handler->init_dirichlet_bcs( system );
126  _bc_handler->init_periodic_bcs( system );
127  }
128 
129  return;
130  }
GRINS::BCHandlingBase * _bc_handler
Definition: physics.h:256
virtual void init_dirichlet_bcs(libMesh::FEMSystem *system) const
virtual void init_periodic_bcs(libMesh::FEMSystem *system) const
virtual void init_dirichlet_bc_func_objs(libMesh::FEMSystem *system) const
virtual void init_bc_data(const libMesh::FEMSystem &system)
Override this method to initialize any system-dependent data.
template<class Mu , class SH , class TC >
void GRINS::LowMachNavierStokes< Mu, SH, TC >::init_context ( AssemblyContext context)
virtual

Initialize context for added physics variables.

Reimplemented from GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >.

Definition at line 109 of file low_mach_navier_stokes.C.

References GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::init_context().

110  {
111  // First call base class
113 
114  // We also need the side shape functions, etc.
115  context.get_side_fe(this->_u_var)->get_JxW();
116  context.get_side_fe(this->_u_var)->get_phi();
117  context.get_side_fe(this->_u_var)->get_dphi();
118  context.get_side_fe(this->_u_var)->get_xyz();
119 
120  context.get_side_fe(this->_T_var)->get_JxW();
121  context.get_side_fe(this->_T_var)->get_phi();
122  context.get_side_fe(this->_T_var)->get_dphi();
123  context.get_side_fe(this->_T_var)->get_xyz();
124 
125  return;
126  }
VariableIndex _u_var
Indices for each (owned) variable;.
virtual void init_context(AssemblyContext &context)
Initialize context for added physics variables.
void GRINS::Physics::init_ics ( libMesh::FEMSystem *  system,
libMesh::CompositeFunction< libMesh::Number > &  all_ics 
)
inherited

Definition at line 133 of file physics.C.

References GRINS::Physics::_ic_handler, and GRINS::ICHandlingBase::init_ic_data().

135  {
136  if( _ic_handler )
137  {
138  _ic_handler->init_ic_data( *system, all_ics );
139  }
140 
141  return;
142  }
GRINS::ICHandlingBase * _ic_handler
Definition: physics.h:258
virtual void init_ic_data(const libMesh::FEMSystem &system, libMesh::CompositeFunction< libMesh::Number > &all_ics)
Override this method to initialize any system-dependent data.
template<class Mu , class SH , class TC >
void GRINS::LowMachNavierStokesBase< Mu, SH, TC >::init_variables ( libMesh::FEMSystem *  system)
virtualinherited

Initialize variables for this physics.

Implements GRINS::Physics.

Definition at line 130 of file low_mach_navier_stokes_base.C.

131  {
132  // Get libMesh to assign an index for each variable
133  this->_dim = system->get_mesh().mesh_dimension();
134 
135  _u_var = system->add_variable( _u_var_name, this->_V_order, _V_FE_family);
136  _v_var = system->add_variable( _v_var_name, this->_V_order, _V_FE_family);
137 
138  if (_dim == 3)
139  _w_var = system->add_variable( _w_var_name, this->_V_order, _V_FE_family);
140  else
141  _w_var = _u_var;
142 
143  _p_var = system->add_variable( _p_var_name, this->_P_order, _P_FE_family);
144  _T_var = system->add_variable( _T_var_name, this->_T_order, _T_FE_family);
145 
146  /* If we need to compute the thermodynamic pressure, we force this to be a first
147  order scalar variable. */
149  _p0_var = system->add_variable( _p0_var_name, libMesh::FIRST, libMesh::SCALAR);
150 
151  return;
152  }
GRINSEnums::FEFamily _V_FE_family
Element type, read from input.
VariableIndex _u_var
Indices for each (owned) variable;.
bool _enable_thermo_press_calc
Flag to enable thermodynamic pressure calculation.
unsigned int _dim
Physical dimension of problem.
std::string _u_var_name
Names of each (owned) variable in the system.
GRINSEnums::Order _V_order
Element orders, read from input.
bool GRINS::Physics::is_steady ( ) const
inherited

Returns whether or not this physics is being solved with a steady solver.

Definition at line 103 of file physics.C.

References GRINS::Physics::_is_steady.

Referenced by GRINS::Physics::set_is_steady().

104  {
105  return _is_steady;
106  }
static bool _is_steady
Caches whether or not the solver that's being used is steady or not.
Definition: physics.h:266
template<class Mu , class SH , class TC >
void GRINS::LowMachNavierStokes< Mu, SH, TC >::mass_residual ( bool  compute_jacobian,
AssemblyContext context,
CachedValues cache 
)
virtual

Mass matrix part(s) for element interiors. All boundary terms lie within the time_derivative part.

Reimplemented from GRINS::Physics.

Definition at line 188 of file low_mach_navier_stokes.C.

191  {
192  this->assemble_continuity_mass_residual( compute_jacobian, context );
193 
194  this->assemble_momentum_mass_residual( compute_jacobian, context );
195 
196  this->assemble_energy_mass_residual( compute_jacobian, context );
197 
198  if( this->_enable_thermo_press_calc )
199  this->assemble_thermo_press_mass_residual( compute_jacobian, context );
200 
201  return;
202  }
bool _enable_thermo_press_calc
Flag to enable thermodynamic pressure calculation.
void assemble_thermo_press_mass_residual(bool compute_jacobian, AssemblyContext &c)
void assemble_momentum_mass_residual(bool compute_jacobian, AssemblyContext &c)
Helper function.
void assemble_energy_mass_residual(bool compute_jacobian, AssemblyContext &c)
Helper function.
void assemble_continuity_mass_residual(bool compute_jacobian, AssemblyContext &c)
Helper function.
void GRINS::Physics::nonlocal_constraint ( bool  compute_jacobian,
AssemblyContext context,
CachedValues cache 
)
virtualinherited

Constraint part(s) of physics for scalar variables.

Reimplemented in GRINS::ScalarODE.

Definition at line 250 of file physics.C.

Referenced by GRINS::MultiphysicsSystem::nonlocal_constraint().

253  {
254  return;
255  }
void GRINS::Physics::nonlocal_mass_residual ( bool  compute_jacobian,
AssemblyContext context,
CachedValues cache 
)
virtualinherited

Mass matrix part(s) for scalar variables.

Reimplemented in GRINS::ScalarODE, and GRINS::AveragedTurbine< Viscosity >.

Definition at line 264 of file physics.C.

Referenced by GRINS::MultiphysicsSystem::nonlocal_mass_residual().

267  {
268  return;
269  }
void GRINS::Physics::nonlocal_time_derivative ( bool  compute_jacobian,
AssemblyContext context,
CachedValues cache 
)
virtualinherited

Time dependent part(s) of physics for scalar variables.

Reimplemented in GRINS::AveragedTurbine< Viscosity >, and GRINS::ScalarODE.

Definition at line 229 of file physics.C.

Referenced by GRINS::MultiphysicsSystem::nonlocal_time_derivative().

232  {
233  return;
234  }
template<class Mu , class SH , class TC >
void GRINS::LowMachNavierStokes< Mu, SH, TC >::read_input_options ( const GetPot &  input)
virtual

Read options from GetPot input file.

Reimplemented from GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >.

Definition at line 67 of file low_mach_navier_stokes.C.

References GRINS::low_mach_navier_stokes.

Referenced by GRINS::LowMachNavierStokes< Viscosity, SpecificHeat, ThermalConductivity >::LowMachNavierStokes().

68  {
69  // Other quantities read in base class
70 
71  // Read pressure pinning information
72  this->_pin_pressure = input("Physics/"+low_mach_navier_stokes+"/pin_pressure", false );
73 
74  return;
75  }
const PhysicsName low_mach_navier_stokes
bool _pin_pressure
Enable pressure pinning.
template<class Mu , class SH , class TC >
void GRINS::LowMachNavierStokesBase< Mu, SH, TC >::register_parameter ( const std::string &  param_name,
libMesh::ParameterMultiPointer< libMesh::Number > &  param_pointer 
) const
virtualinherited

Each subclass will register its copy of an independent.

Reimplemented from GRINS::ParameterUser.

Definition at line 198 of file low_mach_navier_stokes_base.C.

References GRINS::ParameterUser::register_parameter().

201  {
202  ParameterUser::register_parameter(param_name, param_pointer);
203  _mu.register_parameter(param_name, param_pointer);
204  _cp.register_parameter(param_name, param_pointer);
205  _k.register_parameter(param_name, param_pointer);
206  }
virtual void register_parameter(const std::string &param_name, libMesh::ParameterMultiPointer< libMesh::Number > &param_pointer) const
Each subclass will register its copy of an independent.
SpecificHeat _cp
Specific heat object.
ThermalConductivity _k
Thermal conductivity object.
template<class Mu , class SH , class TC >
void GRINS::LowMachNavierStokes< Mu, SH, TC >::register_postprocessing_vars ( const GetPot &  input,
PostProcessedQuantities< libMesh::Real > &  postprocessing 
)
virtual

Register postprocessing variables for LowMachNavierStokes.

Reimplemented from GRINS::Physics.

Definition at line 78 of file low_mach_navier_stokes.C.

References GRINS::low_mach_navier_stokes, and GRINS::PostProcessedQuantities< NumericType >::register_quantity().

80  {
81  std::string section = "Physics/"+low_mach_navier_stokes+"/output_vars";
82 
83  if( input.have_variable(section) )
84  {
85  unsigned int n_vars = input.vector_variable_size(section);
86 
87  for( unsigned int v = 0; v < n_vars; v++ )
88  {
89  std::string name = input(section,"DIE!",v);
90 
91  if( name == std::string("rho") )
92  {
93  this->_rho_index = postprocessing.register_quantity( name );
94  }
95  else
96  {
97  std::cerr << "Error: Invalue output_vars value for "+low_mach_navier_stokes << std::endl
98  << " Found " << name << std::endl
99  << " Acceptable values are: rho" << std::endl;
100  libmesh_error();
101  }
102  }
103  }
104 
105  return;
106  }
unsigned int _rho_index
Cache index for density post-processing.
const PhysicsName low_mach_navier_stokes
template<class V , class SH , class TC >
libMesh::Real GRINS::LowMachNavierStokesBase< V, SH, TC >::rho ( libMesh::Real  T,
libMesh::Real  p0 
) const
inlineinherited

Definition at line 144 of file low_mach_navier_stokes_base.h.

145  {
146  return p0/(this->_R*T);
147  }
libMesh::Real T(const libMesh::Point &p, const AssemblyContext &c) const
void GRINS::Physics::set_is_steady ( bool  is_steady)
inherited

Sets whether this physics is to be solved with a steady solver or not.

Since the member variable is static, only needs to be called on a single physics.

Definition at line 97 of file physics.C.

References GRINS::Physics::_is_steady, and GRINS::Physics::is_steady().

98  {
100  return;
101  }
bool is_steady() const
Returns whether or not this physics is being solved with a steady solver.
Definition: physics.C:103
static bool _is_steady
Caches whether or not the solver that's being used is steady or not.
Definition: physics.h:266
void GRINS::ParameterUser::set_parameter ( libMesh::Number &  param_variable,
const GetPot &  input,
const std::string &  param_name,
libMesh::Number  param_default 
)
virtualinherited

Each subclass can simultaneously read a parameter value from.

Definition at line 35 of file parameter_user.C.

References GRINS::ParameterUser::_my_name, and GRINS::ParameterUser::_my_parameters.

Referenced by GRINS::AveragedFanAdjointStabilization< Viscosity >::AveragedFanAdjointStabilization(), GRINS::AveragedTurbineAdjointStabilization< Viscosity >::AveragedTurbineAdjointStabilization(), GRINS::BoussinesqBuoyancyAdjointStabilization< Viscosity >::BoussinesqBuoyancyAdjointStabilization(), GRINS::BoussinesqBuoyancyBase::BoussinesqBuoyancyBase(), GRINS::BoussinesqBuoyancySPGSMStabilization< Viscosity >::BoussinesqBuoyancySPGSMStabilization(), GRINS::ConstantConductivity::ConstantConductivity(), GRINS::ConstantPrandtlConductivity::ConstantPrandtlConductivity(), GRINS::ConstantSourceFunction::ConstantSourceFunction(), GRINS::ConstantSourceTerm::ConstantSourceTerm(), GRINS::ConstantSpecificHeat::ConstantSpecificHeat(), GRINS::ConstantViscosity::ConstantViscosity(), GRINS::ElasticCable< StressStrainLaw >::ElasticCable(), GRINS::ElasticCableConstantGravity::ElasticCableConstantGravity(), GRINS::ElasticMembrane< StressStrainLaw >::ElasticMembrane(), GRINS::ElasticMembraneConstantPressure::ElasticMembraneConstantPressure(), GRINS::HeatConduction< Conductivity >::HeatConduction(), GRINS::HeatTransferBase< Conductivity >::HeatTransferBase(), GRINS::IncompressibleNavierStokesBase< Viscosity >::IncompressibleNavierStokesBase(), GRINS::AverageNusseltNumber::init(), GRINS::MooneyRivlin::MooneyRivlin(), GRINS::ReactingLowMachNavierStokesBase< Mixture, Evaluator >::ReactingLowMachNavierStokesBase(), GRINS::HookesLaw1D::read_input_options(), GRINS::HookesLaw::read_input_options(), GRINS::AxisymmetricBoussinesqBuoyancy::read_input_options(), and GRINS::VelocityDragAdjointStabilization< Viscosity >::VelocityDragAdjointStabilization().

39  {
40  param_variable = input(param_name, param_default);
41 
42  libmesh_assert_msg(!_my_parameters.count(param_name),
43  "ERROR: " << _my_name << " double-registered parameter " <<
44  param_name);
45 
46  _my_parameters[param_name] = &param_variable;
47  }
std::map< std::string, libMesh::Number * > _my_parameters
template<class Mu , class SH , class TC >
void GRINS::LowMachNavierStokesBase< Mu, SH, TC >::set_time_evolving_vars ( libMesh::FEMSystem *  system)
virtualinherited

Sets velocity variables to be time-evolving.

Reimplemented from GRINS::Physics.

Definition at line 155 of file low_mach_navier_stokes_base.C.

156  {
157  const unsigned int dim = system->get_mesh().mesh_dimension();
158 
159  system->time_evolving(_u_var);
160  system->time_evolving(_v_var);
161 
162  if (dim == 3)
163  system->time_evolving(_w_var);
164 
165  system->time_evolving(_T_var);
166  system->time_evolving(_p_var);
167 
169  system->time_evolving(_p0_var);
170 
171  return;
172  }
VariableIndex _u_var
Indices for each (owned) variable;.
bool _enable_thermo_press_calc
Flag to enable thermodynamic pressure calculation.
template<class Mu , class SH , class TC >
void GRINS::LowMachNavierStokes< Mu, SH, TC >::side_constraint ( bool  compute_jacobian,
AssemblyContext context,
CachedValues cache 
)
virtual

Constraint part(s) of physics for boundaries of elements on the domain boundary.

Reimplemented from GRINS::Physics.

Definition at line 174 of file low_mach_navier_stokes.C.

177  {
178  // Pin p = p_value at p_point
179  if( this->_pin_pressure )
180  {
181  this->_p_pinning.pin_value( context, compute_jacobian, this->_p_var);
182  }
183 
184  return;
185  }
void pin_value(libMesh::DiffContext &context, const bool request_jacobian, const GRINS::VariableIndex var, const double penalty=1.0)
The idea here is to pin a variable to a particular value if there is a null space - e...
bool _pin_pressure
Enable pressure pinning.
template<class Mu , class SH , class TC >
void GRINS::LowMachNavierStokes< Mu, SH, TC >::side_time_derivative ( bool  compute_jacobian,
AssemblyContext context,
CachedValues cache 
)
virtual

Time dependent part(s) of physics for boundaries of elements on the domain boundary.

Reimplemented from GRINS::Physics.

Definition at line 153 of file low_mach_navier_stokes.C.

156  {
157  if( this->_enable_thermo_press_calc )
158  {
159 #ifdef GRINS_USE_GRVY_TIMERS
160  this->_timer->BeginTimer("LowMachNavierStokes::side_time_derivative");
161 #endif
162 
163  this->assemble_thermo_press_side_time_deriv( compute_jacobian, context );
164 
165 #ifdef GRINS_USE_GRVY_TIMERS
166  this->_timer->EndTimer("LowMachNavierStokes::side_time_derivative");
167 #endif
168  }
169 
170  return;
171  }
bool _enable_thermo_press_calc
Flag to enable thermodynamic pressure calculation.
void assemble_thermo_press_side_time_deriv(bool compute_jacobian, AssemblyContext &c)
template<class V , class SH , class TC >
libMesh::Real GRINS::LowMachNavierStokesBase< V, SH, TC >::T ( const libMesh::Point &  p,
const AssemblyContext c 
) const
inlineinherited

Definition at line 137 of file low_mach_navier_stokes_base.h.

138  {
139  return c.point_value(_T_var,p);
140  }

Member Data Documentation

GRINS::BCHandlingBase* GRINS::Physics::_bc_handler
protectedinherited
template<class Viscosity , class SpecificHeat , class ThermalConductivity >
SpecificHeat GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_cp
protectedinherited

Specific heat object.

Definition at line 118 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
unsigned int GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_dim
protectedinherited

Physical dimension of problem.

Definition at line 95 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
bool GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_enable_thermo_press_calc
protectedinherited

Flag to enable thermodynamic pressure calculation.

Definition at line 127 of file low_mach_navier_stokes_base.h.

std::set<libMesh::subdomain_id_type> GRINS::Physics::_enabled_subdomains
protectedinherited

Subdomains on which the current Physics class is enabled.

Definition at line 261 of file physics.h.

Referenced by GRINS::Physics::enabled_on_elem(), and GRINS::Physics::read_input_options().

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
libMesh::Point GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_g
protectedinherited

Gravity vector.

Definition at line 124 of file low_mach_navier_stokes_base.h.

GRINS::ICHandlingBase* GRINS::Physics::_ic_handler
protectedinherited
bool GRINS::Physics::_is_axisymmetric
protectedinherited
bool GRINS::Physics::_is_steady = false
staticprotectedinherited

Caches whether or not the solver that's being used is steady or not.

This is need, for example, in flow stabilization as the tau terms change depending on whether the solver is steady or unsteady.

Definition at line 266 of file physics.h.

Referenced by GRINS::Physics::is_steady(), and GRINS::Physics::set_is_steady().

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
ThermalConductivity GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_k
protectedinherited

Thermal conductivity object.

Definition at line 121 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
Viscosity GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_mu
protectedinherited

Viscosity object.

Definition at line 115 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
libMesh::Number GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_p0
protectedinherited

Definition at line 92 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
libMesh::Number GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_p0_over_R
protectedinherited

Thermodynamic pressure divided by gas constant.

Definition at line 90 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
VariableIndex GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_p0_var
protectedinherited

Definition at line 103 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
std::string GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_p0_var_name
protectedinherited

Definition at line 106 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
GRINSEnums::FEFamily GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_P_FE_family
protectedinherited

Definition at line 109 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
GRINSEnums::Order GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_P_order
protectedinherited

Definition at line 112 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
PressurePinning GRINS::LowMachNavierStokes< Viscosity, SpecificHeat, ThermalConductivity >::_p_pinning
protected

Definition at line 90 of file low_mach_navier_stokes.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
VariableIndex GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_p_var
protectedinherited

Definition at line 101 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
std::string GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_p_var_name
protectedinherited

Definition at line 106 of file low_mach_navier_stokes_base.h.

const PhysicsName GRINS::Physics::_physics_name
protectedinherited

Name of the physics object. Used for reading physics specific inputs.

We use a reference because the physics names are const global objects in GRINS namespace

No, we use a copy, because otherwise as soon as the memory in std::set<std::string> requested_physics gets overwritten we get in trouble.

Definition at line 254 of file physics.h.

Referenced by GRINS::SourceTermBase::parse_var_info(), and GRINS::Physics::read_input_options().

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
bool GRINS::LowMachNavierStokes< Viscosity, SpecificHeat, ThermalConductivity >::_pin_pressure
protected

Enable pressure pinning.

Definition at line 88 of file low_mach_navier_stokes.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
libMesh::Number GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_R
protectedinherited

Definition at line 92 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
unsigned int GRINS::LowMachNavierStokes< Viscosity, SpecificHeat, ThermalConductivity >::_rho_index
protected

Cache index for density post-processing.

Definition at line 93 of file low_mach_navier_stokes.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
libMesh::Number GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_T0
protectedinherited

Definition at line 92 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
GRINSEnums::FEFamily GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_T_FE_family
protectedinherited

Definition at line 109 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
GRINSEnums::Order GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_T_order
protectedinherited

Definition at line 112 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
VariableIndex GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_T_var
protectedinherited

Definition at line 102 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
std::string GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_T_var_name
protectedinherited

Definition at line 106 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
VariableIndex GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_u_var
protectedinherited

Indices for each (owned) variable;.

Definition at line 98 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
std::string GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_u_var_name
protectedinherited

Names of each (owned) variable in the system.

Definition at line 106 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
GRINSEnums::FEFamily GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_V_FE_family
protectedinherited

Element type, read from input.

Definition at line 109 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
GRINSEnums::Order GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_V_order
protectedinherited

Element orders, read from input.

Definition at line 112 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
VariableIndex GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_v_var
protectedinherited

Definition at line 99 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
std::string GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_v_var_name
protectedinherited

Definition at line 106 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
VariableIndex GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_w_var
protectedinherited

Definition at line 100 of file low_mach_navier_stokes_base.h.

template<class Viscosity , class SpecificHeat , class ThermalConductivity >
std::string GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::_w_var_name
protectedinherited

Definition at line 106 of file low_mach_navier_stokes_base.h.


The documentation for this class was generated from the following files:

Generated on Mon Jun 22 2015 21:32:23 for GRINS-0.6.0 by  doxygen 1.8.9.1