Divertor Monoblock During Pulsed Operation

Contact: Pierre-Clement Simon (pierreclement.simon.at.inl.gov), Masashi Shimada (masashi.shimada.at.inl.gov)

Model link: Divertor Monoblock

TMAP8 is used to model tritium transport in a divertor monoblock to elucidate the effects of pulsed operation (up to fifty 1600-second plasma discharge and cool-down cycles) on the tritium in-vessel inventory source term and ex-vessel release term (i.e., tritium retention and permeation) for safety analysis. This example reproduces the results presented in Shimada et al. (2024).

General description of the simulation case and corresponding input file

Introduction

In a magnetic confinement fusion system, the divertor components will be subjected to intense particle and heat fluxes from plasma, as well as 14-MeV neutrons stemming from deuterium-tritium (D-T) reactions, thus creating extremely high temperature and hydrogen concentration gradients across tens of millimeters. Furthermore, the thermomechanical properties of the divertor materials will evolve over time in response to displacement damage and gas/solid transmutations. Thus, predictive modeling of tritium transport in the divertor poses enormous challenges, as it requires simulation capabilities capable of (1) multi-material configurations, (2) high thermal cycles, (3) complex 2D and 3D geometries, (4) and microstructural evolution resulting from displacement damage and gas/solid transmutations. For example, the ITER divertor, which consists of tungsten (W) monoblocks bonded to cooling tubes made of copper-chromium-zirconium (CuCrZr) alloy, is designed to withstand high heat fluxes (∼10 MW ) during steady-state plasma operation from intense D-T plasma flux (∼1024 ). In this example, we simulate tritium retention and permeation as well as thermal transport in an ITER-like 2D W-Cu-CuCrZr monoblock and demonstrate the first three (out of four) aforementioned required simulation capabilities for tritium transport in the divertor using TMAP8, as presented in Shimada et al. (2024). This simulation was also based on the cases published in Hodille et al. (2021).

The sections below describe the simulation details and explain how they translate into the example TMAP8 input file. Not every part of the input file is explained here. If the interested reader has more questions about this example case and how to modify this input file to adapt it to a different case, feel free to reach out to the TMAP8 development team on the TMAP8 GitHub discussion page.

Divertor monoblock geometry and mesh generation

Figure 1 shows the geometry, mesh, and temperature distribution of the 2D monoblock employed in Shimada et al. (2024) and in the present example. The 2D monoblock consisted of three materials:

  1. W monoblock ( (mm) > 8.5),

  2. Cu interlayer (7.5 < (mm) < 8.5),

  3. CuCrZr tube (6.0 < (mm) < 7.5), and

  4. HO cooling ( (mm) < 6.0),

where in a Cartesian coordinate system, and the center point (, ) = (0, 0) is defined at the center of the CuCrZr tube.

Figure 1: 2D monoblock: (left) geometry and mesh; (right) temperature distribution. This corresponds to Fig. 1 in Ref. Shimada et al. (2024).

MOOSE is equipped with a set of user-friendly, built-in mesh generators for creating meshes based on simple geometries (e.g., a monoblock). The built-in mesh generator ConcentricCircleMeshGenerator is used to create meshes for the 2D monoblock geometry. Only the left-hand (−14.0 < (mm) < 0 & −14.0 < (mm) < 14.0) portion of the monoblock is used, such that the mesh size is halved by assuming symmetry at the plane. This example uses a total of 9,418 nodes, creating 28,402 degrees of freedom in the non-linear system. The finer mesh size and time step are required to compute the trapping-limited diffusion regime, as described in TMAP8 verification case ver-1d. However, a set of relatively low detrapping energies (< 0.85 eV) is used here to reduce the computing time via the relatively coarse mesh size.

In the input file, the mesh is defined as:

[Mesh]
  [ccmg]
    type = ConcentricCircleMeshGenerator
    num_sectors = 36
    rings = '1 30 20 110'
    radii = '${units 6 mm -> m} ${units 7.5 mm -> m} ${units 8.5 mm -> m}'
    has_outer_square = on
    pitch = '${units 28 mm -> m}'
    portion = left_half
    preserve_volumes = false
    smoothing_max_it = 3
  []
  [ssbsg1]
    type = SideSetsBetweenSubdomainsGenerator
    input = ccmg
    primary_block = '4' # W
    paired_block = '3' # Cu
    new_boundary = '4to3'
  []
  [ssbsg2]
    type = SideSetsBetweenSubdomainsGenerator
    input = ssbsg1
    primary_block = '3' # Cu
    paired_block = '4' # W
    new_boundary = '3to4'
  []
  [ssbsg3]
    type = SideSetsBetweenSubdomainsGenerator
    input = ssbsg2
    primary_block = '3' # Cu
    paired_block = '2' # CuCrZr
    new_boundary = '3to2'
  []
  [ssbsg4]
    type = SideSetsBetweenSubdomainsGenerator
    input = ssbsg3
    primary_block = '2' # CuCrZr
    paired_block = '3' # Cu
    new_boundary = '2to3'
  []
  [ssbsg5]
    type = SideSetsBetweenSubdomainsGenerator
    input = ssbsg4
    primary_block = '2' # CuCrZr
    paired_block = '1' # H2O
    new_boundary = '2to1'
  []
  [bdg]
    type = BlockDeletionGenerator
    input = ssbsg5
    block = '1' # H2O
  []
[]

Nomenclature of variables and physical parameters

Table 1 lists the variables and physical parameters used in this example with their units.

Table 1: Nomenclature of variables and physical parameters used in this example.

SymbolVariable or Physical PropertyUnit
Concentration of solute (mobile) speciesm
Concentration of trapped speciesm
TemperatureK
Diffusivity of solute (mobile) speciesm s
Solubility of solute (mobile) speciesm Pa
Total concentration of species m
Concentration of empty trapping sitesm
Concentration of trapping sites m
Trapping rate coefficient, s
Release rate coefficient s
Pre-exponential factor, s
Detrapping energyeV
Atomic number densitym
Densityg m
Specific heatJ kg K
Thermal conductivityW m K

Variables and governing equations

To simulate tritium and thermal transport, we define two sets of partial differential equations (PDEs). First, the strong form of the mass conservation equation for solute (mobile) T atoms, , is written as:

(1)

We use three sets of mass conservation equations to calculate the behaviors of solute T atoms in three different materials (i.e., W, Cu, CuCrZr). Second, the strong form of the conservation of energy equation is written as:

(2)

Table 1 lists all the symbols and definitions used in Eq. (1) and Eq. (2).

The next step is to convert these two strong-form PDEs into their weak forms by multiplying with a test function, , and integrating over a domain, with surface and outward-facing normal vector . Using the divergence theorem, one can obtain the weak form of the mass conservation equation (Eq. (1)) as follows:

(3)

Similarly, the weak form of the conservation of energy equation can be written by multiplying Eq. (2) with a test function, , and integrating over a domain, with surface and outward-facing normal vector . Using the divergence theorem, one can obtain the weak form of the conservation of energy equation as follows:

(4)

Then, to solve for the PDEs and physical phenomena, we can select appropriate kernels and boundary conditions (BCs) from MOOSE’s extensive library. The following three subsections describe each kernel, BC, and numerical method utilized in the present work.

In the input file, the variables are defined as:

[Variables]
  [temperature]
    order = FIRST
    family = LAGRANGE
    initial_condition = '${units 300 K}'
  []
  ######################### Variables for W (block = 4)
  [C_mobile_W]
    order = FIRST
    family = LAGRANGE
    initial_condition = '${units 1.0e-20 m^-3}'
    block = 4
  []
  [C_trapped_W]
    order = FIRST
    family = LAGRANGE
    initial_condition = '${units 1.0e-15 m^-3}'
    block = 4
  []
  ######################### Variables for Cu (block = 3)
  [C_mobile_Cu]
    order = FIRST
    family = LAGRANGE
    initial_condition = '${units 5.0e-17 m^-3}'
    block = 3
  []
  [C_trapped_Cu]
    order = FIRST
    family = LAGRANGE
    initial_condition = '${units 1.0e-15 m^-3}'
    block = 3
  []
  ######################### Variables for CuCrZr (block = 2)
  [C_mobile_CuCrZr]
    order = FIRST
    family = LAGRANGE
    initial_condition = '${units 1.0e-15 m^-3}'
    block = 2
  []
  [C_trapped_CuCrZr]
    order = FIRST
    family = LAGRANGE
    initial_condition = '${units 1.0e-15 m^-3}'
    block = 2
  []
[]

Note the usage of initial_condition and block parameters in order to set initial conditions and material block applicability for each variable.

Kernels

For the mass conservation equation, we use ADTimeDerivative and ADMatDiffusion to represent the 1 and 3 terms of Eq. (3). The TMAP8 kernels TrappingNodalKernel and ReleasingNodalKernel represent the 4 and 5 terms of Eq. (3), respectively, and simulate the trapping/release behavior of hydrogen isotopes in/from trap sites. For the conservation of energy equation, SpecificHeatConductionTimeDerivative and HeatConduction solve the 1 and 3 terms of Eq. (4). ADTimeDerivative and ADMatDiffusion are kernels from the core MOOSE framework, and SpecificHeatConductionTimeDerivative and HeatConduction are kernels from the MOOSE Heat Transfer Module. These pre-made kernels are commonly re-used to represent time derivative, diffusion, and heat conduction terms in a given material within a variety of MOOSE-based simulations.

