Fuel Cycle Benchmarking from Meschini et al. (2023)

General Case Description

In this case, TMAP8 reproduces the fuel cycle model from Meschini et al. (2023), which constitutes a benchmark. The model uses a simplified approach by assigning residence times to simulate tritium flow through each system in a fusion power plant, avoiding the complex, high-fidelity description of the fuel cycle. This approach helps minimize computational cost and understand the challenges and potential solutions for optimizing tritium inventory management and accelerating fusion energy development. To increase the fidelity of the simulation, TMAP8 enables performing component level simulation in parallel to provide model parameters in the fuel cycle using the multi-app system.

This case represents an update from the previous fuel cycle model, which reproduced the model from Abdou et al. (2021).

Model Description

The fuel cycle model consists of 11 interconnected systems that handle tritium recycling in a fusion power plant, as shown in Fig. 1 from Meschini et al. (2023). Each system processes tritium differently:

  • Breeding Blanket (BB): Generates tritium through breeding reactions with lithium using neutrons from fusion reactions in vacuum chamber. This is the main tritium source for sustaining the fusion reaction.

  • Tritium Extraction System (TES): Processes and extracts tritium from the breeding blanket with an extraction efficiency . The extracted tritium is directed to the tritium permeation membrane while unextracted tritium flows to the heat exchanger.

  • First Wall (FW): Interface between plasma and breeding blanket that collects implanted tritium from plasma interactions.

  • Divertor (DIV): Collects unburned plasma exhaust and tritium through direct plasma implantation. Similar to the first wall, it experiences tritium permeation to the breeding blanket and receives tritium from heat exchanger leaks.

  • Heat Exchanger (HX): Manages coolant-carried tritium from TES and redistributes it to BB, FW, DIV, and detritiation systems. This component plays a crucial role in tritium redistribution throughout the system.

  • Detritiation System (DS): Processes tritium from building atmosphere and receives input from both heat exchanger leaks and ISS. It acts as an environmental safety system by capturing and processing tritium that escapes into the facility atmosphere.

  • Vacuum Pump (vacuum): Extracts unburned fuel and fusion productions from the plasma chamber. A portion of the pumped tritium goes to direct internal recycling while the rest is sent for processing through the fuel cleanup system.

  • Fuel Clean-up (FCU): Seperates hydrogen isotopes from exhaust gas. The hydrogen isotopes is then sent to the isotope separation system for further processing.

  • Isotope Separation System (ISS): Separates and purifies hydrogen isotopes from various input streams. It receives tritium from both FCU and DS, processing it for either storage or recycling through DS.

  • Storage and Management (storage): Maintains and manages the fuel inventory, receiving purified tritium from ISS and supplying fuel for plasma operation. It serves as the main tritium repository for the fuel cycle.

  • Fueling System (FS): Injects fresh fuel into the vacuum chamber for plasma operation. While not directly modeled in the tritium inventory calculations, its function is represented through an outflux term in the storage and management system equations equal to the tritium fueling rate.

  • Tritium Permeation Membrane (membrane): Provides additional tritium recovery from the TES output stream with high efficiency, helping to minimize losses and maximize tritium recovery for fuel cycle sustainability.

The label and corresponding equation for each systems are shown in Table 1.

Table 1: Systems and labels used in this example.

System NameSystem numberTritium inventory variablesystem equation
Breeding Blanket1T_01_BBEq. (1)
Tritium Extraction System2T_02_TESEq. (2)
First Wall3T_03_FWEq. (3)
Divertor4T_04_DIVEq. (4)
Heat Exchanger5T_05_HXEq. (5)
Detritiation System6T_06_DSEq. (6)
Vaccum Pump7T_07_vacuumEq. (7)
Fuel Clean-up8T_08_FCUEq. (8)
Isotope Separation System9T_09_ISSEq. (9)
Storage and Management10T_10_storageEq. (10)
Tritium Permeation Membrane11T_11_membraneEq. (11)
commentnote:The fuel cycle of Tritium in Fueling System is ignored

