MSR Depletion Model
Contact: Olin Calvin [email protected]
Model link: MSR Depletion Model
The MSR depletion model is an implementation and verification of Griffin's isotope removal capability for two multi-region MSR depletion cases. This model consists of two regions. The first is the primary loop, which includes the reactor core, primary heat exchanger, and pump all homogenized into a single region, and the second is the off-gas system. The model approximates an MSR core as a fast spectrum, cube-geometry, infinite, homogenous medium, molten chloride salt reactor using High-Assay Low-Enriched Uranium (HALEU) UCl fuel. The important parameters for this model are given in Table 1. This model is used for isotope depletion cases with and without removal to the off-gas system, and is also the starting point for analyzing what type of insoluble material may be removed into the off gas during burnup (Walker et al., 2022).
Table 1: Simple MSR Test Case Design Specifications
| Parameter | Value |
|---|---|
| Salt Composition | UCl- NaCl |
| Salt Density | g/cm |
| Enrichment | % |
| Volume | cm |
| Temperature | C |
| Power Density - Power | W/g - MW |
| 1G Flux | neutrons/(cm s) |
| Fission Rate | fissions/(cm s) |
| K | |
| Spectrum | Fast |
Griffin Model
Griffin is used to model the depletion of the MSR which solves the Bateman equations with removal discussed in the Method and results section. This section will discuss how to run the model and describe the input files for the depletion with no iodine removal and depletion with isotopic removal models.
Obtaining and Running the Griffin Model
Depletion with no iodine removal Model
The complete input file for the Depletion with no iodine removal model is shown below.
# Generic Molten Salt Reactor Depletion
# Griffin input
# Depletion with isotopic removal
# POC: Olin Calvin (olin.calvin at inl.gov)
# If using or referring to this model, please cite as explained in
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
[Mesh]
[gmg]
type = GeneratedIDMeshGenerator
dim = 2
depletion_ids = 0
material_ids = 1
[]
[]
[Problem]
type = FEProblem
solve = false
kernel_coverage_check = false
[]
[AuxVariables]
[Burnup]
order = CONSTANT
family = MONOMIAL
initial_condition = 0.0
[]
[flux]
order = CONSTANT
family = MONOMIAL
initial_condition = 8.3989E15
[]
[]
[AuxKernels]
[constant]
variable = flux
type = ConstantAux
value = 8.3989E15
[]
[SetBurnup]
type = FunctionAux
function = SetBurnup
variable = Burnup
execute_on = timestep_begin
[]
[]
[Functions]
[SetBurnup]
type = PiecewiseLinear
x = '0 1800 3600 608400 1213200 1818000 2422800 3027600 3632400 4237200 4842000 5446800 6051600'
y = '0 0 0 0 0 0 0 0 0 0 0 0 0'
[]
[]
[Compositions]
[fuel_salt]
type = IsotopeComposition
isotope_densities = 'CL35 1.55753e-02
CL37 4.98332e-03
NA23 8.23094e-03
U232 7.49749e-10
U234 4.05961e-05
U235 8.12118e-04
U236 1.11782e-05
U238 3.20723e-03'
density_type = atomic
composition_ids = '1'
[]
[]
[Materials]
[Mat_1]
type = MSRDepletionNeutronicsMaterial
block = 0
library_file = '../data/MSR_XS.xml'
library_name = 'MSR_XS'
# multiphysics variables
grid_names = 'Burnup'
grid_variables = 'Burnup'
scalar_fluxes = 'flux'
# decay & transmutation data
dataset = 'ISOXML'
isoxml_data_file = '../data/MSR_DT.xml'
isoxml_lib_name = 'MSR_DT'
# Bateman solve settings
bateman_solver = 'CRAMIPF'
bateman_solver_tolerance = 1e-100
cram_ipf_order = 48
cram_matrix_inversion_scheme = sparse_gaussian_elimination
track_secondary_particle_production = true
print_number_densities = 'ALL'
number_of_external_regions = 1
multi_region_isotope_list = 'I127 I129'
multi_region_isotope_densities = '0 0'
multi_region_volumes = 1.0
multi_region_names = 'Out_Of_Core'
multi_region_transfer_paths = '0 1'
multi_region_transfer_isotopes = 'I127 I129'
multi_region_transfer_isotope_rates = '0 0'
[]
[]
[Executioner]
type = Transient # Here we use the Transient Executioner
[TimeStepper]
type = TimeSequenceStepper
time_sequence = '1800 3600 608400 1213200 1818000 2422800 3027600 3632400 4237200 4842000 5446800 6051600'
[]
start_time = 0.0
end_time = 6051600
[]
[Outputs]
csv = false
[](msr/generic_msr/depletion/0D_No_Iodine_Removal_1G.i)In the following sections, we will discuss each of the input blocks.
Mesh and Problem
In this section, we will cover the mesh and problem inputs. The full input blocks can be found below.
[Mesh]
[gmg]
type = GeneratedIDMeshGenerator
dim = 2
depletion_ids = 0
material_ids = 1
[]
[](msr/generic_msr/depletion/0D_No_Iodine_Removal_1G.i)[Problem]
type = FEProblem
solve = false
kernel_coverage_check = false
[](msr/generic_msr/depletion/0D_No_Iodine_Removal_1G.i)Here a very simple mesh is generated using the GeneratedIDMeshGenerator which is not currently used explicitly for this problem. Additionally, a simple problem statement is also specified. The reason for this, is because the majority of this model is actually a VectorPostprocessor which will be discussed shortly.
AuxVariables, AuxKernels, and Functions
AuxVariables are variables that can be derived from the solution variables (i.e., scalar flux). An AuxKernel is a procedure that uses the solution variable to compute the AuxVariable (i.e., reaction rate).
There are two AuxVariables that are defined in this model: the burnup measured in time and the neutron flux.
[AuxVariables]
[Burnup]
order = CONSTANT
family = MONOMIAL
initial_condition = 0.0
[]
[flux]
order = CONSTANT
family = MONOMIAL
initial_condition = 8.3989E15
[]
[](msr/generic_msr/depletion/0D_No_Iodine_Removal_1G.i)The AuxKernels are locally defined with the names [constant] and [SetBurnup], and are of the ConstantAux and FunctionAux type respectively. The AuxVariable that the kernel acts on is defined with AuxVariable defined previously. Lastly, we tell it to execute_on the end of a time step.
[AuxKernels]
[constant]
variable = flux
type = ConstantAux
value = 8.3989E15
[]
[SetBurnup]
type = FunctionAux
function = SetBurnup
variable = Burnup
execute_on = timestep_begin
[]
[](msr/generic_msr/depletion/0D_No_Iodine_Removal_1G.i)Since we are using a FunctionAux we will still need to define this function in another block.
[Functions]
[SetBurnup]
type = PiecewiseLinear
x = '0 1800 3600 608400 1213200 1818000 2422800 3027600 3632400 4237200 4842000 5446800 6051600'
y = '0 0 0 0 0 0 0 0 0 0 0 0 0'
[]
[](msr/generic_msr/depletion/0D_No_Iodine_Removal_1G.i)Here we set the depletion time steps (given in seconds) that we would like to use via a PiecewiseLinear type of function.
Materials
Material cross sections are specified with the multi-group cross section library defined by library_file In this example, we define one generic material [Mat_1]. For this material we specify the type as a CoupledFeedbackNeutronicsMaterial.
In this example, we have a generic pseudo mixture with a density that is defined here in this block. Since we are performing isotopic depletion, the primary purpose of this block is to set up the grid_variables = 'Burnup' and scalar_fluxes = 'flux' and not to operate on the macroscopic cross sections defined here.
[Materials]
[Mat_1]
type = MSRDepletionNeutronicsMaterial
block = 0
library_file = '../data/MSR_XS.xml'
library_name = 'MSR_XS'
# multiphysics variables
grid_names = 'Burnup'
grid_variables = 'Burnup'
scalar_fluxes = 'flux'
# decay & transmutation data
dataset = 'ISOXML'
isoxml_data_file = '../data/MSR_DT.xml'
isoxml_lib_name = 'MSR_DT'
# Bateman solve settings
bateman_solver = 'CRAMIPF'
bateman_solver_tolerance = 1e-100
cram_ipf_order = 48
cram_matrix_inversion_scheme = sparse_gaussian_elimination
track_secondary_particle_production = true
print_number_densities = 'ALL'
number_of_external_regions = 1
multi_region_isotope_list = 'I127 I129'
multi_region_isotope_densities = '0 0'
multi_region_volumes = 1.0
multi_region_names = 'Out_Of_Core'
multi_region_transfer_paths = '0 1'
multi_region_transfer_isotopes = 'I127 I129'
multi_region_transfer_isotope_rates = '0 0'
[]
[](msr/generic_msr/depletion/0D_No_Iodine_Removal_1G.i)Executioner and Outputs
The [Executioner] block tells the solver what type of problem it needs to solve. Here, we select Transient as the executioner type which will solve the depletion problem for the isotopic evolution of the system given the time steps laid out in the [TimeStepper].
[Executioner]
type = Transient # Here we use the Transient Executioner
[TimeStepper]
type = TimeSequenceStepper
time_sequence = '1800 3600 608400 1213200 1818000 2422800 3027600 3632400 4237200 4842000 5446800 6051600'
[]
start_time = 0.0
end_time = 6051600
[](msr/generic_msr/depletion/0D_No_Iodine_Removal_1G.i)The output of the nuclide concentrations is handled by the MSRDepletionNeutronicsMaterial. It is directly output to a comma-separated value (CSV) file.
Depletion with Isotopic Removal Model
The complete input file for the Depletion with Isotopic Removal model is shown below.
# Generic Molten Salt Reactor Depletion
# Griffin input
# Depletion with isotopic removal
# POC: Olin Calvin (olin.calvin at inl.gov)
# If using or referring to this model, please cite as explained in
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
[Mesh]
[gmg]
type = GeneratedIDMeshGenerator
dim = 2
depletion_ids = 0
material_ids = 1
[]
[]
[Problem]
type = FEProblem
solve = false
kernel_coverage_check = false
[]
[AuxVariables]
[Burnup]
order = CONSTANT
family = MONOMIAL
initial_condition = 0.0
[]
[flux]
order = CONSTANT
family = MONOMIAL
initial_condition = 8.3989E15
[]
[]
[AuxKernels]
[constant]
variable = flux
type = ConstantAux
value = 8.3989E15
[]
[SetBurnup]
type = FunctionAux
function = SetBurnup
variable = Burnup
execute_on = timestep_begin
[]
[]
[Functions]
[SetBurnup]
type = PiecewiseLinear
x = '0 1800 3600 608400 1213200 1818000 2422800 3027600 3632400 4237200 4842000 5446800 6051600'
y = '0 0 0 0 0 0 0 0 0 0 0 0 0'
[]
[]
[Compositions]
[fuel_salt]
type = IsotopeComposition
isotope_densities = 'CL35 1.55753e-02
CL37 4.98332e-03
NA23 8.23094e-03
U232 7.49749e-10
U234 4.05961e-05
U235 8.12118e-04
U236 1.11782e-05
U238 3.20723e-03'
density_type = atomic
composition_ids = '1'
[]
[]
[Materials]
[Mat_1]
type = MSRDepletionNeutronicsMaterial
block = 0
library_file = '../data/MSR_XS.xml'
library_name = 'MSR_XS'
# multiphysics variables
grid_names = 'Burnup'
grid_variables = 'Burnup'
scalar_fluxes = 'flux'
# decay & transmutation data
dataset = 'ISOXML'
isoxml_data_file = '../data/MSR_DT.xml'
isoxml_lib_name = 'MSR_DT'
# Bateman solve settings
bateman_solver = 'CRAMIPF'
bateman_solver_tolerance = 1e-100
cram_ipf_order = 48
cram_matrix_inversion_scheme = sparse_gaussian_elimination
track_secondary_particle_production = true
print_number_densities = 'ALL'
number_of_external_regions = 1
multi_region_isotope_list = 'I127 I129'
multi_region_isotope_densities = '0 0'
multi_region_volumes = 1.0
multi_region_names = 'Out_Of_Core'
multi_region_transfer_paths = '0 1'
multi_region_transfer_isotopes = 'I127 I129'
multi_region_transfer_isotope_rates = '3.85E-5 3.85E-5'
[]
[]
[Executioner]
type = Transient # Here we use the Transient Executioner
[TimeStepper]
type = TimeSequenceStepper
time_sequence = '1800 3600 608400 1213200 1818000 2422800 3027600 3632400 4237200 4842000 5446800 6051600'
[]
start_time = 0.0
end_time = 6051600
[]
[Outputs]
csv = false
[](msr/generic_msr/depletion/0D_Iodine_Removal_1G.i)The input file for the Depletion with Isotopic Removal model is exactly the same as the Depletion with no iodine removal model with one key exception. Here the multi_region_transfer_isotope_rates in the BatemanVPP are specified and non-zero for the isotopes in question.
References
- Samuel Walker, Olin Calvin, Mauricio E. Tano, and Abdalla Abou Jaoude.
Implementation of isotopic removal capability in griffin for multi-region msr depletion analysis.
ANS conference paper, 2022.[BibTeX]