Fuel Cycle
This demonstration re-creates the tritium fuel cycle model described by Abdou et al. (2021). It is also described in Simon et al. (2025).
Generating the Input File
First, we instantiate a mesh
[Mesh<<<{"href": "../../syntax/Mesh/index.html"}>>>]
type = GeneratedMesh
dim = 1
xmin = 0
xmax = 1
nx = 1
[]
For our purposes this does nothing, but MOOSE requires a defined mesh as a placeholder to run the rest of the simulation.
Next, we need to define our system. Following the convention in Abdou et al. (2021), we have 11 modeled systems, each with their own ODE and tritium inventory:
Table 1: Systems and labels used in this example.
System Name | System number | Tritium inventory variable | system equation |
---|---|---|---|
Breeding zone | 1 | T_01_BZ | Eq. (1) |
Tritium Extraction System | 2 | T_02_TES | Eq. (2) |
First Wall | 3 | T_03_FW | Eq. (3) |
Divertor | 4 | T_04_DIV | Eq. (4) |
Heat Exchanger | 5 | T_05_HX | Eq. (5) |
Coolant Purification System | 6 | T_06_CPS | Eq. (6) |
Vaccum Pump | 7 | T_07_vacuum | Eq. (7) |
Fuel Clean-up | 8 | T_08_FCU | Eq. (8) |
Isotope Separation System | 9 | T_09_ISS | Eq. (9) |
Exhaust and Water Detritiation System | 10 | T_10_exhaust | Eq. (10) |
Storage and Management | 11 | T_11_storage | Eq. (11) |
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9) (10) (11)
For an interpretation of these equations and explanations about the notations, readers should refer to Abdou et al. (2021) (Appendix). We instantiate the variables in the typical Variables
block, making sure to set the "family" attribute to SCALAR
for each variable. The default initial condition is zero.
[Variables<<<{"href": "../../syntax/Variables/index.html"}>>>]
[T_01_BZ]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
[]
[T_02_TES]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
[]
[T_03_FW]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
[]
[T_04_DIV]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
[]
[T_05_HX]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
[]
[T_06_CPS]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
[]
[T_07_vacuum]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
[]
[T_08_FCU]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
[]
[T_09_ISS]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
[]
[T_10_exhaust]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
[]
[T_11_storage]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
initial_condition<<<{"description": "Specifies a constant initial condition for this variable"}>>> = 225.4215
[]
[]
Next we initiate the ScalarKernels
block. We can model the time-dependent terms with ODETimeDerivative
objects and the other terms can be lumped in ParsedODEKernel
objects. We should have one ODETimeDerivative
and one (or more) ParsedODEKernel
object(s) per equation above. Internally, TMAP8 will sum the contributions of each object, so we need to negate the ParsedODEKernel
equation from its representation above (move it to the left hand side). We use Postprocessors
to re-use the recurring variables.
[ScalarKernels<<<{"href": "../../syntax/ScalarKernels/index.html"}>>>]
[I1t]
type = ODETimeDerivative<<<{"description": "Returns the time derivative contribution to the residual for a scalar variable.", "href": "../../source/scalarkernels/ODETimeDerivative.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = T_01_BZ
[]
[I2t]
type = ODETimeDerivative<<<{"description": "Returns the time derivative contribution to the residual for a scalar variable.", "href": "../../source/scalarkernels/ODETimeDerivative.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = T_02_TES
[]
[I3t]
type = ODETimeDerivative<<<{"description": "Returns the time derivative contribution to the residual for a scalar variable.", "href": "../../source/scalarkernels/ODETimeDerivative.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = T_03_FW
[]
[I4t]
type = ODETimeDerivative<<<{"description": "Returns the time derivative contribution to the residual for a scalar variable.", "href": "../../source/scalarkernels/ODETimeDerivative.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = T_04_DIV
[]
[I5t]
type = ODETimeDerivative<<<{"description": "Returns the time derivative contribution to the residual for a scalar variable.", "href": "../../source/scalarkernels/ODETimeDerivative.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = T_05_HX
[]
[I6t]
type = ODETimeDerivative<<<{"description": "Returns the time derivative contribution to the residual for a scalar variable.", "href": "../../source/scalarkernels/ODETimeDerivative.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = T_06_CPS
[]
[I7t]
type = ODETimeDerivative<<<{"description": "Returns the time derivative contribution to the residual for a scalar variable.", "href": "../../source/scalarkernels/ODETimeDerivative.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = T_07_vacuum
[]
[I8t]
type = ODETimeDerivative<<<{"description": "Returns the time derivative contribution to the residual for a scalar variable.", "href": "../../source/scalarkernels/ODETimeDerivative.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = T_08_FCU
[]
[I9t]
type = ODETimeDerivative<<<{"description": "Returns the time derivative contribution to the residual for a scalar variable.", "href": "../../source/scalarkernels/ODETimeDerivative.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = T_09_ISS
[]
[I10t]
type = ODETimeDerivative<<<{"description": "Returns the time derivative contribution to the residual for a scalar variable.", "href": "../../source/scalarkernels/ODETimeDerivative.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = T_10_exhaust
[]
[I11t]
type = ODETimeDerivative<<<{"description": "Returns the time derivative contribution to the residual for a scalar variable.", "href": "../../source/scalarkernels/ODETimeDerivative.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = T_11_storage
[]
[I1]
# Breeding Zone
type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
expression<<<{"description": "function expression"}>>> = '-(tritium_burn_rate * TBR + (1 - TES_efficiency)*T_02_TES/residence2 - T_01_BZ/residence1 - T_01_BZ*epsilon1/residence1 - T_01_BZ*tdecay)'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_01_BZ'
coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_02_TES'
postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'TBR tritium_burn_rate TES_efficiency residence1 residence2 tdecay epsilon1'
[]
[I2]
#Tritium Extraction System
type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
expression<<<{"description": "function expression"}>>> = '-((1 - BZ_HX_leak_fraction)*T_01_BZ/residence1 - T_02_TES/residence2 - T_02_TES*epsilon2/residence2 - T_02_TES*tdecay)'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_02_TES'
coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_01_BZ'
postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'BZ_HX_leak_fraction residence1 residence2 tdecay epsilon2'
[]
[I3]
#First Wall
type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
expression<<<{"description": "function expression"}>>> = '-(P_FW_leak_fraction*tritium_burn_rate /tritium_burn_fraction / tritium_fueling_efficiency + HX_FW_leak_fraction * (1 - HX_CPS_leak_fraction) * (1 - HX_EXO_leak_fraction)
* T_05_HX/residence5 + CPS_FW_leak_fraction * (1 - CPS_efficiency) * T_06_CPS/residence6 - T_03_FW/residence3 - T_03_FW*epsilon3/residence3 - T_03_FW*tdecay)'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_03_FW'
coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_05_HX T_06_CPS'
postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'P_FW_leak_fraction tritium_burn_rate tritium_burn_fraction tritium_fueling_efficiency HX_FW_leak_fraction HX_CPS_leak_fraction HX_EXO_leak_fraction residence5 CPS_FW_leak_fraction CPS_efficiency residence6 residence3 tdecay epsilon3'
[]
[I4]
#Divertor
type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
expression<<<{"description": "function expression"}>>> = '-(P_DIV_leak_fraction * tritium_burn_rate/tritium_burn_fraction / tritium_fueling_efficiency + (1-HX_FW_leak_fraction)*
(1-HX_CPS_leak_fraction)*(1-HX_EXO_leak_fraction)* T_05_HX/residence5 + (1-CPS_FW_leak_fraction)*(1 - CPS_efficiency) * T_06_CPS/residence6 - T_04_DIV*epsilon4/residence4 - T_04_DIV/residence4 - T_04_DIV*tdecay)'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_04_DIV'
coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_06_CPS T_05_HX'
postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'P_DIV_leak_fraction tritium_burn_rate tritium_burn_fraction tritium_fueling_efficiency HX_FW_leak_fraction HX_CPS_leak_fraction HX_EXO_leak_fraction residence5 CPS_FW_leak_fraction CPS_efficiency residence6 residence4 tdecay epsilon4'
[]
[I5]
#Heat eXchanger
type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
expression<<<{"description": "function expression"}>>> = '-(BZ_HX_leak_fraction * T_01_BZ/residence1 + T_03_FW/residence3 + T_04_DIV/residence4 - T_05_HX/residence5 - T_05_HX*epsilon5/residence5 -T_05_HX*tdecay)'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_05_HX'
coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_01_BZ T_03_FW T_04_DIV'
postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'BZ_HX_leak_fraction residence1 residence3 residence4 residence5 tdecay epsilon5'
[]
[I6]
#Coolant Purification System
type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
expression<<<{"description": "function expression"}>>> = '-(HX_CPS_leak_fraction * (1 - HX_EXO_leak_fraction)*T_05_HX/residence5 - T_06_CPS/residence6 - T_06_CPS*epsilon6/residence6 - T_06_CPS*tdecay)'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_06_CPS'
coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_05_HX'
postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'HX_CPS_leak_fraction HX_EXO_leak_fraction residence5 residence6 tdecay epsilon6'
[]
[I7]
#Vacuum Pump
type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
expression<<<{"description": "function expression"}>>> = '-((1-tritium_burn_fraction*tritium_fueling_efficiency - P_FW_leak_fraction - P_DIV_leak_fraction)*
tritium_burn_rate/(tritium_burn_fraction * tritium_fueling_efficiency) - T_07_vacuum/residence7 - T_07_vacuum*epsilon7/residence7 - T_07_vacuum*tdecay)'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_07_vacuum'
postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'tritium_burn_rate tritium_fueling_efficiency P_FW_leak_fraction P_DIV_leak_fraction tritium_burn_fraction residence7 tdecay epsilon7'
[]
[I8]
#Fuel clean-up
type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
expression<<<{"description": "function expression"}>>> = '-(T_07_vacuum/residence7 - T_08_FCU/residence8 - T_08_FCU*epsilon8/residence8 - T_08_FCU*tdecay)'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_08_FCU'
postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'residence7 residence8 tdecay epsilon8'
coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_07_vacuum'
[]
[I9]
#Isotope Separation System
type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
expression<<<{"description": "function expression"}>>> = '-((1-FCU_STO_fraction)*T_08_FCU/residence8 + T_10_exhaust/residence10 + TES_efficiency*T_02_TES/residence2 + CPS_efficiency*T_06_CPS/residence6 - T_09_ISS/residence9 - T_09_ISS*epsilon9/residence9 - T_09_ISS*tdecay)'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_09_ISS'
coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_08_FCU T_10_exhaust T_02_TES T_06_CPS'
postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'FCU_STO_fraction residence8 residence10 TES_efficiency residence2 CPS_efficiency residence6 residence9 tdecay epsilon9'
[]
[I10]
#Exhaust and Water Detritiation System (EXO)
type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
expression<<<{"description": "function expression"}>>> = '-(HX_EXO_leak_fraction * T_05_HX/residence5 + ISS_EXO_leak_fraction*T_09_ISS/residence9 - T_10_exhaust/residence10 - T_10_exhaust*epsilon10/residence10 - T_10_exhaust*tdecay)'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_10_exhaust'
coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_05_HX T_09_ISS'
postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'HX_EXO_leak_fraction residence5 ISS_EXO_leak_fraction residence9 residence10 tdecay epsilon10'
[]
[I11]
#Storage and Management (STO)
type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
expression<<<{"description": "function expression"}>>> = '-(FCU_STO_fraction * T_08_FCU/residence8 + (1-ISS_EXO_leak_fraction)*T_09_ISS/residence9 - tritium_burn_rate/tritium_burn_fraction/tritium_fueling_efficiency - T_11_storage*tdecay)'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_11_storage'
coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_08_FCU T_09_ISS'
postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'FCU_STO_fraction residence8 ISS_EXO_leak_fraction residence9 tritium_burn_rate tritium_burn_fraction tritium_fueling_efficiency tdecay'
[]
[]
Finally, we define the Postprocessors
and set their values to those referenced in Abdou et al. (2021). Because the Postprocessors
are inputs, not outputs, we must be careful to properly set the "execute_on" parameter. We also gather the values of the different variables in separate Postprocessors
and take their sum to obtain the total tritium inventory.
[Postprocessors<<<{"href": "../../syntax/Postprocessors/index.html"}>>>]
[BZ_HX_leak_fraction]
#f_{1-5}
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-2
[]
[CPS_FW_leak_fraction]
#f_{6-3}
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 0.6
[]
[CPS_efficiency]
#eta_6
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 0.95
[]
[FCU_STO_fraction]
#f_{8-11}
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 0
[]
[HX_CPS_leak_fraction]
#f_{5-6}
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-2
[]
[HX_EXO_leak_fraction]
#f_{5-10}
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-4
[]
[HX_FW_leak_fraction]
#f_{5-3}
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 0.6
[]
[ISS_EXO_leak_fraction]
#f_{9-10}
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-1
[]
[P_DIV_leak_fraction]
#f_{P-4}
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-4
[]
[P_FW_leak_fraction]
#f_{P_3}
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-4
[]
[TES_efficiency]
#eta_2
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 0.95
[]
[TBR]
#According to the PhD Thesis referenced in the paper,
# this is the required Tritium Breeding Ratio (TBR)
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1.9247
[]
[epsilon1]
#BZ
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 0
[]
[epsilon2]
#TES
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-4
[]
[epsilon3]
#FW
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 0
[]
[epsilon4]
#DIV
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 0
[]
[epsilon5]
#HX
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-4
[]
[epsilon6]
#CPS
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-4
[]
[epsilon7]
#Vac
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-4
[]
[epsilon8]
#FCU
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-4
[]
[epsilon9]
#ISS
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-4
[]
[epsilon10]
#EXO
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-4
[]
[epsilon11]
#STO
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 0
[]
[residence1]
#BZ
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 86400 #1 day, Abdou
#value = 8640-86400 EXOTIC-6-7-8
[]
[residence2]
#TES
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 86400 # Abdou
#value = 86400-432000 Riva
[]
[residence3]
#FW
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1000 #Riva
[]
[residence4]
#DIV
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1000 #Riva
[]
[residence5]
#HX
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1000 # Abdou 2021 paper chosen for analysis
[]
[residence6]
#CPS
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 864000 #Abdou analysis case
#value 8640000 Abdou 1,4
[]
[residence7]
#Vac
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1
#value = 1800 # 30 minutes (20-30 minutes)
[]
[residence8]
#FCU
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1
#value = 4680 # 1.3 h as per Day
#value = 5 h Coleman
#value = 8640 Abdou
#value = 86400 Abdou
[]
[residence9]
#ISS
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 14400
#value = 7920 #(for four hour overall residence time in inner loop)
[]
[residence10]
#EXO
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 3600 # Day et al
#value = 72000 #Coleman et al
[]
[tdecay]
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1.7828336471961835e-9
[]
[tritium_burn_fraction]
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 0.0036
[]
[tritium_burn_rate]
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 5.3125e-6 # 0.459 kg/day
[]
[tritium_fueling_efficiency]
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 0.25
[]
# These postprocessors exist to sum up the tritium inventory
# across the entirety of the system
[T_BZ]
type = ScalarVariable<<<{"description": "Returns the value of a scalar variable as a postprocessor value.", "href": "../../source/postprocessors/ScalarVariable.html"}>>>
variable<<<{"description": "Name of the variable"}>>> = T_01_BZ
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
[]
[T_TES]
type = ScalarVariable<<<{"description": "Returns the value of a scalar variable as a postprocessor value.", "href": "../../source/postprocessors/ScalarVariable.html"}>>>
variable<<<{"description": "Name of the variable"}>>> = T_02_TES
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
[]
[T_FW]
type = ScalarVariable<<<{"description": "Returns the value of a scalar variable as a postprocessor value.", "href": "../../source/postprocessors/ScalarVariable.html"}>>>
variable<<<{"description": "Name of the variable"}>>> = T_03_FW
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
[]
[T_DIV]
type = ScalarVariable<<<{"description": "Returns the value of a scalar variable as a postprocessor value.", "href": "../../source/postprocessors/ScalarVariable.html"}>>>
variable<<<{"description": "Name of the variable"}>>> = T_04_DIV
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
[]
[T_HX]
type = ScalarVariable<<<{"description": "Returns the value of a scalar variable as a postprocessor value.", "href": "../../source/postprocessors/ScalarVariable.html"}>>>
variable<<<{"description": "Name of the variable"}>>> = T_05_HX
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
[]
[T_CPS]
type = ScalarVariable<<<{"description": "Returns the value of a scalar variable as a postprocessor value.", "href": "../../source/postprocessors/ScalarVariable.html"}>>>
variable<<<{"description": "Name of the variable"}>>> = T_06_CPS
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
[]
[T_VAC]
type = ScalarVariable<<<{"description": "Returns the value of a scalar variable as a postprocessor value.", "href": "../../source/postprocessors/ScalarVariable.html"}>>>
variable<<<{"description": "Name of the variable"}>>> = T_07_vacuum
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
[]
[T_FCU]
type = ScalarVariable<<<{"description": "Returns the value of a scalar variable as a postprocessor value.", "href": "../../source/postprocessors/ScalarVariable.html"}>>>
variable<<<{"description": "Name of the variable"}>>> = T_08_FCU
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
[]
[T_ISS]
type = ScalarVariable<<<{"description": "Returns the value of a scalar variable as a postprocessor value.", "href": "../../source/postprocessors/ScalarVariable.html"}>>>
variable<<<{"description": "Name of the variable"}>>> = T_09_ISS
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
[]
[T_EXO]
type = ScalarVariable<<<{"description": "Returns the value of a scalar variable as a postprocessor value.", "href": "../../source/postprocessors/ScalarVariable.html"}>>>
variable<<<{"description": "Name of the variable"}>>> = T_10_exhaust
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
[]
[T_STO]
type = ScalarVariable<<<{"description": "Returns the value of a scalar variable as a postprocessor value.", "href": "../../source/postprocessors/ScalarVariable.html"}>>>
variable<<<{"description": "Name of the variable"}>>> = T_11_storage
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
[]
[total_tritium]
type = SumPostprocessor<<<{"description": "Sums the values of several postprocessors", "href": "../../source/postprocessors/SumPostprocessor.html"}>>>
values<<<{"description": "List of postprocessors to add"}>>> = 'T_BZ T_TES T_FW T_DIV T_HX T_CPS T_VAC T_FCU T_ISS T_EXO T_STO'
[]
[]
Finally, we can set the Executioner
block. In this case, we ask for a simple Transient
executioner with an exponentially growing TimeStepper
, IterationAdaptiveDT
.
[Executioner<<<{"href": "../../syntax/Executioner/index.html"}>>>]
type = Transient
start_time = 0
dtmin = 1
end_time = 946080000.0
[TimeStepper<<<{"href": "../../syntax/Executioner/TimeStepper/index.html"}>>>]
type = IterationAdaptiveDT
growth_factor = 1.4
dt = 5
#timestep_limiting_function = 'catch_five_year'
#max_function_change = 0.5
#force_step_every_function_point = true
[]
solve_type = 'PJFNK'
nl_rel_tol = 1e-08
nl_abs_tol = 1e-14
[]
With these blocks set, we can now run the simulation and track tritium inventory.
Implementing a high-fidelity model to replace the default values of specific postprocessors or to more accurately model specific components is an exercise left for a later date.
Comparing Results Against Literature
In order to compare against Abdou et al. (2021), we need to make a few assumptions. First, we set the residence times and other parameters to the values listed in Tables 1-3 of Abdou et al. (2021) (the underlined value if there are multiple options). Here we also assume that the "Fuel clean-up and isotope separation system" total residence time of 4 hours as specified in the paper refers to a residence time of 4 hours for the isotope separation system, and negligible (1 second) residence times for the vacuum pump and fuel clean-up system.
Targeting the black lines of Figure 3 of Abdou et al. (2021), we also need to determine the appropriate reserve inventory , which, given and comes out to 127.5 kg. With this constraint, we can determine the relevant TBR to obtain a doubling time of 5 years, and iterating by hand, a value of 1.9247 yields a doubling time of 5 years to three decimal places if T_11_storage
is given an initial condition of 225.4215 as shown in Table 2.
Table 2: Assumptions and iteratively obtained conditions used for this example.
Parameter | Value |
---|---|
residence7 () | 1 s |
residence8 () | 1 s |
residence9 () | 14400 s |
TBR () | 1.9247 |
Initial value for T_11_storage | 225.4215 kg |
We compare our results with those from the black lines in Figure 3 from Abdou et al. (2021) in Figure 1. The lighter lines are estimates of the values shown in the paper, and the darker lines are the results from the model. The agreement is quite good, with only a slight deviation for the tritium extraction system inventory as it transitions to a steady-state value.

Figure 1: Tritium inventories of specific systems as a function of time. Shaded regions are best estimate of Figure 3 in Abdou et al. (2021).
# This input file re-creates the deuterium-tritium fuel cycle model
# described by Abdou et al (2021).
# "Physics and technology considerations for the deuterium-tritium fuel cycle
# and conditions for tritium fuel self sufficiency" M Abdou & M Riva & A Ying
# & C Day & A Loarte & L R Baylor & P Humrickhouse & T F Fuerst & S Cho
# Nucl. Fusion 61 (2021) https://doi.org/10.1088/1741-4326/abbf35
# Since this is a 0D simulation, the mesh is only a single point. If high-fidelity
# models of specific components are required, the scalar variables can be coupled to
# "Field" variables which can vary spatially across the mesh, or could be co-ordinated
# with sub-apps.
[Mesh<<<{"href": "../../syntax/Mesh/index.html"}>>>]
type = GeneratedMesh
dim = 1
xmin = 0
xmax = 1
nx = 1
[]
# One variable for each inventory of tritium is generated. All variables
# are defined as "SCALAR", meaning that they are a single value and are
# disconnected from any specific geometry
[Variables<<<{"href": "../../syntax/Variables/index.html"}>>>]
[T_01_BZ]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
[]
[T_02_TES]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
[]
[T_03_FW]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
[]
[T_04_DIV]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
[]
[T_05_HX]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
[]
[T_06_CPS]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
[]
[T_07_vacuum]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
[]
[T_08_FCU]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
[]
[T_09_ISS]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
[]
[T_10_exhaust]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
[]
[T_11_storage]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
initial_condition<<<{"description": "Specifies a constant initial condition for this variable"}>>> = 225.4215
[]
[]
# Tritium burn fraction is going to be small. Much
# will be lost to the scrape-off-layer (SOL) and
# recycled.
# TES - tritium extraction system pulls tritium from
# the blanket
# CPS - Coolant purification system pulls tritium from
# the coolant
# An ODE is defined in TMAP8 such that all of the terms must
# be on the left hand side. The terms can be split
# across multiple "ScalarKernels", which are additive,
# so that we have one ODETimeDerivative for each tritium
# inventory and a ParsedODEKernel for the rest of the
# terms. These equations should reflect those described
# in Appendix A of the paper (A.1-A.13), with negation
# on the ParsedODEKernels due to moving the terms to the
# left hand side.
[ScalarKernels<<<{"href": "../../syntax/ScalarKernels/index.html"}>>>]
[I1t]
type = ODETimeDerivative<<<{"description": "Returns the time derivative contribution to the residual for a scalar variable.", "href": "../../source/scalarkernels/ODETimeDerivative.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = T_01_BZ
[]
[I2t]
type = ODETimeDerivative<<<{"description": "Returns the time derivative contribution to the residual for a scalar variable.", "href": "../../source/scalarkernels/ODETimeDerivative.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = T_02_TES
[]
[I3t]
type = ODETimeDerivative<<<{"description": "Returns the time derivative contribution to the residual for a scalar variable.", "href": "../../source/scalarkernels/ODETimeDerivative.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = T_03_FW
[]
[I4t]
type = ODETimeDerivative<<<{"description": "Returns the time derivative contribution to the residual for a scalar variable.", "href": "../../source/scalarkernels/ODETimeDerivative.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = T_04_DIV
[]
[I5t]
type = ODETimeDerivative<<<{"description": "Returns the time derivative contribution to the residual for a scalar variable.", "href": "../../source/scalarkernels/ODETimeDerivative.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = T_05_HX
[]
[I6t]
type = ODETimeDerivative<<<{"description": "Returns the time derivative contribution to the residual for a scalar variable.", "href": "../../source/scalarkernels/ODETimeDerivative.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = T_06_CPS
[]
[I7t]
type = ODETimeDerivative<<<{"description": "Returns the time derivative contribution to the residual for a scalar variable.", "href": "../../source/scalarkernels/ODETimeDerivative.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = T_07_vacuum
[]
[I8t]
type = ODETimeDerivative<<<{"description": "Returns the time derivative contribution to the residual for a scalar variable.", "href": "../../source/scalarkernels/ODETimeDerivative.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = T_08_FCU
[]
[I9t]
type = ODETimeDerivative<<<{"description": "Returns the time derivative contribution to the residual for a scalar variable.", "href": "../../source/scalarkernels/ODETimeDerivative.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = T_09_ISS
[]
[I10t]
type = ODETimeDerivative<<<{"description": "Returns the time derivative contribution to the residual for a scalar variable.", "href": "../../source/scalarkernels/ODETimeDerivative.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = T_10_exhaust
[]
[I11t]
type = ODETimeDerivative<<<{"description": "Returns the time derivative contribution to the residual for a scalar variable.", "href": "../../source/scalarkernels/ODETimeDerivative.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = T_11_storage
[]
[I1] # Breeding Zone
type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
expression<<<{"description": "function expression"}>>> = '-(tritium_burn_rate * TBR + (1 - TES_efficiency)*T_02_TES/residence2 - T_01_BZ/residence1 - T_01_BZ*epsilon1/residence1 - T_01_BZ*tdecay)'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_01_BZ'
coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_02_TES'
postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'TBR tritium_burn_rate TES_efficiency residence1 residence2 tdecay epsilon1'
[]
[I2] #Tritium Extraction System
type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
expression<<<{"description": "function expression"}>>> = '-((1 - BZ_HX_leak_fraction)*T_01_BZ/residence1 - T_02_TES/residence2 - T_02_TES*epsilon2/residence2 - T_02_TES*tdecay)'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_02_TES'
coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_01_BZ'
postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'BZ_HX_leak_fraction residence1 residence2 tdecay epsilon2'
[]
[I3] #First Wall
type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
expression<<<{"description": "function expression"}>>> = '-(P_FW_leak_fraction*tritium_burn_rate /tritium_burn_fraction / tritium_fueling_efficiency + HX_FW_leak_fraction * (1 - HX_CPS_leak_fraction) * (1 - HX_EXO_leak_fraction)
* T_05_HX/residence5 + CPS_FW_leak_fraction * (1 - CPS_efficiency) * T_06_CPS/residence6 - T_03_FW/residence3 - T_03_FW*epsilon3/residence3 - T_03_FW*tdecay)'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_03_FW'
coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_05_HX T_06_CPS'
postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'P_FW_leak_fraction tritium_burn_rate tritium_burn_fraction tritium_fueling_efficiency HX_FW_leak_fraction HX_CPS_leak_fraction HX_EXO_leak_fraction residence5 CPS_FW_leak_fraction CPS_efficiency residence6 residence3 tdecay epsilon3'
[]
[I4] #Divertor
type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
expression<<<{"description": "function expression"}>>> = '-(P_DIV_leak_fraction * tritium_burn_rate/tritium_burn_fraction / tritium_fueling_efficiency + (1-HX_FW_leak_fraction)*
(1-HX_CPS_leak_fraction)*(1-HX_EXO_leak_fraction)* T_05_HX/residence5 + (1-CPS_FW_leak_fraction)*(1 - CPS_efficiency) * T_06_CPS/residence6 - T_04_DIV*epsilon4/residence4 - T_04_DIV/residence4 - T_04_DIV*tdecay)'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_04_DIV'
coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_06_CPS T_05_HX'
postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'P_DIV_leak_fraction tritium_burn_rate tritium_burn_fraction tritium_fueling_efficiency HX_FW_leak_fraction HX_CPS_leak_fraction HX_EXO_leak_fraction residence5 CPS_FW_leak_fraction CPS_efficiency residence6 residence4 tdecay epsilon4'
[]
[I5] #Heat eXchanger
type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
expression<<<{"description": "function expression"}>>> = '-(BZ_HX_leak_fraction * T_01_BZ/residence1 + T_03_FW/residence3 + T_04_DIV/residence4 - T_05_HX/residence5 - T_05_HX*epsilon5/residence5 -T_05_HX*tdecay)'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_05_HX'
coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_01_BZ T_03_FW T_04_DIV'
postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'BZ_HX_leak_fraction residence1 residence3 residence4 residence5 tdecay epsilon5'
[]
[I6] #Coolant Purification System
type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
expression<<<{"description": "function expression"}>>> = '-(HX_CPS_leak_fraction * (1 - HX_EXO_leak_fraction)*T_05_HX/residence5 - T_06_CPS/residence6 - T_06_CPS*epsilon6/residence6 - T_06_CPS*tdecay)'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_06_CPS'
coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_05_HX'
postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'HX_CPS_leak_fraction HX_EXO_leak_fraction residence5 residence6 tdecay epsilon6'
[]
[I7] #Vacuum Pump
type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
expression<<<{"description": "function expression"}>>> = '-((1-tritium_burn_fraction*tritium_fueling_efficiency - P_FW_leak_fraction - P_DIV_leak_fraction)*
tritium_burn_rate/(tritium_burn_fraction * tritium_fueling_efficiency) - T_07_vacuum/residence7 - T_07_vacuum*epsilon7/residence7 - T_07_vacuum*tdecay)'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_07_vacuum'
postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'tritium_burn_rate tritium_fueling_efficiency P_FW_leak_fraction P_DIV_leak_fraction tritium_burn_fraction residence7 tdecay epsilon7'
[]
[I8] #Fuel clean-up
type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
expression<<<{"description": "function expression"}>>> = '-(T_07_vacuum/residence7 - T_08_FCU/residence8 - T_08_FCU*epsilon8/residence8 - T_08_FCU*tdecay)'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_08_FCU'
postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'residence7 residence8 tdecay epsilon8'
coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_07_vacuum'
[]
[I9] #Isotope Separation System
type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
expression<<<{"description": "function expression"}>>> = '-((1-FCU_STO_fraction)*T_08_FCU/residence8 + T_10_exhaust/residence10 + TES_efficiency*T_02_TES/residence2 + CPS_efficiency*T_06_CPS/residence6 - T_09_ISS/residence9 - T_09_ISS*epsilon9/residence9 - T_09_ISS*tdecay)'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_09_ISS'
coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_08_FCU T_10_exhaust T_02_TES T_06_CPS'
postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'FCU_STO_fraction residence8 residence10 TES_efficiency residence2 CPS_efficiency residence6 residence9 tdecay epsilon9'
[]
[I10] #Exhaust and Water Detritiation System (EXO)
type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
expression<<<{"description": "function expression"}>>> = '-(HX_EXO_leak_fraction * T_05_HX/residence5 + ISS_EXO_leak_fraction*T_09_ISS/residence9 - T_10_exhaust/residence10 - T_10_exhaust*epsilon10/residence10 - T_10_exhaust*tdecay)'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_10_exhaust'
coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_05_HX T_09_ISS'
postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'HX_EXO_leak_fraction residence5 ISS_EXO_leak_fraction residence9 residence10 tdecay epsilon10'
[]
[I11] #Storage and Management (STO)
type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
expression<<<{"description": "function expression"}>>> = '-(FCU_STO_fraction * T_08_FCU/residence8 + (1-ISS_EXO_leak_fraction)*T_09_ISS/residence9 - tritium_burn_rate/tritium_burn_fraction/tritium_fueling_efficiency - T_11_storage*tdecay)'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_11_storage'
coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_08_FCU T_09_ISS'
postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'FCU_STO_fraction residence8 ISS_EXO_leak_fraction residence9 tritium_burn_rate tritium_burn_fraction tritium_fueling_efficiency tdecay'
[]
[]
# These postprocessors define the constants referenced in
# the equations above. The value of any of these constants
# could be informed by more detailed models (using sub-apps
# and transfers), but it is important that the postprocessor
# is evaluated before the executioner attempts to solve the
# ODE, which is not the default behavior.
[Postprocessors<<<{"href": "../../syntax/Postprocessors/index.html"}>>>]
[BZ_HX_leak_fraction] #f_{1-5}
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-2
[]
[CPS_FW_leak_fraction] #f_{6-3}
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 0.6
[]
[CPS_efficiency] #eta_6
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 0.95
[]
[FCU_STO_fraction] #f_{8-11}
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 0
[]
[HX_CPS_leak_fraction] #f_{5-6}
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-2
[]
[HX_EXO_leak_fraction] #f_{5-10}
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-4
[]
[HX_FW_leak_fraction] #f_{5-3}
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 0.6
[]
[ISS_EXO_leak_fraction] #f_{9-10}
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-1
[]
[P_DIV_leak_fraction] #f_{P-4}
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-4
[]
[P_FW_leak_fraction] #f_{P_3}
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-4
[]
[TES_efficiency] #eta_2
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 0.95
[]
[TBR] #According to the PhD Thesis referenced in the paper,
# this is the required Tritium Breeding Ratio (TBR)
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1.9247
[]
[epsilon1] #BZ
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 0
[]
[epsilon2] #TES
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-4
[]
[epsilon3] #FW
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 0
[]
[epsilon4] #DIV
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 0
[]
[epsilon5] #HX
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-4
[]
[epsilon6] #CPS
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-4
[]
[epsilon7] #Vac
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-4
[]
[epsilon8] #FCU
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-4
[]
[epsilon9] #ISS
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-4
[]
[epsilon10] #EXO
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1e-4
[]
[epsilon11] #STO
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 0
[]
[residence1] #BZ
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 86400 #1 day, Abdou
#value = 8640-86400 EXOTIC-6-7-8
[]
[residence2] #TES
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 86400 # Abdou
#value = 86400-432000 Riva
[]
[residence3] #FW
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1000 #Riva
[]
[residence4] #DIV
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1000 #Riva
[]
[residence5] #HX
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1000 # Abdou 2021 paper chosen for analysis
[]
[residence6] #CPS
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 864000 #Abdou analysis case
#value 8640000 Abdou 1,4
[]
[residence7] #Vac
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1
#value = 1800 # 30 minutes (20-30 minutes)
[]
[residence8] #FCU
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1
#value = 4680 # 1.3 h as per Day
#value = 5 h Coleman
#value = 8640 Abdou
#value = 86400 Abdou
[]
[residence9] #ISS
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 14400
#value = 7920 #(for four hour overall residence time in inner loop)
[]
[residence10] #EXO
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 3600 # Day et al
#value = 72000 #Coleman et al
[]
[tdecay]
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 1.7828336471961835e-9
[]
[tritium_burn_fraction]
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 0.0036
[]
[tritium_burn_rate]
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 5.3125e-6 # 0.459 kg/day
[]
[tritium_fueling_efficiency]
type = ConstantPostprocessor<<<{"description": "Postprocessor that holds a constant value", "href": "../../source/postprocessors/ConstantPostprocessor.html"}>>>
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_BEGIN INITIAL LINEAR NONLINEAR'
value<<<{"description": "The value"}>>> = 0.25
[]
# These postprocessors exist to sum up the tritium inventory
# across the entirety of the system
[T_BZ]
type = ScalarVariable<<<{"description": "Returns the value of a scalar variable as a postprocessor value.", "href": "../../source/postprocessors/ScalarVariable.html"}>>>
variable<<<{"description": "Name of the variable"}>>> = T_01_BZ
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
[]
[T_TES]
type = ScalarVariable<<<{"description": "Returns the value of a scalar variable as a postprocessor value.", "href": "../../source/postprocessors/ScalarVariable.html"}>>>
variable<<<{"description": "Name of the variable"}>>> = T_02_TES
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
[]
[T_FW]
type = ScalarVariable<<<{"description": "Returns the value of a scalar variable as a postprocessor value.", "href": "../../source/postprocessors/ScalarVariable.html"}>>>
variable<<<{"description": "Name of the variable"}>>> = T_03_FW
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
[]
[T_DIV]
type = ScalarVariable<<<{"description": "Returns the value of a scalar variable as a postprocessor value.", "href": "../../source/postprocessors/ScalarVariable.html"}>>>
variable<<<{"description": "Name of the variable"}>>> = T_04_DIV
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
[]
[T_HX]
type = ScalarVariable<<<{"description": "Returns the value of a scalar variable as a postprocessor value.", "href": "../../source/postprocessors/ScalarVariable.html"}>>>
variable<<<{"description": "Name of the variable"}>>> = T_05_HX
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
[]
[T_CPS]
type = ScalarVariable<<<{"description": "Returns the value of a scalar variable as a postprocessor value.", "href": "../../source/postprocessors/ScalarVariable.html"}>>>
variable<<<{"description": "Name of the variable"}>>> = T_06_CPS
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
[]
[T_VAC]
type = ScalarVariable<<<{"description": "Returns the value of a scalar variable as a postprocessor value.", "href": "../../source/postprocessors/ScalarVariable.html"}>>>
variable<<<{"description": "Name of the variable"}>>> = T_07_vacuum
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
[]
[T_FCU]
type = ScalarVariable<<<{"description": "Returns the value of a scalar variable as a postprocessor value.", "href": "../../source/postprocessors/ScalarVariable.html"}>>>
variable<<<{"description": "Name of the variable"}>>> = T_08_FCU
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
[]
[T_ISS]
type = ScalarVariable<<<{"description": "Returns the value of a scalar variable as a postprocessor value.", "href": "../../source/postprocessors/ScalarVariable.html"}>>>
variable<<<{"description": "Name of the variable"}>>> = T_09_ISS
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
[]
[T_EXO]
type = ScalarVariable<<<{"description": "Returns the value of a scalar variable as a postprocessor value.", "href": "../../source/postprocessors/ScalarVariable.html"}>>>
variable<<<{"description": "Name of the variable"}>>> = T_10_exhaust
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
[]
[T_STO]
type = ScalarVariable<<<{"description": "Returns the value of a scalar variable as a postprocessor value.", "href": "../../source/postprocessors/ScalarVariable.html"}>>>
variable<<<{"description": "Name of the variable"}>>> = T_11_storage
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
[]
[total_tritium]
type = SumPostprocessor<<<{"description": "Sums the values of several postprocessors", "href": "../../source/postprocessors/SumPostprocessor.html"}>>>
values<<<{"description": "List of postprocessors to add"}>>> = 'T_BZ T_TES T_FW T_DIV T_HX T_CPS T_VAC T_FCU T_ISS T_EXO T_STO'
[]
[]
[UserObjects<<<{"href": "../../syntax/UserObjects/index.html"}>>>]
[terminator]
type = Terminator<<<{"description": "Requests termination of the current solve based on the evaluation of a parsed logical expression of the Postprocessor value(s).", "href": "../../source/userobjects/Terminator.html"}>>>
expression<<<{"description": "FParser expression to process Postprocessor values into a boolean value. Termination of the simulation occurs when this returns true."}>>> = 'T_STO < 0'
fail_mode<<<{"description": "Abort entire simulation (HARD), just the current time step (SOFT), or not at all (NONE)."}>>> = 'HARD'
message<<<{"description": "An optional message to be output instead of the default message when the termination condition is triggered"}>>> = 'Tritium in storage has been depleted'
[]
[terminator2]
type = Terminator<<<{"description": "Requests termination of the current solve based on the evaluation of a parsed logical expression of the Postprocessor value(s).", "href": "../../source/userobjects/Terminator.html"}>>>
expression<<<{"description": "FParser expression to process Postprocessor values into a boolean value. Termination of the simulation occurs when this returns true."}>>> = 'total_tritium < 0'
fail_mode<<<{"description": "Abort entire simulation (HARD), just the current time step (SOFT), or not at all (NONE)."}>>> = 'HARD'
message<<<{"description": "An optional message to be output instead of the default message when the termination condition is triggered"}>>> = 'Tritium in system has been depleted'
[]
[]
# The tritium breeding ratio is not directly given in the paper,
# but is specified as a "five year" doubling time from the initial
# inventory. As such, it may be necessary to force the simulation to
# record a timestep at exactly five years, or whatever doubling time
# is wanted, to dial in the tritium breeding ratio. This can be done
# using the IterationAdaptiveDT settings commented out below along
# with this function.
#
#[Functions]
# [catch_five_year]
# type = PiecewiseLinear
# x = '0 157680000 157680100 864000000.0'
# y = '0 0 1 1'
# []
#[]
[Executioner<<<{"href": "../../syntax/Executioner/index.html"}>>>]
type = Transient
start_time = 0
dtmin = 1
end_time = 946080000.0
[TimeStepper<<<{"href": "../../syntax/Executioner/TimeStepper/index.html"}>>>]
type = IterationAdaptiveDT
growth_factor = 1.4
dt = 5
#timestep_limiting_function = 'catch_five_year'
#max_function_change = 0.5
#force_step_every_function_point = true
[]
solve_type = 'PJFNK'
nl_rel_tol = 1e-08
nl_abs_tol = 1e-14
[]
[Outputs<<<{"href": "../../syntax/Outputs/index.html"}>>>]
hide<<<{"description": "A list of the variables and postprocessors that should NOT be output to the Exodus file (may include Variables, ScalarVariables, and Postprocessor names)."}>>> = "BZ_HX_leak_fraction CPS_FW_leak_fraction CPS_efficiency FCU_STO_fraction HX_CPS_leak_fraction HX_EXO_leak_fraction HX_FW_leak_fraction ISS_EXO_leak_fraction P_DIV_leak_fraction P_FW_leak_fraction TBR TES_efficiency T_BZ T_CPS T_DIV T_EXO T_FCU T_FW T_HX T_ISS T_STO T_TES T_VAC epsilon1 epsilon10 epsilon11 epsilon2 epsilon3 epsilon4 epsilon5 epsilon6 epsilon7 epsilon8 epsilon9 residence1 residence10 residence2 residence3 residence4 residence5 residence6 residence7 residence8 residence9 tdecay tritium_burn_fraction tritium_burn_rate tritium_fueling_efficiency"
csv<<<{"description": "Output the scalar variable and postprocessors to a *.csv file using the default CSV output."}>>> = true
console<<<{"description": "Output the results using the default settings for Console output"}>>> = false
[]
(test/tests/fuel_cycle_Abdou/fuel_cycle.i)Python-based Interactive Script
A python-based graphical interactive script is available at (test/tests/fuel_cycle_Abdou/fuel_cycle_gui.py) as a demonstration of the various effects of individual parameters. To use it, navigate to the scripts directory and run the script. All of the input parameters for the model can be changed by editing the associated entry, then clicking the "Run" button. Once the simulation has run, checkboxes will appear for each system-level tritium inventory. Time units can also be adjusted by selecting the appropriate timescale.
References
- Mohamed Abdou, Marco Riva, Alice Ying, Christian Day, Alberto Loarte, Larry R. Baylor, Paul Humrickhouse, Thomas F. Fuerst, and Seungyon Cho.
Physics and technology considerations for the deuterium–tritium fuel cycle and conditions for tritium fuel self sufficiency.
Nuclear Fusion, 61(1):013001, 2021.
URL: https://dx.doi.org/10.1088/1741-4326/abbf35, doi:10.1088/1741-4326/abbf35.[BibTeX]
- Pierre-Clément A. Simon, Casey T. Icenhour, Gyanender Singh, Alexander D Lindsay, Chaitanya Vivek Bhave, Lin Yang, Adriaan Anthony Riet, Yifeng Che, Paul Humrickhouse, Masashi Shimada, and Pattrick Calderoni.
MOOSE-based tritium migration analysis program, version 8 (TMAP8) for advanced open-source tritium transport and fuel cycle modeling.
Fusion Engineering and Design, 214:114874, May 2025.
doi:10.1016/j.fusengdes.2025.114874.[BibTeX]