[Kernels]
  ############################## Kernels for W (block = 4)
  [diff_W]
    type = ADMatDiffusion
    variable = C_mobile_W
    diffusivity = diffusivity_W
    block = 4
    extra_vector_tags = ref
  []
  [time_diff_W]
    type = ADTimeDerivative
    variable = C_mobile_W
    block = 4
    extra_vector_tags = ref
  []
  [coupled_time_W]
    type = ScaledCoupledTimeDerivative
    variable = C_mobile_W
    v = C_trapped_W
    factor = 1e0
    block = 4
    extra_vector_tags = ref
  []
  [heat_conduction_W]
    type = HeatConduction
    variable = temperature
    diffusion_coefficient = thermal_conductivity_W
    block = 4
    extra_vector_tags = ref
  []
  [time_heat_conduction_W]
    type = SpecificHeatConductionTimeDerivative
    variable = temperature
    specific_heat = specific_heat_W
    density = density_W
    block = 4
    extra_vector_tags = ref
  []
  ############################## Kernels for Cu (block = 3)
  [diff_Cu]
    type = ADMatDiffusion
    variable = C_mobile_Cu
    diffusivity = diffusivity_Cu
    block = 3
    extra_vector_tags = ref
  []
  [time_diff_Cu]
    type = ADTimeDerivative
    variable = C_mobile_Cu
    block = 3
    extra_vector_tags = ref
  []
  [coupled_time_Cu]
    type = ScaledCoupledTimeDerivative
    variable = C_mobile_Cu
    v = C_trapped_Cu
    factor = 1e0
    block = 3
    extra_vector_tags = ref
  []
  [heat_conduction_Cu]
    type = HeatConduction
    variable = temperature
    diffusion_coefficient = thermal_conductivity_Cu
    block = 3
    extra_vector_tags = ref
  []
  [time_heat_conduction_Cu]
    type = SpecificHeatConductionTimeDerivative
    variable = temperature
    specific_heat = specific_heat_Cu
    density = density_Cu
    block = 3
    extra_vector_tags = ref
  []
  ############################## Kernels for CuCrZr (block = 2)
  [diff_CuCrZr]
    type = ADMatDiffusion
    variable = C_mobile_CuCrZr
    diffusivity = diffusivity_CuCrZr
    block = 2
    extra_vector_tags = ref
  []
  [time_diff_CuCrZr]
    type = ADTimeDerivative
    variable = C_mobile_CuCrZr
    block = 2
    extra_vector_tags = ref
  []
  [coupled_time_CuCrZr]
    type = ScaledCoupledTimeDerivative
    variable = C_mobile_CuCrZr
    v = C_trapped_CuCrZr
    factor = 1e0
    block = 2
    extra_vector_tags = ref
  []
  [heat_conduction_CuCrZr]
    type = HeatConduction
    variable = temperature
    diffusion_coefficient = thermal_conductivity_CuCrZr
    block = 2
    extra_vector_tags = ref
  []
  [time_heat_conduction_CuCrZr]
    type = SpecificHeatConductionTimeDerivative
    variable = temperature
    specific_heat = specific_heat_CuCrZr
    density = density_CuCrZr
    block = 2
    extra_vector_tags = ref
  []
[]

NodalKernels are used for non-diffusive variables (trapped species).

[NodalKernels]
  ############################## NodalKernels for W (block = 4)
  [time_W]
    type = TimeDerivativeNodalKernel
    variable = C_trapped_W
  []
  [trapping_W]
    type = TrappingNodalKernel
    variable = C_trapped_W
    temperature = temperature
    alpha_t = 2.75e11 # 1e15
    N = 1.0e0 # = (1e0) x (${tungsten_atomic_density} #/m^3)
    # Ct0 = 1.0e-4                # E.A. Hodille et al 2021 Nucl. Fusion 61 126003, trap 1
    Ct0 = 1.0e-4 # E.A. Hodille et al 2021 Nucl. Fusion 61 1260033, trap 2
    trap_per_free = 1.0e0 # 1.0e1
    mobile_concentration = 'C_mobile_W'
    extra_vector_tags = ref
  []
  [release_W]
    type = ReleasingNodalKernel
    alpha_r = 8.4e12 # 1.0e13
    temperature = temperature
    # detrapping_energy = 9863.9    # = 0.85 eV    E.A. Hodille et al 2021 Nucl. Fusion 61 126003, trap 1
    detrapping_energy = 11604.6 # = 1.00 eV    E.A. Hodille et al 2021 Nucl. Fusion 61 126003, trap 2
    variable = C_trapped_W
  []
  ############################## NodalKernels for Cu (block = 3)
  [time_Cu]
    type = TimeDerivativeNodalKernel
    variable = C_trapped_Cu
  []
  [trapping_Cu]
    type = TrappingNodalKernel
    variable = C_trapped_Cu
    temperature = temperature
    alpha_t = 2.75e11 # 1e15
    N = 1.0e0 # = ${tungsten_atomic_density} #/m^3 (W lattice density)
    Ct0 = 5.0e-5 # R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038, trap 3
    trap_per_free = 1.0e0 # 1.0e1
    mobile_concentration = 'C_mobile_Cu'
    extra_vector_tags = ref
  []
  [release_Cu]
    type = ReleasingNodalKernel
    alpha_r = 8.4e12 # 1.0e13
    temperature = temperature
    detrapping_energy = 5802.3 # = 0.50eV  R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038, trap 3
    variable = C_trapped_Cu
  []
  ############################## NodalKernels for CuCrZr (block = 2)
  [time_CuCrZr]
    type = TimeDerivativeNodalKernel
    variable = C_trapped_CuCrZr
  []
  [trapping_CuCrZr]
    type = TrappingNodalKernel
    variable = C_trapped_CuCrZr
    temperature = temperature
    alpha_t = 2.75e11 # 1e15
    N = 1.0e0 # = ${tungsten_atomic_density} #/m^3 (W lattice density)
    Ct0 = 5.0e-5 # R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038, trap 4
    # Ct0 = 4.0e-2                # R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038, trap 5
    trap_per_free = 1.0e0 # 1.0e1
    mobile_concentration = 'C_mobile_CuCrZr'
    extra_vector_tags = ref
  []
  [release_CuCrZr]
    type = ReleasingNodalKernel
    alpha_r = 8.4e12 # 1.0e13
    temperature = temperature
    detrapping_energy = 5802.3 # = 0.50eV  R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038, trap 4
    # detrapping_energy = 9631.8   # = 0.83 eV  R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038, trap 5
    variable = C_trapped_CuCrZr
  []
[]

AuxVariables and AuxKernels

AuxVariables are used to track quantities that are not solved for by the PDEs, but are needed to compute materials properties, or are desirable to obtain as outputs, such as the total concentration of tritium or flux values. AuxKernels provide the expressions that define the AuxVariables.

[AuxVariables]
  [flux_y]
    order = FIRST
    family = MONOMIAL
  []
  ############################## AuxVariables for W (block = 4)
  [Sc_C_mobile_W]
    block = 4
  []
  [Sc_C_trapped_W]
    block = 4
  []
  [C_total_W]
    block = 4
  []
  [Sc_C_total_W]
    block = 4
  []
  [S_empty_W]
    block = 4
  []
  [Sc_S_empty_W]
    block = 4
  []
  [S_trapped_W]
    block = 4
  []
  [Sc_S_trapped_W]
    block = 4
  []
  [S_total_W]
    block = 4
  []
  [Sc_S_total_W]
    block = 4
  []
  ############################## AuxVariables for Cu (block = 3)
  [Sc_C_mobile_Cu]
    block = 3
  []
  [Sc_C_trapped_Cu]
    block = 3
  []
  [C_total_Cu]
    block = 3
  []
  [Sc_C_total_Cu]
    block = 3
  []
  [S_empty_Cu]
    block = 3
  []
  [Sc_S_empty_Cu]
    block = 3
  []
  [S_trapped_Cu]
    block = 3
  []
  [Sc_S_trapped_Cu]
    block = 3
  []
  [S_total_Cu]
    block = 3
  []
  [Sc_S_total_Cu]
    block = 3
  []
  ############################## AuxVariables for CuCrZr (block = 2)
  [Sc_C_mobile_CuCrZr]
    block = 2
  []
  [Sc_C_trapped_CuCrZr]
    block = 2
  []
  [C_total_CuCrZr]
    block = 2
  []
  [Sc_C_total_CuCrZr]
    block = 2
  []
  [S_empty_CuCrZr]
    block = 2
  []
  [Sc_S_empty_CuCrZr]
    block = 2
  []
  [S_trapped_CuCrZr]
    block = 2
  []
  [Sc_S_trapped_CuCrZr]
    block = 2
  []
  [S_total_CuCrZr]
    block = 2
  []
  [Sc_S_total_CuCrZr]
    block = 2
  []
