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

Adds Velocity penalty adjoint stabilization source term. More...

#include <parsed_velocity_source_adjoint_stab.h>

Inheritance diagram for GRINS::ParsedVelocitySourceAdjointStabilization< Viscosity >:
Inheritance graph
[legend]
Collaboration diagram for GRINS::ParsedVelocitySourceAdjointStabilization< Viscosity >:
Collaboration graph
[legend]

Public Member Functions

 ParsedVelocitySourceAdjointStabilization (const std::string &physics_name, const GetPot &input)
 
 ~ParsedVelocitySourceAdjointStabilization ()
 
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 element_constraint (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Constraint part(s) of physics for element interiors. More...
 
virtual void read_input_options (const GetPot &input)
 Read options from GetPot input file. More...
 
void set_time_evolving_vars (libMesh::FEMSystem *system)
 Sets velocity variables to be time-evolving. More...
 
bool compute_force (const libMesh::Point &point, const libMesh::Real time, const AssemblyContext &c, libMesh::NumberVectorValue &F, libMesh::NumberTensorValue *dFdU=NULL)
 
virtual void init_variables (libMesh::FEMSystem *system)
 Initialization of Navier-Stokes variables. More...
 
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 register_postprocessing_vars (const GetPot &input, PostProcessedQuantities< libMesh::Real > &postprocessing)
 Register name of postprocessed quantity with PostProcessedQuantities. 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 nonlocal_time_derivative (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Time dependent part(s) of physics for scalar variables. 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 nonlocal_constraint (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Constraint part(s) of physics for scalar variables. 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 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_element_time_derivative_cache (const AssemblyContext &context, CachedValues &cache)
 
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)
 
virtual void compute_postprocessed_quantity (unsigned int quantity_index, const AssemblyContext &context, const libMesh::Point &point, libMesh::Real &value)
 
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 Attributes

Viscosity _mu
 
IncompressibleNavierStokesStabilizationHelper _stab_helper
 
std::string source_function_string
 
libMesh::AutoPtr< libMesh::FEMFunctionBase< libMesh::Number > > velocity_source_function
 
unsigned int _dim
 Physical dimension of problem. More...
 
PrimitiveFlowFEVariables _flow_vars
 
libMesh::Number _rho
 Material parameters, read from input. 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

 ParsedVelocitySourceAdjointStabilization ()
 

Detailed Description

template<class Viscosity>
class GRINS::ParsedVelocitySourceAdjointStabilization< Viscosity >

Adds Velocity penalty adjoint stabilization source term.

This class implements the adjoint stabilization term for the ParsedVelocitySource Physics. Intended to be used with IncompressibleNavierStokesAdjointStabilization.

Definition at line 42 of file parsed_velocity_source_adjoint_stab.h.

Constructor & Destructor Documentation

template<class Mu >
GRINS::ParsedVelocitySourceAdjointStabilization< Mu >::ParsedVelocitySourceAdjointStabilization ( const std::string &  physics_name,
const GetPot &  input 
)

Definition at line 42 of file parsed_velocity_source_adjoint_stab.C.

43  : ParsedVelocitySourceBase<Mu>(physics_name,input),
44  _mu( input ),
45  _stab_helper( physics_name+"StabHelper", input )
46  {
47  }
IncompressibleNavierStokesStabilizationHelper _stab_helper

Definition at line 50 of file parsed_velocity_source_adjoint_stab.C.

51  {
52  return;
53  }

Member Function Documentation

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  }
void GRINS::Physics::compute_element_time_derivative_cache ( const AssemblyContext context,
CachedValues cache 
)
virtualinherited
template<class Mu >
bool GRINS::ParsedVelocitySourceBase< Mu >::compute_force ( const libMesh::Point &  point,
const libMesh::Real  time,
const AssemblyContext c,
libMesh::NumberVectorValue &  F,
libMesh::NumberTensorValue *  dFdU = NULL 
)
inherited

Definition at line 78 of file parsed_velocity_source_base.C.

83  {
84  libmesh_assert(velocity_source_function.get());
85 
86  libMesh::DenseVector<libMesh::Number> output_vec(3);
87 
88  (*velocity_source_function)(c, point, time,
89  output_vec);
90 
91  F(0) = output_vec(0);
92  F(1) = output_vec(1);
93  F(2) = output_vec(2);
94 
95  if (dFdU)
96  for (unsigned int i=0; i != 3; ++i)
97  for (unsigned int j=0; j != 3; ++j)
98  (*dFdU)(i,j) = 0; // FIXME
99 
100  if (F(0) || F(1) || F(2))
101  return true;
102 
103  return false;
104  }
libMesh::AutoPtr< libMesh::FEMFunctionBase< libMesh::Number > > velocity_source_function
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  }
void GRINS::Physics::compute_postprocessed_quantity ( unsigned int  quantity_index,
const AssemblyContext context,
const libMesh::Point &  point,
libMesh::Real &  value 
)
virtualinherited
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 Mu >
void GRINS::ParsedVelocitySourceAdjointStabilization< Mu >::element_constraint ( bool  compute_jacobian,
AssemblyContext context,
CachedValues cache 
)
virtual

