GRINS-0.7.0
reacting_low_mach_navier_stokes.C
Go to the documentation of this file.
1 //-----------------------------------------------------------------------bl-
2 //--------------------------------------------------------------------------
3 //
4 // GRINS - General Reacting Incompressible Navier-Stokes
5 //
6 // Copyright (C) 2014-2016 Paul T. Bauman, Roy H. Stogner
7 // Copyright (C) 2010-2013 The PECOS Development Team
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the Version 2.1 GNU Lesser General
11 // Public License as published by the Free Software Foundation.
12 //
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 // Lesser General Public License for more details.
17 //
18 // You should have received a copy of the GNU Lesser General Public
19 // License along with this library; if not, write to the Free Software
20 // Foundation, Inc. 51 Franklin Street, Fifth Floor,
21 // Boston, MA 02110-1301 USA
22 //
23 //-----------------------------------------------------------------------el-
24 
25 
26 // This class
28 
29 // GRINS
30 #include "grins/assembly_context.h"
34 
35 // libMesh
36 #include "libmesh/quadrature.h"
37 #include "libmesh/fem_system.h"
38 
39 namespace GRINS
40 {
41  template<typename Mixture, typename Evaluator>
43  : ReactingLowMachNavierStokesBase<Mixture>(physics_name,input),
44  _p_pinning(input,physics_name),
45  _rho_index(0),
46  _mu_index(0),
47  _k_index(0),
48  _cp_index(0)
49  {
50  this->_pin_pressure = input("Physics/"+PhysicsNaming::reacting_low_mach_navier_stokes()+"/pin_pressure", false );
51 
52  this->_ic_handler = new GenericICHandler( physics_name, input );
53  }
54 
55  template<typename Mixture, typename Evaluator>
57  {
58  if( _pin_pressure )
59  _p_pinning.check_pin_location(system.get_mesh());
60  }
61 
62  template<typename Mixture, typename Evaluator>
65  {
66  std::string section = "Physics/"+PhysicsNaming::reacting_low_mach_navier_stokes()+"/output_vars";
67 
68  if( input.have_variable(section) )
69  {
70  unsigned int n_vars = input.vector_variable_size(section);
71 
72  for( unsigned int v = 0; v < n_vars; v++ )
73  {
74  std::string name = input(section,"DIE!",v);
75 
76  if( name == std::string("rho") )
77  {
78  this->_rho_index = postprocessing.register_quantity( name );
79  }
80  else if( name == std::string("mu") )
81  {
82  this->_mu_index = postprocessing.register_quantity( name );
83  }
84  else if( name == std::string("k") )
85  {
86  this->_k_index = postprocessing.register_quantity( name );
87  }
88  else if( name == std::string("cp") )
89  {
90  this->_cp_index = postprocessing.register_quantity( name );
91  }
92  else if( name == std::string("mole_fractions") )
93  {
94  this->_mole_fractions_index.resize(this->n_species());
95 
96  for( unsigned int s = 0; s < this->n_species(); s++ )
97  {
98  this->_mole_fractions_index[s] = postprocessing.register_quantity( "X_"+this->_gas_mixture.species_name(s) );
99  }
100  }
101  else if( name == std::string("h_s") )
102  {
103  this->_h_s_index.resize(this->n_species());
104 
105  for( unsigned int s = 0; s < this->n_species(); s++ )
106  {
107  this->_h_s_index[s] = postprocessing.register_quantity( "h_"+this->_gas_mixture.species_name(s) );
108  }
109  }
110  else if( name == std::string("omega_dot") )
111  {
112  this->_omega_dot_index.resize(this->n_species());
113 
114  for( unsigned int s = 0; s < this->n_species(); s++ )
115  {
116  this->_omega_dot_index[s] = postprocessing.register_quantity( "omega_dot_"+this->_gas_mixture.species_name(s) );
117  }
118 
119  std::cout << "omega_dot size = " << _omega_dot_index.size() << std::endl;
120  }
121  else
122  {
123  std::cerr << "Error: Invalue output_vars value for "+PhysicsNaming::reacting_low_mach_navier_stokes() << std::endl
124  << " Found " << name << std::endl
125  << " Acceptable values are: rho" << std::endl
126  << " mu" << std::endl
127  << " k" << std::endl
128  << " cp" << std::endl
129  << " mole_fractions" << std::endl
130  << " omega_dot" << std::endl;
131  libmesh_error();
132  }
133  }
134  }
135 
136  return;
137  }
138 
139  template<typename Mixture, typename Evaluator>
141  {
142  // First call base class
144 
145  // We also need the side shape functions, etc.
146  context.get_side_fe(this->_flow_vars.u())->get_JxW();
147  context.get_side_fe(this->_flow_vars.u())->get_phi();
148  context.get_side_fe(this->_flow_vars.u())->get_dphi();
149  context.get_side_fe(this->_flow_vars.u())->get_xyz();
150 
151  context.get_side_fe(this->_temp_vars.T())->get_JxW();
152  context.get_side_fe(this->_temp_vars.T())->get_phi();
153  context.get_side_fe(this->_temp_vars.T())->get_dphi();
154  context.get_side_fe(this->_temp_vars.T())->get_xyz();
155  }
156 
157  template<typename Mixture, typename Evaluator>
159  AssemblyContext& context,
160  CachedValues& cache )
161  {
162  if( compute_jacobian )
163  {
164  libmesh_not_implemented();
165  }
166  // Convenience
167  const VariableIndex s0_var = this->_species_vars.species(0);
168 
169  // The number of local degrees of freedom in each variable.
170  const unsigned int n_p_dofs = context.get_dof_indices(this->_press_var.p()).size();
171  const unsigned int n_s_dofs = context.get_dof_indices(s0_var).size();
172  const unsigned int n_u_dofs = context.get_dof_indices(this->_flow_vars.u()).size();
173  const unsigned int n_T_dofs = context.get_dof_indices(this->_temp_vars.T()).size();
174 
175  // Check number of dofs is same for _flow_vars.u(), v_var and w_var.
176  libmesh_assert (n_u_dofs == context.get_dof_indices(this->_flow_vars.v()).size());
177  if (this->_dim == 3)
178  libmesh_assert (n_u_dofs == context.get_dof_indices(this->_flow_vars.w()).size());
179 
180  // Element Jacobian * quadrature weights for interior integration.
181  const std::vector<libMesh::Real>& JxW =
182  context.get_element_fe(this->_flow_vars.u())->get_JxW();
183 
184  // The pressure shape functions at interior quadrature points.
185  const std::vector<std::vector<libMesh::Real> >& p_phi =
186  context.get_element_fe(this->_press_var.p())->get_phi();
187 
188  // The species shape functions at interior quadrature points.
189  const std::vector<std::vector<libMesh::Real> >& s_phi = context.get_element_fe(s0_var)->get_phi();
190 
191  // The species shape function gradients at interior quadrature points.
192  const std::vector<std::vector<libMesh::Gradient> >& s_grad_phi = context.get_element_fe(s0_var)->get_dphi();
193 
194  // The pressure shape functions at interior quadrature points.
195  const std::vector<std::vector<libMesh::Real> >& u_phi =
196  context.get_element_fe(this->_flow_vars.u())->get_phi();
197 
198  // The velocity shape function gradients at interior quadrature points.
199  const std::vector<std::vector<libMesh::RealGradient> >& u_gradphi =
200  context.get_element_fe(this->_flow_vars.u())->get_dphi();
201 
202  // The temperature shape functions at interior quadrature points.
203  const std::vector<std::vector<libMesh::Real> >& T_phi =
204  context.get_element_fe(this->_temp_vars.T())->get_phi();
205 
206  // The temperature shape functions gradients at interior quadrature points.
207  const std::vector<std::vector<libMesh::RealGradient> >& T_gradphi =
208  context.get_element_fe(this->_temp_vars.T())->get_dphi();
209 
210  const std::vector<libMesh::Point>& u_qpoint =
211  context.get_element_fe(this->_flow_vars.u())->get_xyz();
212 
213  libMesh::DenseSubVector<libMesh::Number>& Fp = context.get_elem_residual(this->_press_var.p()); // R_{p}
214 
215  libMesh::DenseSubVector<libMesh::Number> &Fu = context.get_elem_residual(this->_flow_vars.u()); // R_{u}
216  libMesh::DenseSubVector<libMesh::Number> &Fv = context.get_elem_residual(this->_flow_vars.v()); // R_{v}
217  libMesh::DenseSubVector<libMesh::Real>* Fw = NULL;
218 
219  if( this->_dim == 3 )
220  {
221  Fw = &context.get_elem_residual(this->_flow_vars.w()); // R_{w}
222  }
223 
224  libMesh::DenseSubVector<libMesh::Number> &FT = context.get_elem_residual(this->_temp_vars.T()); // R_{T}
225 
226  unsigned int n_qpoints = context.get_element_qrule().n_points();
227  for (unsigned int qp=0; qp != n_qpoints; qp++)
228  {
229  libMesh::Number rho = cache.get_cached_values(Cache::MIXTURE_DENSITY)[qp];
230 
231  libMesh::Number u, v, T;
232  u = cache.get_cached_values(Cache::X_VELOCITY)[qp];
233  v = cache.get_cached_values(Cache::Y_VELOCITY)[qp];
234 
235  T = cache.get_cached_values(Cache::TEMPERATURE)[qp];
236 
237  const libMesh::Gradient& grad_T =
239 
240  libMesh::NumberVectorValue U(u,v);
241  if (this->_dim == 3)
242  U(2) = cache.get_cached_values(Cache::Z_VELOCITY)[qp]; // w
243 
244  libMesh::Gradient grad_u = cache.get_cached_gradient_values(Cache::X_VELOCITY_GRAD)[qp];
245  libMesh::Gradient grad_v = cache.get_cached_gradient_values(Cache::Y_VELOCITY_GRAD)[qp];
246 
247  libMesh::Gradient grad_w;
248  if (this->_dim == 3)
250 
251  libMesh::Number divU = grad_u(0) + grad_v(1);
252  if (this->_dim == 3)
253  divU += grad_w(2);
254 
255  libMesh::NumberVectorValue grad_uT( grad_u(0), grad_v(0) );
256  libMesh::NumberVectorValue grad_vT( grad_u(1), grad_v(1) );
257  libMesh::NumberVectorValue grad_wT;
258  if( this->_dim == 3 )
259  {
260  grad_uT(2) = grad_w(0);
261  grad_vT(2) = grad_w(1);
262  grad_wT = libMesh::NumberVectorValue( grad_u(2), grad_v(2), grad_w(2) );
263  }
264 
265  libMesh::Number mu = cache.get_cached_values(Cache::MIXTURE_VISCOSITY)[qp];
266  libMesh::Number p = cache.get_cached_values(Cache::PRESSURE)[qp];
267 
268  const std::vector<libMesh::Real>& D =
270 
271  libMesh::Number cp =
273 
274  libMesh::Number k =
276 
277  const std::vector<libMesh::Real>& omega_dot =
279 
280  const std::vector<libMesh::Real>& h =
282 
283  const libMesh::Number r = u_qpoint[qp](0);
284 
285  libMesh::Real jac = JxW[qp];
286 
288  {
289  divU += U(0)/r;
290  jac *= r;
291  }
292 
293  libMesh::Real M = cache.get_cached_values(Cache::MOLAR_MASS)[qp];
294 
295  std::vector<libMesh::Gradient> grad_ws = cache.get_cached_vector_gradient_values(Cache::MASS_FRACTIONS_GRAD)[qp];
296  libmesh_assert_equal_to( grad_ws.size(), this->_n_species );
297 
298  // Continuity Residual
299  libMesh::Gradient mass_term(0.0,0.0,0.0);
300  for(unsigned int s=0; s < this->_n_species; s++ )
301  {
302  mass_term += grad_ws[s]/this->_gas_mixture.M(s);
303  }
304  mass_term *= M;
305 
306  for (unsigned int i=0; i != n_p_dofs; i++)
307  {
308  Fp(i) += (-U*(mass_term + grad_T/T) + divU)*jac*p_phi[i][qp];
309  }
310 
311  // Species residuals
312  for(unsigned int s=0; s < this->_n_species; s++ )
313  {
314  libMesh::DenseSubVector<libMesh::Number> &Fs =
315  context.get_elem_residual(this->_species_vars.species(s)); // R_{s}
316 
317  const libMesh::Real term1 = -rho*(U*grad_ws[s]) + omega_dot[s];
318  const libMesh::Gradient term2 = -rho*D[s]*grad_ws[s];
319 
320  for (unsigned int i=0; i != n_s_dofs; i++)
321  {
323  Fs(i) += ( term1*s_phi[i][qp] + term2*s_grad_phi[i][qp] )*jac;
324  }
325  }
326 
327  // Momentum residuals
328  for (unsigned int i=0; i != n_u_dofs; i++)
329  {
330  Fu(i) += ( -rho*U*grad_u*u_phi[i][qp]
331  + p*u_gradphi[i][qp](0)
332  - mu*(u_gradphi[i][qp]*grad_u + u_gradphi[i][qp]*grad_uT
333  - 2.0/3.0*divU*u_gradphi[i][qp](0) )
334  + rho*this->_g(0)*u_phi[i][qp]
335  )*jac;
336 
340  {
341  Fu(i) += u_phi[i][qp]*( p/r - 2*mu*U(0)/(r*r) - 2.0/3.0*mu*divU/r )*jac;
342  }
343 
344  Fv(i) += ( -rho*U*grad_v*u_phi[i][qp]
345  + p*u_gradphi[i][qp](1)
346  - mu*(u_gradphi[i][qp]*grad_v + u_gradphi[i][qp]*grad_vT
347  - 2.0/3.0*divU*u_gradphi[i][qp](1) )
348  + rho*this->_g(1)*u_phi[i][qp]
349  )*jac;
350 
351  if (this->_dim == 3)
352  {
353  (*Fw)(i) += ( -rho*U*grad_w*u_phi[i][qp]
354  + p*u_gradphi[i][qp](2)
355  - mu*(u_gradphi[i][qp]*grad_w + u_gradphi[i][qp]*grad_wT
356  - 2.0/3.0*divU*u_gradphi[i][qp](2) )
357  + rho*this->_g(2)*u_phi[i][qp]
358  )*jac;
359  }
360  }
361 
362  // Energy residual
363  libMesh::Real chem_term = 0.0;
364  for(unsigned int s=0; s < this->_n_species; s++ )
365  {
366  chem_term += h[s]*omega_dot[s];
367  }
368 
369  for (unsigned int i=0; i != n_T_dofs; i++)
370  {
371  FT(i) += ( ( -rho*cp*U*grad_T - chem_term )*T_phi[i][qp]
372  - k*grad_T*T_gradphi[i][qp] )*jac;
373  }
374 
375  } // quadrature loop
376 
377  return;
378  }
379 
380  template<typename Mixture, typename Evaluator>
382  AssemblyContext& context,
383  CachedValues& /* cache */ )
384  {
385  // Pin p = p_value at p_point
386  if( this->_pin_pressure )
387  {
388  _p_pinning.pin_value( context, compute_jacobian, this->_press_var.p() );
389  }
390 
391  return;
392  }
393 
394  template<typename Mixture, typename Evaluator>
396  AssemblyContext& /*context*/,
397  CachedValues& /*cache*/ )
398  {
399  libmesh_not_implemented();
400 
401  return;
402  }
403 
404  template<typename Mixture, typename Evaluator>
406  CachedValues& cache )
407  {
408  Evaluator gas_evaluator( this->_gas_mixture );
409 
410  const unsigned int n_qpoints = context.get_element_qrule().n_points();
411 
412  std::vector<libMesh::Real> u, v, w, T, p, p0;
413  u.resize(n_qpoints);
414  v.resize(n_qpoints);
415  if( this->_dim > 2 )
416  w.resize(n_qpoints);
417 
418  T.resize(n_qpoints);
419  p.resize(n_qpoints);
420  p0.resize(n_qpoints);
421 
422  std::vector<libMesh::Gradient> grad_u, grad_v, grad_w, grad_T;
423  grad_u.resize(n_qpoints);
424  grad_v.resize(n_qpoints);
425  if( this->_dim > 2 )
426  grad_w.resize(n_qpoints);
427 
428  grad_T.resize(n_qpoints);
429 
430  std::vector<std::vector<libMesh::Real> > mass_fractions;
431  std::vector<std::vector<libMesh::Gradient> > grad_mass_fractions;
432  mass_fractions.resize(n_qpoints);
433  grad_mass_fractions.resize(n_qpoints);
434 
435  std::vector<libMesh::Real> M;
436  M.resize(n_qpoints);
437 
438  std::vector<libMesh::Real> R;
439  R.resize(n_qpoints);
440 
441  std::vector<libMesh::Real> rho;
442  rho.resize(n_qpoints);
443 
444  std::vector<libMesh::Real> cp;
445  cp.resize(n_qpoints);
446 
447  std::vector<libMesh::Real> mu;
448  mu.resize(n_qpoints);
449 
450  std::vector<libMesh::Real> k;
451  k.resize(n_qpoints);
452 
453  std::vector<std::vector<libMesh::Real> > h_s;
454  h_s.resize(n_qpoints);
455 
456  std::vector<std::vector<libMesh::Real> > D_s;
457  D_s.resize(n_qpoints);
458 
459  std::vector<std::vector<libMesh::Real> > omega_dot_s;
460  omega_dot_s.resize(n_qpoints);
461 
462  for (unsigned int qp = 0; qp != n_qpoints; ++qp)
463  {
464  u[qp] = context.interior_value(this->_flow_vars.u(), qp);
465  v[qp] = context.interior_value(this->_flow_vars.v(), qp);
466 
467  grad_u[qp] = context.interior_gradient(this->_flow_vars.u(), qp);
468  grad_v[qp] = context.interior_gradient(this->_flow_vars.v(), qp);
469  if( this->_dim > 2 )
470  {
471  w[qp] = context.interior_value(this->_flow_vars.w(), qp);
472  grad_w[qp] = context.interior_gradient(this->_flow_vars.w(), qp);
473  }
474 
475  T[qp] = context.interior_value(this->_temp_vars.T(), qp);
476  grad_T[qp] = context.interior_gradient(this->_temp_vars.T(), qp);
477 
478  p[qp] = context.interior_value(this->_press_var.p(), qp);
479  p0[qp] = this->get_p0_steady(context, qp);
480 
481  mass_fractions[qp].resize(this->_n_species);
482  grad_mass_fractions[qp].resize(this->_n_species);
483  h_s[qp].resize(this->_n_species);
484 
485  for( unsigned int s = 0; s < this->_n_species; s++ )
486  {
489  mass_fractions[qp][s] = std::max( context.interior_value(this->_species_vars.species(s),qp), 0.0 );
490  grad_mass_fractions[qp][s] = context.interior_gradient(this->_species_vars.species(s),qp);
491  h_s[qp][s] = gas_evaluator.h_s( T[qp], s );
492  }
493 
494  M[qp] = gas_evaluator.M_mix( mass_fractions[qp] );
495 
496  R[qp] = gas_evaluator.R_mix( mass_fractions[qp] );
497 
498  rho[qp] = this->rho( T[qp], p0[qp], R[qp] );
499 
500  cp[qp] = gas_evaluator.cp(T[qp], p0[qp], mass_fractions[qp]);
501 
502  D_s[qp].resize(this->_n_species);
503 
504  gas_evaluator.mu_and_k_and_D( T[qp], rho[qp], cp[qp], mass_fractions[qp],
505  mu[qp], k[qp], D_s[qp] );
506 
507  omega_dot_s[qp].resize(this->_n_species);
508  gas_evaluator.omega_dot( T[qp], rho[qp], mass_fractions[qp], omega_dot_s[qp] );
509  }
510 
511  cache.set_values(Cache::X_VELOCITY, u);
512  cache.set_values(Cache::Y_VELOCITY, v);
515 
516  if(this->_dim > 2)
517  {
518  cache.set_values(Cache::Z_VELOCITY, w);
520  }
521 
522  cache.set_values(Cache::TEMPERATURE, T);
524  cache.set_values(Cache::PRESSURE, p);
526  cache.set_vector_values(Cache::MASS_FRACTIONS, mass_fractions);
527  cache.set_vector_gradient_values(Cache::MASS_FRACTIONS_GRAD, grad_mass_fractions);
528  cache.set_values(Cache::MOLAR_MASS, M);
536  cache.set_vector_values(Cache::OMEGA_DOT, omega_dot_s);
537  }
538 
539  template<typename Mixture, typename Evaluator>
541  const AssemblyContext& context,
542  const libMesh::Point& point,
543  libMesh::Real& value )
544  {
545  Evaluator gas_evaluator( this->_gas_mixture );
546 
547  if( quantity_index == this->_rho_index )
548  {
549  std::vector<libMesh::Real> Y( this->_n_species );
550  libMesh::Real T = this->T(point,context);
551  libMesh::Real p0 = this->get_p0_steady(context,point);
552  this->mass_fractions( point, context, Y );
553 
554  value = this->rho( T, p0, gas_evaluator.R_mix(Y) );
555  }
556  else if( quantity_index == this->_mu_index )
557  {
558  std::vector<libMesh::Real> Y( this->_n_species );
559  libMesh::Real T = this->T(point,context);
560  this->mass_fractions( point, context, Y );
561  libMesh::Real p0 = this->get_p0_steady(context,point);
562 
563  value = gas_evaluator.mu( T, p0, Y );
564  }
565  else if( quantity_index == this->_k_index )
566  {
567  std::vector<libMesh::Real> Y( this->_n_species );
568  libMesh::Real T = this->T(point,context);
569  this->mass_fractions( point, context, Y );
570  libMesh::Real p0 = this->get_p0_steady(context,point);
571 
572  value = gas_evaluator.k( T, p0, Y );
573  }
574  else if( quantity_index == this->_cp_index )
575  {
576  std::vector<libMesh::Real> Y( this->_n_species );
577  libMesh::Real T = this->T(point,context);
578  this->mass_fractions( point, context, Y );
579  libMesh::Real p0 = this->get_p0_steady(context,point);
580 
581  value = gas_evaluator.cp( T, p0, Y );
582  }
583  // Now check for species dependent stuff
584  else
585  {
586  if( !this->_h_s_index.empty() )
587  {
588  libmesh_assert_equal_to( _h_s_index.size(), this->n_species() );
589 
590  for( unsigned int s = 0; s < this->n_species(); s++ )
591  {
592  if( quantity_index == this->_h_s_index[s] )
593  {
594  libMesh::Real T = this->T(point,context);
595 
596  value = gas_evaluator.h_s( T, s );
597  return;
598  }
599  }
600  }
601 
602  if( !this->_mole_fractions_index.empty() )
603  {
604  libmesh_assert_equal_to( _mole_fractions_index.size(), this->n_species() );
605 
606  for( unsigned int s = 0; s < this->n_species(); s++ )
607  {
608  if( quantity_index == this->_mole_fractions_index[s] )
609  {
610  std::vector<libMesh::Real> Y( this->_n_species );
611  this->mass_fractions( point, context, Y );
612 
613  libMesh::Real M = gas_evaluator.M_mix(Y);
614 
615  value = gas_evaluator.X( s, M, Y[s] );
616  return;
617  }
618  }
619  }
620 
621  if( !this->_omega_dot_index.empty() )
622  {
623  libmesh_assert_equal_to( _omega_dot_index.size(), this->n_species() );
624 
625  for( unsigned int s = 0; s < this->n_species(); s++ )
626  {
627  if( quantity_index == this->_omega_dot_index[s] )
628  {
629  std::vector<libMesh::Real> Y( this->n_species() );
630  this->mass_fractions( point, context, Y );
631 
632  libMesh::Real T = this->T(point,context);
633 
634  libMesh::Real p0 = this->get_p0_steady(context,point);
635 
636  libMesh::Real rho = this->rho( T, p0, gas_evaluator.R_mix(Y) );
637 
638  std::vector<libMesh::Real> omega_dot( this->n_species() );
639  gas_evaluator.omega_dot( T, rho, Y, omega_dot );
640 
641  value = omega_dot[s];
642  return;
643  }
644  }
645  }
646 
647  } // if/else quantity_index
648 
649  return;
650  }
651 
652 } // namespace GRINS
static bool is_axisymmetric()
Definition: physics.h:133
unsigned int VariableIndex
More descriptive name of the type used for variable indices.
Definition: var_typedefs.h:42
unsigned int register_quantity(std::string name)
Register quantity to be postprocessed.
GRINS::ICHandlingBase * _ic_handler
Definition: physics.h:269
virtual void register_postprocessing_vars(const GetPot &input, PostProcessedQuantities< libMesh::Real > &postprocessing)
Register postprocessing variables for ReactingLowMachNavierStokes.
void set_values(unsigned int quantity, std::vector< libMesh::Number > &values)
Definition: cached_values.C:72
static PhysicsName reacting_low_mach_navier_stokes()
void set_vector_gradient_values(unsigned int quantity, std::vector< std::vector< libMesh::Gradient > > &values)
Definition: cached_values.C:86
Base class for reading and handling initial conditions for physics classes.
virtual void element_time_derivative(bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
Time dependent part(s) of physics for element interiors.
GRINS namespace.
const std::vector< std::vector< libMesh::Number > > & get_cached_vector_values(unsigned int quantity) const
virtual void compute_element_time_derivative_cache(const AssemblyContext &context, CachedValues &cache)
virtual void init_context(AssemblyContext &context)
Initialize context for added physics variables.
const std::vector< std::vector< libMesh::Gradient > > & get_cached_vector_gradient_values(unsigned int quantity) const
std::string PhysicsName
Interface with libMesh for solving Multiphysics problems.
const std::vector< libMesh::Gradient > & get_cached_gradient_values(unsigned int quantity) const
void set_vector_values(unsigned int quantity, std::vector< std::vector< libMesh::Number > > &values)
Definition: cached_values.C:93
virtual void element_constraint(bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
Constraint part(s) of physics for element interiors.
void set_gradient_values(unsigned int quantity, std::vector< libMesh::Gradient > &values)
Definition: cached_values.C:78
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...
virtual void auxiliary_init(MultiphysicsSystem &system)
Any auxillary initialization a Physics class may need.
virtual void compute_postprocessed_quantity(unsigned int quantity_index, const AssemblyContext &context, const libMesh::Point &point, libMesh::Real &value)
virtual void init_context(AssemblyContext &context)
Initialize context for added physics variables.
const std::vector< libMesh::Number > & get_cached_values(unsigned int quantity) const
Definition: cached_values.C:99

Generated on Thu Jun 2 2016 21:52:28 for GRINS-0.7.0 by  doxygen 1.8.10