18 params.
addClassDescription(
"Class that models the turbulent mixing coefficient for wire-wrapped " 19 "triangular assemblies using the Cheng Todreas correlations.");
25 _is_tri_lattice(dynamic_cast<const
TriSubChannelMesh *>(&_subchannel_mesh) != nullptr),
27 _S_soln(_subproblem.getVariable(0,
"S")),
28 _mdot_soln(_subproblem.getVariable(0,
"mdot")),
29 _w_perim_soln(_subproblem.getVariable(0,
"w_perim")),
30 _mu_soln(_subproblem.getVariable(0,
"mu"))
33 mooseError(
"This correlation applies only for triangular assemblies");
36 mooseError(
"This correlation applies only for wire-wrapped assemblies");
40 const Real pitch_to_diameter =
pitch / pin_diameter;
43 const unsigned int num_pins = 1 + 3 * Nr * (Nr - 1);
47 if (pitch_to_diameter < 1.067 || pitch_to_diameter > 1.35)
48 flagSolutionWarning(
"Pitch-over-pin diameter ratio (P/D) outside the Cheng-Todreas " 49 "wire-wrapped mixing correlation data range.");
50 if (wire_lead_to_diameter < 4.0 || wire_lead_to_diameter > 52.0)
51 flagSolutionWarning(
"Wire lead length-over-pin diameter ratio (H/D) outside the " 52 "Cheng-Todreas wire-wrapped mixing correlation data range.");
53 if (num_pins < 7 || num_pins > 217)
54 flagSolutionWarning(
"Number of pins outside the Cheng-Todreas wire-wrapped mixing " 55 "correlation data range.");
71 const unsigned int i_ch = chans.first;
72 const unsigned int j_ch = chans.second;
87 const Real S_total = Si_in + Sj_in + Si_out + Sj_out;
88 const Real Si = 0.5 * (Si_in + Si_out);
89 const Real Sj = 0.5 * (Sj_in + Sj_out);
95 (1.0 / S_total) * (
_mu_soln(node_out_i) * Si_out +
_mu_soln(node_in_i) * Si_in +
98 const Real avg_hD = 4.0 * (Si + Sj) / (w_perim_i + w_perim_j);
100 const Real avg_massflux =
104 const Real Re = avg_massflux * avg_hD / avg_mu;
105 if (Re < 400.0 || Re > 1.0e6)
106 flagSolutionWarning(
"Reynolds number (Re) outside the Cheng-Todreas wire-wrapped mixing " 107 "correlation data range.");
121 std::acos(wire_lead_length /
122 std::sqrt(Utility::pow<2>(wire_lead_length) +
123 Utility::pow<2>(
libMesh::pi * (pin_diameter + wire_diameter))));
126 const Real Ar1 =
libMesh::pi * (pin_diameter + wire_diameter) * wire_diameter / 6.0;
129 const Real A1prime = (std::sqrt(3.0) / 4.0) * Utility::pow<2>(
pitch) -
134 Real CmL_constant = 0.0;
135 Real CmT_constant = 0.0;
140 CmL_constant = 0.055;
145 CmL_constant = 0.077;
148 const Real CmT = CmT_constant *
std::pow((
pitch - pin_diameter) / pin_diameter, -0.5);
149 const Real CmL = CmL_constant *
std::pow((
pitch - pin_diameter) / pin_diameter, -0.5);
163 const Real psi = (std::log(
Re) - std::log(ReL)) / (std::log(ReT) - std::log(ReL));
164 const Real gamma = 2.0 / 3.0;
165 Cm = CmL + (CmT - CmL) *
std::pow(psi, gamma);
169 beta = Cm * std::sqrt(Ar1 / A1prime) * std::tan(theta);
176 const unsigned int iz)
const 188 const unsigned int i_ch = chans.first;
189 const unsigned int j_ch = chans.second;
204 const Real S_total = Si_in + Sj_in + Si_out + Sj_out;
205 const Real Si = 0.5 * (Si_in + Si_out);
206 const Real Sj = 0.5 * (Sj_in + Sj_out);
212 (1.0 / S_total) * (
_mu_soln(node_out_i) * Si_out +
_mu_soln(node_in_i) * Si_in +
215 const Real avg_hD = 4.0 * (Si + Sj) / (w_perim_i + w_perim_j);
217 const Real avg_massflux =
221 const Real Re = avg_massflux * avg_hD / avg_mu;
222 if (Re < 400.0 || Re > 1.0e6)
223 flagSolutionWarning(
"Reynolds number (Re) outside the Cheng-Todreas wire-wrapped mixing " 224 "correlation data range.");
234 std::acos(wire_lead_length /
235 std::sqrt(Utility::pow<2>(wire_lead_length) +
236 Utility::pow<2>(
libMesh::pi * (pin_diameter + wire_diameter))));
243 const Real w = pin_diameter + dpgap;
245 const Real Ar2 =
libMesh::pi * (pin_diameter + wire_diameter) * wire_diameter / 4.0;
248 pitch * (w - pin_diameter / 2.0) -
libMesh::pi * Utility::pow<2>(pin_diameter) / 8.0;
252 Real CsL_constant = 0.0;
253 Real CsT_constant = 0.0;
263 CsL_constant = 0.413;
266 const Real CsL = CsL_constant *
std::pow(wire_lead_length / pin_diameter, 0.3);
267 const Real CsT = CsT_constant *
std::pow(wire_lead_length / pin_diameter, 0.3);
281 const Real psi = (std::log(
Re) - std::log(ReL)) / (std::log(ReT) - std::log(ReL));
282 const Real gamma = 2.0 / 3.0;
283 Cs = CsL + (CsT - CsL) *
std::pow(psi, gamma);
287 beta = Cs * std::sqrt(Ar2 / A2prime) * std::tan(theta);
const Real & getWireDiameter() const
Return wire diameter.
virtual const Real & getPinDiameter() const
Return undeformed Pin diameter.
virtual const Real & getPitch() const
Return the undeformed pitch between 2 subchannels.
virtual EChannelType getSubchannelType(unsigned int index) const =0
Return the type of the subchannel for given subchannel index.
Base class for turbulent mixing closures used in SCM.
const unsigned int & getNumOfRings() const
Return the number of fuel-pin rings, counting the center pin as the first ring.
const TriSubChannelMesh *const _tri_sch_mesh
Pointer to the tri lattice mesh.
const Real & getDuctToPinGap() const
Return the the gap thickness between the duct and peripheral fuel pins.
Real computeMixingParameter(const unsigned int i_gap, const unsigned int iz) const override
Computes the turbulent mixing coefficient for the local conditions around gap(i_gap) and axial level(...
static const std::string pitch
Class that calculates turbulent mixing and sweep-flow coefficients based on the Cheng & Todreas corre...
bool _is_tri_lattice
Keep track of the lattice type.
virtual Node * getChannelNode(unsigned int i_chan, unsigned int iz) const =0
Get the subchannel mesh node for a given channel index and elevation index.
static InputParameters validParams()
Mesh class for triangular, edge and corner subchannels for hexagonal lattice fuel assemblies...
SCMMixingChengTodreas(const InputParameters ¶meters)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static InputParameters validParams()
const SubChannelMesh & _subchannel_mesh
Reference to the subchannel mesh.
void mooseError(Args &&... args) const
registerMooseObject("SubChannelApp", SCMMixingChengTodreas)
Real computeSweepFlowMixingParameter(const unsigned int i_gap, const unsigned int iz) const override
Computes the wire-wrap sweep-flow coefficient for peripheral gaps.
const Real & getWireLeadLength() const
Return the wire lead length.
MooseUnits pow(const MooseUnits &, int)
SolutionHandle _mdot_soln
SolutionHandle _w_perim_soln
virtual const std::pair< unsigned int, unsigned int > & getGapChannels(unsigned int i_gap) const =0
Return a pair of subchannel indices for a given gap index.