Friction Factor Closures Verification
These results were obtained with commit f556f2e309c2c9dc9c67005e71c4f175a476cef7
Test Description
This verification case checks the axial friction factor that SCM computes over the laminar, transition, and turbulent regimes for the friction closures in SCM:
SCMFrictionMATRA, for bare pins in a quadrilateral lattice;
SCMFrictionChenTodreas, for bare pins in a quadrilateral lattice and for bare or wire-wrapped pins in a triangular lattice. The triangular-lattice parameterizations are the upgraded Chen-Todreas correlation (UCTD),
friction_model = Upgraded, and the Pacio-Chen-Todreas correlation (PCTD),friction_model = Pacio.
The curves are the friction factor computed by SCM, the ff auxiliary variable, in assemblies with the geometry of existing SCM inputs. The inputs in modules/subchannel/verification/friction_model_verification/friction_model sweep the inlet mass flux up to a bulk Reynolds number of about and report the friction factor and the local Reynolds number of one interior, edge, and corner subchannel. The assemblies are 3 m long and unheated, with a uniform inlet mass flux, and the friction factor is sampled at m, where the flow split is developed; it develops over about 1.5 m. The turbulent exchange of axial momentum is turned off, , so that the developed flow split is set by the friction closure alone. Each mass flux of the sweep is a time step of s of the transient solve. With a time step of 1 s, the time derivative of the axial momentum equation is about 9% of the laminar friction of the wire-wrapped assembly and lowers the laminar flow rate of the edge subchannels by about 12%. The script modules/subchannel/doc/content/media_scripts/verification/friction_model_verification/friction_model/scm_friction_factor_closures.py plots their CSV output. The friction factor is plotted versus the local subchannel Reynolds number, while SCMFrictionChenTodreas selects the laminar, transition, or turbulent regime from the bulk Reynolds number of the assembly. Solid, dashed, and dotted lines denote interior, edge, and corner subchannels. MATRA does not distinguish between subchannel types and is shown as a single line for the interior subchannel.
Results
Quadrilateral lattice, bare pins
The geometry is the PSBT assembly, with pitch mm, pin diameter mm, and side gap mm.

Figure 1: Friction factor of MATRA (black) and Chen-Todreas (red) for bare pins in a quadrilateral lattice.
Triangular lattice, bare pins
The geometry is the 19-pin LBE assembly, with mm, mm, and duct flat-to-flat distance mm. Only UCTD is shown, since PCTD applies only to wire-wrapped pins.
As for the wire-wrapped pins below, the SCM friction factors are compared with the UCTD implementation of the DASSH subchannel code Atz et al. (2021). The script dassh_XX09_SS17.py of the DASSH comparison inputs evaluates the DASSH subchannel friction factors for the same geometry with the DASSH flow split and transition interpolation, over the bundle Reynolds number range of the SCM sweep. The right side of Figure 2 gives the relative difference between the SCM and DASSH UCTD friction factors at the local Reynolds numbers of the SCM sweep. As for the wire-wrapped pins, SCM UCTD and DASSH UCTD agree exactly in the laminar and turbulent regimes and within 0.7% in the transition regime, and the difference comes from the intermittency factor: with the bulk intermittency factor of SCM, the DASSH friction factors agree with SCM within 0.15%. The largest difference is in the corner subchannel, whose laminar flow split of 0.49 is much lower than its turbulent flow split of 0.77, so the DASSH transition bounds of the corner subchannel are the furthest from those of SCM. Table 1 gives the friction factors at the local subchannel Reynolds numbers of Table 3.

Figure 2: Left: friction factor of UCTD in SCM (black) and DASSH (green) for bare pins in a triangular lattice; the DASSH curves hide the SCM curves. Right: relative difference between the SCM and DASSH UCTD friction factors.
Table 1: Friction factor of bare pins in a triangular lattice at local subchannel Reynolds numbers of , , and .
| Subchannel | Closure | |||
|---|---|---|---|---|
| interior | SCM UCTD | 1.1930 | 0.0604 | 0.0334 |
| interior | DASSH UCTD | 1.1930 | 0.0604 | 0.0334 |
| edge | SCM UCTD | 0.9906 | 0.0545 | 0.0314 |
| edge | DASSH UCTD | 0.9906 | 0.0544 | 0.0313 |
| corner | SCM UCTD | 0.9396 | 0.0518 | 0.0289 |
| corner | DASSH UCTD | 0.9396 | 0.0515 | 0.0288 |
tri_bare_flow_split.i gives the developed flow split of the same assembly as tri_wire_flow_split.i below gives for the wire-wrapped pins, at a bulk mass flux of 1275 kg/m-s and the same bulk Reynolds number of . This bulk Reynolds number is above the transition-turbulent boundary of of this geometry, so the flow split is the turbulent UCTD flow split. Table 2 shows that the SCM UCTD flow split agrees with the DASSH UCTD flow split to four digits in the interior and edge subchannels and within 0.04% in the corner subchannel.
Table 2: Developed flow split of bare pins in a triangular lattice, at the outlet of the 3 m assembly and a bulk Reynolds number of .
| Flow split | Interior | Edge | Corner |
|---|---|---|---|
| SCM UCTD | 1.0528 | 0.9757 | 0.7673 |
| DASSH UCTD | 1.0528 | 0.9757 | 0.7676 |
Triangular lattice, wire-wrapped pins
The geometry is the 61-pin EBR-II XX09 assembly, with mm, mm, wire diameter mm, wire lead length mm, and duct flat-to-flat distance mm. For this geometry the laminar UCTD and PCTD curves nearly coincide.
The SCM friction factors are compared with the UCTD implementation of the DASSH subchannel code Atz et al. (2021). DASSH computes the interior, edge, and corner subchannel friction factors in its UCTD flow split and uses the bundle friction factor for the pressure drop. The script dassh_XX09_SS17.py of the DASSH comparison inputs evaluates the DASSH subchannel friction factors for the same geometry with the DASSH flow split and transition interpolation, over the bundle Reynolds number range of the SCM sweep. The right side of Figure 3 gives the relative difference between the SCM and DASSH UCTD friction factors at the local Reynolds numbers of the SCM sweep. DASSH does not implement the PCTD correlations, so PCTD is not compared with DASSH.

Figure 3: Left: friction factor of UCTD (black) and PCTD (red) in SCM and UCTD in DASSH (green) for wire-wrapped pins in a triangular lattice; the DASSH curves hide the SCM UCTD curves. Right: relative difference between the SCM and DASSH UCTD friction factors.
Table 3 gives the friction factors at local subchannel Reynolds numbers of , , and , interpolated in log-log from the curves of Figure 3. The Reynolds numbers avoid the onset of the transition regime near , where the friction factor changes slope sharply and the interpolation between the sampled mass fluxes is not accurate. For both parameterizations and all subchannels, is in the laminar regime and is inside the transition regime, with an intermittency factor of 0.37 to 0.63 based on the bulk Reynolds number; is near the transition-turbulent boundary. SCM UCTD and DASSH UCTD agree exactly in the laminar and turbulent regimes, where both codes evaluate the same correlation at the local Reynolds number, and within 0.6% in the transition regime. With the developed flow, the SCM flow split is the UCTD flow split of DASSH, so a subchannel at a given local Reynolds number is at the same bulk Reynolds number in both codes. The remaining difference, largest at the onset of the transition regime, comes from the intermittency factor: SCM evaluates from the bulk Reynolds number for all subchannels, while DASSH evaluates it for each subchannel from the local Reynolds number between transition bounds scaled by the laminar and turbulent flow splits; with the bulk intermittency factor of SCM, the DASSH friction factors agree with SCM within 0.1%. With , the friction factor changes steeply with the intermittency factor near the onset of the transition regime. PCTD gives up to 11% lower friction factors than UCTD in the transition and turbulent regimes.
Table 3: Friction factor of wire-wrapped pins in a triangular lattice at local subchannel Reynolds numbers of , , and .
| Subchannel | Closure | |||
|---|---|---|---|---|
| interior | SCM UCTD | 0.8511 | 0.0597 | 0.0382 |
| interior | SCM PCTD | 0.8501 | 0.0559 | 0.0351 |
| interior | DASSH UCTD | 0.8511 | 0.0597 | 0.0382 |
| edge | SCM UCTD | 0.9949 | 0.0547 | 0.0322 |
| edge | SCM PCTD | 0.9924 | 0.0536 | 0.0308 |
| edge | DASSH UCTD | 0.9949 | 0.0546 | 0.0322 |
| corner | SCM UCTD | 0.9596 | 0.0545 | 0.0314 |
| corner | SCM PCTD | 0.9555 | 0.0526 | 0.0294 |
| corner | DASSH UCTD | 0.9596 | 0.0544 | 0.0313 |
The friction closure sets the developed flow split, the mass flux of a subchannel divided by the bulk mass flux. tri_wire_flow_split.i solves the same assembly in steady state with the monolithic implicit solver, implicit = true and segregated = false, at a bulk mass flux of 4000 kg/m-s and a bulk Reynolds number of , the bulk Reynolds number of the EBR-II XX09 SHRT-17 steady state below. As in the friction factor sweep, , and the flow split is sampled at the outlet, where the flow is developed. The DASSH UCTD flow split is computed from the subchannel and bundle Reynolds numbers of dassh_tri_wire_out.csv at the same bulk Reynolds number. Table 4 shows that the SCM UCTD flow split agrees with the DASSH UCTD flow split to four digits. Compared with UCTD, PCTD lowers the flow split of the edge and corner subchannels by about 2% and raises that of the interior subchannels by 1.5%.
Table 4: Developed flow split of wire-wrapped pins in a triangular lattice, at the outlet of the 3 m assembly and a bulk Reynolds number of .
| Flow split | Interior | Edge | Corner |
|---|---|---|---|
| SCM UCTD | 0.8874 | 1.2074 | 1.0344 |
| SCM PCTD | 0.9007 | 1.1843 | 1.0169 |
| DASSH UCTD | 0.8874 | 1.2074 | 1.0344 |
Comparison with the PCTD paper
SCM PCTD, friction_model = Pacio and mixing_model = Pacio, is compared with the results shown in Pacio et al. (2022) for two wire-wrapped triangular lattices of its Table 6: the 127-pin MYRRHA bundle of Kennedy et al. (2015), for the bulk friction factor , and the 37-pin bundle of Liang et al. (2020), for the flow split. The flow split is the mass flux of a subchannel type divided by the bulk mass flux. The measured points and the PCTD curves of the paper are read from its Figs. 6 and 7, so they are accurate to about the size of the markers: 0.01 in the flow split and 2% in .
pacio_kennedy.i and pacio_liang.i use the geometry of the paper, with the flat-to-flat distance from Eq. (A.6) of the paper. The wire diameter of Kennedy et al., 1.80 mm, exceeds the pin-to-pin gap, mm, by 0.01 mm, which the mesh generator rejects, so it is reduced to the gap. The inputs share pacio_paper.i and sweep the inlet mass flux with the unheated, 3 m long assembly and the s time steps of the friction factor sweeps, from to . The Liang sweep uses steps of 0.02 decades in the inlet mass flux to resolve the jump of the flow split at the laminar boundary, ; the Kennedy sweep uses steps of 0.1 decades. The fluid is water, and the assemblies are unheated, so the density is nearly uniform and the flow split and depend only on the bulk Reynolds number and the geometry, as in the PCTD model; for a compressible or heated flow they would also depend on the fluid properties. pacio_kennedy_mdot.i and pacio_liang_mdot.i report the mass flow rate and flow area of every subchannel at the outlet, m. The flow split is developed there: in a 6 m long assembly at , the flow split of each type is constant within 0.0003 from m to m for both assemblies. PCTD solves for one flow split per type of subchannel, interior, edge, and corner, with the turbulent mixing between the types given by a correlation, so the flow split of a type in SCM is the sum of the mass flow rates of its subchannels divided by the sum of their flow areas and by the bulk mass flux. SCM resolves every subchannel and mixes across every gap, so the subchannels of one type do not all have the same flow split, and a single subchannel does not represent its type. is calculated from the pressure gradient between m and m, in the developed flow and without gravity, as . , so that the turbulent mixing of axial momentum, which is the mixing term of the PCTD equations, is equal to the enthalpy mixing; does not change the enthalpy mixing.

