Line data Source code
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 "ADWallHeatTransferCoefficientWeismanMaterial.h"
11 : #include "SinglePhaseFluidProperties.h"
12 : #include "FlowModelSinglePhase.h"
13 : #include "Numerics.h"
14 :
15 : registerMooseObject("ThermalHydraulicsApp", ADWallHeatTransferCoefficientWeismanMaterial);
16 :
17 : InputParameters
18 139 : ADWallHeatTransferCoefficientWeismanMaterial::validParams()
19 : {
20 139 : InputParameters params = Material::validParams();
21 278 : params.addParam<MaterialPropertyName>("Hw",
22 : FlowModelSinglePhase::HEAT_TRANSFER_COEFFICIENT_WALL,
23 : "Heat transfer coefficient material property");
24 278 : params.addParam<MaterialPropertyName>(
25 : "rho", FlowModelSinglePhase::DENSITY, "Density of the fluid");
26 278 : params.addParam<MaterialPropertyName>("vel", FlowModelSinglePhase::VELOCITY, "Fluid velocity");
27 278 : params.addParam<MaterialPropertyName>(
28 : "D_h", FlowModelSinglePhase::HYDRAULIC_DIAMETER, "Hydraulic diameter");
29 278 : params.addParam<MaterialPropertyName>(
30 : "cp", FlowModelSinglePhase::SPECIFIC_HEAT_CONSTANT_PRESSURE, "Specific heat of the fluid");
31 278 : params.addParam<MaterialPropertyName>(
32 : "mu", FlowModelSinglePhase::DYNAMIC_VISCOSITY, "Dynamic viscosity of the fluid");
33 278 : params.addParam<MaterialPropertyName>(
34 : "k", FlowModelSinglePhase::THERMAL_CONDUCTIVITY, "Heat conductivity of the fluid");
35 278 : params.addParam<MaterialPropertyName>(
36 : "T", FlowModelSinglePhase::TEMPERATURE, "Fluid temperature");
37 278 : params.addParam<MaterialPropertyName>("T_wall", FlowModel::TEMPERATURE_WALL, "Wall temperature");
38 278 : params.addRequiredParam<Real>(
39 : "PoD", "The Pitch-to-diameter ratio value being assigned into the property");
40 278 : MooseEnum bundle_array("SQUARE TRIANGULAR", "SQUARE");
41 278 : params.addParam<MooseEnum>("bundle_array", bundle_array, "The type of the rod bundle array");
42 139 : params.addClassDescription(
43 : "Computes wall heat transfer coefficient for water using the Weisman correlation");
44 139 : return params;
45 139 : }
46 :
47 108 : ADWallHeatTransferCoefficientWeismanMaterial::ADWallHeatTransferCoefficientWeismanMaterial(
48 108 : const InputParameters & parameters)
49 : : Material(parameters),
50 108 : _Hw(declareADProperty<Real>("Hw")),
51 216 : _rho(getADMaterialProperty<Real>("rho")),
52 216 : _vel(getADMaterialProperty<Real>("vel")),
53 216 : _D_h(getADMaterialProperty<Real>("D_h")),
54 216 : _k(getADMaterialProperty<Real>("k")),
55 216 : _mu(getADMaterialProperty<Real>("mu")),
56 216 : _cp(getADMaterialProperty<Real>("cp")),
57 216 : _T(getADMaterialProperty<Real>("T")),
58 216 : _T_wall(getADMaterialProperty<Real>("T_wall")),
59 216 : _PoD(getParam<Real>("PoD")),
60 324 : _bundle_array(getParam<MooseEnum>("bundle_array").getEnum<Bundle_array>())
61 : {
62 108 : }
63 :
64 : void
65 3096 : ADWallHeatTransferCoefficientWeismanMaterial::computeQpProperties()
66 : {
67 : using std::max, std::pow;
68 :
69 3096 : switch (_bundle_array)
70 : {
71 8 : case Bundle_array::SQUARE:
72 : {
73 8 : if (_PoD > 1.3 || _PoD < 1.1)
74 2 : mooseDoOnce(mooseWarning(
75 : "The Weisman correlation for square arrays is valid when P/D is between 1.1 "
76 : "and 1.3. Be aware that using values out of this range may lead to "
77 : "significant errors in your results!"));
78 6 : ADReal Pr = THM::Prandtl(_cp[_qp], _mu[_qp], _k[_qp]);
79 6 : ADReal Re = max(1.0, THM::Reynolds(1., _rho[_qp], _vel[_qp], _D_h[_qp], _mu[_qp]));
80 6 : ADReal n = (_T[_qp] < _T_wall[_qp]) ? 0.4 : 0.3;
81 6 : ADReal Nu = 0.023 * pow(Re, 4. / 5.) * pow(Pr, n) * (1.826 * _PoD - 1.0430);
82 6 : _Hw[_qp] = THM::wallHeatTransferCoefficient(Nu, _k[_qp], _D_h[_qp]);
83 : break;
84 : }
85 3088 : case Bundle_array::TRIANGULAR:
86 : {
87 3088 : if (_PoD > 1.5 || _PoD < 1.1)
88 2 : mooseDoOnce(mooseWarning(
89 : "The Weisman correlation for triangular arrays is valid when P/D is between 1.1 "
90 : "and 1.5. Be aware that using values out of this range may lead to "
91 : "significant errors in your results!"));
92 3086 : ADReal Pr = THM::Prandtl(_cp[_qp], _mu[_qp], _k[_qp]);
93 3086 : ADReal Re = max(1.0, THM::Reynolds(1., _rho[_qp], _vel[_qp], _D_h[_qp], _mu[_qp]));
94 3092 : ADReal n = (_T[_qp] < _T_wall[_qp]) ? 0.4 : 0.3;
95 3086 : ADReal Nu = 0.023 * pow(Re, 4. / 5.) * pow(Pr, n) * (1.130 * _PoD - 0.2609);
96 3086 : _Hw[_qp] = THM::wallHeatTransferCoefficient(Nu, _k[_qp], _D_h[_qp]);
97 : break;
98 : }
99 0 : default:
100 0 : mooseError("Invalid 'bundle_array' parameter.");
101 : }
102 3092 : }
|