Constraint part(s) of physics for element interiors.

Reimplemented from GRINS::Physics.

Definition at line 245 of file parsed_velocity_source_adjoint_stab.C.

248  {
249 #ifdef GRINS_USE_GRVY_TIMERS
250  this->_timer->BeginTimer("ParsedVelocitySourceAdjointStabilization::element_constraint");
251 #endif
252 
253  // The number of local degrees of freedom in each variable.
254  const unsigned int n_p_dofs = context.get_dof_indices(this->_flow_vars.p_var()).size();
255  const unsigned int n_u_dofs = context.get_dof_indices(this->_flow_vars.u_var()).size();
256 
257  // Element Jacobian * quadrature weights for interior integration.
258  const std::vector<libMesh::Real> &JxW =
259  context.get_element_fe(this->_flow_vars.u_var())->get_JxW();
260 
261  const std::vector<libMesh::Point>& u_qpoint =
262  context.get_element_fe(this->_flow_vars.u_var())->get_xyz();
263 
264  const std::vector<std::vector<libMesh::Real> >& u_phi =
265  context.get_element_fe(this->_flow_vars.u_var())->get_phi();
266 
267  const std::vector<std::vector<libMesh::RealGradient> >& p_dphi =
268  context.get_element_fe(this->_flow_vars.p_var())->get_dphi();
269 
270  libMesh::DenseSubVector<libMesh::Number> &Fp = context.get_elem_residual(this->_flow_vars.p_var()); // R_{p}
271 
272  libMesh::DenseSubMatrix<libMesh::Number> &Kpu =
273  context.get_elem_jacobian(this->_flow_vars.p_var(), this->_flow_vars.u_var()); // J_{pu}
274  libMesh::DenseSubMatrix<libMesh::Number> &Kpv =
275  context.get_elem_jacobian(this->_flow_vars.p_var(), this->_flow_vars.v_var()); // J_{pv}
276  libMesh::DenseSubMatrix<libMesh::Number> *Kpw = NULL;
277 
278  if(this->_dim == 3)
279  {
280  Kpw = &context.get_elem_jacobian
281  (this->_flow_vars.p_var(), this->_flow_vars.w_var()); // J_{pw}
282  }
283 
284  // Now we will build the element Jacobian and residual.
285  // Constructing the residual requires the solution and its
286  // gradient from the previous timestep. This must be
287  // calculated at each quadrature point by summing the
288  // solution degree-of-freedom values by the appropriate
289  // weight functions.
290  unsigned int n_qpoints = context.get_element_qrule().n_points();
291 
292  libMesh::FEBase* fe = context.get_element_fe(this->_flow_vars.u_var());
293 
294  for (unsigned int qp=0; qp != n_qpoints; qp++)
295  {
296  libMesh::RealGradient g = this->_stab_helper.compute_g( fe, context, qp );
297  libMesh::RealTensor G = this->_stab_helper.compute_G( fe, context, qp );
298 
299  libMesh::RealGradient U( context.interior_value( this->_flow_vars.u_var(), qp ),
300  context.interior_value( this->_flow_vars.v_var(), qp ) );
301  if( this->_dim == 3 )
302  {
303  U(2) = context.interior_value( this->_flow_vars.w_var(), qp );
304  }
305 
306  // Compute the viscosity at this qp
307  libMesh::Real mu_qp = this->_mu(context, qp);
308 
309  libMesh::Real tau_M;
310  libMesh::Real d_tau_M_d_rho;
311  libMesh::Gradient d_tau_M_dU;
312 
313  if (compute_jacobian)
315  ( context, qp, g, G, this->_rho, U, mu_qp,
316  tau_M, d_tau_M_d_rho, d_tau_M_dU,
317  this->_is_steady );
318  else
319  tau_M = this->_stab_helper.compute_tau_momentum
320  ( context, qp, g, G, this->_rho, U, mu_qp,
321  this->_is_steady );
322 
323  libMesh::NumberVectorValue F;
324  libMesh::NumberTensorValue dFdU;
325  libMesh::NumberTensorValue* dFdU_ptr =
326  compute_jacobian ? &dFdU : NULL;
327  if (!this->compute_force(u_qpoint[qp], context.time, context, F, dFdU_ptr))
328  continue;
329 
330  // First, an i-loop over the velocity degrees of freedom.
331  // We know that n_u_dofs == n_v_dofs so we can compute contributions
332  // for both at the same time.
333  for (unsigned int i=0; i != n_p_dofs; i++)
334  {
335  Fp(i) += -tau_M*F*p_dphi[i][qp]*JxW[qp];
336 
337  if (compute_jacobian)
338  {
339  for (unsigned int j=0; j != n_u_dofs; ++j)
340  {
341  Kpu(i,j) += -d_tau_M_dU(0)*u_phi[j][qp]*F*p_dphi[i][qp]*JxW[qp]*context.get_elem_solution_derivative();
342  Kpv(i,j) += -d_tau_M_dU(1)*u_phi[j][qp]*F*p_dphi[i][qp]*JxW[qp]*context.get_elem_solution_derivative();
343  for (unsigned int d=0; d != 3; ++d)
344  {
345  Kpu(i,j) += -tau_M*dFdU(d,0)*u_phi[j][qp]*p_dphi[i][qp](d)*JxW[qp]*context.get_elem_solution_derivative();
346  Kpv(i,j) += -tau_M*dFdU(d,1)*u_phi[j][qp]*p_dphi[i][qp](d)*JxW[qp]*context.get_elem_solution_derivative();
347  }
348  }
349  if( this->_dim == 3 )
350  for (unsigned int j=0; j != n_u_dofs; ++j)
351  {
352  (*Kpw)(i,j) += -d_tau_M_dU(2)*u_phi[j][qp]*F*p_dphi[i][qp]*JxW[qp]*context.get_elem_solution_derivative();
353  for (unsigned int d=0; d != 3; ++d)
354  {
355  (*Kpw)(i,j) += -tau_M*dFdU(d,2)*u_phi[j][qp]*p_dphi[i][qp](d)*JxW[qp]*context.get_elem_solution_derivative();
356  }
357  }
358  }
359  }
360  } // End quadrature loop
361 
362 #ifdef GRINS_USE_GRVY_TIMERS
363  this->_timer->EndTimer("ParsedVelocitySourceAdjointStabilization::element_constraint");
364 #endif
365 
366  return;
367  }
IncompressibleNavierStokesStabilizationHelper _stab_helper
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::RealTensor compute_G(libMesh::FEBase *fe, AssemblyContext &c, unsigned int qp) const
Definition: stab_helper.C:64
libMesh::Number _rho
Material parameters, read from input.
unsigned int _dim
Physical dimension of problem.
bool compute_force(const libMesh::Point &point, const libMesh::Real time, const AssemblyContext &c, libMesh::NumberVectorValue &F, libMesh::NumberTensorValue *dFdU=NULL)
libMesh::RealGradient compute_g(libMesh::FEBase *fe, AssemblyContext &c, unsigned int qp) const
Definition: stab_helper.C:47
static bool _is_steady
Caches whether or not the solver that's being used is steady or not.
Definition: physics.h:266
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
template<class Mu >
void GRINS::ParsedVelocitySourceAdjointStabilization< Mu >::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 69 of file parsed_velocity_source_adjoint_stab.C.

