25 _is_tri_lattice(dynamic_cast<const
TriSubChannelMesh *>(&_subchannel_mesh) != nullptr),
28 _has_wire_wrap(_is_tri_lattice && _tri_sch_mesh->getWireDiameter() != 0.0 &&
29 _tri_sch_mesh->getWireLeadLength() != 0.0)
33 mooseError(
"Wire-wrapped bundle friction requires both wire diameter and wire lead length. "
34 "Set both to zero for a bare pin bundle.");
40 const auto p_over_d = pitch / pin_diameter;
43 const unsigned int num_pins = 1 + 3 * Nr * (Nr - 1);
49 if (p_over_d < 1.0 || p_over_d > 1.42)
50 flagSolutionWarning(
"Pitch-over-pin diameter ratio (P/D) outside the upgraded "
51 "Cheng-Todreas friction correlation data range.");
52 if (
_has_wire_wrap && (wire_lead_to_diameter < 8.0 || wire_lead_to_diameter > 52.0))
53 flagSolutionWarning(
"Wire lead length-over-pin diameter ratio (H/D) outside the upgraded "
54 "Cheng-Todreas friction correlation data range.");
55 if (num_pins < 7 || num_pins > 271)
56 flagSolutionWarning(
"Number of pins outside the upgraded Cheng-Todreas friction correlation "
58 if (Reb < 50.0 || Reb > 1.0e6)
59 flagSolutionWarning(
"Bulk Reynolds number (Reb) outside the upgraded Cheng-Todreas friction "
60 "correlation data range.");
77 const auto Re = friction_args.
Re;
80 const Real Re_eff = std::max(
Re, 1.0);
81 const auto i_ch = friction_args.
i_ch;
82 const auto S = friction_args.
S;
83 const auto w_perim = friction_args.
w_perim;
84 const auto Dh_i = 4.0 * S / w_perim;
86 Real k1L, k2L, k3L, CfL;
87 Real k1T, k2T, k3T, CfT;
89 Real CbL1, CbL2, CbT1, CbT2;
101 const auto p_over_d = pitch / pin_diameter;
102 const auto w_over_d = (pin_diameter + gap) / pin_diameter;
108 const auto ReL = std::pow(10, CbL2 * (p_over_d - 1)) * CbL1;
109 const auto ReT = std::pow(10, CbT2 * (p_over_d - 1)) * CbT1;
111 const auto psi = std::log(Reb / ReL) / std::log(ReT / ReL);
137 CfL = k1L + k2L * (p_over_d - 1) + k3L * Utility::pow<2>((p_over_d - 1));
139 CfT = k1T + k2T * (p_over_d - 1) + k3T * Utility::pow<2>((p_over_d - 1));
162 CfL = k1L + k2L * (w_over_d - 1) + k3L * Utility::pow<2>((w_over_d - 1));
164 CfT = k1T + k2T * (w_over_d - 1) + k3T * Utility::pow<2>((w_over_d - 1));
187 CfL = k1L + k2L * (w_over_d - 1) + k3L * Utility::pow<2>((w_over_d - 1));
189 CfT = k1T + k2T * (w_over_d - 1) + k3T * Utility::pow<2>((w_over_d - 1));
198 std::acos(wire_lead_length /
199 std::sqrt(Utility::pow<2>(wire_lead_length) +
200 Utility::pow<2>(
libMesh::pi * (pin_diameter + wire_diameter))));
202 const Real CwT1 = 19.56;
203 const Real CwT2 = -98.71;
204 const Real CwT3 = 303.47;
205 const Real CwT4 = -0.541;
209 const auto WdT = (CwT1 + CwT2 * (wire_diameter / pin_diameter) +
210 CwT3 * Utility::pow<2>((wire_diameter / pin_diameter))) *
211 std::pow((wire_lead_length / pin_diameter), CwT4);
212 const auto WdL = CwL1 * WdT;
217 const auto WsT =
a * std::log10(wire_lead_length / pin_diameter) +
b;
218 const auto WsL = CwL2 * WsT;
225 const Real pw_p =
libMesh::pi * pin_diameter / 2.0;
227 ar =
libMesh::pi * (pin_diameter + wire_diameter) * wire_diameter / 6.0;
229 a_p = S +
libMesh::pi * Utility::pow<2>(wire_diameter) / 8.0 / std::cos(theta);
231 CfT *= (pw_p / w_perim);
232 CfT += WdT * (3.0 * ar / a_p) * (Dh_i / wire_lead_length) *
233 std::pow((Dh_i / wire_diameter), 0.18);
235 CfL *= (pw_p / w_perim);
236 CfL += WdL * (3.0 * ar / a_p) * (Dh_i / wire_lead_length) * (Dh_i / wire_diameter);
241 ar =
libMesh::pi * (pin_diameter + wire_diameter) * wire_diameter / 4.0;
243 a_p = S +
libMesh::pi * Utility::pow<2>(wire_diameter) / 8.0 / std::cos(theta);
245 const Real turbulent_wire_correction =
246 1 + WsT * (ar / a_p) * Utility::pow<2>(std::tan(theta));
247 if (!std::isfinite(turbulent_wire_correction) || turbulent_wire_correction < 0.0)
248 mooseError(
"The exponentiated term in the Cheng-Todreas turbulent wire correction must be "
249 "non-negative and finite for an edge subchannel. Computed ",
250 turbulent_wire_correction,
252 CfT *= std::pow(turbulent_wire_correction, 1.41);
254 CfL *= (1 + WsL * (ar / a_p) * Utility::pow<2>(std::tan(theta)));
259 ar =
libMesh::pi * (pin_diameter + wire_diameter) * wire_diameter / 6.0;
261 a_p = S +
libMesh::pi * Utility::pow<2>(wire_diameter) / 24.0 / std::cos(theta);
263 const Real turbulent_wire_correction =
264 1 + WsT * (ar / a_p) * Utility::pow<2>(std::tan(theta));
265 if (!std::isfinite(turbulent_wire_correction) || turbulent_wire_correction < 0.0)
266 mooseError(
"The exponentiated term in the Cheng-Todreas turbulent wire correction must be "
267 "non-negative and finite for a corner subchannel. Computed ",
268 turbulent_wire_correction,
270 CfT *= std::pow(turbulent_wire_correction, 1.41);
272 CfL *= (1 + WsL * (ar / a_p) * Utility::pow<2>(std::tan(theta)));
276 const Real mL = -1.0;
277 const Real mT = -0.18;
278 auto fL = CfL * std::pow(Re_eff, mL);
279 auto fT = CfT * std::pow(Re_eff, mT);
295 return fL * std::pow((1 - psi), gamma) * (1 - std::pow(psi, lambda)) +
296 fT * std::pow(psi, gamma);
304 const auto Re = friction_args.
Re;
307 const Real Re_eff = std::max(
Re, 1.0);
308 const auto i_ch = friction_args.
i_ch;
310 Real k1L, k2L, k3L, CfL;
311 Real k1T, k2T, k3T, CfT;
317 const auto w = (pin_diameter / 2.0) + (pitch / 2.0) + side_gap;
318 const auto p_over_d = pitch / pin_diameter;
319 const auto w_over_d = w / pin_diameter;
320 const auto ReL = std::pow(10, (p_over_d - 1)) * 320.0;
321 const auto ReT = std::pow(10, 0.7 * (p_over_d - 1)) * 1.0E+4;
323 const auto psi = std::log(Reb / ReL) / std::log(ReT / ReL);
354 CfL = k1L + k2L * (p_over_d - 1) + k3L * Utility::pow<2>((p_over_d - 1));
356 CfT = k1T + k2T * (p_over_d - 1) + k3T * Utility::pow<2>((p_over_d - 1));
379 CfL = k1L + k2L * (w_over_d - 1) + k3L * Utility::pow<2>((w_over_d - 1));
381 CfT = k1T + k2T * (w_over_d - 1) + k3T * Utility::pow<2>((w_over_d - 1));
404 CfL = k1L + k2L * (w_over_d - 1) + k3L * Utility::pow<2>((w_over_d - 1));
406 CfT = k1T + k2T * (w_over_d - 1) + k3T * Utility::pow<2>((w_over_d - 1));
409 const Real mL = -1.0;
410 const Real mT = -0.18;
411 auto fL = CfL * std::pow(Re_eff, mL);
412 auto fT = CfT * std::pow(Re_eff, mT);
428 return fL * std::pow((1 - psi), gamma) * (1 - std::pow(psi, lambda)) +
429 fT * std::pow(psi, gamma);