The fueling system only injects fresh fuel in the vacuum chamber and is not modeled in the fuel cycle to simplify the model. Instead, an outflux equal to the tritium fueling rate is added to the equation describing the storage and management system.

(1)

(2)

(3)

(4)

(5)

(6)

(7)

(8)

(9)

(10)

(11)

where , the tritium burn efficiency, is defined as:

(12)

Compared to the previous fuel cycle model, this model from Meschini et al. (2023) includes both direct internal recycling in the Vacuum Pump and Fuel Clean-up systems. This direct internal recycling introduces an additional shortcut between the storage system and exhaust gas, reducing the tritium inventory in the fuel cycle. In addition, the Tritium Permeation System can separate tritium from gas mixture extracted from the Breeding Blanket, enhancing the tritium recycling process. Apart for these component updates, Meschini et al. (2023) uses , representing the production of fueling efficiency and burn fraction from Abdou et al. (2021), to explain the fueling process in a fusion reaction under equilibrium conditions. More details about the definition and impact of can be found in Meschini et al. (2023).

Case and Model Parameters

We use the ScalarKernels in MOOSE to calculate the ODEs from 11 systems. All the model parameters are listed in Table 2:

Table 2: Values of material properties.

ParameterDescriptionValueUnits
TBRTritium breeding ratio1.067-
TBETritium burn efficiency in plasma0.025-
AFAvailability factor0.75-
Fraction of tritium lost from non-radioactive phenomena in the th component1 except for FW and DIV system, which have a value of 0-
Fueling efficiency0.25-
Tritium burn fraction in the plasma0.10-
Tritium extraction efficiency0.7-
Direct internal recycling fraction0.5-
Tritium inventory in the th component-kg
Tritium burn rate8.99-
Tritium decay rate1.73s
time-s
Tritium residence time in the th component, , , , , , , s

Results

Figure 1 shows the temporal evolution during three years of tritium inventory across key systems, including breeding blanket, tritium extraction, vacuum pump, and storage systems. During the simulation, an accuracy_time of 20 days is used to reduce computational costs. At times before accuracy_time, the simulation uses a time step small enough to refine the period of activity and inactivity representing the availability factor. At times after accuracy_time, the simulation uses an averaged value of activity over the period. This approximation enables increasing the time interval while maintaining reasonable accuracy (the cyclic behavior observed at times before accuracy_time disappears, but the average value remains correct). In addition, the model is benchmarked by comparing the the TMAP8 simulation results with MatLab calculations from Meschini et al. (2023) during the first 20 days. Figure 2 shows excellent agreement in the temporal evolution of tritium inventory across the four key systems. The close match properly benchmarks our implementation in TMAP8 using MOOSE's ScalarKernel system to solve the coupled ODEs describing tritium transfer between systems.

Figure 1: Temporal evolution of the fuel cycle model from Meschini et al. (2023) during three years as calculated by TMAP8.

Figure 2: Comparison of TMAP8 calculation with the data of fuel cycle model from Meschini et al. (2023).

commentnote:This comparison only considers the first 20 days.

The data file from Meschini et al. (2023) for a three-year simulation has a large storage size due to the short time intervals used. In addition, the trend of tritium curves in these critical systems do not show significant variance after 20 days. To reduce storage costs, we only compare the TMAP8 simulation results with MatLab calculations from Meschini et al. (2023) for the first 20 days, even if the TMAP8 simulation is run for a longer period of time.

Input files

The input file for this case can be found at (test/tests/fuel_cycle_Meschini/fuel_cycle.i). Similar to the previous fuel cycle model, we initialize the tritium mass for all systems at 0 kg, except for the storage system, which is initialized with an initial_inventory of 1.14 kg.

[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_DS]
    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_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"}>>> = ${initial_inventory}
  []
  [T_11_membrane]
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = SCALAR
  []
[]

In the ScalarKernels block, the ODEs for the 11 systems in Table 1 are built using ODETimeDerivative and ParsedODEKernel objects.