Figure 4: Flow split of the interior (black), edge (red), and corner (blue) subchannels of the 37-pin assembly of Liang et al. in SCM PCTD (solid), in the PCTD calculation of the paper (dashed), in a lumped PCTD calculation with the local Reynolds number in the transition regime (dotted, PCTD local ), and measured (markers). The dashed lines are the complete curves of Fig. 7 of the paper: the constant laminar level up to , the transition, and the constant turbulent level from .
Table 5 gives the difference between the SCM flow split and the PCTD curve of the paper. In the laminar regime, , SCM gives 0.714, 1.390, and 0.542 for the interior, edge, and corner subchannels, the same as the paper within the reading accuracy. For the flow split is constant, and SCM is within 0.02 of the paper: 0.860, 1.152, and 1.112, against 0.878, 1.133, and 1.100. In the transition regime the interior and edge subchannels agree within 0.05, while the corner subchannel of SCM is up to 0.14 above the paper near to , about 16% of the paper's corner flow split of 0.82 at . The flow split of SCM jumps at , as in the paper: it is laminar at , within 0.003 of the paper, and the corner difference of 0.12 is already present at . SCM evaluates the PCTD correlations as they are written in Pacio et al. (2022). Its results agree with the paper in the laminar regime and differ from it in the transition and turbulent regimes for two reasons:
Laminar regime. SCM and the paper agree, because PCTD has no mixing in the laminar regime.
Transition regime. SCM evaluates the friction factor of Eq. (35) at the local Reynolds number of each subchannel, from the current flow split, as the equation is written; the example calculation of the paper evaluates it with the laminar and turbulent flow splits, computed beforehand. This evaluation is the main source of the difference, up to 0.14 in the corner subchannel. Second, the lumping of PCTD combined with the mixing: PCTD assigns one flow split to all subchannels of a type, while the mixing of SCM acts across every gap of the resolved subchannels and gives the subchannels of one type different flow splits, which contributes up to 0.03.
Turbulent regime. Only the combined effect of the lumping and the mixing remains, a difference of about 0.02.
The three regimes are described below.
Table 5: Difference between the flow split of SCM PCTD and the PCTD curve of the paper for the 37-pin assembly of Liang et al., over bands of the bulk Reynolds number: SCM minus the paper, as an absolute difference of the flow split and as a percentage of the flow split of the paper. The first value is the mean over the SCM points of the band and the value in parentheses is the maximum absolute difference in the band.
| Regime | Interior | Edge | Corner | |
|---|---|---|---|---|
| Laminar | +0.001 (0.002), +0.2% (0.3%) | -0.002 (0.003), -0.2% (0.2%) | +0.001 (0.001), +0.1% (0.2%) | |
| Transition | 700 to 1500 | +0.015 (0.025), +1.9% (3.3%) | -0.033 (0.044), -2.6% (3.4%) | +0.128 (0.137), +15.9% (18.4%) |
| Transition | 1500 to 3000 | -0.002 (0.007), -0.2% (0.9%) | -0.009 (0.019), -0.7% (1.6%) | +0.092 (0.112), +9.6% (12.3%) |
| Transition | 3000 to | -0.014 (0.018), -1.6% (2.1%) | +0.011 (0.019), +1.0% (1.7%) | +0.038 (0.070), +3.7% (6.9%) |
| Turbulent | -0.018 (0.018), -2.0% (2.1%) | +0.019 (0.019), +1.6% (1.7%) | +0.012 (0.012), +1.1% (1.1%) |
Laminar regime. SCM agrees with the laminar curve of the paper within 0.003, inside the reading accuracy of the figure, because PCTD has no mixing in the laminar regime, . The subchannel types are then decoupled, and the laminar flow split follows from the friction constants and the geometry alone, so the agreement checks the friction constants and not the mixing. The laminar example calculation of the paper for Kennedy et al., its Section 6.1.2, is not reproduced: both SCM and a hand calculation with the equations of the paper give 0.917, 1.260, and 0.754 for the interior, edge, and corner subchannels, against 0.931, 1.226, and 0.720 in the paper. The friction constants of the paper are reproduced, so the difference is in the hydraulic diameters used in the paper, whose appendix has typographical errors in the wetted perimeters with wires, Eqs. (A.16) to (A.18).
Transition regime. The differences come from the Reynolds number at which the friction factor of Eq. (35) of Pacio et al. (2022) is evaluated. SCM evaluates both the laminar and the turbulent term at the local Reynolds number of each subchannel, , from the flow split of the current solution. The PCTD calculation of the paper evaluates the laminar term with the laminar flow split and the turbulent term with the turbulent flow split , and , which are computed before the transition regime. The paper states that Eq. (35) uses the local Reynolds number; the use of and is inferred from its example calculation for Kennedy et al. at , its Section 6.1.3, whose subchannel friction factors, 0.1149, 0.0841, and 0.1623, are reproduced to four digits only this way. With the flow split of the transition solution, the corner friction factor of that example is 14% lower, 0.1391. The dotted curves of Figure 4 show the effect for the Liang assembly: a lumped PCTD calculation, which solves Eqs. (8) to (11) of Pacio et al. (2022) for the Liang geometry with Eqs. (35) and (36) evaluated with the flow split of the solution, as in SCM, falls on the SCM curve in the transition regime, and not on the curve of the paper. With the laminar and turbulent flow splits instead, the same calculation reproduces the curve of the paper within 0.01 for the interior and edge subchannels and within 0.03 for the corner subchannel. The transition difference therefore comes mainly from the flow splits at which Eqs. (35) and (36) are evaluated, almost entirely through the friction factor of Eq. (35); for Eq. (36) the effect on the mixing is below 1%, see SCMMixingChenTodreas. SCM differs from the lumped calculation using the local Reynolds number by up to 0.02 for the interior and edge subchannels and up to 0.03 for the corner subchannel over the transition regime; this remaining part is the combined effect of the lumping and the mixing described for the turbulent regime below.
Turbulent regime. The flow split also depends on the exchange of axial momentum between the interior, edge, and corner subchannels, which is the mixing term of the PCTD equations, Eq. (2) of Pacio et al. (2022). Table 6 gives the turbulent flow split of SCM for different values of , which multiplies the mixing parameter in the axial momentum equation; the enthalpy mixing uses without . removes the exchange of axial momentum, so that the flow split is set by the friction closure alone, but it does not remove the enthalpy mixing. , used in the figure, applies unchanged to the axial momentum, as in the PCTD equations. The mixing changes the flow split by up to 0.15, much more than the 0.02 difference from the paper.
Table 6: Turbulent flow split of the 37-pin assembly of Liang et al. at in SCM PCTD for different values of , and in the PCTD calculation of the paper.
| Interior | Edge | Corner | |
|---|---|---|---|
| SCM, | 0.753 | 1.295 | 0.958 |
| SCM, | 0.861 | 1.151 | 1.111 |
| SCM, | 0.893 | 1.114 | 1.100 |
| Paper | 0.878 | 1.133 | 1.100 |
The remaining difference of about 0.02 in the turbulent regime comes from the lumping combined with the mixing; without mixing, the subchannels of a type would all have the same flow split in SCM as well. The dotted lumped curves of Figure 4 meet the curve of the paper, 0.878, 1.132, and 1.101, while SCM is about 0.02 away. In SCM only the interior subchannels next to the edge subchannels exchange momentum with them, so the interior subchannels do not all have the same flow split, while PCTD gives them one value. Table 7 compares SCM with a lumped PCTD calculation for bundles of the Liang geometry with 2 to 9 rings of pins, which covers the range of PCTD up to 217 pins. The lumped calculation is the one of the dotted curves, which reproduces the turbulent flow split of the paper for the 37-pin assembly within 0.001. In the 7-pin bundle all six interior subchannels are equivalent, and SCM agrees with the lumped calculation within 0.002, which also checks the Pacio mixing of SCM. With more rings the interior flow split of SCM spreads over about 0.15 to 0.19, and the difference from the lumped calculation grows with the number of rings, more slowly as the bundle gets larger: at 217 pins it is -0.014 (-1.5%), 0.041 (3.3%), and 0.026 (2.2%) for the interior, edge, and corner subchannels.
Table 7: Turbulent flow split of bundles of the geometry of Liang et al. with 2 to 9 rings of pins in SCM PCTD and in a lumped PCTD calculation, at , and the range of the flow split over the interior subchannels of SCM.
| Pins | SCM (interior / edge / corner) | Lumped PCTD | SCM - lumped | Interior range in SCM |
|---|---|---|---|---|
| 7 | 0.885 / 1.042 / 1.010 | 0.883 / 1.043 / 1.009 | +0.002 / -0.001 / +0.001 | 0.885 |
| 19 | 0.857 / 1.101 / 1.066 | 0.871 / 1.091 / 1.058 | -0.014 / +0.010 / +0.008 | 0.776 to 0.913 |
| 37 | 0.861 / 1.151 / 1.111 | 0.878 / 1.132 / 1.100 | -0.017 / +0.019 / +0.011 | 0.787 to 0.952 |
| 61 | 0.871 / 1.190 / 1.148 | 0.888 / 1.164 / 1.132 | -0.017 / +0.026 / +0.016 | 0.810 to 0.984 |
| 91 | 0.881 / 1.221 / 1.177 | 0.898 / 1.190 / 1.158 | -0.017 / +0.031 / +0.019 | 0.830 to 1.009 |
| 127 | 0.891 / 1.246 / 1.200 | 0.906 / 1.211 / 1.179 | -0.015 / +0.035 / +0.021 | 0.847 to 1.030 |
| 169 | 0.899 / 1.266 / 1.220 | 0.914 / 1.228 / 1.196 | -0.015 / +0.038 / +0.024 | 0.861 to 1.047 |
| 217 | 0.906 / 1.283 / 1.236 | 0.920 / 1.242 / 1.210 | -0.014 / +0.041 / +0.026 | 0.872 to 1.061 |
Compared with the measurements of Liang et al., SCM PCTD agrees better than the PCTD curve of the paper, with a root mean square difference of 0.057 over the 27 measured points, against 0.083 for the curve of the paper. SCM is on average 0.04 above the interior flow split, 0.05 below the edge, and 0.06 below the corner, with root mean square differences of 0.060, 0.048, and 0.061, against 0.065, 0.054, and 0.117 for the curve of the paper. Most of the improvement is in the corner subchannel, in the transition regime, where SCM evaluates the friction factor at the local Reynolds number. The lumped calculation with the local Reynolds number also agrees better with the corner measurements than the curve of the paper, 0.068 against 0.117, but not with the interior and edge measurements, 0.072 and 0.066. The measured points are read from Fig. 7 of the paper and are accurate to about 0.01.

