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 "SCMHTCBorishanskii.h" 11 : 12 : registerMooseObject("SubChannelApp", SCMHTCBorishanskii); 13 : 14 : InputParameters 15 79 : SCMHTCBorishanskii::validParams() 16 : { 17 79 : InputParameters params = SCMHTCClosureBase::validParams(); 18 79 : params.addClassDescription( 19 : "Class that computes the convective heat transfer coefficient using the " 20 : "Borishanskii correlation. Only use for fuel-pins."); 21 79 : return params; 22 0 : } 23 : 24 44 : SCMHTCBorishanskii::SCMHTCBorishanskii(const InputParameters & parameters) 25 44 : : SCMHTCClosureBase(parameters) 26 : { 27 : // Check that the correlation is not used for the duct (not supported yet) 28 44 : if (const auto * duct_uo = _scm_problem.getDuctHTCClosure(); duct_uo && duct_uo == this) 29 0 : mooseError("'Borishanskii' is not yet supported for the 'duct_htc_correlation'."); 30 44 : } 31 : 32 : Real 33 57456 : SCMHTCBorishanskii::computeNusseltNumber(const FrictionStruct & /*friction_args*/, 34 : const NusseltStruct & nusselt_args) const 35 : { 36 57456 : const auto pre = computeNusseltNumberPreInfo(nusselt_args); 37 57456 : const Real Pe = pre.Re * pre.Pr; 38 57456 : const Real turbulent_Pe = turbulentReynoldsNumber(pre) * pre.Pr; 39 : 40 57456 : if (pre.poD < 1.1 || pre.poD > 1.5) 41 0 : flagSolutionWarning( 42 : "Pitch-over-pin diameter ratio out of range for the Borishanskii correlation."); 43 : 44 : // Base Borishanskii correlation term 45 57456 : const Real poly = -8.12 + 12.76 * pre.poD - 3.65 * Utility::pow<2>(pre.poD); 46 57456 : if (poly <= 0.0) 47 : { 48 0 : mooseError("Logarithm argument non-positive in Borishanskii correlation; " 49 : "Check Pitch-over-pin diameter ratio."); 50 : } 51 : 52 57456 : auto NuT = 24.15 * std::log(poly); 53 : // Peclet number correction term 54 57456 : const Real corr_prefactor = 0.0174 * (1.0 - std::exp(6.0 - 6.0 * pre.poD)); 55 : 56 57456 : if (Pe > 2200.0) 57 0 : flagSolutionWarning( 58 : "Peclet number (Pe) above recommended range for the Borishanskii correlation."); 59 : 60 57456 : if (turbulent_Pe >= 200.0 && turbulent_Pe <= 2200.0) 61 : { 62 0 : NuT += corr_prefactor * std::pow(turbulent_Pe - 200.0, 0.9); 63 : } 64 57456 : else if (turbulent_Pe < 200.0) 65 : { 66 : // do nothing, no extra term 67 : } 68 : else // Pe > 2200 69 : { 70 : // Still apply the same correlation formula at the turbulent endpoint. 71 0 : NuT += corr_prefactor * std::pow(turbulent_Pe - 200.0, 0.9); 72 : } 73 : 74 57456 : return blendTurbulentNusseltNumber(pre, NuT); 75 : }