[]
[AuxKernels]
  ############################## AuxKernels for W (block = 4)
  [Scaled_mobile_W]
    variable = Sc_C_mobile_W
    type = NormalizationAux
    normal_factor = ${tungsten_atomic_density}
    source_variable = C_mobile_W
  []
  [Scaled_trapped_W]
    variable = Sc_C_trapped_W
    type = NormalizationAux
    normal_factor = ${tungsten_atomic_density}
    source_variable = C_trapped_W
  []
  [total_W]
    variable = C_total_W
    type = ParsedAux
    expression = 'C_mobile_W + C_trapped_W'
    coupled_variables = 'C_mobile_W C_trapped_W'
  []
  [Scaled_total_W]
    variable = Sc_C_total_W
    type = NormalizationAux
    normal_factor = ${tungsten_atomic_density}
    source_variable = C_total_W
  []
  [empty_sites_W]
    variable = S_empty_W
    type = EmptySitesAux
    N = '${units 1.0e0 m^-3}' # = ${tungsten_atomic_density} #/m^3 (W lattice density)
    # Ct0 = ${units 1.0e-4 m^-3}   # E.A. Hodille et al 2021 Nucl. Fusion 61 126003, trap 1
    Ct0 = '${units 1.0e-4 m^-3}' # E.A. Hodille et al 2021 Nucl. Fusion 61 1260033, trap 2
    trap_per_free = 1.0e0 # 1.0e1
    trapped_concentration_variables = C_trapped_W
  []
  [scaled_empty_W]
    variable = Sc_S_empty_W
    type = NormalizationAux
    normal_factor = ${tungsten_atomic_density}
    source_variable = S_empty_W
  []
  [trapped_sites_W]
    variable = S_trapped_W
    type = NormalizationAux
    normal_factor = 1e0
    source_variable = C_trapped_W
  []
  [scaled_trapped_W]
    variable = Sc_S_trapped_W
    type = NormalizationAux
    normal_factor = ${tungsten_atomic_density}
    source_variable = S_trapped_W
  []
  [total_sites_W]
    variable = S_total_W
    type = ParsedAux
    expression = 'S_trapped_W + S_empty_W'
    coupled_variables = 'S_trapped_W S_empty_W'
  []
  [scaled_total_W]
    variable = Sc_S_total_W
    type = NormalizationAux
    normal_factor = ${tungsten_atomic_density}
    source_variable = S_total_W
  []
  ############################## AuxKernels for Cu (block = 3)
  [Scaled_mobile_Cu]
    variable = Sc_C_mobile_Cu
    type = NormalizationAux
    normal_factor = ${tungsten_atomic_density}
    source_variable = C_mobile_Cu
  []
  [Scaled_trapped_Cu]
    variable = Sc_C_trapped_Cu
    type = NormalizationAux
    normal_factor = ${tungsten_atomic_density}
    source_variable = C_trapped_Cu
  []
  [total_Cu]
    variable = C_total_Cu
    type = ParsedAux
    expression = 'C_mobile_Cu + C_trapped_Cu'
    coupled_variables = 'C_mobile_Cu C_trapped_Cu'
  []
  [Scaled_total_Cu]
    variable = Sc_C_total_Cu
    type = NormalizationAux
    normal_factor = ${tungsten_atomic_density}
    source_variable = C_total_Cu
  []
  [empty_sites_Cu]
    variable = S_empty_Cu
    type = EmptySitesAux
    N = '${units 1.0e0 m^-3}' # = ${tungsten_atomic_density} #/m^3 (W lattice density)
    Ct0 = '${units 5.0e-5 m^-3}' # R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038, trap 3
    trap_per_free = 1.0e0 # 1.0e1
    trapped_concentration_variables = C_trapped_Cu
  []
  [scaled_empty_Cu]
    variable = Sc_S_empty_Cu
    type = NormalizationAux
    normal_factor = ${tungsten_atomic_density}
    source_variable = S_empty_Cu
  []
  [trapped_sites_Cu]
    variable = S_trapped_Cu
    type = NormalizationAux
    normal_factor = 1e0
    source_variable = C_trapped_Cu
  []
  [scaled_trapped_Cu]
    variable = Sc_S_trapped_Cu
    type = NormalizationAux
    normal_factor = ${tungsten_atomic_density}
    source_variable = S_trapped_Cu
  []
  [total_sites_Cu]
    variable = S_total_Cu
    type = ParsedAux
    expression = 'S_trapped_Cu + S_empty_Cu'
    coupled_variables = 'S_trapped_Cu S_empty_Cu'
  []
  [scaled_total_Cu]
    variable = Sc_S_total_Cu
    type = NormalizationAux
    normal_factor = ${tungsten_atomic_density}
    source_variable = S_total_Cu
  []
  ############################## AuxKernels for CuCrZr (block = 2)
  [Scaled_mobile_CuCrZr]
    variable = Sc_C_mobile_CuCrZr
    type = NormalizationAux
    normal_factor = ${tungsten_atomic_density}
    source_variable = C_mobile_CuCrZr
  []
  [Scaled_trapped_CuCrZr]
    variable = Sc_C_trapped_CuCrZr
    type = NormalizationAux
    normal_factor = ${tungsten_atomic_density}
    source_variable = C_trapped_CuCrZr
  []
  [total_CuCrZr]
    variable = C_total_CuCrZr
    type = ParsedAux
    expression = 'C_mobile_CuCrZr + C_trapped_CuCrZr'
    coupled_variables = 'C_mobile_CuCrZr C_trapped_CuCrZr'
  []
  [Scaled_total_CuCrZr]
    variable = Sc_C_total_CuCrZr
    type = NormalizationAux
    normal_factor = ${tungsten_atomic_density}
    source_variable = C_total_CuCrZr
  []
  [empty_sites_CuCrZr]
    variable = S_empty_CuCrZr
    type = EmptySitesAux
    N = '${units 1.0e0 m^-3}' # = ${tungsten_atomic_density} #/m^3 (W lattice density)
    Ct0 = '${units 5.0e-5 m^-3}' # R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038, trap 4
    # Ct0 = ${units 4.0e-2 m^-3} # R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038, trap 5
    trap_per_free = 1.0e0 # 1.0e1
    trapped_concentration_variables = C_trapped_CuCrZr
  []
  [scaled_empty_CuCrZr]
    variable = Sc_S_empty_CuCrZr
    type = NormalizationAux
    normal_factor = ${tungsten_atomic_density}
    source_variable = S_empty_CuCrZr
  []
  [trapped_sites_CuCrZr]
    variable = S_trapped_CuCrZr
    type = NormalizationAux
    normal_factor = 1e0
    source_variable = C_trapped_CuCrZr
  []
  [scaled_trapped_CuCrZr]
    variable = Sc_S_trapped_CuCrZr
    type = NormalizationAux
    normal_factor = ${tungsten_atomic_density}
    source_variable = S_trapped_CuCrZr
  []
  [total_sites_CuCrZr]
    variable = S_total_CuCrZr
    type = ParsedAux
    expression = 'S_trapped_CuCrZr + S_empty_CuCrZr'
    coupled_variables = 'S_trapped_CuCrZr S_empty_CuCrZr'
  []
  [scaled_total_CuCrZr]
    variable = Sc_S_total_CuCrZr
    type = NormalizationAux
    normal_factor = ${tungsten_atomic_density}
    source_variable = S_total_CuCrZr
  []
  [flux_y_W]
    type = DiffusionFluxAux
    diffusivity = diffusivity_W
    variable = flux_y
    diffusion_variable = C_mobile_W
    component = y
    block = 4
  []
  [flux_y_Cu]
    type = DiffusionFluxAux
    diffusivity = diffusivity_Cu
    variable = flux_y
    diffusion_variable = C_mobile_Cu
    component = y
    block = 3
  []
  [flux_y_CuCrZr]
    type = DiffusionFluxAux
    diffusivity = diffusivity_CuCrZr
    variable = flux_y
    diffusion_variable = C_mobile_CuCrZr
    component = y
    block = 2
  []
[]

Boundary conditions and history

For the mass conservation equation, we use FunctionNeumannBC and DirichletBC to solve the 2 term of Eq. (3). FunctionNeumannBC is used to treat the time-dependent plasma exposure at the top (plasma-exposed) surface, and DirichletBC is used to set the BC of the solute T atom concentration to zero at the inner CuCrZr tube (at mm). For the energy conservation equation, we use FunctionNeumannBC and DirichletBC to solve the 2 term of Eq. (4). FunctionNeumannBC is used to treat the time-dependent heat flux at the top (plasma-exposed) surface, and FunctionDirichletBC is used to treat the temperature increase in the cooling tube. FunctionNeumannBC, FunctionDirichletBC, DirichletBC, and FunctionDirichletBC are MOOSE objects commonly used to represent the BCs of the variables to be solved.

We simulate a 20,000-second plasma discharge, with each 1,600-second cycle consisting of a 100-second plasma ramp-up, a 400-second steady-state plasma discharge, a 100-second plasma ramp-down, and a 1,000-second waiting phase. Up to 50 cycles are simulated to achieve the total discharge. Figure 2 shows the integrated (solute, total and trapped) tritium concentration profiles in the monoblock. It shows that implantation fluxes and temperatures vary linearly up to (from) their steady-state values from (up to) their initial values during ramp-up (ramp-down).

Figure 2: Temperature profiles (orange) and integrated tritium concentration profiles (blue) during two 1,600-second-cycle plasma discharges. This corresponds to Fig. 2 in Shimada et al. (2024).

During the steady-state plasma discharge, we set a heat flux of 10 MWm at the top of the 2D monoblock (at mm) and a cooling temperature of 552 K at the inner CuCrZr tube (at mm). We assume a 100% T plasma with a 5.0 10 ms plasma particle flux (which is half of the full 1.0 10 ms DT plasma particle flux), and only 0.1% of the incident plasma particle flux (5.0 10 ms) entered the first layer of mesh at the exposed surface ( mm) as in Shimada et al. (2024). The solute T atom concentration is set to zero at the inner CuCrZr tube (at mm).

We treated this plasma exposure by setting the flux BC of the solute T atom concentration at the exposed surface ( mm) as a simplification of the complex plasma implantation and recombination phenomena, which would require a very fine mesh and increase computational costs.

[BCs]
  [C_mob_W_top_flux]
    type = FunctionNeumannBC
    variable = C_mobile_W
    boundary = 'top'
    function = mobile_flux_bc_func
  []
  [mobile_tube]
    type = DirichletBC
    variable = C_mobile_CuCrZr
    value = 1.0e-18
    boundary = '2to1'
  []
  [temp_top]
    type = FunctionNeumannBC
    variable = temperature
    boundary = 'top'
    function = temp_flux_bc_func
  []
  [temp_tube]
    type = FunctionDirichletBC
    variable = temperature
    boundary = '2to1'
    function = temp_inner_func
  []
[]

Functions

In this example, Functions are used to define the time-dependent tritium and heat flux at the exposed surface, as well as the coolant temperature. Functions can also be spatially-dependent. The functions are then provided to BCs, as described above.

[Functions]
  ### Maximum mobile flux of 7.90e-13 at the top surface (1.0e-4 [m])
  ### 1.80e23/m^2-s = (5.0e23/m^2-s) *(1-0.999) = (7.90e-13)*(${tungsten_atomic_density})/(1.0e-4)  at steady state
  [mobile_flux_bc_func]
    type = ParsedFunction
    expression = 'if((t % 1600) < 100.0, 0.0      + 7.90e-13*(t % 1600)/100,
                        if((t % 1600) < 500.0, 7.90e-13,
                        if((t % 1600) < 600.0, 7.90e-13 - 7.90e-13*((t % 1600)-500)/100, 0.0)))'
  []
  ### Heat flux of 10MW/m^2 at steady state
  [temp_flux_bc_func]
    type = ParsedFunction
    expression = 'if((t % 1600) < 100.0, 0.0   + 1.0e7*(t % 1600)/100,
                        if((t % 1600) < 500.0, 1.0e7,
                        if((t % 1600) < 600.0, 1.0e7 - 1.0e7*((t % 1600)-500)/100, 300)))'
  []
  ### Maximum coolant temperature of 552K at steady state
  [temp_inner_func]
    type = ParsedFunction
    expression = 'if((t % 1600) < 100.0, 300.0 + (552-300)*(t % 1600)/100,
                        if((t % 1600) < 500.0, 552,
                        if((t % 1600) < 600.0, 552.0 - (552-300)*((t % 1600)-500)/100, 300)))'
  []
  [timestep_function]
    type = ParsedFunction
    expression = 'if((t % 1600) <   10.0,  20,
                      if((t % 1600) <   90.0,  40,
                      if((t % 1600) <  110.0,  20,
                      if((t % 1600) <  480.0,  40,
                      if((t % 1600) <  500.0,  20,
                      if((t % 1600) <  590.0,   4,
                      if((t % 1600) <  610.0,  20,
                      if((t % 1600) < 1500.0, 200,
                      if((t % 1600) < 1600.0,  40,  2)))))))))'
  []
