https://mooseframework.inl.gov
SCMHTCDittusBoelter.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 "SCMHTCDittusBoelter.h"
11 
13 
16 {
17  // Enumerations
18  MooseEnum factors("Presser Weisman none", "Presser");
20  params.addClassDescription(
21  "Class that computes the convective heat transfer coefficient using the "
22  "Dittus Boelter correlation.");
23  params.addParam<MooseEnum>(
24  "correction_factor",
25  factors,
26  "Correction factor modeling the effect of the fuel-pin bundle. Default is Presser");
27  return params;
28 }
29 
31  : SCMHTCClosureBase(parameters),
32  _is_tri_lattice(dynamic_cast<const TriSubChannelMesh *>(&_subchannel_mesh) != nullptr),
33  _correction_factor(getParam<MooseEnum>("correction_factor"))
34 {
35 }
36 
37 Real
39  const NusseltStruct & nusselt_args) const
40 {
41  const auto pre = computeNusseltNumberPreInfo(nusselt_args);
42 
43  if (pre.Pr < 0.7 || pre.Pr > 1.6e2)
44  flagSolutionWarning("Prandtl number (Pr) out of range for the Dittus-Boelter correlation.");
45 
46  const auto corr = computeCorrectionFactor(pre.poD);
47  const Real psi = corr.psi;
48  const Real b = corr.b;
49  auto NuT = 0.023 * std::pow(pre.Re, 0.8) * std::pow(pre.Pr, b);
50  NuT *= psi;
51 
52  return blendTurbulentNusseltNumber(pre, NuT);
53 }
54 
57 {
58  CorrectionResult result;
59 
60  switch (_correction_factor)
61  {
62  case 0: // Presser
63  {
64  result.b = 0.4;
65 
66  if (_is_tri_lattice)
67  {
68  if (poD < 1.05 || poD > 2.2)
69  flagSolutionWarning("P/D out of range for Presser correction factor (triangular).");
70 
71  result.psi = 0.9090 + 0.0783 * poD - 0.1283 * std::exp(-2.4 * (poD - 1.0));
72  }
73  else
74  {
75  if (poD < 1.05 || poD > 1.9)
76  flagSolutionWarning("P/D out of range for Presser correction factor (square).");
77 
78  result.psi = 0.9217 + 0.1478 * poD - 0.1130 * std::exp(-7.0 * (poD - 1.0));
79  }
80  return result;
81  }
82 
83  case 1: // Weisman
84  {
85  result.b = 0.333;
86 
87  if (_is_tri_lattice)
88  {
89  if (poD < 1.1 || poD > 1.5)
90  flagSolutionWarning("P/D out of range for Weisman correction factor (triangular).");
91 
92  result.psi = 1.130 * poD - 0.2609;
93  }
94  else
95  {
96  if (poD < 1.1 || poD > 1.3)
97  flagSolutionWarning("P/D out of range for Weisman correction factor (square).");
98 
99  result.psi = 1.826 * poD - 1.0430;
100  }
101  return result;
102  }
103 
104  case 2: // "none": no bundle correction, keep classical Dittus-Boelter exponent (b = 0.4)
105  default:
106  {
107  result.psi = 1.0;
108  result.b = 0.4;
109  return result;
110  }
111  }
112 }
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
bool _is_tri_lattice
Keep track of the lattice type.
CorrectionResult computeCorrectionFactor(const Real poD) const
NusseltPreInfo computeNusseltNumberPreInfo(const NusseltStruct &nusselt_info) const
Computes all the data needed before computing the nusselt number. It&#39;s used by all closure models...
structure with the needed information to compute the friction factor at a specific subchannel cell ...
static InputParameters validParams()
virtual Real computeNusseltNumber(const FrictionStruct &friction_info, const NusseltStruct &nusselt_info) const override
Computes the nusselt number for the local conditions.
Mesh class for triangular, edge and corner subchannels for hexagonal lattice fuel assemblies...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
SCMHTCDittusBoelter(const InputParameters &parameters)
const MooseEnum _correction_factor
The correction factor applied to the Dittus-Boelter correlation.
void addClassDescription(const std::string &doc_string)
Base class for the convective heat transfer coefficients (HTC) closures used in SCM.
MooseUnits pow(const MooseUnits &, int)
static InputParameters validParams()
registerMooseObject("SubChannelApp", SCMHTCDittusBoelter)
Class that calculates the HTC based on the Dittus Boelter correlation It can be used for both pin and...
Real blendTurbulentNusseltNumber(const NusseltPreInfo &nusselt_info, const Real turbulent_nusselt) const
Blends turbulent Nusselt number through the transition range using the base laminar value...
structure with the needed information to compute the Nusselt number at a specific subchannel cell and...