72  {
73 #ifdef GRINS_USE_GRVY_TIMERS
74  this->_timer->BeginTimer("ParsedVelocitySourceAdjointStabilization::element_time_derivative");
75 #endif
76 
77  // The number of local degrees of freedom in each variable.
78  const unsigned int n_u_dofs = context.get_dof_indices(this->_flow_vars.u_var()).size();
79 
80  // Element Jacobian * quadrature weights for interior integration.
81  const std::vector<libMesh::Real> &JxW =
82  context.get_element_fe(this->_flow_vars.u_var())->get_JxW();
83 
84  const std::vector<libMesh::Point>& u_qpoint =
85  context.get_element_fe(this->_flow_vars.u_var())->get_xyz();
86 
87  const std::vector<std::vector<libMesh::Real> >& u_phi =
88  context.get_element_fe(this->_flow_vars.u_var())->get_phi();
89 
90  const std::vector<std::vector<libMesh::RealGradient> >& u_gradphi =
91  context.get_element_fe(this->_flow_vars.u_var())->get_dphi();
92 
93  const std::vector<std::vector<libMesh::RealTensor> >& u_hessphi =
94  context.get_element_fe(this->_flow_vars.u_var())->get_d2phi();
95 
96  // Get residuals and jacobians
97  libMesh::DenseSubVector<libMesh::Number> &Fu = context.get_elem_residual(this->_flow_vars.u_var()); // R_{u}
98  libMesh::DenseSubVector<libMesh::Number> &Fv = context.get_elem_residual(this->_flow_vars.v_var()); // R_{v}
99  libMesh::DenseSubVector<libMesh::Number> *Fw = NULL;
100 
101  libMesh::DenseSubMatrix<libMesh::Number> &Kuu =
102  context.get_elem_jacobian(this->_flow_vars.u_var(), this->_flow_vars.u_var()); // J_{uu}
103  libMesh::DenseSubMatrix<libMesh::Number> &Kuv =
104  context.get_elem_jacobian(this->_flow_vars.u_var(), this->_flow_vars.v_var()); // J_{uv}
105  libMesh::DenseSubMatrix<libMesh::Number> &Kvu =
106  context.get_elem_jacobian(this->_flow_vars.v_var(), this->_flow_vars.u_var()); // J_{vu}
107  libMesh::DenseSubMatrix<libMesh::Number> &Kvv =
108  context.get_elem_jacobian(this->_flow_vars.v_var(), this->_flow_vars.v_var()); // J_{vv}
109 
110  libMesh::DenseSubMatrix<libMesh::Number> *Kuw = NULL;
111  libMesh::DenseSubMatrix<libMesh::Number> *Kvw = NULL;
112  libMesh::DenseSubMatrix<libMesh::Number> *Kwu = NULL;
113  libMesh::DenseSubMatrix<libMesh::Number> *Kwv = NULL;
114  libMesh::DenseSubMatrix<libMesh::Number> *Kww = NULL;
115 
116  if(this->_dim == 3)
117  {
118  Fw = &context.get_elem_residual(this->_flow_vars.w_var()); // R_{w}
119  Kuw = &context.get_elem_jacobian
120  (this->_flow_vars.u_var(), this->_flow_vars.w_var()); // J_{uw}
121  Kvw = &context.get_elem_jacobian
122  (this->_flow_vars.v_var(), this->_flow_vars.w_var()); // J_{vw}
123  Kwu = &context.get_elem_jacobian
124  (this->_flow_vars.w_var(), this->_flow_vars.u_var()); // J_{wu}
125  Kwv = &context.get_elem_jacobian
126  (this->_flow_vars.w_var(), this->_flow_vars.v_var()); // J_{wv}
127  Kww = &context.get_elem_jacobian
128  (this->_flow_vars.w_var(), this->_flow_vars.w_var()); // J_{ww}
129  }
130 
131  // Now we will build the element Jacobian and residual.
132  // Constructing the residual requires the solution and its
133  // gradient from the previous timestep. This must be
134  // calculated at each quadrature point by summing the
135  // solution degree-of-freedom values by the appropriate
136  // weight functions.
137  unsigned int n_qpoints = context.get_element_qrule().n_points();
138 
139  libMesh::FEBase* fe = context.get_element_fe(this->_flow_vars.u_var());
140 
141  for (unsigned int qp=0; qp != n_qpoints; qp++)
142  {
143  libMesh::RealGradient g = this->_stab_helper.compute_g( fe, context, qp );
144  libMesh::RealTensor G = this->_stab_helper.compute_G( fe, context, qp );
145 
146  libMesh::RealGradient U( context.interior_value( this->_flow_vars.u_var(), qp ),
147  context.interior_value( this->_flow_vars.v_var(), qp ) );
148  if( this->_dim == 3 )
149  {
150  U(2) = context.interior_value( this->_flow_vars.w_var(), qp );
151  }
152 
153  // Compute the viscosity at this qp
154  libMesh::Real mu_qp = this->_mu(context, qp);
155 
156  libMesh::Real tau_M;
157  libMesh::Real d_tau_M_d_rho;
158  libMesh::Gradient d_tau_M_dU;
159 
160  if (compute_jacobian)
162  ( context, qp, g, G, this->_rho, U, mu_qp,
163  tau_M, d_tau_M_d_rho, d_tau_M_dU,
164  this->_is_steady );
165  else
166  tau_M = this->_stab_helper.compute_tau_momentum
167  ( context, qp, g, G, this->_rho, U, mu_qp,
168  this->_is_steady );
169 
170  libMesh::NumberVectorValue F;
171  libMesh::NumberTensorValue dFdU;
172  libMesh::NumberTensorValue* dFdU_ptr =
173  compute_jacobian ? &dFdU : NULL;
174  if (!this->compute_force(u_qpoint[qp], context.time, context, F, dFdU_ptr))
175  continue;
176 
177  for (unsigned int i=0; i != n_u_dofs; i++)
178  {
179  libMesh::Real test_func = this->_rho*U*u_gradphi[i][qp] +
180  mu_qp*( u_hessphi[i][qp](0,0) + u_hessphi[i][qp](1,1) + u_hessphi[i][qp](2,2) );
181  Fu(i) += tau_M*F(0)*test_func*JxW[qp];
182 
183  Fv(i) += tau_M*F(1)*test_func*JxW[qp];
184 
185  if (this->_dim == 3)
186  {
187  (*Fw)(i) += tau_M*F(2)*test_func*JxW[qp];
188  }
189 
190  if (compute_jacobian)
191  {
192  libMesh::Gradient d_test_func_dU = this->_rho*u_gradphi[i][qp];
193 
194  for (unsigned int j=0; j != n_u_dofs; ++j)
195  {
196  Kuu(i,j) += tau_M*F(0)*d_test_func_dU(0)*u_phi[j][qp]*JxW[qp]*context.get_elem_solution_derivative();
197  Kuu(i,j) += d_tau_M_dU(0)*u_phi[j][qp]*F(0)*test_func*JxW[qp]*context.get_elem_solution_derivative();
198  Kuu(i,j) += tau_M*dFdU(0,0)*u_phi[j][qp]*test_func*JxW[qp]*context.get_elem_solution_derivative();
199  Kuv(i,j) += tau_M*F(0)*d_test_func_dU(1)*u_phi[j][qp]*JxW[qp]*context.get_elem_solution_derivative();
200  Kuv(i,j) += d_tau_M_dU(1)*u_phi[j][qp]*F(0)*test_func*JxW[qp]*context.get_elem_solution_derivative();
201  Kuv(i,j) += tau_M*dFdU(0,1)*u_phi[j][qp]*test_func*JxW[qp]*context.get_elem_solution_derivative();
202  Kvu(i,j) += tau_M*F(1)*d_test_func_dU(0)*u_phi[j][qp]*JxW[qp]*context.get_elem_solution_derivative();
203  Kvu(i,j) += d_tau_M_dU(0)*u_phi[j][qp]*F(1)*test_func*JxW[qp]*context.get_elem_solution_derivative();
204  Kvu(i,j) += tau_M*dFdU(1,0)*u_phi[j][qp]*test_func*JxW[qp]*context.get_elem_solution_derivative();
205  Kvv(i,j) += tau_M*F(1)*d_test_func_dU(1)*u_phi[j][qp]*JxW[qp]*context.get_elem_solution_derivative();
206  Kvv(i,j) += d_tau_M_dU(1)*u_phi[j][qp]*F(1)*test_func*JxW[qp]*context.get_elem_solution_derivative();
207  Kvv(i,j) += tau_M*dFdU(1,1)*u_phi[j][qp]*test_func*JxW[qp]*context.get_elem_solution_derivative();
208  }
209 
210  if (this->_dim == 3)
211  {
212  for (unsigned int j=0; j != n_u_dofs; ++j)
213  {
214  (*Kuw)(i,j) += tau_M*F(0)*d_test_func_dU(2)*u_phi[j][qp]*JxW[qp]*context.get_elem_solution_derivative();
215  (*Kuw)(i,j) += d_tau_M_dU(2)*u_phi[j][qp]*F(0)*test_func*JxW[qp]*context.get_elem_solution_derivative();
216  (*Kuw)(i,j) += tau_M*dFdU(0,2)*u_phi[j][qp]*test_func*JxW[qp]*context.get_elem_solution_derivative();
217  (*Kvw)(i,j) += tau_M*F(1)*d_test_func_dU(2)*u_phi[j][qp]*JxW[qp]*context.get_elem_solution_derivative();
218  (*Kvw)(i,j) += d_tau_M_dU(2)*u_phi[j][qp]*F(1)*test_func*JxW[qp]*context.get_elem_solution_derivative();
219  (*Kvw)(i,j) += tau_M*dFdU(1,2)*u_phi[j][qp]*test_func*JxW[qp]*context.get_elem_solution_derivative();
220  (*Kwu)(i,j) += tau_M*F(2)*d_test_func_dU(0)*u_phi[j][qp]*JxW[qp]*context.get_elem_solution_derivative();
221  (*Kwu)(i,j) += d_tau_M_dU(0)*u_phi[j][qp]*F(2)*test_func*JxW[qp]*context.get_elem_solution_derivative();
222  (*Kwu)(i,j) += tau_M*dFdU(2,0)*u_phi[j][qp]*test_func*JxW[qp]*context.get_elem_solution_derivative();
223  (*Kwv)(i,j) += tau_M*F(2)*d_test_func_dU(1)*u_phi[j][qp]*JxW[qp]*context.get_elem_solution_derivative();
224  (*Kwv)(i,j) += d_tau_M_dU(1)*u_phi[j][qp]*F(2)*test_func*JxW[qp]*context.get_elem_solution_derivative();
225  (*Kwv)(i,j) += tau_M*dFdU(2,1)*u_phi[j][qp]*test_func*JxW[qp]*context.get_elem_solution_derivative();
226  (*Kww)(i,j) += tau_M*F(2)*d_test_func_dU(2)*u_phi[j][qp]*JxW[qp]*context.get_elem_solution_derivative();
227  (*Kww)(i,j) += d_tau_M_dU(2)*u_phi[j][qp]*F(2)*test_func*JxW[qp]*context.get_elem_solution_derivative();
228  (*Kww)(i,j) += tau_M*dFdU(2,2)*u_phi[j][qp]*test_func*JxW[qp]*context.get_elem_solution_derivative();
229  }
230  }
231 
232  } // End compute_jacobian check
233 
234  } // End i dof loop
235  } // End quadrature loop
236 
237 #ifdef GRINS_USE_GRVY_TIMERS
238  this->_timer->EndTimer("BoussinesqBuoyancyAdjointStabilization::element_time_derivative");
239 #endif
240 
241  return;
242  }
IncompressibleNavierStokesStabilizationHelper _stab_helper
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::RealTensor compute_G(libMesh::FEBase *fe, AssemblyContext &c, unsigned int qp) const
Definition: stab_helper.C:64
libMesh::Number _rho
Material parameters, read from input.
unsigned int _dim
Physical dimension of problem.
bool compute_force(const libMesh::Point &point, const libMesh::Real time, const AssemblyContext &c, libMesh::NumberVectorValue &F, libMesh::NumberTensorValue *dFdU=NULL)
libMesh::RealGradient compute_g(libMesh::FEBase *fe, AssemblyContext &c, unsigned int qp) const
Definition: stab_helper.C:47
static bool _is_steady
Caches whether or not the solver that's being used is steady or not.
Definition: physics.h:266
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
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
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 >
void GRINS::ParsedVelocitySourceAdjointStabilization< Mu >::init_context ( AssemblyContext context)
virtual

