Reactor Physics Models
Cross Section Generation
The cross-section preparation capability for PBRs in Griffin is not currently available. Thus, the benchmark relied on the lattice code DRAGON (Reitsma et al., 2013) to prepare microscopic cross sections.
The DRAGON data libraries used in this work are based on the ENDF/B-VIII.r0 evaluation. For the neutron self-shielding method, the SHEM 281 group library was used with the subgroup projection method (Hébert, 2009). The double heterogeneity treatment is based on the H\'ebert method. A current-coupled collision probability (CCCP) flux solution is used for spatial homogenization and energy condensation of microscopic cross sections. The intra-core neutron leakage affects the local spectrum significantly, and it will have an impact on the cross-section homogenization. Nevertheless, this approach with the generated cross sections serves as an initial set to perform preliminary calculations until more sophisticated methods are available in Griffin. The nominal depletion values are as follows:
| Parameter | Value |
|---|---|
| Fuel temperature K | 898.0 |
| Moderator temperature K | 803.0 |
| Neutron flux n/cm2/sec | 1.521 |
Two models were built in DRAGON. These are a pebble model and a pebble ensemble as show in Figure 1. The cross sections were prepared in 9 energy group structure and the transmutation and decay chain has 295 isotopes.

Figure 1: Dragon models.
Cross Section File
The cross-section files are located under "\HTR_PM_PD\xsections\HTR-PM_9G-Tnew.xml.tar.gz". first you need to unzip the compressed file using the following command
The transmutation and decay chain file is located under "HTR_PM_PD\xsections\DRAGON5_DT.xml".
The cross sections were prepared in 9 energy group structure and the transmutaion and decay chain has 295 isotopes.
## Neutronics Model
A neutronics model of the HTR-PM core was developed with Griffin using an axisymmetric (R-Z) geometry with homogenized core regions. Griffin solves steady-state neutron diffusion equation and pebble streamline calculations which solves 1D streamline advection transmutation equation for pebble depletion.
The model is shown in [htr-pm-griffin-model].
!media /htrpm_coremultiphysics/htr-pm-griffin-model.png
style=width:50%
id=htr-pm-griffin-model
caption=Griffin model.
The Griffin model uses six equally spaced streamlines to represent pebble depletion that are centered within the active core elements. The streamlines are located at radii of $r=12.5, 37.5, 62.5, 87.5, 112.5, 137.5$ cm. Pebble velocity is assumed to be uniform so that the fraction of the volumetric flow rate of pebbles through each channel is proportional to the channel area. The six channels are straight down and end at the bottom of the pebble bed.
The heavy metal loading of $7$ g per pebble, the average discharge burnup of $90$ MWd/kg, the average power density, and the packing fraction of $0.61$, the total irradiation time in the core is estimated to be $1,055$ days, which corresponds to $70$ days per pass in the 15-pass core design The pebble speed ($15.6$ cm/d) and pebble reloading rates ($5,949$ pebbles per day). The discharge burnup of $90$~MWd/kg or $4.82E+14$ $J/m^3$. A total of 10 burnup groups forms the base discretization of the burnup variable.
The local decay heat power in Griffin is computed from the decay released by fission products as a function of time along with provided by the neutron transmutation and decay chain.
The steady state neutronics calculation is run through bluecrab using the following command
```
mpirun -np 48 blue_crab-opt -i htr_pm_neutronics_ss.i
The steady state input is composed of blocks. Initially, the cross sections are imported in the GlobalParams block
[GlobalParams]
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
is_meter = true
plus = true
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)The characteristics of the transport solution are identified as
[TransportSystems]
particle = neutron
equation_type = eigenvalue
G = 9
ReflectingBoundary = 'left'
VacuumBoundary = 'right top bottom'
[diff]
scheme = CFEM-Diffusion
family = LAGRANGE
order = FIRST
n_delay_groups = 6
assemble_scattering_jacobian = true
assemble_fission_jacobian = true
[]
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)The mesh is identified as and contains assignment of materials IDs through assign_material_idas follows:
[Mesh]
type = MeshGeneratorMesh
block_id = ' 1 2 3 4 5 6
7 8 61 71'
block_name = 'pebble_bed upper_ref lower_ref cavity hot_plenum cold_plenum
radial_ref carbon_brick riser cr'
#uniform_refine = 1
[cartesian_mesh]
type = CartesianMeshGenerator
dim = 2
# Total height: 16.8 m
dx = ' 0.250 0.250 0.250 0.250 0.250 0.250
0.010 0.050 0.130 0.080 0.080 0.080
0.200 0.120 0.125 0.125'
ix = ' 1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1'
dy = ' 0.400 0.400 0.100 0.100 0.800 0.300 0.200 0.300 0.216 0.412
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.760 0.712 0.300 0.400 0.400 '
# base: converges fine
iy = '1 1 1 1 2 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 2 1 1 1'
subdomain_id = ' 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
5 5 5 5 5 5 5 5 5 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
4 4 4 4 4 4 7 7 71 7 7 7 61 7 8 8
4 2 2 2 2 2 7 7 71 7 7 7 61 7 8 8
6 6 6 6 6 6 6 6 71 6 6 6 6 7 8 8
7 7 7 7 7 7 7 7 71 7 7 7 7 7 8 8
8 8 8 8 8 8 8 8 71 8 8 8 8 8 8 8 '
[]
[assign_material_id]
type = SubdomainExtraElementIDGenerator
input = cartesian_mesh
extra_element_id_names = 'material_id'
subdomains = '1 2 3 4 5 6 7 8 61 71'
extra_element_ids = '1 1 1 1 1 1 1 1 1 1'
[]
coord_type = RZ
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)Depletion for the pebbles is defined using the PebbleBed block as
[PebbleBed]
block = 'pebble_bed'
power = '${fparse total_power}'
integrated_power_postprocessor = total_power
power_density_variable = power_density
family = MONOMIAL
order = CONSTANT
porosity_name = porosity
burnup_group_boundaries = ${burnup_group_boundaries}
# cross section data
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
burnup_grid_name = 'Burnup'
fuel_temperature_grid_name = 'Tfuel'
moderator_temperature_grid_name = 'Tmod'
# avoid physicality check (old XS library)
dtl_physicality = DISABLE
# transmutation data
dataset = ISOXML
isoxml_data_file = '../xsections/DRAGON5_DT_DH_295.xml'
isoxml_lib_name = 'DRAGON'
initial_moderator_temperature = ${initial_temperature}
initial_fuel_temperature = ${initial_temperature}
n_fresh_pebble_types = 1
fresh_pebble_compositions = 'fresh_pebble'
track_isotopes = ' U235 U236 U238 PU238 PU239 PU240 PU241 PU242 AM241
AM242M CS135 CS137 XE135 XE136 I131 I135 SR90'
output_densities_to_exodus = false
[DepletionScheme]
type = ConstantStreamlineEquilibrium
pebble_unloading_rate = ${pebble_unloading_rate}
pebble_flow_rate_distribution = '0.027777778 0.083333333 0.138888889 0.194444444 0.25 0.305555556'
burnup_limit = 4.818E+14
major_streamline_axis = y
pebble_diameter = 0.06
streamline_points = '${r_streamline_1} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_1} ${axial_reflector_height} 0;
${r_streamline_2} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_2} ${axial_reflector_height} 0;
${r_streamline_3} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_3} ${axial_reflector_height} 0;
${r_streamline_4} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_4} ${axial_reflector_height} 0;
${r_streamline_5} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_5} ${axial_reflector_height} 0;
${r_streamline_6} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_6} ${axial_reflector_height} 0'
streamline_segment_subdivisions = '20; 20; 20; 20; 20; 20'
sweep_tol = 1e-7
sweep_max_iterations = 200
[]
# pebble conduction
pebble_conduction_input_file = 'pebble_triso_ss.i'
pebble_positions_file = 'pebble_heat_pos.txt'
surface_temperature_sub_app_postprocessor = T_surface
surface_temperature_main_app_variable = T_solid
power_sub_app_postprocessor = pebble_power_density
fuel_temperature_sub_app_postprocessor = T_fuel
moderator_temperature_sub_app_postprocessor = T_mod
decay_heat = true
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)Materials are defined using the Materials block as
[Materials]
# upper and lower reflectors at 70% density
[axial_reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'upper_ref lower_ref'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.25284E-02 0.0'
material_id = 1
[]
# upper lower plenum at 80% density
[plenum]
type = CoupledFeedbackNeutronicsMaterial
block = 'hot_plenum cold_plenum'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '7.14611E-02 0.0'
material_id = 1
[]
[reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'radial_ref carbon_brick'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '8.93263E-02 0.0'
material_id = 1
[]
# control_rod at 68% density
[control_rod]
type = CoupledFeedbackRoddedNeutronicsMaterial
block = 'cr'
grid_names = 'Tmod Tmod Tmod'
grid_variables = 'T_solid T_solid T_solid'
isotopes = ' Graphite ; Graphite B10 B11 C12 ; Graphite B10 B11 C12 '
densities = ' 6.4277e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 '
segment_material_ids = '1 1 1'
rod_segment_length = 11.878
front_position_function = 'CR_bott'
rod_withdrawn_direction = 'y'
[]
# riser at 68% density
[riser]
type = CoupledFeedbackNeutronicsMaterial
block = 'riser'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.07419E-02 0.0'
material_id = 1
[]
[cavity]
type = ConstantNeutronicsMaterial
block = 'cavity'
fromFile = false
# computed from Serpent CMM
diffusion_coef = '4.68857E-01 1.52760E-01 1.21025E-01 1.08241E-01 1.72433E-01 1.65906E-01 1.96579E-01 1.79868E-01 2.14727E-01'
sigma_r = '0 0 0 0 0 0 0 0 0'
sigma_s = ' 7.10949E-01 0 0 0 0 0 0 0 0
0 2.18207E+00 0 0 0 0 0 0 0
0 0 2.75425E+00 0 0 0 0 0 0
0 0 0 3.07955E+00 0 0 0 0 0
0 0 0 0 1.93312E+00 0 0 0 0
0 0 0 0 0 2.00917E+00 0 0 0
0 0 0 0 0 0 1.69567E+00 0 0
0 0 0 0 0 0 0 1.85321E+00 0
0 0 0 0 0 0 0 0 1.55236E+00'
diffusion_coefficient_scheme = user_supplied
[]
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)Preconditioning parameters for the solver are defined as
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)Finally, the execution characteristics of the problem are defined with the Executioner block
[Executioner]
type = Eigenvalue
solve_type = PJFNKMO
constant_matrices = true
petsc_options_iname = '-pc_type -pc_hypre_type -ksp_gmres_restart '
petsc_options_value = 'hypre boomeramg 100'
line_search = l2 #none
# Linear/nonlinear iterations.
l_max_its = 200
l_tol = 1e-3
nl_max_its = 200
# tolerances on the equilibrium calculation are
# similar to on the transients at this time, a small drift
# in the null transient could occur
nl_rel_tol = 1e-5
nl_abs_tol = 1e-6
fixed_point_max_its = 50
fixed_point_rel_tol = 1e-5
fixed_point_abs_tol = 1e-6
free_power_iterations = 4
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)Equilibrium Core Calculations
The equilibrium core is attained via the streamline depletion method available in Griffin (Schunert et al., 2020). In this depletion approach, a 2D or 3D core flux solution is mapped to 1D axial streamlines. A set of 1D steady-state advection-transmutation equations for all isotopes are solved in each streamline. Griffin assumes that the pebble loading and unloading rates are identical. Full details on the equilibrium model can be found in (Jaradat et al., 2023).
The depletion setup is requested through the Griffin input. Specifically, in the input, the definition of the DepletionScheme as in the following is used to define the fuel pebbles as depletable material as
[PebbleBed]
[DepletionScheme]
type = ConstantStreamlineEquilibrium
pebble_unloading_rate = ${pebble_unloading_rate}
pebble_flow_rate_distribution = '0.027777778 0.083333333 0.138888889 0.194444444 0.25 0.305555556'
burnup_limit = 4.818E+14
major_streamline_axis = y
pebble_diameter = 0.06
streamline_points = '${r_streamline_1} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_1} ${axial_reflector_height} 0;
${r_streamline_2} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_2} ${axial_reflector_height} 0;
${r_streamline_3} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_3} ${axial_reflector_height} 0;
${r_streamline_4} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_4} ${axial_reflector_height} 0;
${r_streamline_5} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_5} ${axial_reflector_height} 0;
${r_streamline_6} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_6} ${axial_reflector_height} 0'
streamline_segment_subdivisions = '20; 20; 20; 20; 20; 20'
sweep_tol = 1e-7
sweep_max_iterations = 200
[]
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)Decay Heat Calculation
A decay heat model was added for the equilibrium core model to properly perform the loss of forced cooling transients. The decay heat source is mainly important for transient analyses when the fission power is reduced to zero due to negative reactivity insertion. In steady state, the decay heat is assumed to be included in the energy released per fission, and, thus, assumed to have the same distribution as the prompt fission power. In this decay heat model, the fission products are grouped into a few decay heat precursor groups (KD), and each group has its unique decay heat fraction () and constant (). Details on the decay model can be found in (Jaradat et al., 2023).
To calculate the decay heat using Griffin, an AuxVariable for the decay heat is defined and then using an AuxKernel the methods of how it is calculated is defined. Here is definition of the HTR-PM neutronic model AuxVariables
[AuxVariables]
[T_solid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[T_fluid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[Tfuel_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tfuel_max]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_max]
order = CONSTANT
family = MONOMIAL
[]
[Burnup]
order = CONSTANT
family = MONOMIAL
components = 10
# use burnup midpoints and add one additional for discard group
initial_condition = '2.675E+13 8.025E+13 1.337E+14 1.872E+14 2.407E+14 2.942E+14 3.476E+14 4.011E+14 4.546E+14 4.546E+14'
outputs = none
[]
[Burnup_avg]
order = CONSTANT
family = MONOMIAL
[]
[porosity]
family = MONOMIAL
order = CONSTANT
initial_condition = 0.39
block = 'pebble_bed'
[]
# Prompt power density is only added automatically for transients
[prompt_power_density]
order = CONSTANT
family = MONOMIAL
[]
[power_peaking]
order = CONSTANT
family = MONOMIAL
[]
[pden_avg]
order = CONSTANT
family = MONOMIAL
[]
[pden_max]
order = CONSTANT
family = MONOMIAL
[]
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)The AuxKernels for the HTR-PM neutronic model are defined as:
[AuxKernels]
[Tfuel_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tfuel_avg
array_variable = triso_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tfuel_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tfuel_max
array_variable = triso_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tmod_avg
array_variable = graphite_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tmod_max
array_variable = graphite_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Burnup_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Burnup_avg
array_variable = Burnup
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[prompt_power_density_aux]
type = VectorReactionRate
block = 'pebble_bed'
scalar_flux = 'sflux_g0 sflux_g1 sflux_g2 sflux_g3 sflux_g4
sflux_g5 sflux_g6 sflux_g7 sflux_g8'
variable = prompt_power_density
cross_section = kappa_sigma_fission
scale_factor = power_scaling
dummies = UnscaledTotalPower
execute_on = 'INITIAL timestep_end'
[]
[pden_max_aux]
type = ArrayVarExtremeValueAux
block = 'pebble_bed'
variable = pden_max
array_variable = partial_power_density
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[pden_avg_aux]
type = PebbleAveragedAux
block = 'pebble_bed'
variable = pden_avg
array_variable = partial_power_density
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[power_peaking_aux]
type = ParsedAux
block = 'pebble_bed'
variable = power_peaking
coupled_variables = 'power_density'
expression = 'power_density / 3.21525E+06'
execute_on = 'initial timestep_end'
[]
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)Multiphysics
Linking the neutronic solution calculation with thermal fluid solution (which is presented in the next section) is done using the MultiApps block
[MultiApps]
[flow]
type = FullSolveMultiApp
input_files = 'htr-pm-flow-fv-ss.i'
keep_solution_during_restore = true
update_old_solution_when_keeping_solution_during_restore = true
positions = '0 0 0'
execute_on = 'TIMESTEP_END'
[]
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)Transferring field data is done through defining the following block
[Transfers]
[power_density_to_flow]
type = MultiAppNearestNodeTransfer
to_multi_app = flow
source_variable = power_density
variable = power_density
fixed_meshes = true
execute_on = 'TIMESTEP_END'
[]
[T_solid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_solid
variable = T_solid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[T_fluid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_fluid
variable = T_fluid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)The setup of the applications is described in Figure 2. Due to the effectively "larger" time step in the neutronics calculations, Griffin is set as the parent application. The neutronics calculation (a depletion step) is run as a multiapp, this is followed by running the pebble/Triso conduction model which obtains pebble temperatures in various places in the core. Then Pronghorn is run to perform thermal conduction uses the solution from the conduction model to calculate the coolant temperature.

Figure 2: Application setup for equilibrium core calculation.
References
- Alain Hébert.
Development of the subgroup projection method for resonance self-shielding calculations.
Nuclear science and engineering, 162(1):56–75, 2009.[Export]
BibTeX
@article{hebert2009development, author = "H{\'e}bert, Alain", title = "Development of the subgroup projection method for resonance self-shielding calculations", journal = "Nuclear science and engineering", volume = "162", number = "1", pages = "56--75", year = "2009", publisher = "Taylor \\& Francis" }RIS
TY - JOUR AU - Hébert, Alain TI - Development of the subgroup projection method for resonance self-shielding calculations JO - Nuclear science and engineering PY - 2009 VL - 162 IS - 1 PB - Taylor & Francis SP - 56 EP - 75 ER -Plain Text
Alain Hébert. Development of the subgroup projection method for resonance self-shielding calculations. Nuclear science and engineering, 162(1):56–75, 2009. - Mustafa Kamel Mohammad Jaradat, Sebastian Schunert, and Javier Ortensi.
Gas-cooled high-temperature pebble-bed reactor reference plant model.
Technical Report, Idaho National Laboratory (INL), Idaho Falls, ID (United States), 2023.[Export]
BibTeX
@techreport{jaradat2023gas, author = "Jaradat, Mustafa Kamel Mohammad and Schunert, Sebastian and Ortensi, Javier", title = "Gas-cooled high-temperature pebble-bed reactor reference plant model", year = "2023", institution = "Idaho National Laboratory (INL), Idaho Falls, ID (United States)" }RIS
TY - RPRT AU - Jaradat, Mustafa Kamel Mohammad AU - Schunert, Sebastian AU - Ortensi, Javier TI - Gas-cooled high-temperature pebble-bed reactor reference plant model PY - 2023 ER -Plain Text
Mustafa Kamel Mohammad Jaradat, Sebastian Schunert, and Javier Ortensi. Gas-cooled high-temperature pebble-bed reactor reference plant model. Technical Report, Idaho National Laboratory (INL), Idaho Falls, ID (United States), 2023. - Frederik Reitsma, Kostadin Ivanov, Enrico Sartori, Hyun Chul Lee, Antti Daavittila, Jaakko Leppanen, Enrico Girardi, Maurice Grimod, Oliver Koeberl, Simone Massara, and others.
Pbmr coupled neutronics/thermal-hydraulics transient benchmark. the pbmr-400 core design-volume 1 the benchmark definition.
2013.[Export]
BibTeX
@article{reitsma2013pbmr, author = "Reitsma, Frederik and Ivanov, Kostadin and Sartori, Enrico and Lee, Hyun Chul and Daavittila, Antti and Leppanen, Jaakko and Girardi, Enrico and Grimod, Maurice and Koeberl, Oliver and Massara, Simone and others", title = "PBMR Coupled Neutronics/Thermal-hydraulics Transient Benchmark. The PBMR-400 Core Design-Volume 1 The Benchmark Definition", year = "2013", journal = "" }RIS
TY - JOUR AU - Reitsma, Frederik AU - Ivanov, Kostadin AU - Sartori, Enrico AU - Lee, Hyun Chul AU - Daavittila, Antti AU - Leppanen, Jaakko AU - Girardi, Enrico AU - Grimod, Maurice AU - Koeberl, Oliver AU - Massara, Simone AU - others TI - PBMR Coupled Neutronics/Thermal-hydraulics Transient Benchmark. The PBMR-400 Core Design-Volume 1 The Benchmark Definition JO - PY - 2013 ER -Plain Text
Frederik Reitsma, Kostadin Ivanov, Enrico Sartori, Hyun Chul Lee, Antti Daavittila, Jaakko Leppanen, Enrico Girardi, Maurice Grimod, Oliver Koeberl, Simone Massara, and others. Pbmr coupled neutronics/thermal-hydraulics transient benchmark. the pbmr-400 core design-volume 1 the benchmark definition. 2013. - Sebastian Schunert, Guillaume Louis Giudicelli, Paolo Balestra, Javier Ortensi, Ramiro Freile, and Logan Harbour.
Nrc multiphysics analysis capability deployment (fy2021–part 1).
Technical Report, Idaho National Lab.(INL), Idaho Falls, ID (United States), 2020.[Export]
BibTeX
@techreport{schunert2020nrc, author = "Schunert, Sebastian and Giudicelli, Guillaume Louis and Balestra, Paolo and Ortensi, Javier and Freile, Ramiro and Harbour, Logan", title = "NRC Multiphysics Analysis Capability Deployment (FY2021--Part 1)", year = "2020", institution = "Idaho National Lab.(INL), Idaho Falls, ID (United States)" }RIS
TY - RPRT AU - Schunert, Sebastian AU - Giudicelli, Guillaume Louis AU - Balestra, Paolo AU - Ortensi, Javier AU - Freile, Ramiro AU - Harbour, Logan TI - NRC Multiphysics Analysis Capability Deployment (FY2021–Part 1) PY - 2020 ER -Plain Text
Sebastian Schunert, Guillaume Louis Giudicelli, Paolo Balestra, Javier Ortensi, Ramiro Freile, and Logan Harbour. Nrc multiphysics analysis capability deployment (fy2021–part 1). Technical Report, Idaho National Lab.(INL), Idaho Falls, ID (United States), 2020.
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)
# ==============================================================================
# Model description
# Equilibrium core neutronics model coupled with TH and pebble temperature models
# ------------------------------------------------------------------------------
# Idaho Falls, INL, April 11, 2023
# Author(s): Dr. Mustafa Jaradat Dr. Sebastian Schunert, Dr. Javier Ortensi
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
initial_temperature = 500.0 # (K)
total_power = 250.0e+6 # Total reactor Power (W)
burnup_group_boundaries = '5.35E+13 1.070E+14 1.604E+14 2.139E+14 2.674E+14 3.209E+14 3.743E+14 4.278E+14 4.818E+14'
# ==============================================================================
# parameters describing the reactor geometry
core_height = 11.0
axial_reflector_height = 3.228
fuel_radius = 1.5
r_streamline_1 = 12.5e-2
r_streamline_2 = 37.5e-2
r_streamline_3 = 62.5e-2
r_streamline_4 = 87.5e-2
r_streamline_5 = 112.5e-2
r_streamline_6 = 137.5e-2
pebble_radius = 3e-2
pebble_volume = ${fparse 4/3*pi * pebble_radius * pebble_radius * pebble_radius}
residence_time = 70.5
pebble_speed = ${fparse core_height / (residence_time * 3600 * 24)}
area = ${fparse pi * fuel_radius * fuel_radius}
pebble_unloading_rate = ${fparse pebble_speed * area * 0.61 / pebble_volume}
# ==============================================================================
# GLOBAL PARAMETERS
# ==============================================================================
[GlobalParams]
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
is_meter = true
plus = true
[]
[TransportSystems]
particle = neutron
equation_type = eigenvalue
G = 9
ReflectingBoundary = 'left'
VacuumBoundary = 'right top bottom'
[diff]
scheme = CFEM-Diffusion
family = LAGRANGE
order = FIRST
n_delay_groups = 6
assemble_scattering_jacobian = true
assemble_fission_jacobian = true
[]
[]
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
type = MeshGeneratorMesh
block_id = ' 1 2 3 4 5 6
7 8 61 71'
block_name = 'pebble_bed upper_ref lower_ref cavity hot_plenum cold_plenum
radial_ref carbon_brick riser cr'
#uniform_refine = 1
[cartesian_mesh]
type = CartesianMeshGenerator
dim = 2
# Total height: 16.8 m
dx = ' 0.250 0.250 0.250 0.250 0.250 0.250
0.010 0.050 0.130 0.080 0.080 0.080
0.200 0.120 0.125 0.125'
ix = ' 1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1'
dy = ' 0.400 0.400 0.100 0.100 0.800 0.300 0.200 0.300 0.216 0.412
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.760 0.712 0.300 0.400 0.400 '
# base: converges fine
iy = '1 1 1 1 2 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 2 1 1 1'
subdomain_id = ' 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
5 5 5 5 5 5 5 5 5 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
4 4 4 4 4 4 7 7 71 7 7 7 61 7 8 8
4 2 2 2 2 2 7 7 71 7 7 7 61 7 8 8
6 6 6 6 6 6 6 6 71 6 6 6 6 7 8 8
7 7 7 7 7 7 7 7 71 7 7 7 7 7 8 8
8 8 8 8 8 8 8 8 71 8 8 8 8 8 8 8 '
[]
[assign_material_id]
type = SubdomainExtraElementIDGenerator
input = cartesian_mesh
extra_element_id_names = 'material_id'
subdomains = '1 2 3 4 5 6 7 8 61 71'
extra_element_ids = '1 1 1 1 1 1 1 1 1 1'
[]
coord_type = RZ
[]
# ==============================================================================
# AUXVARIABLES AND AUXKERNELS
# ==============================================================================
[Functions]
[CR_bott]
type = ConstantFunction
value = '13.678'
[]
[]
[AuxVariables]
[T_solid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[T_fluid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[Tfuel_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tfuel_max]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_max]
order = CONSTANT
family = MONOMIAL
[]
[Burnup]
order = CONSTANT
family = MONOMIAL
components = 10
# use burnup midpoints and add one additional for discard group
initial_condition = '2.675E+13 8.025E+13 1.337E+14 1.872E+14 2.407E+14 2.942E+14 3.476E+14 4.011E+14 4.546E+14 4.546E+14'
outputs = none
[]
[Burnup_avg]
order = CONSTANT
family = MONOMIAL
[]
[porosity]
family = MONOMIAL
order = CONSTANT
initial_condition = 0.39
block = 'pebble_bed'
[]
# Prompt power density is only added automatically for transients
[prompt_power_density]
order = CONSTANT
family = MONOMIAL
[]
[power_peaking]
order = CONSTANT
family = MONOMIAL
[]
[pden_avg]
order = CONSTANT
family = MONOMIAL
[]
[pden_max]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[Tfuel_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tfuel_avg
array_variable = triso_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tfuel_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tfuel_max
array_variable = triso_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tmod_avg
array_variable = graphite_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tmod_max
array_variable = graphite_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Burnup_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Burnup_avg
array_variable = Burnup
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[prompt_power_density_aux]
type = VectorReactionRate
block = 'pebble_bed'
scalar_flux = 'sflux_g0 sflux_g1 sflux_g2 sflux_g3 sflux_g4
sflux_g5 sflux_g6 sflux_g7 sflux_g8'
variable = prompt_power_density
cross_section = kappa_sigma_fission
scale_factor = power_scaling
dummies = UnscaledTotalPower
execute_on = 'INITIAL timestep_end'
[]
[pden_max_aux]
type = ArrayVarExtremeValueAux
block = 'pebble_bed'
variable = pden_max
array_variable = partial_power_density
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[pden_avg_aux]
type = PebbleAveragedAux
block = 'pebble_bed'
variable = pden_avg
array_variable = partial_power_density
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[power_peaking_aux]
type = ParsedAux
block = 'pebble_bed'
variable = power_peaking
coupled_variables = 'power_density'
expression = 'power_density / 3.21525E+06'
execute_on = 'initial timestep_end'
[]
[]
# These objects were used for manual restart
# [UserObjects]
# [power_map]
# type = VariableCartesianCoreMap
# variables = 'power_density'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'power_ss.out'
# []
# [isotopic_map]
# type = VariableCartesianCoreMap
# variables = ' isotope_density_U235 isotope_density_U236 isotope_density_U238 isotope_density_PU238
# isotope_density_PU239 isotope_density_PU240 isotope_density_PU241 isotope_density_PU242
# isotope_density_AM241 isotope_density_AM242M isotope_density_CS135 isotope_density_CS137
# isotope_density_XE135 isotope_density_XE136 isotope_density_I131 isotope_density_I135
# isotope_density_SR90'
# block = pebble_bed
# execute_on= 'FINAL'
# output_in = 'isotopics_ss.out'
# []
# [burnup_map]
# type = VariableCartesianCoreMap
# variables = 'Burnup_avg'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'burnup_ss.out'
# []
# [transport_solution]
# type = TransportSolutionVectorFile
# transport_system = diff
# writing = true
# execute_on = 'FINAL'
# []
# [depletion_solution]
# type = SolutionVectorFile
# var = 'pebble_isotope_density pebble_volume_fraction graphite_temperature
# triso_temperature power_density partial_power_density
# sflux_g0 sflux_g1 sflux_g2
# sflux_g3 sflux_g4 sflux_g5
# sflux_g6 sflux_g7 sflux_g8'
# writing = true
# execute_on = 'FINAL'
# []
# [TH_solution]
# type = SolutionVectorFile
# var = 'T_solid T_fluid'
# writing = true
# execute_on = 'FINAL'
# []
# [init_power_density]
# type = SolutionVectorFile
# var = 'prompt_power_density total_pebble_decay_heat'
# writing = true
# execute_on = 'FINAL'
# []
# []
# ==============================================================================
# MATERIALS
# ==============================================================================
[PebbleBed]
block = 'pebble_bed'
power = ${fparse total_power}
integrated_power_postprocessor = total_power
power_density_variable = power_density
family = MONOMIAL
order = CONSTANT
porosity_name = porosity
burnup_group_boundaries = ${burnup_group_boundaries}
# cross section data
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
burnup_grid_name = 'Burnup'
fuel_temperature_grid_name = 'Tfuel'
moderator_temperature_grid_name = 'Tmod'
# avoid physicality check (old XS library)
dtl_physicality = DISABLE
# transmutation data
dataset = ISOXML
isoxml_data_file = '../xsections/DRAGON5_DT_DH_295.xml'
isoxml_lib_name = 'DRAGON'
initial_moderator_temperature = ${initial_temperature}
initial_fuel_temperature = ${initial_temperature}
n_fresh_pebble_types = 1
fresh_pebble_compositions = 'fresh_pebble'
track_isotopes = ' U235 U236 U238 PU238 PU239 PU240 PU241 PU242 AM241
AM242M CS135 CS137 XE135 XE136 I131 I135 SR90'
output_densities_to_exodus = false
[DepletionScheme]
type = ConstantStreamlineEquilibrium
pebble_unloading_rate = ${pebble_unloading_rate}
pebble_flow_rate_distribution = '0.027777778 0.083333333 0.138888889 0.194444444 0.25 0.305555556'
burnup_limit = 4.818E+14
major_streamline_axis = y
pebble_diameter = 0.06
streamline_points = '${r_streamline_1} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_1} ${axial_reflector_height} 0;
${r_streamline_2} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_2} ${axial_reflector_height} 0;
${r_streamline_3} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_3} ${axial_reflector_height} 0;
${r_streamline_4} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_4} ${axial_reflector_height} 0;
${r_streamline_5} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_5} ${axial_reflector_height} 0;
${r_streamline_6} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_6} ${axial_reflector_height} 0'
streamline_segment_subdivisions = '20; 20; 20; 20; 20; 20'
sweep_tol = 1e-7
sweep_max_iterations = 200
[]
# pebble conduction
pebble_conduction_input_file = 'pebble_triso_ss.i'
pebble_positions_file = 'pebble_heat_pos.txt'
surface_temperature_sub_app_postprocessor = T_surface
surface_temperature_main_app_variable = T_solid
power_sub_app_postprocessor = pebble_power_density
fuel_temperature_sub_app_postprocessor = T_fuel
moderator_temperature_sub_app_postprocessor = T_mod
decay_heat = true
[]
[Materials]
# upper and lower reflectors at 70% density
[axial_reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'upper_ref lower_ref'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.25284E-02 0.0'
material_id = 1
[]
# upper lower plenum at 80% density
[plenum]
type = CoupledFeedbackNeutronicsMaterial
block = 'hot_plenum cold_plenum'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '7.14611E-02 0.0'
material_id = 1
[]
[reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'radial_ref carbon_brick'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '8.93263E-02 0.0'
material_id = 1
[]
# control_rod at 68% density
[control_rod]
type = CoupledFeedbackRoddedNeutronicsMaterial
block = 'cr'
grid_names = 'Tmod Tmod Tmod'
grid_variables = 'T_solid T_solid T_solid'
isotopes = ' Graphite ; Graphite B10 B11 C12 ; Graphite B10 B11 C12 '
densities = ' 6.4277e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 '
segment_material_ids = '1 1 1'
rod_segment_length = 11.878
front_position_function = 'CR_bott'
rod_withdrawn_direction = 'y'
[]
# riser at 68% density
[riser]
type = CoupledFeedbackNeutronicsMaterial
block = 'riser'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.07419E-02 0.0'
material_id = 1
[]
[cavity]
type = ConstantNeutronicsMaterial
block = 'cavity'
fromFile = false
# computed from Serpent CMM
diffusion_coef = '4.68857E-01 1.52760E-01 1.21025E-01 1.08241E-01 1.72433E-01 1.65906E-01 1.96579E-01 1.79868E-01 2.14727E-01'
sigma_r = '0 0 0 0 0 0 0 0 0'
sigma_s = ' 7.10949E-01 0 0 0 0 0 0 0 0
0 2.18207E+00 0 0 0 0 0 0 0
0 0 2.75425E+00 0 0 0 0 0 0
0 0 0 3.07955E+00 0 0 0 0 0
0 0 0 0 1.93312E+00 0 0 0 0
0 0 0 0 0 2.00917E+00 0 0 0
0 0 0 0 0 0 1.69567E+00 0 0
0 0 0 0 0 0 0 1.85321E+00 0
0 0 0 0 0 0 0 0 1.55236E+00'
diffusion_coefficient_scheme = user_supplied
[]
[]
[Compositions]
[fresh_pebble]
type = IsotopeComposition
density_type = atomic
isotope_densities = 'U234 1.0887E-07
U235 1.3550E-05
U238 1.4209E-04
O16 3.1137E-04
O17 1.1837E-07
Graphite 8.5357E-02
SI28 3.1399E-04
SI29 1.5944E-05
SI30 1.0510E-05
C12 3.4044E-04'
[]
[]
# ==============================================================================
# MultiApps & Transfers
# ==============================================================================
[MultiApps]
[flow]
type = FullSolveMultiApp
input_files = 'htr-pm-flow-fv-ss.i'
keep_solution_during_restore = true
update_old_solution_when_keeping_solution_during_restore = true
positions = '0 0 0'
execute_on = 'TIMESTEP_END'
[]
[]
[Transfers]
[power_density_to_flow]
type = MultiAppNearestNodeTransfer
to_multi_app = flow
source_variable = power_density
variable = power_density
fixed_meshes = true
execute_on = 'TIMESTEP_END'
[]
[T_solid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_solid
variable = T_solid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[T_fluid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_fluid
variable = T_fluid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Eigenvalue
solve_type = PJFNKMO
constant_matrices = true
petsc_options_iname = '-pc_type -pc_hypre_type -ksp_gmres_restart '
petsc_options_value = 'hypre boomeramg 100'
line_search = l2 #none
# Linear/nonlinear iterations.
l_max_its = 200
l_tol = 1e-3
nl_max_its = 200
# tolerances on the equilibrium calculation are
# similar to on the transients at this time, a small drift
# in the null transient could occur
nl_rel_tol = 1e-5
nl_abs_tol = 1e-6
fixed_point_max_its = 50
fixed_point_rel_tol = 1e-5
fixed_point_abs_tol = 1e-6
free_power_iterations = 4
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Outputs]
file_base = htr_pm_griffin_ss_out
checkpoint = true
exodus = true
csv = true
perf_graph = true
execute_on = 'INITIAL FINAL TIMESTEP_END'
[]
[Postprocessors]
[Tsolid_max]
type = ElementExtremeValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tsolid_avg]
type = ElementAverageValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tfluid_avg]
type = ElementAverageValue
variable = T_fluid
execute_on = 'initial timestep_end'
[]
[Tfuel_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tfuel_max]
type = ElementExtremeValue
block = 'pebble_bed'
value_type = max
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tmod_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tmod_avg
execute_on = 'initial timestep_end'
[]
[Tmod_max]
type = ElementExtremeValue
block = 'pebble_bed'
variable = Tmod_max
value_type = max
execute_on = 'initial timestep_end'
[]
[Burnup_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Burnup_avg
execute_on = 'initial timestep_end'
[]
[UnscaledTotalPower]
type = FluxRxnIntegral
block = 'pebble_bed'
cross_section = kappa_sigma_fission
coupled_flux_groups = 'sflux_g0 sflux_g1 sflux_g2
sflux_g3 sflux_g4 sflux_g5
sflux_g6 sflux_g7 sflux_g8'
execute_on = 'initial transfer timestep_end'
[]
[prompt_power]
type = ElementIntegralVariablePostprocessor
block = 'pebble_bed'
variable = prompt_power_density
execute_on = 'initial transfer timestep_end'
[]
[avg_power_density]
type = ElementAverageValue
block = 'pebble_bed'
variable = power_density
execute_on = 'INITIAL transfer timestep_end'
[]
[power_peak]
type = ElementExtremeValue
variable = power_peaking
value_type = max
execute_on = 'initial timestep_end'
[]
[decay_heat]
type = ElementIntegralVariablePostprocessor
variable = total_pebble_decay_heat
block = 'pebble_bed'
execute_on = 'INITIAL TIMESTEP_END'
[]
[]
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)
# ==============================================================================
# Model description
# Equilibrium core neutronics model coupled with TH and pebble temperature models
# ------------------------------------------------------------------------------
# Idaho Falls, INL, April 11, 2023
# Author(s): Dr. Mustafa Jaradat Dr. Sebastian Schunert, Dr. Javier Ortensi
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
initial_temperature = 500.0 # (K)
total_power = 250.0e+6 # Total reactor Power (W)
burnup_group_boundaries = '5.35E+13 1.070E+14 1.604E+14 2.139E+14 2.674E+14 3.209E+14 3.743E+14 4.278E+14 4.818E+14'
# ==============================================================================
# parameters describing the reactor geometry
core_height = 11.0
axial_reflector_height = 3.228
fuel_radius = 1.5
r_streamline_1 = 12.5e-2
r_streamline_2 = 37.5e-2
r_streamline_3 = 62.5e-2
r_streamline_4 = 87.5e-2
r_streamline_5 = 112.5e-2
r_streamline_6 = 137.5e-2
pebble_radius = 3e-2
pebble_volume = ${fparse 4/3*pi * pebble_radius * pebble_radius * pebble_radius}
residence_time = 70.5
pebble_speed = ${fparse core_height / (residence_time * 3600 * 24)}
area = ${fparse pi * fuel_radius * fuel_radius}
pebble_unloading_rate = ${fparse pebble_speed * area * 0.61 / pebble_volume}
# ==============================================================================
# GLOBAL PARAMETERS
# ==============================================================================
[GlobalParams]
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
is_meter = true
plus = true
[]
[TransportSystems]
particle = neutron
equation_type = eigenvalue
G = 9
ReflectingBoundary = 'left'
VacuumBoundary = 'right top bottom'
[diff]
scheme = CFEM-Diffusion
family = LAGRANGE
order = FIRST
n_delay_groups = 6
assemble_scattering_jacobian = true
assemble_fission_jacobian = true
[]
[]
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
type = MeshGeneratorMesh
block_id = ' 1 2 3 4 5 6
7 8 61 71'
block_name = 'pebble_bed upper_ref lower_ref cavity hot_plenum cold_plenum
radial_ref carbon_brick riser cr'
#uniform_refine = 1
[cartesian_mesh]
type = CartesianMeshGenerator
dim = 2
# Total height: 16.8 m
dx = ' 0.250 0.250 0.250 0.250 0.250 0.250
0.010 0.050 0.130 0.080 0.080 0.080
0.200 0.120 0.125 0.125'
ix = ' 1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1'
dy = ' 0.400 0.400 0.100 0.100 0.800 0.300 0.200 0.300 0.216 0.412
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.760 0.712 0.300 0.400 0.400 '
# base: converges fine
iy = '1 1 1 1 2 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 2 1 1 1'
subdomain_id = ' 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
5 5 5 5 5 5 5 5 5 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
4 4 4 4 4 4 7 7 71 7 7 7 61 7 8 8
4 2 2 2 2 2 7 7 71 7 7 7 61 7 8 8
6 6 6 6 6 6 6 6 71 6 6 6 6 7 8 8
7 7 7 7 7 7 7 7 71 7 7 7 7 7 8 8
8 8 8 8 8 8 8 8 71 8 8 8 8 8 8 8 '
[]
[assign_material_id]
type = SubdomainExtraElementIDGenerator
input = cartesian_mesh
extra_element_id_names = 'material_id'
subdomains = '1 2 3 4 5 6 7 8 61 71'
extra_element_ids = '1 1 1 1 1 1 1 1 1 1'
[]
coord_type = RZ
[]
# ==============================================================================
# AUXVARIABLES AND AUXKERNELS
# ==============================================================================
[Functions]
[CR_bott]
type = ConstantFunction
value = '13.678'
[]
[]
[AuxVariables]
[T_solid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[T_fluid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[Tfuel_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tfuel_max]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_max]
order = CONSTANT
family = MONOMIAL
[]
[Burnup]
order = CONSTANT
family = MONOMIAL
components = 10
# use burnup midpoints and add one additional for discard group
initial_condition = '2.675E+13 8.025E+13 1.337E+14 1.872E+14 2.407E+14 2.942E+14 3.476E+14 4.011E+14 4.546E+14 4.546E+14'
outputs = none
[]
[Burnup_avg]
order = CONSTANT
family = MONOMIAL
[]
[porosity]
family = MONOMIAL
order = CONSTANT
initial_condition = 0.39
block = 'pebble_bed'
[]
# Prompt power density is only added automatically for transients
[prompt_power_density]
order = CONSTANT
family = MONOMIAL
[]
[power_peaking]
order = CONSTANT
family = MONOMIAL
[]
[pden_avg]
order = CONSTANT
family = MONOMIAL
[]
[pden_max]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[Tfuel_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tfuel_avg
array_variable = triso_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tfuel_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tfuel_max
array_variable = triso_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tmod_avg
array_variable = graphite_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tmod_max
array_variable = graphite_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Burnup_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Burnup_avg
array_variable = Burnup
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[prompt_power_density_aux]
type = VectorReactionRate
block = 'pebble_bed'
scalar_flux = 'sflux_g0 sflux_g1 sflux_g2 sflux_g3 sflux_g4
sflux_g5 sflux_g6 sflux_g7 sflux_g8'
variable = prompt_power_density
cross_section = kappa_sigma_fission
scale_factor = power_scaling
dummies = UnscaledTotalPower
execute_on = 'INITIAL timestep_end'
[]
[pden_max_aux]
type = ArrayVarExtremeValueAux
block = 'pebble_bed'
variable = pden_max
array_variable = partial_power_density
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[pden_avg_aux]
type = PebbleAveragedAux
block = 'pebble_bed'
variable = pden_avg
array_variable = partial_power_density
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[power_peaking_aux]
type = ParsedAux
block = 'pebble_bed'
variable = power_peaking
coupled_variables = 'power_density'
expression = 'power_density / 3.21525E+06'
execute_on = 'initial timestep_end'
[]
[]
# These objects were used for manual restart
# [UserObjects]
# [power_map]
# type = VariableCartesianCoreMap
# variables = 'power_density'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'power_ss.out'
# []
# [isotopic_map]
# type = VariableCartesianCoreMap
# variables = ' isotope_density_U235 isotope_density_U236 isotope_density_U238 isotope_density_PU238
# isotope_density_PU239 isotope_density_PU240 isotope_density_PU241 isotope_density_PU242
# isotope_density_AM241 isotope_density_AM242M isotope_density_CS135 isotope_density_CS137
# isotope_density_XE135 isotope_density_XE136 isotope_density_I131 isotope_density_I135
# isotope_density_SR90'
# block = pebble_bed
# execute_on= 'FINAL'
# output_in = 'isotopics_ss.out'
# []
# [burnup_map]
# type = VariableCartesianCoreMap
# variables = 'Burnup_avg'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'burnup_ss.out'
# []
# [transport_solution]
# type = TransportSolutionVectorFile
# transport_system = diff
# writing = true
# execute_on = 'FINAL'
# []
# [depletion_solution]
# type = SolutionVectorFile
# var = 'pebble_isotope_density pebble_volume_fraction graphite_temperature
# triso_temperature power_density partial_power_density
# sflux_g0 sflux_g1 sflux_g2
# sflux_g3 sflux_g4 sflux_g5
# sflux_g6 sflux_g7 sflux_g8'
# writing = true
# execute_on = 'FINAL'
# []
# [TH_solution]
# type = SolutionVectorFile
# var = 'T_solid T_fluid'
# writing = true
# execute_on = 'FINAL'
# []
# [init_power_density]
# type = SolutionVectorFile
# var = 'prompt_power_density total_pebble_decay_heat'
# writing = true
# execute_on = 'FINAL'
# []
# []
# ==============================================================================
# MATERIALS
# ==============================================================================
[PebbleBed]
block = 'pebble_bed'
power = ${fparse total_power}
integrated_power_postprocessor = total_power
power_density_variable = power_density
family = MONOMIAL
order = CONSTANT
porosity_name = porosity
burnup_group_boundaries = ${burnup_group_boundaries}
# cross section data
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
burnup_grid_name = 'Burnup'
fuel_temperature_grid_name = 'Tfuel'
moderator_temperature_grid_name = 'Tmod'
# avoid physicality check (old XS library)
dtl_physicality = DISABLE
# transmutation data
dataset = ISOXML
isoxml_data_file = '../xsections/DRAGON5_DT_DH_295.xml'
isoxml_lib_name = 'DRAGON'
initial_moderator_temperature = ${initial_temperature}
initial_fuel_temperature = ${initial_temperature}
n_fresh_pebble_types = 1
fresh_pebble_compositions = 'fresh_pebble'
track_isotopes = ' U235 U236 U238 PU238 PU239 PU240 PU241 PU242 AM241
AM242M CS135 CS137 XE135 XE136 I131 I135 SR90'
output_densities_to_exodus = false
[DepletionScheme]
type = ConstantStreamlineEquilibrium
pebble_unloading_rate = ${pebble_unloading_rate}
pebble_flow_rate_distribution = '0.027777778 0.083333333 0.138888889 0.194444444 0.25 0.305555556'
burnup_limit = 4.818E+14
major_streamline_axis = y
pebble_diameter = 0.06
streamline_points = '${r_streamline_1} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_1} ${axial_reflector_height} 0;
${r_streamline_2} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_2} ${axial_reflector_height} 0;
${r_streamline_3} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_3} ${axial_reflector_height} 0;
${r_streamline_4} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_4} ${axial_reflector_height} 0;
${r_streamline_5} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_5} ${axial_reflector_height} 0;
${r_streamline_6} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_6} ${axial_reflector_height} 0'
streamline_segment_subdivisions = '20; 20; 20; 20; 20; 20'
sweep_tol = 1e-7
sweep_max_iterations = 200
[]
# pebble conduction
pebble_conduction_input_file = 'pebble_triso_ss.i'
pebble_positions_file = 'pebble_heat_pos.txt'
surface_temperature_sub_app_postprocessor = T_surface
surface_temperature_main_app_variable = T_solid
power_sub_app_postprocessor = pebble_power_density
fuel_temperature_sub_app_postprocessor = T_fuel
moderator_temperature_sub_app_postprocessor = T_mod
decay_heat = true
[]
[Materials]
# upper and lower reflectors at 70% density
[axial_reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'upper_ref lower_ref'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.25284E-02 0.0'
material_id = 1
[]
# upper lower plenum at 80% density
[plenum]
type = CoupledFeedbackNeutronicsMaterial
block = 'hot_plenum cold_plenum'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '7.14611E-02 0.0'
material_id = 1
[]
[reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'radial_ref carbon_brick'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '8.93263E-02 0.0'
material_id = 1
[]
# control_rod at 68% density
[control_rod]
type = CoupledFeedbackRoddedNeutronicsMaterial
block = 'cr'
grid_names = 'Tmod Tmod Tmod'
grid_variables = 'T_solid T_solid T_solid'
isotopes = ' Graphite ; Graphite B10 B11 C12 ; Graphite B10 B11 C12 '
densities = ' 6.4277e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 '
segment_material_ids = '1 1 1'
rod_segment_length = 11.878
front_position_function = 'CR_bott'
rod_withdrawn_direction = 'y'
[]
# riser at 68% density
[riser]
type = CoupledFeedbackNeutronicsMaterial
block = 'riser'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.07419E-02 0.0'
material_id = 1
[]
[cavity]
type = ConstantNeutronicsMaterial
block = 'cavity'
fromFile = false
# computed from Serpent CMM
diffusion_coef = '4.68857E-01 1.52760E-01 1.21025E-01 1.08241E-01 1.72433E-01 1.65906E-01 1.96579E-01 1.79868E-01 2.14727E-01'
sigma_r = '0 0 0 0 0 0 0 0 0'
sigma_s = ' 7.10949E-01 0 0 0 0 0 0 0 0
0 2.18207E+00 0 0 0 0 0 0 0
0 0 2.75425E+00 0 0 0 0 0 0
0 0 0 3.07955E+00 0 0 0 0 0
0 0 0 0 1.93312E+00 0 0 0 0
0 0 0 0 0 2.00917E+00 0 0 0
0 0 0 0 0 0 1.69567E+00 0 0
0 0 0 0 0 0 0 1.85321E+00 0
0 0 0 0 0 0 0 0 1.55236E+00'
diffusion_coefficient_scheme = user_supplied
[]
[]
[Compositions]
[fresh_pebble]
type = IsotopeComposition
density_type = atomic
isotope_densities = 'U234 1.0887E-07
U235 1.3550E-05
U238 1.4209E-04
O16 3.1137E-04
O17 1.1837E-07
Graphite 8.5357E-02
SI28 3.1399E-04
SI29 1.5944E-05
SI30 1.0510E-05
C12 3.4044E-04'
[]
[]
# ==============================================================================
# MultiApps & Transfers
# ==============================================================================
[MultiApps]
[flow]
type = FullSolveMultiApp
input_files = 'htr-pm-flow-fv-ss.i'
keep_solution_during_restore = true
update_old_solution_when_keeping_solution_during_restore = true
positions = '0 0 0'
execute_on = 'TIMESTEP_END'
[]
[]
[Transfers]
[power_density_to_flow]
type = MultiAppNearestNodeTransfer
to_multi_app = flow
source_variable = power_density
variable = power_density
fixed_meshes = true
execute_on = 'TIMESTEP_END'
[]
[T_solid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_solid
variable = T_solid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[T_fluid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_fluid
variable = T_fluid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Eigenvalue
solve_type = PJFNKMO
constant_matrices = true
petsc_options_iname = '-pc_type -pc_hypre_type -ksp_gmres_restart '
petsc_options_value = 'hypre boomeramg 100'
line_search = l2 #none
# Linear/nonlinear iterations.
l_max_its = 200
l_tol = 1e-3
nl_max_its = 200
# tolerances on the equilibrium calculation are
# similar to on the transients at this time, a small drift
# in the null transient could occur
nl_rel_tol = 1e-5
nl_abs_tol = 1e-6
fixed_point_max_its = 50
fixed_point_rel_tol = 1e-5
fixed_point_abs_tol = 1e-6
free_power_iterations = 4
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Outputs]
file_base = htr_pm_griffin_ss_out
checkpoint = true
exodus = true
csv = true
perf_graph = true
execute_on = 'INITIAL FINAL TIMESTEP_END'
[]
[Postprocessors]
[Tsolid_max]
type = ElementExtremeValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tsolid_avg]
type = ElementAverageValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tfluid_avg]
type = ElementAverageValue
variable = T_fluid
execute_on = 'initial timestep_end'
[]
[Tfuel_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tfuel_max]
type = ElementExtremeValue
block = 'pebble_bed'
value_type = max
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tmod_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tmod_avg
execute_on = 'initial timestep_end'
[]
[Tmod_max]
type = ElementExtremeValue
block = 'pebble_bed'
variable = Tmod_max
value_type = max
execute_on = 'initial timestep_end'
[]
[Burnup_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Burnup_avg
execute_on = 'initial timestep_end'
[]
[UnscaledTotalPower]
type = FluxRxnIntegral
block = 'pebble_bed'
cross_section = kappa_sigma_fission
coupled_flux_groups = 'sflux_g0 sflux_g1 sflux_g2
sflux_g3 sflux_g4 sflux_g5
sflux_g6 sflux_g7 sflux_g8'
execute_on = 'initial transfer timestep_end'
[]
[prompt_power]
type = ElementIntegralVariablePostprocessor
block = 'pebble_bed'
variable = prompt_power_density
execute_on = 'initial transfer timestep_end'
[]
[avg_power_density]
type = ElementAverageValue
block = 'pebble_bed'
variable = power_density
execute_on = 'INITIAL transfer timestep_end'
[]
[power_peak]
type = ElementExtremeValue
variable = power_peaking
value_type = max
execute_on = 'initial timestep_end'
[]
[decay_heat]
type = ElementIntegralVariablePostprocessor
variable = total_pebble_decay_heat
block = 'pebble_bed'
execute_on = 'INITIAL TIMESTEP_END'
[]
[]
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)
# ==============================================================================
# Model description
# Equilibrium core neutronics model coupled with TH and pebble temperature models
# ------------------------------------------------------------------------------
# Idaho Falls, INL, April 11, 2023
# Author(s): Dr. Mustafa Jaradat Dr. Sebastian Schunert, Dr. Javier Ortensi
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
initial_temperature = 500.0 # (K)
total_power = 250.0e+6 # Total reactor Power (W)
burnup_group_boundaries = '5.35E+13 1.070E+14 1.604E+14 2.139E+14 2.674E+14 3.209E+14 3.743E+14 4.278E+14 4.818E+14'
# ==============================================================================
# parameters describing the reactor geometry
core_height = 11.0
axial_reflector_height = 3.228
fuel_radius = 1.5
r_streamline_1 = 12.5e-2
r_streamline_2 = 37.5e-2
r_streamline_3 = 62.5e-2
r_streamline_4 = 87.5e-2
r_streamline_5 = 112.5e-2
r_streamline_6 = 137.5e-2
pebble_radius = 3e-2
pebble_volume = ${fparse 4/3*pi * pebble_radius * pebble_radius * pebble_radius}
residence_time = 70.5
pebble_speed = ${fparse core_height / (residence_time * 3600 * 24)}
area = ${fparse pi * fuel_radius * fuel_radius}
pebble_unloading_rate = ${fparse pebble_speed * area * 0.61 / pebble_volume}
# ==============================================================================
# GLOBAL PARAMETERS
# ==============================================================================
[GlobalParams]
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
is_meter = true
plus = true
[]
[TransportSystems]
particle = neutron
equation_type = eigenvalue
G = 9
ReflectingBoundary = 'left'
VacuumBoundary = 'right top bottom'
[diff]
scheme = CFEM-Diffusion
family = LAGRANGE
order = FIRST
n_delay_groups = 6
assemble_scattering_jacobian = true
assemble_fission_jacobian = true
[]
[]
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
type = MeshGeneratorMesh
block_id = ' 1 2 3 4 5 6
7 8 61 71'
block_name = 'pebble_bed upper_ref lower_ref cavity hot_plenum cold_plenum
radial_ref carbon_brick riser cr'
#uniform_refine = 1
[cartesian_mesh]
type = CartesianMeshGenerator
dim = 2
# Total height: 16.8 m
dx = ' 0.250 0.250 0.250 0.250 0.250 0.250
0.010 0.050 0.130 0.080 0.080 0.080
0.200 0.120 0.125 0.125'
ix = ' 1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1'
dy = ' 0.400 0.400 0.100 0.100 0.800 0.300 0.200 0.300 0.216 0.412
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.760 0.712 0.300 0.400 0.400 '
# base: converges fine
iy = '1 1 1 1 2 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 2 1 1 1'
subdomain_id = ' 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
5 5 5 5 5 5 5 5 5 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
4 4 4 4 4 4 7 7 71 7 7 7 61 7 8 8
4 2 2 2 2 2 7 7 71 7 7 7 61 7 8 8
6 6 6 6 6 6 6 6 71 6 6 6 6 7 8 8
7 7 7 7 7 7 7 7 71 7 7 7 7 7 8 8
8 8 8 8 8 8 8 8 71 8 8 8 8 8 8 8 '
[]
[assign_material_id]
type = SubdomainExtraElementIDGenerator
input = cartesian_mesh
extra_element_id_names = 'material_id'
subdomains = '1 2 3 4 5 6 7 8 61 71'
extra_element_ids = '1 1 1 1 1 1 1 1 1 1'
[]
coord_type = RZ
[]
# ==============================================================================
# AUXVARIABLES AND AUXKERNELS
# ==============================================================================
[Functions]
[CR_bott]
type = ConstantFunction
value = '13.678'
[]
[]
[AuxVariables]
[T_solid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[T_fluid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[Tfuel_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tfuel_max]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_max]
order = CONSTANT
family = MONOMIAL
[]
[Burnup]
order = CONSTANT
family = MONOMIAL
components = 10
# use burnup midpoints and add one additional for discard group
initial_condition = '2.675E+13 8.025E+13 1.337E+14 1.872E+14 2.407E+14 2.942E+14 3.476E+14 4.011E+14 4.546E+14 4.546E+14'
outputs = none
[]
[Burnup_avg]
order = CONSTANT
family = MONOMIAL
[]
[porosity]
family = MONOMIAL
order = CONSTANT
initial_condition = 0.39
block = 'pebble_bed'
[]
# Prompt power density is only added automatically for transients
[prompt_power_density]
order = CONSTANT
family = MONOMIAL
[]
[power_peaking]
order = CONSTANT
family = MONOMIAL
[]
[pden_avg]
order = CONSTANT
family = MONOMIAL
[]
[pden_max]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[Tfuel_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tfuel_avg
array_variable = triso_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tfuel_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tfuel_max
array_variable = triso_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tmod_avg
array_variable = graphite_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tmod_max
array_variable = graphite_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Burnup_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Burnup_avg
array_variable = Burnup
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[prompt_power_density_aux]
type = VectorReactionRate
block = 'pebble_bed'
scalar_flux = 'sflux_g0 sflux_g1 sflux_g2 sflux_g3 sflux_g4
sflux_g5 sflux_g6 sflux_g7 sflux_g8'
variable = prompt_power_density
cross_section = kappa_sigma_fission
scale_factor = power_scaling
dummies = UnscaledTotalPower
execute_on = 'INITIAL timestep_end'
[]
[pden_max_aux]
type = ArrayVarExtremeValueAux
block = 'pebble_bed'
variable = pden_max
array_variable = partial_power_density
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[pden_avg_aux]
type = PebbleAveragedAux
block = 'pebble_bed'
variable = pden_avg
array_variable = partial_power_density
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[power_peaking_aux]
type = ParsedAux
block = 'pebble_bed'
variable = power_peaking
coupled_variables = 'power_density'
expression = 'power_density / 3.21525E+06'
execute_on = 'initial timestep_end'
[]
[]
# These objects were used for manual restart
# [UserObjects]
# [power_map]
# type = VariableCartesianCoreMap
# variables = 'power_density'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'power_ss.out'
# []
# [isotopic_map]
# type = VariableCartesianCoreMap
# variables = ' isotope_density_U235 isotope_density_U236 isotope_density_U238 isotope_density_PU238
# isotope_density_PU239 isotope_density_PU240 isotope_density_PU241 isotope_density_PU242
# isotope_density_AM241 isotope_density_AM242M isotope_density_CS135 isotope_density_CS137
# isotope_density_XE135 isotope_density_XE136 isotope_density_I131 isotope_density_I135
# isotope_density_SR90'
# block = pebble_bed
# execute_on= 'FINAL'
# output_in = 'isotopics_ss.out'
# []
# [burnup_map]
# type = VariableCartesianCoreMap
# variables = 'Burnup_avg'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'burnup_ss.out'
# []
# [transport_solution]
# type = TransportSolutionVectorFile
# transport_system = diff
# writing = true
# execute_on = 'FINAL'
# []
# [depletion_solution]
# type = SolutionVectorFile
# var = 'pebble_isotope_density pebble_volume_fraction graphite_temperature
# triso_temperature power_density partial_power_density
# sflux_g0 sflux_g1 sflux_g2
# sflux_g3 sflux_g4 sflux_g5
# sflux_g6 sflux_g7 sflux_g8'
# writing = true
# execute_on = 'FINAL'
# []
# [TH_solution]
# type = SolutionVectorFile
# var = 'T_solid T_fluid'
# writing = true
# execute_on = 'FINAL'
# []
# [init_power_density]
# type = SolutionVectorFile
# var = 'prompt_power_density total_pebble_decay_heat'
# writing = true
# execute_on = 'FINAL'
# []
# []
# ==============================================================================
# MATERIALS
# ==============================================================================
[PebbleBed]
block = 'pebble_bed'
power = ${fparse total_power}
integrated_power_postprocessor = total_power
power_density_variable = power_density
family = MONOMIAL
order = CONSTANT
porosity_name = porosity
burnup_group_boundaries = ${burnup_group_boundaries}
# cross section data
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
burnup_grid_name = 'Burnup'
fuel_temperature_grid_name = 'Tfuel'
moderator_temperature_grid_name = 'Tmod'
# avoid physicality check (old XS library)
dtl_physicality = DISABLE
# transmutation data
dataset = ISOXML
isoxml_data_file = '../xsections/DRAGON5_DT_DH_295.xml'
isoxml_lib_name = 'DRAGON'
initial_moderator_temperature = ${initial_temperature}
initial_fuel_temperature = ${initial_temperature}
n_fresh_pebble_types = 1
fresh_pebble_compositions = 'fresh_pebble'
track_isotopes = ' U235 U236 U238 PU238 PU239 PU240 PU241 PU242 AM241
AM242M CS135 CS137 XE135 XE136 I131 I135 SR90'
output_densities_to_exodus = false
[DepletionScheme]
type = ConstantStreamlineEquilibrium
pebble_unloading_rate = ${pebble_unloading_rate}
pebble_flow_rate_distribution = '0.027777778 0.083333333 0.138888889 0.194444444 0.25 0.305555556'
burnup_limit = 4.818E+14
major_streamline_axis = y
pebble_diameter = 0.06
streamline_points = '${r_streamline_1} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_1} ${axial_reflector_height} 0;
${r_streamline_2} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_2} ${axial_reflector_height} 0;
${r_streamline_3} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_3} ${axial_reflector_height} 0;
${r_streamline_4} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_4} ${axial_reflector_height} 0;
${r_streamline_5} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_5} ${axial_reflector_height} 0;
${r_streamline_6} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_6} ${axial_reflector_height} 0'
streamline_segment_subdivisions = '20; 20; 20; 20; 20; 20'
sweep_tol = 1e-7
sweep_max_iterations = 200
[]
# pebble conduction
pebble_conduction_input_file = 'pebble_triso_ss.i'
pebble_positions_file = 'pebble_heat_pos.txt'
surface_temperature_sub_app_postprocessor = T_surface
surface_temperature_main_app_variable = T_solid
power_sub_app_postprocessor = pebble_power_density
fuel_temperature_sub_app_postprocessor = T_fuel
moderator_temperature_sub_app_postprocessor = T_mod
decay_heat = true
[]
[Materials]
# upper and lower reflectors at 70% density
[axial_reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'upper_ref lower_ref'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.25284E-02 0.0'
material_id = 1
[]
# upper lower plenum at 80% density
[plenum]
type = CoupledFeedbackNeutronicsMaterial
block = 'hot_plenum cold_plenum'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '7.14611E-02 0.0'
material_id = 1
[]
[reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'radial_ref carbon_brick'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '8.93263E-02 0.0'
material_id = 1
[]
# control_rod at 68% density
[control_rod]
type = CoupledFeedbackRoddedNeutronicsMaterial
block = 'cr'
grid_names = 'Tmod Tmod Tmod'
grid_variables = 'T_solid T_solid T_solid'
isotopes = ' Graphite ; Graphite B10 B11 C12 ; Graphite B10 B11 C12 '
densities = ' 6.4277e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 '
segment_material_ids = '1 1 1'
rod_segment_length = 11.878
front_position_function = 'CR_bott'
rod_withdrawn_direction = 'y'
[]
# riser at 68% density
[riser]
type = CoupledFeedbackNeutronicsMaterial
block = 'riser'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.07419E-02 0.0'
material_id = 1
[]
[cavity]
type = ConstantNeutronicsMaterial
block = 'cavity'
fromFile = false
# computed from Serpent CMM
diffusion_coef = '4.68857E-01 1.52760E-01 1.21025E-01 1.08241E-01 1.72433E-01 1.65906E-01 1.96579E-01 1.79868E-01 2.14727E-01'
sigma_r = '0 0 0 0 0 0 0 0 0'
sigma_s = ' 7.10949E-01 0 0 0 0 0 0 0 0
0 2.18207E+00 0 0 0 0 0 0 0
0 0 2.75425E+00 0 0 0 0 0 0
0 0 0 3.07955E+00 0 0 0 0 0
0 0 0 0 1.93312E+00 0 0 0 0
0 0 0 0 0 2.00917E+00 0 0 0
0 0 0 0 0 0 1.69567E+00 0 0
0 0 0 0 0 0 0 1.85321E+00 0
0 0 0 0 0 0 0 0 1.55236E+00'
diffusion_coefficient_scheme = user_supplied
[]
[]
[Compositions]
[fresh_pebble]
type = IsotopeComposition
density_type = atomic
isotope_densities = 'U234 1.0887E-07
U235 1.3550E-05
U238 1.4209E-04
O16 3.1137E-04
O17 1.1837E-07
Graphite 8.5357E-02
SI28 3.1399E-04
SI29 1.5944E-05
SI30 1.0510E-05
C12 3.4044E-04'
[]
[]
# ==============================================================================
# MultiApps & Transfers
# ==============================================================================
[MultiApps]
[flow]
type = FullSolveMultiApp
input_files = 'htr-pm-flow-fv-ss.i'
keep_solution_during_restore = true
update_old_solution_when_keeping_solution_during_restore = true
positions = '0 0 0'
execute_on = 'TIMESTEP_END'
[]
[]
[Transfers]
[power_density_to_flow]
type = MultiAppNearestNodeTransfer
to_multi_app = flow
source_variable = power_density
variable = power_density
fixed_meshes = true
execute_on = 'TIMESTEP_END'
[]
[T_solid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_solid
variable = T_solid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[T_fluid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_fluid
variable = T_fluid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Eigenvalue
solve_type = PJFNKMO
constant_matrices = true
petsc_options_iname = '-pc_type -pc_hypre_type -ksp_gmres_restart '
petsc_options_value = 'hypre boomeramg 100'
line_search = l2 #none
# Linear/nonlinear iterations.
l_max_its = 200
l_tol = 1e-3
nl_max_its = 200
# tolerances on the equilibrium calculation are
# similar to on the transients at this time, a small drift
# in the null transient could occur
nl_rel_tol = 1e-5
nl_abs_tol = 1e-6
fixed_point_max_its = 50
fixed_point_rel_tol = 1e-5
fixed_point_abs_tol = 1e-6
free_power_iterations = 4
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Outputs]
file_base = htr_pm_griffin_ss_out
checkpoint = true
exodus = true
csv = true
perf_graph = true
execute_on = 'INITIAL FINAL TIMESTEP_END'
[]
[Postprocessors]
[Tsolid_max]
type = ElementExtremeValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tsolid_avg]
type = ElementAverageValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tfluid_avg]
type = ElementAverageValue
variable = T_fluid
execute_on = 'initial timestep_end'
[]
[Tfuel_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tfuel_max]
type = ElementExtremeValue
block = 'pebble_bed'
value_type = max
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tmod_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tmod_avg
execute_on = 'initial timestep_end'
[]
[Tmod_max]
type = ElementExtremeValue
block = 'pebble_bed'
variable = Tmod_max
value_type = max
execute_on = 'initial timestep_end'
[]
[Burnup_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Burnup_avg
execute_on = 'initial timestep_end'
[]
[UnscaledTotalPower]
type = FluxRxnIntegral
block = 'pebble_bed'
cross_section = kappa_sigma_fission
coupled_flux_groups = 'sflux_g0 sflux_g1 sflux_g2
sflux_g3 sflux_g4 sflux_g5
sflux_g6 sflux_g7 sflux_g8'
execute_on = 'initial transfer timestep_end'
[]
[prompt_power]
type = ElementIntegralVariablePostprocessor
block = 'pebble_bed'
variable = prompt_power_density
execute_on = 'initial transfer timestep_end'
[]
[avg_power_density]
type = ElementAverageValue
block = 'pebble_bed'
variable = power_density
execute_on = 'INITIAL transfer timestep_end'
[]
[power_peak]
type = ElementExtremeValue
variable = power_peaking
value_type = max
execute_on = 'initial timestep_end'
[]
[decay_heat]
type = ElementIntegralVariablePostprocessor
variable = total_pebble_decay_heat
block = 'pebble_bed'
execute_on = 'INITIAL TIMESTEP_END'
[]
[]
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)
# ==============================================================================
# Model description
# Equilibrium core neutronics model coupled with TH and pebble temperature models
# ------------------------------------------------------------------------------
# Idaho Falls, INL, April 11, 2023
# Author(s): Dr. Mustafa Jaradat Dr. Sebastian Schunert, Dr. Javier Ortensi
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
initial_temperature = 500.0 # (K)
total_power = 250.0e+6 # Total reactor Power (W)
burnup_group_boundaries = '5.35E+13 1.070E+14 1.604E+14 2.139E+14 2.674E+14 3.209E+14 3.743E+14 4.278E+14 4.818E+14'
# ==============================================================================
# parameters describing the reactor geometry
core_height = 11.0
axial_reflector_height = 3.228
fuel_radius = 1.5
r_streamline_1 = 12.5e-2
r_streamline_2 = 37.5e-2
r_streamline_3 = 62.5e-2
r_streamline_4 = 87.5e-2
r_streamline_5 = 112.5e-2
r_streamline_6 = 137.5e-2
pebble_radius = 3e-2
pebble_volume = ${fparse 4/3*pi * pebble_radius * pebble_radius * pebble_radius}
residence_time = 70.5
pebble_speed = ${fparse core_height / (residence_time * 3600 * 24)}
area = ${fparse pi * fuel_radius * fuel_radius}
pebble_unloading_rate = ${fparse pebble_speed * area * 0.61 / pebble_volume}
# ==============================================================================
# GLOBAL PARAMETERS
# ==============================================================================
[GlobalParams]
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
is_meter = true
plus = true
[]
[TransportSystems]
particle = neutron
equation_type = eigenvalue
G = 9
ReflectingBoundary = 'left'
VacuumBoundary = 'right top bottom'
[diff]
scheme = CFEM-Diffusion
family = LAGRANGE
order = FIRST
n_delay_groups = 6
assemble_scattering_jacobian = true
assemble_fission_jacobian = true
[]
[]
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
type = MeshGeneratorMesh
block_id = ' 1 2 3 4 5 6
7 8 61 71'
block_name = 'pebble_bed upper_ref lower_ref cavity hot_plenum cold_plenum
radial_ref carbon_brick riser cr'
#uniform_refine = 1
[cartesian_mesh]
type = CartesianMeshGenerator
dim = 2
# Total height: 16.8 m
dx = ' 0.250 0.250 0.250 0.250 0.250 0.250
0.010 0.050 0.130 0.080 0.080 0.080
0.200 0.120 0.125 0.125'
ix = ' 1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1'
dy = ' 0.400 0.400 0.100 0.100 0.800 0.300 0.200 0.300 0.216 0.412
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.760 0.712 0.300 0.400 0.400 '
# base: converges fine
iy = '1 1 1 1 2 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 2 1 1 1'
subdomain_id = ' 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
5 5 5 5 5 5 5 5 5 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
4 4 4 4 4 4 7 7 71 7 7 7 61 7 8 8
4 2 2 2 2 2 7 7 71 7 7 7 61 7 8 8
6 6 6 6 6 6 6 6 71 6 6 6 6 7 8 8
7 7 7 7 7 7 7 7 71 7 7 7 7 7 8 8
8 8 8 8 8 8 8 8 71 8 8 8 8 8 8 8 '
[]
[assign_material_id]
type = SubdomainExtraElementIDGenerator
input = cartesian_mesh
extra_element_id_names = 'material_id'
subdomains = '1 2 3 4 5 6 7 8 61 71'
extra_element_ids = '1 1 1 1 1 1 1 1 1 1'
[]
coord_type = RZ
[]
# ==============================================================================
# AUXVARIABLES AND AUXKERNELS
# ==============================================================================
[Functions]
[CR_bott]
type = ConstantFunction
value = '13.678'
[]
[]
[AuxVariables]
[T_solid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[T_fluid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[Tfuel_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tfuel_max]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_max]
order = CONSTANT
family = MONOMIAL
[]
[Burnup]
order = CONSTANT
family = MONOMIAL
components = 10
# use burnup midpoints and add one additional for discard group
initial_condition = '2.675E+13 8.025E+13 1.337E+14 1.872E+14 2.407E+14 2.942E+14 3.476E+14 4.011E+14 4.546E+14 4.546E+14'
outputs = none
[]
[Burnup_avg]
order = CONSTANT
family = MONOMIAL
[]
[porosity]
family = MONOMIAL
order = CONSTANT
initial_condition = 0.39
block = 'pebble_bed'
[]
# Prompt power density is only added automatically for transients
[prompt_power_density]
order = CONSTANT
family = MONOMIAL
[]
[power_peaking]
order = CONSTANT
family = MONOMIAL
[]
[pden_avg]
order = CONSTANT
family = MONOMIAL
[]
[pden_max]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[Tfuel_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tfuel_avg
array_variable = triso_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tfuel_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tfuel_max
array_variable = triso_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tmod_avg
array_variable = graphite_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tmod_max
array_variable = graphite_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Burnup_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Burnup_avg
array_variable = Burnup
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[prompt_power_density_aux]
type = VectorReactionRate
block = 'pebble_bed'
scalar_flux = 'sflux_g0 sflux_g1 sflux_g2 sflux_g3 sflux_g4
sflux_g5 sflux_g6 sflux_g7 sflux_g8'
variable = prompt_power_density
cross_section = kappa_sigma_fission
scale_factor = power_scaling
dummies = UnscaledTotalPower
execute_on = 'INITIAL timestep_end'
[]
[pden_max_aux]
type = ArrayVarExtremeValueAux
block = 'pebble_bed'
variable = pden_max
array_variable = partial_power_density
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[pden_avg_aux]
type = PebbleAveragedAux
block = 'pebble_bed'
variable = pden_avg
array_variable = partial_power_density
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[power_peaking_aux]
type = ParsedAux
block = 'pebble_bed'
variable = power_peaking
coupled_variables = 'power_density'
expression = 'power_density / 3.21525E+06'
execute_on = 'initial timestep_end'
[]
[]
# These objects were used for manual restart
# [UserObjects]
# [power_map]
# type = VariableCartesianCoreMap
# variables = 'power_density'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'power_ss.out'
# []
# [isotopic_map]
# type = VariableCartesianCoreMap
# variables = ' isotope_density_U235 isotope_density_U236 isotope_density_U238 isotope_density_PU238
# isotope_density_PU239 isotope_density_PU240 isotope_density_PU241 isotope_density_PU242
# isotope_density_AM241 isotope_density_AM242M isotope_density_CS135 isotope_density_CS137
# isotope_density_XE135 isotope_density_XE136 isotope_density_I131 isotope_density_I135
# isotope_density_SR90'
# block = pebble_bed
# execute_on= 'FINAL'
# output_in = 'isotopics_ss.out'
# []
# [burnup_map]
# type = VariableCartesianCoreMap
# variables = 'Burnup_avg'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'burnup_ss.out'
# []
# [transport_solution]
# type = TransportSolutionVectorFile
# transport_system = diff
# writing = true
# execute_on = 'FINAL'
# []
# [depletion_solution]
# type = SolutionVectorFile
# var = 'pebble_isotope_density pebble_volume_fraction graphite_temperature
# triso_temperature power_density partial_power_density
# sflux_g0 sflux_g1 sflux_g2
# sflux_g3 sflux_g4 sflux_g5
# sflux_g6 sflux_g7 sflux_g8'
# writing = true
# execute_on = 'FINAL'
# []
# [TH_solution]
# type = SolutionVectorFile
# var = 'T_solid T_fluid'
# writing = true
# execute_on = 'FINAL'
# []
# [init_power_density]
# type = SolutionVectorFile
# var = 'prompt_power_density total_pebble_decay_heat'
# writing = true
# execute_on = 'FINAL'
# []
# []
# ==============================================================================
# MATERIALS
# ==============================================================================
[PebbleBed]
block = 'pebble_bed'
power = ${fparse total_power}
integrated_power_postprocessor = total_power
power_density_variable = power_density
family = MONOMIAL
order = CONSTANT
porosity_name = porosity
burnup_group_boundaries = ${burnup_group_boundaries}
# cross section data
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
burnup_grid_name = 'Burnup'
fuel_temperature_grid_name = 'Tfuel'
moderator_temperature_grid_name = 'Tmod'
# avoid physicality check (old XS library)
dtl_physicality = DISABLE
# transmutation data
dataset = ISOXML
isoxml_data_file = '../xsections/DRAGON5_DT_DH_295.xml'
isoxml_lib_name = 'DRAGON'
initial_moderator_temperature = ${initial_temperature}
initial_fuel_temperature = ${initial_temperature}
n_fresh_pebble_types = 1
fresh_pebble_compositions = 'fresh_pebble'
track_isotopes = ' U235 U236 U238 PU238 PU239 PU240 PU241 PU242 AM241
AM242M CS135 CS137 XE135 XE136 I131 I135 SR90'
output_densities_to_exodus = false
[DepletionScheme]
type = ConstantStreamlineEquilibrium
pebble_unloading_rate = ${pebble_unloading_rate}
pebble_flow_rate_distribution = '0.027777778 0.083333333 0.138888889 0.194444444 0.25 0.305555556'
burnup_limit = 4.818E+14
major_streamline_axis = y
pebble_diameter = 0.06
streamline_points = '${r_streamline_1} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_1} ${axial_reflector_height} 0;
${r_streamline_2} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_2} ${axial_reflector_height} 0;
${r_streamline_3} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_3} ${axial_reflector_height} 0;
${r_streamline_4} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_4} ${axial_reflector_height} 0;
${r_streamline_5} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_5} ${axial_reflector_height} 0;
${r_streamline_6} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_6} ${axial_reflector_height} 0'
streamline_segment_subdivisions = '20; 20; 20; 20; 20; 20'
sweep_tol = 1e-7
sweep_max_iterations = 200
[]
# pebble conduction
pebble_conduction_input_file = 'pebble_triso_ss.i'
pebble_positions_file = 'pebble_heat_pos.txt'
surface_temperature_sub_app_postprocessor = T_surface
surface_temperature_main_app_variable = T_solid
power_sub_app_postprocessor = pebble_power_density
fuel_temperature_sub_app_postprocessor = T_fuel
moderator_temperature_sub_app_postprocessor = T_mod
decay_heat = true
[]
[Materials]
# upper and lower reflectors at 70% density
[axial_reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'upper_ref lower_ref'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.25284E-02 0.0'
material_id = 1
[]
# upper lower plenum at 80% density
[plenum]
type = CoupledFeedbackNeutronicsMaterial
block = 'hot_plenum cold_plenum'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '7.14611E-02 0.0'
material_id = 1
[]
[reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'radial_ref carbon_brick'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '8.93263E-02 0.0'
material_id = 1
[]
# control_rod at 68% density
[control_rod]
type = CoupledFeedbackRoddedNeutronicsMaterial
block = 'cr'
grid_names = 'Tmod Tmod Tmod'
grid_variables = 'T_solid T_solid T_solid'
isotopes = ' Graphite ; Graphite B10 B11 C12 ; Graphite B10 B11 C12 '
densities = ' 6.4277e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 '
segment_material_ids = '1 1 1'
rod_segment_length = 11.878
front_position_function = 'CR_bott'
rod_withdrawn_direction = 'y'
[]
# riser at 68% density
[riser]
type = CoupledFeedbackNeutronicsMaterial
block = 'riser'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.07419E-02 0.0'
material_id = 1
[]
[cavity]
type = ConstantNeutronicsMaterial
block = 'cavity'
fromFile = false
# computed from Serpent CMM
diffusion_coef = '4.68857E-01 1.52760E-01 1.21025E-01 1.08241E-01 1.72433E-01 1.65906E-01 1.96579E-01 1.79868E-01 2.14727E-01'
sigma_r = '0 0 0 0 0 0 0 0 0'
sigma_s = ' 7.10949E-01 0 0 0 0 0 0 0 0
0 2.18207E+00 0 0 0 0 0 0 0
0 0 2.75425E+00 0 0 0 0 0 0
0 0 0 3.07955E+00 0 0 0 0 0
0 0 0 0 1.93312E+00 0 0 0 0
0 0 0 0 0 2.00917E+00 0 0 0
0 0 0 0 0 0 1.69567E+00 0 0
0 0 0 0 0 0 0 1.85321E+00 0
0 0 0 0 0 0 0 0 1.55236E+00'
diffusion_coefficient_scheme = user_supplied
[]
[]
[Compositions]
[fresh_pebble]
type = IsotopeComposition
density_type = atomic
isotope_densities = 'U234 1.0887E-07
U235 1.3550E-05
U238 1.4209E-04
O16 3.1137E-04
O17 1.1837E-07
Graphite 8.5357E-02
SI28 3.1399E-04
SI29 1.5944E-05
SI30 1.0510E-05
C12 3.4044E-04'
[]
[]
# ==============================================================================
# MultiApps & Transfers
# ==============================================================================
[MultiApps]
[flow]
type = FullSolveMultiApp
input_files = 'htr-pm-flow-fv-ss.i'
keep_solution_during_restore = true
update_old_solution_when_keeping_solution_during_restore = true
positions = '0 0 0'
execute_on = 'TIMESTEP_END'
[]
[]
[Transfers]
[power_density_to_flow]
type = MultiAppNearestNodeTransfer
to_multi_app = flow
source_variable = power_density
variable = power_density
fixed_meshes = true
execute_on = 'TIMESTEP_END'
[]
[T_solid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_solid
variable = T_solid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[T_fluid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_fluid
variable = T_fluid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Eigenvalue
solve_type = PJFNKMO
constant_matrices = true
petsc_options_iname = '-pc_type -pc_hypre_type -ksp_gmres_restart '
petsc_options_value = 'hypre boomeramg 100'
line_search = l2 #none
# Linear/nonlinear iterations.
l_max_its = 200
l_tol = 1e-3
nl_max_its = 200
# tolerances on the equilibrium calculation are
# similar to on the transients at this time, a small drift
# in the null transient could occur
nl_rel_tol = 1e-5
nl_abs_tol = 1e-6
fixed_point_max_its = 50
fixed_point_rel_tol = 1e-5
fixed_point_abs_tol = 1e-6
free_power_iterations = 4
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Outputs]
file_base = htr_pm_griffin_ss_out
checkpoint = true
exodus = true
csv = true
perf_graph = true
execute_on = 'INITIAL FINAL TIMESTEP_END'
[]
[Postprocessors]
[Tsolid_max]
type = ElementExtremeValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tsolid_avg]
type = ElementAverageValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tfluid_avg]
type = ElementAverageValue
variable = T_fluid
execute_on = 'initial timestep_end'
[]
[Tfuel_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tfuel_max]
type = ElementExtremeValue
block = 'pebble_bed'
value_type = max
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tmod_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tmod_avg
execute_on = 'initial timestep_end'
[]
[Tmod_max]
type = ElementExtremeValue
block = 'pebble_bed'
variable = Tmod_max
value_type = max
execute_on = 'initial timestep_end'
[]
[Burnup_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Burnup_avg
execute_on = 'initial timestep_end'
[]
[UnscaledTotalPower]
type = FluxRxnIntegral
block = 'pebble_bed'
cross_section = kappa_sigma_fission
coupled_flux_groups = 'sflux_g0 sflux_g1 sflux_g2
sflux_g3 sflux_g4 sflux_g5
sflux_g6 sflux_g7 sflux_g8'
execute_on = 'initial transfer timestep_end'
[]
[prompt_power]
type = ElementIntegralVariablePostprocessor
block = 'pebble_bed'
variable = prompt_power_density
execute_on = 'initial transfer timestep_end'
[]
[avg_power_density]
type = ElementAverageValue
block = 'pebble_bed'
variable = power_density
execute_on = 'INITIAL transfer timestep_end'
[]
[power_peak]
type = ElementExtremeValue
variable = power_peaking
value_type = max
execute_on = 'initial timestep_end'
[]
[decay_heat]
type = ElementIntegralVariablePostprocessor
variable = total_pebble_decay_heat
block = 'pebble_bed'
execute_on = 'INITIAL TIMESTEP_END'
[]
[]
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)
# ==============================================================================
# Model description
# Equilibrium core neutronics model coupled with TH and pebble temperature models
# ------------------------------------------------------------------------------
# Idaho Falls, INL, April 11, 2023
# Author(s): Dr. Mustafa Jaradat Dr. Sebastian Schunert, Dr. Javier Ortensi
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
initial_temperature = 500.0 # (K)
total_power = 250.0e+6 # Total reactor Power (W)
burnup_group_boundaries = '5.35E+13 1.070E+14 1.604E+14 2.139E+14 2.674E+14 3.209E+14 3.743E+14 4.278E+14 4.818E+14'
# ==============================================================================
# parameters describing the reactor geometry
core_height = 11.0
axial_reflector_height = 3.228
fuel_radius = 1.5
r_streamline_1 = 12.5e-2
r_streamline_2 = 37.5e-2
r_streamline_3 = 62.5e-2
r_streamline_4 = 87.5e-2
r_streamline_5 = 112.5e-2
r_streamline_6 = 137.5e-2
pebble_radius = 3e-2
pebble_volume = ${fparse 4/3*pi * pebble_radius * pebble_radius * pebble_radius}
residence_time = 70.5
pebble_speed = ${fparse core_height / (residence_time * 3600 * 24)}
area = ${fparse pi * fuel_radius * fuel_radius}
pebble_unloading_rate = ${fparse pebble_speed * area * 0.61 / pebble_volume}
# ==============================================================================
# GLOBAL PARAMETERS
# ==============================================================================
[GlobalParams]
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
is_meter = true
plus = true
[]
[TransportSystems]
particle = neutron
equation_type = eigenvalue
G = 9
ReflectingBoundary = 'left'
VacuumBoundary = 'right top bottom'
[diff]
scheme = CFEM-Diffusion
family = LAGRANGE
order = FIRST
n_delay_groups = 6
assemble_scattering_jacobian = true
assemble_fission_jacobian = true
[]
[]
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
type = MeshGeneratorMesh
block_id = ' 1 2 3 4 5 6
7 8 61 71'
block_name = 'pebble_bed upper_ref lower_ref cavity hot_plenum cold_plenum
radial_ref carbon_brick riser cr'
#uniform_refine = 1
[cartesian_mesh]
type = CartesianMeshGenerator
dim = 2
# Total height: 16.8 m
dx = ' 0.250 0.250 0.250 0.250 0.250 0.250
0.010 0.050 0.130 0.080 0.080 0.080
0.200 0.120 0.125 0.125'
ix = ' 1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1'
dy = ' 0.400 0.400 0.100 0.100 0.800 0.300 0.200 0.300 0.216 0.412
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.760 0.712 0.300 0.400 0.400 '
# base: converges fine
iy = '1 1 1 1 2 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 2 1 1 1'
subdomain_id = ' 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
5 5 5 5 5 5 5 5 5 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
4 4 4 4 4 4 7 7 71 7 7 7 61 7 8 8
4 2 2 2 2 2 7 7 71 7 7 7 61 7 8 8
6 6 6 6 6 6 6 6 71 6 6 6 6 7 8 8
7 7 7 7 7 7 7 7 71 7 7 7 7 7 8 8
8 8 8 8 8 8 8 8 71 8 8 8 8 8 8 8 '
[]
[assign_material_id]
type = SubdomainExtraElementIDGenerator
input = cartesian_mesh
extra_element_id_names = 'material_id'
subdomains = '1 2 3 4 5 6 7 8 61 71'
extra_element_ids = '1 1 1 1 1 1 1 1 1 1'
[]
coord_type = RZ
[]
# ==============================================================================
# AUXVARIABLES AND AUXKERNELS
# ==============================================================================
[Functions]
[CR_bott]
type = ConstantFunction
value = '13.678'
[]
[]
[AuxVariables]
[T_solid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[T_fluid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[Tfuel_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tfuel_max]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_max]
order = CONSTANT
family = MONOMIAL
[]
[Burnup]
order = CONSTANT
family = MONOMIAL
components = 10
# use burnup midpoints and add one additional for discard group
initial_condition = '2.675E+13 8.025E+13 1.337E+14 1.872E+14 2.407E+14 2.942E+14 3.476E+14 4.011E+14 4.546E+14 4.546E+14'
outputs = none
[]
[Burnup_avg]
order = CONSTANT
family = MONOMIAL
[]
[porosity]
family = MONOMIAL
order = CONSTANT
initial_condition = 0.39
block = 'pebble_bed'
[]
# Prompt power density is only added automatically for transients
[prompt_power_density]
order = CONSTANT
family = MONOMIAL
[]
[power_peaking]
order = CONSTANT
family = MONOMIAL
[]
[pden_avg]
order = CONSTANT
family = MONOMIAL
[]
[pden_max]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[Tfuel_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tfuel_avg
array_variable = triso_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tfuel_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tfuel_max
array_variable = triso_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tmod_avg
array_variable = graphite_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tmod_max
array_variable = graphite_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Burnup_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Burnup_avg
array_variable = Burnup
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[prompt_power_density_aux]
type = VectorReactionRate
block = 'pebble_bed'
scalar_flux = 'sflux_g0 sflux_g1 sflux_g2 sflux_g3 sflux_g4
sflux_g5 sflux_g6 sflux_g7 sflux_g8'
variable = prompt_power_density
cross_section = kappa_sigma_fission
scale_factor = power_scaling
dummies = UnscaledTotalPower
execute_on = 'INITIAL timestep_end'
[]
[pden_max_aux]
type = ArrayVarExtremeValueAux
block = 'pebble_bed'
variable = pden_max
array_variable = partial_power_density
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[pden_avg_aux]
type = PebbleAveragedAux
block = 'pebble_bed'
variable = pden_avg
array_variable = partial_power_density
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[power_peaking_aux]
type = ParsedAux
block = 'pebble_bed'
variable = power_peaking
coupled_variables = 'power_density'
expression = 'power_density / 3.21525E+06'
execute_on = 'initial timestep_end'
[]
[]
# These objects were used for manual restart
# [UserObjects]
# [power_map]
# type = VariableCartesianCoreMap
# variables = 'power_density'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'power_ss.out'
# []
# [isotopic_map]
# type = VariableCartesianCoreMap
# variables = ' isotope_density_U235 isotope_density_U236 isotope_density_U238 isotope_density_PU238
# isotope_density_PU239 isotope_density_PU240 isotope_density_PU241 isotope_density_PU242
# isotope_density_AM241 isotope_density_AM242M isotope_density_CS135 isotope_density_CS137
# isotope_density_XE135 isotope_density_XE136 isotope_density_I131 isotope_density_I135
# isotope_density_SR90'
# block = pebble_bed
# execute_on= 'FINAL'
# output_in = 'isotopics_ss.out'
# []
# [burnup_map]
# type = VariableCartesianCoreMap
# variables = 'Burnup_avg'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'burnup_ss.out'
# []
# [transport_solution]
# type = TransportSolutionVectorFile
# transport_system = diff
# writing = true
# execute_on = 'FINAL'
# []
# [depletion_solution]
# type = SolutionVectorFile
# var = 'pebble_isotope_density pebble_volume_fraction graphite_temperature
# triso_temperature power_density partial_power_density
# sflux_g0 sflux_g1 sflux_g2
# sflux_g3 sflux_g4 sflux_g5
# sflux_g6 sflux_g7 sflux_g8'
# writing = true
# execute_on = 'FINAL'
# []
# [TH_solution]
# type = SolutionVectorFile
# var = 'T_solid T_fluid'
# writing = true
# execute_on = 'FINAL'
# []
# [init_power_density]
# type = SolutionVectorFile
# var = 'prompt_power_density total_pebble_decay_heat'
# writing = true
# execute_on = 'FINAL'
# []
# []
# ==============================================================================
# MATERIALS
# ==============================================================================
[PebbleBed]
block = 'pebble_bed'
power = ${fparse total_power}
integrated_power_postprocessor = total_power
power_density_variable = power_density
family = MONOMIAL
order = CONSTANT
porosity_name = porosity
burnup_group_boundaries = ${burnup_group_boundaries}
# cross section data
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
burnup_grid_name = 'Burnup'
fuel_temperature_grid_name = 'Tfuel'
moderator_temperature_grid_name = 'Tmod'
# avoid physicality check (old XS library)
dtl_physicality = DISABLE
# transmutation data
dataset = ISOXML
isoxml_data_file = '../xsections/DRAGON5_DT_DH_295.xml'
isoxml_lib_name = 'DRAGON'
initial_moderator_temperature = ${initial_temperature}
initial_fuel_temperature = ${initial_temperature}
n_fresh_pebble_types = 1
fresh_pebble_compositions = 'fresh_pebble'
track_isotopes = ' U235 U236 U238 PU238 PU239 PU240 PU241 PU242 AM241
AM242M CS135 CS137 XE135 XE136 I131 I135 SR90'
output_densities_to_exodus = false
[DepletionScheme]
type = ConstantStreamlineEquilibrium
pebble_unloading_rate = ${pebble_unloading_rate}
pebble_flow_rate_distribution = '0.027777778 0.083333333 0.138888889 0.194444444 0.25 0.305555556'
burnup_limit = 4.818E+14
major_streamline_axis = y
pebble_diameter = 0.06
streamline_points = '${r_streamline_1} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_1} ${axial_reflector_height} 0;
${r_streamline_2} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_2} ${axial_reflector_height} 0;
${r_streamline_3} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_3} ${axial_reflector_height} 0;
${r_streamline_4} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_4} ${axial_reflector_height} 0;
${r_streamline_5} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_5} ${axial_reflector_height} 0;
${r_streamline_6} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_6} ${axial_reflector_height} 0'
streamline_segment_subdivisions = '20; 20; 20; 20; 20; 20'
sweep_tol = 1e-7
sweep_max_iterations = 200
[]
# pebble conduction
pebble_conduction_input_file = 'pebble_triso_ss.i'
pebble_positions_file = 'pebble_heat_pos.txt'
surface_temperature_sub_app_postprocessor = T_surface
surface_temperature_main_app_variable = T_solid
power_sub_app_postprocessor = pebble_power_density
fuel_temperature_sub_app_postprocessor = T_fuel
moderator_temperature_sub_app_postprocessor = T_mod
decay_heat = true
[]
[Materials]
# upper and lower reflectors at 70% density
[axial_reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'upper_ref lower_ref'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.25284E-02 0.0'
material_id = 1
[]
# upper lower plenum at 80% density
[plenum]
type = CoupledFeedbackNeutronicsMaterial
block = 'hot_plenum cold_plenum'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '7.14611E-02 0.0'
material_id = 1
[]
[reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'radial_ref carbon_brick'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '8.93263E-02 0.0'
material_id = 1
[]
# control_rod at 68% density
[control_rod]
type = CoupledFeedbackRoddedNeutronicsMaterial
block = 'cr'
grid_names = 'Tmod Tmod Tmod'
grid_variables = 'T_solid T_solid T_solid'
isotopes = ' Graphite ; Graphite B10 B11 C12 ; Graphite B10 B11 C12 '
densities = ' 6.4277e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 '
segment_material_ids = '1 1 1'
rod_segment_length = 11.878
front_position_function = 'CR_bott'
rod_withdrawn_direction = 'y'
[]
# riser at 68% density
[riser]
type = CoupledFeedbackNeutronicsMaterial
block = 'riser'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.07419E-02 0.0'
material_id = 1
[]
[cavity]
type = ConstantNeutronicsMaterial
block = 'cavity'
fromFile = false
# computed from Serpent CMM
diffusion_coef = '4.68857E-01 1.52760E-01 1.21025E-01 1.08241E-01 1.72433E-01 1.65906E-01 1.96579E-01 1.79868E-01 2.14727E-01'
sigma_r = '0 0 0 0 0 0 0 0 0'
sigma_s = ' 7.10949E-01 0 0 0 0 0 0 0 0
0 2.18207E+00 0 0 0 0 0 0 0
0 0 2.75425E+00 0 0 0 0 0 0
0 0 0 3.07955E+00 0 0 0 0 0
0 0 0 0 1.93312E+00 0 0 0 0
0 0 0 0 0 2.00917E+00 0 0 0
0 0 0 0 0 0 1.69567E+00 0 0
0 0 0 0 0 0 0 1.85321E+00 0
0 0 0 0 0 0 0 0 1.55236E+00'
diffusion_coefficient_scheme = user_supplied
[]
[]
[Compositions]
[fresh_pebble]
type = IsotopeComposition
density_type = atomic
isotope_densities = 'U234 1.0887E-07
U235 1.3550E-05
U238 1.4209E-04
O16 3.1137E-04
O17 1.1837E-07
Graphite 8.5357E-02
SI28 3.1399E-04
SI29 1.5944E-05
SI30 1.0510E-05
C12 3.4044E-04'
[]
[]
# ==============================================================================
# MultiApps & Transfers
# ==============================================================================
[MultiApps]
[flow]
type = FullSolveMultiApp
input_files = 'htr-pm-flow-fv-ss.i'
keep_solution_during_restore = true
update_old_solution_when_keeping_solution_during_restore = true
positions = '0 0 0'
execute_on = 'TIMESTEP_END'
[]
[]
[Transfers]
[power_density_to_flow]
type = MultiAppNearestNodeTransfer
to_multi_app = flow
source_variable = power_density
variable = power_density
fixed_meshes = true
execute_on = 'TIMESTEP_END'
[]
[T_solid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_solid
variable = T_solid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[T_fluid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_fluid
variable = T_fluid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Eigenvalue
solve_type = PJFNKMO
constant_matrices = true
petsc_options_iname = '-pc_type -pc_hypre_type -ksp_gmres_restart '
petsc_options_value = 'hypre boomeramg 100'
line_search = l2 #none
# Linear/nonlinear iterations.
l_max_its = 200
l_tol = 1e-3
nl_max_its = 200
# tolerances on the equilibrium calculation are
# similar to on the transients at this time, a small drift
# in the null transient could occur
nl_rel_tol = 1e-5
nl_abs_tol = 1e-6
fixed_point_max_its = 50
fixed_point_rel_tol = 1e-5
fixed_point_abs_tol = 1e-6
free_power_iterations = 4
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Outputs]
file_base = htr_pm_griffin_ss_out
checkpoint = true
exodus = true
csv = true
perf_graph = true
execute_on = 'INITIAL FINAL TIMESTEP_END'
[]
[Postprocessors]
[Tsolid_max]
type = ElementExtremeValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tsolid_avg]
type = ElementAverageValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tfluid_avg]
type = ElementAverageValue
variable = T_fluid
execute_on = 'initial timestep_end'
[]
[Tfuel_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tfuel_max]
type = ElementExtremeValue
block = 'pebble_bed'
value_type = max
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tmod_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tmod_avg
execute_on = 'initial timestep_end'
[]
[Tmod_max]
type = ElementExtremeValue
block = 'pebble_bed'
variable = Tmod_max
value_type = max
execute_on = 'initial timestep_end'
[]
[Burnup_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Burnup_avg
execute_on = 'initial timestep_end'
[]
[UnscaledTotalPower]
type = FluxRxnIntegral
block = 'pebble_bed'
cross_section = kappa_sigma_fission
coupled_flux_groups = 'sflux_g0 sflux_g1 sflux_g2
sflux_g3 sflux_g4 sflux_g5
sflux_g6 sflux_g7 sflux_g8'
execute_on = 'initial transfer timestep_end'
[]
[prompt_power]
type = ElementIntegralVariablePostprocessor
block = 'pebble_bed'
variable = prompt_power_density
execute_on = 'initial transfer timestep_end'
[]
[avg_power_density]
type = ElementAverageValue
block = 'pebble_bed'
variable = power_density
execute_on = 'INITIAL transfer timestep_end'
[]
[power_peak]
type = ElementExtremeValue
variable = power_peaking
value_type = max
execute_on = 'initial timestep_end'
[]
[decay_heat]
type = ElementIntegralVariablePostprocessor
variable = total_pebble_decay_heat
block = 'pebble_bed'
execute_on = 'INITIAL TIMESTEP_END'
[]
[]
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)
# ==============================================================================
# Model description
# Equilibrium core neutronics model coupled with TH and pebble temperature models
# ------------------------------------------------------------------------------
# Idaho Falls, INL, April 11, 2023
# Author(s): Dr. Mustafa Jaradat Dr. Sebastian Schunert, Dr. Javier Ortensi
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
initial_temperature = 500.0 # (K)
total_power = 250.0e+6 # Total reactor Power (W)
burnup_group_boundaries = '5.35E+13 1.070E+14 1.604E+14 2.139E+14 2.674E+14 3.209E+14 3.743E+14 4.278E+14 4.818E+14'
# ==============================================================================
# parameters describing the reactor geometry
core_height = 11.0
axial_reflector_height = 3.228
fuel_radius = 1.5
r_streamline_1 = 12.5e-2
r_streamline_2 = 37.5e-2
r_streamline_3 = 62.5e-2
r_streamline_4 = 87.5e-2
r_streamline_5 = 112.5e-2
r_streamline_6 = 137.5e-2
pebble_radius = 3e-2
pebble_volume = ${fparse 4/3*pi * pebble_radius * pebble_radius * pebble_radius}
residence_time = 70.5
pebble_speed = ${fparse core_height / (residence_time * 3600 * 24)}
area = ${fparse pi * fuel_radius * fuel_radius}
pebble_unloading_rate = ${fparse pebble_speed * area * 0.61 / pebble_volume}
# ==============================================================================
# GLOBAL PARAMETERS
# ==============================================================================
[GlobalParams]
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
is_meter = true
plus = true
[]
[TransportSystems]
particle = neutron
equation_type = eigenvalue
G = 9
ReflectingBoundary = 'left'
VacuumBoundary = 'right top bottom'
[diff]
scheme = CFEM-Diffusion
family = LAGRANGE
order = FIRST
n_delay_groups = 6
assemble_scattering_jacobian = true
assemble_fission_jacobian = true
[]
[]
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
type = MeshGeneratorMesh
block_id = ' 1 2 3 4 5 6
7 8 61 71'
block_name = 'pebble_bed upper_ref lower_ref cavity hot_plenum cold_plenum
radial_ref carbon_brick riser cr'
#uniform_refine = 1
[cartesian_mesh]
type = CartesianMeshGenerator
dim = 2
# Total height: 16.8 m
dx = ' 0.250 0.250 0.250 0.250 0.250 0.250
0.010 0.050 0.130 0.080 0.080 0.080
0.200 0.120 0.125 0.125'
ix = ' 1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1'
dy = ' 0.400 0.400 0.100 0.100 0.800 0.300 0.200 0.300 0.216 0.412
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.760 0.712 0.300 0.400 0.400 '
# base: converges fine
iy = '1 1 1 1 2 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 2 1 1 1'
subdomain_id = ' 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
5 5 5 5 5 5 5 5 5 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
4 4 4 4 4 4 7 7 71 7 7 7 61 7 8 8
4 2 2 2 2 2 7 7 71 7 7 7 61 7 8 8
6 6 6 6 6 6 6 6 71 6 6 6 6 7 8 8
7 7 7 7 7 7 7 7 71 7 7 7 7 7 8 8
8 8 8 8 8 8 8 8 71 8 8 8 8 8 8 8 '
[]
[assign_material_id]
type = SubdomainExtraElementIDGenerator
input = cartesian_mesh
extra_element_id_names = 'material_id'
subdomains = '1 2 3 4 5 6 7 8 61 71'
extra_element_ids = '1 1 1 1 1 1 1 1 1 1'
[]
coord_type = RZ
[]
# ==============================================================================
# AUXVARIABLES AND AUXKERNELS
# ==============================================================================
[Functions]
[CR_bott]
type = ConstantFunction
value = '13.678'
[]
[]
[AuxVariables]
[T_solid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[T_fluid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[Tfuel_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tfuel_max]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_max]
order = CONSTANT
family = MONOMIAL
[]
[Burnup]
order = CONSTANT
family = MONOMIAL
components = 10
# use burnup midpoints and add one additional for discard group
initial_condition = '2.675E+13 8.025E+13 1.337E+14 1.872E+14 2.407E+14 2.942E+14 3.476E+14 4.011E+14 4.546E+14 4.546E+14'
outputs = none
[]
[Burnup_avg]
order = CONSTANT
family = MONOMIAL
[]
[porosity]
family = MONOMIAL
order = CONSTANT
initial_condition = 0.39
block = 'pebble_bed'
[]
# Prompt power density is only added automatically for transients
[prompt_power_density]
order = CONSTANT
family = MONOMIAL
[]
[power_peaking]
order = CONSTANT
family = MONOMIAL
[]
[pden_avg]
order = CONSTANT
family = MONOMIAL
[]
[pden_max]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[Tfuel_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tfuel_avg
array_variable = triso_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tfuel_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tfuel_max
array_variable = triso_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tmod_avg
array_variable = graphite_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tmod_max
array_variable = graphite_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Burnup_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Burnup_avg
array_variable = Burnup
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[prompt_power_density_aux]
type = VectorReactionRate
block = 'pebble_bed'
scalar_flux = 'sflux_g0 sflux_g1 sflux_g2 sflux_g3 sflux_g4
sflux_g5 sflux_g6 sflux_g7 sflux_g8'
variable = prompt_power_density
cross_section = kappa_sigma_fission
scale_factor = power_scaling
dummies = UnscaledTotalPower
execute_on = 'INITIAL timestep_end'
[]
[pden_max_aux]
type = ArrayVarExtremeValueAux
block = 'pebble_bed'
variable = pden_max
array_variable = partial_power_density
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[pden_avg_aux]
type = PebbleAveragedAux
block = 'pebble_bed'
variable = pden_avg
array_variable = partial_power_density
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[power_peaking_aux]
type = ParsedAux
block = 'pebble_bed'
variable = power_peaking
coupled_variables = 'power_density'
expression = 'power_density / 3.21525E+06'
execute_on = 'initial timestep_end'
[]
[]
# These objects were used for manual restart
# [UserObjects]
# [power_map]
# type = VariableCartesianCoreMap
# variables = 'power_density'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'power_ss.out'
# []
# [isotopic_map]
# type = VariableCartesianCoreMap
# variables = ' isotope_density_U235 isotope_density_U236 isotope_density_U238 isotope_density_PU238
# isotope_density_PU239 isotope_density_PU240 isotope_density_PU241 isotope_density_PU242
# isotope_density_AM241 isotope_density_AM242M isotope_density_CS135 isotope_density_CS137
# isotope_density_XE135 isotope_density_XE136 isotope_density_I131 isotope_density_I135
# isotope_density_SR90'
# block = pebble_bed
# execute_on= 'FINAL'
# output_in = 'isotopics_ss.out'
# []
# [burnup_map]
# type = VariableCartesianCoreMap
# variables = 'Burnup_avg'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'burnup_ss.out'
# []
# [transport_solution]
# type = TransportSolutionVectorFile
# transport_system = diff
# writing = true
# execute_on = 'FINAL'
# []
# [depletion_solution]
# type = SolutionVectorFile
# var = 'pebble_isotope_density pebble_volume_fraction graphite_temperature
# triso_temperature power_density partial_power_density
# sflux_g0 sflux_g1 sflux_g2
# sflux_g3 sflux_g4 sflux_g5
# sflux_g6 sflux_g7 sflux_g8'
# writing = true
# execute_on = 'FINAL'
# []
# [TH_solution]
# type = SolutionVectorFile
# var = 'T_solid T_fluid'
# writing = true
# execute_on = 'FINAL'
# []
# [init_power_density]
# type = SolutionVectorFile
# var = 'prompt_power_density total_pebble_decay_heat'
# writing = true
# execute_on = 'FINAL'
# []
# []
# ==============================================================================
# MATERIALS
# ==============================================================================
[PebbleBed]
block = 'pebble_bed'
power = ${fparse total_power}
integrated_power_postprocessor = total_power
power_density_variable = power_density
family = MONOMIAL
order = CONSTANT
porosity_name = porosity
burnup_group_boundaries = ${burnup_group_boundaries}
# cross section data
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
burnup_grid_name = 'Burnup'
fuel_temperature_grid_name = 'Tfuel'
moderator_temperature_grid_name = 'Tmod'
# avoid physicality check (old XS library)
dtl_physicality = DISABLE
# transmutation data
dataset = ISOXML
isoxml_data_file = '../xsections/DRAGON5_DT_DH_295.xml'
isoxml_lib_name = 'DRAGON'
initial_moderator_temperature = ${initial_temperature}
initial_fuel_temperature = ${initial_temperature}
n_fresh_pebble_types = 1
fresh_pebble_compositions = 'fresh_pebble'
track_isotopes = ' U235 U236 U238 PU238 PU239 PU240 PU241 PU242 AM241
AM242M CS135 CS137 XE135 XE136 I131 I135 SR90'
output_densities_to_exodus = false
[DepletionScheme]
type = ConstantStreamlineEquilibrium
pebble_unloading_rate = ${pebble_unloading_rate}
pebble_flow_rate_distribution = '0.027777778 0.083333333 0.138888889 0.194444444 0.25 0.305555556'
burnup_limit = 4.818E+14
major_streamline_axis = y
pebble_diameter = 0.06
streamline_points = '${r_streamline_1} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_1} ${axial_reflector_height} 0;
${r_streamline_2} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_2} ${axial_reflector_height} 0;
${r_streamline_3} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_3} ${axial_reflector_height} 0;
${r_streamline_4} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_4} ${axial_reflector_height} 0;
${r_streamline_5} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_5} ${axial_reflector_height} 0;
${r_streamline_6} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_6} ${axial_reflector_height} 0'
streamline_segment_subdivisions = '20; 20; 20; 20; 20; 20'
sweep_tol = 1e-7
sweep_max_iterations = 200
[]
# pebble conduction
pebble_conduction_input_file = 'pebble_triso_ss.i'
pebble_positions_file = 'pebble_heat_pos.txt'
surface_temperature_sub_app_postprocessor = T_surface
surface_temperature_main_app_variable = T_solid
power_sub_app_postprocessor = pebble_power_density
fuel_temperature_sub_app_postprocessor = T_fuel
moderator_temperature_sub_app_postprocessor = T_mod
decay_heat = true
[]
[Materials]
# upper and lower reflectors at 70% density
[axial_reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'upper_ref lower_ref'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.25284E-02 0.0'
material_id = 1
[]
# upper lower plenum at 80% density
[plenum]
type = CoupledFeedbackNeutronicsMaterial
block = 'hot_plenum cold_plenum'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '7.14611E-02 0.0'
material_id = 1
[]
[reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'radial_ref carbon_brick'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '8.93263E-02 0.0'
material_id = 1
[]
# control_rod at 68% density
[control_rod]
type = CoupledFeedbackRoddedNeutronicsMaterial
block = 'cr'
grid_names = 'Tmod Tmod Tmod'
grid_variables = 'T_solid T_solid T_solid'
isotopes = ' Graphite ; Graphite B10 B11 C12 ; Graphite B10 B11 C12 '
densities = ' 6.4277e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 '
segment_material_ids = '1 1 1'
rod_segment_length = 11.878
front_position_function = 'CR_bott'
rod_withdrawn_direction = 'y'
[]
# riser at 68% density
[riser]
type = CoupledFeedbackNeutronicsMaterial
block = 'riser'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.07419E-02 0.0'
material_id = 1
[]
[cavity]
type = ConstantNeutronicsMaterial
block = 'cavity'
fromFile = false
# computed from Serpent CMM
diffusion_coef = '4.68857E-01 1.52760E-01 1.21025E-01 1.08241E-01 1.72433E-01 1.65906E-01 1.96579E-01 1.79868E-01 2.14727E-01'
sigma_r = '0 0 0 0 0 0 0 0 0'
sigma_s = ' 7.10949E-01 0 0 0 0 0 0 0 0
0 2.18207E+00 0 0 0 0 0 0 0
0 0 2.75425E+00 0 0 0 0 0 0
0 0 0 3.07955E+00 0 0 0 0 0
0 0 0 0 1.93312E+00 0 0 0 0
0 0 0 0 0 2.00917E+00 0 0 0
0 0 0 0 0 0 1.69567E+00 0 0
0 0 0 0 0 0 0 1.85321E+00 0
0 0 0 0 0 0 0 0 1.55236E+00'
diffusion_coefficient_scheme = user_supplied
[]
[]
[Compositions]
[fresh_pebble]
type = IsotopeComposition
density_type = atomic
isotope_densities = 'U234 1.0887E-07
U235 1.3550E-05
U238 1.4209E-04
O16 3.1137E-04
O17 1.1837E-07
Graphite 8.5357E-02
SI28 3.1399E-04
SI29 1.5944E-05
SI30 1.0510E-05
C12 3.4044E-04'
[]
[]
# ==============================================================================
# MultiApps & Transfers
# ==============================================================================
[MultiApps]
[flow]
type = FullSolveMultiApp
input_files = 'htr-pm-flow-fv-ss.i'
keep_solution_during_restore = true
update_old_solution_when_keeping_solution_during_restore = true
positions = '0 0 0'
execute_on = 'TIMESTEP_END'
[]
[]
[Transfers]
[power_density_to_flow]
type = MultiAppNearestNodeTransfer
to_multi_app = flow
source_variable = power_density
variable = power_density
fixed_meshes = true
execute_on = 'TIMESTEP_END'
[]
[T_solid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_solid
variable = T_solid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[T_fluid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_fluid
variable = T_fluid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Eigenvalue
solve_type = PJFNKMO
constant_matrices = true
petsc_options_iname = '-pc_type -pc_hypre_type -ksp_gmres_restart '
petsc_options_value = 'hypre boomeramg 100'
line_search = l2 #none
# Linear/nonlinear iterations.
l_max_its = 200
l_tol = 1e-3
nl_max_its = 200
# tolerances on the equilibrium calculation are
# similar to on the transients at this time, a small drift
# in the null transient could occur
nl_rel_tol = 1e-5
nl_abs_tol = 1e-6
fixed_point_max_its = 50
fixed_point_rel_tol = 1e-5
fixed_point_abs_tol = 1e-6
free_power_iterations = 4
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Outputs]
file_base = htr_pm_griffin_ss_out
checkpoint = true
exodus = true
csv = true
perf_graph = true
execute_on = 'INITIAL FINAL TIMESTEP_END'
[]
[Postprocessors]
[Tsolid_max]
type = ElementExtremeValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tsolid_avg]
type = ElementAverageValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tfluid_avg]
type = ElementAverageValue
variable = T_fluid
execute_on = 'initial timestep_end'
[]
[Tfuel_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tfuel_max]
type = ElementExtremeValue
block = 'pebble_bed'
value_type = max
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tmod_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tmod_avg
execute_on = 'initial timestep_end'
[]
[Tmod_max]
type = ElementExtremeValue
block = 'pebble_bed'
variable = Tmod_max
value_type = max
execute_on = 'initial timestep_end'
[]
[Burnup_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Burnup_avg
execute_on = 'initial timestep_end'
[]
[UnscaledTotalPower]
type = FluxRxnIntegral
block = 'pebble_bed'
cross_section = kappa_sigma_fission
coupled_flux_groups = 'sflux_g0 sflux_g1 sflux_g2
sflux_g3 sflux_g4 sflux_g5
sflux_g6 sflux_g7 sflux_g8'
execute_on = 'initial transfer timestep_end'
[]
[prompt_power]
type = ElementIntegralVariablePostprocessor
block = 'pebble_bed'
variable = prompt_power_density
execute_on = 'initial transfer timestep_end'
[]
[avg_power_density]
type = ElementAverageValue
block = 'pebble_bed'
variable = power_density
execute_on = 'INITIAL transfer timestep_end'
[]
[power_peak]
type = ElementExtremeValue
variable = power_peaking
value_type = max
execute_on = 'initial timestep_end'
[]
[decay_heat]
type = ElementIntegralVariablePostprocessor
variable = total_pebble_decay_heat
block = 'pebble_bed'
execute_on = 'INITIAL TIMESTEP_END'
[]
[]
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)
# ==============================================================================
# Model description
# Equilibrium core neutronics model coupled with TH and pebble temperature models
# ------------------------------------------------------------------------------
# Idaho Falls, INL, April 11, 2023
# Author(s): Dr. Mustafa Jaradat Dr. Sebastian Schunert, Dr. Javier Ortensi
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
initial_temperature = 500.0 # (K)
total_power = 250.0e+6 # Total reactor Power (W)
burnup_group_boundaries = '5.35E+13 1.070E+14 1.604E+14 2.139E+14 2.674E+14 3.209E+14 3.743E+14 4.278E+14 4.818E+14'
# ==============================================================================
# parameters describing the reactor geometry
core_height = 11.0
axial_reflector_height = 3.228
fuel_radius = 1.5
r_streamline_1 = 12.5e-2
r_streamline_2 = 37.5e-2
r_streamline_3 = 62.5e-2
r_streamline_4 = 87.5e-2
r_streamline_5 = 112.5e-2
r_streamline_6 = 137.5e-2
pebble_radius = 3e-2
pebble_volume = ${fparse 4/3*pi * pebble_radius * pebble_radius * pebble_radius}
residence_time = 70.5
pebble_speed = ${fparse core_height / (residence_time * 3600 * 24)}
area = ${fparse pi * fuel_radius * fuel_radius}
pebble_unloading_rate = ${fparse pebble_speed * area * 0.61 / pebble_volume}
# ==============================================================================
# GLOBAL PARAMETERS
# ==============================================================================
[GlobalParams]
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
is_meter = true
plus = true
[]
[TransportSystems]
particle = neutron
equation_type = eigenvalue
G = 9
ReflectingBoundary = 'left'
VacuumBoundary = 'right top bottom'
[diff]
scheme = CFEM-Diffusion
family = LAGRANGE
order = FIRST
n_delay_groups = 6
assemble_scattering_jacobian = true
assemble_fission_jacobian = true
[]
[]
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
type = MeshGeneratorMesh
block_id = ' 1 2 3 4 5 6
7 8 61 71'
block_name = 'pebble_bed upper_ref lower_ref cavity hot_plenum cold_plenum
radial_ref carbon_brick riser cr'
#uniform_refine = 1
[cartesian_mesh]
type = CartesianMeshGenerator
dim = 2
# Total height: 16.8 m
dx = ' 0.250 0.250 0.250 0.250 0.250 0.250
0.010 0.050 0.130 0.080 0.080 0.080
0.200 0.120 0.125 0.125'
ix = ' 1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1'
dy = ' 0.400 0.400 0.100 0.100 0.800 0.300 0.200 0.300 0.216 0.412
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.760 0.712 0.300 0.400 0.400 '
# base: converges fine
iy = '1 1 1 1 2 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 2 1 1 1'
subdomain_id = ' 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
5 5 5 5 5 5 5 5 5 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
4 4 4 4 4 4 7 7 71 7 7 7 61 7 8 8
4 2 2 2 2 2 7 7 71 7 7 7 61 7 8 8
6 6 6 6 6 6 6 6 71 6 6 6 6 7 8 8
7 7 7 7 7 7 7 7 71 7 7 7 7 7 8 8
8 8 8 8 8 8 8 8 71 8 8 8 8 8 8 8 '
[]
[assign_material_id]
type = SubdomainExtraElementIDGenerator
input = cartesian_mesh
extra_element_id_names = 'material_id'
subdomains = '1 2 3 4 5 6 7 8 61 71'
extra_element_ids = '1 1 1 1 1 1 1 1 1 1'
[]
coord_type = RZ
[]
# ==============================================================================
# AUXVARIABLES AND AUXKERNELS
# ==============================================================================
[Functions]
[CR_bott]
type = ConstantFunction
value = '13.678'
[]
[]
[AuxVariables]
[T_solid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[T_fluid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[Tfuel_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tfuel_max]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_max]
order = CONSTANT
family = MONOMIAL
[]
[Burnup]
order = CONSTANT
family = MONOMIAL
components = 10
# use burnup midpoints and add one additional for discard group
initial_condition = '2.675E+13 8.025E+13 1.337E+14 1.872E+14 2.407E+14 2.942E+14 3.476E+14 4.011E+14 4.546E+14 4.546E+14'
outputs = none
[]
[Burnup_avg]
order = CONSTANT
family = MONOMIAL
[]
[porosity]
family = MONOMIAL
order = CONSTANT
initial_condition = 0.39
block = 'pebble_bed'
[]
# Prompt power density is only added automatically for transients
[prompt_power_density]
order = CONSTANT
family = MONOMIAL
[]
[power_peaking]
order = CONSTANT
family = MONOMIAL
[]
[pden_avg]
order = CONSTANT
family = MONOMIAL
[]
[pden_max]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[Tfuel_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tfuel_avg
array_variable = triso_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tfuel_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tfuel_max
array_variable = triso_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tmod_avg
array_variable = graphite_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tmod_max
array_variable = graphite_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Burnup_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Burnup_avg
array_variable = Burnup
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[prompt_power_density_aux]
type = VectorReactionRate
block = 'pebble_bed'
scalar_flux = 'sflux_g0 sflux_g1 sflux_g2 sflux_g3 sflux_g4
sflux_g5 sflux_g6 sflux_g7 sflux_g8'
variable = prompt_power_density
cross_section = kappa_sigma_fission
scale_factor = power_scaling
dummies = UnscaledTotalPower
execute_on = 'INITIAL timestep_end'
[]
[pden_max_aux]
type = ArrayVarExtremeValueAux
block = 'pebble_bed'
variable = pden_max
array_variable = partial_power_density
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[pden_avg_aux]
type = PebbleAveragedAux
block = 'pebble_bed'
variable = pden_avg
array_variable = partial_power_density
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[power_peaking_aux]
type = ParsedAux
block = 'pebble_bed'
variable = power_peaking
coupled_variables = 'power_density'
expression = 'power_density / 3.21525E+06'
execute_on = 'initial timestep_end'
[]
[]
# These objects were used for manual restart
# [UserObjects]
# [power_map]
# type = VariableCartesianCoreMap
# variables = 'power_density'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'power_ss.out'
# []
# [isotopic_map]
# type = VariableCartesianCoreMap
# variables = ' isotope_density_U235 isotope_density_U236 isotope_density_U238 isotope_density_PU238
# isotope_density_PU239 isotope_density_PU240 isotope_density_PU241 isotope_density_PU242
# isotope_density_AM241 isotope_density_AM242M isotope_density_CS135 isotope_density_CS137
# isotope_density_XE135 isotope_density_XE136 isotope_density_I131 isotope_density_I135
# isotope_density_SR90'
# block = pebble_bed
# execute_on= 'FINAL'
# output_in = 'isotopics_ss.out'
# []
# [burnup_map]
# type = VariableCartesianCoreMap
# variables = 'Burnup_avg'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'burnup_ss.out'
# []
# [transport_solution]
# type = TransportSolutionVectorFile
# transport_system = diff
# writing = true
# execute_on = 'FINAL'
# []
# [depletion_solution]
# type = SolutionVectorFile
# var = 'pebble_isotope_density pebble_volume_fraction graphite_temperature
# triso_temperature power_density partial_power_density
# sflux_g0 sflux_g1 sflux_g2
# sflux_g3 sflux_g4 sflux_g5
# sflux_g6 sflux_g7 sflux_g8'
# writing = true
# execute_on = 'FINAL'
# []
# [TH_solution]
# type = SolutionVectorFile
# var = 'T_solid T_fluid'
# writing = true
# execute_on = 'FINAL'
# []
# [init_power_density]
# type = SolutionVectorFile
# var = 'prompt_power_density total_pebble_decay_heat'
# writing = true
# execute_on = 'FINAL'
# []
# []
# ==============================================================================
# MATERIALS
# ==============================================================================
[PebbleBed]
block = 'pebble_bed'
power = ${fparse total_power}
integrated_power_postprocessor = total_power
power_density_variable = power_density
family = MONOMIAL
order = CONSTANT
porosity_name = porosity
burnup_group_boundaries = ${burnup_group_boundaries}
# cross section data
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
burnup_grid_name = 'Burnup'
fuel_temperature_grid_name = 'Tfuel'
moderator_temperature_grid_name = 'Tmod'
# avoid physicality check (old XS library)
dtl_physicality = DISABLE
# transmutation data
dataset = ISOXML
isoxml_data_file = '../xsections/DRAGON5_DT_DH_295.xml'
isoxml_lib_name = 'DRAGON'
initial_moderator_temperature = ${initial_temperature}
initial_fuel_temperature = ${initial_temperature}
n_fresh_pebble_types = 1
fresh_pebble_compositions = 'fresh_pebble'
track_isotopes = ' U235 U236 U238 PU238 PU239 PU240 PU241 PU242 AM241
AM242M CS135 CS137 XE135 XE136 I131 I135 SR90'
output_densities_to_exodus = false
[DepletionScheme]
type = ConstantStreamlineEquilibrium
pebble_unloading_rate = ${pebble_unloading_rate}
pebble_flow_rate_distribution = '0.027777778 0.083333333 0.138888889 0.194444444 0.25 0.305555556'
burnup_limit = 4.818E+14
major_streamline_axis = y
pebble_diameter = 0.06
streamline_points = '${r_streamline_1} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_1} ${axial_reflector_height} 0;
${r_streamline_2} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_2} ${axial_reflector_height} 0;
${r_streamline_3} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_3} ${axial_reflector_height} 0;
${r_streamline_4} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_4} ${axial_reflector_height} 0;
${r_streamline_5} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_5} ${axial_reflector_height} 0;
${r_streamline_6} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_6} ${axial_reflector_height} 0'
streamline_segment_subdivisions = '20; 20; 20; 20; 20; 20'
sweep_tol = 1e-7
sweep_max_iterations = 200
[]
# pebble conduction
pebble_conduction_input_file = 'pebble_triso_ss.i'
pebble_positions_file = 'pebble_heat_pos.txt'
surface_temperature_sub_app_postprocessor = T_surface
surface_temperature_main_app_variable = T_solid
power_sub_app_postprocessor = pebble_power_density
fuel_temperature_sub_app_postprocessor = T_fuel
moderator_temperature_sub_app_postprocessor = T_mod
decay_heat = true
[]
[Materials]
# upper and lower reflectors at 70% density
[axial_reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'upper_ref lower_ref'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.25284E-02 0.0'
material_id = 1
[]
# upper lower plenum at 80% density
[plenum]
type = CoupledFeedbackNeutronicsMaterial
block = 'hot_plenum cold_plenum'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '7.14611E-02 0.0'
material_id = 1
[]
[reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'radial_ref carbon_brick'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '8.93263E-02 0.0'
material_id = 1
[]
# control_rod at 68% density
[control_rod]
type = CoupledFeedbackRoddedNeutronicsMaterial
block = 'cr'
grid_names = 'Tmod Tmod Tmod'
grid_variables = 'T_solid T_solid T_solid'
isotopes = ' Graphite ; Graphite B10 B11 C12 ; Graphite B10 B11 C12 '
densities = ' 6.4277e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 '
segment_material_ids = '1 1 1'
rod_segment_length = 11.878
front_position_function = 'CR_bott'
rod_withdrawn_direction = 'y'
[]
# riser at 68% density
[riser]
type = CoupledFeedbackNeutronicsMaterial
block = 'riser'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.07419E-02 0.0'
material_id = 1
[]
[cavity]
type = ConstantNeutronicsMaterial
block = 'cavity'
fromFile = false
# computed from Serpent CMM
diffusion_coef = '4.68857E-01 1.52760E-01 1.21025E-01 1.08241E-01 1.72433E-01 1.65906E-01 1.96579E-01 1.79868E-01 2.14727E-01'
sigma_r = '0 0 0 0 0 0 0 0 0'
sigma_s = ' 7.10949E-01 0 0 0 0 0 0 0 0
0 2.18207E+00 0 0 0 0 0 0 0
0 0 2.75425E+00 0 0 0 0 0 0
0 0 0 3.07955E+00 0 0 0 0 0
0 0 0 0 1.93312E+00 0 0 0 0
0 0 0 0 0 2.00917E+00 0 0 0
0 0 0 0 0 0 1.69567E+00 0 0
0 0 0 0 0 0 0 1.85321E+00 0
0 0 0 0 0 0 0 0 1.55236E+00'
diffusion_coefficient_scheme = user_supplied
[]
[]
[Compositions]
[fresh_pebble]
type = IsotopeComposition
density_type = atomic
isotope_densities = 'U234 1.0887E-07
U235 1.3550E-05
U238 1.4209E-04
O16 3.1137E-04
O17 1.1837E-07
Graphite 8.5357E-02
SI28 3.1399E-04
SI29 1.5944E-05
SI30 1.0510E-05
C12 3.4044E-04'
[]
[]
# ==============================================================================
# MultiApps & Transfers
# ==============================================================================
[MultiApps]
[flow]
type = FullSolveMultiApp
input_files = 'htr-pm-flow-fv-ss.i'
keep_solution_during_restore = true
update_old_solution_when_keeping_solution_during_restore = true
positions = '0 0 0'
execute_on = 'TIMESTEP_END'
[]
[]
[Transfers]
[power_density_to_flow]
type = MultiAppNearestNodeTransfer
to_multi_app = flow
source_variable = power_density
variable = power_density
fixed_meshes = true
execute_on = 'TIMESTEP_END'
[]
[T_solid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_solid
variable = T_solid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[T_fluid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_fluid
variable = T_fluid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Eigenvalue
solve_type = PJFNKMO
constant_matrices = true
petsc_options_iname = '-pc_type -pc_hypre_type -ksp_gmres_restart '
petsc_options_value = 'hypre boomeramg 100'
line_search = l2 #none
# Linear/nonlinear iterations.
l_max_its = 200
l_tol = 1e-3
nl_max_its = 200
# tolerances on the equilibrium calculation are
# similar to on the transients at this time, a small drift
# in the null transient could occur
nl_rel_tol = 1e-5
nl_abs_tol = 1e-6
fixed_point_max_its = 50
fixed_point_rel_tol = 1e-5
fixed_point_abs_tol = 1e-6
free_power_iterations = 4
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Outputs]
file_base = htr_pm_griffin_ss_out
checkpoint = true
exodus = true
csv = true
perf_graph = true
execute_on = 'INITIAL FINAL TIMESTEP_END'
[]
[Postprocessors]
[Tsolid_max]
type = ElementExtremeValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tsolid_avg]
type = ElementAverageValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tfluid_avg]
type = ElementAverageValue
variable = T_fluid
execute_on = 'initial timestep_end'
[]
[Tfuel_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tfuel_max]
type = ElementExtremeValue
block = 'pebble_bed'
value_type = max
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tmod_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tmod_avg
execute_on = 'initial timestep_end'
[]
[Tmod_max]
type = ElementExtremeValue
block = 'pebble_bed'
variable = Tmod_max
value_type = max
execute_on = 'initial timestep_end'
[]
[Burnup_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Burnup_avg
execute_on = 'initial timestep_end'
[]
[UnscaledTotalPower]
type = FluxRxnIntegral
block = 'pebble_bed'
cross_section = kappa_sigma_fission
coupled_flux_groups = 'sflux_g0 sflux_g1 sflux_g2
sflux_g3 sflux_g4 sflux_g5
sflux_g6 sflux_g7 sflux_g8'
execute_on = 'initial transfer timestep_end'
[]
[prompt_power]
type = ElementIntegralVariablePostprocessor
block = 'pebble_bed'
variable = prompt_power_density
execute_on = 'initial transfer timestep_end'
[]
[avg_power_density]
type = ElementAverageValue
block = 'pebble_bed'
variable = power_density
execute_on = 'INITIAL transfer timestep_end'
[]
[power_peak]
type = ElementExtremeValue
variable = power_peaking
value_type = max
execute_on = 'initial timestep_end'
[]
[decay_heat]
type = ElementIntegralVariablePostprocessor
variable = total_pebble_decay_heat
block = 'pebble_bed'
execute_on = 'INITIAL TIMESTEP_END'
[]
[]
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)
# ==============================================================================
# Model description
# Equilibrium core neutronics model coupled with TH and pebble temperature models
# ------------------------------------------------------------------------------
# Idaho Falls, INL, April 11, 2023
# Author(s): Dr. Mustafa Jaradat Dr. Sebastian Schunert, Dr. Javier Ortensi
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
initial_temperature = 500.0 # (K)
total_power = 250.0e+6 # Total reactor Power (W)
burnup_group_boundaries = '5.35E+13 1.070E+14 1.604E+14 2.139E+14 2.674E+14 3.209E+14 3.743E+14 4.278E+14 4.818E+14'
# ==============================================================================
# parameters describing the reactor geometry
core_height = 11.0
axial_reflector_height = 3.228
fuel_radius = 1.5
r_streamline_1 = 12.5e-2
r_streamline_2 = 37.5e-2
r_streamline_3 = 62.5e-2
r_streamline_4 = 87.5e-2
r_streamline_5 = 112.5e-2
r_streamline_6 = 137.5e-2
pebble_radius = 3e-2
pebble_volume = ${fparse 4/3*pi * pebble_radius * pebble_radius * pebble_radius}
residence_time = 70.5
pebble_speed = ${fparse core_height / (residence_time * 3600 * 24)}
area = ${fparse pi * fuel_radius * fuel_radius}
pebble_unloading_rate = ${fparse pebble_speed * area * 0.61 / pebble_volume}
# ==============================================================================
# GLOBAL PARAMETERS
# ==============================================================================
[GlobalParams]
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
is_meter = true
plus = true
[]
[TransportSystems]
particle = neutron
equation_type = eigenvalue
G = 9
ReflectingBoundary = 'left'
VacuumBoundary = 'right top bottom'
[diff]
scheme = CFEM-Diffusion
family = LAGRANGE
order = FIRST
n_delay_groups = 6
assemble_scattering_jacobian = true
assemble_fission_jacobian = true
[]
[]
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
type = MeshGeneratorMesh
block_id = ' 1 2 3 4 5 6
7 8 61 71'
block_name = 'pebble_bed upper_ref lower_ref cavity hot_plenum cold_plenum
radial_ref carbon_brick riser cr'
#uniform_refine = 1
[cartesian_mesh]
type = CartesianMeshGenerator
dim = 2
# Total height: 16.8 m
dx = ' 0.250 0.250 0.250 0.250 0.250 0.250
0.010 0.050 0.130 0.080 0.080 0.080
0.200 0.120 0.125 0.125'
ix = ' 1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1'
dy = ' 0.400 0.400 0.100 0.100 0.800 0.300 0.200 0.300 0.216 0.412
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.760 0.712 0.300 0.400 0.400 '
# base: converges fine
iy = '1 1 1 1 2 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 2 1 1 1'
subdomain_id = ' 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
5 5 5 5 5 5 5 5 5 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
4 4 4 4 4 4 7 7 71 7 7 7 61 7 8 8
4 2 2 2 2 2 7 7 71 7 7 7 61 7 8 8
6 6 6 6 6 6 6 6 71 6 6 6 6 7 8 8
7 7 7 7 7 7 7 7 71 7 7 7 7 7 8 8
8 8 8 8 8 8 8 8 71 8 8 8 8 8 8 8 '
[]
[assign_material_id]
type = SubdomainExtraElementIDGenerator
input = cartesian_mesh
extra_element_id_names = 'material_id'
subdomains = '1 2 3 4 5 6 7 8 61 71'
extra_element_ids = '1 1 1 1 1 1 1 1 1 1'
[]
coord_type = RZ
[]
# ==============================================================================
# AUXVARIABLES AND AUXKERNELS
# ==============================================================================
[Functions]
[CR_bott]
type = ConstantFunction
value = '13.678'
[]
[]
[AuxVariables]
[T_solid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[T_fluid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[Tfuel_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tfuel_max]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_max]
order = CONSTANT
family = MONOMIAL
[]
[Burnup]
order = CONSTANT
family = MONOMIAL
components = 10
# use burnup midpoints and add one additional for discard group
initial_condition = '2.675E+13 8.025E+13 1.337E+14 1.872E+14 2.407E+14 2.942E+14 3.476E+14 4.011E+14 4.546E+14 4.546E+14'
outputs = none
[]
[Burnup_avg]
order = CONSTANT
family = MONOMIAL
[]
[porosity]
family = MONOMIAL
order = CONSTANT
initial_condition = 0.39
block = 'pebble_bed'
[]
# Prompt power density is only added automatically for transients
[prompt_power_density]
order = CONSTANT
family = MONOMIAL
[]
[power_peaking]
order = CONSTANT
family = MONOMIAL
[]
[pden_avg]
order = CONSTANT
family = MONOMIAL
[]
[pden_max]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[Tfuel_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tfuel_avg
array_variable = triso_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tfuel_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tfuel_max
array_variable = triso_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tmod_avg
array_variable = graphite_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tmod_max
array_variable = graphite_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Burnup_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Burnup_avg
array_variable = Burnup
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[prompt_power_density_aux]
type = VectorReactionRate
block = 'pebble_bed'
scalar_flux = 'sflux_g0 sflux_g1 sflux_g2 sflux_g3 sflux_g4
sflux_g5 sflux_g6 sflux_g7 sflux_g8'
variable = prompt_power_density
cross_section = kappa_sigma_fission
scale_factor = power_scaling
dummies = UnscaledTotalPower
execute_on = 'INITIAL timestep_end'
[]
[pden_max_aux]
type = ArrayVarExtremeValueAux
block = 'pebble_bed'
variable = pden_max
array_variable = partial_power_density
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[pden_avg_aux]
type = PebbleAveragedAux
block = 'pebble_bed'
variable = pden_avg
array_variable = partial_power_density
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[power_peaking_aux]
type = ParsedAux
block = 'pebble_bed'
variable = power_peaking
coupled_variables = 'power_density'
expression = 'power_density / 3.21525E+06'
execute_on = 'initial timestep_end'
[]
[]
# These objects were used for manual restart
# [UserObjects]
# [power_map]
# type = VariableCartesianCoreMap
# variables = 'power_density'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'power_ss.out'
# []
# [isotopic_map]
# type = VariableCartesianCoreMap
# variables = ' isotope_density_U235 isotope_density_U236 isotope_density_U238 isotope_density_PU238
# isotope_density_PU239 isotope_density_PU240 isotope_density_PU241 isotope_density_PU242
# isotope_density_AM241 isotope_density_AM242M isotope_density_CS135 isotope_density_CS137
# isotope_density_XE135 isotope_density_XE136 isotope_density_I131 isotope_density_I135
# isotope_density_SR90'
# block = pebble_bed
# execute_on= 'FINAL'
# output_in = 'isotopics_ss.out'
# []
# [burnup_map]
# type = VariableCartesianCoreMap
# variables = 'Burnup_avg'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'burnup_ss.out'
# []
# [transport_solution]
# type = TransportSolutionVectorFile
# transport_system = diff
# writing = true
# execute_on = 'FINAL'
# []
# [depletion_solution]
# type = SolutionVectorFile
# var = 'pebble_isotope_density pebble_volume_fraction graphite_temperature
# triso_temperature power_density partial_power_density
# sflux_g0 sflux_g1 sflux_g2
# sflux_g3 sflux_g4 sflux_g5
# sflux_g6 sflux_g7 sflux_g8'
# writing = true
# execute_on = 'FINAL'
# []
# [TH_solution]
# type = SolutionVectorFile
# var = 'T_solid T_fluid'
# writing = true
# execute_on = 'FINAL'
# []
# [init_power_density]
# type = SolutionVectorFile
# var = 'prompt_power_density total_pebble_decay_heat'
# writing = true
# execute_on = 'FINAL'
# []
# []
# ==============================================================================
# MATERIALS
# ==============================================================================
[PebbleBed]
block = 'pebble_bed'
power = ${fparse total_power}
integrated_power_postprocessor = total_power
power_density_variable = power_density
family = MONOMIAL
order = CONSTANT
porosity_name = porosity
burnup_group_boundaries = ${burnup_group_boundaries}
# cross section data
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
burnup_grid_name = 'Burnup'
fuel_temperature_grid_name = 'Tfuel'
moderator_temperature_grid_name = 'Tmod'
# avoid physicality check (old XS library)
dtl_physicality = DISABLE
# transmutation data
dataset = ISOXML
isoxml_data_file = '../xsections/DRAGON5_DT_DH_295.xml'
isoxml_lib_name = 'DRAGON'
initial_moderator_temperature = ${initial_temperature}
initial_fuel_temperature = ${initial_temperature}
n_fresh_pebble_types = 1
fresh_pebble_compositions = 'fresh_pebble'
track_isotopes = ' U235 U236 U238 PU238 PU239 PU240 PU241 PU242 AM241
AM242M CS135 CS137 XE135 XE136 I131 I135 SR90'
output_densities_to_exodus = false
[DepletionScheme]
type = ConstantStreamlineEquilibrium
pebble_unloading_rate = ${pebble_unloading_rate}
pebble_flow_rate_distribution = '0.027777778 0.083333333 0.138888889 0.194444444 0.25 0.305555556'
burnup_limit = 4.818E+14
major_streamline_axis = y
pebble_diameter = 0.06
streamline_points = '${r_streamline_1} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_1} ${axial_reflector_height} 0;
${r_streamline_2} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_2} ${axial_reflector_height} 0;
${r_streamline_3} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_3} ${axial_reflector_height} 0;
${r_streamline_4} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_4} ${axial_reflector_height} 0;
${r_streamline_5} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_5} ${axial_reflector_height} 0;
${r_streamline_6} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_6} ${axial_reflector_height} 0'
streamline_segment_subdivisions = '20; 20; 20; 20; 20; 20'
sweep_tol = 1e-7
sweep_max_iterations = 200
[]
# pebble conduction
pebble_conduction_input_file = 'pebble_triso_ss.i'
pebble_positions_file = 'pebble_heat_pos.txt'
surface_temperature_sub_app_postprocessor = T_surface
surface_temperature_main_app_variable = T_solid
power_sub_app_postprocessor = pebble_power_density
fuel_temperature_sub_app_postprocessor = T_fuel
moderator_temperature_sub_app_postprocessor = T_mod
decay_heat = true
[]
[Materials]
# upper and lower reflectors at 70% density
[axial_reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'upper_ref lower_ref'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.25284E-02 0.0'
material_id = 1
[]
# upper lower plenum at 80% density
[plenum]
type = CoupledFeedbackNeutronicsMaterial
block = 'hot_plenum cold_plenum'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '7.14611E-02 0.0'
material_id = 1
[]
[reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'radial_ref carbon_brick'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '8.93263E-02 0.0'
material_id = 1
[]
# control_rod at 68% density
[control_rod]
type = CoupledFeedbackRoddedNeutronicsMaterial
block = 'cr'
grid_names = 'Tmod Tmod Tmod'
grid_variables = 'T_solid T_solid T_solid'
isotopes = ' Graphite ; Graphite B10 B11 C12 ; Graphite B10 B11 C12 '
densities = ' 6.4277e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 '
segment_material_ids = '1 1 1'
rod_segment_length = 11.878
front_position_function = 'CR_bott'
rod_withdrawn_direction = 'y'
[]
# riser at 68% density
[riser]
type = CoupledFeedbackNeutronicsMaterial
block = 'riser'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.07419E-02 0.0'
material_id = 1
[]
[cavity]
type = ConstantNeutronicsMaterial
block = 'cavity'
fromFile = false
# computed from Serpent CMM
diffusion_coef = '4.68857E-01 1.52760E-01 1.21025E-01 1.08241E-01 1.72433E-01 1.65906E-01 1.96579E-01 1.79868E-01 2.14727E-01'
sigma_r = '0 0 0 0 0 0 0 0 0'
sigma_s = ' 7.10949E-01 0 0 0 0 0 0 0 0
0 2.18207E+00 0 0 0 0 0 0 0
0 0 2.75425E+00 0 0 0 0 0 0
0 0 0 3.07955E+00 0 0 0 0 0
0 0 0 0 1.93312E+00 0 0 0 0
0 0 0 0 0 2.00917E+00 0 0 0
0 0 0 0 0 0 1.69567E+00 0 0
0 0 0 0 0 0 0 1.85321E+00 0
0 0 0 0 0 0 0 0 1.55236E+00'
diffusion_coefficient_scheme = user_supplied
[]
[]
[Compositions]
[fresh_pebble]
type = IsotopeComposition
density_type = atomic
isotope_densities = 'U234 1.0887E-07
U235 1.3550E-05
U238 1.4209E-04
O16 3.1137E-04
O17 1.1837E-07
Graphite 8.5357E-02
SI28 3.1399E-04
SI29 1.5944E-05
SI30 1.0510E-05
C12 3.4044E-04'
[]
[]
# ==============================================================================
# MultiApps & Transfers
# ==============================================================================
[MultiApps]
[flow]
type = FullSolveMultiApp
input_files = 'htr-pm-flow-fv-ss.i'
keep_solution_during_restore = true
update_old_solution_when_keeping_solution_during_restore = true
positions = '0 0 0'
execute_on = 'TIMESTEP_END'
[]
[]
[Transfers]
[power_density_to_flow]
type = MultiAppNearestNodeTransfer
to_multi_app = flow
source_variable = power_density
variable = power_density
fixed_meshes = true
execute_on = 'TIMESTEP_END'
[]
[T_solid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_solid
variable = T_solid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[T_fluid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_fluid
variable = T_fluid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Eigenvalue
solve_type = PJFNKMO
constant_matrices = true
petsc_options_iname = '-pc_type -pc_hypre_type -ksp_gmres_restart '
petsc_options_value = 'hypre boomeramg 100'
line_search = l2 #none
# Linear/nonlinear iterations.
l_max_its = 200
l_tol = 1e-3
nl_max_its = 200
# tolerances on the equilibrium calculation are
# similar to on the transients at this time, a small drift
# in the null transient could occur
nl_rel_tol = 1e-5
nl_abs_tol = 1e-6
fixed_point_max_its = 50
fixed_point_rel_tol = 1e-5
fixed_point_abs_tol = 1e-6
free_power_iterations = 4
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Outputs]
file_base = htr_pm_griffin_ss_out
checkpoint = true
exodus = true
csv = true
perf_graph = true
execute_on = 'INITIAL FINAL TIMESTEP_END'
[]
[Postprocessors]
[Tsolid_max]
type = ElementExtremeValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tsolid_avg]
type = ElementAverageValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tfluid_avg]
type = ElementAverageValue
variable = T_fluid
execute_on = 'initial timestep_end'
[]
[Tfuel_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tfuel_max]
type = ElementExtremeValue
block = 'pebble_bed'
value_type = max
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tmod_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tmod_avg
execute_on = 'initial timestep_end'
[]
[Tmod_max]
type = ElementExtremeValue
block = 'pebble_bed'
variable = Tmod_max
value_type = max
execute_on = 'initial timestep_end'
[]
[Burnup_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Burnup_avg
execute_on = 'initial timestep_end'
[]
[UnscaledTotalPower]
type = FluxRxnIntegral
block = 'pebble_bed'
cross_section = kappa_sigma_fission
coupled_flux_groups = 'sflux_g0 sflux_g1 sflux_g2
sflux_g3 sflux_g4 sflux_g5
sflux_g6 sflux_g7 sflux_g8'
execute_on = 'initial transfer timestep_end'
[]
[prompt_power]
type = ElementIntegralVariablePostprocessor
block = 'pebble_bed'
variable = prompt_power_density
execute_on = 'initial transfer timestep_end'
[]
[avg_power_density]
type = ElementAverageValue
block = 'pebble_bed'
variable = power_density
execute_on = 'INITIAL transfer timestep_end'
[]
[power_peak]
type = ElementExtremeValue
variable = power_peaking
value_type = max
execute_on = 'initial timestep_end'
[]
[decay_heat]
type = ElementIntegralVariablePostprocessor
variable = total_pebble_decay_heat
block = 'pebble_bed'
execute_on = 'INITIAL TIMESTEP_END'
[]
[]
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)
# ==============================================================================
# Model description
# Equilibrium core neutronics model coupled with TH and pebble temperature models
# ------------------------------------------------------------------------------
# Idaho Falls, INL, April 11, 2023
# Author(s): Dr. Mustafa Jaradat Dr. Sebastian Schunert, Dr. Javier Ortensi
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
initial_temperature = 500.0 # (K)
total_power = 250.0e+6 # Total reactor Power (W)
burnup_group_boundaries = '5.35E+13 1.070E+14 1.604E+14 2.139E+14 2.674E+14 3.209E+14 3.743E+14 4.278E+14 4.818E+14'
# ==============================================================================
# parameters describing the reactor geometry
core_height = 11.0
axial_reflector_height = 3.228
fuel_radius = 1.5
r_streamline_1 = 12.5e-2
r_streamline_2 = 37.5e-2
r_streamline_3 = 62.5e-2
r_streamline_4 = 87.5e-2
r_streamline_5 = 112.5e-2
r_streamline_6 = 137.5e-2
pebble_radius = 3e-2
pebble_volume = ${fparse 4/3*pi * pebble_radius * pebble_radius * pebble_radius}
residence_time = 70.5
pebble_speed = ${fparse core_height / (residence_time * 3600 * 24)}
area = ${fparse pi * fuel_radius * fuel_radius}
pebble_unloading_rate = ${fparse pebble_speed * area * 0.61 / pebble_volume}
# ==============================================================================
# GLOBAL PARAMETERS
# ==============================================================================
[GlobalParams]
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
is_meter = true
plus = true
[]
[TransportSystems]
particle = neutron
equation_type = eigenvalue
G = 9
ReflectingBoundary = 'left'
VacuumBoundary = 'right top bottom'
[diff]
scheme = CFEM-Diffusion
family = LAGRANGE
order = FIRST
n_delay_groups = 6
assemble_scattering_jacobian = true
assemble_fission_jacobian = true
[]
[]
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
type = MeshGeneratorMesh
block_id = ' 1 2 3 4 5 6
7 8 61 71'
block_name = 'pebble_bed upper_ref lower_ref cavity hot_plenum cold_plenum
radial_ref carbon_brick riser cr'
#uniform_refine = 1
[cartesian_mesh]
type = CartesianMeshGenerator
dim = 2
# Total height: 16.8 m
dx = ' 0.250 0.250 0.250 0.250 0.250 0.250
0.010 0.050 0.130 0.080 0.080 0.080
0.200 0.120 0.125 0.125'
ix = ' 1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1'
dy = ' 0.400 0.400 0.100 0.100 0.800 0.300 0.200 0.300 0.216 0.412
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.760 0.712 0.300 0.400 0.400 '
# base: converges fine
iy = '1 1 1 1 2 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 2 1 1 1'
subdomain_id = ' 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
5 5 5 5 5 5 5 5 5 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
4 4 4 4 4 4 7 7 71 7 7 7 61 7 8 8
4 2 2 2 2 2 7 7 71 7 7 7 61 7 8 8
6 6 6 6 6 6 6 6 71 6 6 6 6 7 8 8
7 7 7 7 7 7 7 7 71 7 7 7 7 7 8 8
8 8 8 8 8 8 8 8 71 8 8 8 8 8 8 8 '
[]
[assign_material_id]
type = SubdomainExtraElementIDGenerator
input = cartesian_mesh
extra_element_id_names = 'material_id'
subdomains = '1 2 3 4 5 6 7 8 61 71'
extra_element_ids = '1 1 1 1 1 1 1 1 1 1'
[]
coord_type = RZ
[]
# ==============================================================================
# AUXVARIABLES AND AUXKERNELS
# ==============================================================================
[Functions]
[CR_bott]
type = ConstantFunction
value = '13.678'
[]
[]
[AuxVariables]
[T_solid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[T_fluid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[Tfuel_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tfuel_max]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_max]
order = CONSTANT
family = MONOMIAL
[]
[Burnup]
order = CONSTANT
family = MONOMIAL
components = 10
# use burnup midpoints and add one additional for discard group
initial_condition = '2.675E+13 8.025E+13 1.337E+14 1.872E+14 2.407E+14 2.942E+14 3.476E+14 4.011E+14 4.546E+14 4.546E+14'
outputs = none
[]
[Burnup_avg]
order = CONSTANT
family = MONOMIAL
[]
[porosity]
family = MONOMIAL
order = CONSTANT
initial_condition = 0.39
block = 'pebble_bed'
[]
# Prompt power density is only added automatically for transients
[prompt_power_density]
order = CONSTANT
family = MONOMIAL
[]
[power_peaking]
order = CONSTANT
family = MONOMIAL
[]
[pden_avg]
order = CONSTANT
family = MONOMIAL
[]
[pden_max]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[Tfuel_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tfuel_avg
array_variable = triso_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tfuel_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tfuel_max
array_variable = triso_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tmod_avg
array_variable = graphite_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tmod_max
array_variable = graphite_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Burnup_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Burnup_avg
array_variable = Burnup
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[prompt_power_density_aux]
type = VectorReactionRate
block = 'pebble_bed'
scalar_flux = 'sflux_g0 sflux_g1 sflux_g2 sflux_g3 sflux_g4
sflux_g5 sflux_g6 sflux_g7 sflux_g8'
variable = prompt_power_density
cross_section = kappa_sigma_fission
scale_factor = power_scaling
dummies = UnscaledTotalPower
execute_on = 'INITIAL timestep_end'
[]
[pden_max_aux]
type = ArrayVarExtremeValueAux
block = 'pebble_bed'
variable = pden_max
array_variable = partial_power_density
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[pden_avg_aux]
type = PebbleAveragedAux
block = 'pebble_bed'
variable = pden_avg
array_variable = partial_power_density
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[power_peaking_aux]
type = ParsedAux
block = 'pebble_bed'
variable = power_peaking
coupled_variables = 'power_density'
expression = 'power_density / 3.21525E+06'
execute_on = 'initial timestep_end'
[]
[]
# These objects were used for manual restart
# [UserObjects]
# [power_map]
# type = VariableCartesianCoreMap
# variables = 'power_density'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'power_ss.out'
# []
# [isotopic_map]
# type = VariableCartesianCoreMap
# variables = ' isotope_density_U235 isotope_density_U236 isotope_density_U238 isotope_density_PU238
# isotope_density_PU239 isotope_density_PU240 isotope_density_PU241 isotope_density_PU242
# isotope_density_AM241 isotope_density_AM242M isotope_density_CS135 isotope_density_CS137
# isotope_density_XE135 isotope_density_XE136 isotope_density_I131 isotope_density_I135
# isotope_density_SR90'
# block = pebble_bed
# execute_on= 'FINAL'
# output_in = 'isotopics_ss.out'
# []
# [burnup_map]
# type = VariableCartesianCoreMap
# variables = 'Burnup_avg'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'burnup_ss.out'
# []
# [transport_solution]
# type = TransportSolutionVectorFile
# transport_system = diff
# writing = true
# execute_on = 'FINAL'
# []
# [depletion_solution]
# type = SolutionVectorFile
# var = 'pebble_isotope_density pebble_volume_fraction graphite_temperature
# triso_temperature power_density partial_power_density
# sflux_g0 sflux_g1 sflux_g2
# sflux_g3 sflux_g4 sflux_g5
# sflux_g6 sflux_g7 sflux_g8'
# writing = true
# execute_on = 'FINAL'
# []
# [TH_solution]
# type = SolutionVectorFile
# var = 'T_solid T_fluid'
# writing = true
# execute_on = 'FINAL'
# []
# [init_power_density]
# type = SolutionVectorFile
# var = 'prompt_power_density total_pebble_decay_heat'
# writing = true
# execute_on = 'FINAL'
# []
# []
# ==============================================================================
# MATERIALS
# ==============================================================================
[PebbleBed]
block = 'pebble_bed'
power = ${fparse total_power}
integrated_power_postprocessor = total_power
power_density_variable = power_density
family = MONOMIAL
order = CONSTANT
porosity_name = porosity
burnup_group_boundaries = ${burnup_group_boundaries}
# cross section data
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
burnup_grid_name = 'Burnup'
fuel_temperature_grid_name = 'Tfuel'
moderator_temperature_grid_name = 'Tmod'
# avoid physicality check (old XS library)
dtl_physicality = DISABLE
# transmutation data
dataset = ISOXML
isoxml_data_file = '../xsections/DRAGON5_DT_DH_295.xml'
isoxml_lib_name = 'DRAGON'
initial_moderator_temperature = ${initial_temperature}
initial_fuel_temperature = ${initial_temperature}
n_fresh_pebble_types = 1
fresh_pebble_compositions = 'fresh_pebble'
track_isotopes = ' U235 U236 U238 PU238 PU239 PU240 PU241 PU242 AM241
AM242M CS135 CS137 XE135 XE136 I131 I135 SR90'
output_densities_to_exodus = false
[DepletionScheme]
type = ConstantStreamlineEquilibrium
pebble_unloading_rate = ${pebble_unloading_rate}
pebble_flow_rate_distribution = '0.027777778 0.083333333 0.138888889 0.194444444 0.25 0.305555556'
burnup_limit = 4.818E+14
major_streamline_axis = y
pebble_diameter = 0.06
streamline_points = '${r_streamline_1} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_1} ${axial_reflector_height} 0;
${r_streamline_2} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_2} ${axial_reflector_height} 0;
${r_streamline_3} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_3} ${axial_reflector_height} 0;
${r_streamline_4} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_4} ${axial_reflector_height} 0;
${r_streamline_5} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_5} ${axial_reflector_height} 0;
${r_streamline_6} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_6} ${axial_reflector_height} 0'
streamline_segment_subdivisions = '20; 20; 20; 20; 20; 20'
sweep_tol = 1e-7
sweep_max_iterations = 200
[]
# pebble conduction
pebble_conduction_input_file = 'pebble_triso_ss.i'
pebble_positions_file = 'pebble_heat_pos.txt'
surface_temperature_sub_app_postprocessor = T_surface
surface_temperature_main_app_variable = T_solid
power_sub_app_postprocessor = pebble_power_density
fuel_temperature_sub_app_postprocessor = T_fuel
moderator_temperature_sub_app_postprocessor = T_mod
decay_heat = true
[]
[Materials]
# upper and lower reflectors at 70% density
[axial_reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'upper_ref lower_ref'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.25284E-02 0.0'
material_id = 1
[]
# upper lower plenum at 80% density
[plenum]
type = CoupledFeedbackNeutronicsMaterial
block = 'hot_plenum cold_plenum'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '7.14611E-02 0.0'
material_id = 1
[]
[reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'radial_ref carbon_brick'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '8.93263E-02 0.0'
material_id = 1
[]
# control_rod at 68% density
[control_rod]
type = CoupledFeedbackRoddedNeutronicsMaterial
block = 'cr'
grid_names = 'Tmod Tmod Tmod'
grid_variables = 'T_solid T_solid T_solid'
isotopes = ' Graphite ; Graphite B10 B11 C12 ; Graphite B10 B11 C12 '
densities = ' 6.4277e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 '
segment_material_ids = '1 1 1'
rod_segment_length = 11.878
front_position_function = 'CR_bott'
rod_withdrawn_direction = 'y'
[]
# riser at 68% density
[riser]
type = CoupledFeedbackNeutronicsMaterial
block = 'riser'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.07419E-02 0.0'
material_id = 1
[]
[cavity]
type = ConstantNeutronicsMaterial
block = 'cavity'
fromFile = false
# computed from Serpent CMM
diffusion_coef = '4.68857E-01 1.52760E-01 1.21025E-01 1.08241E-01 1.72433E-01 1.65906E-01 1.96579E-01 1.79868E-01 2.14727E-01'
sigma_r = '0 0 0 0 0 0 0 0 0'
sigma_s = ' 7.10949E-01 0 0 0 0 0 0 0 0
0 2.18207E+00 0 0 0 0 0 0 0
0 0 2.75425E+00 0 0 0 0 0 0
0 0 0 3.07955E+00 0 0 0 0 0
0 0 0 0 1.93312E+00 0 0 0 0
0 0 0 0 0 2.00917E+00 0 0 0
0 0 0 0 0 0 1.69567E+00 0 0
0 0 0 0 0 0 0 1.85321E+00 0
0 0 0 0 0 0 0 0 1.55236E+00'
diffusion_coefficient_scheme = user_supplied
[]
[]
[Compositions]
[fresh_pebble]
type = IsotopeComposition
density_type = atomic
isotope_densities = 'U234 1.0887E-07
U235 1.3550E-05
U238 1.4209E-04
O16 3.1137E-04
O17 1.1837E-07
Graphite 8.5357E-02
SI28 3.1399E-04
SI29 1.5944E-05
SI30 1.0510E-05
C12 3.4044E-04'
[]
[]
# ==============================================================================
# MultiApps & Transfers
# ==============================================================================
[MultiApps]
[flow]
type = FullSolveMultiApp
input_files = 'htr-pm-flow-fv-ss.i'
keep_solution_during_restore = true
update_old_solution_when_keeping_solution_during_restore = true
positions = '0 0 0'
execute_on = 'TIMESTEP_END'
[]
[]
[Transfers]
[power_density_to_flow]
type = MultiAppNearestNodeTransfer
to_multi_app = flow
source_variable = power_density
variable = power_density
fixed_meshes = true
execute_on = 'TIMESTEP_END'
[]
[T_solid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_solid
variable = T_solid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[T_fluid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_fluid
variable = T_fluid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Eigenvalue
solve_type = PJFNKMO
constant_matrices = true
petsc_options_iname = '-pc_type -pc_hypre_type -ksp_gmres_restart '
petsc_options_value = 'hypre boomeramg 100'
line_search = l2 #none
# Linear/nonlinear iterations.
l_max_its = 200
l_tol = 1e-3
nl_max_its = 200
# tolerances on the equilibrium calculation are
# similar to on the transients at this time, a small drift
# in the null transient could occur
nl_rel_tol = 1e-5
nl_abs_tol = 1e-6
fixed_point_max_its = 50
fixed_point_rel_tol = 1e-5
fixed_point_abs_tol = 1e-6
free_power_iterations = 4
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Outputs]
file_base = htr_pm_griffin_ss_out
checkpoint = true
exodus = true
csv = true
perf_graph = true
execute_on = 'INITIAL FINAL TIMESTEP_END'
[]
[Postprocessors]
[Tsolid_max]
type = ElementExtremeValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tsolid_avg]
type = ElementAverageValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tfluid_avg]
type = ElementAverageValue
variable = T_fluid
execute_on = 'initial timestep_end'
[]
[Tfuel_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tfuel_max]
type = ElementExtremeValue
block = 'pebble_bed'
value_type = max
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tmod_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tmod_avg
execute_on = 'initial timestep_end'
[]
[Tmod_max]
type = ElementExtremeValue
block = 'pebble_bed'
variable = Tmod_max
value_type = max
execute_on = 'initial timestep_end'
[]
[Burnup_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Burnup_avg
execute_on = 'initial timestep_end'
[]
[UnscaledTotalPower]
type = FluxRxnIntegral
block = 'pebble_bed'
cross_section = kappa_sigma_fission
coupled_flux_groups = 'sflux_g0 sflux_g1 sflux_g2
sflux_g3 sflux_g4 sflux_g5
sflux_g6 sflux_g7 sflux_g8'
execute_on = 'initial transfer timestep_end'
[]
[prompt_power]
type = ElementIntegralVariablePostprocessor
block = 'pebble_bed'
variable = prompt_power_density
execute_on = 'initial transfer timestep_end'
[]
[avg_power_density]
type = ElementAverageValue
block = 'pebble_bed'
variable = power_density
execute_on = 'INITIAL transfer timestep_end'
[]
[power_peak]
type = ElementExtremeValue
variable = power_peaking
value_type = max
execute_on = 'initial timestep_end'
[]
[decay_heat]
type = ElementIntegralVariablePostprocessor
variable = total_pebble_decay_heat
block = 'pebble_bed'
execute_on = 'INITIAL TIMESTEP_END'
[]
[]
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)
# ==============================================================================
# Model description
# Equilibrium core neutronics model coupled with TH and pebble temperature models
# ------------------------------------------------------------------------------
# Idaho Falls, INL, April 11, 2023
# Author(s): Dr. Mustafa Jaradat Dr. Sebastian Schunert, Dr. Javier Ortensi
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
initial_temperature = 500.0 # (K)
total_power = 250.0e+6 # Total reactor Power (W)
burnup_group_boundaries = '5.35E+13 1.070E+14 1.604E+14 2.139E+14 2.674E+14 3.209E+14 3.743E+14 4.278E+14 4.818E+14'
# ==============================================================================
# parameters describing the reactor geometry
core_height = 11.0
axial_reflector_height = 3.228
fuel_radius = 1.5
r_streamline_1 = 12.5e-2
r_streamline_2 = 37.5e-2
r_streamline_3 = 62.5e-2
r_streamline_4 = 87.5e-2
r_streamline_5 = 112.5e-2
r_streamline_6 = 137.5e-2
pebble_radius = 3e-2
pebble_volume = ${fparse 4/3*pi * pebble_radius * pebble_radius * pebble_radius}
residence_time = 70.5
pebble_speed = ${fparse core_height / (residence_time * 3600 * 24)}
area = ${fparse pi * fuel_radius * fuel_radius}
pebble_unloading_rate = ${fparse pebble_speed * area * 0.61 / pebble_volume}
# ==============================================================================
# GLOBAL PARAMETERS
# ==============================================================================
[GlobalParams]
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
is_meter = true
plus = true
[]
[TransportSystems]
particle = neutron
equation_type = eigenvalue
G = 9
ReflectingBoundary = 'left'
VacuumBoundary = 'right top bottom'
[diff]
scheme = CFEM-Diffusion
family = LAGRANGE
order = FIRST
n_delay_groups = 6
assemble_scattering_jacobian = true
assemble_fission_jacobian = true
[]
[]
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
type = MeshGeneratorMesh
block_id = ' 1 2 3 4 5 6
7 8 61 71'
block_name = 'pebble_bed upper_ref lower_ref cavity hot_plenum cold_plenum
radial_ref carbon_brick riser cr'
#uniform_refine = 1
[cartesian_mesh]
type = CartesianMeshGenerator
dim = 2
# Total height: 16.8 m
dx = ' 0.250 0.250 0.250 0.250 0.250 0.250
0.010 0.050 0.130 0.080 0.080 0.080
0.200 0.120 0.125 0.125'
ix = ' 1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1'
dy = ' 0.400 0.400 0.100 0.100 0.800 0.300 0.200 0.300 0.216 0.412
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.760 0.712 0.300 0.400 0.400 '
# base: converges fine
iy = '1 1 1 1 2 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 2 1 1 1'
subdomain_id = ' 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
5 5 5 5 5 5 5 5 5 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
4 4 4 4 4 4 7 7 71 7 7 7 61 7 8 8
4 2 2 2 2 2 7 7 71 7 7 7 61 7 8 8
6 6 6 6 6 6 6 6 71 6 6 6 6 7 8 8
7 7 7 7 7 7 7 7 71 7 7 7 7 7 8 8
8 8 8 8 8 8 8 8 71 8 8 8 8 8 8 8 '
[]
[assign_material_id]
type = SubdomainExtraElementIDGenerator
input = cartesian_mesh
extra_element_id_names = 'material_id'
subdomains = '1 2 3 4 5 6 7 8 61 71'
extra_element_ids = '1 1 1 1 1 1 1 1 1 1'
[]
coord_type = RZ
[]
# ==============================================================================
# AUXVARIABLES AND AUXKERNELS
# ==============================================================================
[Functions]
[CR_bott]
type = ConstantFunction
value = '13.678'
[]
[]
[AuxVariables]
[T_solid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[T_fluid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[Tfuel_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tfuel_max]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_max]
order = CONSTANT
family = MONOMIAL
[]
[Burnup]
order = CONSTANT
family = MONOMIAL
components = 10
# use burnup midpoints and add one additional for discard group
initial_condition = '2.675E+13 8.025E+13 1.337E+14 1.872E+14 2.407E+14 2.942E+14 3.476E+14 4.011E+14 4.546E+14 4.546E+14'
outputs = none
[]
[Burnup_avg]
order = CONSTANT
family = MONOMIAL
[]
[porosity]
family = MONOMIAL
order = CONSTANT
initial_condition = 0.39
block = 'pebble_bed'
[]
# Prompt power density is only added automatically for transients
[prompt_power_density]
order = CONSTANT
family = MONOMIAL
[]
[power_peaking]
order = CONSTANT
family = MONOMIAL
[]
[pden_avg]
order = CONSTANT
family = MONOMIAL
[]
[pden_max]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[Tfuel_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tfuel_avg
array_variable = triso_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tfuel_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tfuel_max
array_variable = triso_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tmod_avg
array_variable = graphite_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tmod_max
array_variable = graphite_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Burnup_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Burnup_avg
array_variable = Burnup
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[prompt_power_density_aux]
type = VectorReactionRate
block = 'pebble_bed'
scalar_flux = 'sflux_g0 sflux_g1 sflux_g2 sflux_g3 sflux_g4
sflux_g5 sflux_g6 sflux_g7 sflux_g8'
variable = prompt_power_density
cross_section = kappa_sigma_fission
scale_factor = power_scaling
dummies = UnscaledTotalPower
execute_on = 'INITIAL timestep_end'
[]
[pden_max_aux]
type = ArrayVarExtremeValueAux
block = 'pebble_bed'
variable = pden_max
array_variable = partial_power_density
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[pden_avg_aux]
type = PebbleAveragedAux
block = 'pebble_bed'
variable = pden_avg
array_variable = partial_power_density
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[power_peaking_aux]
type = ParsedAux
block = 'pebble_bed'
variable = power_peaking
coupled_variables = 'power_density'
expression = 'power_density / 3.21525E+06'
execute_on = 'initial timestep_end'
[]
[]
# These objects were used for manual restart
# [UserObjects]
# [power_map]
# type = VariableCartesianCoreMap
# variables = 'power_density'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'power_ss.out'
# []
# [isotopic_map]
# type = VariableCartesianCoreMap
# variables = ' isotope_density_U235 isotope_density_U236 isotope_density_U238 isotope_density_PU238
# isotope_density_PU239 isotope_density_PU240 isotope_density_PU241 isotope_density_PU242
# isotope_density_AM241 isotope_density_AM242M isotope_density_CS135 isotope_density_CS137
# isotope_density_XE135 isotope_density_XE136 isotope_density_I131 isotope_density_I135
# isotope_density_SR90'
# block = pebble_bed
# execute_on= 'FINAL'
# output_in = 'isotopics_ss.out'
# []
# [burnup_map]
# type = VariableCartesianCoreMap
# variables = 'Burnup_avg'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'burnup_ss.out'
# []
# [transport_solution]
# type = TransportSolutionVectorFile
# transport_system = diff
# writing = true
# execute_on = 'FINAL'
# []
# [depletion_solution]
# type = SolutionVectorFile
# var = 'pebble_isotope_density pebble_volume_fraction graphite_temperature
# triso_temperature power_density partial_power_density
# sflux_g0 sflux_g1 sflux_g2
# sflux_g3 sflux_g4 sflux_g5
# sflux_g6 sflux_g7 sflux_g8'
# writing = true
# execute_on = 'FINAL'
# []
# [TH_solution]
# type = SolutionVectorFile
# var = 'T_solid T_fluid'
# writing = true
# execute_on = 'FINAL'
# []
# [init_power_density]
# type = SolutionVectorFile
# var = 'prompt_power_density total_pebble_decay_heat'
# writing = true
# execute_on = 'FINAL'
# []
# []
# ==============================================================================
# MATERIALS
# ==============================================================================
[PebbleBed]
block = 'pebble_bed'
power = ${fparse total_power}
integrated_power_postprocessor = total_power
power_density_variable = power_density
family = MONOMIAL
order = CONSTANT
porosity_name = porosity
burnup_group_boundaries = ${burnup_group_boundaries}
# cross section data
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
burnup_grid_name = 'Burnup'
fuel_temperature_grid_name = 'Tfuel'
moderator_temperature_grid_name = 'Tmod'
# avoid physicality check (old XS library)
dtl_physicality = DISABLE
# transmutation data
dataset = ISOXML
isoxml_data_file = '../xsections/DRAGON5_DT_DH_295.xml'
isoxml_lib_name = 'DRAGON'
initial_moderator_temperature = ${initial_temperature}
initial_fuel_temperature = ${initial_temperature}
n_fresh_pebble_types = 1
fresh_pebble_compositions = 'fresh_pebble'
track_isotopes = ' U235 U236 U238 PU238 PU239 PU240 PU241 PU242 AM241
AM242M CS135 CS137 XE135 XE136 I131 I135 SR90'
output_densities_to_exodus = false
[DepletionScheme]
type = ConstantStreamlineEquilibrium
pebble_unloading_rate = ${pebble_unloading_rate}
pebble_flow_rate_distribution = '0.027777778 0.083333333 0.138888889 0.194444444 0.25 0.305555556'
burnup_limit = 4.818E+14
major_streamline_axis = y
pebble_diameter = 0.06
streamline_points = '${r_streamline_1} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_1} ${axial_reflector_height} 0;
${r_streamline_2} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_2} ${axial_reflector_height} 0;
${r_streamline_3} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_3} ${axial_reflector_height} 0;
${r_streamline_4} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_4} ${axial_reflector_height} 0;
${r_streamline_5} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_5} ${axial_reflector_height} 0;
${r_streamline_6} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_6} ${axial_reflector_height} 0'
streamline_segment_subdivisions = '20; 20; 20; 20; 20; 20'
sweep_tol = 1e-7
sweep_max_iterations = 200
[]
# pebble conduction
pebble_conduction_input_file = 'pebble_triso_ss.i'
pebble_positions_file = 'pebble_heat_pos.txt'
surface_temperature_sub_app_postprocessor = T_surface
surface_temperature_main_app_variable = T_solid
power_sub_app_postprocessor = pebble_power_density
fuel_temperature_sub_app_postprocessor = T_fuel
moderator_temperature_sub_app_postprocessor = T_mod
decay_heat = true
[]
[Materials]
# upper and lower reflectors at 70% density
[axial_reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'upper_ref lower_ref'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.25284E-02 0.0'
material_id = 1
[]
# upper lower plenum at 80% density
[plenum]
type = CoupledFeedbackNeutronicsMaterial
block = 'hot_plenum cold_plenum'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '7.14611E-02 0.0'
material_id = 1
[]
[reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'radial_ref carbon_brick'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '8.93263E-02 0.0'
material_id = 1
[]
# control_rod at 68% density
[control_rod]
type = CoupledFeedbackRoddedNeutronicsMaterial
block = 'cr'
grid_names = 'Tmod Tmod Tmod'
grid_variables = 'T_solid T_solid T_solid'
isotopes = ' Graphite ; Graphite B10 B11 C12 ; Graphite B10 B11 C12 '
densities = ' 6.4277e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 '
segment_material_ids = '1 1 1'
rod_segment_length = 11.878
front_position_function = 'CR_bott'
rod_withdrawn_direction = 'y'
[]
# riser at 68% density
[riser]
type = CoupledFeedbackNeutronicsMaterial
block = 'riser'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.07419E-02 0.0'
material_id = 1
[]
[cavity]
type = ConstantNeutronicsMaterial
block = 'cavity'
fromFile = false
# computed from Serpent CMM
diffusion_coef = '4.68857E-01 1.52760E-01 1.21025E-01 1.08241E-01 1.72433E-01 1.65906E-01 1.96579E-01 1.79868E-01 2.14727E-01'
sigma_r = '0 0 0 0 0 0 0 0 0'
sigma_s = ' 7.10949E-01 0 0 0 0 0 0 0 0
0 2.18207E+00 0 0 0 0 0 0 0
0 0 2.75425E+00 0 0 0 0 0 0
0 0 0 3.07955E+00 0 0 0 0 0
0 0 0 0 1.93312E+00 0 0 0 0
0 0 0 0 0 2.00917E+00 0 0 0
0 0 0 0 0 0 1.69567E+00 0 0
0 0 0 0 0 0 0 1.85321E+00 0
0 0 0 0 0 0 0 0 1.55236E+00'
diffusion_coefficient_scheme = user_supplied
[]
[]
[Compositions]
[fresh_pebble]
type = IsotopeComposition
density_type = atomic
isotope_densities = 'U234 1.0887E-07
U235 1.3550E-05
U238 1.4209E-04
O16 3.1137E-04
O17 1.1837E-07
Graphite 8.5357E-02
SI28 3.1399E-04
SI29 1.5944E-05
SI30 1.0510E-05
C12 3.4044E-04'
[]
[]
# ==============================================================================
# MultiApps & Transfers
# ==============================================================================
[MultiApps]
[flow]
type = FullSolveMultiApp
input_files = 'htr-pm-flow-fv-ss.i'
keep_solution_during_restore = true
update_old_solution_when_keeping_solution_during_restore = true
positions = '0 0 0'
execute_on = 'TIMESTEP_END'
[]
[]
[Transfers]
[power_density_to_flow]
type = MultiAppNearestNodeTransfer
to_multi_app = flow
source_variable = power_density
variable = power_density
fixed_meshes = true
execute_on = 'TIMESTEP_END'
[]
[T_solid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_solid
variable = T_solid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[T_fluid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_fluid
variable = T_fluid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Eigenvalue
solve_type = PJFNKMO
constant_matrices = true
petsc_options_iname = '-pc_type -pc_hypre_type -ksp_gmres_restart '
petsc_options_value = 'hypre boomeramg 100'
line_search = l2 #none
# Linear/nonlinear iterations.
l_max_its = 200
l_tol = 1e-3
nl_max_its = 200
# tolerances on the equilibrium calculation are
# similar to on the transients at this time, a small drift
# in the null transient could occur
nl_rel_tol = 1e-5
nl_abs_tol = 1e-6
fixed_point_max_its = 50
fixed_point_rel_tol = 1e-5
fixed_point_abs_tol = 1e-6
free_power_iterations = 4
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Outputs]
file_base = htr_pm_griffin_ss_out
checkpoint = true
exodus = true
csv = true
perf_graph = true
execute_on = 'INITIAL FINAL TIMESTEP_END'
[]
[Postprocessors]
[Tsolid_max]
type = ElementExtremeValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tsolid_avg]
type = ElementAverageValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tfluid_avg]
type = ElementAverageValue
variable = T_fluid
execute_on = 'initial timestep_end'
[]
[Tfuel_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tfuel_max]
type = ElementExtremeValue
block = 'pebble_bed'
value_type = max
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tmod_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tmod_avg
execute_on = 'initial timestep_end'
[]
[Tmod_max]
type = ElementExtremeValue
block = 'pebble_bed'
variable = Tmod_max
value_type = max
execute_on = 'initial timestep_end'
[]
[Burnup_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Burnup_avg
execute_on = 'initial timestep_end'
[]
[UnscaledTotalPower]
type = FluxRxnIntegral
block = 'pebble_bed'
cross_section = kappa_sigma_fission
coupled_flux_groups = 'sflux_g0 sflux_g1 sflux_g2
sflux_g3 sflux_g4 sflux_g5
sflux_g6 sflux_g7 sflux_g8'
execute_on = 'initial transfer timestep_end'
[]
[prompt_power]
type = ElementIntegralVariablePostprocessor
block = 'pebble_bed'
variable = prompt_power_density
execute_on = 'initial transfer timestep_end'
[]
[avg_power_density]
type = ElementAverageValue
block = 'pebble_bed'
variable = power_density
execute_on = 'INITIAL transfer timestep_end'
[]
[power_peak]
type = ElementExtremeValue
variable = power_peaking
value_type = max
execute_on = 'initial timestep_end'
[]
[decay_heat]
type = ElementIntegralVariablePostprocessor
variable = total_pebble_decay_heat
block = 'pebble_bed'
execute_on = 'INITIAL TIMESTEP_END'
[]
[]
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)
# ==============================================================================
# Model description
# Equilibrium core neutronics model coupled with TH and pebble temperature models
# ------------------------------------------------------------------------------
# Idaho Falls, INL, April 11, 2023
# Author(s): Dr. Mustafa Jaradat Dr. Sebastian Schunert, Dr. Javier Ortensi
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
initial_temperature = 500.0 # (K)
total_power = 250.0e+6 # Total reactor Power (W)
burnup_group_boundaries = '5.35E+13 1.070E+14 1.604E+14 2.139E+14 2.674E+14 3.209E+14 3.743E+14 4.278E+14 4.818E+14'
# ==============================================================================
# parameters describing the reactor geometry
core_height = 11.0
axial_reflector_height = 3.228
fuel_radius = 1.5
r_streamline_1 = 12.5e-2
r_streamline_2 = 37.5e-2
r_streamline_3 = 62.5e-2
r_streamline_4 = 87.5e-2
r_streamline_5 = 112.5e-2
r_streamline_6 = 137.5e-2
pebble_radius = 3e-2
pebble_volume = ${fparse 4/3*pi * pebble_radius * pebble_radius * pebble_radius}
residence_time = 70.5
pebble_speed = ${fparse core_height / (residence_time * 3600 * 24)}
area = ${fparse pi * fuel_radius * fuel_radius}
pebble_unloading_rate = ${fparse pebble_speed * area * 0.61 / pebble_volume}
# ==============================================================================
# GLOBAL PARAMETERS
# ==============================================================================
[GlobalParams]
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
is_meter = true
plus = true
[]
[TransportSystems]
particle = neutron
equation_type = eigenvalue
G = 9
ReflectingBoundary = 'left'
VacuumBoundary = 'right top bottom'
[diff]
scheme = CFEM-Diffusion
family = LAGRANGE
order = FIRST
n_delay_groups = 6
assemble_scattering_jacobian = true
assemble_fission_jacobian = true
[]
[]
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
type = MeshGeneratorMesh
block_id = ' 1 2 3 4 5 6
7 8 61 71'
block_name = 'pebble_bed upper_ref lower_ref cavity hot_plenum cold_plenum
radial_ref carbon_brick riser cr'
#uniform_refine = 1
[cartesian_mesh]
type = CartesianMeshGenerator
dim = 2
# Total height: 16.8 m
dx = ' 0.250 0.250 0.250 0.250 0.250 0.250
0.010 0.050 0.130 0.080 0.080 0.080
0.200 0.120 0.125 0.125'
ix = ' 1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1'
dy = ' 0.400 0.400 0.100 0.100 0.800 0.300 0.200 0.300 0.216 0.412
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.760 0.712 0.300 0.400 0.400 '
# base: converges fine
iy = '1 1 1 1 2 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 2 1 1 1'
subdomain_id = ' 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
5 5 5 5 5 5 5 5 5 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
4 4 4 4 4 4 7 7 71 7 7 7 61 7 8 8
4 2 2 2 2 2 7 7 71 7 7 7 61 7 8 8
6 6 6 6 6 6 6 6 71 6 6 6 6 7 8 8
7 7 7 7 7 7 7 7 71 7 7 7 7 7 8 8
8 8 8 8 8 8 8 8 71 8 8 8 8 8 8 8 '
[]
[assign_material_id]
type = SubdomainExtraElementIDGenerator
input = cartesian_mesh
extra_element_id_names = 'material_id'
subdomains = '1 2 3 4 5 6 7 8 61 71'
extra_element_ids = '1 1 1 1 1 1 1 1 1 1'
[]
coord_type = RZ
[]
# ==============================================================================
# AUXVARIABLES AND AUXKERNELS
# ==============================================================================
[Functions]
[CR_bott]
type = ConstantFunction
value = '13.678'
[]
[]
[AuxVariables]
[T_solid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[T_fluid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[Tfuel_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tfuel_max]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_max]
order = CONSTANT
family = MONOMIAL
[]
[Burnup]
order = CONSTANT
family = MONOMIAL
components = 10
# use burnup midpoints and add one additional for discard group
initial_condition = '2.675E+13 8.025E+13 1.337E+14 1.872E+14 2.407E+14 2.942E+14 3.476E+14 4.011E+14 4.546E+14 4.546E+14'
outputs = none
[]
[Burnup_avg]
order = CONSTANT
family = MONOMIAL
[]
[porosity]
family = MONOMIAL
order = CONSTANT
initial_condition = 0.39
block = 'pebble_bed'
[]
# Prompt power density is only added automatically for transients
[prompt_power_density]
order = CONSTANT
family = MONOMIAL
[]
[power_peaking]
order = CONSTANT
family = MONOMIAL
[]
[pden_avg]
order = CONSTANT
family = MONOMIAL
[]
[pden_max]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[Tfuel_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tfuel_avg
array_variable = triso_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tfuel_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tfuel_max
array_variable = triso_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tmod_avg
array_variable = graphite_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tmod_max
array_variable = graphite_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Burnup_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Burnup_avg
array_variable = Burnup
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[prompt_power_density_aux]
type = VectorReactionRate
block = 'pebble_bed'
scalar_flux = 'sflux_g0 sflux_g1 sflux_g2 sflux_g3 sflux_g4
sflux_g5 sflux_g6 sflux_g7 sflux_g8'
variable = prompt_power_density
cross_section = kappa_sigma_fission
scale_factor = power_scaling
dummies = UnscaledTotalPower
execute_on = 'INITIAL timestep_end'
[]
[pden_max_aux]
type = ArrayVarExtremeValueAux
block = 'pebble_bed'
variable = pden_max
array_variable = partial_power_density
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[pden_avg_aux]
type = PebbleAveragedAux
block = 'pebble_bed'
variable = pden_avg
array_variable = partial_power_density
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[power_peaking_aux]
type = ParsedAux
block = 'pebble_bed'
variable = power_peaking
coupled_variables = 'power_density'
expression = 'power_density / 3.21525E+06'
execute_on = 'initial timestep_end'
[]
[]
# These objects were used for manual restart
# [UserObjects]
# [power_map]
# type = VariableCartesianCoreMap
# variables = 'power_density'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'power_ss.out'
# []
# [isotopic_map]
# type = VariableCartesianCoreMap
# variables = ' isotope_density_U235 isotope_density_U236 isotope_density_U238 isotope_density_PU238
# isotope_density_PU239 isotope_density_PU240 isotope_density_PU241 isotope_density_PU242
# isotope_density_AM241 isotope_density_AM242M isotope_density_CS135 isotope_density_CS137
# isotope_density_XE135 isotope_density_XE136 isotope_density_I131 isotope_density_I135
# isotope_density_SR90'
# block = pebble_bed
# execute_on= 'FINAL'
# output_in = 'isotopics_ss.out'
# []
# [burnup_map]
# type = VariableCartesianCoreMap
# variables = 'Burnup_avg'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'burnup_ss.out'
# []
# [transport_solution]
# type = TransportSolutionVectorFile
# transport_system = diff
# writing = true
# execute_on = 'FINAL'
# []
# [depletion_solution]
# type = SolutionVectorFile
# var = 'pebble_isotope_density pebble_volume_fraction graphite_temperature
# triso_temperature power_density partial_power_density
# sflux_g0 sflux_g1 sflux_g2
# sflux_g3 sflux_g4 sflux_g5
# sflux_g6 sflux_g7 sflux_g8'
# writing = true
# execute_on = 'FINAL'
# []
# [TH_solution]
# type = SolutionVectorFile
# var = 'T_solid T_fluid'
# writing = true
# execute_on = 'FINAL'
# []
# [init_power_density]
# type = SolutionVectorFile
# var = 'prompt_power_density total_pebble_decay_heat'
# writing = true
# execute_on = 'FINAL'
# []
# []
# ==============================================================================
# MATERIALS
# ==============================================================================
[PebbleBed]
block = 'pebble_bed'
power = ${fparse total_power}
integrated_power_postprocessor = total_power
power_density_variable = power_density
family = MONOMIAL
order = CONSTANT
porosity_name = porosity
burnup_group_boundaries = ${burnup_group_boundaries}
# cross section data
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
burnup_grid_name = 'Burnup'
fuel_temperature_grid_name = 'Tfuel'
moderator_temperature_grid_name = 'Tmod'
# avoid physicality check (old XS library)
dtl_physicality = DISABLE
# transmutation data
dataset = ISOXML
isoxml_data_file = '../xsections/DRAGON5_DT_DH_295.xml'
isoxml_lib_name = 'DRAGON'
initial_moderator_temperature = ${initial_temperature}
initial_fuel_temperature = ${initial_temperature}
n_fresh_pebble_types = 1
fresh_pebble_compositions = 'fresh_pebble'
track_isotopes = ' U235 U236 U238 PU238 PU239 PU240 PU241 PU242 AM241
AM242M CS135 CS137 XE135 XE136 I131 I135 SR90'
output_densities_to_exodus = false
[DepletionScheme]
type = ConstantStreamlineEquilibrium
pebble_unloading_rate = ${pebble_unloading_rate}
pebble_flow_rate_distribution = '0.027777778 0.083333333 0.138888889 0.194444444 0.25 0.305555556'
burnup_limit = 4.818E+14
major_streamline_axis = y
pebble_diameter = 0.06
streamline_points = '${r_streamline_1} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_1} ${axial_reflector_height} 0;
${r_streamline_2} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_2} ${axial_reflector_height} 0;
${r_streamline_3} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_3} ${axial_reflector_height} 0;
${r_streamline_4} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_4} ${axial_reflector_height} 0;
${r_streamline_5} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_5} ${axial_reflector_height} 0;
${r_streamline_6} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_6} ${axial_reflector_height} 0'
streamline_segment_subdivisions = '20; 20; 20; 20; 20; 20'
sweep_tol = 1e-7
sweep_max_iterations = 200
[]
# pebble conduction
pebble_conduction_input_file = 'pebble_triso_ss.i'
pebble_positions_file = 'pebble_heat_pos.txt'
surface_temperature_sub_app_postprocessor = T_surface
surface_temperature_main_app_variable = T_solid
power_sub_app_postprocessor = pebble_power_density
fuel_temperature_sub_app_postprocessor = T_fuel
moderator_temperature_sub_app_postprocessor = T_mod
decay_heat = true
[]
[Materials]
# upper and lower reflectors at 70% density
[axial_reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'upper_ref lower_ref'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.25284E-02 0.0'
material_id = 1
[]
# upper lower plenum at 80% density
[plenum]
type = CoupledFeedbackNeutronicsMaterial
block = 'hot_plenum cold_plenum'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '7.14611E-02 0.0'
material_id = 1
[]
[reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'radial_ref carbon_brick'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '8.93263E-02 0.0'
material_id = 1
[]
# control_rod at 68% density
[control_rod]
type = CoupledFeedbackRoddedNeutronicsMaterial
block = 'cr'
grid_names = 'Tmod Tmod Tmod'
grid_variables = 'T_solid T_solid T_solid'
isotopes = ' Graphite ; Graphite B10 B11 C12 ; Graphite B10 B11 C12 '
densities = ' 6.4277e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 '
segment_material_ids = '1 1 1'
rod_segment_length = 11.878
front_position_function = 'CR_bott'
rod_withdrawn_direction = 'y'
[]
# riser at 68% density
[riser]
type = CoupledFeedbackNeutronicsMaterial
block = 'riser'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.07419E-02 0.0'
material_id = 1
[]
[cavity]
type = ConstantNeutronicsMaterial
block = 'cavity'
fromFile = false
# computed from Serpent CMM
diffusion_coef = '4.68857E-01 1.52760E-01 1.21025E-01 1.08241E-01 1.72433E-01 1.65906E-01 1.96579E-01 1.79868E-01 2.14727E-01'
sigma_r = '0 0 0 0 0 0 0 0 0'
sigma_s = ' 7.10949E-01 0 0 0 0 0 0 0 0
0 2.18207E+00 0 0 0 0 0 0 0
0 0 2.75425E+00 0 0 0 0 0 0
0 0 0 3.07955E+00 0 0 0 0 0
0 0 0 0 1.93312E+00 0 0 0 0
0 0 0 0 0 2.00917E+00 0 0 0
0 0 0 0 0 0 1.69567E+00 0 0
0 0 0 0 0 0 0 1.85321E+00 0
0 0 0 0 0 0 0 0 1.55236E+00'
diffusion_coefficient_scheme = user_supplied
[]
[]
[Compositions]
[fresh_pebble]
type = IsotopeComposition
density_type = atomic
isotope_densities = 'U234 1.0887E-07
U235 1.3550E-05
U238 1.4209E-04
O16 3.1137E-04
O17 1.1837E-07
Graphite 8.5357E-02
SI28 3.1399E-04
SI29 1.5944E-05
SI30 1.0510E-05
C12 3.4044E-04'
[]
[]
# ==============================================================================
# MultiApps & Transfers
# ==============================================================================
[MultiApps]
[flow]
type = FullSolveMultiApp
input_files = 'htr-pm-flow-fv-ss.i'
keep_solution_during_restore = true
update_old_solution_when_keeping_solution_during_restore = true
positions = '0 0 0'
execute_on = 'TIMESTEP_END'
[]
[]
[Transfers]
[power_density_to_flow]
type = MultiAppNearestNodeTransfer
to_multi_app = flow
source_variable = power_density
variable = power_density
fixed_meshes = true
execute_on = 'TIMESTEP_END'
[]
[T_solid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_solid
variable = T_solid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[T_fluid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_fluid
variable = T_fluid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Eigenvalue
solve_type = PJFNKMO
constant_matrices = true
petsc_options_iname = '-pc_type -pc_hypre_type -ksp_gmres_restart '
petsc_options_value = 'hypre boomeramg 100'
line_search = l2 #none
# Linear/nonlinear iterations.
l_max_its = 200
l_tol = 1e-3
nl_max_its = 200
# tolerances on the equilibrium calculation are
# similar to on the transients at this time, a small drift
# in the null transient could occur
nl_rel_tol = 1e-5
nl_abs_tol = 1e-6
fixed_point_max_its = 50
fixed_point_rel_tol = 1e-5
fixed_point_abs_tol = 1e-6
free_power_iterations = 4
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Outputs]
file_base = htr_pm_griffin_ss_out
checkpoint = true
exodus = true
csv = true
perf_graph = true
execute_on = 'INITIAL FINAL TIMESTEP_END'
[]
[Postprocessors]
[Tsolid_max]
type = ElementExtremeValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tsolid_avg]
type = ElementAverageValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tfluid_avg]
type = ElementAverageValue
variable = T_fluid
execute_on = 'initial timestep_end'
[]
[Tfuel_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tfuel_max]
type = ElementExtremeValue
block = 'pebble_bed'
value_type = max
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tmod_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tmod_avg
execute_on = 'initial timestep_end'
[]
[Tmod_max]
type = ElementExtremeValue
block = 'pebble_bed'
variable = Tmod_max
value_type = max
execute_on = 'initial timestep_end'
[]
[Burnup_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Burnup_avg
execute_on = 'initial timestep_end'
[]
[UnscaledTotalPower]
type = FluxRxnIntegral
block = 'pebble_bed'
cross_section = kappa_sigma_fission
coupled_flux_groups = 'sflux_g0 sflux_g1 sflux_g2
sflux_g3 sflux_g4 sflux_g5
sflux_g6 sflux_g7 sflux_g8'
execute_on = 'initial transfer timestep_end'
[]
[prompt_power]
type = ElementIntegralVariablePostprocessor
block = 'pebble_bed'
variable = prompt_power_density
execute_on = 'initial transfer timestep_end'
[]
[avg_power_density]
type = ElementAverageValue
block = 'pebble_bed'
variable = power_density
execute_on = 'INITIAL transfer timestep_end'
[]
[power_peak]
type = ElementExtremeValue
variable = power_peaking
value_type = max
execute_on = 'initial timestep_end'
[]
[decay_heat]
type = ElementIntegralVariablePostprocessor
variable = total_pebble_decay_heat
block = 'pebble_bed'
execute_on = 'INITIAL TIMESTEP_END'
[]
[]
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr_pm_neutronics_ss.i)
# ==============================================================================
# Model description
# Equilibrium core neutronics model coupled with TH and pebble temperature models
# ------------------------------------------------------------------------------
# Idaho Falls, INL, April 11, 2023
# Author(s): Dr. Mustafa Jaradat Dr. Sebastian Schunert, Dr. Javier Ortensi
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
initial_temperature = 500.0 # (K)
total_power = 250.0e+6 # Total reactor Power (W)
burnup_group_boundaries = '5.35E+13 1.070E+14 1.604E+14 2.139E+14 2.674E+14 3.209E+14 3.743E+14 4.278E+14 4.818E+14'
# ==============================================================================
# parameters describing the reactor geometry
core_height = 11.0
axial_reflector_height = 3.228
fuel_radius = 1.5
r_streamline_1 = 12.5e-2
r_streamline_2 = 37.5e-2
r_streamline_3 = 62.5e-2
r_streamline_4 = 87.5e-2
r_streamline_5 = 112.5e-2
r_streamline_6 = 137.5e-2
pebble_radius = 3e-2
pebble_volume = ${fparse 4/3*pi * pebble_radius * pebble_radius * pebble_radius}
residence_time = 70.5
pebble_speed = ${fparse core_height / (residence_time * 3600 * 24)}
area = ${fparse pi * fuel_radius * fuel_radius}
pebble_unloading_rate = ${fparse pebble_speed * area * 0.61 / pebble_volume}
# ==============================================================================
# GLOBAL PARAMETERS
# ==============================================================================
[GlobalParams]
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
is_meter = true
plus = true
[]
[TransportSystems]
particle = neutron
equation_type = eigenvalue
G = 9
ReflectingBoundary = 'left'
VacuumBoundary = 'right top bottom'
[diff]
scheme = CFEM-Diffusion
family = LAGRANGE
order = FIRST
n_delay_groups = 6
assemble_scattering_jacobian = true
assemble_fission_jacobian = true
[]
[]
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
type = MeshGeneratorMesh
block_id = ' 1 2 3 4 5 6
7 8 61 71'
block_name = 'pebble_bed upper_ref lower_ref cavity hot_plenum cold_plenum
radial_ref carbon_brick riser cr'
#uniform_refine = 1
[cartesian_mesh]
type = CartesianMeshGenerator
dim = 2
# Total height: 16.8 m
dx = ' 0.250 0.250 0.250 0.250 0.250 0.250
0.010 0.050 0.130 0.080 0.080 0.080
0.200 0.120 0.125 0.125'
ix = ' 1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1'
dy = ' 0.400 0.400 0.100 0.100 0.800 0.300 0.200 0.300 0.216 0.412
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.760 0.712 0.300 0.400 0.400 '
# base: converges fine
iy = '1 1 1 1 2 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 2 1 1 1'
subdomain_id = ' 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8
5 5 5 5 5 5 5 5 5 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8
4 4 4 4 4 4 7 7 71 7 7 7 61 7 8 8
4 2 2 2 2 2 7 7 71 7 7 7 61 7 8 8
6 6 6 6 6 6 6 6 71 6 6 6 6 7 8 8
7 7 7 7 7 7 7 7 71 7 7 7 7 7 8 8
8 8 8 8 8 8 8 8 71 8 8 8 8 8 8 8 '
[]
[assign_material_id]
type = SubdomainExtraElementIDGenerator
input = cartesian_mesh
extra_element_id_names = 'material_id'
subdomains = '1 2 3 4 5 6 7 8 61 71'
extra_element_ids = '1 1 1 1 1 1 1 1 1 1'
[]
coord_type = RZ
[]
# ==============================================================================
# AUXVARIABLES AND AUXKERNELS
# ==============================================================================
[Functions]
[CR_bott]
type = ConstantFunction
value = '13.678'
[]
[]
[AuxVariables]
[T_solid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[T_fluid]
family = MONOMIAL
order = CONSTANT
initial_condition = ${initial_temperature}
[]
[Tfuel_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tfuel_max]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_avg]
order = CONSTANT
family = MONOMIAL
[]
[Tmod_max]
order = CONSTANT
family = MONOMIAL
[]
[Burnup]
order = CONSTANT
family = MONOMIAL
components = 10
# use burnup midpoints and add one additional for discard group
initial_condition = '2.675E+13 8.025E+13 1.337E+14 1.872E+14 2.407E+14 2.942E+14 3.476E+14 4.011E+14 4.546E+14 4.546E+14'
outputs = none
[]
[Burnup_avg]
order = CONSTANT
family = MONOMIAL
[]
[porosity]
family = MONOMIAL
order = CONSTANT
initial_condition = 0.39
block = 'pebble_bed'
[]
# Prompt power density is only added automatically for transients
[prompt_power_density]
order = CONSTANT
family = MONOMIAL
[]
[power_peaking]
order = CONSTANT
family = MONOMIAL
[]
[pden_avg]
order = CONSTANT
family = MONOMIAL
[]
[pden_max]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[Tfuel_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tfuel_avg
array_variable = triso_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tfuel_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tfuel_max
array_variable = triso_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Tmod_avg
array_variable = graphite_temperature
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[Tmod_max_aux]
type = ArrayVarExtremeValueAux
block = pebble_bed
variable = Tmod_max
array_variable = graphite_temperature
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[Burnup_avg_aux]
type = PebbleAveragedAux
block = pebble_bed
variable = Burnup_avg
array_variable = Burnup
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[prompt_power_density_aux]
type = VectorReactionRate
block = 'pebble_bed'
scalar_flux = 'sflux_g0 sflux_g1 sflux_g2 sflux_g3 sflux_g4
sflux_g5 sflux_g6 sflux_g7 sflux_g8'
variable = prompt_power_density
cross_section = kappa_sigma_fission
scale_factor = power_scaling
dummies = UnscaledTotalPower
execute_on = 'INITIAL timestep_end'
[]
[pden_max_aux]
type = ArrayVarExtremeValueAux
block = 'pebble_bed'
variable = pden_max
array_variable = partial_power_density
value_type = MAX
execute_on = 'INITIAL TIMESTEP_END'
[]
[pden_avg_aux]
type = PebbleAveragedAux
block = 'pebble_bed'
variable = pden_avg
array_variable = partial_power_density
pebble_volume_fraction = pebble_volume_fraction
n_fresh_pebble_types = 1
execute_on = 'INITIAL TIMESTEP_END'
[]
[power_peaking_aux]
type = ParsedAux
block = 'pebble_bed'
variable = power_peaking
coupled_variables = 'power_density'
expression = 'power_density / 3.21525E+06'
execute_on = 'initial timestep_end'
[]
[]
# These objects were used for manual restart
# [UserObjects]
# [power_map]
# type = VariableCartesianCoreMap
# variables = 'power_density'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'power_ss.out'
# []
# [isotopic_map]
# type = VariableCartesianCoreMap
# variables = ' isotope_density_U235 isotope_density_U236 isotope_density_U238 isotope_density_PU238
# isotope_density_PU239 isotope_density_PU240 isotope_density_PU241 isotope_density_PU242
# isotope_density_AM241 isotope_density_AM242M isotope_density_CS135 isotope_density_CS137
# isotope_density_XE135 isotope_density_XE136 isotope_density_I131 isotope_density_I135
# isotope_density_SR90'
# block = pebble_bed
# execute_on= 'FINAL'
# output_in = 'isotopics_ss.out'
# []
# [burnup_map]
# type = VariableCartesianCoreMap
# variables = 'Burnup_avg'
# block = pebble_bed
# execute_on = 'FINAL'
# output_in = 'burnup_ss.out'
# []
# [transport_solution]
# type = TransportSolutionVectorFile
# transport_system = diff
# writing = true
# execute_on = 'FINAL'
# []
# [depletion_solution]
# type = SolutionVectorFile
# var = 'pebble_isotope_density pebble_volume_fraction graphite_temperature
# triso_temperature power_density partial_power_density
# sflux_g0 sflux_g1 sflux_g2
# sflux_g3 sflux_g4 sflux_g5
# sflux_g6 sflux_g7 sflux_g8'
# writing = true
# execute_on = 'FINAL'
# []
# [TH_solution]
# type = SolutionVectorFile
# var = 'T_solid T_fluid'
# writing = true
# execute_on = 'FINAL'
# []
# [init_power_density]
# type = SolutionVectorFile
# var = 'prompt_power_density total_pebble_decay_heat'
# writing = true
# execute_on = 'FINAL'
# []
# []
# ==============================================================================
# MATERIALS
# ==============================================================================
[PebbleBed]
block = 'pebble_bed'
power = ${fparse total_power}
integrated_power_postprocessor = total_power
power_density_variable = power_density
family = MONOMIAL
order = CONSTANT
porosity_name = porosity
burnup_group_boundaries = ${burnup_group_boundaries}
# cross section data
library_file = '../xsections/HTR-PM_9G-Tnew.xml'
library_name = 'HTR-PM'
burnup_grid_name = 'Burnup'
fuel_temperature_grid_name = 'Tfuel'
moderator_temperature_grid_name = 'Tmod'
# avoid physicality check (old XS library)
dtl_physicality = DISABLE
# transmutation data
dataset = ISOXML
isoxml_data_file = '../xsections/DRAGON5_DT_DH_295.xml'
isoxml_lib_name = 'DRAGON'
initial_moderator_temperature = ${initial_temperature}
initial_fuel_temperature = ${initial_temperature}
n_fresh_pebble_types = 1
fresh_pebble_compositions = 'fresh_pebble'
track_isotopes = ' U235 U236 U238 PU238 PU239 PU240 PU241 PU242 AM241
AM242M CS135 CS137 XE135 XE136 I131 I135 SR90'
output_densities_to_exodus = false
[DepletionScheme]
type = ConstantStreamlineEquilibrium
pebble_unloading_rate = ${pebble_unloading_rate}
pebble_flow_rate_distribution = '0.027777778 0.083333333 0.138888889 0.194444444 0.25 0.305555556'
burnup_limit = 4.818E+14
major_streamline_axis = y
pebble_diameter = 0.06
streamline_points = '${r_streamline_1} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_1} ${axial_reflector_height} 0;
${r_streamline_2} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_2} ${axial_reflector_height} 0;
${r_streamline_3} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_3} ${axial_reflector_height} 0;
${r_streamline_4} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_4} ${axial_reflector_height} 0;
${r_streamline_5} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_5} ${axial_reflector_height} 0;
${r_streamline_6} ${fparse core_height + axial_reflector_height} 0 ${r_streamline_6} ${axial_reflector_height} 0'
streamline_segment_subdivisions = '20; 20; 20; 20; 20; 20'
sweep_tol = 1e-7
sweep_max_iterations = 200
[]
# pebble conduction
pebble_conduction_input_file = 'pebble_triso_ss.i'
pebble_positions_file = 'pebble_heat_pos.txt'
surface_temperature_sub_app_postprocessor = T_surface
surface_temperature_main_app_variable = T_solid
power_sub_app_postprocessor = pebble_power_density
fuel_temperature_sub_app_postprocessor = T_fuel
moderator_temperature_sub_app_postprocessor = T_mod
decay_heat = true
[]
[Materials]
# upper and lower reflectors at 70% density
[axial_reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'upper_ref lower_ref'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.25284E-02 0.0'
material_id = 1
[]
# upper lower plenum at 80% density
[plenum]
type = CoupledFeedbackNeutronicsMaterial
block = 'hot_plenum cold_plenum'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '7.14611E-02 0.0'
material_id = 1
[]
[reflector]
type = CoupledFeedbackNeutronicsMaterial
block = 'radial_ref carbon_brick'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '8.93263E-02 0.0'
material_id = 1
[]
# control_rod at 68% density
[control_rod]
type = CoupledFeedbackRoddedNeutronicsMaterial
block = 'cr'
grid_names = 'Tmod Tmod Tmod'
grid_variables = 'T_solid T_solid T_solid'
isotopes = ' Graphite ; Graphite B10 B11 C12 ; Graphite B10 B11 C12 '
densities = ' 6.4277e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 6.4277e-02 1.6373e-03 5.9938e-03 1.6004e-02 '
segment_material_ids = '1 1 1'
rod_segment_length = 11.878
front_position_function = 'CR_bott'
rod_withdrawn_direction = 'y'
[]
# riser at 68% density
[riser]
type = CoupledFeedbackNeutronicsMaterial
block = 'riser'
grid_names = 'Tmod'
grid_variables = 'T_solid'
isotopes = 'Graphite U235'
densities = '6.07419E-02 0.0'
material_id = 1
[]
[cavity]
type = ConstantNeutronicsMaterial
block = 'cavity'
fromFile = false
# computed from Serpent CMM
diffusion_coef = '4.68857E-01 1.52760E-01 1.21025E-01 1.08241E-01 1.72433E-01 1.65906E-01 1.96579E-01 1.79868E-01 2.14727E-01'
sigma_r = '0 0 0 0 0 0 0 0 0'
sigma_s = ' 7.10949E-01 0 0 0 0 0 0 0 0
0 2.18207E+00 0 0 0 0 0 0 0
0 0 2.75425E+00 0 0 0 0 0 0
0 0 0 3.07955E+00 0 0 0 0 0
0 0 0 0 1.93312E+00 0 0 0 0
0 0 0 0 0 2.00917E+00 0 0 0
0 0 0 0 0 0 1.69567E+00 0 0
0 0 0 0 0 0 0 1.85321E+00 0
0 0 0 0 0 0 0 0 1.55236E+00'
diffusion_coefficient_scheme = user_supplied
[]
[]
[Compositions]
[fresh_pebble]
type = IsotopeComposition
density_type = atomic
isotope_densities = 'U234 1.0887E-07
U235 1.3550E-05
U238 1.4209E-04
O16 3.1137E-04
O17 1.1837E-07
Graphite 8.5357E-02
SI28 3.1399E-04
SI29 1.5944E-05
SI30 1.0510E-05
C12 3.4044E-04'
[]
[]
# ==============================================================================
# MultiApps & Transfers
# ==============================================================================
[MultiApps]
[flow]
type = FullSolveMultiApp
input_files = 'htr-pm-flow-fv-ss.i'
keep_solution_during_restore = true
update_old_solution_when_keeping_solution_during_restore = true
positions = '0 0 0'
execute_on = 'TIMESTEP_END'
[]
[]
[Transfers]
[power_density_to_flow]
type = MultiAppNearestNodeTransfer
to_multi_app = flow
source_variable = power_density
variable = power_density
fixed_meshes = true
execute_on = 'TIMESTEP_END'
[]
[T_solid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_solid
variable = T_solid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[T_fluid_from_flow]
type = MultiAppNearestNodeTransfer
from_multi_app = flow
source_variable = T_fluid
variable = T_fluid
execute_on = 'TIMESTEP_END'
fixed_meshes = true
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Eigenvalue
solve_type = PJFNKMO
constant_matrices = true
petsc_options_iname = '-pc_type -pc_hypre_type -ksp_gmres_restart '
petsc_options_value = 'hypre boomeramg 100'
line_search = l2 #none
# Linear/nonlinear iterations.
l_max_its = 200
l_tol = 1e-3
nl_max_its = 200
# tolerances on the equilibrium calculation are
# similar to on the transients at this time, a small drift
# in the null transient could occur
nl_rel_tol = 1e-5
nl_abs_tol = 1e-6
fixed_point_max_its = 50
fixed_point_rel_tol = 1e-5
fixed_point_abs_tol = 1e-6
free_power_iterations = 4
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Outputs]
file_base = htr_pm_griffin_ss_out
checkpoint = true
exodus = true
csv = true
perf_graph = true
execute_on = 'INITIAL FINAL TIMESTEP_END'
[]
[Postprocessors]
[Tsolid_max]
type = ElementExtremeValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tsolid_avg]
type = ElementAverageValue
variable = T_solid
execute_on = 'initial timestep_end'
[]
[Tfluid_avg]
type = ElementAverageValue
variable = T_fluid
execute_on = 'initial timestep_end'
[]
[Tfuel_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tfuel_max]
type = ElementExtremeValue
block = 'pebble_bed'
value_type = max
variable = Tfuel_avg
execute_on = 'initial timestep_end'
[]
[Tmod_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Tmod_avg
execute_on = 'initial timestep_end'
[]
[Tmod_max]
type = ElementExtremeValue
block = 'pebble_bed'
variable = Tmod_max
value_type = max
execute_on = 'initial timestep_end'
[]
[Burnup_avg]
type = ElementAverageValue
block = 'pebble_bed'
variable = Burnup_avg
execute_on = 'initial timestep_end'
[]
[UnscaledTotalPower]
type = FluxRxnIntegral
block = 'pebble_bed'
cross_section = kappa_sigma_fission
coupled_flux_groups = 'sflux_g0 sflux_g1 sflux_g2
sflux_g3 sflux_g4 sflux_g5
sflux_g6 sflux_g7 sflux_g8'
execute_on = 'initial transfer timestep_end'
[]
[prompt_power]
type = ElementIntegralVariablePostprocessor
block = 'pebble_bed'
variable = prompt_power_density
execute_on = 'initial transfer timestep_end'
[]
[avg_power_density]
type = ElementAverageValue
block = 'pebble_bed'
variable = power_density
execute_on = 'INITIAL transfer timestep_end'
[]
[power_peak]
type = ElementExtremeValue
variable = power_peaking
value_type = max
execute_on = 'initial timestep_end'
[]
[decay_heat]
type = ElementIntegralVariablePostprocessor
variable = total_pebble_decay_heat
block = 'pebble_bed'
execute_on = 'INITIAL TIMESTEP_END'
[]
[]