diff --git a/doc/content/examples/divertor_monoblock/index.md b/doc/content/examples/divertor_monoblock/index.md index c1e87fb83..95c739e46 100644 --- a/doc/content/examples/divertor_monoblock/index.md +++ b/doc/content/examples/divertor_monoblock/index.md @@ -189,14 +189,19 @@ During the steady-state plasma discharge, we set a heat flux of 10 MW$\cdot$m$^{ and a cooling temperature of 552 K at the inner CuCrZr tube (at $r = 6.0$ mm). We assume a 100% T plasma with a 5.0 $\times$ 10$^{23}$ m$^{-2}$$\cdot$s$^{-1}$ plasma particle flux (which is half of the full 1.0 $\times$ 10$^{24}$ m$^{-2}$$\cdot$s$^{-1}$ DT plasma particle flux), -and only 0.1% of the incident plasma particle flux (5.0 $\times$ 10$^{20}$ m$^{-2}$$\cdot$s$^{-1}$) -entered the first layer of mesh at the exposed surface ($y = 14.0$ mm) as in [!cite](Shimada2024114438). +and only 0.1% of the incident plasma particle flux is treated as a retained tritium surface flux at +the exposed surface ($y = 14.0$ mm), corresponding to 5.0 $\times$ 10$^{20}$ m$^{-2}$$\cdot$s$^{-1}$. +For the normalized atomic-fraction variable used in the input file, this boundary condition is written as a +Neumann flux of 7.89 $\times$ 10$^{-9}$ m$\cdot$s$^{-1}$. The solute T atom concentration is set to zero at the inner CuCrZr tube (at $r = 6.0$ mm). We treated this plasma exposure by setting the flux BC of the solute T atom concentration at the exposed surface ($y = 14.0$ mm) as a simplification of the complex plasma implantation and recombination phenomena, -which would require a very fine mesh and increase computational costs. +which would otherwise require a more detailed near-surface implantation model and increase computational costs. + +!alert warning title=Updated tritium retained surface flux value from [!cite](Shimada2024114438) +Since publication, the input file has been updated to fix a typo in [!cite](Shimada2024114438), where the retained tritium surface flux was multiplied by the thickness of the first mesh layer ($dx = 1 \times 10^{-4}$ m), leading to a flux of 7.89 $\times$ 10$^{-13}$ s$^{-1}$ instead of 7.89 $\times$ 10$^{-9}$ m$\cdot$s$^{-1}$. The updated input files now use the corrected value of 7.89 $\times$ 10$^{-9}$ m$\cdot$s$^{-1}$. !alert warning title=Small typo fixed for the heat flux from [!cite](Shimada2024114438) Since publication, the input file has been updated to fix a small typo that has a minor, almost insignificant effect on the results. The typo set the heat flux to be equal to 300 W/m$^2$ while the pulse was off, as opposed to being equal to 0 W/m$^2$. This was likely due to a mistake in using the off-pulse temperature of the cooling channel (300 K) rather than the zero flux. The change from 300 W/m$^2$ to 0 W/m$^2$ was observed to be negligible, which is attributed to the fact that 300 W/m$^2$ is a small value in this scenario. For context, the maximum heat flux value is 1 $\times 10^{7}$ W/m$^2$. The current version of the input file uses 0 W/m$^2$. @@ -246,7 +251,7 @@ The diffusivity is defined as $D=D_0 \exp⁡(-E_D/k_B/T)$ and the solubility is !listing test/tests/divertor_monoblock/divertor_monoblock.i link=false block=Materials -# Interface Kernels +### Interface Kernels !style halign=left TMAP8 assumes equilibrium between the chemical potentials of the diffusing species similar to how @@ -265,45 +270,10 @@ to avoid the convergence issue associated with calculating two significantly dif !listing test/tests/divertor_monoblock/divertor_monoblock.i link=false block=InterfaceKernels - -### Numerical method - -!style halign=left -We use a standard preconditioner: the [“single matrix preconditioner”](SingleMatrixPreconditioner.md). -The Newton method is used to model the [transient](Transient.md) 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. - -!listing test/tests/divertor_monoblock/divertor_monoblock.i link=false block=Executioner - - -## Results - -!style halign=left -The simulation results from this example are shown in [fig:results2D_a] and [fig:results2D_b]. -For more results, information, and discussion about the results for this example case and -their significance, the reader is referred to [!cite](Shimada2024114438). - -!media examples/figures/divertor_monoblock_results_2D_a.png - id=fig:results2D_a - caption=Tritium concentration profile in W (left), Cu (center), and CuCrZr (right) after ten 1,600-second cycles ($t = 14912$ s). This corresponds to Fig. 4A in [!cite](Shimada2024114438). - style=display:block;margin-left:auto;margin-right:auto;width:40% - -!media examples/figures/divertor_monoblock_results_2D_b.png - id=fig:results2D_b - caption=Tritium concentration profile in W (left), Cu (center), and CuCrZr (right) after fifty 1,600-second cycles ($t = 78912$ s). This corresponds to Fig. 4B in [!cite](Shimada2024114438). - style=display:block;margin-left:auto;margin-right:auto;width:40% - -!alert warning title=The exodus file in `gold` is a smaller version of the output -The input file [/divertor_monoblock.i] returns the outputs that were used in [!cite](Shimada2024114438). However, a slightly modified version of this input is run in [/divertor_monoblock/tests] as part of TMAP8's [Software Quality Assurance](sqa/index.md exact=True) process: It simulates only one pulse cycle, has a coarser mesh, and outputs the results less regularly to limit the file size. As a result, the exodus file in the test `gold` directory is a smaller version of the output generated when running the full input file. - -Note that the current model has been utilized in a follow up study to perform a sensitivity study on material properties and operation conditions, for which the documentation is available [here](examples/divertor_monoblock/sensitivity.md exact=True). - -## Postprocessors +### Postprocessors !style halign=left -Relevant postprocessors have been added to characterize temperatures, fluxes and concentrations of tritium at various points in the model. +Relevant postprocessors have been added to characterize temperatures, fluxes and concentrations of tritium at various points in the model. First, we add a postprocessor to track the flux across the CuCrZr boundary, and scale it to obtain a total flux @@ -347,6 +317,42 @@ And the total area (2D volume) each material occupies !listing test/tests/divertor_monoblock/divertor_monoblock.i block=Postprocessors/total_retention link=false +### Numerical method + +!style halign=left +We use a standard preconditioner: the [“single matrix preconditioner”](SingleMatrixPreconditioner.md). +The Newton method is used to model the [transient](Transient.md) 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. + +!listing test/tests/divertor_monoblock/divertor_monoblock.i link=false block=Executioner + + +## Results + +!style halign=left +The simulation results from this example are shown in [fig:results2D_a] and [fig:results2D_b]. +For more results, information, and discussion about the results for this example case and +their significance, the reader is referred to [!cite](Shimada2024114438). + +!media examples/figures/divertor_monoblock_results_2D_a.png + id=fig:results2D_a + caption=Tritium concentration profile in W (left), Cu (center), and CuCrZr (right) after ten 1,600-second cycles ($t = 14912$ s). This corresponds to Fig. 4A in [!cite](Shimada2024114438). The input files have been updated since publication and will provide different results (see warning below). + style=display:block;margin-left:auto;margin-right:auto;width:40% + +!media examples/figures/divertor_monoblock_results_2D_b.png + id=fig:results2D_b + caption=Tritium concentration profile in W (left), Cu (center), and CuCrZr (right) after fifty 1,600-second cycles ($t = 78912$ s). This corresponds to Fig. 4B in [!cite](Shimada2024114438). The input files have been updated since publication and will provide different results (see warning below). + style=display:block;margin-left:auto;margin-right:auto;width:40% + +!alert warning title=Updated results since publication of [!cite](Shimada2024114438). +As detailed in the `Boundary conditions and history` section above, the BCs for tritium influx and heat flux have been updated since publication of [!cite](Shimada2024114438) to fix typos. While the heat flux correction only has very minor effects, the new tritium flux is 4 orders of magnitude larger than in [!cite](Shimada2024114438), leading to higher tritium concentrations, overall retention, and losses to the coolant side. + +!alert warning title=The exodus file in `gold` is a smaller version of the output +The input file [/divertor_monoblock.i] returns the outputs updated from [!cite](Shimada2024114438). However, a slightly modified version of this input is run in [/divertor_monoblock/tests] as part of TMAP8's [Software Quality Assurance](sqa/index.md exact=True) process: It simulates only one pulse cycle, has a coarser mesh, and outputs the results less regularly to limit the file size. As a result, the exodus file in the test `gold` directory is a smaller version of the output generated when running the full input file. + +Note that the current model has been utilized in a follow up study to perform a sensitivity study on material properties and operation conditions, for which the documentation is available [here](examples/divertor_monoblock/sensitivity.md exact=True). ## Complete input file diff --git a/doc/content/examples/divertor_monoblock/sensitivity.md b/doc/content/examples/divertor_monoblock/sensitivity.md index 9cdbbab9e..d8c56cf61 100644 --- a/doc/content/examples/divertor_monoblock/sensitivity.md +++ b/doc/content/examples/divertor_monoblock/sensitivity.md @@ -1,10 +1,10 @@ -# Divertor Monoblock Sensitivities +# Divertor Monoblock Sensitivities This page documents sensitivity studies of different operating conditions performed on the [Divertor Monoblock](examples/divertor_monoblock/index.md). The original pulsed operation of the divertor monoblock model was modified according to [!cite](Hodille2021126003) towards a single-long tritium and heat flux pulse of an approximate equivalent total fluence. An initial sensitivity study on was performed on the divertor monoblock's boundary conditions under the steady pulse condition using the [Sobol Method](https://mooseframework.inl.gov/modules/stochastic_tools/examples/sobol.html) and other tools within the [Stochastic Tools Module](https://mooseframework.inl.gov/modules/stochastic_tools/). Two additional sensitivity studies were performed on select transients obtained from [!cite](ELMORSHEDY2024101616) and [!cite](Kessel01092013). -## General description of the sensitivity studies and the modified cases +## General description of the sensitivity studies and the modified cases -### Introduction +### Introduction !style halign=left Many fusion components, especially those exposed to especially unique or extreme conditions, often lack sufficient operation data to evaluate their reliability, availability, maintainability, and inspectability (RAMI). As a proof-of-concept, we seek to construct a Probabilistic Physics of Failure (PPoF) model of a tokomak divertor system to obtain failure rate metrics and lifetime metric relevant to the RAMI of a nuclear fusion reactor. @@ -13,16 +13,16 @@ To accomplish this, sensitivity studies on the [Divertor Monoblock](examples/div First, the modifications made to the [Divertor Monoblock](examples/divertor_monoblock/index.md) model will be described. Second, the conditions the divertor monoblock was subjected to in the steady and transient scenarios will be described. Finally, the results of the sensitivities, namely the first and second order sensitivity indices, example correlations and state frequencies will be presented. -### Divertor Monoblock modifications +### Divertor Monoblock modifications -The pulsed operation of the divertor monoblock is relatively computationally expensive to accurately model since it requires taking small time steps to capture transients. -For a sensitivity analysis study, where many simulations are required, lowering the cost of individual simulations is paramount. -So as a first approximation, we replace the pulsed operation with a single steady pulse in this study. +The pulsed operation of the divertor monoblock is relatively computationally expensive to accurately model since it requires taking small time steps to capture transients. +For a sensitivity analysis study, where many simulations are required, lowering the cost of individual simulations is paramount. +So as a first approximation, we replace the pulsed operation with a single steady pulse in this study. -### Steady operation +### Steady operation The sensitivity studies must sample from a distribution of parameters to determine the net effects of those parameters -on the model. Here, we vary the incident heat flux, tritium flux, coolant temperature, and coolant tritium concentration. For all these parameters, the sampling is done from +on the model. Here, we vary the incident heat flux, retained tritium surface flux, coolant temperature, and coolant tritium concentration. For all these parameters, the sampling is done from uniform distributions as shown in [tab:steady_case] and [fig:steady_inputs]. It should be noted that the coolant temperature is unusually high in this case, as the ITER divertor is designed to have coolant run at 100°C with a 50°C temperature increase at the outlet [!cite](hirai2010iter); however, this is the designed 240°C temperature for the divertor to run high-pressure water in the bake-off regime for tritium unloading. @@ -31,23 +31,23 @@ in this case, as the ITER divertor is designed to have coolant run at 100°C | Parameter | Samples | Nominal Value | Distribution | Deviation | | --- | --- | --- | --- | --- | | Incident Heat Flux | 100 | 10 MW/m$^2$ [!cite](pitts2009iter)| Uniform | $\pm$5% | -| Incident Tritium Flux | 100 | 7.90$\times$10$^{-13}$ (normalized) | Uniform | $\pm$5% | +| Retained Tritium Surface Flux | 100 | 7.89$\times$10$^{-9}$ m/s (normalized) | Uniform | $\pm$5% | | Coolant Temperature | 100 | 552 K [!cite](hirai2010iter)| Uniform | $\pm$5% | | Coolant Tritium Concentration | 100 | 1.0$\times$10$^{-18}$ (normalized) | Uniform | $\pm$1% | -!media divertor_monoblock_sensitivity.py image_name=divertor_monoblock_sensitivity_figures/steady_state_inputs.png id=fig:steady_inputs +!media divertor_monoblock_sensitivity.py image_name=divertor_monoblock_sensitivity_figures/steady_state_inputs.png id=fig:steady_inputs style=width:50%;margin-bottom:2%;margin-left:auto;margin-right:auto caption=Distribution of sampled steady-state parameter values. -### Transient case: inadvertent shutdown +### Transient case: inadvertent shutdown !style halign=left -For a transient case of an inadvertent shutdown, we modify parameters as shown in [tab:inadvertent_shutdown_case] and [fig:shutdown_inputs]. This case is modified such that we assume constant operation for 5.5 hours before encountering a `Peak Heat Flux` (and proportionally scaled tritium flux) for the sampled `Peak Duration` before resuming at one-tenth the heat and tritium flux of the original steady-state. +For a transient case of an inadvertent shutdown, we modify parameters as shown in [tab:inadvertent_shutdown_case] and [fig:shutdown_inputs]. This case is modified such that we assume constant operation for 5.5 hours before encountering a `Peak Heat Flux` (and proportionally scaled retained tritium surface flux) for the sampled `Peak Duration` before resuming at one-tenth the heat and tritium flux of the original steady-state. -The top boundary tritium flux and temperature flux are both adjusted to be a function of time, with functions defined in the input file as follows. +The top boundary retained tritium surface flux and heat flux are both adjusted to be a function of time, with functions defined in the input file as follows. -!listing test/tests/divertor_monoblock/shutdown_transient_runner.i block=Functions/mobile_flux_bc_function link=false +!listing test/tests/divertor_monoblock/shutdown_transient_runner.i block=Functions/retained_t_surface_flux_function link=false !listing test/tests/divertor_monoblock/shutdown_transient_runner.i block=Functions/temperature_flux_bc_function @@ -59,14 +59,14 @@ The top boundary tritium flux and temperature flux are both adjusted to be a fun | Coolant Temperature | 1000 | 552 K [!cite](hirai2010iter) | Normal | $\sigma$=$\pm$5% | | Tungsten Conductivity | 1000 | 0.95 W/m K [!cite](Shimada2024114438) | Uniform | $\pm$5% | -!media divertor_monoblock_sensitivity.py image_name=divertor_monoblock_sensitivity_figures/transients_inputs.png id=fig:shutdown_inputs +!media divertor_monoblock_sensitivity.py image_name=divertor_monoblock_sensitivity_figures/transients_inputs.png id=fig:shutdown_inputs style=width:50%;margin-bottom:2%;margin-left:auto;margin-right:auto caption=Distribution of sampled transient shutdown characteristics. -### Transient case: edge-localized mode disruption +### Transient case: edge-localized mode disruption !style halign=left -To simulate an edge-localized mode (ELM) disruption, we simulate a set of input conditions as described in [tab:elm_transient_case]. The heat flux is much larger than the transient shutdown case, but over a shorter duration. Most of the parameters will be selected from a normal distribution, as they reflect variations around some target or estimated value. The results will be shown below in [fig:elm_correlation]. We use the same tungsten conductivity as in [!cite](Shimada2024114438), but vary the conductivity by a constant factor in the range of $\pm$5%. +To simulate an edge-localized mode (ELM) disruption, we simulate a set of input conditions as described in [tab:elm_transient_case]. The heat flux is much larger than the transient shutdown case, but over a shorter duration. Most of the parameters will be selected from a normal distribution, as they reflect variations around some target or estimated value. The results will be shown below in [fig:elm_correlation]. We use the same tungsten conductivity as in [!cite](Shimada2024114438), but vary the conductivity by a constant factor in the range of $\pm$5%. !table id=tab:elm_transient_case caption=Edge-localized mode transient case parameter space. | Parameter | Samples | Nominal Value | Distribution | Deviation | @@ -77,21 +77,21 @@ To simulate an edge-localized mode (ELM) disruption, we simulate a set of input | Tungsten Conductivity | 1000 | 0.95 W/m K [!cite](Shimada2024114438) | Uniform | $\sigma$=$\pm$5% | -## Results +## Results -### Steady operation +### Steady operation -For purposes of comparison, we look at the maximum observed tungsten temperature and the scaled permeation flux with regards to the heat flux in [fig:ss_correlation]. +For purposes of comparison, we look at the maximum observed tungsten temperature and the scaled permeation flux with regards to the heat flux in [fig:ss_correlation]. The maximum tungsten temperature naturally correlates with the heat flux, but also depends on thermal conductivity and coolant temperature, as expected. -The link between heat flux and tritium flux is not as strong. In general, larger values of tritium flux to the coolant are obtained with higher heat flux, which is the results from increased diffusivity and temperatures more likely to be sufficient for tritium release from traps. +The link between heat flux and tritium flux is not as strong. In general, larger values of tritium flux to the coolant are obtained with higher heat flux, which is the results from increased diffusivity and temperatures more likely to be sufficient for tritium release from traps. However, small tritium flux values are still obtained when a large heat flux is applied. This is attributed to lower temperatures towards the coolant (due to cooler coolant or higher thermal conductivity). -Note, however, that low tritium flux are less likely as the heat flux increases. +Note, however, that low tritium flux are less likely as the heat flux increases. !media divertor_monoblock_sensitivity.py image_name=divertor_monoblock_sensitivity_figures/steady_comparison.png id=fig:ss_correlation style=width:50%;margin-bottom:2%;margin-left:auto;margin-right:auto caption=Correlation between the incident heat flux and the maximum temperature of the tungsten, as well as the total (scaled) permeation flux of tritium into the coolant. -### Inadvertent shutdown +### Inadvertent shutdown For the inadvertent shutdown case, we can correlate the input parameters with several output parameters. Perhaps most interesting is the relationship between coolant temperature and the scaled tritium flux, where tritium does not permeate effectively for coolant temperatures below about 550 K. In [fig:shutdown_correlation], the upper plots are scatterplots, the lower are kernel density plots and the diagonal are histograms. @@ -105,7 +105,7 @@ The results of the simulation are shown in [fig:shutdown_results]. As would be e caption=Distribution of sampled postprocessor values in the inadvertent shutdown case. -### Edge-localized mode disruption +### Edge-localized mode disruption For the case of simulating an ELM disruption event, we show in [fig:elm_correlation] that although the operating conditions vary, the trends are substantially the same. @@ -113,21 +113,21 @@ For the case of simulating an ELM disruption event, we show in [fig:elm_correlat style=width:80%;margin-bottom:2%;margin-left:auto;margin-right:auto caption=Correlation between the incident heat flux and the maximum temperature of the tungsten, as well as the total (scaled) permeation flux of tritium. -## Complete input files +## Complete input files Below are the complete input files for the various sensitivity studies. Note that none of the inputs have been optimized for computational costs. -### Steady operation +### Steady operation -#### Subapp input +#### Subapp input !listing test/tests/divertor_monoblock/steady_state_runner.i link=false -#### Controller input +#### Controller input !listing test/tests/divertor_monoblock/steady_state_sobol.i link=false -### Inadvertent shutdown +### Inadvertent shutdown #### Subapp input @@ -146,4 +146,3 @@ Below are the complete input files for the various sensitivity studies. Note tha #### Controller input !listing test/tests/divertor_monoblock/elm_transient_sobol.i link=false - diff --git a/test/tests/divertor_monoblock/divertor_monoblock_common_base.i b/test/tests/divertor_monoblock/divertor_monoblock_common_base.i index 9bbaf5df0..db779a221 100644 --- a/test/tests/divertor_monoblock/divertor_monoblock_common_base.i +++ b/test/tests/divertor_monoblock/divertor_monoblock_common_base.i @@ -32,16 +32,6 @@ temperature_coolant_max = '${units 552.0 K}' plasma_max_heat = '${units 1.0e7 W/m^2}' # Heat flux of 10 MW/m^2 at steady state plasma_min_heat = '${units 0.0 W/m^2}' # no flux while the pulse is off. -# Maximum mobile flux of 7.90e-13 at the top surface (1.0e-4 [m]) -# 10e24 at/m^3/s plasma flux at steady state -# 50% of it corresponds to tritium in a DT plasma -# Assuming 0.1% of incident plasma is retained in the divertor, this results in a flux of -# 5e20 at/m^3/s for tritium -# This is then normalized by the tungsten_atomic_density and leads to a flux of ~7.90e-9 m/s -# This is then distributed in the first mesh layer, which has a thickness of 1e-4 m -plasma_max_flux = '${units 7.90e-13 1/s}' # at.fraction / s -plasma_min_flux = '${units 0.0 1/s}' - # Initial conditions C_trapping_init = 1.0e-15 # at.fraction @@ -94,6 +84,17 @@ diffusivity_CuCrZr_Ea = '${units 4873.9 K}' solubility_CuCrZr_D0 = '${units 6.75e-6 1/Pa^0.5}' # ${fparse 4.28e23 / tungsten_atomic_density} 1/m^3/Pa^(1/2) / (1/m^3) = 1/Pa^(1/2) solubility_CuCrZr_Ea = '${units 4525.8 K}' +# Maximum retained tritium surface flux at the top surface during operation. +# plasma flux at steady state +plasma_max_flux = ${units 1.0e24 at/m^2/s} +# 50% of it corresponds to tritium in a DT plasma +plasma_max_t_flux = ${fparse 50 / 100 * plasma_max_flux} +# Assuming 0.1% of incident tritium is retained in the divertor, leading to a retained tritium surface flux of 5.0e20 at/m^2/s +plasma_max_retained_t_flux = ${fparse 0.1 / 100 * plasma_max_t_flux} +# For the normalized atomic-fraction variable used here, the equivalent Neumann flux is J / N_W = 7.89e-9 m/s +plasma_max_retained_t_surface_flux = '${fparse plasma_max_retained_t_flux / tungsten_atomic_density}' # normalized surface flux (m/s) +plasma_min_retained_t_surface_flux = '${units 0.0 m/s}' + # For postprocessor scaling diffusivity_fixed = '${units 5.01e-24 g/m^2}' # (3.01604928)/(6.02e23)/[gram(T)/m^2] # diffusivity_fixed = ${units 5.508e-19 g/m^2} # (1.0e3)*(1.0e3)/(6.02e23)/(3.01604928) [gram(T)/m^2] alternative @@ -114,11 +115,11 @@ scaling_factor_2 = '${units 3.44e10 g/m^2}' # (1.0e3)*(1.0e3)*(${tungsten_atomic if(t_in_cycle < ${plasma_ss_end}, 1, if(t_in_cycle < ${plasma_ramp_down_end}, 1 - (t_in_cycle-${plasma_ss_end})/${plasma_ramp_time}, 0.0)))' [] - [mobile_flux_bc_function] + [retained_t_surface_flux_function] type = ParsedFunction symbol_values = 'pulse_time_function' symbol_names = 'pulse_time_function' - expression = '(${plasma_max_flux} - ${plasma_min_flux}) * pulse_time_function + ${plasma_min_flux}' + expression = '(${plasma_max_retained_t_surface_flux} - ${plasma_min_retained_t_surface_flux}) * pulse_time_function + ${plasma_min_retained_t_surface_flux}' [] [temperature_flux_bc_function] type = ParsedFunction diff --git a/test/tests/divertor_monoblock/divertor_monoblock_explicit_base.i b/test/tests/divertor_monoblock/divertor_monoblock_explicit_base.i index 63628b0cc..133608843 100644 --- a/test/tests/divertor_monoblock/divertor_monoblock_explicit_base.i +++ b/test/tests/divertor_monoblock/divertor_monoblock_explicit_base.i @@ -42,7 +42,7 @@ C_mobile_CuCrZr_init = 1.0e-15 # at.fraction [] [Scaled_Tritium_Flux] type = ParsedPostprocessor - expression = '5.01e-24 * Tritium_SideFluxIntegral' + expression = '${diffusivity_fixed} * Tritium_SideFluxIntegral' pp_names = Tritium_SideFluxIntegral execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' [] @@ -54,86 +54,6 @@ C_mobile_CuCrZr_init = 1.0e-15 # at.fraction variable = temperature execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' [] - [max_temperature_W] - type = ElementExtremeValue - block = 4 - variable = 'temperature' - value_type = max - execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' - [] - [max_temperature_Cu] - type = ElementExtremeValue - block = 3 - variable = 'temperature' - value_type = max - execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' - [] - [max_temperature_CuCrZr] - type = ElementExtremeValue - block = 2 - variable = 'temperature' - value_type = max - execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' - [] - [avg_temperature_W] - type = ElementAverageValue - variable = temperature - block = 4 - execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' - [] - [avg_temperature_Cu] - type = ElementAverageValue - variable = temperature - block = 3 - execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' - [] - [avg_temperature_CuCrZr] - type = ElementAverageValue - variable = temperature - block = 2 - execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' - [] - [max_concentration_W] - type = ElementExtremeValue - variable = 'C_total_W' - value_type = max - block = 4 - execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' - [] - [max_concentration_Cu] - type = ElementExtremeValue - variable = 'C_total_Cu' - value_type = max - block = 3 - execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' - [] - [max_concentration_CuCrZr] - type = ElementExtremeValue - variable = 'C_total_CuCrZr' - value_type = max - block = 2 - execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' - [] - [area_W] - type = VolumePostprocessor - block = 4 - execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' - [] - [area_Cu] - type = VolumePostprocessor - block = 3 - execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' - [] - [area_CuCrZr] - type = VolumePostprocessor - block = 2 - execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' - [] - [total_retention] - type = SumPostprocessor - values = 'ScInt_C_total_W ScInt_C_total_Cu ScInt_C_total_CuCrZr' - execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' - [] # TMAP8 will give an error if the parser does not find a use for defined parameters # It also seems that the parser does not deal well with multiple layers of includes, @@ -411,7 +331,7 @@ C_mobile_CuCrZr_init = 1.0e-15 # at.fraction type = FunctionNeumannBC variable = C_mobile_W boundary = 'top' - function = mobile_flux_bc_function + function = retained_t_surface_flux_function [] [mobile_tube] type = DirichletBC diff --git a/test/tests/divertor_monoblock/divertor_monoblock_multi_variable_base.i b/test/tests/divertor_monoblock/divertor_monoblock_multi_variable_base.i index 989034cd2..5657d4e8c 100644 --- a/test/tests/divertor_monoblock/divertor_monoblock_multi_variable_base.i +++ b/test/tests/divertor_monoblock/divertor_monoblock_multi_variable_base.i @@ -265,6 +265,33 @@ value = Int_C_total_W scaling_factor = ${scaling_factor} [] + [max_concentration_W] + type = ElementExtremeValue + variable = 'C_total_W' + value_type = max + block = 4 + execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' + [] + + [max_temperature_W] + type = ElementExtremeValue + block = 4 + variable = 'temperature' + value_type = max + execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' + [] + [avg_temperature_W] + type = ElementAverageValue + variable = temperature + block = 4 + execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' + [] + + [area_W] + type = VolumePostprocessor + block = 4 + execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' + [] # ############################################################ Postprocessors for Cu (block = 3) [Int_C_mobile_Cu] type = ElementIntegralVariablePostprocessor @@ -296,6 +323,33 @@ value = Int_C_total_Cu scaling_factor = ${scaling_factor} [] + [max_concentration_Cu] + type = ElementExtremeValue + variable = 'C_total_Cu' + value_type = max + block = 3 + execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' + [] + + [max_temperature_Cu] + type = ElementExtremeValue + block = 3 + variable = 'temperature' + value_type = max + execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' + [] + [avg_temperature_Cu] + type = ElementAverageValue + variable = temperature + block = 3 + execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' + [] + + [area_Cu] + type = VolumePostprocessor + block = 3 + execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' + [] # ############################################################ Postprocessors for CuCrZr (block = 2) [Int_C_mobile_CuCrZr] type = ElementIntegralVariablePostprocessor @@ -327,7 +381,40 @@ value = Int_C_total_CuCrZr scaling_factor = ${scaling_factor} [] + [max_concentration_CuCrZr] + type = ElementExtremeValue + variable = 'C_total_CuCrZr' + value_type = max + block = 2 + execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' + [] + + [max_temperature_CuCrZr] + type = ElementExtremeValue + block = 2 + variable = 'temperature' + value_type = max + execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' + [] + [avg_temperature_CuCrZr] + type = ElementAverageValue + variable = temperature + block = 2 + execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' + [] + + [area_CuCrZr] + type = VolumePostprocessor + block = 2 + execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' + [] ############################################################ Postprocessors for others + [total_retention] + type = SumPostprocessor + values = 'ScInt_C_total_W ScInt_C_total_Cu ScInt_C_total_CuCrZr' + execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' + [] + [dt] type = TimestepSize [] diff --git a/test/tests/divertor_monoblock/divertor_monoblock_physics-single-variable.i b/test/tests/divertor_monoblock/divertor_monoblock_physics-single-variable.i index bb8383ae0..5e32cdccf 100644 --- a/test/tests/divertor_monoblock/divertor_monoblock_physics-single-variable.i +++ b/test/tests/divertor_monoblock/divertor_monoblock_physics-single-variable.i @@ -49,7 +49,7 @@ C_mobile_init = 1.0e-20 # at.fraction initial_condition = ${C_mobile_init} neumann_boundaries = 'top' - boundary_fluxes = 'mobile_flux_bc_function' + boundary_fluxes = 'retained_t_surface_flux_function' [] [] [SpeciesTrapping] diff --git a/test/tests/divertor_monoblock/divertor_monoblock_physics.i b/test/tests/divertor_monoblock/divertor_monoblock_physics.i index 9b7797cee..838f45c3b 100644 --- a/test/tests/divertor_monoblock/divertor_monoblock_physics.i +++ b/test/tests/divertor_monoblock/divertor_monoblock_physics.i @@ -61,7 +61,7 @@ C_mobile_CuCrZr_init = 1.0e-15 # at.fraction initial_condition = ${C_mobile_W_init} neumann_boundaries = 'top' - boundary_fluxes = 'mobile_flux_bc_function' + boundary_fluxes = 'retained_t_surface_flux_function' [] [Cu] variable_name = 'C_mobile_Cu' diff --git a/test/tests/divertor_monoblock/elm_transient_runner.i b/test/tests/divertor_monoblock/elm_transient_runner.i index d63d33244..a6397f340 100644 --- a/test/tests/divertor_monoblock/elm_transient_runner.i +++ b/test/tests/divertor_monoblock/elm_transient_runner.i @@ -26,11 +26,12 @@ elm_value = ${units 1147 MW/m^2 -> W/m^2} elm_duration = ${units 1.32 ms -> s} W_cond_factor = 1.0 -Functions/mobile_flux_bc_function/expression := "if(t<2e2, (${base_power}*7.9e-13/1e7), +# scales the BCs bases on the new base power +Functions/retained_t_surface_flux_function/expression := "if(t<2e2, (${base_power}*${plasma_max_retained_t_surface_flux}/${plasma_max_heat}), if(t<(2e2+${elm_duration}*1/3), -(${base_power}*7.9e-13/1e7)+(t-2e2)/(${elm_duration}*1/3)*((${elm_value}*7.9e-13/1e7)-(${base_power}*7.9e-13/1e7)), +(${base_power}*${plasma_max_retained_t_surface_flux}/${plasma_max_heat})+(t-2e2)/(${elm_duration}*1/3)*((${elm_value}*${plasma_max_retained_t_surface_flux}/${plasma_max_heat})-(${base_power}*${plasma_max_retained_t_surface_flux}/${plasma_max_heat})), if(t<(2e2+(${elm_duration}*1/3)+(${elm_duration}*2/3)), -(${elm_value}*7.9e-13/1e7)-(t-2e2-(${elm_duration}*1/3))/(${elm_duration}*2/3)*((${elm_value}*7.9e-13/1e7)-(${base_power}*7.9e-13/1e7)), (${base_power}*7.9e-13/1e7))))" +(${elm_value}*${plasma_max_retained_t_surface_flux}/${plasma_max_heat})-(t-2e2-(${elm_duration}*1/3))/(${elm_duration}*2/3)*((${elm_value}*${plasma_max_retained_t_surface_flux}/${plasma_max_heat})-(${base_power}*${plasma_max_retained_t_surface_flux}/${plasma_max_heat})), (${base_power}*${plasma_max_retained_t_surface_flux}/${plasma_max_heat}))))" Functions/temperature_inner_function/expression := "${coolant_temperature}" Executioner/petsc_options_iname := '-pc_type' Executioner/petsc_options_value := 'lu' @@ -72,7 +73,7 @@ Postprocessors/temperature_tube/execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' Postprocessors/timestep_max_pp/execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' # There is a lot of overlap with the divertor monoblock case, but the terms defined there for the temperature profile and tritium flux are unused here. # Add them to the dummy postprocessor so the parser does not complain. -Postprocessors/unused_parameters/expression := '${plasma_max_flux} + ${plasma_min_flux} + ${temperature_initial} + ${temperature_coolant_max} + ${num_sectors} +Postprocessors/unused_parameters/expression := '${plasma_max_retained_t_surface_flux} + ${plasma_min_retained_t_surface_flux} + ${temperature_initial} + ${temperature_coolant_max} + ${num_sectors} + ${rings_H2O} + ${rings_CuCrZr} + ${rings_Cu} + ${rings_W}' [Postprocessors] diff --git a/test/tests/divertor_monoblock/gold/divertor_monoblock_exodus.e b/test/tests/divertor_monoblock/gold/divertor_monoblock_exodus.e index 042694aee..74b924303 100644 Binary files a/test/tests/divertor_monoblock/gold/divertor_monoblock_exodus.e and b/test/tests/divertor_monoblock/gold/divertor_monoblock_exodus.e differ diff --git a/test/tests/divertor_monoblock/gold/divertor_monoblock_physics-single-variable_out.csv b/test/tests/divertor_monoblock/gold/divertor_monoblock_physics-single-variable_out.csv index 662092a5b..b10f6cd68 100644 --- a/test/tests/divertor_monoblock/gold/divertor_monoblock_physics-single-variable_out.csv +++ b/test/tests/divertor_monoblock/gold/divertor_monoblock_physics-single-variable_out.csv @@ -1,6 +1,6 @@ time,F_permeation,F_recombination,ScInt_C_mobile_Cu,ScInt_C_mobile_CuCrZr,ScInt_C_mobile_W,ScInt_C_total_Cu,ScInt_C_total_CuCrZr,ScInt_C_total_W,ScInt_C_trapped_Cu,ScInt_C_trapped_CuCrZr,ScInt_C_trapped_W,temperature_top,temperature_tube,timestep_max_pp 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -20,-3.1149514035071e-12,-124.21771939903,4.3471990473073e-11,4.802444583016e-11,7.1802423738122e-09,8.7710527669451e-10,1.1100980867666e-09,0.0015444281241461,8.2145474208013e-10,1.0465578128964e-09,0.0015444209439037,451.60196096973,350.4,40 -44,-1.9603716925464e-10,-383.49947352936,3.6051374092789e-10,4.0038444344385e-10,8.5476396532928e-05,8.7666824230384e-10,1.110106775041e-09,0.0048367647608097,5.0861400307455e-10,6.9935400191756e-10,0.0047512883642768,658.86329375565,410.88,40 -72.8,-1.4773678557884e-09,-144.28716068424,7.3925311851058e-10,9.1727598342483e-10,0.0078536107691826,8.7219284833975e-10,1.1101325518691e-09,0.011469251948832,1.3099761403962e-10,1.9003912788554e-10,0.0036156411796493,934.5310043884,483.456,40 -100,-2.5289292462554e-09,-39.366575462894,8.2290437484568e-10,1.060265547855e-09,0.019875303497318,8.566518088619e-10,1.110156374919e-09,0.020585787457568,3.325441793635e-11,4.9161972242957e-11,0.00071048396024942,1212.2997739214,552,20 +20,-3.1149514034954e-12,-1240435.8867964,4.3471990473073e-11,4.802444583016e-11,-3.0862824579286e-05,8.7710527669449e-10,1.1100980867666e-09,15.422530776528,8.2145474208011e-10,1.0465578128964e-09,15.422561639352,451.60196096973,350.4,40 +44,-1.9605843894639e-10,-3889236.2014712,3.6051376335533e-10,4.0038486012223e-10,-0.81691518827714,8.7666824248675e-10,1.1101067749849e-09,48.299737540584,5.08613981155e-10,6.9935359127112e-10,49.116652728861,658.86329410743,410.88,40 +72.8,-1.4775716196129e-09,-9080364.3821236,7.3925359143679e-10,9.172767066248e-10,-39.189369046093,8.7219284771913e-10,1.1101325516264e-09,114.5316198136,1.3099714741084e-10,1.9003841501156e-10,153.7209888597,934.53100449503,483.456,40 +100,-2.5292127192372e-09,-849144.40873419,8.2290449074508e-10,1.0602657100765e-09,199.84238205865,8.5665180815323e-10,1.1101563745615e-09,205.56915804213,3.3254303031808e-11,4.9161812039099e-11,5.7267759834797,1212.2997739246,552,20 diff --git a/test/tests/divertor_monoblock/shutdown_transient_runner.i b/test/tests/divertor_monoblock/shutdown_transient_runner.i index d5af568db..78bee7481 100644 --- a/test/tests/divertor_monoblock/shutdown_transient_runner.i +++ b/test/tests/divertor_monoblock/shutdown_transient_runner.i @@ -6,7 +6,7 @@ ### Engineering and Design, Volume 203, 2024, 114438, ISSN 0920-3796, ### https://doi.org/10.1016/j.fusengdes.2024.114438. -### Nomenclatures # Nelson S. Comments/Annotations +### 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 @@ -17,7 +17,7 @@ ### ### Sc_ Scaled ### Int_ Integrated -### ScInt_ Scaled and integrated # Nelson S. Comments/Annotations +### ScInt_ Scaled and integrated ### VARIABLES ### peak_value = ${units 20 MW/m^2 -> W/m^2} @@ -28,9 +28,9 @@ W_cond_factor = 1.0 !include divertor_monoblock_explicit_base.i Functions/timestep_function/expression := "if(t<2e4, 500, if(t<(2e4+${peak_duration}+1), 0.10, 500))" -Functions/mobile_flux_bc_function/expression := "if(t<2e4, 7.90e-13, if(t<(2e4+${peak_duration}), ${peak_value}/1.0e7*7.90e-13, " - "7.90e-14))" -Functions/temperature_flux_bc_function/expression := "if(t<2e4, 1.0e7, if(t<(2e4+${peak_duration}), ${peak_value}, 1.0e6))" +Functions/retained_t_surface_flux_function/expression := "if(t<2e4, ${plasma_max_retained_t_surface_flux}, if(t<(2e4+${peak_duration}), " + "${peak_value}/${plasma_max_heat}*${plasma_max_retained_t_surface_flux}, 0.1*${plasma_max_retained_t_surface_flux}))" +Functions/temperature_flux_bc_function/expression := "if(t<2e4, ${plasma_max_heat}, if(t<(2e4+${peak_duration}), ${peak_value}, 0.1*${plasma_max_heat}))" Functions/temperature_inner_function/expression := ${coolant_temperature} Functions/temperature_steady_state/expression := "-1.59786e4*x^2 -1.11629611e4*x + 4.84297313e2 + 1.9491599e6*y^2 + 1.55723201e4*y " @@ -78,7 +78,7 @@ Postprocessors/timestep_max_pp/execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' # Continue using the steady-state dummy postprocessor, but add unused definitions # from the steady-state input. Postprocessors/unused_parameters/expression := '${num_sectors} + ${rings_H2O} + ${rings_CuCrZr} + ${rings_Cu} + ${rings_W} + ${temperature_coolant_max} - + ${plasma_max_heat} + ${plasma_min_heat} + ${plasma_max_flux} + ${plasma_min_flux}' + + ${plasma_max_heat} + ${plasma_min_heat} + ${plasma_max_retained_t_surface_flux} + ${plasma_min_retained_t_surface_flux}' [Postprocessors] [time_max_T_W] diff --git a/test/tests/divertor_monoblock/steady_state_runner.i b/test/tests/divertor_monoblock/steady_state_runner.i index 1e81d2cd9..6411a338b 100644 --- a/test/tests/divertor_monoblock/steady_state_runner.i +++ b/test/tests/divertor_monoblock/steady_state_runner.i @@ -19,7 +19,6 @@ ### ScInt_ Scaled and integrated temperature_top_val = ${units 10 MW/m^2} -C_mob_W_top_flux_val = 7.90e-13 # normalized units temperature_tube_val = ${units 552 K} [Controls] @@ -32,13 +31,15 @@ temperature_tube_val = ${units 552 K} ### This input uses the `!include` feature to incorporate other input files !include divertor_monoblock_explicit_base.i +retained_t_surface_flux_val = ${plasma_max_retained_t_surface_flux} # normalized surface flux [m/s] + # Geometry and design num_sectors := 12 rings_CuCrZr := 6 rings_Cu := 4 rings_W := 22 -Functions/mobile_flux_bc_function/expression := '${fparse C_mob_W_top_flux_val}' +Functions/retained_t_surface_flux_function/expression := '${fparse retained_t_surface_flux_val}' Functions/temperature_flux_bc_function/expression := '${fparse temperature_top_val}' Functions/temperature_inner_function/expression := '${fparse temperature_tube_val}' Functions/timestep_function/expression := 'if(t<100, 25, 400)' @@ -72,7 +73,7 @@ Postprocessors/timestep_max_pp/execute_on = 'MULTIAPP_FIXED_POINT_END FINAL' # Need to add unused parameters from the divertor monoblock case to the dummy postprocessor Postprocessors/unused_parameters/expression := '${num_sectors} + ${rings_H2O} + ${rings_CuCrZr} + ${rings_Cu} + ${rings_W} + ${temperature_coolant_max} + ${plasma_max_heat} + ${plasma_min_heat} - + ${plasma_max_flux} + ${plasma_min_flux}' + + ${plasma_max_retained_t_surface_flux} + ${plasma_min_retained_t_surface_flux}' Variables/temperature/initial_condition= ${temperature_initial} diff --git a/test/tests/divertor_monoblock/steady_state_sobol.i b/test/tests/divertor_monoblock/steady_state_sobol.i index cab12457e..0d5991670 100644 --- a/test/tests/divertor_monoblock/steady_state_sobol.i +++ b/test/tests/divertor_monoblock/steady_state_sobol.i @@ -9,8 +9,8 @@ # Define parameters in one spot for easier reading upper_heat_flux_lower = ${units 9.5 MW/m^2 -> W/m^2} upper_heat_flux_upper = ${units 10.5 MW/m^2 -> W/m^2} -upper_tritium_flux_lower = 7.505e-13 # units -upper_tritium_flux_upper = 8.295e-13 # units +upper_tritium_flux_lower = ${units 7.495e-9 m/s} # normalized surface flux +upper_tritium_flux_upper = ${units 8.285e-9 m/s} # normalized surface flux coolant_temperature_lower = ${units 524.4 K} coolant_temperature_upper = ${units 579.6 K} N_samples = 10 @@ -37,7 +37,7 @@ N_samples = 10 multi_app = runner sampler = sobol param_names = "temperature_top_val - C_mob_W_top_flux_val + retained_t_surface_flux_val temperature_tube_val" [] [] diff --git a/test/tests/divertor_monoblock/tests b/test/tests/divertor_monoblock/tests index b051e0727..d7d3a37e6 100644 --- a/test/tests/divertor_monoblock/tests +++ b/test/tests/divertor_monoblock/tests @@ -19,8 +19,7 @@ rings_CuCrZr=10 rings_Cu=8 rings_W=40 - Executioner/nl_rel_tol=1e-9 - Executioner/nl_abs_tol=1e-11' + Executioner/nl_abs_tol=3e-6' detail = 'pulsed operation.' rel_err = 8e-4 # increasing the relative error tolerance because the test is sensitive to the environment. This error is still small for physical problems. heavy = true @@ -37,8 +36,7 @@ rings_CuCrZr=10 rings_Cu=8 rings_W=40 - Executioner/nl_rel_tol=1e-9 - Executioner/nl_abs_tol=1e-11' + Executioner/nl_abs_tol=3e-6' rel_err = 8e-4 # increasing the relative error tolerance because the test is sensitive to the environment. This error is still small for physical problems. heavy = true min_parallel = 2 @@ -53,9 +51,7 @@ Executioner/end_time=100 rings_CuCrZr=10 rings_Cu=8 - rings_W=40 - Executioner/nl_rel_tol=1e-9 - Executioner/nl_abs_tol=1e-11' + rings_W=40' detail = 'pulsed operation with a single tritium variable and physics syntax' rel_err = 8e-4 # increasing the relative error tolerance because the test is sensitive to the environment. This error is still small for physical problems. abs_zero = 3e-9 @@ -97,12 +93,12 @@ cli_args = 'runner:Mesh/ccmg/rings="1 3 3 3" Outputs/out/file_base=elm_transient_sobol runner:Executioner/end_time=2.000005e2 Samplers/hypercube_1/num_rows=5 Samplers/hypercube_2/num_rows=5 runner:/Mesh/ccmg/num_sectors=4' jsondiff = 'elm_transient_sobol.json' heavy = true - skip_keys = 'sobol stats' + skip_keys = 'sobol stats' min_parallel = 4 rel_err = 20 [] [] - [python_comparison] + [python_comparison] type = RunCommand command = 'python3 divertor_monoblock_sensitivity.py' design = 'divertor_monoblock/sensitivity.md'