GRINS-0.6.0
low_mach_navier_stokes_braack_stab.C
Go to the documentation of this file.
1 //-----------------------------------------------------------------------bl-
2 //--------------------------------------------------------------------------
3 //
4 // GRINS - General Reacting Incompressible Navier-Stokes
5 //
6 // Copyright (C) 2014-2015 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 
38 namespace GRINS
39 {
40 
41  template<class Mu, class SH, class TC>
43  const GetPot& input )
44  : LowMachNavierStokesStabilizationBase<Mu,SH,TC>(physics_name,input)
45  {
46  return;
47  }
48 
49  template<class Mu, class SH, class TC>
51  {
52  return;
53  }
54 
55  template<class Mu, class SH, class TC>
57  AssemblyContext& context,
58  CachedValues& /*cache*/ )
59  {
60 #ifdef GRINS_USE_GRVY_TIMERS
61  this->_timer->BeginTimer("LowMachNavierStokesBraackStabilization::element_time_derivative");
62 #endif
63 
64  this->assemble_continuity_time_deriv( compute_jacobian, context );
65  this->assemble_momentum_time_deriv( compute_jacobian, context );
66  this->assemble_energy_time_deriv( compute_jacobian, context );
67 
68 #ifdef GRINS_USE_GRVY_TIMERS
69  this->_timer->EndTimer("LowMachNavierStokesBraackStabilization::element_time_derivative");
70 #endif
71  return;
72  }
73 
74  template<class Mu, class SH, class TC>
76  AssemblyContext& context,
77  CachedValues& /*cache*/ )
78  {
79 #ifdef GRINS_USE_GRVY_TIMERS
80  this->_timer->BeginTimer("LowMachNavierStokesBraackStabilization::mass_residual");
81 #endif
82 
83  this->assemble_continuity_mass_residual( compute_jacobian, context );
84  this->assemble_momentum_mass_residual( compute_jacobian, context );
85  this->assemble_energy_mass_residual( compute_jacobian, context );
86 
87 #ifdef GRINS_USE_GRVY_TIMERS
88  this->_timer->EndTimer("LowMachNavierStokesBraackStabilization::mass_residual");
89 #endif
90  return;
91  }
92 
93  template<class Mu, class SH, class TC>
95  AssemblyContext& context )
96  {
97  // The number of local degrees of freedom in each variable.
98  const unsigned int n_p_dofs = context.get_dof_indices(this->_p_var).size();
99 
100  // Element Jacobian * quadrature weights for interior integration.
101  const std::vector<libMesh::Real> &JxW =
102  context.get_element_fe(this->_u_var)->get_JxW();
103 
104  // The pressure shape functions at interior quadrature points.
105  const std::vector<std::vector<libMesh::RealGradient> >& p_dphi =
106  context.get_element_fe(this->_p_var)->get_dphi();
107 
108  libMesh::DenseSubVector<libMesh::Number> &Fp = context.get_elem_residual(this->_p_var); // R_{p}
109 
110  unsigned int n_qpoints = context.get_element_qrule().n_points();
111 
112  for (unsigned int qp=0; qp != n_qpoints; qp++)
113  {
114  libMesh::FEBase* fe = context.get_element_fe(this->_u_var);
115 
116  libMesh::RealGradient g = this->_stab_helper.compute_g( fe, context, qp );
117  libMesh::RealTensor G = this->_stab_helper.compute_G( fe, context, qp );
118 
119  libMesh::Real T = context.interior_value( this->_T_var, qp );
120  libMesh::Real rho = this->rho( T, this->get_p0_steady( context, qp ) );
121 
122  libMesh::Real mu = this->_mu(T);
123  libMesh::Real k = this->_k(T);
124  libMesh::Real cp = this->_cp(T);
125 
126  libMesh::RealGradient U( context.interior_value( this->_u_var, qp ),
127  context.interior_value( this->_v_var, qp ) );
128  if( this->_dim == 3 )
129  U(2) = context.interior_value( this->_w_var, qp ); // w
130 
131  libMesh::Real tau_M = this->_stab_helper.compute_tau_momentum( context, qp, g, G, rho, U, mu, this->_is_steady );
132  libMesh::Real tau_E = this->_stab_helper.compute_tau_energy( context, qp, g, G, rho, U, k, cp, this->_is_steady );
133 
134  libMesh::RealGradient RM_s = this->compute_res_momentum_steady( context, qp );
135  libMesh::Real RE_s = this->compute_res_energy_steady( context, qp );
136 
137  // Now a loop over the pressure degrees of freedom. This
138  // computes the contributions of the continuity equation.
139  for (unsigned int i=0; i != n_p_dofs; i++)
140  {
141  Fp(i) += ( tau_M*RM_s*p_dphi[i][qp]
142  + tau_E*RE_s*(U*p_dphi[i][qp])/T )*JxW[qp];
143  }
144 
145  }
146 
147  return;
148  }
149 
150  template<class Mu, class SH, class TC>
152  AssemblyContext& context )
153  {
154  // The number of local degrees of freedom in each variable.
155  const unsigned int n_u_dofs = context.get_dof_indices(this->_u_var).size();
156 
157  // Check number of dofs is same for _u_var, v_var and w_var.
158  libmesh_assert (n_u_dofs == context.get_dof_indices(this->_v_var).size());
159  if (this->_dim == 3)
160  libmesh_assert (n_u_dofs == context.get_dof_indices(this->_w_var).size());
161 
162  // Element Jacobian * quadrature weights for interior integration.
163  const std::vector<libMesh::Real> &JxW =
164  context.get_element_fe(this->_u_var)->get_JxW();
165 
166  // The velocity shape function gradients at interior quadrature points.
167  const std::vector<std::vector<libMesh::RealGradient> >& u_gradphi =
168  context.get_element_fe(this->_u_var)->get_dphi();
169 
170  const std::vector<std::vector<libMesh::RealTensor> >& u_hessphi =
171  context.get_element_fe(this->_u_var)->get_d2phi();
172 
173  libMesh::DenseSubVector<libMesh::Number> &Fu = context.get_elem_residual(this->_u_var); // R_{u}
174  libMesh::DenseSubVector<libMesh::Number> &Fv = context.get_elem_residual(this->_v_var); // R_{v}
175  libMesh::DenseSubVector<libMesh::Number> &Fw = context.get_elem_residual(this->_w_var); // R_{w}
176 
177  unsigned int n_qpoints = context.get_element_qrule().n_points();
178 
179  for (unsigned int qp=0; qp != n_qpoints; qp++)
180  {
181  libMesh::Real T = context.interior_value( this->_T_var, qp );
182  libMesh::Real rho = this->rho( T, this->get_p0_steady( context, qp ) );
183 
184  libMesh::Real mu = this->_mu(T);
185 
186  libMesh::RealGradient U( context.interior_value(this->_u_var, qp),
187  context.interior_value(this->_v_var, qp) );
188 
189  libMesh::RealGradient grad_u = context.interior_gradient(this->_u_var, qp);
190  libMesh::RealGradient grad_v = context.interior_gradient(this->_v_var, qp);
191  libMesh::RealGradient grad_w;
192 
193  if( this->_dim == 3 )
194  {
195  U(2) = context.interior_value(this->_w_var, qp);
196  grad_w = context.interior_gradient(this->_w_var, qp);
197  }
198 
199  libMesh::FEBase* fe = context.get_element_fe(this->_u_var);
200 
201  libMesh::RealGradient g = this->_stab_helper.compute_g( fe, context, qp );
202  libMesh::RealTensor G = this->_stab_helper.compute_G( fe, context, qp );
203 
204  libMesh::Real tau_M = this->_stab_helper.compute_tau_momentum( context, qp, g, G, rho, U, mu, this->_is_steady );
205  libMesh::Real tau_C = this->_stab_helper.compute_tau_continuity( tau_M, g );
206 
207  libMesh::Real RC_s = this->compute_res_continuity_steady( context, qp );
208  libMesh::RealGradient RM_s = this->compute_res_momentum_steady( context, qp );
209 
210  for (unsigned int i=0; i != n_u_dofs; i++)
211  {
212  Fu(i) += ( tau_C*RC_s*u_gradphi[i][qp](0)
213  + tau_M*RM_s(0)*rho*U*u_gradphi[i][qp]
214  + mu*tau_M*RM_s(0)*(u_hessphi[i][qp](0,0) + u_hessphi[i][qp](1,1)
215  + u_hessphi[i][qp](0,0) + u_hessphi[i][qp](0,1)
216  - 2.0/3.0*(u_hessphi[i][qp](0,0) + u_hessphi[i][qp](1,0)) )
217  )*JxW[qp];
218 
219  Fv(i) += ( tau_C*RC_s*u_gradphi[i][qp](1)
220  + tau_M*RM_s(1)*rho*U*u_gradphi[i][qp]
221  + mu*tau_M*RM_s(1)*(u_hessphi[i][qp](0,0) + u_hessphi[i][qp](1,1)
222  + u_hessphi[i][qp](1,0) + u_hessphi[i][qp](1,1)
223  - 2.0/3.0*(u_hessphi[i][qp](0,1) + u_hessphi[i][qp](1,1)) )
224  )*JxW[qp];
225 
226  if( this->_dim == 3 )
227  {
228  Fu(i) += mu*tau_M*RM_s(0)*(u_hessphi[i][qp](2,2) + u_hessphi[i][qp](0,2)
229  - 2.0/3.0*u_hessphi[i][qp](2,0))*JxW[qp];
230 
231  Fv(i) += mu*tau_M*RM_s(1)*(u_hessphi[i][qp](2,2) + u_hessphi[i][qp](1,2)
232  - 2.0/3.0*u_hessphi[i][qp](2,1))*JxW[qp];
233 
234  Fw(i) += ( tau_C*RC_s*u_gradphi[i][qp](2)
235  + tau_M*RM_s(2)*rho*U*u_gradphi[i][qp]
236  + mu*tau_M*RM_s(2)*(u_hessphi[i][qp](0,0) + u_hessphi[i][qp](1,1) + u_hessphi[i][qp](2,2)
237  + u_hessphi[i][qp](2,0) + u_hessphi[i][qp](2,1) + u_hessphi[i][qp](2,2)
238  - 2.0/3.0*(u_hessphi[i][qp](0,2) + u_hessphi[i][qp](1,2)
239  + u_hessphi[i][qp](2,2))
240  )
241  )*JxW[qp];
242  }
243  }
244 
245  }
246  return;
247  }
248 
249  template<class Mu, class SH, class TC>
251  AssemblyContext& context )
252  {
253  // The number of local degrees of freedom in each variable.
254  const unsigned int n_T_dofs = context.get_dof_indices(this->_T_var).size();
255 
256  // Element Jacobian * quadrature weights for interior integration.
257  const std::vector<libMesh::Real> &JxW =
258  context.get_element_fe(this->_T_var)->get_JxW();
259 
260  // The temperature shape functions gradients at interior quadrature points.
261  const std::vector<std::vector<libMesh::RealGradient> >& T_gradphi =
262  context.get_element_fe(this->_T_var)->get_dphi();
263 
264  const std::vector<std::vector<libMesh::RealTensor> >& T_hessphi =
265  context.get_element_fe(this->_T_var)->get_d2phi();
266 
267  libMesh::DenseSubVector<libMesh::Number> &FT = context.get_elem_residual(this->_T_var); // R_{T}
268 
269  unsigned int n_qpoints = context.get_element_qrule().n_points();
270 
271  for (unsigned int qp=0; qp != n_qpoints; qp++)
272  {
273  libMesh::Number u, v;
274  u = context.interior_value(this->_u_var, qp);
275  v = context.interior_value(this->_v_var, qp);
276 
277  libMesh::Gradient grad_T = context.interior_gradient(this->_T_var, qp);
278 
279  libMesh::NumberVectorValue U(u,v);
280  if (this->_dim == 3)
281  U(2) = context.interior_value(this->_w_var, qp);
282 
283  libMesh::Real T = context.interior_value( this->_T_var, qp );
284  libMesh::Real rho = this->rho( T, this->get_p0_steady( context, qp ) );
285 
286  libMesh::Real k = this->_k(T);
287  libMesh::Real cp = this->_cp(T);
288 
289  libMesh::Number rho_cp = rho*this->_cp(T);
290 
291  libMesh::FEBase* fe = context.get_element_fe(this->_u_var);
292 
293  libMesh::RealGradient g = this->_stab_helper.compute_g( fe, context, qp );
294  libMesh::RealTensor G = this->_stab_helper.compute_G( fe, context, qp );
295 
296  libMesh::Real tau_E = this->_stab_helper.compute_tau_energy( context, qp, g, G, rho, U, k, cp, this->_is_steady );
297 
298  libMesh::Real RE_s = this->compute_res_energy_steady( context, qp );
299 
300  for (unsigned int i=0; i != n_T_dofs; i++)
301  {
302  FT(i) += ( rho_cp*tau_E*RE_s*U*T_gradphi[i][qp]
303  + tau_E*RE_s*k*(T_hessphi[i][qp](0,0) + T_hessphi[i][qp](1,1) + T_hessphi[i][qp](2,2) )
304  )*JxW[qp];
305  }
306 
307  }
308 
309  return;
310  }
311 
312  template<class Mu, class SH, class TC>
314  AssemblyContext& context )
315  {
316  // The number of local degrees of freedom in each variable.
317  const unsigned int n_p_dofs = context.get_dof_indices(this->_p_var).size();
318 
319  // Element Jacobian * quadrature weights for interior integration.
320  const std::vector<libMesh::Real> &JxW =
321  context.get_element_fe(this->_u_var)->get_JxW();
322 
323  // The pressure shape functions at interior quadrature points.
324  const std::vector<std::vector<libMesh::RealGradient> >& p_dphi =
325  context.get_element_fe(this->_p_var)->get_dphi();
326 
327  libMesh::DenseSubVector<libMesh::Number> &Fp = context.get_elem_residual(this->_p_var); // R_{p}
328 
329  unsigned int n_qpoints = context.get_element_qrule().n_points();
330 
331  for (unsigned int qp=0; qp != n_qpoints; qp++)
332  {
333  libMesh::FEBase* fe = context.get_element_fe(this->_u_var);
334 
335  libMesh::RealGradient g = this->_stab_helper.compute_g( fe, context, qp );
336  libMesh::RealTensor G = this->_stab_helper.compute_G( fe, context, qp );
337 
338  libMesh::Real T = context.fixed_interior_value( this->_T_var, qp );
339  libMesh::Real rho = this->rho( T, this->get_p0_transient( context, qp ) );
340 
341  libMesh::Real mu = this->_mu(T);
342  libMesh::Real k = this->_k(T);
343  libMesh::Real cp = this->_cp(T);
344 
345  libMesh::RealGradient U( context.fixed_interior_value( this->_u_var, qp ),
346  context.fixed_interior_value( this->_v_var, qp ) );
347  if( this->_dim == 3 )
348  U(2) = context.fixed_interior_value( this->_w_var, qp );
349 
350  libMesh::Real tau_M = this->_stab_helper.compute_tau_momentum( context, qp, g, G, rho, U, mu, false );
351  libMesh::RealGradient RM_t = this->compute_res_momentum_transient( context, qp );
352 
353  libMesh::Real tau_E = this->_stab_helper.compute_tau_energy( context, qp, g, G, rho, U, k, cp, false );
354  libMesh::Real RE_t = this->compute_res_energy_transient( context, qp );
355 
356  // Now a loop over the pressure degrees of freedom. This
357  // computes the contributions of the continuity equation.
358  for (unsigned int i=0; i != n_p_dofs; i++)
359  {
360  Fp(i) += ( tau_M*RM_t*p_dphi[i][qp]
361  + tau_E*RE_t*(U*p_dphi[i][qp])/T
362  )*JxW[qp];
363  }
364  }
365 
366  return;
367  }
368 
369  template<class Mu, class SH, class TC>
371  AssemblyContext& context )
372  {
373  // The number of local degrees of freedom in each variable.
374  const unsigned int n_u_dofs = context.get_dof_indices(this->_u_var).size();
375 
376  // Check number of dofs is same for _u_var, v_var and w_var.
377  libmesh_assert (n_u_dofs == context.get_dof_indices(this->_v_var).size());
378  if (this->_dim == 3)
379  libmesh_assert (n_u_dofs == context.get_dof_indices(this->_w_var).size());
380 
381  // Element Jacobian * quadrature weights for interior integration.
382  const std::vector<libMesh::Real> &JxW =
383  context.get_element_fe(this->_u_var)->get_JxW();
384 
385  // The velocity shape function gradients at interior quadrature points.
386  const std::vector<std::vector<libMesh::RealGradient> >& u_gradphi =
387  context.get_element_fe(this->_u_var)->get_dphi();
388 
389  const std::vector<std::vector<libMesh::RealTensor> >& u_hessphi =
390  context.get_element_fe(this->_u_var)->get_d2phi();
391 
392  libMesh::DenseSubVector<libMesh::Number> &Fu = context.get_elem_residual(this->_u_var); // R_{u}
393  libMesh::DenseSubVector<libMesh::Number> &Fv = context.get_elem_residual(this->_v_var); // R_{v}
394  libMesh::DenseSubVector<libMesh::Number> &Fw = context.get_elem_residual(this->_w_var); // R_{w}
395 
396  unsigned int n_qpoints = context.get_element_qrule().n_points();
397  for (unsigned int qp=0; qp != n_qpoints; qp++)
398  {
399  libMesh::Real T = context.fixed_interior_value( this->_T_var, qp );
400  libMesh::Real rho = this->rho( T, this->get_p0_transient( context, qp ) );
401 
402  libMesh::Real mu = this->_mu(T);
403 
404  libMesh::RealGradient U( context.fixed_interior_value(this->_u_var, qp),
405  context.fixed_interior_value(this->_v_var, qp) );
406 
407  libMesh::RealGradient grad_u = context.fixed_interior_gradient(this->_u_var, qp);
408  libMesh::RealGradient grad_v = context.fixed_interior_gradient(this->_v_var, qp);
409  libMesh::RealGradient grad_w;
410 
411  if( this->_dim == 3 )
412  {
413  U(2) = context.fixed_interior_value(this->_w_var, qp);
414  grad_w = context.fixed_interior_gradient(this->_w_var, qp);
415  }
416 
417  libMesh::FEBase* fe = context.get_element_fe(this->_u_var);
418 
419  libMesh::RealGradient g = this->_stab_helper.compute_g( fe, context, qp );
420  libMesh::RealTensor G = this->_stab_helper.compute_G( fe, context, qp );
421 
422  libMesh::Real tau_M = this->_stab_helper.compute_tau_momentum( context, qp, g, G, rho, U, mu, false );
423  libMesh::Real tau_C = this->_stab_helper.compute_tau_continuity( tau_M, g );
424 
425  libMesh::Real RC_t = this->compute_res_continuity_transient( context, qp );
426  libMesh::RealGradient RM_t = this->compute_res_momentum_transient( context, qp );
427 
428  for (unsigned int i=0; i != n_u_dofs; i++)
429  {
430  Fu(i) += ( tau_C*RC_t*u_gradphi[i][qp](0)
431  + tau_M*RM_t(0)*rho*U*u_gradphi[i][qp]
432  + mu*tau_M*RM_t(0)*(u_hessphi[i][qp](0,0) + u_hessphi[i][qp](1,1)
433  + u_hessphi[i][qp](0,0) + u_hessphi[i][qp](0,1)
434  - 2.0/3.0*(u_hessphi[i][qp](0,0) + u_hessphi[i][qp](1,0)) )
435  )*JxW[qp];
436 
437  Fv(i) += ( tau_C*RC_t*u_gradphi[i][qp](1)
438  + tau_M*RM_t(1)*rho*U*u_gradphi[i][qp]
439  + mu*tau_M*RM_t(1)*(u_hessphi[i][qp](0,0) + u_hessphi[i][qp](1,1)
440  + u_hessphi[i][qp](1,0) + u_hessphi[i][qp](1,1)
441  - 2.0/3.0*(u_hessphi[i][qp](0,1) + u_hessphi[i][qp](1,1)) )
442  )*JxW[qp];
443 
444  if( this->_dim == 3 )
445  {
446  Fw(i) -= mu*tau_M*RM_t(0)*(u_hessphi[i][qp](2,2) + u_hessphi[i][qp](0,2)
447  - 2.0/3.0*u_hessphi[i][qp](2,0))*JxW[qp];
448 
449  Fv(i) -= mu*tau_M*RM_t(1)*(u_hessphi[i][qp](2,2) + u_hessphi[i][qp](1,2)
450  - 2.0/3.0*u_hessphi[i][qp](2,1))*JxW[qp];
451 
452  Fw(i) -= ( tau_C*RC_t*u_gradphi[i][qp](2)
453  + tau_M*RM_t(2)*rho*U*u_gradphi[i][qp]
454  + mu*tau_M*RM_t(2)*(u_hessphi[i][qp](0,0) + u_hessphi[i][qp](1,1) + u_hessphi[i][qp](2,2)
455  + u_hessphi[i][qp](2,0) + u_hessphi[i][qp](2,1) + u_hessphi[i][qp](2,2)
456  - 2.0/3.0*(u_hessphi[i][qp](0,2) + u_hessphi[i][qp](1,2)
457  + u_hessphi[i][qp](2,2))
458  )
459  )*JxW[qp];
460  }
461  }
462 
463  }
464  return;
465  }
466 
467  template<class Mu, class SH, class TC>
469  AssemblyContext& context )
470  {
471  // The number of local degrees of freedom in each variable.
472  const unsigned int n_T_dofs = context.get_dof_indices(this->_T_var).size();
473 
474  // Element Jacobian * quadrature weights for interior integration.
475  const std::vector<libMesh::Real> &JxW =
476  context.get_element_fe(this->_T_var)->get_JxW();
477 
478  // The temperature shape functions gradients at interior quadrature points.
479  const std::vector<std::vector<libMesh::RealGradient> >& T_gradphi =
480  context.get_element_fe(this->_T_var)->get_dphi();
481 
482  const std::vector<std::vector<libMesh::RealTensor> >& T_hessphi =
483  context.get_element_fe(this->_T_var)->get_d2phi();
484 
485  libMesh::DenseSubVector<libMesh::Number> &FT = context.get_elem_residual(this->_T_var); // R_{T}
486 
487  unsigned int n_qpoints = context.get_element_qrule().n_points();
488 
489  for (unsigned int qp=0; qp != n_qpoints; qp++)
490  {
491  libMesh::Number u, v;
492  u = context.fixed_interior_value(this->_u_var, qp);
493  v = context.fixed_interior_value(this->_v_var, qp);
494 
495  libMesh::Gradient grad_T = context.fixed_interior_gradient(this->_T_var, qp);
496 
497  libMesh::NumberVectorValue U(u,v);
498  if (this->_dim == 3)
499  U(2) = context.fixed_interior_value(this->_w_var, qp); // w
500 
501  libMesh::Real T = context.fixed_interior_value( this->_T_var, qp );
502  libMesh::Real rho = this->rho( T, this->get_p0_transient( context, qp ) );
503 
504  libMesh::Real k = this->_k(T);
505  libMesh::Real cp = this->_cp(T);
506 
507  libMesh::Number rho_cp = rho*cp;
508 
509  libMesh::FEBase* fe = context.get_element_fe(this->_u_var);
510 
511  libMesh::RealGradient g = this->_stab_helper.compute_g( fe, context, qp );
512  libMesh::RealTensor G = this->_stab_helper.compute_G( fe, context, qp );
513 
514  libMesh::Real tau_E = this->_stab_helper.compute_tau_energy( context, qp, g, G, rho, U, k, cp, false );
515 
516  libMesh::Real RE_t = this->compute_res_energy_transient( context, qp );
517 
518  for (unsigned int i=0; i != n_T_dofs; i++)
519  {
520  FT(i) += ( rho_cp*tau_E*RE_t*U*T_gradphi[i][qp]
521  + tau_E*RE_t*k*(T_hessphi[i][qp](0,0) + T_hessphi[i][qp](1,1) + T_hessphi[i][qp](2,2))
522  )*JxW[qp];
523  }
524 
525  }
526 
527  return;
528  }
529 
530 
531 } // namespace GRINS
532 
533 // Instantiate
void assemble_energy_mass_residual(bool compute_jacobian, AssemblyContext &context)
Adds VMS-based stabilization to LowMachNavierStokes physics class.
void assemble_energy_time_deriv(bool compute_jacobian, AssemblyContext &context)
virtual void element_time_derivative(bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
Time dependent part(s) of physics for element interiors.
GRINS namespace.
void assemble_momentum_mass_residual(bool compute_jacobian, AssemblyContext &context)
void assemble_continuity_time_deriv(bool compute_jacobian, AssemblyContext &context)
Adds VMS-based stabilization to LowMachNavierStokes physics class.
void assemble_continuity_mass_residual(bool compute_jacobian, AssemblyContext &context)
void assemble_momentum_time_deriv(bool compute_jacobian, AssemblyContext &context)
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...

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