MSR Depletion Model
Contact: Samuel Walker, [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 isotopic removal and depletion with isotopic removal models.
Obtaining and Running the Griffin Model
Since this isotopic depletion capability with removal is undergoing active development incorporating new changes, this capability is only currently available on an experimental branch of griffin. For those that have source code access to griffin, the method of acquiring this branch is to fetch the most recent branches. A new branch named "experimental" will appear. Checkout this branch to run the following input files. There are also additional tests of this capability listed in radiation_transport/test/tests/off_gas.
Please note this capability is under active development. A more complete multiphysics capability incorporating spatial resolution, chemistry, and species transport will be accomplished in FY23 which will supersede this initial capability.
Depletion with no isotopic removal Model
The complete input file for the Depletion with no isotopic removal model is shown below.
# Generic Molten Salt Reactor Depletion
# Griffin input : only with experimental branch (12/16/22)
# Depletion with isotopic removal
# POC: Samuel Walker (samuel.walker 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'
[]
[]
[Materials]
[Mat_1]
type = CoupledFeedbackNeutronicsMaterial
block = 0
library_file = '../data/Macro_XS_Artifact.xml'
library_name = 'Macro_XS_Artifact'
material_id = 1
# multiphysics variables
grid_names = 'Burnup'
grid_variables = 'Burnup'
scalar_fluxes = 'flux'
# initial isotopes
isotopes = 'pseudo'
densities = '1.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
[]
[VectorPostprocessors]
[bateman]
type = BatemanVPP
# multiphysics variables
grid_names = 'Burnup'
grid_variables = 'Burnup'
scalar_fluxes = 'flux'
use_power = false
# loading databases
isoxml_mglib_file = '../data/MSR_XS.xml'
isoxml_mglib_name = 'MSR_XS'
library_id = 1
isoxml_dtlib_file = '../data/MSR_DT.xml'
isoxml_dtlib_name = 'MSR_DT'
# setting initial conditions
isotope_atomic_densities = 'CL35 1.55753e-02 CL37 4.98332e-03 NA23 8.23094e-3 U232 7.49749e-10 U234 4.05961e-05 U235 8.12118e-04 U236 1.11782e-05 U238 3.20723e-03'
isotope_fixed_removal_rates = 'I127 0.0 I129 0.0'
# Bateman solver settings
bateman_solver = 'CRAMIPF'
bateman_solver_tolerance = 1e-100
cram_ipf_order = 48
use_sparse_gaussian_elimination = false
track_secondary_particle_production = true
debug = true
execute_on = 'initial timestep_begin'
[]
[]
(msr/generic_msr/depletion/norem1G.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/norem1G.i)[Problem]
type = FEProblem
solve = false
kernel_coverage_check = false
[]
(msr/generic_msr/depletion/norem1G.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/norem1G.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/norem1G.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/norem1G.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 = CoupledFeedbackNeutronicsMaterial
block = 0
library_file = '../data/Macro_XS_Artifact.xml'
library_name = 'Macro_XS_Artifact'
material_id = 1
# multiphysics variables
grid_names = 'Burnup'
grid_variables = 'Burnup'
scalar_fluxes = 'flux'
# initial isotopes
isotopes = 'pseudo'
densities = '1.0'
[]
[]
(msr/generic_msr/depletion/norem1G.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/norem1G.i)Additionally, the output block sets the output files from the simulation. Two of the most common options include the exodus and csv file. In this case only a csv output file is currently possible where the csv file stores a summary of the solution.
[Outputs]
csv = false
[]
(msr/generic_msr/depletion/norem1G.i)Vector Post-processors
The last blocks are for post-processors, debug options, and outputs. A post-processor can be thought of as a function to compute a quantity of interest from the solution. In this case, the constant flux at each burnup step defined earlier are used in the BatemanVPP listed in this block which accomplishes the primary task of this model.
Since we are solving an isotopic depletion problem, an isotopic cross section library isoxml_mglib_file and a decay table isoxml_dtlib_file. Additionally, the initial isotopic concentration of the fuel-salt needs to be specified in atoms/b-cm in isotope_atomic_densities. For isotopic removal, there is also a isotope_fixed_removal_rates option for specific isotopes that can be extracted to the off-gas system. Lastly, there are various options on how to solve the Bateman equation included in the block as well.
[VectorPostprocessors]
[bateman]
type = BatemanVPP
# multiphysics variables
grid_names = 'Burnup'
grid_variables = 'Burnup'
scalar_fluxes = 'flux'
use_power = false
# loading databases
isoxml_mglib_file = '../data/MSR_XS.xml'
isoxml_mglib_name = 'MSR_XS'
library_id = 1
isoxml_dtlib_file = '../data/MSR_DT.xml'
isoxml_dtlib_name = 'MSR_DT'
# setting initial conditions
isotope_atomic_densities = 'CL35 1.55753e-02 CL37 4.98332e-03 NA23 8.23094e-3 U232 7.49749e-10 U234 4.05961e-05 U235 8.12118e-04 U236 1.11782e-05 U238 3.20723e-03'
isotope_fixed_removal_rates = 'I127 0.0 I129 0.0'
# Bateman solver settings
bateman_solver = 'CRAMIPF'
bateman_solver_tolerance = 1e-100
cram_ipf_order = 48
use_sparse_gaussian_elimination = false
track_secondary_particle_production = true
debug = true
execute_on = 'initial timestep_begin'
[]
[]
(msr/generic_msr/depletion/norem1G.i)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 : only with experimental branch (12/16/22)
# Depletion with isotopic removal
# POC: Samuel Walker (samuel.walker 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'
[]
[]
[Materials]
[Mat_1]
type = CoupledFeedbackNeutronicsMaterial
block = 0
library_file = '../data/Macro_XS_Artifact.xml'
library_name = 'Macro_XS_Artifact'
material_id = 1
# multiphysics variables
grid_names = 'Burnup'
grid_variables = 'Burnup'
scalar_fluxes = 'flux'
# initial isotopes
isotopes = 'pseudo'
densities = '1.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
[]
[VectorPostprocessors]
[bateman]
type = BatemanVPP
# multiphysics variables
grid_names = 'Burnup'
grid_variables = 'Burnup'
scalar_fluxes = 'flux'
use_power = false
# loading databases
isoxml_mglib_file = '../data/MSR_XS.xml'
isoxml_mglib_name = 'MSR_XS'
library_id = 1
isoxml_dtlib_file = '../data/MSR_DT.xml'
isoxml_dtlib_name = 'MSR_DT'
# setting initial conditions
isotope_atomic_densities = 'CL35 1.55753e-02 CL37 4.98332e-03 NA23 8.23094e-3 U232 7.49749e-10 U234 4.05961e-05 U235 8.12118e-04 U236 1.11782e-05 U238 3.20723e-03'
isotope_fixed_removal_rates = 'I127 3.85E-5 I129 3.85E-5'
# Bateman solve settings
bateman_solver = 'CRAMIPF'
bateman_solver_tolerance = 1e-100
cram_ipf_order = 48
use_sparse_gaussian_elimination = false
track_secondary_particle_production = true
debug = true
execute_on = 'initial timestep_begin'
[]
[]
(msr/generic_msr/depletion/rem1G.i)The input file for the Depletion with Isotopic Removal model is exactly the same as the Depletion with no Isotopic Removal model with one key exception. Here the isotope_fixed_removal_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]