Figure 5: Bulk friction factor of the 127-pin assembly of Kennedy et al. in SCM PCTD (solid), in the PCTD calculation of the paper (dashed), and measured (markers).
Table 8 shows that the SCM bulk friction factor agrees with the PCTD curve of the paper within about 2% over from 700 to , except for up to 5% near the laminar boundary of 700, and reproduces the change of slope at the turbulent boundary of . Compared with the ten measured points of Kennedy et al., SCM is on average 2.6% low, with a root mean square difference of 5.2%. Most of this comes from the point at , which SCM underpredicts by 13%, as does the paper's curve. For the mean difference is -1.4%, and the largest is 7.3%.
Table 8: Bulk friction factor of the 127-pin assembly of Kennedy et al. in SCM PCTD and in the PCTD curve of the paper.
| Paper | SCM | Difference | |
|---|---|---|---|
| 1000 | 0.1062 | 0.1048 | -1.3% |
| 3000 | 0.0530 | 0.0524 | -1.1% |
| 0.0313 | 0.0312 | -0.4% | |
| 0.0258 | 0.0255 | -1.0% |
EBR-II XX09, SHRT-17 steady state
The effect of the closures on the flow and temperature distribution is shown for the SHRT-17 steady state of the EBR-II XX09 assembly in EBR-II, SHRT-17 Validation. XX09_SS17.i runs validation/EBR-II/XX09_SCM_SS17.i with UCTD friction and Chen-Todreas (1986) mixing, mixing_model = 1986 of SCMMixingChenTodreas, or with PCTD friction and mixing via SCMClosures/Chen/friction_model=Pacio and SCMClosures/Chen_Todreas/mixing_model=Pacio, and reports the mass flow rate and temperature of the subchannels of the TTC thermocouples at m. The turbulent exchange of axial momentum uses , the default of the mixing closures, for which the momentum and enthalpy turbulent interchange flow rates are equal (Turbulent momentum transfer). XX09_SCM_SS17.i uses , but has been calibrated only for bare pins in a quadrilateral lattice (Effect of Partial Blockages in Simulated LMFBR Fuel Assemblies), and no calibrated value exists for wire-wrapped pins in a triangular lattice.
dassh_XX09_SS17.txt of the DASSH comparison inputs is a DASSH model of the same case with UCTD friction, flow split, and mixing: the same geometry, inlet temperature, bundle mass flow rate, uniform radial pin power, and axial power shape. As in SCM, the inner duct is adiabatic, and the thimble, the bypass annulus between the inner duct and the guide thimble in the DASSH results of EBR-II, SHRT-17 Validation, is not modeled. The two codes define the same subchannels with the same flow areas, and DASSH orients the hexagonal lattice 30 degrees apart from SCM. Each TTC subchannel of SCM is therefore compared with the DASSH subchannel at the same position after a rotation; both codes sweep the wire-wrap flow in the same direction, so no reflection is needed.
DASSH does not solve a lateral momentum equation, so its mass flow rate is uniform over each type of subchannel and follows the UCTD flow split. The SCM mass flow rate of the interior subchannels is 3% to 8% higher than DASSH, most next to the edge subchannels, and the SCM edge subchannels carry 6% less flow. Table 9 gives the flow split of both codes. The SCM flow is still developing at the TTC height: XX09_SCM_SS17.i imposes a uniform inlet mass flux at the start of the heated length, and the flow ratio of the interior subchannels decreases from 1.0 at the inlet to 0.92 at m and 0.90 at the outlet, toward the UCTD value of 0.887 that DASSH applies over the whole length. scales only the turbulent exchange of axial momentum and does not enter the energy equation; with a negligible , the flow of the interior subchannels next to the edge subchannels decreases from 8% to 1.4% above DASSH, while the flow of the other interior subchannels changes by less than 0.5%. The DASSH temperature is up to 15 K higher than SCM UCTD in the interior and 14 K lower in the corner subchannel of TTC-35. Most of the interior difference comes from the developing flow in SCM, which gives the interior subchannels more flow than DASSH over the heated length. With a 1 m unheated entry length upstream of the heated length (unheated_length_entry = 1.0 with 132 axial cells), the SCM flow is developed at the start of the heated length and the SCM temperature of the central TTC subchannels, TTC-30 and TTC-31, agrees with DASSH within 1 K. The thermal mixing coefficients are the same in both codes: the UCTD mixing of DASSH uses the eddy diffusivity and swirl velocity of Chen-Todreas (1986), and only its regime boundaries differ, which does not matter at this turbulent Reynolds number. The remaining difference, about 10 K at the subchannels next to the edge subchannels and in the corner subchannel, comes from the larger SCM flow next to the edge subchannels and from the treatment of the peripheral mixing and sweep flow in the two codes. PCTD changes the SCM solution mostly through the Pacio mixing at the center-edge and edge-corner gaps, which flattens the temperature profile: compared with UCTD, the interior subchannels carry 1.2% to 4.7% more flow and are up to 14 K cooler, most next to the edge subchannels, and the corner subchannel of TTC-35 is 11 K hotter.
Table 9: Average velocity of the interior, edge, and corner subchannels divided by the bundle average velocity of EBR-II XX09, SHRT-17 steady state, at the bundle Reynolds number of about . The SCM values are at m, where the SCM flow is still developing from the uniform inlet mass flux.
| Flow split | Interior | Edge | Corner |
|---|---|---|---|
| DASSH CTD | 0.975 | 1.060 | 0.855 |
| DASSH UCTD | 0.887 | 1.207 | 1.034 |
| SCM UCTD | 0.929 | 1.130 | 1.029 |
The temperature is also compared with the published DASSH results of DASSH Example-3 (TTC results), which are the DASSH results of EBR-II, SHRT-17 Validation (validation/EBR-II/TTC_DASSH.csv). Example-3 models the thimble and uses the Chen-Todreas (1986) (CTD) friction and flow split, the MIT (Chiu-Rohsenow-Todreas) eddy diffusivity and swirl velocity mixing correlations, and a quadratic axial power shape in the 59 fueled pins of XX09. Running dassh_XX09_SS17.txt with the thimble model in its comments and the correlations, duct heat transfer parameters, and pin power of Example-3 reproduces the published temperatures within 1.5 K. The flow split sets most of the difference between the two DASSH results: with the thimble model, CTD instead of UCTD friction and flow split lowers the DASSH temperature of the interior subchannels by about 19 K. Table 10 compares all results with the measured TTC temperatures of EBR-II, SHRT-17 Validation (validation/EBR-II/TTC_EXP.csv). All results overpredict the interior temperature, and SCM PCTD overpredicts the temperature of the corner subchannel of TTC-35 by 21 K. All results use a uniform radial pin power and therefore give a symmetric profile, while the measured profile is asymmetric and peaks at TTC-31.
Table 10: Subchannel temperature in K at the TTC thermocouples of EBR-II XX09, SHRT-17 steady state, m, and its error against the experiment over the nine thermocouples. The published DASSH results use the CTD friction and flow split and model the thimble.
| Thermocouple | SCM UCTD | SCM PCTD | DASSH UCTD | DASSH CTD, published | Experiment |
|---|---|---|---|---|---|
| TTC-27 | 775.7 | 762.3 | 784.4 | 765.0 | 761.1 |
| TTC-28 | 816.6 | 808.9 | 831.1 | 805.9 | 792.5 |
| TTC-29 | 827.1 | 824.2 | 840.4 | 816.9 | 800.2 |
| TTC-30 | 828.1 | 826.3 | 841.4 | 818.9 | 805.9 |
| TTC-31 | 828.1 | 826.3 | 841.4 | 819.0 | 813.9 |
| TTC-32 | 827.1 | 824.1 | 840.4 | 817.1 | 810.6 |
| TTC-33 | 816.5 | 808.7 | 831.0 | 807.1 | 811.6 |
| TTC-34 | 774.9 | 761.0 | 784.0 | 770.0 | 785.0 |
| TTC-35 | 738.5 | 749.3 | 725.0 | 722.4 | 728.2 |
| Mean error | 13.8 | 9.1 | 23.4 | 3.7 | | |
| Root mean square error | 17.4 | 17.1 | 27.8 | 10.5 | | |