[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_DS
  []
  [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_storage
  []
  [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_membrane
  []
  [I1]
    # Breeding Zone
    type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
    expression<<<{"description": "function expression"}>>> = '-(breeder_pulse + T_03_FW / residence3 + T_04_DIV / residence4 + HX_BZ_leak_fraction * T_05_HX / residence5 - 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_03_FW T_04_DIV T_05_HX'
    postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'breeder_pulse HX_BZ_leak_fraction residence1 residence3 residence4 residence5 tdecay epsilon1'
  []
  [I2]
    #Tritium Extraction System
    type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
    expression<<<{"description": "function expression"}>>> = '-(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"}>>> = '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 * burn_pulse + HX_FW_leak_fraction * T_05_HX / residence5
                    - 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'
    postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'P_FW_leak_fraction HX_FW_leak_fraction burn_pulse residence5 residence3 tdecay epsilon3'
  []
  # TBE = tritium_burn_fraction * tritium_fueling_efficiency
  [I4]
    #Divertor
    type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
    expression<<<{"description": "function expression"}>>> = '-(P_DIV_leak_fraction * burn_pulse + (1 - HX_BZ_leak_fraction - HX_DS_leak_fraction - HX_FW_leak_fraction) * T_05_HX / residence5
                  - 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_05_HX'
    postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'P_DIV_leak_fraction HX_BZ_leak_fraction HX_DS_leak_fraction HX_FW_leak_fraction burn_pulse residence5 residence4 tdecay epsilon4'
  []
  [I5]
    #Heat eXchanger
    type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
    expression<<<{"description": "function expression"}>>> = '-((1 - TES_efficiency) * T_02_TES / residence2 - 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_02_TES'
    postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'TES_efficiency residence2 residence5 tdecay epsilon5'
  []
  [I6]
    #Detritiation System
    type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
    expression<<<{"description": "function expression"}>>> = '-(HX_DS_leak_fraction * T_05_HX / residence5 + ISS_DS_leak_fraction * T_09_ISS / residence9 - T_06_DS / residence6 - T_06_DS * epsilon6 / residence6 - T_06_DS * tdecay)'
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_06_DS'
    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_DS_leak_fraction ISS_DS_leak_fraction residence5 residence9 residence6 tdecay epsilon6'
  []
  [I7]
    #Vacuum Pump
    type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
    expression<<<{"description": "function expression"}>>> = '-((1 - TBE - P_FW_leak_fraction - P_DIV_leak_fraction) * burn_pulse
                  - 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"}>>> = 'TBE burn_pulse P_FW_leak_fraction P_DIV_leak_fraction residence7 tdecay epsilon7'
  []
  [I8]
    #Fuel Clean-Up
    type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
    expression<<<{"description": "function expression"}>>> = '-((1 - DIR_fraction) * 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'
    coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_07_vacuum'
    postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'DIR_fraction residence7 residence8 tdecay epsilon8'
  []
  [I9]
    #Isotope Separation System
    type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
    expression<<<{"description": "function expression"}>>> = '-(T_06_DS / residence6 + T_08_FCU / residence8 - 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_06_DS T_08_FCU'
    postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'residence6 residence8 residence9 tdecay epsilon9'
  []
  [I10]
    #Storage and Management
    type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
    expression<<<{"description": "function expression"}>>> = '-((1 - ISS_DS_leak_fraction) * T_09_ISS / residence9 + DIR_fraction * T_07_vacuum / residence7 + T_11_membrane / residence11 - burn_pulse - T_10_storage * tdecay)'
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_10_storage'
    coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_09_ISS T_07_vacuum T_11_membrane'
    postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'ISS_DS_leak_fraction DIR_fraction burn_pulse residence9 residence7 residence11 tdecay AF'
  []
  [I11]
    #Tritium Permeation Membrane
    type = ParsedODEKernel<<<{"description": "Parsed expression ODE kernel.", "href": "../../source/scalarkernels/ParsedODEKernel.html"}>>>
    expression<<<{"description": "function expression"}>>> = '-(TES_efficiency * T_02_TES/residence2 - T_11_membrane / residence11 - T_11_membrane * epsilon11 / residence11 - T_11_membrane * tdecay)'
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = 'T_11_membrane'
    coupled_variables<<<{"description": "Scalar variables coupled in the parsed expression."}>>> = 'T_02_TES'
    postprocessors<<<{"description": "Vector of postprocessor names used in the function expression"}>>> = 'TES_efficiency residence2 residence11 tdecay epsilon11'
  []
[]

In the Functions block, we create functions to simulate the period influenced by the availability factor and ensures the time interval is shorter than this period. However, the input file used for testing considers an averaged tritium breeding ratio instead of a period to increase the time interval and reduce computational costs. During testing, the simulation uses the period to represent the availability factor before accuracy_time and switches to using the averaged value after accuracy_time. More information about the changes can be found in the test specification file at (test/tests/fuel_cycle_Meschini/tests).

[Functions<<<{"href": "../../syntax/Functions/index.html"}>>>]
  [breeder_pulse_function]
    type = ParsedFunction<<<{"description": "Function created by parsing a string", "href": "../../source/functions/MooseParsedFunction.html"}>>>
    symbol_names<<<{"description": "Symbols (excluding t,x,y,z) that are bound to the values provided by the corresponding items in the vals vector."}>>> = 'AF tritium_burn_rate TBR'
    symbol_values<<<{"description": "Constant numeric values, postprocessor names, function names, and scalar variables corresponding to the symbols in symbol_names."}>>> = 'AF tritium_burn_rate TBR'
    expression<<<{"description": "The user defined function."}>>> = 'if(t > ${accuracy_time}, AF * tritium_burn_rate * TBR,
                  if(t % ${pulse_time} < AF * ${pulse_time}, tritium_burn_rate * TBR, 0))'
  []
  [burn_pulse_function]
    type = ParsedFunction<<<{"description": "Function created by parsing a string", "href": "../../source/functions/MooseParsedFunction.html"}>>>
    symbol_names<<<{"description": "Symbols (excluding t,x,y,z) that are bound to the values provided by the corresponding items in the vals vector."}>>> = 'AF tritium_burn_rate TBE'
    symbol_values<<<{"description": "Constant numeric values, postprocessor names, function names, and scalar variables corresponding to the symbols in symbol_names."}>>> = 'AF tritium_burn_rate TBE'
    expression<<<{"description": "The user defined function."}>>> = 'if(t > ${accuracy_time}, AF * tritium_burn_rate / TBE,
                  if(t % ${pulse_time} < AF * ${pulse_time}, tritium_burn_rate / TBE, 0))'
  []
  [dt_function]
    type = ParsedFunction<<<{"description": "Function created by parsing a string", "href": "../../source/functions/MooseParsedFunction.html"}>>>
    symbol_names<<<{"description": "Symbols (excluding t,x,y,z) that are bound to the values provided by the corresponding items in the vals vector."}>>> = 'AF'
    symbol_values<<<{"description": "Constant numeric values, postprocessor names, function names, and scalar variables corresponding to the symbols in symbol_names."}>>> = 'AF'
    expression<<<{"description": "The user defined function."}>>> = 'if(t > ${accuracy_time}, ${time_interval_middle},
                  if(t % ${pulse_time} < AF * ${pulse_time}, AF * ${pulse_time} - t % ${pulse_time} + 0.01,
                  if(t % ${pulse_time} < ${pulse_time}, ${pulse_time} - t % ${pulse_time} + 0.01, 2)))'
  []