Initialize context for added physics variables.

Reimplemented from GRINS::IncompressibleNavierStokesBase< Viscosity >.

Definition at line 56 of file parsed_velocity_source_adjoint_stab.C.

57  {
58  context.get_element_fe(this->_flow_vars.p_var())->get_dphi();
59 
60  context.get_element_fe(this->_flow_vars.u_var())->get_xyz();
61  context.get_element_fe(this->_flow_vars.u_var())->get_phi();
62  context.get_element_fe(this->_flow_vars.u_var())->get_dphi();
63  context.get_element_fe(this->_flow_vars.u_var())->get_d2phi();
64 
65  return;
66  }
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 >
void GRINS::IncompressibleNavierStokesBase< Mu >::init_variables ( libMesh::FEMSystem *  system)
virtualinherited

Initialization of Navier-Stokes variables.

Add velocity and pressure variables to system.

Implements GRINS::Physics.

Reimplemented in GRINS::AveragedTurbineBase< Viscosity >, and GRINS::IncompressibleNavierStokesStabilizationBase< Viscosity >.

Definition at line 63 of file inc_navier_stokes_base.C.

Referenced by GRINS::IncompressibleNavierStokesStabilizationBase< Viscosity >::init_variables(), and GRINS::AveragedTurbineBase< Viscosity >::init_variables().

