www.mooseframework.org
NSEnergyThermalFlux.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 // Navier-Stokes includes
11 #include "NS.h"
12 #include "NSEnergyThermalFlux.h"
13 
14 registerMooseObject("NavierStokesApp", NSEnergyThermalFlux);
15 
16 template <>
17 InputParameters
19 {
20  InputParameters params = validParams<NSKernel>();
21  params.addClassDescription("This class is responsible for computing residuals and Jacobian terms "
22  "for the k * grad(T) * grad(phi) term in the Navier-Stokes energy "
23  "equation.");
24  params.addRequiredCoupledVar(NS::temperature, "temperature");
25  return params;
26 }
27 
28 NSEnergyThermalFlux::NSEnergyThermalFlux(const InputParameters & parameters)
29  : NSKernel(parameters),
30  _grad_temp(coupledGradient(NS::temperature)),
31  _thermal_conductivity(getMaterialProperty<Real>("thermal_conductivity")),
32  // Temperature derivative computing object
33  _temp_derivs(*this)
34 {
35  // Store pointers to all variable gradients in a single vector.
36  _gradU.resize(5);
37  _gradU[0] = &_grad_rho;
38  _gradU[1] = &_grad_rho_u;
39  _gradU[2] = &_grad_rho_v;
40  _gradU[3] = &_grad_rho_w;
41  _gradU[4] = &_grad_rho_E;
42 }
43 
44 Real
46 {
47  // k * grad(T) * grad(phi)
48  return _thermal_conductivity[_qp] * (_grad_temp[_qp] * _grad_test[_i][_qp]);
49 }
50 
51 Real
53 {
54  // The "on-diagonal" Jacobian for the energy equation
55  // corresponds to variable number 4.
56  return computeJacobianHelper_value(/*var_number=*/4);
57 }
58 
59 Real
61 {
62  if (isNSVariable(jvar))
64  else
65  return 0.0;
66 }
67 
68 Real
70 {
71  // The value to return
72  Real result = 0.0;
73 
74  // I used "ell" here as the loop counter since it matches the
75  // "\ell" used in my LaTeX notes.
76  for (unsigned int ell = 0; ell < 3; ++ell)
77  {
78  // Accumulate the first dot product term
79  Real intermediate_result = _temp_derivs.get_grad(var_number) * _grad_phi[_j][_qp](ell);
80 
81  // Now accumulate the Hessian term
82  Real hess_term = 0.0;
83  for (unsigned n = 0; n < 5; ++n)
84  {
85  // hess_term += get_hess(m,n) * gradU[n](ell); // ideally... but you can't have a
86  // vector<VariableGradient&> :-(
87  hess_term += _temp_derivs.get_hess(var_number, n) *
88  (*_gradU[n])[_qp](ell); // dereference pointer to get value
89  }
90 
91  // Accumulate the second dot product term
92  intermediate_result += hess_term * _phi[_j][_qp];
93 
94  // Hit intermediate_result with the test function, accumulate in the final value
95  result += intermediate_result * _grad_test[_i][_qp](ell);
96  }
97 
98  // Return result, don't forget to multiply by "k"!
99  return _thermal_conductivity[_qp] * result;
100 }
NSKernel::_grad_rho
const VariableGradient & _grad_rho
Definition: NSKernel.h:47
NSEnergyThermalFlux.h
NSKernel::isNSVariable
bool isNSVariable(unsigned var)
Helper functions for mapping Moose variable numberings into the "canonical" numbering for the compres...
Definition: NSKernel.C:78
validParams< NSKernel >
InputParameters validParams< NSKernel >()
Definition: NSKernel.C:22
NSEnergyThermalFlux::computeJacobianHelper_value
Real computeJacobianHelper_value(unsigned var_number)
Definition: NSEnergyThermalFlux.C:69
NS
Definition: NS.h:14
NSEnergyThermalFlux
This class is responsible for computing residuals and Jacobian terms for the k * grad(T) * grad(phi) ...
Definition: NSEnergyThermalFlux.h:26
NSEnergyThermalFlux::_grad_temp
const VariableGradient & _grad_temp
Definition: NSEnergyThermalFlux.h:37
NSEnergyThermalFlux::computeQpJacobian
virtual Real computeQpJacobian()
Definition: NSEnergyThermalFlux.C:52
NSEnergyThermalFlux::_temp_derivs
NSTemperatureDerivs< NSEnergyThermalFlux > _temp_derivs
Definition: NSEnergyThermalFlux.h:44
NSKernel::_grad_rho_w
const VariableGradient & _grad_rho_w
Definition: NSKernel.h:50
NSEnergyThermalFlux::_gradU
std::vector< const VariableGradient * > _gradU
Definition: NSEnergyThermalFlux.h:63
registerMooseObject
registerMooseObject("NavierStokesApp", NSEnergyThermalFlux)
validParams< NSEnergyThermalFlux >
InputParameters validParams< NSEnergyThermalFlux >()
Definition: NSEnergyThermalFlux.C:18
NSKernel
This class couples together all the variables for the compressible Navier-Stokes equations to allow t...
Definition: NSKernel.h:29
NSTemperatureDerivs::get_hess
Real get_hess(unsigned i, unsigned j)
Definition: NSTemperatureDerivs.h:87
NSKernel::_grad_rho_E
const VariableGradient & _grad_rho_E
Definition: NSKernel.h:51
NS.h
NS::temperature
const std::string temperature
Definition: NS.h:26
NSEnergyThermalFlux::computeQpOffDiagJacobian
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
Definition: NSEnergyThermalFlux.C:60
NSKernel::_grad_rho_u
const VariableGradient & _grad_rho_u
Definition: NSKernel.h:48
NSTemperatureDerivs::get_grad
Real get_grad(unsigned i)
The primary interfaces for computing temperature derivatives.
Definition: NSTemperatureDerivs.h:49
NSEnergyThermalFlux::computeQpResidual
virtual Real computeQpResidual()
Definition: NSEnergyThermalFlux.C:45
NSEnergyThermalFlux::_thermal_conductivity
const MaterialProperty< Real > & _thermal_conductivity
Definition: NSEnergyThermalFlux.h:40
NSKernel::_grad_rho_v
const VariableGradient & _grad_rho_v
Definition: NSKernel.h:49
NSEnergyThermalFlux::NSEnergyThermalFlux
NSEnergyThermalFlux(const InputParameters &parameters)
Definition: NSEnergyThermalFlux.C:28
NSKernel::mapVarNumber
unsigned mapVarNumber(unsigned var)
Definition: NSKernel.C:88