[]

Material properties

We use the tritium mass transport properties listed in Table 2 to solve the mass conservation equation (Eq. (3)) for two variables: and (i.e., solute and trapped T atom concentrations) in three materials and the thermal properties (i.e., density, temperature-dependent specific heat, and thermal conductivity) listed in Table 3 to solve the energy conservation equation (Eq. (4)) for one variable: the temperature . The diffusivity is defined as and the solubility is defined as .

Table 2: Tritium mass transport and trapping properties used in the W, Cu, and CuCrZr layers. NOTE: Two-component solubility in W kept the maximum solubility ratio between W and Cu to 104 at low temperature. The references are provided in Shimada et al. (2024).

Material (m/s) (eV) (Pa) (eV)Detrapping energy: (eV)Trap density: (at.fr.)
W2.4100.391.87101.040.851.010
W3.14100.57
Cu6.6100.393.14100.570.505.010
CuCrZr3.9100.424.28100.390.835.010

Table 3: Thermal properties used in the W, Cu, and CuCrZr layers. The references are provided in Shimada et al. (2024).

MaterialDensity: (g m)Specific heat: (J kg K)Thermal conductivity: (W m K)
W19,3001.1610 +7.1110 T –6.5810 T +3.2410 T –5.4510 T (293 < T (K) < 2500)2.4110 –2.9010 T + 2.5410 T –1.0310 T +1.5210 T (293 < T (K) < 2500)
Cu8,9604.2110 –6.8510 T (293 < T (K) < 873)3.1610 +3.1810 T –3.4910 T +1.6610 T (293 < T (K) < 873)
CuCrZr8,9003903.8710 –1.2810 T (293 < T (K) < 927)
[Materials]
  ############################## Materials for W (block = 4)
  [diffusivity_W]
    type = ADParsedMaterial
    property_name = diffusivity_W
    coupled_variables = 'temperature'
    block = 4
    expression = '2.4e-7*exp(-4525.8/temperature)' # H diffusivity in W
    outputs = all
  []
  [solubility_W]
    type = ADParsedMaterial
    property_name = solubility_W
    coupled_variables = 'temperature'
    block = 4
    # expression = '2.95e-5 *exp(-12069.0/temperature)'              # H solubility in W = (1.87e24)/(${tungsten_atomic_density}) [#/m^3]
    expression = '2.95e-5 *exp(-12069.0/temperature) + 4.95e-8 * exp(-6614.6/temperature)' # H solubility in W = (1.87e24)/(${tungsten_atomic_density}) [#/m^3]
    outputs = all
  []
  [converter_to_regular_W]
    type = MaterialADConverter
    ad_props_in = 'diffusivity_W'
    reg_props_out = 'diffusivity_W_nonAD'
    block = 4
  []
  [heat_transfer_W]
    type = GenericConstantMaterial
    prop_names = 'density_W'
    prop_values = '19300' # [g/m^3]
    block = 4
  []
  [specific_heat_W]
    type = ParsedMaterial
    property_name = specific_heat_W
    coupled_variables = 'temperature'
    block = 4
    expression = '1.16e2 + 7.11e-2 * temperature - 6.58e-5 * temperature^2 + 3.24e-8 * temperature^3 -5.45e-12 * temperature^4' # ~ 132[J/kg-K]
    outputs = all
  []
  [thermal_conductivity_W]
    type = ParsedMaterial
    property_name = thermal_conductivity_W
    coupled_variables = 'temperature'
    block = 4
    # expression = '-7.8e-9 * temperature^3 + 5.0e-5 * temperature^2 - 1.1e-1 * temperature + 1.8e2'    # ~ 173.0 [ W/m-K]   from R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038,
    expression = '2.41e2 - 2.90e-1 * temperature + 2.54e-4 * temperature^2 - 1.03e-7 * temperature^3 + 1.52e-11 * temperature^4' # ~ 173.0 [ W/m-K]
    outputs = all
  []
  ############################## Materials for Cu (block = 3)
  [diffusivity_Cu]
    type = ADParsedMaterial
    property_name = diffusivity_Cu
    coupled_variables = 'temperature'
    block = 3
    expression = '6.60e-7*exp(-4525.8/temperature)' # H diffusivity in Cu
    outputs = all
  []
  [solubility_Cu]
    type = ADParsedMaterial
    property_name = solubility_Cu
    coupled_variables = 'temperature'
    block = 3
    expression = '4.95e-5*exp(-6614.6/temperature)' # H solubility in Cu = (3.14e24)/(${tungsten_atomic_density}) [#/m^3]
    outputs = all
  []
  [converter_to_regular_Cu]
    type = MaterialADConverter
    ad_props_in = 'diffusivity_Cu'
    reg_props_out = 'diffusivity_Cu_nonAD'
    block = 3
  []
  [heat_transfer_Cu]
    type = GenericConstantMaterial
    prop_names = 'density_Cu'
    prop_values = '8960.0' # [g/m^3]
    block = 3
  []
  [specific_heat_Cu]
    type = ParsedMaterial
    property_name = specific_heat_Cu
    coupled_variables = 'temperature'
    block = 3
    expression = '3.16e2 + 3.18e-1 * temperature - 3.49e-4 * temperature^2 + 1.66e-7 * temperature^3' # ~ 384 [J/kg-K]
    outputs = all
  []
  [thermal_conductivity_Cu]
    type = ParsedMaterial
    property_name = thermal_conductivity_Cu
    coupled_variables = 'temperature'
    block = 3
    # expression = '-3.9e-8 * temperature^3 + 3.8e-5 * temperature^2 - 7.9e-2 * temperature + 4.0e2'    # ~ 401.0  [ W/m-K] from R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038,
    expression = '4.21e2 - 6.85e-2 * temperature' # ~ 400.0 [ W/m-K]
    outputs = all
  []
  ############################## Materials for CuCrZr (block = 2)
  [diffusivity_CuCrZr]
    type = ADParsedMaterial
    property_name = diffusivity_CuCrZr
    coupled_variables = 'temperature'
    block = 2
    expression = '3.90e-7*exp(-4873.9/temperature)' # H diffusivity in CuCrZr
    outputs = all
  []
  [solubility_CuCrZr]
    type = ADParsedMaterial
    property_name = solubility_CuCrZr
    coupled_variables = 'temperature'
    block = 2
    expression = '6.75e-6*exp(-4525.8/temperature)' # H solubility in CuCrZr = (4.28e23)/(${tungsten_atomic_density}) [#/m^3]
    outputs = all
  []
  [converter_to_regular_CuCrZr]
    type = MaterialADConverter
    ad_props_in = 'diffusivity_CuCrZr'
    reg_props_out = 'diffusivity_CuCrZr_nonAD'
    block = 2
  []
  [heat_transfer_CuCrZr]
    type = GenericConstantMaterial
    prop_names = 'density_CuCrZr specific_heat_CuCrZr'
    prop_values = '8900.0 390.0' # [g/m^3], [ W/m-K], [J/kg-K]
    block = 2
  []
  [thermal_conductivity_CuCrZr]
    type = ParsedMaterial
    property_name = thermal_conductivity_CuCrZr
    coupled_variables = 'temperature'
    block = 2
    # expression = '5.3e-7 * temperature^3 - 6.5e-4 * temperature^2 + 2.6e-1 * temperature + 3.1e2'    # ~ 320.0  [ W/m-K] from R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038,
    expression = '3.87e2 - 1.28e-1 * temperature' # ~ 349 [ W/m-K]
    outputs = all
  []
  ############################## Materials for others
  [interface_jump_4to3]
    type = SolubilityRatioMaterial
    solubility_primary = solubility_W
    solubility_secondary = solubility_Cu
    boundary = '4to3'
    concentration_primary = C_mobile_W
    concentration_secondary = C_mobile_Cu
  []
  [interface_jump_3to2]
    type = SolubilityRatioMaterial
    solubility_primary = solubility_Cu
    solubility_secondary = solubility_CuCrZr
    boundary = '3to2'
    concentration_primary = C_mobile_Cu
    concentration_secondary = C_mobile_CuCrZr
  []
[]

Interface Kernels