64  {
65  this->_dim = system->get_mesh().mesh_dimension();
66 
67  this->_flow_vars.init(system);
68 
69  this->_mu.init(system);
70 
71  return;
72  }
virtual void init(libMesh::FEMSystem *system)
unsigned int _dim
Physical dimension of problem.
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
void GRINS::Physics::mass_residual ( bool  compute_jacobian,
AssemblyContext context,
CachedValues cache 
)
virtualinherited
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 >
void GRINS::ParsedVelocitySourceBase< Mu >::read_input_options ( const GetPot &  input)
virtualinherited

Read options from GetPot input file.

Reimplemented from GRINS::Physics.

Definition at line 56 of file parsed_velocity_source_base.C.

Referenced by GRINS::ParsedVelocitySourceBase< Viscosity >::ParsedVelocitySourceBase().

57  {
58  std::string base_physics_name = "ParsedVelocitySource";
59 
61  input("Physics/"+base_physics_name+"/source_function",
62  std::string("0"));
63 
64  if (source_function_string == "0")
65  std::cout << "Warning! Zero ParsedVelocitySource specified!" << std::endl;
66  }
template<class Mu >
void GRINS::IncompressibleNavierStokesBase< Mu >::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 114 of file inc_navier_stokes_base.C.

References GRINS::ParameterUser::register_parameter().