[]

In the Postprocessors block, we initialize all necessary parameters related to the input flow, output flow, radiation, and source term for each system.

[Postprocessors<<<{"href": "../../syntax/Postprocessors/index.html"}>>>]
  [burn_pulse]
    type = FunctionValuePostprocessor<<<{"description": "Computes the value of a supplied function at a single point (scalable)", "href": "../../source/postprocessors/FunctionValuePostprocessor.html"}>>>
    function<<<{"description": "The function which supplies the postprocessor value."}>>> = burn_pulse_function
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'initial timestep_end'
  []
  [breeder_pulse]
    type = FunctionValuePostprocessor<<<{"description": "Computes the value of a supplied function at a single point (scalable)", "href": "../../source/postprocessors/FunctionValuePostprocessor.html"}>>>
    function<<<{"description": "The function which supplies the postprocessor value."}>>> = breeder_pulse_function
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'initial timestep_end'
  []
  [HX_BZ_leak_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"}>>> = ${f_HX_to_BB}
  []
  [HX_FW_leak_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"}>>> = ${f_HX_to_FW}
  []
  [HX_DS_leak_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"}>>> = ${f_HX_to_DS}
  []
  [ISS_DS_leak_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"}>>> = ${f_ISS_to_DS}
  []
  [P_DIV_leak_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"}>>> = ${f_Plasma_to_DIV}
  []
  [P_FW_leak_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"}>>> = ${f_Plasma_to_FW}
  []
  [TES_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"}>>> = ${eta_2}
  []
  [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"}>>> = ${TBR_value}
  []
  [DIR_fraction]
    #f_DIR
    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"}>>> = ${f_DIR}
  []
  [AF]
    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"}>>> = ${AF_value}
  []
  [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"}>>> = ${t_decay}
  []
  [TBE]
    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"}>>> = ${TBE_value}
  []
  [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"}>>> = ${tritium_burn_rate_value}
  []
  [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"}>>> = ${epsilon}
  []
  [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"}>>> = ${epsilon}
  []
  [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"}>>> = ${epsilon_low}
  []
  [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"}>>> = ${epsilon_low}
  []
  [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"}>>> = ${epsilon}
  []
  [epsilon6]
    #DS
    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"}>>> = ${epsilon}
  []
  [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"}>>> = ${epsilon}
  []
  [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"}>>> = ${epsilon}
  []
  [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"}>>> = ${epsilon}
  []
  [epsilon11]
    #TSM
    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"}>>> = ${epsilon}
  []
  [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"}>>> = ${resident_time_BB}
  []
  [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"}>>> = ${resident_time_TES}
  []
  [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"}>>> = ${resident_time_FW}
  []
  [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"}>>> = ${resident_time_DIV}
  []
  [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"}>>> = ${resident_time_HX}
  []
  [residence6]
    #DS
    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"}>>> = ${resident_time_DS}
  []
  [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"}>>> = ${resident_time_vacuum}
  []
  [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"}>>> = ${resident_time_FCU}
  []
  [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"}>>> = ${resident_time_ISS}
  []
  [residence11]
    #TSM
    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"}>>> = ${resident_time_membrane}
  []
  [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_DS]
    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_DS
    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_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_10_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
  []
  [T_TSM]
    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_membrane
    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_DS T_VAC T_FCU T_ISS T_STO T_TSM'
  []
[]

In the UserObjects block, we define Terminator to stop the simulation once tritium in the storage system or the total tritium is depleted. Then, in the Executioner block, we use a Transient executioner to solve the fuel cycle model.

[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'
  []
[]
[Executioner<<<{"href": "../../syntax/Executioner/index.html"}>>>]
  type = Transient
  start_time = 0
  dtmin = 1
  end_time = ${simulation_time}
  [TimeStepper<<<{"href": "../../syntax/Executioner/TimeStepper/index.html"}>>>]
    type = FunctionDT
    function = dt_function
  []
  solve_type = 'PJFNK'
  nl_rel_tol = 1e-10
  nl_abs_tol = 1e-14
[]

References

  1. 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]
  2. Samuele Meschini, Sara E Ferry, Rémi Delaporte-Mathurin, and Dennis G Whyte. Modeling and analysis of the tritium fuel cycle for ARC-and STEP-class DT fusion power plants. Nuclear Fusion, 63(12):126005, 2023. doi:https://doi.org/10.1088/1741-4326/acf3fc.[BibTeX]