https://mooseframework.inl.gov
GapConductance.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
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 #include "GapConductance.h"
11 
12 // MOOSE includes
13 #include "Function.h"
14 #include "MooseMesh.h"
15 #include "MooseVariable.h"
16 #include "PenetrationLocator.h"
17 #include "SystemBase.h"
18 #include "AddVariableAction.h"
19 
20 #include "libmesh/string_to_enum.h"
21 
22 registerMooseObject("HeatTransferApp", GapConductance);
23 
26 {
29  params.addClassDescription(
30  "Material to compute an effective gap conductance based on the thermal conductivity of the "
31  "gap and diffusive approximation to the radiative heat transfer.");
32 
33  params.addRequiredCoupledVar("variable", "Temperature variable");
34 
35  // Node based
36  params.addCoupledVar("gap_distance", "Distance across the gap");
37  params.addCoupledVar("gap_temp", "Temperature on the other side of the gap");
38  params.addParam<Real>("gap_conductivity", 1.0, "The thermal conductivity of the gap material");
39  params.addParam<FunctionName>(
40  "gap_conductivity_function",
41  "Thermal conductivity of the gap material as a function. Multiplied by gap_conductivity.");
42  params.addCoupledVar("gap_conductivity_function_variable",
43  "Variable to be used in the gap_conductivity_function in place of time");
44 
45  // Quadrature based
46  params.addParam<bool>("quadrature",
47  false,
48  "Whether or not to do quadrature point based gap heat "
49  "transfer. If this is true then gap_distance and "
50  "gap_temp should NOT be provided (and will be "
51  "ignored); however, paired_boundary and variable are "
52  "then required.");
53  params.addParam<BoundaryName>("paired_boundary", "The boundary to be penetrated");
54 
55  params.addParam<Real>("stefan_boltzmann", 5.670374e-8, "The Stefan-Boltzmann constant");
56 
57  params.addParam<bool>("use_displaced_mesh",
58  true,
59  "Whether or not this object should use the "
60  "displaced mesh for computation. Note that in "
61  "the case this is true but no displacements "
62  "are provided in the Mesh block the "
63  "undisplaced mesh will still be used.");
64 
65  params.addParam<bool>(
66  "warnings", false, "Whether to output warning messages concerning nodes not being found");
67 
69  params.addParam<MooseEnum>("order", orders, "The finite element order");
70 
71  // These parameter groups match the ones in ThermalContactAction
72  params.addParamNamesToGroup("gap_distance", "Gap size");
73  params.addParamNamesToGroup("paired_boundary", "Gap surface definition");
74  params.addParamNamesToGroup("order quadrature", "Integration");
75  params.addParamNamesToGroup("warnings", "Diagnostics and debug");
76  params.addParamNamesToGroup(
77  "gap_conductivity gap_conductivity_function gap_conductivity_function_variable",
78  "Gap conductivity");
79 
80  return params;
81 }
82 
85 {
87  params.addParam<std::string>(
88  "appended_property_name", "", "Name appended to material properties to make them unique");
89  MooseEnum gap_geom_types("PLATE CYLINDER SPHERE");
90  params.addParam<MooseEnum>("gap_geometry_type", gap_geom_types, "Gap calculation type.");
91 
92  params.addParam<RealVectorValue>("cylinder_axis_point_1",
93  "Start point for line defining cylindrical axis");
94  params.addParam<RealVectorValue>("cylinder_axis_point_2",
95  "End point for line defining cylindrical axis");
96  params.addParam<RealVectorValue>("sphere_origin", "Origin for sphere geometry");
97 
98  params.addRangeCheckedParam<Real>("emissivity_primary",
99  1,
100  "emissivity_primary>=0 & emissivity_primary<=1",
101  "The emissivity of the primary surface");
102  params.addRangeCheckedParam<Real>("emissivity_secondary",
103  1,
104  "emissivity_secondary>=0 & emissivity_secondary<=1",
105  "The emissivity of the secondary surface");
106  // Common
107  params.addRangeCheckedParam<Real>(
108  "min_gap", 1e-6, "min_gap>0", "A minimum gap (denominator) size");
109  params.addRangeCheckedParam<Real>(
110  "max_gap", 1e6, "max_gap>=0", "A maximum gap (denominator) size");
111  params.addRangeCheckedParam<unsigned int>(
112  "min_gap_order", 0, "min_gap_order<=1", "Order of the Taylor expansion below min_gap");
113 
114  params.addParamNamesToGroup("appended_property_name", "Material property retrieval");
115  params.addParamNamesToGroup("gap_geometry_type cylinder_axis_point_1 cylinder_axis_point_2",
116  "Gap geometry");
117  params.addParamNamesToGroup("emissivity_primary emissivity_secondary", "Radiative heat transfer");
118  params.addParamNamesToGroup("min_gap max_gap min_gap_order", "Gap size");
119 
120  return params;
121 }
122 
124  : Material(parameters),
125  _appended_property_name(getParam<std::string>("appended_property_name")),
126  _temp(coupledValue("variable")),
127  _gap_geometry_type(declareRestartableData<GapConductance::GAP_GEOMETRY>("gap_geometry_type",
128  GapConductance::PLATE)),
129  _quadrature(getParam<bool>("quadrature")),
130  _gap_temp(0),
131  _gap_distance(88888),
132  _radius(0),
133  _r1(0),
134  _r2(0),
135  _has_info(false),
136  _gap_distance_value(_quadrature ? _zero : coupledValue("gap_distance")),
137  _gap_temp_value(_quadrature ? _zero : coupledValue("gap_temp")),
138  _gap_conductance(declareProperty<Real>("gap_conductance" + _appended_property_name)),
139  _gap_conductance_dT(declareProperty<Real>("gap_conductance" + _appended_property_name + "_dT")),
140  _gap_thermal_conductivity(declareProperty<Real>("gap_conductivity")),
141  _gap_conductivity(getParam<Real>("gap_conductivity")),
142  _gap_conductivity_function(isParamValid("gap_conductivity_function")
143  ? &getFunction("gap_conductivity_function")
144  : nullptr),
145  _gap_conductivity_function_variable(isCoupled("gap_conductivity_function_variable")
146  ? &coupledValue("gap_conductivity_function_variable")
147  : nullptr),
148  _stefan_boltzmann(getParam<Real>("stefan_boltzmann")),
149  _emissivity_primary(getParam<Real>("emissivity_primary")),
150  _emissivity_secondary(getParam<Real>("emissivity_secondary")),
151  _min_gap(getParam<Real>("min_gap")),
152  _min_gap_order(getParam<unsigned int>("min_gap_order")),
153  _max_gap(getParam<Real>("max_gap")),
154  _temp_var(_quadrature ? getVar("variable", 0) : nullptr),
155  _penetration_locator(nullptr),
156  _serialized_solution(_quadrature ? &_temp_var->sys().currentSolution() : nullptr),
157  _dof_map(_quadrature ? &_temp_var->sys().dofMap() : nullptr),
158  _warnings(getParam<bool>("warnings")),
159  _p1(declareRestartableData<Point>("cylinder_axis_point_1", Point(0, 1, 0))),
160  _p2(declareRestartableData<Point>("cylinder_axis_point_2", Point(0, 0, 0)))
161 {
163  ? 1.0 / _emissivity_primary + 1.0 / _emissivity_secondary - 1
164  : 0.0;
165 
166  if (_quadrature)
167  {
168  if (!parameters.isParamValid("paired_boundary"))
169  mooseError("No 'paired_boundary' provided for ", _name);
170 
172  parameters.get<BoundaryName>("paired_boundary"),
173  getParam<std::vector<BoundaryName>>("boundary")[0],
174  Utility::string_to_enum<Order>(parameters.get<MooseEnum>("order")));
175  }
176  else
177  {
178  if (!isCoupled("gap_distance"))
179  paramError("gap_distance", "needed if not using quadrature point based gap heat");
180 
181  if (!isCoupled("gap_temp"))
182  paramError("gap_temp", "needed if not using quadrature point based gap heat");
183  }
184 
185  if (_mesh.uniformRefineLevel() != 0)
186  mooseError("GapConductance does not work with uniform mesh refinement.");
187 }
188 
189 void
191 {
193  const auto & check_subdomains =
194  blockRestricted() && !blockIDs().empty() ? blockIDs() : meshBlockIDs();
195  if (check_subdomains.empty())
196  mooseError("No subdomains found");
197 
198  // make sure all subdomains are using the same coordinate system
199  Moose::CoordinateSystemType coord_system = _fe_problem.getCoordSystem(*check_subdomains.begin());
200  for (auto subdomain : check_subdomains)
201  if (_fe_problem.getCoordSystem(subdomain) != coord_system)
202  mooseError(
203  "The GapConductance model requires all subdomains to have the same coordinate system.");
204 
205  // Select proper coordinate system and geometry (plate, cylinder, spheres)
208 }
209 
210 void
212  const Moose::CoordinateSystemType coord_sys,
213  unsigned int axisymmetric_radial_coord,
214  GAP_GEOMETRY & gap_geometry_type,
215  Point & p1,
216  Point & p2)
217 {
218  if (params.isParamSetByUser("gap_geometry_type"))
219  {
220  gap_geometry_type =
221  GapConductance::GAP_GEOMETRY(int(params.get<MooseEnum>("gap_geometry_type")));
222  }
223  else
224  {
225  if (coord_sys == Moose::COORD_XYZ)
226  gap_geometry_type = GapConductance::PLATE;
227  else if (coord_sys == Moose::COORD_RZ)
228  gap_geometry_type = GapConductance::CYLINDER;
229  else if (coord_sys == Moose::COORD_RSPHERICAL)
230  gap_geometry_type = GapConductance::SPHERE;
231  }
232 
233  if (gap_geometry_type == GapConductance::PLATE)
234  {
235  if (coord_sys == Moose::COORD_RSPHERICAL)
236  ::mooseError("'gap_geometry_type = PLATE' cannot be used with models having a spherical "
237  "coordinate system.");
238  }
239  else if (gap_geometry_type == GapConductance::CYLINDER)
240  {
241  if (coord_sys == Moose::COORD_XYZ)
242  {
243  if (!params.isParamValid("cylinder_axis_point_1") ||
244  !params.isParamValid("cylinder_axis_point_2"))
245  ::mooseError("For 'gap_geometry_type = CYLINDER' to be used with a Cartesian model, "
246  "'cylinder_axis_point_1' and 'cylinder_axis_point_2' must be specified.");
247  p1 = params.get<RealVectorValue>("cylinder_axis_point_1");
248  p2 = params.get<RealVectorValue>("cylinder_axis_point_2");
249  }
250  else if (coord_sys == Moose::COORD_RZ)
251  {
252  if (params.isParamValid("cylinder_axis_point_1") ||
253  params.isParamValid("cylinder_axis_point_2"))
254  ::mooseError("The 'cylinder_axis_point_1' and 'cylinder_axis_point_2' cannot be specified "
255  "with axisymmetric models. The y-axis is used as the cylindrical axis of "
256  "symmetry.");
257 
258  if (axisymmetric_radial_coord == 0) // R-Z problem
259  {
260  p1 = Point(0, 0, 0);
261  p2 = Point(0, 1, 0);
262  }
263  else // Z-R problem
264  {
265  p1 = Point(0, 0, 0);
266  p2 = Point(1, 0, 0);
267  }
268  }
269  else if (coord_sys == Moose::COORD_RSPHERICAL)
270  ::mooseError("'gap_geometry_type = CYLINDER' cannot be used with models having a spherical "
271  "coordinate system.");
272  }
273  else if (gap_geometry_type == GapConductance::SPHERE)
274  {
275  if (coord_sys == Moose::COORD_XYZ || coord_sys == Moose::COORD_RZ)
276  {
277  if (!params.isParamValid("sphere_origin"))
278  ::mooseError("For 'gap_geometry_type = SPHERE' to be used with a Cartesian or axisymmetric "
279  "model, 'sphere_origin' must be specified.");
280  p1 = params.get<RealVectorValue>("sphere_origin");
281  }
282  else if (coord_sys == Moose::COORD_RSPHERICAL)
283  {
284  if (params.isParamValid("sphere_origin"))
285  ::mooseError("The 'sphere_origin' cannot be specified with spherical models. x=0 is used "
286  "as the spherical origin.");
287  p1 = Point(0, 0, 0);
288  }
289  }
290 }
291 
292 void
294 {
297 }
298 
299 void
301 {
302  if (_has_info)
303  {
306  }
307  else
308  {
309  _gap_conductance[_qp] = 0;
311  }
312 }
313 
314 Real
315 GapConductance::gapAttenuation(Real adjusted_length, Real min_gap, unsigned int min_gap_order)
316 {
317  mooseAssert(min_gap > 0, "min_gap must be larger than zero.");
318 
319  if (adjusted_length > min_gap)
320  return 1.0 / adjusted_length;
321  else
322  switch (min_gap_order)
323  {
324  case 0:
325  return 1.0 / min_gap;
326 
327  case 1:
328  return 1.0 / min_gap - (adjusted_length - min_gap) / (min_gap * min_gap);
329 
330  default:
331  ::mooseError("Invalid Taylor expansion order");
332  }
333 }
334 
335 Real
337 {
339  const Real adjusted_length = gapLength(_gap_geometry_type, _radius, _r1, _r2, _max_gap);
341 }
342 
343 Real
345 {
346  return 0.0;
347 }
348 
349 Real
351 {
352  /*
353  Gap conductance due to radiation is based on the diffusion approximation:
354 
355  q12 = sigma*Fe*(T1^4 - T2^4) ~ hr(T1 - T2)
356  where sigma is the Stefan-Boltzmann constant, Fe is an emissivity
357  function, T1 and T2 are the temperatures of the two surfaces, and
358  hr is the radiant gap conductance. Solving for hr,
359 
360  hr = sigma*Fe*(T1^4 - T2^4) / (T1 - T2)
361  which can be factored to give:
362 
363  hr = sigma*Fe*(T1^2 + T2^2) * (T1 + T2)
364 
365  Assuming the gap is between infinite parallel planes, the emissivity
366  function is given by:
367 
368  Fe = 1 / (1/e1 + 1/e2 - 1)
369 
370  For cylinders and spheres, see Fundamentals of Heat and Mass Transfer,
371  Sixth Edition, John Wiley & Sons, Table 13.3.
372 
373  For cylinders:
374 
375  Fe = 1 / (1/e1 + (1/e2 - 1) * (r1/r2))
376 
377  q21 = -q12 * (r1/r2)
378 
379  For spheres:
380 
381  Fe = 1 / (1/e1 + (1/e2 - 1) * (r1/r2)^2)
382 
383  q21 = -q12 * (r1/r2)^2
384  */
385 
386  if (_emissivity == 0.0)
387  return 0.0;
388 
389  // We add 'surface_integration_factor' to account for the surface integration of the conductance
390  // due to radiation.
391  Real surface_integration_factor = 1.0;
392 
394  {
395  _emissivity = 1.0 / _emissivity_primary + (1.0 / _emissivity_secondary - 1) * _r1 / _r2;
396  if (_r2 == _radius)
397  surface_integration_factor = _r1 / _r2;
398  }
400  {
401  _emissivity =
402  1.0 / _emissivity_primary + (1.0 / _emissivity_secondary - 1) * _r1 * _r1 / (_r2 * _r2);
403  if (_r2 == _radius)
404  surface_integration_factor = _r1 * _r1 / (_r2 * _r2);
405  }
406 
407  const Real temp_func =
409 
410  return _stefan_boltzmann * temp_func / _emissivity * surface_integration_factor;
411 }
412 
413 Real
415 {
416  if (_emissivity == 0.0)
417  return 0.0;
418 
419  Real surface_integration_factor = 1.0;
420 
422  {
423  _emissivity = 1.0 / _emissivity_primary + (1.0 / _emissivity_secondary - 1) * _r1 / _r2;
424  if (_r2 == _radius)
425  surface_integration_factor = _r1 / _r2;
426  }
428  {
429  _emissivity =
430  1.0 / _emissivity_primary + (1.0 / _emissivity_secondary - 1) * _r1 * _r1 / (_r2 * _r2);
431  if (_r2 == _radius)
432  surface_integration_factor = _r1 * _r1 / (_r2 * _r2);
433  }
434 
435  const Real temp_func = 3 * _temp[_qp] * _temp[_qp] + _gap_temp * (2 * _temp[_qp] + _gap_temp);
436 
437  return _stefan_boltzmann * temp_func / _emissivity * surface_integration_factor;
438 }
439 
440 Real
442  const Real radius,
443  const Real r1,
444  const Real r2,
445  const Real max_gap)
446 {
447  if (gap_geom == GapConductance::CYLINDER)
448  return gapCyl(radius, r1, r2, max_gap);
449  else if (gap_geom == GapConductance::SPHERE)
450  return gapSphere(radius, r1, r2, max_gap);
451  else
452  return gapRect(r2 - r1, max_gap);
453 }
454 
455 Real
456 GapConductance::gapRect(const Real distance, const Real max_gap)
457 {
458  return std::min(distance, max_gap);
459 }
460 
461 Real
462 GapConductance::gapCyl(const Real radius, const Real r1, const Real r2, const Real max_denom)
463 {
464  const Real denominator = radius * std::log(r2 / r1);
465  return std::min(denominator, max_denom);
466 }
467 
468 Real
469 GapConductance::gapSphere(const Real radius, const Real r1, const Real r2, const Real max_denom)
470 {
471  const Real denominator = radius * radius * ((1.0 / r1) - (1.0 / r2));
472  return std::min(denominator, max_denom);
473 }
474 
475 Real
477 {
478  Real gap_conductivity = _gap_conductivity;
479 
481  {
483  gap_conductivity *= _gap_conductivity_function->value(
485  else
486  gap_conductivity *= _gap_conductivity_function->value(_t, _q_point[_qp]);
487  }
488 
489  return gap_conductivity;
490 }
491 
492 void
494 {
495  if (!_quadrature)
496  {
497  _has_info = true;
500  }
501  else
502  {
505 
506  _gap_temp = 0.0;
507  _gap_distance = 88888;
508  _has_info = false;
509 
510  if (pinfo)
511  {
512  _gap_distance = pinfo->_distance;
513  _has_info = true;
514 
515  const Elem * secondary_side = pinfo->_side;
516  std::vector<std::vector<Real>> & secondary_side_phi = pinfo->_side_phi;
517  std::vector<dof_id_type> secondary_side_dof_indices;
518 
519  _dof_map->dof_indices(secondary_side, secondary_side_dof_indices, _temp_var->number());
520 
521  for (unsigned int i = 0; i < secondary_side_dof_indices.size(); ++i)
522  {
523  // The zero index is because we only have one point that the phis are evaluated at
524  _gap_temp +=
525  secondary_side_phi[i][0] * (*(*_serialized_solution))(secondary_side_dof_indices[i]);
526  }
527  }
528  else
529  {
530  if (_warnings)
531  mooseWarning("No gap value information found for node ",
532  qnode->id(),
533  " on processor ",
534  processor_id(),
535  " at coordinate ",
536  Point(*qnode));
537  }
538  }
539 
540  Point current_point(_q_point[_qp]);
543 }
544 
545 void
547  const Point & current_point,
548  const Point & p1,
549  const Point & p2,
550  const Real & gap_distance,
551  const Point & current_normal,
552  Real & r1,
553  Real & r2,
554  Real & radius)
555 {
556  if (gap_geometry_type == GapConductance::CYLINDER)
557  {
558  // The vector _p1 + t*(_p2-_p1) defines the cylindrical axis. The point along this
559  // axis closest to current_point is found by the following for t:
560  const Point p2p1(p2 - p1);
561  const Point p1pc(p1 - current_point);
562  const Real t = -(p1pc * p2p1) / p2p1.norm_sq();
563 
564  // The nearest point on the cylindrical axis to current_point is p.
565  const Point p(p1 + t * p2p1);
566  Point rad_vec(current_point - p);
567  Real rad = rad_vec.norm();
568  rad_vec /= rad;
569  Real rad_dot_norm = rad_vec * current_normal;
570 
571  if (rad_dot_norm > 0)
572  {
573  r1 = rad;
574  r2 = rad - gap_distance; // note, gap_distance is negative
575  radius = r1;
576  }
577  else if (rad_dot_norm < 0)
578  {
579  r1 = rad + gap_distance;
580  r2 = rad;
581  radius = r2;
582  }
583  else
584  ::mooseError("Issue with cylindrical flux calc. normals.\n");
585  }
586  else if (gap_geometry_type == GapConductance::SPHERE)
587  {
588  const Point origin_to_curr_point(current_point - p1);
589  const Real normal_dot = origin_to_curr_point * current_normal;
590  const Real curr_point_radius = origin_to_curr_point.norm();
591  if (normal_dot > 0) // on inside surface
592  {
593  r1 = curr_point_radius;
594  r2 = curr_point_radius - gap_distance; // gap_distance is negative
595  radius = r1;
596  }
597  else if (normal_dot < 0) // on outside surface
598  {
599  r1 = curr_point_radius + gap_distance; // gap_distance is negative
600  r2 = curr_point_radius;
601  radius = r2;
602  }
603  else
604  ::mooseError("Issue with spherical flux calc. normals. \n");
605  }
606  else
607  {
608  r2 = -gap_distance;
609  r1 = 0;
610  radius = 0;
611  }
612 }
const MooseArray< Point > & _q_point
const VariableValue *const _gap_conductivity_function_variable
unsigned int getAxisymmetricRadialCoord() const
virtual bool isCoupled(const std::string &var_name, unsigned int i=0) const
MaterialProperty< Real > & _gap_conductance_dT
const Real _stefan_boltzmann
FEProblemBase & _fe_problem
const Real radius
const InputParameters & _pars
const std::string & _name
registerMooseObject("HeatTransferApp", GapConductance)
static InputParameters actionParameters()
void paramError(const std::string &param, Args... args) const
static Real gapCyl(const Real radius, const Real r1, const Real r2, const Real max_denom)
Compute gap distance for cylinder geometry.
const T & getParam(const std::string &name) const
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
unsigned int number() const
std::vector< std::pair< R1, R2 > > get(const std::string &param1, const std::string &param2) const
SubProblem & _subproblem
const InputParameters & parameters() const
static InputParameters validParams()
static void computeGapRadii(const GAP_GEOMETRY gap_geometry_type, const Point &current_point, const Point &p1, const Point &p2, const Real &gap_distance, const Point &current_normal, Real &r1, Real &r2, Real &radius)
Compute current gap radii for surface integration of gas conductance.
static Real gapLength(const GAP_GEOMETRY &gap_geom, const Real radius, const Real r1, const Real r2, const Real max_gap)
MaterialProperty< Real > & _gap_thermal_conductivity
const Real _gap_conductivity
COORD_RSPHERICAL
static Real gapAttenuation(Real adjusted_length, Real min_gap, unsigned int min_gap_order)
virtual const std::set< SubdomainID > & blockIDs() const
virtual bool blockRestricted() const
virtual Real h_radiation()
virtual Real dh_radiation()
std::vector< std::vector< Real > > _side_phi
virtual void initialSetup() override
std::map< dof_id_type, PenetrationInfo *> & _penetration_info
Real distance(const Point &p)
virtual Real h_conduction()
const VariableValue & _gap_temp_value
InputParameters emptyInputParameters()
const unsigned int _min_gap_order
unsigned int _qp
const Real _max_gap
virtual Real dh_conduction()
static MooseEnum getNonlinearVariableOrders()
MooseMesh & _mesh
static InputParameters validParams()
static Real gapRect(const Real distance, const Real max_gap)
Compute gap distance for plate geometry.
static Real gapSphere(const Real radius, const Real r1, const Real r2, const Real max_denom)
Compute gap distance for sphere geometry.
static void setGapGeometryParameters(const InputParameters &params, const Moose::CoordinateSystemType coord_sys, unsigned int axisymmetric_radial_coord, GAP_GEOMETRY &gap_geometry_type, Point &p1, Point &p2)
Real & _t
Generic gap heat transfer model, with h_gap = h_conduction + h_contact + h_radiation.
virtual void computeGapValues()
const Elem * _side
unsigned int uniformRefineLevel() const
virtual GeometricSearchData & geomSearchData()=0
const bool _warnings
const VariableValue & _gap_distance_value
const Real _emissivity_primary
Node * getQuadratureNode(const Elem *elem, const unsigned short int side, const unsigned int qp)
void addCoupledVar(const std::string &name, const std::string &doc_string)
virtual void computeQpProperties() override
void addRequiredCoupledVar(const std::string &name, const std::string &doc_string)
bool isParamSetByUser(const std::string &name) const
virtual void computeQpConductance()
Override this to compute the conductance at _qp.
PenetrationLocator & getQuadraturePenetrationLocator(const BoundaryName &primary, const BoundaryName &secondary, libMesh::Order order=libMesh::FIRST)
const Real _min_gap
GAP_GEOMETRY & _gap_geometry_type
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual Real gapK()
const VariableValue & _temp
CoordinateSystemType
const MooseArray< Point > & _normals
const unsigned int & _current_side
void mooseWarning(Args &&... args) const
const std::set< SubdomainID > & meshBlockIDs() const
void mooseError(Args &&... args) const
void addClassDescription(const std::string &doc_string)
PenetrationLocator * _penetration_locator
Moose::CoordinateSystemType getCoordSystem(SubdomainID sid) const
const Real _emissivity_secondary
MooseVariable * _temp_var
void addRangeCheckedParam(const std::string &name, const T &value, const std::string &parsed_function, const std::string &doc_string)
virtual Real value(Real t, const Point &p) const
const Function *const _gap_conductivity_function
processor_id_type processor_id() const
GapConductance(const InputParameters &parameters)
void ErrorVector unsigned int
const Elem *const & _current_elem
void addParamNamesToGroup(const std::string &space_delim_names, const std::string group_name)
bool isParamValid(const std::string &name) const
MaterialProperty< Real > & _gap_conductance