117  {
118  ParameterUser::register_parameter(param_name, param_pointer);
119  _mu.register_parameter(param_name, param_pointer);
120  }
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.
void GRINS::Physics::register_postprocessing_vars ( const GetPot &  input,
PostProcessedQuantities< libMesh::Real > &  postprocessing 
)
virtualinherited

Register name of postprocessed quantity with PostProcessedQuantities.

Each Physics class will need to cache an unsigned int corresponding to each postprocessed quantity. This will be used in computing the values and putting them in the CachedVariables object.

Reimplemented in GRINS::ParsedVelocitySource< Viscosity >, GRINS::VelocityPenalty< Viscosity >, GRINS::IncompressibleNavierStokes< Viscosity >, GRINS::LowMachNavierStokes< Viscosity, SpecificHeat, ThermalConductivity >, GRINS::HeatTransfer< Conductivity >, GRINS::ElasticCable< StressStrainLaw >, GRINS::ElasticMembrane< StressStrainLaw >, and GRINS::ReactingLowMachNavierStokes< Mixture, Evaluator >.

Definition at line 161 of file physics.C.

163  {
164  return;
165  }
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 >
void GRINS::ParsedVelocitySourceBase< Mu >::set_time_evolving_vars ( libMesh::FEMSystem *  system)
virtualinherited