Figure 6: Subchannel mass flow rate along the TTC traverse of EBR-II XX09, SHRT-17 steady state.

Figure 7: Subchannel temperature along the TTC traverse of EBR-II XX09, SHRT-17 steady state. The published DASSH results use the CTD friction and flow split and model the thimble, and the experiment is the measured TTC temperature.
Input files
The three geometry inputs include a shared file with the mass flux sweep and postprocessors:
# Shared part of the friction factor sampling inputs. Each time step solves the assembly at a
# larger inlet mass flux, and the friction factor and Reynolds number of one interior, edge, and
# corner subchannel are reported. The including input defines the mesh, the problem type, the
# friction closure, the exponent G_exp0 of the initial inlet mass flux, and the center, edge, and
# corner subchannel indices.
T_in = 359.15 # K
P_out = 4.923e6 # Pa
# Inlet mass flux 10^(G_exp0 + 0.1 n) [kg/m^2-s] at step n. The bulk Reynolds number is about 1 at
# n = 1 and grows by 0.1 decades per step, so 56 steps stop the sweep just below the upper limit
# Re = 3e5 of the Pacio-Chen-Todreas applicability range
G_exp_rate = 0.1
# Each sweep step is a time step of the transient solve. The time derivative of the axial momentum
# equation, about dz (mdot - mdot_old) / dt, is about 9% of the laminar friction of the wire-wrapped
# assembly for dt = 1 s and skews the laminar flow split, so each step lasts 1e4 s, which makes it
# negligible
dt_step = 1e4 # s
# The inlet mass flux is uniform, and the flow split develops over about 1.5 m, so the friction
# factor is sampled near the outlet of the 3 m assembly, where the flow is developed. The closure
# at the outlet node of a cell uses the Reynolds number at the inlet node, so the Reynolds number
# is sampled one cell (0.1 m) below the friction factor
z_Re = 2.8
z_ff = 2.9
[FluidProperties<<<{"href": "../../../syntax/FluidProperties/index.html"}>>>]
[water]
type = Water97FluidProperties<<<{"description": "Fluid properties for water and steam (H2O) using IAPWS-IF97", "href": "../../../source/fluidproperties/Water97FluidProperties.html"}>>>
[]
[]
[SubChannel]
fp = water
n_blocks = 1
P_out = ${P_out}
compute_density = true
compute_viscosity = true
compute_power = false
full_output = true
mixing_closure = 'constant_beta'
pin_HTC_closure = 'Dittus-Boelter'
[]
[SCMClosures<<<{"href": "../../../syntax/SCMClosures/index.html"}>>>]
[Chen]
type = SCMFrictionChenTodreas<<<{"description": "Class that computes the axial friction factor using the Chen-Todreas correlations.", "href": "../../../source/scmclosures/SCMFrictionChenTodreas.html"}>>>
[]
[constant_beta]
type = SCMMixingConstantBeta<<<{"description": "Class that models the turbulent mixing coefficient beta as a user defined constant.", "href": "../../../source/scmclosures/SCMMixingConstantBeta.html"}>>>
beta<<<{"description": "Turbulent mixing parameter [-]."}>>> = 0.006
# No turbulent exchange of axial momentum, so the developed flow split is set by the friction
# closure alone
CT<<<{"description": "Turbulent momentum, modeling parameter [-]."}>>> = 0.0
[]
[Dittus-Boelter]
type = SCMHTCDittusBoelter<<<{"description": "Class that computes the convective heat transfer coefficient using the Dittus Boelter correlation.", "href": "../../../source/scmclosures/SCMHTCDittusBoelter.html"}>>>
[]
[]
[ICs<<<{"href": "../../../syntax/ICs/index.html"}>>>]
[T_ic]
type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = T
value<<<{"description": "The value to be set in IC"}>>> = ${T_in}
[]
[P_ic]
type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = P
value<<<{"description": "The value to be set in IC"}>>> = 0.0
[]
[DP_ic]
type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = DP
value<<<{"description": "The value to be set in IC"}>>> = 0.0
[]
[rho_ic]
type = RhoFromPressureTemperatureIC<<<{"description": "Computes the density from pressure and temperature.", "href": "../../../source/ics/RhoFromPressureTemperatureIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = rho
p<<<{"description": "The pressure [Pa]"}>>> = ${P_out}
T<<<{"description": "The temperature [K]"}>>> = T
fp<<<{"description": "The name of fluid properties user object."}>>> = water
[]
[h_ic]
type = SpecificEnthalpyFromPressureTemperatureIC<<<{"description": "Computes the specific enthalpy from pressure and temperature.", "href": "../../../source/ics/SpecificEnthalpyFromPressureTemperatureIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = h
p<<<{"description": "The pressure [Pa]"}>>> = ${P_out}
T<<<{"description": "The temperature [K]"}>>> = T
fp<<<{"description": "The name of fluid properties user object."}>>> = water
[]
[mu_ic]
type = ViscosityIC<<<{"description": "Computes viscosity from specified pressure and temperature", "href": "../../../source/ics/ViscosityIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = mu
p<<<{"description": "Pressure [Pa]"}>>> = ${P_out}
T<<<{"description": "Temperature [K]"}>>> = T
fp<<<{"description": "Fluid properties user object name"}>>> = water
[]
[mdot_ic]
type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = mdot
value<<<{"description": "The value to be set in IC"}>>> = 0.0
[]
[]
[Functions<<<{"href": "../../../syntax/Functions/index.html"}>>>]
[mass_flux_fn]
type = ParsedFunction<<<{"description": "Function created by parsing a string", "href": "../../../source/functions/MooseParsedFunction.html"}>>>
expression<<<{"description": "The user defined function."}>>> = '10^(${G_exp0} + ${G_exp_rate} * t / ${dt_step})'
[]
[]
[AuxKernels<<<{"href": "../../../syntax/AuxKernels/index.html"}>>>]
[T_in_bc]
type = ConstantAux<<<{"description": "Creates a constant field in the domain.", "href": "../../../source/auxkernels/ConstantAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = T
boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = inlet
value<<<{"description": "Some constant value that can be read from the input file"}>>> = ${T_in}
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'timestep_begin'
[]
[mdot_in_bc]
type = SCMMassFlowRateAux<<<{"description": "Computes mass flow rate from specified mass flux and subchannel cross-sectional area. Can read either PostprocessorValue or Real", "href": "../../../source/auxkernels/SCMMassFlowRateAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = mdot
boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = inlet
area<<<{"description": "Cross sectional area [m^2]"}>>> = S
mass_flux<<<{"description": "The postprocessor or Real to use for the value of mass_flux"}>>> = mass_flux
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'timestep_begin'
[]
[]
[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
[mass_flux]
type = FunctionValuePostprocessor<<<{"description": "Computes the value of a supplied function at a single point (scalable)", "href": "../../../source/postprocessors/FunctionValuePostprocessor.html"}>>>
function<<<{"description": "The function which supplies the postprocessor value."}>>> = mass_flux_fn
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'initial timestep_begin'
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[ff_center]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = ff
index<<<{"description": "Index of subchannel"}>>> = ${center}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_ff}
[]
[ff_edge]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = ff
index<<<{"description": "Index of subchannel"}>>> = ${edge}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_ff}
[]
[ff_corner]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = ff
index<<<{"description": "Index of subchannel"}>>> = ${corner}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_ff}
[]
[mdot_center]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = mdot
index<<<{"description": "Index of subchannel"}>>> = ${center}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_Re}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[mdot_edge]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = mdot
index<<<{"description": "Index of subchannel"}>>> = ${edge}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_Re}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[mdot_corner]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = mdot
index<<<{"description": "Index of subchannel"}>>> = ${corner}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_Re}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[w_perim_center]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = w_perim
index<<<{"description": "Index of subchannel"}>>> = ${center}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_Re}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[w_perim_edge]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = w_perim
index<<<{"description": "Index of subchannel"}>>> = ${edge}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_Re}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[w_perim_corner]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = w_perim
index<<<{"description": "Index of subchannel"}>>> = ${corner}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_Re}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[mu_center]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = mu
index<<<{"description": "Index of subchannel"}>>> = ${center}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_Re}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[mu_edge]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = mu
index<<<{"description": "Index of subchannel"}>>> = ${edge}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_Re}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[mu_corner]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = mu
index<<<{"description": "Index of subchannel"}>>> = ${corner}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_Re}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
# Subchannel Reynolds number (mdot / S) Dh / mu with Dh = 4 S / w_perim, as in the solver
[Re_center]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = '4 * mdot_center / (w_perim_center * mu_center)'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'mdot_center w_perim_center mu_center'
[]
[Re_edge]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = '4 * mdot_edge / (w_perim_edge * mu_edge)'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'mdot_edge w_perim_edge mu_edge'
[]
[Re_corner]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = '4 * mdot_corner / (w_perim_corner * mu_corner)'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'mdot_corner w_perim_corner mu_corner'
[]
[]
[Outputs<<<{"href": "../../../syntax/Outputs/index.html"}>>>]
csv<<<{"description": "Output the scalar variable and postprocessors to a *.csv file using the default CSV output."}>>> = true
[]
[Executioner<<<{"href": "../../../syntax/Executioner/index.html"}>>>]
type = Transient
start_time = 0.0
end_time = '${fparse 56 * dt_step}'
dt = ${dt_step}
[](modules/subchannel/verification/friction_model_verification/friction_model/friction_factor_sampling.i)Quadrilateral lattice, bare pins:
# Friction factor sampling for the PSBT bare-pin square lattice
G_exp0 = -1.6
# Subchannel indices of an interior, an edge, and a corner subchannel
center = 7
edge = 1
corner = 0
!include friction_factor_sampling.i
[QuadSubChannelMesh]
[sub_channel]
type = SCMQuadAssemblyMeshGenerator
nx = 6
ny = 6
n_cells = 30
pitch = 0.0126
pin_diameter = 0.00950
side_gap = 0.00095
heated_length = 3
spacer_z = '0.0'
spacer_k = '0.0'
[]
[]
[SubChannel]
type = QuadSubChannel1PhaseProblem
friction_closure = 'MATRA'
[]
[SCMClosures]
[MATRA]
type = SCMFrictionMATRA
[]
[]
(modules/subchannel/verification/friction_model_verification/friction_model/quad_bare.i)Triangular lattice, bare pins:
# Friction factor sampling for the 19-pin LBE bare-pin triangular lattice
G_exp0 = -1.6
# Subchannel indices of an interior, an edge, and a corner subchannel
center = 0
edge = 24
corner = 25
!include friction_factor_sampling.i
[TriSubChannelMesh]
[subchannel]
type = SCMTriAssemblyMeshGenerator
nrings = 3
n_cells = 30
flat_to_flat = 0.05319936
heated_length = 3
pin_diameter = 0.0082
pitch = 0.01148
dwire = 0.0
hwire = 0.0
spacer_z = '0.0'
spacer_k = '0.0'
[]
[]
[SubChannel]
type = TriSubChannel1PhaseProblem
friction_closure = 'Chen'
[]
(modules/subchannel/verification/friction_model_verification/friction_model/tri_bare.i)Triangular lattice, wire-wrapped pins:
# Friction factor sampling for the 61-pin EBR-II XX09 wire-wrapped triangular lattice
G_exp0 = -1.1
# Subchannel indices of an interior, an edge, and a corner subchannel
center = 0
edge = 100
corner = 97
!include friction_factor_sampling.i
[TriSubChannelMesh]
[subchannel]
type = SCMTriAssemblyMeshGenerator
nrings = 5
n_cells = 30
flat_to_flat = 0.0464
heated_length = 3
pin_diameter = 0.004419
pitch = 0.005664
dwire = 0.001244
hwire = 0.1524
spacer_z = '0.0'
spacer_k = '0.0'
[]
[]
[SubChannel]
type = TriSubChannel1PhaseProblem
friction_closure = 'Chen'
[]
(modules/subchannel/verification/friction_model_verification/friction_model/tri_wire.i)Triangular lattice, bare pins, developed flow split in steady state:
# Developed flow split of the 19-pin LBE bare-pin triangular lattice of tri_bare.i. The assembly is
# solved in steady state at one inlet mass flux, which gives a bulk Reynolds number of about 3.3e4,
# the same as tri_wire_flow_split.i. The flow split, the mass flux of a subchannel divided by the
# bulk mass flux, of one interior, edge, and corner subchannel is reported at the outlet.
T_in = 359.15 # K
P_out = 4.923e6 # Pa
# Bulk mass flux that gives a bulk Reynolds number of about 3.3e4 with the bulk hydraulic diameter
# of this assembly, about 8.6 mm, and the inlet viscosity of tri_wire_flow_split.i
mass_flux = 1275 # kg/m^2-s
# The inlet mass flux is uniform, and the flow split develops over about 1.5 m, so it is sampled at
# the outlet of the 3 m assembly, where the flow is developed
z_out = 3.0
# Subchannel indices of an interior, an edge, and a corner subchannel, as in tri_bare.i
center = 0
edge = 24
corner = 25
# Number of interior, edge, and corner subchannels of the 3-ring assembly: 6 (nrings - 1)^2,
# 6 (nrings - 1), and 6
n_center = 24
n_edge = 12
n_corner = 6
[TriSubChannelMesh]
[subchannel]
type = SCMTriAssemblyMeshGenerator
nrings = 3
n_cells = 30
flat_to_flat = 0.05319936
heated_length = 3
pin_diameter = 0.0082
pitch = 0.01148
dwire = 0.0
hwire = 0.0
spacer_z = '0.0'
spacer_k = '0.0'
[]
[]
[FluidProperties<<<{"href": "../../../syntax/FluidProperties/index.html"}>>>]
[water]
type = Water97FluidProperties<<<{"description": "Fluid properties for water and steam (H2O) using IAPWS-IF97", "href": "../../../source/fluidproperties/Water97FluidProperties.html"}>>>
[]
[]
[SubChannel]
type = TriSubChannel1PhaseProblem
fp = water
n_blocks = 1
P_out = ${P_out}
compute_density = true
compute_viscosity = true
compute_power = false
full_output = true
# Monolithic implicit solver. The explicit solver converges the developed turbulent flow split
# only to about 1% with the default tolerances.
implicit = true
segregated = false
P_tol = 1e-8
T_tol = 1e-8
rtol = 1e-10
atol = 1e-10
friction_closure = 'Chen'
mixing_closure = 'constant_beta'
pin_HTC_closure = 'Dittus-Boelter'
[]
[SCMClosures<<<{"href": "../../../syntax/SCMClosures/index.html"}>>>]
[Chen]
type = SCMFrictionChenTodreas<<<{"description": "Class that computes the axial friction factor using the Chen-Todreas correlations.", "href": "../../../source/scmclosures/SCMFrictionChenTodreas.html"}>>>
[]
[constant_beta]
type = SCMMixingConstantBeta<<<{"description": "Class that models the turbulent mixing coefficient beta as a user defined constant.", "href": "../../../source/scmclosures/SCMMixingConstantBeta.html"}>>>
beta<<<{"description": "Turbulent mixing parameter [-]."}>>> = 0.006
# No turbulent exchange of axial momentum, so the developed flow split is set by the friction
# closure alone
CT<<<{"description": "Turbulent momentum, modeling parameter [-]."}>>> = 0.0
[]
[Dittus-Boelter]
type = SCMHTCDittusBoelter<<<{"description": "Class that computes the convective heat transfer coefficient using the Dittus Boelter correlation.", "href": "../../../source/scmclosures/SCMHTCDittusBoelter.html"}>>>
[]
[]
[ICs<<<{"href": "../../../syntax/ICs/index.html"}>>>]
[T_ic]
type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = T
value<<<{"description": "The value to be set in IC"}>>> = ${T_in}
[]
[P_ic]
type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = P
value<<<{"description": "The value to be set in IC"}>>> = 0.0
[]
[DP_ic]
type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = DP
value<<<{"description": "The value to be set in IC"}>>> = 0.0
[]
[rho_ic]
type = RhoFromPressureTemperatureIC<<<{"description": "Computes the density from pressure and temperature.", "href": "../../../source/ics/RhoFromPressureTemperatureIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = rho
p<<<{"description": "The pressure [Pa]"}>>> = ${P_out}
T<<<{"description": "The temperature [K]"}>>> = T
fp<<<{"description": "The name of fluid properties user object."}>>> = water
[]
[h_ic]
type = SpecificEnthalpyFromPressureTemperatureIC<<<{"description": "Computes the specific enthalpy from pressure and temperature.", "href": "../../../source/ics/SpecificEnthalpyFromPressureTemperatureIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = h
p<<<{"description": "The pressure [Pa]"}>>> = ${P_out}
T<<<{"description": "The temperature [K]"}>>> = T
fp<<<{"description": "The name of fluid properties user object."}>>> = water
[]
[mu_ic]
type = ViscosityIC<<<{"description": "Computes viscosity from specified pressure and temperature", "href": "../../../source/ics/ViscosityIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = mu
p<<<{"description": "Pressure [Pa]"}>>> = ${P_out}
T<<<{"description": "Temperature [K]"}>>> = T
fp<<<{"description": "Fluid properties user object name"}>>> = water
[]
[mdot_ic]
type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = mdot
value<<<{"description": "The value to be set in IC"}>>> = 0.0
[]
[]
[AuxKernels<<<{"href": "../../../syntax/AuxKernels/index.html"}>>>]
[T_in_bc]
type = ConstantAux<<<{"description": "Creates a constant field in the domain.", "href": "../../../source/auxkernels/ConstantAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = T
boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = inlet
value<<<{"description": "Some constant value that can be read from the input file"}>>> = ${T_in}
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'timestep_begin'
[]
[mdot_in_bc]
type = SCMMassFlowRateAux<<<{"description": "Computes mass flow rate from specified mass flux and subchannel cross-sectional area. Can read either PostprocessorValue or Real", "href": "../../../source/auxkernels/SCMMassFlowRateAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = mdot
boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = inlet
area<<<{"description": "Cross sectional area [m^2]"}>>> = S
mass_flux<<<{"description": "The postprocessor or Real to use for the value of mass_flux"}>>> = ${mass_flux}
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'timestep_begin'
[]
[]
[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
[mdot_center]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = mdot
index<<<{"description": "Index of subchannel"}>>> = ${center}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_out}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[mdot_edge]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = mdot
index<<<{"description": "Index of subchannel"}>>> = ${edge}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_out}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[mdot_corner]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = mdot
index<<<{"description": "Index of subchannel"}>>> = ${corner}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_out}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[S_center]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = S
index<<<{"description": "Index of subchannel"}>>> = ${center}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_out}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[S_edge]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = S
index<<<{"description": "Index of subchannel"}>>> = ${edge}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_out}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[S_corner]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = S
index<<<{"description": "Index of subchannel"}>>> = ${corner}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_out}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[w_perim_center]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = w_perim
index<<<{"description": "Index of subchannel"}>>> = ${center}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_out}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[w_perim_edge]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = w_perim
index<<<{"description": "Index of subchannel"}>>> = ${edge}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_out}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[w_perim_corner]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = w_perim
index<<<{"description": "Index of subchannel"}>>> = ${corner}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_out}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
# The solver evaluates the bulk Reynolds number with the inlet viscosity
[mu_in]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = mu
index<<<{"description": "Index of subchannel"}>>> = ${center}
height<<<{"description": "Axial location of point [m]"}>>> = 0.0
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
# Subchannel hydraulic diameters Dh = 4 S / w_perim, as in the solver
[Dh_center]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = '4 * S_center / w_perim_center'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'S_center w_perim_center'
[]
[Dh_edge]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = '4 * S_edge / w_perim_edge'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'S_edge w_perim_edge'
[]
[Dh_corner]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = '4 * S_corner / w_perim_corner'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'S_corner w_perim_corner'
[]
# Bulk hydraulic diameter, 4 times the total flow area over the total wetted perimeter
[Dh_bulk]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = '4 * (${n_center} * S_center + ${n_edge} * S_edge + ${n_corner} * S_corner)
/ (${n_center} * w_perim_center + ${n_edge} * w_perim_edge
+ ${n_corner} * w_perim_corner)'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'S_center S_edge S_corner w_perim_center w_perim_edge w_perim_corner'
[]
[Re_bulk]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = '${mass_flux} * Dh_bulk / mu_in'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'Dh_bulk mu_in'
[]
# Flow split, the subchannel mass flux divided by the bulk mass flux
[X_center]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = 'mdot_center / (S_center * ${mass_flux})'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'mdot_center S_center'
[]
[X_edge]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = 'mdot_edge / (S_edge * ${mass_flux})'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'mdot_edge S_edge'
[]
[X_corner]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = 'mdot_corner / (S_corner * ${mass_flux})'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'mdot_corner S_corner'
[]
[]
[Outputs<<<{"href": "../../../syntax/Outputs/index.html"}>>>]
csv<<<{"description": "Output the scalar variable and postprocessors to a *.csv file using the default CSV output."}>>> = true
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = final
[]
[Executioner<<<{"href": "../../../syntax/Executioner/index.html"}>>>]
type = Steady
[](modules/subchannel/verification/friction_model_verification/friction_model/tri_bare_flow_split.i)Triangular lattice, wire-wrapped pins, developed flow split in steady state:
# Developed flow split of the 61-pin EBR-II XX09 wire-wrapped triangular lattice of tri_wire.i.
# The assembly is solved in steady state at one inlet mass flux, which gives a bulk Reynolds number
# of about 3.3e4, the bulk Reynolds number of the EBR-II XX09 SHRT-17 steady state. The flow split,
# the mass flux of a subchannel divided by the bulk mass flux, of one interior, edge, and corner
# subchannel is reported at the outlet.
T_in = 359.15 # K
P_out = 4.923e6 # Pa
# Bulk mass flux that gives a bulk Reynolds number of about 3.3e4
mass_flux = 4000 # kg/m^2-s
# The inlet mass flux is uniform, and the flow split develops over about 1.5 m, so it is sampled at
# the outlet of the 3 m assembly, where the flow is developed
z_out = 3.0
# Subchannel indices of an interior, an edge, and a corner subchannel
center = 0
edge = 100
corner = 97
# Number of interior, edge, and corner subchannels of the 5-ring assembly: 6 (nrings - 1)^2,
# 6 (nrings - 1), and 6
n_center = 96
n_edge = 24
n_corner = 6
[TriSubChannelMesh]
[subchannel]
type = SCMTriAssemblyMeshGenerator
nrings = 5
n_cells = 30
flat_to_flat = 0.0464
heated_length = 3
pin_diameter = 0.004419
pitch = 0.005664
dwire = 0.001244
hwire = 0.1524
spacer_z = '0.0'
spacer_k = '0.0'
[]
[]
[FluidProperties<<<{"href": "../../../syntax/FluidProperties/index.html"}>>>]
[water]
type = Water97FluidProperties<<<{"description": "Fluid properties for water and steam (H2O) using IAPWS-IF97", "href": "../../../source/fluidproperties/Water97FluidProperties.html"}>>>
[]
[]
[SubChannel]
type = TriSubChannel1PhaseProblem
fp = water
n_blocks = 1
P_out = ${P_out}
compute_density = true
compute_viscosity = true
compute_power = false
full_output = true
# Monolithic implicit solver. The explicit solver converges the developed turbulent flow split
# only to about 1% with the default tolerances.
implicit = true
segregated = false
P_tol = 1e-8
T_tol = 1e-8
rtol = 1e-10
atol = 1e-10
friction_closure = 'Chen'
mixing_closure = 'constant_beta'
pin_HTC_closure = 'Dittus-Boelter'
[]
[SCMClosures<<<{"href": "../../../syntax/SCMClosures/index.html"}>>>]
[Chen]
type = SCMFrictionChenTodreas<<<{"description": "Class that computes the axial friction factor using the Chen-Todreas correlations.", "href": "../../../source/scmclosures/SCMFrictionChenTodreas.html"}>>>
[]
[constant_beta]
type = SCMMixingConstantBeta<<<{"description": "Class that models the turbulent mixing coefficient beta as a user defined constant.", "href": "../../../source/scmclosures/SCMMixingConstantBeta.html"}>>>
beta<<<{"description": "Turbulent mixing parameter [-]."}>>> = 0.006
# No turbulent exchange of axial momentum, so the developed flow split is set by the friction
# closure alone
CT<<<{"description": "Turbulent momentum, modeling parameter [-]."}>>> = 0.0
[]
[Dittus-Boelter]
type = SCMHTCDittusBoelter<<<{"description": "Class that computes the convective heat transfer coefficient using the Dittus Boelter correlation.", "href": "../../../source/scmclosures/SCMHTCDittusBoelter.html"}>>>
[]
[]
[ICs<<<{"href": "../../../syntax/ICs/index.html"}>>>]
[T_ic]
type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = T
value<<<{"description": "The value to be set in IC"}>>> = ${T_in}
[]
[P_ic]
type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = P
value<<<{"description": "The value to be set in IC"}>>> = 0.0
[]
[DP_ic]
type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = DP
value<<<{"description": "The value to be set in IC"}>>> = 0.0
[]
[rho_ic]
type = RhoFromPressureTemperatureIC<<<{"description": "Computes the density from pressure and temperature.", "href": "../../../source/ics/RhoFromPressureTemperatureIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = rho
p<<<{"description": "The pressure [Pa]"}>>> = ${P_out}
T<<<{"description": "The temperature [K]"}>>> = T
fp<<<{"description": "The name of fluid properties user object."}>>> = water
[]
[h_ic]
type = SpecificEnthalpyFromPressureTemperatureIC<<<{"description": "Computes the specific enthalpy from pressure and temperature.", "href": "../../../source/ics/SpecificEnthalpyFromPressureTemperatureIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = h
p<<<{"description": "The pressure [Pa]"}>>> = ${P_out}
T<<<{"description": "The temperature [K]"}>>> = T
fp<<<{"description": "The name of fluid properties user object."}>>> = water
[]
[mu_ic]
type = ViscosityIC<<<{"description": "Computes viscosity from specified pressure and temperature", "href": "../../../source/ics/ViscosityIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = mu
p<<<{"description": "Pressure [Pa]"}>>> = ${P_out}
T<<<{"description": "Temperature [K]"}>>> = T
fp<<<{"description": "Fluid properties user object name"}>>> = water
[]
[mdot_ic]
type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = mdot
value<<<{"description": "The value to be set in IC"}>>> = 0.0
[]
[]
[AuxKernels<<<{"href": "../../../syntax/AuxKernels/index.html"}>>>]
[T_in_bc]
type = ConstantAux<<<{"description": "Creates a constant field in the domain.", "href": "../../../source/auxkernels/ConstantAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = T
boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = inlet
value<<<{"description": "Some constant value that can be read from the input file"}>>> = ${T_in}
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'timestep_begin'
[]
[mdot_in_bc]
type = SCMMassFlowRateAux<<<{"description": "Computes mass flow rate from specified mass flux and subchannel cross-sectional area. Can read either PostprocessorValue or Real", "href": "../../../source/auxkernels/SCMMassFlowRateAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = mdot
boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = inlet
area<<<{"description": "Cross sectional area [m^2]"}>>> = S
mass_flux<<<{"description": "The postprocessor or Real to use for the value of mass_flux"}>>> = ${mass_flux}
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'timestep_begin'
[]
[]
[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
[mdot_center]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = mdot
index<<<{"description": "Index of subchannel"}>>> = ${center}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_out}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[mdot_edge]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = mdot
index<<<{"description": "Index of subchannel"}>>> = ${edge}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_out}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[mdot_corner]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = mdot
index<<<{"description": "Index of subchannel"}>>> = ${corner}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_out}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[S_center]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = S
index<<<{"description": "Index of subchannel"}>>> = ${center}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_out}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[S_edge]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = S
index<<<{"description": "Index of subchannel"}>>> = ${edge}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_out}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[S_corner]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = S
index<<<{"description": "Index of subchannel"}>>> = ${corner}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_out}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[w_perim_center]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = w_perim
index<<<{"description": "Index of subchannel"}>>> = ${center}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_out}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[w_perim_edge]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = w_perim
index<<<{"description": "Index of subchannel"}>>> = ${edge}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_out}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[w_perim_corner]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = w_perim
index<<<{"description": "Index of subchannel"}>>> = ${corner}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_out}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
# The solver evaluates the bulk Reynolds number with the inlet viscosity
[mu_in]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = mu
index<<<{"description": "Index of subchannel"}>>> = ${center}
height<<<{"description": "Axial location of point [m]"}>>> = 0.0
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
# Subchannel hydraulic diameters Dh = 4 S / w_perim, as in the solver
[Dh_center]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = '4 * S_center / w_perim_center'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'S_center w_perim_center'
[]
[Dh_edge]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = '4 * S_edge / w_perim_edge'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'S_edge w_perim_edge'
[]
[Dh_corner]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = '4 * S_corner / w_perim_corner'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'S_corner w_perim_corner'
[]
# Bulk hydraulic diameter, 4 times the total flow area over the total wetted perimeter
[Dh_bulk]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = '4 * (${n_center} * S_center + ${n_edge} * S_edge + ${n_corner} * S_corner)
/ (${n_center} * w_perim_center + ${n_edge} * w_perim_edge
+ ${n_corner} * w_perim_corner)'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'S_center S_edge S_corner w_perim_center w_perim_edge w_perim_corner'
[]
[Re_bulk]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = '${mass_flux} * Dh_bulk / mu_in'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'Dh_bulk mu_in'
[]
# Flow split, the subchannel mass flux divided by the bulk mass flux
[X_center]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = 'mdot_center / (S_center * ${mass_flux})'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'mdot_center S_center'
[]
[X_edge]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = 'mdot_edge / (S_edge * ${mass_flux})'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'mdot_edge S_edge'
[]
[X_corner]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = 'mdot_corner / (S_corner * ${mass_flux})'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'mdot_corner S_corner'
[]
[]
[Outputs<<<{"href": "../../../syntax/Outputs/index.html"}>>>]
csv<<<{"description": "Output the scalar variable and postprocessors to a *.csv file using the default CSV output."}>>> = true
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = final
[]
[Executioner<<<{"href": "../../../syntax/Executioner/index.html"}>>>]
type = Steady
[](modules/subchannel/verification/friction_model_verification/friction_model/tri_wire_flow_split.i)EBR-II XX09, SHRT-17 steady state:
# EBR-II XX09 SHRT-17 steady state of validation/EBR-II/XX09_SCM_SS17.i, with the mass flow rate
# and the position of the TTC subchannels at the TTC height for the comparison with DASSH.
# The default closures are UCTD friction and Chen-Todreas (1986) mixing. For Pacio-Chen-Todreas (PCTD)
# friction and mixing run:
# subchannel-opt -i XX09_SS17.i SCMClosures/Chen/friction_model=Pacio
# SCMClosures/Chen_Todreas/mixing_model=Pacio Outputs/file_base=XX09_SS17_pacio_out
!include ../../../validation/EBR-II/XX09_SCM_SS17.i
# SCMTriPowerIC opens the file relative to the working directory
[ICs]
[q_prime_IC]
filename := '../../../validation/EBR-II/pin_power_profile61_uniform.txt'
[]
[]
# Turbulent momentum exchange of the mixing crossflow without the CT = 2.6 enhancement of
# XX09_SCM_SS17.i
[SCMClosures]
[Chen_Todreas]
CT := 1.0
[]
[]
# The projection onto a detailed mesh is not needed
[MultiApps]
active = ''
[]
[Transfers]
active = ''
[]
[Functions]
[x_fn]
type = ParsedFunction
expression = 'x'
[]
[y_fn]
type = ParsedFunction
expression = 'y'
[]
[]
[AuxVariables]
[x_sc]
block = subchannel
[]
[y_sc]
block = subchannel
[]
[]
[AuxKernels]
[x_sc]
type = FunctionAux
variable = x_sc
function = x_fn
block = subchannel
execute_on = 'initial'
[]
[y_sc]
type = FunctionAux
variable = y_sc
function = y_fn
block = subchannel
execute_on = 'initial'
[]
[]
# Same subchannels and height as the TTC temperature postprocessors
[Postprocessors]
[mdot-27]
type = SubChannelPointValue
variable = mdot
index = 91
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[mdot-28]
type = SubChannelPointValue
variable = mdot
index = 50
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[mdot-29]
type = SubChannelPointValue
variable = mdot
index = 21
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[mdot-30]
type = SubChannelPointValue
variable = mdot
index = 4
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[mdot-31]
type = SubChannelPointValue
variable = mdot
index = 2
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[mdot-32]
type = SubChannelPointValue
variable = mdot
index = 16
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[mdot-33]
type = SubChannelPointValue
variable = mdot
index = 42
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[mdot-34]
type = SubChannelPointValue
variable = mdot
index = 80
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[mdot-35]
type = SubChannelPointValue
variable = mdot
index = 107
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[x-27]
type = SubChannelPointValue
variable = x_sc
index = 91
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[x-28]
type = SubChannelPointValue
variable = x_sc
index = 50
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[x-29]
type = SubChannelPointValue
variable = x_sc
index = 21
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[x-30]
type = SubChannelPointValue
variable = x_sc
index = 4
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[x-31]
type = SubChannelPointValue
variable = x_sc
index = 2
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[x-32]
type = SubChannelPointValue
variable = x_sc
index = 16
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[x-33]
type = SubChannelPointValue
variable = x_sc
index = 42
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[x-34]
type = SubChannelPointValue
variable = x_sc
index = 80
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[x-35]
type = SubChannelPointValue
variable = x_sc
index = 107
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[y-27]
type = SubChannelPointValue
variable = y_sc
index = 91
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[y-28]
type = SubChannelPointValue
variable = y_sc
index = 50
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[y-29]
type = SubChannelPointValue
variable = y_sc
index = 21
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[y-30]
type = SubChannelPointValue
variable = y_sc
index = 4
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[y-31]
type = SubChannelPointValue
variable = y_sc
index = 2
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[y-32]
type = SubChannelPointValue
variable = y_sc
index = 16
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[y-33]
type = SubChannelPointValue
variable = y_sc
index = 42
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[y-34]
type = SubChannelPointValue
variable = y_sc
index = 80
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[y-35]
type = SubChannelPointValue
variable = y_sc
index = 107
height = 0.322
execute_on = 'TIMESTEP_END'
[]
[]
(modules/subchannel/verification/friction_model_verification/friction_model/XX09_SS17.i)The inputs that reproduce the calculations of the PCTD paper include a shared file:
# Shared part of the inputs that reproduce the calculations of the PCTD paper, Pacio et al. (2022),
# for the wire-wrapped triangular lattices of Kennedy et al. (2015) and Liang et al. (2020). Each
# time step solves the assembly at a larger inlet mass flux, which sets the bulk Reynolds number.
# The including input defines the mesh, the exponent G_exp0 of the initial inlet mass flux, the
# inlet mass flux 10^(G_exp0 + G_exp_rate n) [kg/m^2-s] at step n through G_exp_rate, the number of
# steps, the center, edge, and corner subchannel indices and counts, and includes the file
# with the mass flow rate and flow area of every subchannel at the outlet. The PCTD model lumps the
# subchannels of each type, so the flow split of a type is calculated from those in the plotting
# script. The bulk friction factor is calculated from the pressure gradient in the developed flow.
# The fluid is water and the assembly is unheated, so the density is nearly uniform and the flow split
# and friction factors depend only on the bulk Reynolds number and the geometry, as in the PCTD model.
T_in = 359.15 # K
P_out = 4.923e6 # Pa
# The inlet mass flux is uniform, and the flow split develops over about 1.5 m, so it is sampled at
# the outlet of the 3 m assembly, where the flow is developed
z_out = 3.0
# The pressure gradient is calculated between z_dp_in and z_dp_out, in the developed flow and away
# from the outlet boundary
z_dp_in = 2.0
z_dp_out = 2.9
# Each sweep step is a time step of the transient solve; the time derivative of the axial momentum
# equation is negligible for a time step this long, as in friction_factor_sampling.i
dt_step = 1e4 # s
[FluidProperties<<<{"href": "../../../syntax/FluidProperties/index.html"}>>>]
[water]
type = Water97FluidProperties<<<{"description": "Fluid properties for water and steam (H2O) using IAPWS-IF97", "href": "../../../source/fluidproperties/Water97FluidProperties.html"}>>>
[]
[]
[SubChannel]
type = TriSubChannel1PhaseProblem
fp = water
n_blocks = 1
P_out = ${P_out}
compute_density = true
compute_viscosity = true
compute_power = false
full_output = true
# Monolithic implicit solver. The explicit solver converges the developed turbulent flow split
# only to about 1% with the default tolerances.
implicit = true
segregated = false
P_tol = 1e-8
T_tol = 1e-8
rtol = 1e-10
atol = 1e-10
# No gravity, so that the pressure gradient is the friction pressure gradient
gravity = none
friction_closure = 'Chen'
mixing_closure = 'Chen_Todreas'
pin_HTC_closure = 'Dittus-Boelter'
[]
[SCMClosures<<<{"href": "../../../syntax/SCMClosures/index.html"}>>>]
[Chen]
type = SCMFrictionChenTodreas<<<{"description": "Class that computes the axial friction factor using the Chen-Todreas correlations.", "href": "../../../source/scmclosures/SCMFrictionChenTodreas.html"}>>>
friction_model<<<{"description": "Friction-factor parameterization for triangular wire-wrapped Chen-Todreas correlations."}>>> = Pacio
[]
[Chen_Todreas]
type = SCMMixingChenTodreas<<<{"description": "Class that models the turbulent mixing coefficient for wire-wrapped triangular assemblies using the Chen Todreas correlations.", "href": "../../../source/scmclosures/SCMMixingChenTodreas.html"}>>>
mixing_model<<<{"description": "Mixing-model parameterization for triangular wire-wrapped Chen-Todreas correlations."}>>> = Pacio
# C_T multiplies the mixing parameter in the axial momentum equation, whose mixing term is the
# exchange of axial momentum of the PCTD equations, Eq. (2) of Pacio et al. (2022); the enthalpy
# mixing uses the mixing parameter without C_T. C_T = 1 applies it unchanged, as in PCTD.
CT<<<{"description": "Turbulent momentum, modeling parameter [-]."}>>> = 1.0
[]
[Dittus-Boelter]
type = SCMHTCDittusBoelter<<<{"description": "Class that computes the convective heat transfer coefficient using the Dittus Boelter correlation.", "href": "../../../source/scmclosures/SCMHTCDittusBoelter.html"}>>>
[]
[]
[ICs<<<{"href": "../../../syntax/ICs/index.html"}>>>]
[T_ic]
type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = T
value<<<{"description": "The value to be set in IC"}>>> = ${T_in}
[]
[P_ic]
type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = P
value<<<{"description": "The value to be set in IC"}>>> = 0.0
[]
[DP_ic]
type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = DP
value<<<{"description": "The value to be set in IC"}>>> = 0.0
[]
[rho_ic]
type = RhoFromPressureTemperatureIC<<<{"description": "Computes the density from pressure and temperature.", "href": "../../../source/ics/RhoFromPressureTemperatureIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = rho
p<<<{"description": "The pressure [Pa]"}>>> = ${P_out}
T<<<{"description": "The temperature [K]"}>>> = T
fp<<<{"description": "The name of fluid properties user object."}>>> = water
[]
[h_ic]
type = SpecificEnthalpyFromPressureTemperatureIC<<<{"description": "Computes the specific enthalpy from pressure and temperature.", "href": "../../../source/ics/SpecificEnthalpyFromPressureTemperatureIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = h
p<<<{"description": "The pressure [Pa]"}>>> = ${P_out}
T<<<{"description": "The temperature [K]"}>>> = T
fp<<<{"description": "The name of fluid properties user object."}>>> = water
[]
[mu_ic]
type = ViscosityIC<<<{"description": "Computes viscosity from specified pressure and temperature", "href": "../../../source/ics/ViscosityIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = mu
p<<<{"description": "Pressure [Pa]"}>>> = ${P_out}
T<<<{"description": "Temperature [K]"}>>> = T
fp<<<{"description": "Fluid properties user object name"}>>> = water
[]
[mdot_ic]
type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = mdot
value<<<{"description": "The value to be set in IC"}>>> = 0.0
[]
[]
[Functions<<<{"href": "../../../syntax/Functions/index.html"}>>>]
[mass_flux_fn]
type = ParsedFunction<<<{"description": "Function created by parsing a string", "href": "../../../source/functions/MooseParsedFunction.html"}>>>
expression<<<{"description": "The user defined function."}>>> = '10^(${G_exp0} + ${G_exp_rate} * t / ${dt_step})'
[]
[]
[AuxKernels<<<{"href": "../../../syntax/AuxKernels/index.html"}>>>]
[T_in_bc]
type = ConstantAux<<<{"description": "Creates a constant field in the domain.", "href": "../../../source/auxkernels/ConstantAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = T
boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = inlet
value<<<{"description": "Some constant value that can be read from the input file"}>>> = ${T_in}
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'timestep_begin'
[]
[mdot_in_bc]
type = SCMMassFlowRateAux<<<{"description": "Computes mass flow rate from specified mass flux and subchannel cross-sectional area. Can read either PostprocessorValue or Real", "href": "../../../source/auxkernels/SCMMassFlowRateAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = mdot
boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = inlet
area<<<{"description": "Cross sectional area [m^2]"}>>> = S
mass_flux<<<{"description": "The postprocessor or Real to use for the value of mass_flux"}>>> = mass_flux
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'timestep_begin'
[]
[]
[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
[mass_flux]
type = FunctionValuePostprocessor<<<{"description": "Computes the value of a supplied function at a single point (scalable)", "href": "../../../source/postprocessors/FunctionValuePostprocessor.html"}>>>
function<<<{"description": "The function which supplies the postprocessor value."}>>> = mass_flux_fn
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'initial timestep_begin'
[]
[w_perim_center]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = w_perim
index<<<{"description": "Index of subchannel"}>>> = ${center}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_out}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[w_perim_edge]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = w_perim
index<<<{"description": "Index of subchannel"}>>> = ${edge}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_out}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[w_perim_corner]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = w_perim
index<<<{"description": "Index of subchannel"}>>> = ${corner}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_out}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
# The solver evaluates the bulk Reynolds number with the inlet viscosity
[mu_in]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = mu
index<<<{"description": "Index of subchannel"}>>> = ${center}
height<<<{"description": "Axial location of point [m]"}>>> = 0.0
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
# Subchannel hydraulic diameters Dh = 4 S / w_perim, as in the solver
[Dh_center]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = '4 * S_${center} / w_perim_center'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'S_${center} w_perim_center'
[]
[Dh_edge]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = '4 * S_${edge} / w_perim_edge'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'S_${edge} w_perim_edge'
[]
[Dh_corner]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = '4 * S_${corner} / w_perim_corner'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'S_${corner} w_perim_corner'
[]
# Bulk hydraulic diameter, 4 times the total flow area over the total wetted perimeter
[Dh_bulk]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = '4 * (${n_center} * S_${center} + ${n_edge} * S_${edge} + ${n_corner} * S_${corner})
/ (${n_center} * w_perim_center + ${n_edge} * w_perim_edge
+ ${n_corner} * w_perim_corner)'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'S_${center} S_${edge} S_${corner} w_perim_center w_perim_edge w_perim_corner'
[]
[Re_bulk]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = 'mass_flux * Dh_bulk / mu_in'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'mass_flux Dh_bulk mu_in'
[]
# Bulk friction factor f_b = (dP/L) 2 Dh_bulk rho / mass_flux^2, from the pressure gradient of the
# developed flow
[P_dp_in]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = P
index<<<{"description": "Index of subchannel"}>>> = ${center}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_dp_in}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[P_dp_out]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = P
index<<<{"description": "Index of subchannel"}>>> = ${center}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_dp_out}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[rho_dp]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = rho
index<<<{"description": "Index of subchannel"}>>> = ${center}
height<<<{"description": "Axial location of point [m]"}>>> = ${z_dp_in}
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[f_bulk]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = '(P_dp_in - P_dp_out) / (z_dp_out - z_dp_in) * 2 * Dh_bulk * rho_dp / mass_flux^2'
constant_names<<<{"description": "Vector of constants used in the parsed function (use this for kB etc.)"}>>> = 'z_dp_in z_dp_out'
constant_expressions<<<{"description": "Vector of values for the constants in constant_names (can be an FParser expression)"}>>> = '${z_dp_in} ${z_dp_out}'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'P_dp_in P_dp_out Dh_bulk rho_dp mass_flux'
[]
[]
[Outputs<<<{"href": "../../../syntax/Outputs/index.html"}>>>]
csv<<<{"description": "Output the scalar variable and postprocessors to a *.csv file using the default CSV output."}>>> = true
[]
[Executioner<<<{"href": "../../../syntax/Executioner/index.html"}>>>]
type = Transient
start_time = 0.0
end_time = '${fparse n_steps * dt_step}'
dt = ${dt_step}
[](modules/subchannel/verification/friction_model_verification/friction_model/pacio_paper.i)127-pin assembly of Kennedy et al.:
# 127-pin MYRRHA bundle of Kennedy et al. (2015), Table 6 of Pacio et al. (2022). The default closures are PCTD friction and mixing;
# for UCTD friction and Chen-Todreas (1986) mixing, override
# SCMClosures/Chen/friction_model=Upgraded SCMClosures/Chen_Todreas/mixing_model=1986
# SCMClosures/Chen_Todreas/CT=0.0 on the command line.
# Inlet mass flux from 10^G_exp0 = 40 kg/m^2-s, a bulk Reynolds number of about 466, up to 10^(G_exp0 +
# G_exp_rate n_steps) = 3981 kg/m^2-s, a bulk Reynolds number of about 46340
G_exp0 = 1.6
G_exp_rate = 0.1
n_steps = 20
n_rings = 7
pin_diameter = 0.00655 # m
# The wire diameter of Table 6 of Pacio et al. (2022), 1.80 mm, exceeds the pin-to-pin gap,
# P - D = 1.79 mm, by 0.01 mm, which the mesh generator rejects, so it is reduced to the gap
wire_diameter = 0.00179 # m
pitch = 0.00834 # m
wire_lead = 0.265 # m
# Flat-to-flat distance from Eq. (A.6) of Pacio et al. (2022), FF = n P sqrt(3) + 2 W - D, with
# n = n_rings - 1 and the edge pitch W = 8.377 mm
flat_to_flat = 0.096876 # m
# Subchannel indices of an interior, an edge, and a corner subchannel. The interior subchannels
# come first, 6 n^2 of them, followed by the edge and corner subchannels of the outermost ring
center = 0
edge = 216
corner = 217
# Number of interior, edge, and corner subchannels: 6 n^2, 6 n, and 6
n_center = 216
n_edge = 36
n_corner = 6
!include pacio_paper.i
!include pacio_kennedy_mdot.i
[TriSubChannelMesh]
[subchannel]
type = SCMTriAssemblyMeshGenerator
nrings = ${n_rings}
n_cells = 30
flat_to_flat = ${flat_to_flat}
heated_length = 3
pin_diameter = ${pin_diameter}
pitch = ${pitch}
dwire = ${wire_diameter}
hwire = ${wire_lead}
spacer_z = '0.0'
spacer_k = '0.0'
[]
[]
(modules/subchannel/verification/friction_model_verification/friction_model/pacio_kennedy.i)37-pin assembly of Liang et al.:
# 37-pin bundle of Liang et al. (2020), Table 6 of Pacio et al. (2022). The default closures are PCTD friction and mixing;
# for UCTD friction and Chen-Todreas (1986) mixing, override
# SCMClosures/Chen/friction_model=Upgraded SCMClosures/Chen_Todreas/mixing_model=1986
# SCMClosures/Chen_Todreas/CT=0.0 on the command line.
# Inlet mass flux from 10^G_exp0 = 40 kg/m^2-s, a bulk Reynolds number of about 398, up to 10^(G_exp0 +
# G_exp_rate n_steps) = 2512 kg/m^2-s, a bulk Reynolds number of about 24993. The steps of 0.02
# decades resolve the jump of the flow split at the laminar boundary, Re_b = 700
G_exp0 = 1.6
G_exp_rate = 0.02
n_steps = 90
n_rings = 4
pin_diameter = 0.01 # m
wire_diameter = 0.0009 # m
pitch = 0.0109 # m
wire_lead = 0.0955 # m
# Flat-to-flat distance from Eq. (A.6) of Pacio et al. (2022), FF = n P sqrt(3) + 2 W - D, with
# n = n_rings - 1 and the edge pitch W = 11.4 mm
flat_to_flat = 0.069438 # m
# Subchannel indices of an interior, an edge, and a corner subchannel. The interior subchannels
# come first, 6 n^2 of them, followed by the edge and corner subchannels of the outermost ring
center = 0
edge = 54
corner = 55
# Number of interior, edge, and corner subchannels: 6 n^2, 6 n, and 6
n_center = 54
n_edge = 18
n_corner = 6
!include pacio_paper.i
!include pacio_liang_mdot.i
[TriSubChannelMesh]
[subchannel]
type = SCMTriAssemblyMeshGenerator
nrings = ${n_rings}
n_cells = 30
flat_to_flat = ${flat_to_flat}
heated_length = 3
pin_diameter = ${pin_diameter}
pitch = ${pitch}
dwire = ${wire_diameter}
hwire = ${wire_lead}
spacer_z = '0.0'
spacer_k = '0.0'
[]
[]
(modules/subchannel/verification/friction_model_verification/friction_model/pacio_liang.i)The DASSH model of EBR-II XX09, SHRT-17 steady state, dassh_XX09_SS17.txt, and the script that runs DASSH and writes the DASSH data, dassh_XX09_SS17.py, are kept with the DASSH comparison inputs.
References
- Milos Atz, Micheal A Smith, and Florent Heidet.
Ducted assembly steady-state heat transfer software (dassh): theory manual.
Technical Report, Argonne National Lab.(ANL), Argonne, IL (United States), 2021.[Export]
- G Kennedy, K Van Tichelen, and H Doolaard.
Experimental investigation of the pressure loss characteristics of the full-scale MYRRHA fuel bundle in the COMPLOT LBE facility.
In Proceedings of the 16th International Meeting on Nuclear Reactor Thermal Hydraulics (NURETH-16), 61–73. Chicago, IL, 2015.[Export]
- Y Liang, D Zhang, Y Chen, K Zhang, W Tian, S Qiu, and G Su.
An experiment study of pressure drop and flow distribution in subchannels of a 37-pin wire-wrapped rod bundle.
Applied Thermal Engineering, 174:115283, 2020.[Export]
- J Pacio, SK Chen, YM Chen, and NE Todreas.
Analysis of pressure losses and flow distribution in wire-wrapped hexagonal rod bundles for licensing. part i: the pacio-chen-todreas detailed model (pctd).
Nuclear Engineering and Design, 388:111607, 2022.[Export]