TMAP8 assumes equilibrium between the chemical potentials of the diffusing species similar to how TMAP4 and TMAP7 treated the diffusing species across two different materials with different chemical potentials. SolubilityRatioMaterial` is used to treat solute concentration differences stemming from a difference in T solubilities across the interface. The solubility ratio jump is calculated via the following: (5)

ADPenaltyInterfaceDiffusion is used to conserve the particle flux at this interface between two different solubilities. The extremely low tritium solubility in W at low temperature leads to an extremely low solute concentration in W, creating a large solute concentration difference between W and Cu. Two-component solubility in W is used to keep the maximum solubility ratio between W and Cu to 104 at low temperature to avoid the convergence issue associated with calculating two significantly different solute concentration in W and Cu.

[InterfaceKernels]
  [tied_4to3]
    type = ADPenaltyInterfaceDiffusion
    variable = C_mobile_W
    neighbor_var = C_mobile_Cu
    penalty = 0.05 #  it will not converge with > 0.1, but it creates negative C_mobile _Cu with << 0.1
    # jump_prop_name = solubility_ratio_4to3
    jump_prop_name = solubility_ratio
    boundary = '4to3'
  []
  [tied_3to2]
    type = ADPenaltyInterfaceDiffusion
    variable = C_mobile_Cu
    neighbor_var = C_mobile_CuCrZr
    penalty = 0.05 #  it will not converge with > 0.1, but it creates negative C_mobile _Cu with << 0.1
    # jump_prop_name = solubility_ratio_3to2
    jump_prop_name = solubility_ratio
    boundary = '3to2'
  []
[]

Numerical method

We use a standard preconditioner: the “single matrix preconditioner.” The Newton method is used to model the transient tritium and thermal transport in a 2D monoblock. It is important to note that MOOSE is equipped with the built-in Message Passing Interface (MPI) protocol, as tritium and thermal transport analysis of fifty 1,600-second cycle plasma discharges in the 2D monoblock is performed in under 2 hours using a single device/computer (3.5 GHz Apple M2 Pro, 10-Core CPU/16-Core GPU) with this MPI feature.

[Executioner]
  type = Transient
  scheme = bdf2
  solve_type = NEWTON
  petsc_options_iname = '-pc_type'
  petsc_options_value = 'lu'
  nl_rel_tol = 1e-6 # 1e-8 works for 1 cycle
  nl_abs_tol = 1e-7 # 1e-11 works for 1 cycle
  end_time = 8.0e4 # 50 ITER shots (3.0e4 s plasma, 2.0e4 SSP)
  automatic_scaling = true
  line_search = 'none'
  dtmin = 1e-4
  nl_max_its = 18
  [TimeStepper]
    type = IterationAdaptiveDT
    dt = 20
    optimal_iterations = 15
    iteration_window = 1
    growth_factor = 1.2
    cutback_factor = 0.8
    timestep_limiting_postprocessor = timestep_max_pp
  []
[]

Results

The simulation results from this example are shown in Figure 3 and Figure 4. For more results, information, and discussion about the results for this example case and their significance, the reader is referred to Shimada et al. (2024).

Figure 3: Tritium concentration profile in W (left), Cu (center), and CuCrZr (right) after ten 1,600-second cycles ( s). This corresponds to Fig. 4A in Shimada et al. (2024).

Figure 4: Tritium concentration profile in W (left), Cu (center), and CuCrZr (right) after fifty 1,600-second cycles ( s). This corresponds to Fig. 4B in Shimada et al. (2024).

Complete input file

Below is the complete input file, which can be run reliably with approximately 4 processor cores. Note that this input file has not been optimized for computational costs.

## Tokamak divertor monoblock
## Application: TMAP8
## POC: Masashi Shimada (masashi.shimada at inl.gov)
## If using or referring to this model, please cite as explained in
## https://mooseframework.inl.gov/virtual_test_bed/citing.html

### Nomenclatures
### C_mobile_j      mobile H concentration in "j" material, where j = CuCrZr, Cu, W
### C_trapped_j     trapped H concentration in "j" material, where j = CuCrZr, Cu, W
### C_total_j       total H concentration in "j" material, where j = CuCrZr, Cu, W
###
### S_empty_j       empty site concentration in "j" material, where j = CuCrZr, Cu, W
### S_trapped_j     trapped site concentration in "j" material, where j = CuCrZr, Cu, W
### S_total_j       total site H concentration in "j" material, where j = CuCrZr, Cu, W
###
### F_permeation    permeation flux
### F_recombination recombination flux
###
### Sc_             Scaled
### Int_            Integrated
### ScInt_          Scaled and integrated

tungsten_atomic_density = ${units 6.338e28 m^-3}

## Mesh generated by ConcentricCircleMeshGenerator and saved as "2DMonoblock.e"
[Mesh]
    [ccmg]
        type = ConcentricCircleMeshGenerator
        num_sectors = 36
        rings = '1 30 20 110'
        radii = '${units 6 mm -> m} ${units 7.5 mm -> m} ${units 8.5 mm -> m}'
        has_outer_square = on
        pitch = ${units 28 mm -> m}
        portion = left_half
        preserve_volumes = false
        smoothing_max_it = 3
    []
    [ssbsg1]
        type = SideSetsBetweenSubdomainsGenerator
        input = ccmg
        primary_block = '4'     # W
        paired_block = '3'      # Cu
        new_boundary = '4to3'
    []
    [ssbsg2]
        type = SideSetsBetweenSubdomainsGenerator
        input = ssbsg1
        primary_block = '3'     # Cu
        paired_block = '4'      # W
        new_boundary = '3to4'
    []
    [ssbsg3]
        type = SideSetsBetweenSubdomainsGenerator
        input = ssbsg2
        primary_block = '3'     # Cu
        paired_block = '2'      # CuCrZr
        new_boundary = '3to2'
    []
    [ssbsg4]
        type = SideSetsBetweenSubdomainsGenerator
        input = ssbsg3
        primary_block = '2'     # CuCrZr
        paired_block = '3'      # Cu
        new_boundary = '2to3'
    []
    [ssbsg5]
        type = SideSetsBetweenSubdomainsGenerator
        input = ssbsg4
        primary_block = '2'     # CuCrZr
        paired_block = '1'      # H2O
        new_boundary = '2to1'
    []
    [bdg]
        type = BlockDeletionGenerator
        input = ssbsg5
        block = '1'             # H2O
    []
[]

[Problem]
    type = ReferenceResidualProblem
    extra_tag_vectors = 'ref'
    reference_vector = 'ref'
[]

[Variables]
    [temperature]
        order = FIRST
        family = LAGRANGE
        initial_condition = ${units 300 K}
    []
    ######################### Variables for W (block = 4)
    [C_mobile_W]
        order = FIRST
        family = LAGRANGE
        initial_condition = ${units 1.0e-20 m^-3}
        block = 4
    []
    [C_trapped_W]
        order = FIRST
        family = LAGRANGE
        initial_condition = ${units 1.0e-15 m^-3}
        block = 4
    []
    ######################### Variables for Cu (block = 3)
    [C_mobile_Cu]
        order = FIRST
        family = LAGRANGE
        initial_condition = ${units 5.0e-17 m^-3}
        block = 3
    []
    [C_trapped_Cu]
        order = FIRST
        family = LAGRANGE
        initial_condition = ${units 1.0e-15 m^-3}
        block = 3
    []
    ######################### Variables for CuCrZr (block = 2)
    [C_mobile_CuCrZr]
        order = FIRST
        family = LAGRANGE
        initial_condition = ${units 1.0e-15 m^-3}
        block = 2
    []
    [C_trapped_CuCrZr]
        order = FIRST
        family = LAGRANGE
        initial_condition = ${units 1.0e-15 m^-3}
        block = 2
    []
[]

[AuxVariables]
    [flux_y]
        order = FIRST
        family = MONOMIAL
    []
    ############################## AuxVariables for W (block = 4)
    [Sc_C_mobile_W]
        block = 4
    []
    [Sc_C_trapped_W]
        block = 4
    []
    [C_total_W]
        block = 4
    []
    [Sc_C_total_W]
        block = 4
    []
    [S_empty_W]
        block = 4
    []
    [Sc_S_empty_W]
        block = 4
    []
    [S_trapped_W]
        block = 4
    []
    [Sc_S_trapped_W]
        block = 4
    []
    [S_total_W]
        block = 4
    []
    [Sc_S_total_W]
        block = 4
    []
    ############################## AuxVariables for Cu (block = 3)
    [Sc_C_mobile_Cu]
        block = 3
    []
    [Sc_C_trapped_Cu]
        block = 3
    []
    [C_total_Cu]
        block = 3
    []
    [Sc_C_total_Cu]
        block = 3
    []
    [S_empty_Cu]
        block = 3
    []
    [Sc_S_empty_Cu]
        block = 3
    []
    [S_trapped_Cu]
        block = 3
    []
    [Sc_S_trapped_Cu]
        block = 3
    []
    [S_total_Cu]
        block = 3
    []
    [Sc_S_total_Cu]
        block = 3
    []
    ############################## AuxVariables for CuCrZr (block = 2)
    [Sc_C_mobile_CuCrZr]
        block = 2
    []
    [Sc_C_trapped_CuCrZr]
        block = 2
    []
    [C_total_CuCrZr]
        block = 2
    []
    [Sc_C_total_CuCrZr]
        block = 2
    []
    [S_empty_CuCrZr]
        block = 2
    []
    [Sc_S_empty_CuCrZr]
        block = 2
    []
    [S_trapped_CuCrZr]
        block = 2
    []
    [Sc_S_trapped_CuCrZr]
        block = 2
    []
    [S_total_CuCrZr]
        block = 2
    []
    [Sc_S_total_CuCrZr]
        block = 2
    []
[]

[Kernels]
    ############################## Kernels for W (block = 4)
    [diff_W]
        type = ADMatDiffusion
        variable = C_mobile_W
        diffusivity = diffusivity_W
        block = 4
        extra_vector_tags = ref
    []
    [time_diff_W]
        type = ADTimeDerivative
        variable = C_mobile_W
        block = 4
        extra_vector_tags = ref
    []
    [coupled_time_W]
        type = ScaledCoupledTimeDerivative
        variable = C_mobile_W
        v = C_trapped_W
        factor = 1e0
        block = 4
        extra_vector_tags = ref
    []
    [heat_conduction_W]
        type = HeatConduction
        variable = temperature
        diffusion_coefficient = thermal_conductivity_W
        block = 4
        extra_vector_tags = ref
    []
    [time_heat_conduction_W]
        type = SpecificHeatConductionTimeDerivative
        variable = temperature
        specific_heat = specific_heat_W
        density = density_W
        block = 4
        extra_vector_tags = ref
    []
    ############################## Kernels for Cu (block = 3)
    [diff_Cu]
        type = ADMatDiffusion
        variable = C_mobile_Cu
        diffusivity = diffusivity_Cu
        block = 3
        extra_vector_tags = ref
    []
    [time_diff_Cu]
        type = ADTimeDerivative
        variable = C_mobile_Cu
        block = 3
        extra_vector_tags = ref
    []
    [coupled_time_Cu]
        type = ScaledCoupledTimeDerivative
        variable = C_mobile_Cu
        v = C_trapped_Cu
        factor = 1e0
        block = 3
        extra_vector_tags = ref
    []
    [heat_conduction_Cu]
        type = HeatConduction
        variable = temperature
        diffusion_coefficient = thermal_conductivity_Cu
        block = 3
        extra_vector_tags = ref
    []
    [time_heat_conduction_Cu]
        type = SpecificHeatConductionTimeDerivative
        variable = temperature
        specific_heat = specific_heat_Cu
        density = density_Cu
        block = 3
        extra_vector_tags = ref
    []
    ############################## Kernels for CuCrZr (block = 2)
    [diff_CuCrZr]
        type = ADMatDiffusion
        variable = C_mobile_CuCrZr
        diffusivity = diffusivity_CuCrZr
        block = 2
        extra_vector_tags = ref
    []
    [time_diff_CuCrZr]
        type = ADTimeDerivative
        variable = C_mobile_CuCrZr
        block = 2
        extra_vector_tags = ref
    []
    [coupled_time_CuCrZr]
        type = ScaledCoupledTimeDerivative
        variable = C_mobile_CuCrZr
        v = C_trapped_CuCrZr
        factor = 1e0
        block = 2
        extra_vector_tags = ref
    []
    [heat_conduction_CuCrZr]
        type = HeatConduction
        variable = temperature
        diffusion_coefficient = thermal_conductivity_CuCrZr
        block = 2
        extra_vector_tags = ref
    []
    [time_heat_conduction_CuCrZr]
        type = SpecificHeatConductionTimeDerivative
        variable = temperature
        specific_heat = specific_heat_CuCrZr
        density = density_CuCrZr
        block = 2
        extra_vector_tags = ref
    []
[]

[AuxKernels]
    ############################## AuxKernels for W (block = 4)
    [Scaled_mobile_W]
        variable = Sc_C_mobile_W
        type = NormalizationAux
        normal_factor = ${tungsten_atomic_density}
        source_variable = C_mobile_W
    []
    [Scaled_trapped_W]
        variable = Sc_C_trapped_W
        type = NormalizationAux
        normal_factor = ${tungsten_atomic_density}
        source_variable = C_trapped_W
    []
    [total_W]
        variable = C_total_W
        type = ParsedAux
        expression = 'C_mobile_W + C_trapped_W'
        coupled_variables = 'C_mobile_W C_trapped_W'
    []
    [Scaled_total_W]
        variable = Sc_C_total_W
        type = NormalizationAux
        normal_factor = ${tungsten_atomic_density}
        source_variable = C_total_W
    []
    [empty_sites_W]
        variable = S_empty_W
        type = EmptySitesAux
        N = ${units 1.0e0 m^-3}       # = ${tungsten_atomic_density} #/m^3 (W lattice density)
        # Ct0 = ${units 1.0e-4 m^-3}   # E.A. Hodille et al 2021 Nucl. Fusion 61 126003, trap 1
        Ct0 = ${units 1.0e-4 m^-3}    # E.A. Hodille et al 2021 Nucl. Fusion 61 1260033, trap 2
        trap_per_free = 1.0e0         # 1.0e1
        trapped_concentration_variables = C_trapped_W
    []
    [scaled_empty_W]
        variable = Sc_S_empty_W
        type = NormalizationAux
        normal_factor = ${tungsten_atomic_density}
        source_variable = S_empty_W
    []
    [trapped_sites_W]
        variable = S_trapped_W
        type = NormalizationAux
        normal_factor = 1e0
        source_variable = C_trapped_W
    []
    [scaled_trapped_W]
        variable = Sc_S_trapped_W
        type = NormalizationAux
        normal_factor = ${tungsten_atomic_density}
        source_variable = S_trapped_W
    []
    [total_sites_W]
        variable = S_total_W
        type = ParsedAux
        expression = 'S_trapped_W + S_empty_W'
        coupled_variables = 'S_trapped_W S_empty_W'
    []
    [scaled_total_W]
        variable = Sc_S_total_W
        type = NormalizationAux
        normal_factor = ${tungsten_atomic_density}
        source_variable = S_total_W
    []
    ############################## AuxKernels for Cu (block = 3)
    [Scaled_mobile_Cu]
        variable = Sc_C_mobile_Cu
        type = NormalizationAux
        normal_factor = ${tungsten_atomic_density}
        source_variable = C_mobile_Cu
    []
    [Scaled_trapped_Cu]
        variable = Sc_C_trapped_Cu
        type = NormalizationAux
        normal_factor = ${tungsten_atomic_density}
        source_variable = C_trapped_Cu
    []
    [total_Cu]
        variable = C_total_Cu
        type = ParsedAux
        expression = 'C_mobile_Cu + C_trapped_Cu'
        coupled_variables = 'C_mobile_Cu C_trapped_Cu'
    []
    [Scaled_total_Cu]
        variable = Sc_C_total_Cu
        type = NormalizationAux
        normal_factor = ${tungsten_atomic_density}
        source_variable = C_total_Cu
    []
    [empty_sites_Cu]
        variable = S_empty_Cu
        type = EmptySitesAux
        N = ${units 1.0e0 m^-3}     # = ${tungsten_atomic_density} #/m^3 (W lattice density)
        Ct0 = ${units 5.0e-5 m^-3}  # R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038, trap 3
        trap_per_free = 1.0e0       # 1.0e1
        trapped_concentration_variables = C_trapped_Cu
    []
    [scaled_empty_Cu]
        variable = Sc_S_empty_Cu
        type = NormalizationAux
        normal_factor = ${tungsten_atomic_density}
        source_variable = S_empty_Cu
    []
    [trapped_sites_Cu]
        variable = S_trapped_Cu
        type = NormalizationAux
        normal_factor = 1e0
        source_variable = C_trapped_Cu
    []
    [scaled_trapped_Cu]
        variable = Sc_S_trapped_Cu
        type = NormalizationAux
        normal_factor = ${tungsten_atomic_density}
        source_variable = S_trapped_Cu
    []
    [total_sites_Cu]
        variable = S_total_Cu
        type = ParsedAux
        expression = 'S_trapped_Cu + S_empty_Cu'
        coupled_variables = 'S_trapped_Cu S_empty_Cu'
    []
    [scaled_total_Cu]
        variable = Sc_S_total_Cu
        type = NormalizationAux
        normal_factor = ${tungsten_atomic_density}
        source_variable = S_total_Cu
    []
    ############################## AuxKernels for CuCrZr (block = 2)
    [Scaled_mobile_CuCrZr]
        variable = Sc_C_mobile_CuCrZr
        type = NormalizationAux
        normal_factor = ${tungsten_atomic_density}
        source_variable = C_mobile_CuCrZr
    []
    [Scaled_trapped_CuCrZr]
        variable = Sc_C_trapped_CuCrZr
        type = NormalizationAux
        normal_factor = ${tungsten_atomic_density}
        source_variable = C_trapped_CuCrZr
    []
    [total_CuCrZr]
        variable = C_total_CuCrZr
        type = ParsedAux
        expression = 'C_mobile_CuCrZr + C_trapped_CuCrZr'
        coupled_variables = 'C_mobile_CuCrZr C_trapped_CuCrZr'
    []
    [Scaled_total_CuCrZr]
        variable = Sc_C_total_CuCrZr
        type = NormalizationAux
        normal_factor = ${tungsten_atomic_density}
        source_variable = C_total_CuCrZr
    []
    [empty_sites_CuCrZr]
        variable = S_empty_CuCrZr
        type = EmptySitesAux
        N = ${units 1.0e0 m^-3}     # = ${tungsten_atomic_density} #/m^3 (W lattice density)
        Ct0 = ${units 5.0e-5 m^-3}  # R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038, trap 4
        # Ct0 = ${units 4.0e-2 m^-3} # R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038, trap 5
        trap_per_free = 1.0e0       # 1.0e1
        trapped_concentration_variables = C_trapped_CuCrZr
    []
    [scaled_empty_CuCrZr]
        variable = Sc_S_empty_CuCrZr
        type = NormalizationAux
        normal_factor = ${tungsten_atomic_density}
        source_variable = S_empty_CuCrZr
    []
    [trapped_sites_CuCrZr]
        variable = S_trapped_CuCrZr
        type = NormalizationAux
        normal_factor = 1e0
        source_variable = C_trapped_CuCrZr
    []
    [scaled_trapped_CuCrZr]
        variable = Sc_S_trapped_CuCrZr
        type = NormalizationAux
        normal_factor = ${tungsten_atomic_density}
        source_variable = S_trapped_CuCrZr
    []
    [total_sites_CuCrZr]
        variable = S_total_CuCrZr
        type = ParsedAux
        expression = 'S_trapped_CuCrZr + S_empty_CuCrZr'
        coupled_variables = 'S_trapped_CuCrZr S_empty_CuCrZr'
    []
    [scaled_total_CuCrZr]
        variable = Sc_S_total_CuCrZr
        type = NormalizationAux
        normal_factor = ${tungsten_atomic_density}
        source_variable = S_total_CuCrZr
    []
    [flux_y_W]
        type = DiffusionFluxAux
        diffusivity = diffusivity_W
        variable = flux_y
        diffusion_variable = C_mobile_W
        component = y
        block = 4
    []
    [flux_y_Cu]
        type = DiffusionFluxAux
        diffusivity = diffusivity_Cu
        variable = flux_y
        diffusion_variable = C_mobile_Cu
        component = y
        block = 3
    []
    [flux_y_CuCrZr]
        type = DiffusionFluxAux
        diffusivity = diffusivity_CuCrZr
        variable = flux_y
        diffusion_variable = C_mobile_CuCrZr
        component = y
        block = 2
    []
[]

[InterfaceKernels]
    [tied_4to3]
        type = ADPenaltyInterfaceDiffusion
        variable = C_mobile_W
        neighbor_var = C_mobile_Cu
        penalty = 0.05            #  it will not converge with > 0.1, but it creates negative C_mobile _Cu with << 0.1
        # jump_prop_name = solubility_ratio_4to3
        jump_prop_name = solubility_ratio
        boundary = '4to3'
    []
    [tied_3to2]
        type = ADPenaltyInterfaceDiffusion
        variable = C_mobile_Cu
        neighbor_var = C_mobile_CuCrZr
        penalty = 0.05            #  it will not converge with > 0.1, but it creates negative C_mobile _Cu with << 0.1
        # jump_prop_name = solubility_ratio_3to2
        jump_prop_name = solubility_ratio
        boundary = '3to2'
    []
[]

[NodalKernels]
    ############################## NodalKernels for W (block = 4)
    [time_W]
        type = TimeDerivativeNodalKernel
        variable = C_trapped_W
    []
    [trapping_W]
        type = TrappingNodalKernel
        variable = C_trapped_W
        temperature = temperature
        alpha_t = 2.75e11      # 1e15
        N = 1.0e0  # = (1e0) x (${tungsten_atomic_density} #/m^3)
        # Ct0 = 1.0e-4                # E.A. Hodille et al 2021 Nucl. Fusion 61 126003, trap 1
        Ct0 = 1.0e-4                # E.A. Hodille et al 2021 Nucl. Fusion 61 1260033, trap 2
        trap_per_free = 1.0e0       # 1.0e1
        mobile_concentration = 'C_mobile_W'
        extra_vector_tags = ref
    []
    [release_W]
        type = ReleasingNodalKernel
        alpha_r = 8.4e12    # 1.0e13
        temperature = temperature
        # detrapping_energy = 9863.9    # = 0.85 eV    E.A. Hodille et al 2021 Nucl. Fusion 61 126003, trap 1
        detrapping_energy = 11604.6   # = 1.00 eV    E.A. Hodille et al 2021 Nucl. Fusion 61 126003, trap 2
        variable = C_trapped_W
    []
    ############################## NodalKernels for Cu (block = 3)
    [time_Cu]
        type = TimeDerivativeNodalKernel
        variable = C_trapped_Cu
    []
    [trapping_Cu]
        type = TrappingNodalKernel
        variable = C_trapped_Cu
        temperature = temperature
        alpha_t = 2.75e11      # 1e15
        N = 1.0e0  # = ${tungsten_atomic_density} #/m^3 (W lattice density)
        Ct0 = 5.0e-5                # R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038, trap 3
        trap_per_free = 1.0e0       # 1.0e1
        mobile_concentration = 'C_mobile_Cu'
        extra_vector_tags = ref
    []
    [release_Cu]
        type = ReleasingNodalKernel
        alpha_r = 8.4e12    # 1.0e13
        temperature = temperature
        detrapping_energy = 5802.3    # = 0.50eV  R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038, trap 3
        variable = C_trapped_Cu
    []
    ############################## NodalKernels for CuCrZr (block = 2)
    [time_CuCrZr]
        type = TimeDerivativeNodalKernel
        variable = C_trapped_CuCrZr
    []
    [trapping_CuCrZr]
        type = TrappingNodalKernel
        variable = C_trapped_CuCrZr
        temperature = temperature
        alpha_t = 2.75e11      # 1e15
        N = 1.0e0  # = ${tungsten_atomic_density} #/m^3 (W lattice density)
        Ct0 = 5.0e-5                # R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038, trap 4
        # Ct0 = 4.0e-2                # R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038, trap 5
        trap_per_free = 1.0e0       # 1.0e1
        mobile_concentration = 'C_mobile_CuCrZr'
        extra_vector_tags = ref
    []
    [release_CuCrZr]
        type = ReleasingNodalKernel
        alpha_r = 8.4e12    # 1.0e13
        temperature = temperature
        detrapping_energy = 5802.3    # = 0.50eV  R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038, trap 4
        # detrapping_energy = 9631.8   # = 0.83 eV  R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038, trap 5
        variable = C_trapped_CuCrZr
    []
[]

[BCs]
    [C_mob_W_top_flux]
        type = FunctionNeumannBC
        variable = C_mobile_W
        boundary = 'top'
        function = mobile_flux_bc_func
    []
    [mobile_tube]
        type = DirichletBC
        variable = C_mobile_CuCrZr
        value = 1.0e-18
        boundary = '2to1'
    []
    [temp_top]
        type = FunctionNeumannBC
        variable = temperature
        boundary = 'top'
        function = temp_flux_bc_func
    []
    [temp_tube]
        type = FunctionDirichletBC
        variable = temperature
        boundary = '2to1'
        function = temp_inner_func
    []
[]

[Functions]
    ### Maximum mobile flux of 7.90e-13 at the top surface (1.0e-4 [m])
    ### 1.80e23/m^2-s = (5.0e23/m^2-s) *(1-0.999) = (7.90e-13)*(${tungsten_atomic_density})/(1.0e-4)  at steady state
    [mobile_flux_bc_func]
        type = ParsedFunction
        expression =   'if((t % 1600) < 100.0, 0.0      + 7.90e-13*(t % 1600)/100,
                        if((t % 1600) < 500.0, 7.90e-13,
                        if((t % 1600) < 600.0, 7.90e-13 - 7.90e-13*((t % 1600)-500)/100, 0.0)))'
    []
    ### Heat flux of 10MW/m^2 at steady state
    [temp_flux_bc_func]
        type = ParsedFunction
        expression =   'if((t % 1600) < 100.0, 0.0   + 1.0e7*(t % 1600)/100,
                        if((t % 1600) < 500.0, 1.0e7,
                        if((t % 1600) < 600.0, 1.0e7 - 1.0e7*((t % 1600)-500)/100, 300)))'
    []
    ### Maximum coolant temperature of 552K at steady state
    [temp_inner_func]
        type = ParsedFunction
        expression =   'if((t % 1600) < 100.0, 300.0 + (552-300)*(t % 1600)/100,
                        if((t % 1600) < 500.0, 552,
                        if((t % 1600) < 600.0, 552.0 - (552-300)*((t % 1600)-500)/100, 300)))'
    []
    [timestep_function]
        type = ParsedFunction
        expression = 'if((t % 1600) <   10.0,  20,
                      if((t % 1600) <   90.0,  40,
                      if((t % 1600) <  110.0,  20,
                      if((t % 1600) <  480.0,  40,
                      if((t % 1600) <  500.0,  20,
                      if((t % 1600) <  590.0,   4,
                      if((t % 1600) <  610.0,  20,
                      if((t % 1600) < 1500.0, 200,
                      if((t % 1600) < 1600.0,  40,  2)))))))))'
    []
[]

[Materials]
    ############################## Materials for W (block = 4)
    [diffusivity_W]
        type = ADParsedMaterial
        property_name = diffusivity_W
        coupled_variables = 'temperature'
        block = 4
        expression = '2.4e-7*exp(-4525.8/temperature)'    # H diffusivity in W
        outputs = all
    []
    [solubility_W]
        type = ADParsedMaterial
        property_name = solubility_W
        coupled_variables = 'temperature'
        block = 4
        # expression = '2.95e-5 *exp(-12069.0/temperature)'              # H solubility in W = (1.87e24)/(${tungsten_atomic_density}) [#/m^3]
        expression = '2.95e-5 *exp(-12069.0/temperature) + 4.95e-8 * exp(-6614.6/temperature)'    # H solubility in W = (1.87e24)/(${tungsten_atomic_density}) [#/m^3]
        outputs = all
    []
    [converter_to_regular_W]
        type = MaterialADConverter
        ad_props_in = 'diffusivity_W'
        reg_props_out = 'diffusivity_W_nonAD'
        block = 4
    []
    [heat_transfer_W]
        type = GenericConstantMaterial
        prop_names = 'density_W'
        prop_values = '19300'                # [g/m^3]
        block = 4
    []
    [specific_heat_W]
        type = ParsedMaterial
        property_name = specific_heat_W
        coupled_variables = 'temperature'
        block = 4
        expression = '1.16e2 + 7.11e-2 * temperature - 6.58e-5 * temperature^2 + 3.24e-8 * temperature^3 -5.45e-12 * temperature^4'    # ~ 132[J/kg-K]
        outputs = all
    []
    [thermal_conductivity_W]
        type = ParsedMaterial
        property_name = thermal_conductivity_W
        coupled_variables = 'temperature'
        block = 4
        # expression = '-7.8e-9 * temperature^3 + 5.0e-5 * temperature^2 - 1.1e-1 * temperature + 1.8e2'    # ~ 173.0 [ W/m-K]   from R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038,
        expression = '2.41e2 - 2.90e-1 * temperature + 2.54e-4 * temperature^2 - 1.03e-7 * temperature^3 + 1.52e-11 * temperature^4'    # ~ 173.0 [ W/m-K]
        outputs = all
    []
    ############################## Materials for Cu (block = 3)
    [diffusivity_Cu]
        type = ADParsedMaterial
        property_name = diffusivity_Cu
        coupled_variables = 'temperature'
        block = 3
        expression = '6.60e-7*exp(-4525.8/temperature)'    # H diffusivity in Cu
        outputs = all
    []
    [solubility_Cu]
        type = ADParsedMaterial
        property_name = solubility_Cu
        coupled_variables = 'temperature'
        block = 3
        expression = '4.95e-5*exp(-6614.6/temperature)'    # H solubility in Cu = (3.14e24)/(${tungsten_atomic_density}) [#/m^3]
        outputs = all
    []
    [converter_to_regular_Cu]
        type = MaterialADConverter
        ad_props_in = 'diffusivity_Cu'
        reg_props_out = 'diffusivity_Cu_nonAD'
        block = 3
    []
    [heat_transfer_Cu]
        type = GenericConstantMaterial
        prop_names = 'density_Cu'
        prop_values = '8960.0'                # [g/m^3]
        block = 3
    []
    [specific_heat_Cu]
        type = ParsedMaterial
        property_name = specific_heat_Cu
        coupled_variables = 'temperature'
        block = 3
        expression = '3.16e2 + 3.18e-1 * temperature - 3.49e-4 * temperature^2 + 1.66e-7 * temperature^3'    # ~ 384 [J/kg-K]
        outputs = all
    []
    [thermal_conductivity_Cu]
        type = ParsedMaterial
        property_name = thermal_conductivity_Cu
        coupled_variables = 'temperature'
        block = 3
        # expression = '-3.9e-8 * temperature^3 + 3.8e-5 * temperature^2 - 7.9e-2 * temperature + 4.0e2'    # ~ 401.0  [ W/m-K] from R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038,
        expression = '4.21e2 - 6.85e-2 * temperature'    # ~ 400.0 [ W/m-K]
        outputs = all
    []
    ############################## Materials for CuCrZr (block = 2)
    [diffusivity_CuCrZr]
        type = ADParsedMaterial
        property_name = diffusivity_CuCrZr
        coupled_variables = 'temperature'
        block = 2
        expression = '3.90e-7*exp(-4873.9/temperature)'    # H diffusivity in CuCrZr
        outputs = all
    []
    [solubility_CuCrZr]
        type = ADParsedMaterial
        property_name = solubility_CuCrZr
        coupled_variables = 'temperature'
        block = 2
        expression = '6.75e-6*exp(-4525.8/temperature)'    # H solubility in CuCrZr = (4.28e23)/(${tungsten_atomic_density}) [#/m^3]
        outputs = all
    []
    [converter_to_regular_CuCrZr]
        type = MaterialADConverter
        ad_props_in = 'diffusivity_CuCrZr'
        reg_props_out = 'diffusivity_CuCrZr_nonAD'
        block = 2
    []
    [heat_transfer_CuCrZr]
        type = GenericConstantMaterial
        prop_names = 'density_CuCrZr specific_heat_CuCrZr'
        prop_values = '8900.0 390.0'            # [g/m^3], [ W/m-K], [J/kg-K]
        block = 2
    []
    [thermal_conductivity_CuCrZr]
        type = ParsedMaterial
        property_name = thermal_conductivity_CuCrZr
        coupled_variables = 'temperature'
        block = 2
        # expression = '5.3e-7 * temperature^3 - 6.5e-4 * temperature^2 + 2.6e-1 * temperature + 3.1e2'    # ~ 320.0  [ W/m-K] from R. Delaporte-Mathurin et al 2021 Nucl. Fusion 61 036038,
        expression = '3.87e2 - 1.28e-1 * temperature'    # ~ 349 [ W/m-K]
        outputs = all
    []
    ############################## Materials for others
    [interface_jump_4to3]
        type = SolubilityRatioMaterial
        solubility_primary = solubility_W
        solubility_secondary = solubility_Cu
        boundary = '4to3'
        concentration_primary = C_mobile_W
        concentration_secondary = C_mobile_Cu
    []
    [interface_jump_3to2]
        type = SolubilityRatioMaterial
        solubility_primary = solubility_Cu
        solubility_secondary = solubility_CuCrZr
        boundary = '3to2'
        concentration_primary = C_mobile_Cu
        concentration_secondary = C_mobile_CuCrZr
    []
[]

[Postprocessors]
    ############################################################ Postprocessors for W (block = 4)
    [F_recombination]
        type = SideDiffusiveFluxAverage
        boundary = 'top'
        diffusivity = 5.01e-24   # (3.01604928)/(6.02e23)/[gram(T)/m^2]
        # diffusivity = 5.508e-19   # (1.0e3)*(1.0e3)/(6.02e23)/(3.01604928) [gram(T)/m^2]
        variable = Sc_C_total_W
    []
    [F_permeation]
        type = SideDiffusiveFluxAverage
        boundary = '2to1'
        diffusivity = 5.01e-24   # (3.01604928)/(6.02e23)/[gram(T)/m^2]
        # diffusivity = 5.508e-19   # (1.0e3)*(1.0e3)/(6.02e23)/(3.01604928) [gram(T)/m^2]
        variable = Sc_C_total_CuCrZr
    []

    [Int_C_mobile_W]
        type = ElementIntegralVariablePostprocessor
        variable = C_mobile_W
        block = 4
    []
    [ScInt_C_mobile_W]
        type = ScalePostprocessor
        value =  Int_C_mobile_W
        scaling_factor = 3.491e10   # (1.0e3)*(1.0e3)*(${tungsten_atomic_density})/(6.02e23)/(3.01604928) [gram(T)/m^2]
    []
    [Int_C_trapped_W]
        type = ElementIntegralVariablePostprocessor
        variable = C_trapped_W
        block = 4
    []
    [ScInt_C_trapped_W]
        type = ScalePostprocessor
        value = Int_C_trapped_W
        scaling_factor = 3.491e10   # (1.0e3)*(1.0e3)*(${tungsten_atomic_density})/(6.02e23)/(3.01604928) [gram(T)/m^2]
    []
    [Int_C_total_W]
        type = ElementIntegralVariablePostprocessor
        variable = C_total_W
        block = 4
    []
    [ScInt_C_total_W]
        type = ScalePostprocessor
        value = Int_C_total_W
        scaling_factor = 3.491e10   # (1.0e3)*(1.0e3)*(${tungsten_atomic_density})/(6.02e23)/(3.01604928) [gram(T)/m^2]
    []
    # ############################################################ Postprocessors for Cu (block = 3)
    [Int_C_mobile_Cu]
        type = ElementIntegralVariablePostprocessor
        variable = C_mobile_Cu
        block = 3
    []
    [ScInt_C_mobile_Cu]
        type = ScalePostprocessor
        value =  Int_C_mobile_Cu
        scaling_factor = 3.491e10   # (1.0e3)*(1.0e3)*(${tungsten_atomic_density})/(6.02e23)/(3.01604928) [gram(T)/m^2]
    []
    [Int_C_trapped_Cu]
        type = ElementIntegralVariablePostprocessor
        variable = C_trapped_Cu
        block = 3
    []
    [ScInt_C_trapped_Cu]
        type = ScalePostprocessor
        value = Int_C_trapped_Cu
        scaling_factor = 3.44e10   # (1.0e3)*(1.0e3)*(${tungsten_atomic_density})/(6.02e23)/(3.01604928) [gram(T)/m^2]
    []
    [Int_C_total_Cu]
        type = ElementIntegralVariablePostprocessor
        variable = C_total_Cu
        block = 3
    []
    [ScInt_C_total_Cu]
        type = ScalePostprocessor
        value = Int_C_total_Cu
        scaling_factor = 3.491e10   # (1.0e3)*(1.0e3)*(${tungsten_atomic_density})/(6.02e23)/(3.01604928) [gram(T)/m^2]
    []
    # ############################################################ Postprocessors for CuCrZr (block = 2)
    [Int_C_mobile_CuCrZr]
        type = ElementIntegralVariablePostprocessor
        variable = C_mobile_CuCrZr
        block = 2
    []
    [ScInt_C_mobile_CuCrZr]
        type = ScalePostprocessor
        value =  Int_C_mobile_CuCrZr
        scaling_factor = 3.491e10   # (1.0e3)*(1.0e3)*(${tungsten_atomic_density})/(6.02e23)/(3.01604928) [gram(T)/m^2]
    []
    [Int_C_trapped_CuCrZr]
        type = ElementIntegralVariablePostprocessor
        variable = C_trapped_CuCrZr
        block = 2
    []
    [ScInt_C_trapped_CuCrZr]
        type = ScalePostprocessor
        value = Int_C_trapped_CuCrZr
        scaling_factor = 3.44e10   # (1.0e3)*(1.0e3)*(${tungsten_atomic_density})/(6.02e23)/(3.01604928) [gram(T)/m^2]
    []
    [Int_C_total_CuCrZr]
        type = ElementIntegralVariablePostprocessor
        variable = C_total_CuCrZr
        block = 2
    []
    [ScInt_C_total_CuCrZr]
        type = ScalePostprocessor
        value = Int_C_total_CuCrZr
        scaling_factor = 3.491e10   # (1.0e3)*(1.0e3)*(${tungsten_atomic_density})/(6.02e23)/(3.01604928) [gram(T)/m^2]
    []
    ############################################################ Postprocessors for others
    [dt]
        type = TimestepSize
    []
    [temperature_top]
        type = PointValue
        variable = temperature
        point = '0 14.0e-3 0'
    []
    [temperature_tube]
        type = PointValue
        variable = temperature
        point = '0 6.0e-3 0'
    []
    # limit timestep
    [timestep_max_pp] # s
    type = FunctionValuePostprocessor
    function = timestep_function
  []
[]

[VectorPostprocessors]
    [line]
        type = LineValueSampler
        start_point = '0 14.0e-3 0'
        end_point = '0 6.0e-3 0'
        num_points = 100
        sort_by = 'y'
        variable = 'C_total_W C_total_Cu C_total_CuCrZr C_mobile_W C_mobile_Cu C_mobile_CuCrZr C_trapped_W C_trapped_Cu C_trapped_CuCrZr flux_y temperature'
        execute_on = timestep_end
    []
[]

[Preconditioning]
    [smp]
        type = SMP
        full = true
    []
[]

[Executioner]
    type = Transient
    scheme = bdf2
    solve_type = NEWTON
    petsc_options_iname = '-pc_type'
    petsc_options_value = 'lu'
    nl_rel_tol  = 1e-6 # 1e-8 works for 1 cycle
    nl_abs_tol  = 1e-7 # 1e-11 works for 1 cycle
    end_time = 8.0e4   # 50 ITER shots (3.0e4 s plasma, 2.0e4 SSP)
    automatic_scaling = true
    line_search = 'none'
    dtmin = 1e-4
    nl_max_its = 18
    [TimeStepper]
        type = IterationAdaptiveDT
        dt = 20
        optimal_iterations = 15
        iteration_window = 1
        growth_factor = 1.2
        cutback_factor = 0.8
        timestep_limiting_postprocessor = timestep_max_pp
    []
[]

[Outputs]
    [exodus]
        type = Exodus
        sync_only = false
        # output at key moment in the first two cycles, and then at the end of the simulation
        sync_times = '110.0 480.0 590.0 1600.0 1710.0 2080.0 2190.0 3400.0 8.0e4'
    []
    csv = true
    hide = 'dt
            Int_C_mobile_W Int_C_trapped_W Int_C_total_W
            Int_C_mobile_Cu Int_C_trapped_Cu Int_C_total_Cu
            Int_C_mobile_CuCrZr Int_C_trapped_CuCrZr Int_C_total_CuCrZr'
    perf_graph = true
[]
(fusion/mcf/divertor_monoblock/divertor_monoblock.i)

References

  1. E. A. Hodille, R. Delaporte-Mathurin, J. Denis, M. Pecovnik, E. Bernard, Y. Ferro, R. Sakamoto, Y. Charles, J. Mougenot, A. De Backer, C. S. Becquart, S. Markelj, and C. Grisolia. Modelling of hydrogen isotopes trapping, diffusion and permeation in divertor monoblocks under iter-like conditions. Nuclear Fusion, 61:126003, 10 2021. URL: https://iopscience.iop.org/article/10.1088/1741-4326/ac2abc, doi:10.1088/1741-4326/AC2ABC.[BibTeX]
  2. Masashi Shimada, Pierre-Clément A. Simon, Casey T. Icenhour, and Gyanender Singh. Toward a high-fidelity tritium transport modeling for retention and permeation experiments. Fusion Engineering and Design, 203:114438, 6 2024. URL: https://linkinghub.elsevier.com/retrieve/pii/S0920379624002916, doi:10.1016/J.FUSENGDES.2024.114438.[BibTeX]