Sets velocity variables to be time-evolving.

Reimplemented from GRINS::IncompressibleNavierStokesBase< Viscosity >.

Definition at line 69 of file parsed_velocity_source_base.C.

70  {
71  this->velocity_source_function.reset
72  (new libMesh::ParsedFEMFunction<libMesh::Number>
73  (*system, this->source_function_string));
74  }
libMesh::AutoPtr< libMesh::FEMFunctionBase< libMesh::Number > > velocity_source_function
void GRINS::Physics::side_constraint ( bool  compute_jacobian,
AssemblyContext context,
CachedValues cache 
)
virtualinherited

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

Reimplemented in GRINS::IncompressibleNavierStokes< Viscosity >, GRINS::LowMachNavierStokes< Viscosity, SpecificHeat, ThermalConductivity >, and GRINS::ReactingLowMachNavierStokes< Mixture, Evaluator >.

Definition at line 243 of file physics.C.

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

246  {
247  return;
248  }
void GRINS::Physics::side_time_derivative ( bool  compute_jacobian,
AssemblyContext context,
CachedValues cache 
)
virtualinherited

Member Data Documentation

GRINS::BCHandlingBase* GRINS::Physics::_bc_handler
protectedinherited
template<class Viscosity >
unsigned int GRINS::IncompressibleNavierStokesBase< Viscosity >::_dim
protectedinherited

