https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
23
26{
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");
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{
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
189void
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)
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
210void
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
292void
298
299void
313
314Real
315GapConductance::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
335Real
342
343Real
345{
346 return 0.0;
347}
348
349Real
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 {
396 if (_r2 == _radius)
397 surface_integration_factor = _r1 / _r2;
398 }
400 {
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
413Real
415{
416 if (_emissivity == 0.0)
417 return 0.0;
418
419 Real surface_integration_factor = 1.0;
420
422 {
424 if (_r2 == _radius)
425 surface_integration_factor = _r1 / _r2;
426 }
428 {
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
440Real
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
455Real
456GapConductance::gapRect(const Real distance, const Real max_gap)
457{
458 return std::min(distance, max_gap);
459}
460
461Real
462GapConductance::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
468Real
469GapConductance::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
475Real
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
492void
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
545void
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}
registerMooseObject("HeatTransferApp", GapConductance)
const Real p
InputParameters emptyInputParameters()
void ErrorVector unsigned int
static MooseEnum getNonlinearVariableOrders()
virtual const std::set< SubdomainID > & blockIDs() const
const std::set< SubdomainID > & meshBlockIDs() const
virtual bool blockRestricted() const
virtual bool isCoupled(const std::string &var_name, unsigned int i=0) const
virtual Real value(Real t, const Point &p) const
Generic gap heat transfer model, with h_gap = h_conduction + h_contact + h_radiation.
static Real gapRect(const Real distance, const Real max_gap)
Compute gap distance for plate geometry.
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.
GapConductance(const InputParameters &parameters)
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)
virtual Real h_conduction()
const VariableValue & _temp
MaterialProperty< Real > & _gap_thermal_conductivity
const Real _stefan_boltzmann
virtual void computeQpProperties() override
virtual void computeGapValues()
GAP_GEOMETRY & _gap_geometry_type
const bool _warnings
virtual Real dh_radiation()
const VariableValue & _gap_temp_value
static InputParameters actionParameters()
const Real _min_gap
MaterialProperty< Real > & _gap_conductance
static Real gapSphere(const Real radius, const Real r1, const Real r2, const Real max_denom)
Compute gap distance for sphere geometry.
const Real _emissivity_secondary
static InputParameters validParams()
const VariableValue & _gap_distance_value
static Real gapLength(const GAP_GEOMETRY &gap_geom, const Real radius, const Real r1, const Real r2, const Real max_gap)
virtual void computeQpConductance()
Override this to compute the conductance at _qp.
static Real gapCyl(const Real radius, const Real r1, const Real r2, const Real max_denom)
Compute gap distance for cylinder geometry.
virtual Real h_radiation()
static Real gapAttenuation(Real adjusted_length, Real min_gap, unsigned int min_gap_order)
const Real _emissivity_primary
const unsigned int _min_gap_order
virtual void initialSetup() override
MooseVariable * _temp_var
virtual Real gapK()
MaterialProperty< Real > & _gap_conductance_dT
const Real _gap_conductivity
virtual Real dh_conduction()
const VariableValue *const _gap_conductivity_function_variable
const Function *const _gap_conductivity_function
const Real _max_gap
PenetrationLocator * _penetration_locator
PenetrationLocator & getQuadraturePenetrationLocator(const BoundaryName &primary, const BoundaryName &secondary, libMesh::Order order=libMesh::FIRST)
void addParamNamesToGroup(const std::string &space_delim_names, const std::string group_name)
bool isParamSetByUser(const std::string &name) const
void addRequiredCoupledVar(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
std::vector< std::pair< R1, R2 > > get(const std::string &param1, const std::string &param2) const
void addClassDescription(const std::string &doc_string)
void addCoupledVar(const std::string &name, const std::string &doc_string)
void addRangeCheckedParam(const std::string &name, const T &value, const std::string &parsed_function, const std::string &doc_string)
bool isParamValid(const std::string &name) const
const MooseArray< Point > & _normals
unsigned int _qp
SubProblem & _subproblem
MooseMesh & _mesh
FEProblemBase & _fe_problem
static InputParameters validParams()
const unsigned int & _current_side
const Elem *const & _current_elem
const MooseArray< Point > & _q_point
const InputParameters & parameters() const
void paramError(const std::string &param, Args... args) const
void mooseError(Args &&... args) const
void mooseWarning(Args &&... args) const
const InputParameters & _pars
const std::string & _name
const T & getParam(const std::string &name) const
unsigned int uniformRefineLevel() const
Node * getQuadratureNode(const Elem *elem, const unsigned short int side, const unsigned int qp)
unsigned int number() const
const Elem * _side
std::vector< std::vector< Real > > _side_phi
std::map< dof_id_type, PenetrationInfo * > & _penetration_info
unsigned int getAxisymmetricRadialCoord() const
Moose::CoordinateSystemType getCoordSystem(SubdomainID sid) const
virtual GeometricSearchData & geomSearchData()=0
Real & _t
processor_id_type processor_id() const
CoordinateSystemType
COORD_RSPHERICAL
const Real radius
Real distance(const Point &p)