Physical dimension of problem.

Todo:
Do we really need to cache this?

Definition at line 79 of file inc_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 >
PrimitiveFlowFEVariables GRINS::IncompressibleNavierStokesBase< Viscosity >::_flow_vars
protectedinherited

Definition at line 81 of file inc_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 >
Viscosity GRINS::ParsedVelocitySourceAdjointStabilization< Viscosity >::_mu
protected

Definition at line 62 of file parsed_velocity_source_adjoint_stab.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 >
libMesh::Number GRINS::IncompressibleNavierStokesBase< Viscosity >::_rho
protectedinherited

Material parameters, read from input.

Todo:
Create objects to allow for function specification

Definition at line 85 of file inc_navier_stokes_base.h.

Referenced by GRINS::IncompressibleNavierStokesBase< Viscosity >::IncompressibleNavierStokesBase().

template<class Viscosity >
IncompressibleNavierStokesStabilizationHelper GRINS::ParsedVelocitySourceAdjointStabilization< Viscosity >::_stab_helper
protected

Definition at line 64 of file parsed_velocity_source_adjoint_stab.h.

template<class Viscosity >
std::string GRINS::ParsedVelocitySourceBase< Viscosity >::source_function_string
protectedinherited

Definition at line 66 of file parsed_velocity_source_base.h.

template<class Viscosity >
libMesh::AutoPtr<libMesh::FEMFunctionBase<libMesh::Number> > GRINS::ParsedVelocitySourceBase< Viscosity >::velocity_source_function
protectedinherited

Definition at line 69 of file parsed_velocity_source_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