diff --git a/doc/content/bib/tmap8.bib b/doc/content/bib/tmap8.bib index d8d2cbb70..333fc918c 100644 --- a/doc/content/bib/tmap8.bib +++ b/doc/content/bib/tmap8.bib @@ -742,3 +742,60 @@ @article{loarte2017elms year = {2014}, type = {Journal Article} } + +@article{luping1993rapid, + title={Rapid determination of the chloride diffusivity in concrete by applying an electric field}, + author={Luping, Tang and Nilsson, Lars-Olof}, + journal={Materials Journal}, + volume={89}, + number={1}, + pages={49--53}, + year={1993} +} + +@article{hossain2020evaluation, + title={Evaluation of the hydrogen solubility and diffusivity in proton-conducting oxides by converting the {PSL} values of a tritium imaging plate}, + author={Hossain, M Khalid and Hashizume, Kenichi and Hatano, Yuji}, + journal={Nuclear Materials and Energy}, + volume={25}, + pages={100875}, + year={2020}, + publisher={Elsevier} +} + +@book{miller1967transient, + title={Transient heat conduction in finite slabs with position-dependent heat generation}, + author={Miller, Roy W}, + year={1967}, + publisher={National Aeronautics and Space Administration} +} + +@article{tenevich2023mechanical, + title={Mechanical, thermophysical and electrochemical properties of dense {BaCeO$_3$} ceramics sintered from hydrazine-nitrate combustion products}, + author={Tenevich, M.I. and Motaylo, E.S. and Khorev, V.A. and Shevchik, A.P. and Glumov, O.V. and Murin, I.V. and Popkov, V.I.}, + journal={Ceramics International}, + volume={49}, + number={19}, + pages={31087--31095}, + year={2023}, + publisher={Elsevier} +} + +@article{yamanaka2003thermophysical, + title={Thermophysical properties of {BaZrO$_3$} and {BaCeO$_3$}}, + author={Yamanaka, S. and Fujikane, M. and Hamaguchi, T. and Muta, H. and Oyama, T. and Matsuda, T. and Kobayashi, S.-I. and Kurosaki, K.}, + journal={Journal of Alloys and Compounds}, + volume={359}, + number={1-2}, + pages={109--113}, + year={2003}, + publisher={Elsevier} +} + +@book{incropera2007fundamentals, + title={Fundamentals of Heat and Mass Transfer}, + author={Incropera, Frank P. and DeWitt, David P. and Bergman, Theodore L. and Lavine, Adrienne S.}, + edition={6th}, + year={2007}, + publisher={John Wiley \& Sons} +} diff --git a/doc/content/verification_and_validation/figures/comparison_ver-1n.py b/doc/content/verification_and_validation/figures/comparison_ver-1n.py new file mode 120000 index 000000000..06807ffcc --- /dev/null +++ b/doc/content/verification_and_validation/figures/comparison_ver-1n.py @@ -0,0 +1 @@ +../../../../test/tests/ver-1n/comparison_ver-1n.py \ No newline at end of file diff --git a/doc/content/verification_and_validation/figures/comparison_ver-1o.py b/doc/content/verification_and_validation/figures/comparison_ver-1o.py new file mode 120000 index 000000000..11d37377a --- /dev/null +++ b/doc/content/verification_and_validation/figures/comparison_ver-1o.py @@ -0,0 +1 @@ +../../../../test/tests/ver-1o/comparison_ver-1o.py \ No newline at end of file diff --git a/doc/content/verification_and_validation/index.md b/doc/content/verification_and_validation/index.md index 16d8977c7..2f478ea26 100644 --- a/doc/content/verification_and_validation/index.md +++ b/doc/content/verification_and_validation/index.md @@ -37,6 +37,8 @@ TMAP8 also contains [example cases](examples/tmap_index.md), which showcase how | ver-1kc-2 | [Sieverts’ Law Boundaries with Chemical Reaction and No Volumetric Source](ver-1kc-2.md) | | ver-1kd | [Sieverts’ Law Boundaries with Chemical Reaction and Volumetric Source](ver-1kd.md) | | ver-1l | [Diffusion with Soret Effect](ver-1l.md) | +| ver-1n | [Voltage-Assisted Transport with Constant Source Boundary Condition](ver-1n.md) | +| ver-1o | [Joule Heating in a Slab under Applied Voltage](ver-1o.md) | # List of benchmarking cases diff --git a/doc/content/verification_and_validation/ver-1n.md b/doc/content/verification_and_validation/ver-1n.md new file mode 100644 index 000000000..88f88fd01 --- /dev/null +++ b/doc/content/verification_and_validation/ver-1n.md @@ -0,0 +1,96 @@ +# ver-1n + +# Voltage-Assisted Transport with Constant Source Boundary Condition + +## Case Description + +This verification case considers one-dimensional deuterium diffusion under an applied voltage through a semi-infinite proton-conducting ceramic (PCC) layer with a constant source at one boundary. PCC materials selectively transport hydrogen isotopes (protium, deuterium, and tritium) at temperatures around 600 $^\circ$C through ionic conduction of hydroxyl defects. This proton-hopping mechanism can be substantially enhanced by applying an electric field, enabling active pumping of hydrogen isotopes across the membrane, even without pressure gradients. + +The purpose of this case is to isolate and verify the voltage-assisted migration term in the Nernst--Planck equation. To simplify the comparison with the analytical solution, trapping is excluded, and Sieverts's boundary conditions are imposed on upstream and downstream surfaces. + +## Case Set Up + +This verification case models a one-dimensional PCC membrane with a thickness of 10 mm. +The upstream deuterium pressure is held constant, and the corresponding boundary concentration is described by Sieverts' law, + +\begin{equation} +\label{eq:p_c_relation} +C_0 = K_s \sqrt{P}, +\end{equation} + +where $C_0$ is the concentration on the upstream side, $K_s$ is the Sieverts' solubility, and $P$ is the upstream deuterium pressure. The downstream concentration is set to 0. + +In the PCC membrane, deuterium occupy charged hydroxyl defects. For the voltage-assisted transport verification, the transported deuterium species is treated as a positively charged mobile species with charge number $z=1$. The Nernst--Planck governing equation is + +\begin{equation} +\label{eq:Nernst_Plank} +\frac{\partial C}{\partial t} += +\nabla \cdot \left(D\nabla C\right) ++ +\nabla \cdot \left(\frac{CDF}{RT}\nabla \phi\right), +\end{equation} + +where $C$ is the concentration of deuterium in the sample, $D$ is the deuterium diffusivity, $F$ is the Faraday constant, $R$ is the ideal gas constant, $T$ is the temperature, $\phi$ is the electric potential applied across the sample, and $t$ is time. In this verification case, the equation is solved in one dimension, with $x$ representing the distance from the source boundary. + +The model parameters used in the verification case are shown in [ver-1n_set_up_values]. The deuterium solubility and diffusivity are taken from [!cite](hossain2020evaluation). The applied voltage is 20 V across the 10 mm membrane. + +!table id=ver-1n_set_up_values caption=Values of model properties for the Nernst--Planck verification problem. +| Parameter | Description | Value | Units | Reference | +| --------- | ------------------------------------ | ----------------------------------------------------------- | --------------------- | --------------------- | +| $R$ | gas constant | 8.31446261815324 | J/mol/K | [PhysicalConstants.h](https://physics.nist.gov/cgi-bin/cuu/Value?r) | +| $T$ | temperature | 773 | K | -- | +| $K_{s}$ | deuterium solubility in PCC | 6.38$\times 10^{23} \exp(-7726.21 / RT)$ | atom/m$^3$/Pa$^{0.5}$ | [!cite](hossain2020evaluation) | +| $P$ | upstream pressure | 100 | Pa | -- | +| $D$ | deuterium diffusivity in PCC | 2.44$\times 10^{-6} \exp(-71399.15 / RT)$ | m$^2$/s | [!cite](hossain2020evaluation) | +| $l$ | thickness of PCC sample | 10$\times 10^{-3}$ | m | [!cite](hossain2020evaluation) | +| $F$ | Faraday constant | 96485.33 | C/mol | -- | +| $\phi$ | voltage applied across PCC sample | 20 | V | -- | + +The verification focuses on two aspects of the solution: (1) the temporal evolution of deuterium concentration at fixed locations, and (2) the spatial concentration profile at fixed times. + +## Analytical Solution + +[!cite](luping1993rapid) provides the analytical solution for a semi-infinite slab as: + +\begin{equation} +\label{eq:Nernst_Plank_analytical} +C = \frac{C_0}{2}\left[ +\exp(ax)\,\text{erfc}\left(\frac{x + aDt}{2\sqrt{Dt}}\right) ++ +\text{erfc}\left(\frac{x - aDt}{2\sqrt{Dt}}\right) +\right], +\end{equation} + +where + +\begin{equation} +\label{eq:Nernst_Plank_analytical_constant_a} +a = \frac{zF}{RT}\frac{\partial \phi}{\partial x}. +\end{equation} + +Here, $z=1$ is the charge number of the mobile hydroxyl defect carrying the hydrogen isotope. The semi-infinite approximation is valid over the simulated time range because the characteristic diffusion length $\sqrt{Dt}\approx 0.14$ mm remains much smaller than the 10 mm membrane thickness. + +## Results + +[ver-1n_comparison_time] compares the TMAP8 results and the analytical solution as a function of time at $x = 0.1$ mm and $x = 0.5$ mm. The TMAP8 calculations closely match the analytical solution at both locations, with root mean square percentage error (RMSPE) values of 0.14% and 0.51%, respectively. + +!media comparison_ver-1n.py + image_name=ver-1n_comparison_time.png + style=width:50%;margin-bottom:2%;margin-left:auto;margin-right:auto + id=ver-1n_comparison_time + caption=Comparison of deuterium concentration as a function of time at $x = 0.1$ mm and $x = 0.5$ mm calculated by TMAP8 and by the analytical solution. +As a second check, [ver-1n_comparison_location] compares the concentration as a function of distance from the source at $t = 30$ s and $t = 500$ s. The TMAP8 calculations are in good agreement with the analytical solution, with RMSPE values of 0.86% and 0.11%, respectively. + +!media comparison_ver-1n.py + image_name=ver-1n_comparison_location.png + style=width:50%;margin-bottom:2%;margin-left:auto;margin-right:auto + id=ver-1n_comparison_location + caption=Comparison of deuterium concentration as a function of distance from the source at $t = 30$ s and $t = 500$ s calculated by TMAP8 and by the analytical solution. + +## Input Files + +!style halign=left +The input file for this case can be found at [/ver-1n.i]. More information about how this is used as a TMAP8 test can be found in the test specification file for this case [/ver-1n/tests]. + +!bibtex bibliography diff --git a/doc/content/verification_and_validation/ver-1o.md b/doc/content/verification_and_validation/ver-1o.md new file mode 100644 index 000000000..cea52babe --- /dev/null +++ b/doc/content/verification_and_validation/ver-1o.md @@ -0,0 +1,116 @@ +# ver-1o + +# Joule Heating in a Slab under Applied Voltage + +## Case Description + +This verification case isolates the temperature response caused by Joule heating in a one-dimensional proton-conducting ceramic (PCC) slab under an applied voltage. In PCC membranes, the electrical current induced by an applied voltage generates Joule heating, which can increase the local temperature and influence hydrogen-isotope transport. This case verifies the thermal part of the voltage-assisted PCC model independently against an analytical solution for a slab with a uniform volumetric heat source. + +This verification case uses a 5 mm half-domain that represents one half of the original 10 mm membrane. The left boundary is held at a prescribed wall temperature, and the right boundary is adiabatic to represent the symmetry plane at the slab centerline. The same electric field as the original full-domain configuration is retained by using a 20 V drop across the full 10 mm membrane. + +## Case Set Up + +The heat equation with a Joule heating source is + +\begin{equation} +\label{eq:ver-1o_heat} +\rho c_p \frac{\partial T}{\partial t} += \nabla \cdot \left(\kappa \nabla T\right) + \dot{q}_J, +\end{equation} + +where $\rho$ is the density, $c_p$ is the specific heat capacity, $T$ is the temperature, $t$ is the time, $\kappa$ is the thermal conductivity, and $\dot{q}_J$ is the volumetric Joule heating rate. The Joule heating is computed from a constant electrical conductivity and a constant applied electric field, + +\begin{equation} +\label{eq:ver-1o_joule} +\dot{q}_J = \sigma E^2 = \sigma \left(\frac{V_{\mathrm{full}}}{L_{\mathrm{full}}}\right)^2, +\end{equation} + +where $\sigma$ is the electrical conductivity, $E$ is the magnitude of the applied electric field, $V_{\mathrm{full}}$ is the voltage drop across the full slab, and $L_{\mathrm{full}}$ is the full slab thickness. The half-domain solved in TMAP8 has thickness $L = L_{\mathrm{full}}/2$, with boundary conditions + +\begin{equation} +\label{eq:ver-1o_bcs} +T = T_{\mathrm{wall}} \quad \mathrm{on}\ \Gamma_{\mathrm{wall}}, +\qquad +\nabla T \cdot \mathbf{n} = 0 \quad \mathrm{on}\ \Gamma_{\mathrm{sym}}, +\end{equation} +where $\mathbf{n}$ is the unit normal vector pointing perpendicular to the boundary surface. + +The imposed electric potential is + +\begin{equation} +\label{eq:ver-1o_voltage_profile} +\phi(\mathbf{x}) = V_{\mathrm{left}} - \mathbf{E} \cdot \left(\mathbf{x} - \mathbf{x}_{\mathrm{left}}\right), +\end{equation} + +where $\mathbf{E}$ is the constant applied electric-field vector and $\mathbf{x}_{\mathrm{left}}$ is a point on the prescribed-voltage boundary. In this one-dimensional verification case, this reduces to $\phi(x) = V_{\mathrm{left}} - (V_{\mathrm{full}}/L_{\mathrm{full}})x$. Because the conductivity and electric field are both constant, $\dot{q}_J$ is uniform in space. + +The model parameters used in this case are listed in [ver-1o_set_up_values]. The thermal properties of the BCY20 membrane are taken from [!cite](yamanaka2003thermophysical). The remaining parameters are selected to simplify the verification problem. The electrical conductivity is set to a constant reference value, and the thermal conductivity $\kappa$ is deliberately set lower than the physical BCY20 value to produce a meaningful temperature rise for verification purposes. + +!table id=ver-1o_set_up_values caption=Values of model properties for the Joule heating verification problem. +| Parameter | Description | Value | Units | Reference | +| --------- | ----------- | ----- | ----- | --------- | +| $T_{\mathrm{wall}}$ | wall temperature | 773 | K | -- | +| $L_{\mathrm{full}}$ | full PCC slab thickness | 10$\times 10^{-3}$ | m | -- | +| $L$ | simulated half-slab thickness | 5$\times 10^{-3}$ | m | -- | +| $V_{\mathrm{full}}$ | voltage applied across the full PCC slab | 20 | V | -- | +| $\sigma$ | electrical conductivity | 1$\times 10^{-3}$ | S/m | -- | +| $\kappa$ | thermal conductivity | 0.014 | W/(m$\cdot$K) | -- | +| $c_p$ | specific heat capacity | 120 | J/(mol$\cdot$K) | [!cite](yamanaka2003thermophysical) | +| $\rho$ | density | 6.154 | g/cm$^3$ | -- | + +The verification focuses on two aspects of the thermal solution: (1) the transient maximum temperature rise at the insulated symmetry plane, and (2) the transient spatial temperature profile at selected times. + +## Analytical Solution + +[!cite](miller1967transient) provides the analytical solution for the transient temperature solution under a constant volumetric heat source as: + +\begin{equation} +\label{eq:ver1o_transient} +T(x,t) = T_{\mathrm{wall}} + \frac{\dot{q}_J \ell^2}{\kappa} +\left[ + \frac{x}{\ell} - \frac{1}{2}\!\left(\frac{x}{\ell}\right)^{\!2} + - 2 \sum_{n=0}^{\infty} + \frac{\sin\!\left(\lambda_n x/\ell\right)}{\lambda_n^3} + \exp\!\left(-\lambda_n^2 \frac{\alpha t}{\ell^2}\right) +\right], +\end{equation} + +where $\alpha = \kappa/(\rho c_p)$ is the thermal diffusivity, and the eigenvalues $\lambda_n$ are described as + +\begin{equation} +\label{eq:ver1o_lambda} +\lambda_n = \left(n + \tfrac{1}{2}\right)\pi, \qquad n = 0,\, 1,\, 2,\, \ldots, +\end{equation} + +where $n$ is the integer mode number in the Fourier series. As $t \to \infty$, \cref{eq:ver1o_transient} reduces to the steady-state parabolic profile + +\begin{equation} +\label{eq:ver1o_ss} +T(x) = T_{\mathrm{wall}} + \frac{\dot{q}_J}{\kappa}\!\left(\ell x - \frac{x^2}{2}\right). +\end{equation} + + +## Results + +[ver-1o_comparison_temperature_history] compares the maximum temperature rise history, $\Delta T_{\max}(t)$, predicted by TMAP8 against the analytical solution evaluated at the insulated face $x = L$. The TMAP8 result closely matches the analytical solution, with a root mean square error (RMSPE) of 0.50%. + +!media comparison_ver-1o.py + image_name=ver-1o_comparison_temperature_history.png + style=width:50%;margin-bottom:2%;margin-left:auto;margin-right:auto + id=ver-1o_comparison_temperature_history + caption=Comparison of the TMAP8 transient maximum temperature rise history with the analytical half-slab solution for a constant Joule-heating source, prescribed surface temperature at $x = 0$, and insulated symmetry plane at $x = L$. + +[ver-1o_comparison_temperature_profiles] compares the transient temperature profiles at $t = 1000$ s and $t = 20000$ s with the analytical solution. The simulated profiles show excellent agreement with the analytical solution, with RMSPE values below 0.01% at both times. + +!media comparison_ver-1o.py + image_name=ver-1o_comparison_temperature_profiles.png + style=width:50%;margin-bottom:2%;margin-left:auto;margin-right:auto + id=ver-1o_comparison_temperature_profiles + caption=Comparison of the TMAP8 transient temperature profiles at $t = 1000$ s and $t = 20000$ s with the analytical half-slab solution. + +## Input Files + +!style halign=left +The input file for this case can be found at [/ver-1o.i]. More information about how this is used as a TMAP8 test can be found in the test specification file for this case [/ver-1o/tests]. + +!bibtex bibliography diff --git a/test/tests/ver-1n/comparison_ver-1n.py b/test/tests/ver-1n/comparison_ver-1n.py new file mode 100644 index 000000000..ad825f27a --- /dev/null +++ b/test/tests/ver-1n/comparison_ver-1n.py @@ -0,0 +1,365 @@ +import matplotlib.pyplot as plt +import numpy as np +from matplotlib import gridspec +from matplotlib.ticker import ScalarFormatter +import pandas as pd +from scipy import special +import os +import re + +# Define font size +plt.rcParams.update({"font.size": 15}) + +# Changes working directory to script directory (for consistent MooseDocs usage) +script_folder = os.path.dirname(__file__) +os.chdir(script_folder) + + +def get_repo_relative_path(test_path): + if "/tmap8/doc/" in script_folder.lower(): + return os.path.join("../../../../test/tests/ver-1n", test_path) + return os.path.join(".", test_path) + + +def strip_inline_comment(line): + in_quote = None + for index, character in enumerate(line): + if character in ("'", '"'): + if in_quote == character: + in_quote = None + elif in_quote is None: + in_quote = character + elif character == "#" and in_quote is None: + return line[:index] + return line + + +def search_parameter(path, visited, parameter_name): + if path in visited: + return None + visited.add(path) + with open(path, encoding="utf-8") as handle: + for line in handle: + stripped = strip_inline_comment(line).strip() + if stripped.startswith("!include "): + include_name = stripped.split(maxsplit=1)[1] + include_path = os.path.join(os.path.dirname(path), include_name) + result = search_parameter(include_path, visited, parameter_name) + if result is not None: + return result + if stripped.startswith(f"{parameter_name} ="): + return stripped.split("=", maxsplit=1)[1].strip().strip("'") + return None + + +def get_raw_parameter_value(parameter_name, source_file="ver-1n.i"): + parameters_file = get_repo_relative_path(source_file) + result = search_parameter(parameters_file, set(), parameter_name) + if result is None: + raise KeyError( + f"Could not find parameter {parameter_name} in {parameters_file}" + ) + return result + + +def get_raw_block_parameter(block_name, parameter_name, source_file="ver-1n.i"): + parameters_file = get_repo_relative_path(source_file) + active = False + depth = 0 + with open(parameters_file, encoding="utf-8") as handle: + for line in handle: + stripped = strip_inline_comment(line).strip() + if not active and stripped == f"[{block_name}]": + active = True + depth = 1 + continue + if not active: + continue + if stripped == "[]": + depth -= 1 + if depth == 0: + break + continue + if stripped.startswith("[") and stripped.endswith("]"): + depth += 1 + continue + if stripped.startswith(f"{parameter_name} ="): + return stripped.split("=", maxsplit=1)[1].strip().strip("'") + raise KeyError(f"Could not find parameter {parameter_name} in block {block_name}") + + +def evaluate_fparse_expression(expression, source_file): + safe_namespace = { + "exp": np.exp, + "sqrt": np.sqrt, + "pi": np.pi, + } + names = set(re.findall(r"\b[A-Za-z_][A-Za-z0-9_]*\b", expression)) + for name in names: + if name not in safe_namespace: + safe_namespace[name] = get_numeric_parameter(name, source_file) + return eval(expression, {"__builtins__": {}}, safe_namespace) + + +def resolve_fparse(value, source_file): + pattern = re.compile(r"\$\{fparse ([^{}]+)\}") + while True: + match = pattern.search(value) + if match is None: + return value + parsed_value = evaluate_fparse_expression(match.group(1), source_file) + value = value[: match.start()] + str(parsed_value) + value[match.end() :] + + +def parse_numeric_value(value, source_file="ver-1n.i", output_unit=None): + value = value.strip().strip("'") + if value.startswith("${") and value.endswith("}"): + inner_value = value[2:-1].strip() + if inner_value.startswith("units "): + units_expr = resolve_fparse( + inner_value[len("units ") :].strip(), source_file + ) + match = re.fullmatch(r"(.+?)\s+(\S+)(?:\s*->\s*(\S+))?", units_expr) + if not match: + raise ValueError(f"Unsupported units expression: {value}") + numeric_value = float(match.group(1)) + from_unit = match.group(2) + to_unit = match.group(3) + target_unit = output_unit + if target_unit is None: + if to_unit is None or from_unit == to_unit: + return numeric_value + target_unit = to_unit + if from_unit == target_unit: + return numeric_value + supported_conversions = { + ("mum", "m"): 1e-6, + ("mm", "m"): 1e-3, + ("m", "mum"): 1e6, + ("mum^2/s", "m^2/s"): 1e-12, + ("m^2/s", "mum^2/s"): 1e12, + ("at/mum^3/Pa^0.5", "atom/m^3/Pa^0.5"): 1e18, + } + factor = supported_conversions.get((from_unit, target_unit)) + if factor is None: + raise ValueError(f"Unsupported conversion in units expression: {value}") + return numeric_value * factor + if inner_value.startswith("fparse "): + return evaluate_fparse_expression( + inner_value[len("fparse ") :], source_file + ) + return get_numeric_parameter(inner_value, source_file, output_unit) + return float(value) + + +def get_numeric_parameter(parameter_name, source_file="ver-1n.i", output_unit=None): + raw_value = get_raw_parameter_value(parameter_name, source_file) + return parse_numeric_value(raw_value, source_file, output_unit) + + +def get_point_x_m(block_name, source_file="ver-1n.i"): + raw_point = get_raw_block_parameter(block_name, "point", source_file).strip("'") + return float(raw_point.split()[0]) * 1e-6 + + +# ========================== TMAP8 result - location ========================= # + +csv_folder = get_repo_relative_path("gold/ver-1n_vector_postproc_30s_line_0015.csv") +tmap_sol = pd.read_csv(csv_folder) +tmap_distance = tmap_sol["x"] / 1e6 # m +tmap_concentration_on_distance_case1 = ( + tmap_sol["deuterium_concentration_PCC"] * 1e18 +) # atom/m^3 + +csv_folder = get_repo_relative_path("gold/ver-1n_vector_postproc_500s_line_0066.csv") +tmap_sol = pd.read_csv(csv_folder) +tmap_concentration_on_distance_case2 = ( + tmap_sol["deuterium_concentration_PCC"] * 1e18 +) # atom/m^3 + +# ============================ TMAP8 result - time =========================== # + +csv_folder = get_repo_relative_path("gold/ver-1n_out.csv") +tmap_sol = pd.read_csv(csv_folder) +tmap_time = tmap_sol["time"] +tmap_concentration_on_time_case3 = tmap_sol["concentration_point1"] * 1e18 # atom/m^3 +tmap_concentration_on_time_case4 = tmap_sol["concentration_point2"] * 1e18 # atom/m^3 + + +# ============================ Analytical solution =========================== # +# reference from: +# Luping, Tang, and Lars-Olof Nilsson. +# "Rapid determination of the chloride diffusivity in concrete by applying an electric field." +# Materials Journal 89.1 (1993): 49-53. +def concentration_analytical_solution_semi_infinity( + x, t, concentration_high, constant_a, diffusivity +): + return ( + concentration_high + / 2 + * ( + np.exp(constant_a * x) + * special.erfc( + (x + constant_a * diffusivity * t) / 2 / np.sqrt(diffusivity * t) + ) + + special.erfc( + (x - constant_a * diffusivity * t) / 2 / np.sqrt(diffusivity * t) + ) + ) + ) + + +R = get_numeric_parameter("R") +Temperature = get_numeric_parameter("temperature") +Pressure_high = get_numeric_parameter("pressure_high") +V = get_numeric_parameter("V_current") +L = get_numeric_parameter("length", output_unit="m") +F = get_numeric_parameter("F") +diffusivity = get_numeric_parameter("diffusion_pre_PCC", output_unit="m^2/s") * np.exp( + -get_numeric_parameter("diffusion_energy_PCC") / R / Temperature +) # m^2/s +solubility = get_numeric_parameter( + "solubility_pre_PCC", output_unit="atom/m^3/Pa^0.5" +) * np.exp( + -get_numeric_parameter("solubility_energy_PCC") / R / Temperature +) # atom/m^3/Pa^0.5 +z = get_numeric_parameter("charge_number") +# derivative parameters +E = V / L +constant_a = z * F / R / Temperature * E +concentration_high = solubility * np.sqrt(Pressure_high) + +t_case1 = float(get_raw_block_parameter("vector_postproc_30s", "sync_times")) +t_case2 = float(get_raw_block_parameter("vector_postproc_500s", "sync_times")) +x_case3 = get_point_x_m("concentration_point1") +x_case4 = get_point_x_m("concentration_point2") +concentration_case1 = concentration_analytical_solution_semi_infinity( + tmap_distance, t_case1, concentration_high, constant_a, diffusivity +) +concentration_case2 = concentration_analytical_solution_semi_infinity( + tmap_distance, t_case2, concentration_high, constant_a, diffusivity +) +concentration_case3 = concentration_analytical_solution_semi_infinity( + x_case3, tmap_time, concentration_high, constant_a, diffusivity +) +concentration_case4 = concentration_analytical_solution_semi_infinity( + x_case4, tmap_time, concentration_high, constant_a, diffusivity +) + + +# ============================================================================ # +# Plot figure for verification on location +fig = plt.figure(figsize=[6.5, 5.5]) +gs = gridspec.GridSpec(1, 1) +ax = fig.add_subplot(gs[0]) + +ax.plot( + tmap_distance, + tmap_concentration_on_distance_case1, + label=f"TMAP8 - {t_case1:.0f}s", + c="C0", + alpha=0.3, +) # numerical solution +ax.plot( + tmap_distance, + concentration_case1, + c=f"C0", + linestyle="--", + label=f"Analytical results - {t_case1:.0f}s", +) +ax.plot( + tmap_distance, + tmap_concentration_on_distance_case2, + label=f"TMAP8 - {t_case2:.0f}s", + c="C1", + alpha=0.3, +) # numerical solution +ax.plot( + tmap_distance, + concentration_case2, + c=f"C1", + linestyle="--", + label=f"Analytical results - {t_case2:.0f}s", +) + +ax.set_xlabel("Location (m)") +ax.set_ylabel("Concentration (atom/m$^3$)") +ax.legend(loc=[0.35, 0.68]) +ax.set_xlim(left=0, right=0.00126) +ax.set_ylim(bottom=0, top=2.2e24) +x_formatter = ScalarFormatter(useMathText=True) +x_formatter.set_powerlimits((0, 0)) +ax.xaxis.set_major_formatter(x_formatter) +plt.grid(visible=True, which="major", color="0.65", linestyle="--", alpha=0.3) +RMSPE_case1 = ( + np.sqrt(np.mean((tmap_concentration_on_distance_case1 - concentration_case1) ** 2)) + / np.mean(concentration_case1) + * 100 +) +ax.text(1.5e-4, 0.5e24, "RMSPE = %.2f " % RMSPE_case1 + "%", fontweight="bold", c="C0") +RMSPE_case2 = ( + np.sqrt(np.mean((tmap_concentration_on_distance_case2 - concentration_case2) ** 2)) + / np.mean(concentration_case2) + * 100 +) +ax.text(7.0e-4, 0.75e24, "RMSPE = %.2f " % RMSPE_case2 + "%", fontweight="bold", c="C1") +ax.minorticks_on() +plt.savefig("ver-1n_comparison_location.png", bbox_inches="tight", dpi=300) +plt.close(fig) + +# ============================================================================ # +# Plot figure for verification on time +fig = plt.figure(figsize=[6.5, 5.5]) +gs = gridspec.GridSpec(1, 1) +ax = fig.add_subplot(gs[0]) + +ax.plot( + tmap_time, + tmap_concentration_on_time_case3, + label=r"TMAP8 - point1", + c="C0", + alpha=0.3, +) # numerical solution +ax.plot( + tmap_time, + concentration_case3, + c=f"C0", + linestyle="--", + label=f"Analytical results - point1", +) +ax.plot( + tmap_time, + tmap_concentration_on_time_case4, + label=r"TMAP8 - point2", + c="C1", + alpha=0.3, +) # numerical solution +ax.plot( + tmap_time, + concentration_case4, + c=f"C1", + linestyle="--", + label=f"Analytical results - point2", +) + +ax.set_xlabel("Time (s)") +ax.set_ylabel("Concentration (atom/m$^3$)") +ax.legend(loc=[0.05, 0.68]) +ax.set_xlim(left=0, right=1.02 * get_numeric_parameter("end_time")) +ax.set_ylim(bottom=0, top=2.8e24) +plt.grid(visible=True, which="major", color="0.65", linestyle="--", alpha=0.3) +RMSPE_case3 = ( + np.sqrt(np.mean((tmap_concentration_on_time_case3 - concentration_case3) ** 2)) + / np.mean(concentration_case3) + * 100 +) +ax.text(60, 0.5e24, "RMSPE = %.2f " % RMSPE_case3 + "%", fontweight="bold", c="C0") +RMSPE_case4 = ( + np.sqrt(np.mean((tmap_concentration_on_time_case4 - concentration_case4) ** 2)) + / np.mean(concentration_case4) + * 100 +) +ax.text(300, 0.1e24, "RMSPE = %.2f " % RMSPE_case4 + "%", fontweight="bold", c="C1") +ax.minorticks_on() +plt.savefig("ver-1n_comparison_time.png", bbox_inches="tight", dpi=300) +plt.close(fig) diff --git a/test/tests/ver-1n/gold/ver-1n_exodus.e b/test/tests/ver-1n/gold/ver-1n_exodus.e new file mode 100644 index 000000000..e2d11d6aa Binary files /dev/null and b/test/tests/ver-1n/gold/ver-1n_exodus.e differ diff --git a/test/tests/ver-1n/gold/ver-1n_out.csv b/test/tests/ver-1n/gold/ver-1n_out.csv new file mode 100644 index 000000000..294b04b87 --- /dev/null +++ b/test/tests/ver-1n/gold/ver-1n_out.csv @@ -0,0 +1,68 @@ +time,concentration_point1,concentration_point2 +0,0,0 +1,0.090979821594682,4.6006451579598e-31 +2.1,0.44766057204019,2.2796455219967e-30 +3.31,2.5581571397548,1.4410553453759e-29 +4.641,15.86811726809,1.5005207035966e-28 +6.1051,89.226318110741,4.3091066740704e-27 +7.71561,411.84315909978,5.7588300194368e-25 +9.487171,1527.0633946217,1.3362758723255e-22 +11.4358881,4611.2777304797,2.5320335534032e-20 +13.57947691,11631.682968576,3.3703135772215e-18 +15.937424601,25187.256410041,3.1301368942917e-16 +18.5311670611,48031.111235173,2.0735618563882e-14 +21.38428376721,82490.744232565,1.0064898094541e-12 +24.522712143931,130038.79562733,3.6734172353377e-11 +27.974983358324,191129.71128701,1.0319420019483e-09 +30,230233.79044689,3.0783481097901e-09 +33.797498335832,307103.36258217,3.988533383726e-08 +37.974746505248,394021.25514062,7.3139760272058e-07 +42.569719491605,489459.91874043,1.0226809739603e-05 +47.624189776598,591556.22324163,0.00011559746340291 +53.18410709009,698277.6726828,0.0010874138879246 +59.300016134932,807546.2625661,0.0086611370735738 +66.027516084258,917335.32559457,0.059149670161017 +73.427766028516,1025745.1675545,0.34993498597129 +81.5680409672,1131060.0838113,1.8094405391599 +90.522343399752,1231788.694619,8.2429214479073 +100.37207607556,1326689.6335051,33.323506938121 +110.37207607556,1408480.630153,108.17843328723 +120.37207607556,1477897.1517387,292.48404513402 +130.37207607556,1536935.9907629,688.76521004491 +140.37207607556,1587283.1493704,1454.6090331705 +150.37207607556,1630342.1276594,2810.7850992626 +160.37207607556,1667274.6458033,5042.5984721483 +170.37207607556,1699041.3172129,8493.0898171672 +180.37207607556,1726437.6736034,13548.301612461 +190.37207607556,1750124.4148251,20616.309838563 +200.37207607556,1770652.1712048,30102.717334893 +210.37207607556,1788481.5426622,42385.657347553 +220.37207607556,1803999.2518254,57793.105083146 +230.37207607556,1817531.1673716,76584.619628466 +240.37207607556,1829352.8295788,98938.766233285 +250.37207607556,1839697.9875602,124946.60454395 +260.37207607556,1848765.5521243,154610.91315887 +270.37207607556,1856725.2824637,187850.32321237 +280.37207607556,1863722.4570469,224507.26105064 +290.37207607556,1869881.7260871,264358.52021949 +300.37207607556,1875310.3016951,307127.34517058 +310.37207607556,1880100.6096916,352496.06011176 +320.37207607556,1884332.5019674,400118.47036371 +330.37207607556,1888075.1086302,449631.46598628 +340.37207607556,1891388.3937053,500665.44566467 +350.37207607556,1894324.4659408,552853.3403399 +360.37207607556,1896928.6865599,605838.14582091 +370.37207607556,1899240.6080668,659278.9716696 +380.37207607556,1901294.7720152,712855.68301553 +390.37207607556,1903121.388661,766272.25707033 +400.37207607556,1904746.9173979,819259.00180949 +410.37207607556,1906194.5636063,871573.79517687 +420.37207607556,1907484.7048914,923002.50330102 +430.37207607556,1908635.2575114,973358.72896644 +440.37207607556,1909661.9920208,1022483.0296429 +450.37207607556,1910578.8056844,1070241.7297983 +460.37207607556,1911397.9580112,1116525.4365213 +470.37207607556,1912130.2747548,1161247.3517333 +480.37207607556,1912785.3248961,1204341.4591909 +490.37207607556,1913371.5744287,1245760.6505317 +500,1913877.9273268,1284028.1022593 diff --git a/test/tests/ver-1n/gold/ver-1n_vector_postproc_30s_line_0015.csv b/test/tests/ver-1n/gold/ver-1n_vector_postproc_30s_line_0015.csv new file mode 100644 index 000000000..58f0d253d --- /dev/null +++ b/test/tests/ver-1n/gold/ver-1n_vector_postproc_30s_line_0015.csv @@ -0,0 +1,1002 @@ +deuterium_concentration_PCC,id,x,y,z +1918565.6588565,0,0,0,0 +1905347.9298721,1,1,0,0 +1892130.2008877,2,2,0,0 +1878912.4719032,3,3,0,0 +1865694.7429188,4,4,0,0 +1852477.0139344,5,5,0,0 +1839259.28495,6,6,0,0 +1826041.5559656,7,7,0,0 +1812823.8269812,8,8,0,0 +1799606.0979968,9,9,0,0 +1786388.3690124,10,10,0,0 +1770038.7502468,11,11,0,0 +1753689.1314812,12,12,0,0 +1737339.5127156,13,13,0,0 +1720989.89395,14,14,0,0 +1704640.2751844,15,15,0,0 +1688290.6564189,16,16,0,0 +1671941.0376533,17,17,0,0 +1655591.4188877,18,18,0,0 +1639241.8001221,19,19,0,0 +1622892.1813565,20,20,0,0 +1604033.1751817,21,21,0,0 +1585174.1690069,22,22,0,0 +1566315.1628321,23,23,0,0 +1547456.1566573,24,24,0,0 +1528597.1504825,25,25,0,0 +1509738.1443077,26,26,0,0 +1490879.1381329,27,27,0,0 +1472020.1319581,28,28,0,0 +1453161.1257833,29,29,0,0 +1434302.1196085,30,30,0,0 +1413852.5558354,31,31,0,0 +1393402.9920624,32,32,0,0 +1372953.4282893,33,33,0,0 +1352503.8645163,34,34,0,0 +1332054.3007432,35,35,0,0 +1311604.7369702,36,36,0,0 +1291155.1731971,37,37,0,0 +1270705.6094241,38,38,0,0 +1250256.045651,39,39,0,0 +1229806.481878,40,40,0,0 +1208869.4451288,41,41,0,0 +1187932.4083796,42,42,0,0 +1166995.3716304,43,43,0,0 +1146058.3348812,44,44,0,0 +1125121.298132,45,45,0,0 +1104184.2613828,46,46,0,0 +1083247.2246336,47,47,0,0 +1062310.1878844,48,48,0,0 +1041373.1511352,49,49,0,0 +1020436.114386,50,50,0,0 +1000148.1480564,51,51,0,0 +979860.18172687,52,52,0,0 +959572.21539732,53,53,0,0 +939284.24906777,54,54,0,0 +918996.28273822,55,55,0,0 +898708.31640868,56,56,0,0 +878420.35007913,57,57,0,0 +858132.38374958,58,58,0,0 +837844.41742003,59,59,0,0 +817556.45109048,60,60,0,0 +798928.2607375,61,61,0,0 +780300.07038452,62,62,0,0 +761671.88003154,63,63,0,0 +743043.68967856,64,64,0,0 +724415.49932558,65,65,0,0 +705787.3089726,66,66,0,0 +687159.11861962,67,67,0,0 +668530.92826664,68,68,0,0 +649902.73791366,69,69,0,0 +631274.54756068,70,70,0,0 +615057.62680902,71,71,0,0 +598840.70605737,72,72,0,0 +582623.78530571,73,73,0,0 +566406.86455406,74,74,0,0 +550189.9438024,75,75,0,0 +533973.02305074,76,76,0,0 +517756.10229909,77,77,0,0 +501539.18154743,78,78,0,0 +485322.26079578,79,79,0,0 +469105.34004412,80,80,0,0 +455714.01149588,81,81,0,0 +442322.68294764,82,82,0,0 +428931.35439939,83,83,0,0 +415540.02585115,84,84,0,0 +402148.69730291,85,85,0,0 +388757.36875467,86,86,0,0 +375366.04020642,87,87,0,0 +361974.71165818,88,88,0,0 +348583.38310994,89,89,0,0 +335192.0545617,90,90,0,0 +324696.22815022,91,91,0,0 +314200.40173873,92,92,0,0 +303704.57532725,93,93,0,0 +293208.74891577,94,94,0,0 +282712.92250429,95,95,0,0 +272217.09609281,96,96,0,0 +261721.26968133,97,97,0,0 +251225.44326985,98,98,0,0 +240729.61685837,99,99,0,0 +230233.79044689,100,100,0,0 +222417.24650896,101,101,0,0 +214600.70257103,102,102,0,0 +206784.1586331,103,103,0,0 +198967.61469517,104,104,0,0 +191151.07075723,105,105,0,0 +183334.5268193,106,106,0,0 +175517.98288137,107,107,0,0 +167701.43894344,108,108,0,0 +159884.89500551,109,109,0,0 +152068.35106758,110,110,0,0 +146528.32996483,111,111,0,0 +140988.30886207,112,112,0,0 +135448.28775931,113,113,0,0 +129908.26665655,114,114,0,0 +124368.24555379,115,115,0,0 +118828.22445104,116,116,0,0 +113288.20334828,117,117,0,0 +107748.18224552,118,118,0,0 +102208.16114276,119,119,0,0 +96668.140040004,120,120,0,0 +92923.476874806,121,121,0,0 +89178.813709609,122,122,0,0 +85434.150544412,123,123,0,0 +81689.487379215,124,124,0,0 +77944.824214018,125,125,0,0 +74200.161048821,126,126,0,0 +70455.497883624,127,127,0,0 +66710.834718426,128,128,0,0 +62966.171553229,129,129,0,0 +59221.508388032,130,130,0,0 +56801.637077186,131,131,0,0 +54381.76576634,132,132,0,0 +51961.894455494,133,133,0,0 +49542.023144649,134,134,0,0 +47122.151833803,135,135,0,0 +44702.280522957,136,136,0,0 +42282.409212111,137,137,0,0 +39862.537901265,138,138,0,0 +37442.666590419,139,139,0,0 +35022.795279573,140,140,0,0 +33523.688516841,141,141,0,0 +32024.581754108,142,142,0,0 +30525.474991375,143,143,0,0 +29026.368228642,144,144,0,0 +27527.261465909,145,145,0,0 +26028.154703176,146,146,0,0 +24529.047940444,147,147,0,0 +23029.941177711,148,148,0,0 +21530.834414978,149,149,0,0 +20031.727652245,150,150,0,0 +19138.897256981,151,151,0,0 +18246.066861717,152,152,0,0 +17353.236466453,153,153,0,0 +16460.406071189,154,154,0,0 +15567.575675925,155,155,0,0 +14674.74528066,156,156,0,0 +13781.914885396,157,157,0,0 +12889.084490132,158,158,0,0 +11996.254094868,159,159,0,0 +11103.423699604,160,160,0,0 +10590.748204744,161,161,0,0 +10078.072709885,162,162,0,0 +9565.397215025,163,163,0,0 +9052.7217201653,164,164,0,0 +8540.0462253057,165,165,0,0 +8027.370730446,166,166,0,0 +7514.6952355864,167,167,0,0 +7002.0197407268,168,168,0,0 +6489.3442458671,169,169,0,0 +5976.6687510075,170,170,0,0 +5692.0489599179,171,171,0,0 +5407.4291688283,172,172,0,0 +5122.8093777387,173,173,0,0 +4838.1895866491,174,174,0,0 +4553.5697955596,175,175,0,0 +4268.95000447,176,176,0,0 +3984.3302133804,177,177,0,0 +3699.7104222908,178,178,0,0 +3415.0906312012,179,179,0,0 +3130.4708401117,180,180,0,0 +2977.2932474813,181,181,0,0 +2824.115654851,182,182,0,0 +2670.9380622206,183,183,0,0 +2517.7604695902,184,184,0,0 +2364.5828769599,185,185,0,0 +2211.4052843295,186,186,0,0 +2058.2276916992,187,187,0,0 +1905.0500990688,188,188,0,0 +1751.8725064385,189,189,0,0 +1598.6949138081,190,190,0,0 +1518.5780125647,191,191,0,0 +1438.4611113213,192,192,0,0 +1358.344210078,193,193,0,0 +1278.2273088346,194,194,0,0 +1198.1104075912,195,195,0,0 +1117.9935063478,196,196,0,0 +1037.8766051044,197,197,0,0 +957.75970386103,198,198,0,0 +877.64280261765,199,199,0,0 +797.52590137426,200,200,0,0 +756.70636191956,201,201,0,0 +715.88682246486,202,202,0,0 +675.06728301015,203,203,0,0 +634.24774355545,204,204,0,0 +593.42820410075,205,205,0,0 +552.60866464604,206,206,0,0 +511.78912519134,207,207,0,0 +470.96958573663,208,208,0,0 +430.15004628193,209,209,0,0 +389.33050682723,210,210,0,0 +369.02722588112,211,211,0,0 +348.72394493502,212,212,0,0 +328.42066398891,213,213,0,0 +308.11738304281,214,214,0,0 +287.8141020967,215,215,0,0 +267.5108211506,216,216,0,0 +247.20754020449,217,217,0,0 +226.90425925839,218,218,0,0 +206.60097831228,219,219,0,0 +186.29769736618,220,220,0,0 +176.41941401511,221,221,0,0 +166.54113066405,222,222,0,0 +156.66284731299,223,223,0,0 +146.78456396192,224,224,0,0 +136.90628061086,225,225,0,0 +127.0279972598,226,226,0,0 +117.14971390874,227,227,0,0 +107.27143055767,228,228,0,0 +97.39314720661,229,229,0,0 +87.514863855547,230,230,0,0 +82.805049119554,231,231,0,0 +78.095234383561,232,232,0,0 +73.385419647568,233,233,0,0 +68.675604911574,234,234,0,0 +63.965790175581,235,235,0,0 +59.255975439588,236,236,0,0 +54.546160703595,237,237,0,0 +49.836345967601,238,238,0,0 +45.126531231608,239,239,0,0 +40.416716495615,240,240,0,0 +38.212498397202,241,241,0,0 +36.008280298789,242,242,0,0 +33.804062200376,243,243,0,0 +31.599844101963,244,244,0,0 +29.39562600355,245,245,0,0 +27.191407905137,246,246,0,0 +24.987189806724,247,247,0,0 +22.78297170831,248,248,0,0 +20.578753609897,249,249,0,0 +18.374535511484,250,250,0,0 +17.360410942319,251,251,0,0 +16.346286373154,252,252,0,0 +15.332161803989,253,253,0,0 +14.318037234824,254,254,0,0 +13.303912665658,255,255,0,0 +12.289788096493,256,256,0,0 +11.275663527328,257,257,0,0 +10.261538958163,258,258,0,0 +9.2474143889978,259,259,0,0 +8.2332898198326,260,260,0,0 +7.7739722108971,261,261,0,0 +7.3146546019616,262,262,0,0 +6.8553369930261,263,263,0,0 +6.3960193840906,264,264,0,0 +5.936701775155,265,265,0,0 +5.4773841662195,266,266,0,0 +5.018066557284,267,267,0,0 +4.5587489483485,268,268,0,0 +4.0994313394129,269,269,0,0 +3.6401137304774,270,270,0,0 +3.4350610238078,271,271,0,0 +3.2300083171383,272,272,0,0 +3.0249556104687,273,273,0,0 +2.8199029037991,274,274,0,0 +2.6148501971295,275,275,0,0 +2.4097974904599,276,276,0,0 +2.2047447837903,277,277,0,0 +1.9996920771208,278,278,0,0 +1.7946393704512,279,279,0,0 +1.5895866637816,280,280,0,0 +1.499253862302,281,281,0,0 +1.4089210608224,282,282,0,0 +1.3185882593429,283,283,0,0 +1.2282554578633,284,284,0,0 +1.1379226563837,285,285,0,0 +1.0475898549041,286,286,0,0 +0.95725705342454,287,287,0,0 +0.86692425194496,288,288,0,0 +0.77659145046538,289,289,0,0 +0.68625864898581,290,290,0,0 +0.64694839318784,291,291,0,0 +0.60763813738988,292,292,0,0 +0.56832788159192,293,293,0,0 +0.52901762579395,294,294,0,0 +0.48970736999599,295,295,0,0 +0.45039711419803,296,296,0,0 +0.41108685840006,297,297,0,0 +0.3717766026021,298,298,0,0 +0.33246634680414,299,299,0,0 +0.29315609100617,300,300,0,0 +0.27624157250871,301,301,0,0 +0.25932705401125,302,302,0,0 +0.24241253551379,303,303,0,0 +0.22549801701633,304,304,0,0 +0.20858349851887,305,305,0,0 +0.19166898002141,306,306,0,0 +0.17475446152395,307,307,0,0 +0.15783994302649,308,308,0,0 +0.14092542452903,309,309,0,0 +0.12401090603157,310,310,0,0 +0.11680839913599,311,311,0,0 +0.10960589224041,312,312,0,0 +0.10240338534483,313,313,0,0 +0.095200878449257,314,314,0,0 +0.087998371553679,315,315,0,0 +0.080795864658102,316,316,0,0 +0.073593357762524,317,317,0,0 +0.066390850866947,318,318,0,0 +0.059188343971369,319,319,0,0 +0.051985837075792,320,320,0,0 +0.048948294989187,321,321,0,0 +0.045910752902581,322,322,0,0 +0.042873210815976,323,323,0,0 +0.03983566872937,324,324,0,0 +0.036798126642765,325,325,0,0 +0.03376058455616,326,326,0,0 +0.030723042469554,327,327,0,0 +0.027685500382949,328,328,0,0 +0.024647958296343,329,329,0,0 +0.021610416209738,330,330,0,0 +0.020340747685455,331,331,0,0 +0.019071079161172,332,332,0,0 +0.017801410636889,333,333,0,0 +0.016531742112606,334,334,0,0 +0.015262073588323,335,335,0,0 +0.01399240506404,336,336,0,0 +0.012722736539757,337,337,0,0 +0.011453068015474,338,338,0,0 +0.010183399491191,339,339,0,0 +0.008913730966908,340,340,0,0 +0.0083873792406032,341,341,0,0 +0.0078610275142984,342,342,0,0 +0.0073346757879936,343,343,0,0 +0.0068083240616888,344,344,0,0 +0.0062819723353841,345,345,0,0 +0.0057556206090793,346,346,0,0 +0.0052292688827745,347,347,0,0 +0.0047029171564697,348,348,0,0 +0.0041765654301649,349,349,0,0 +0.0036502137038602,350,350,0,0 +0.0034336710138436,351,351,0,0 +0.003217128323827,352,352,0,0 +0.0030005856338104,353,353,0,0 +0.0027840429437938,354,354,0,0 +0.0025675002537773,355,355,0,0 +0.0023509575637607,356,356,0,0 +0.0021344148737441,357,357,0,0 +0.0019178721837275,358,358,0,0 +0.0017013294937109,359,359,0,0 +0.0014847868036944,360,360,0,0 +0.0013963292156265,361,361,0,0 +0.0013078716275587,362,362,0,0 +0.0012194140394909,363,363,0,0 +0.001130956451423,364,364,0,0 +0.0010424988633552,365,365,0,0 +0.00095404127528737,366,366,0,0 +0.00086558368721954,367,367,0,0 +0.00077712609915171,368,368,0,0 +0.00068866851108388,369,369,0,0 +0.00060021092301605,370,370,0,0 +0.00056431267224972,371,371,0,0 +0.0005284144214834,372,372,0,0 +0.00049251617071707,373,373,0,0 +0.00045661791995075,374,374,0,0 +0.00042071966918442,375,375,0,0 +0.0003848214184181,376,376,0,0 +0.00034892316765177,377,377,0,0 +0.00031302491688545,378,378,0,0 +0.00027712666611913,379,379,0,0 +0.0002412284153528,380,380,0,0 +0.00022674861077747,381,381,0,0 +0.00021226880620213,382,382,0,0 +0.0001977890016268,383,383,0,0 +0.00018330919705146,384,384,0,0 +0.00016882939247613,385,385,0,0 +0.0001543495879008,386,386,0,0 +0.00013986978332546,387,387,0,0 +0.00012538997875013,388,388,0,0 +0.00011091017417479,389,389,0,0 +9.643036959946e-05,390,390,0,0 +9.0622837446332e-05,391,391,0,0 +8.4815305293203e-05,392,392,0,0 +7.9007773140075e-05,393,393,0,0 +7.3200240986946e-05,394,394,0,0 +6.7392708833818e-05,395,395,0,0 +6.1585176680689e-05,396,396,0,0 +5.5777644527561e-05,397,397,0,0 +4.9970112374432e-05,398,398,0,0 +4.4162580221303e-05,399,399,0,0 +3.8355048068175e-05,400,400,0,0 +3.6038008167225e-05,401,401,0,0 +3.3720968266274e-05,402,402,0,0 +3.1403928365324e-05,403,403,0,0 +2.9086888464374e-05,404,404,0,0 +2.6769848563424e-05,405,405,0,0 +2.4452808662473e-05,406,406,0,0 +2.2135768761523e-05,407,407,0,0 +1.9818728860573e-05,408,408,0,0 +1.7501688959623e-05,409,409,0,0 +1.5184649058672e-05,410,410,0,0 +1.4264732744388e-05,411,411,0,0 +1.3344816430104e-05,412,412,0,0 +1.242490011582e-05,413,413,0,0 +1.1504983801537e-05,414,414,0,0 +1.0585067487253e-05,415,415,0,0 +9.6651511729687e-06,416,416,0,0 +8.7452348586848e-06,417,417,0,0 +7.8253185444008e-06,418,418,0,0 +6.9054022301169e-06,419,419,0,0 +5.985485915833e-06,420,420,0,0 +5.6219195649198e-06,421,421,0,0 +5.2583532140066e-06,422,422,0,0 +4.8947868630934e-06,423,423,0,0 +4.5312205121802e-06,424,424,0,0 +4.1676541612669e-06,425,425,0,0 +3.8040878103537e-06,426,426,0,0 +3.4405214594405e-06,427,427,0,0 +3.0769551085273e-06,428,428,0,0 +2.7133887576141e-06,429,429,0,0 +2.3498224067009e-06,430,430,0,0 +2.206743378904e-06,431,431,0,0 +2.063664351107e-06,432,432,0,0 +1.92058532331e-06,433,433,0,0 +1.7775062955131e-06,434,434,0,0 +1.6344272677161e-06,435,435,0,0 +1.4913482399191e-06,436,436,0,0 +1.3482692121222e-06,437,437,0,0 +1.2051901843252e-06,438,438,0,0 +1.0621111565283e-06,439,439,0,0 +9.190321287313e-07,440,440,0,0 +8.629465346821e-07,441,441,0,0 +8.0686094063289e-07,442,442,0,0 +7.5077534658368e-07,443,443,0,0 +6.9468975253447e-07,444,444,0,0 +6.3860415848526e-07,445,445,0,0 +5.8251856443605e-07,446,446,0,0 +5.2643297038685e-07,447,447,0,0 +4.7034737633764e-07,448,448,0,0 +4.1426178228843e-07,449,449,0,0 +3.5817618823922e-07,450,450,0,0 +3.3627203811658e-07,451,451,0,0 +3.1436788799393e-07,452,452,0,0 +2.9246373787129e-07,453,453,0,0 +2.7055958774864e-07,454,454,0,0 +2.48655437626e-07,455,455,0,0 +2.2675128750335e-07,456,456,0,0 +2.0484713738071e-07,457,457,0,0 +1.8294298725806e-07,458,458,0,0 +1.6103883713542e-07,459,459,0,0 +1.3913468701277e-07,460,460,0,0 +1.3060939425958e-07,461,461,0,0 +1.2208410150638e-07,462,462,0,0 +1.1355880875319e-07,463,463,0,0 +1.0503351599999e-07,464,464,0,0 +9.6508223246797e-08,465,465,0,0 +8.7982930493603e-08,466,466,0,0 +7.9457637740408e-08,467,467,0,0 +7.0932344987213e-08,468,468,0,0 +6.2407052234019e-08,469,469,0,0 +5.3881759480824e-08,470,470,0,0 +5.057425709079e-08,471,471,0,0 +4.7266754700756e-08,472,472,0,0 +4.3959252310722e-08,473,473,0,0 +4.0651749920689e-08,474,474,0,0 +3.7344247530655e-08,475,475,0,0 +3.4036745140621e-08,476,476,0,0 +3.0729242750587e-08,477,477,0,0 +2.7421740360553e-08,478,478,0,0 +2.4114237970519e-08,479,479,0,0 +2.0806735580485e-08,480,480,0,0 +1.952737814387e-08,481,481,0,0 +1.8248020707254e-08,482,482,0,0 +1.6968663270638e-08,483,483,0,0 +1.5689305834022e-08,484,484,0,0 +1.4409948397407e-08,485,485,0,0 +1.3130590960791e-08,486,486,0,0 +1.1851233524175e-08,487,487,0,0 +1.057187608756e-08,488,488,0,0 +9.2925186509438e-09,489,489,0,0 +8.0131612143281e-09,490,490,0,0 +7.5196799038743e-09,491,491,0,0 +7.0261985934205e-09,492,492,0,0 +6.5327172829667e-09,493,493,0,0 +6.0392359725129e-09,494,494,0,0 +5.5457546620591e-09,495,495,0,0 +5.0522733516053e-09,496,496,0,0 +4.5587920411515e-09,497,497,0,0 +4.0653107306977e-09,498,498,0,0 +3.5718294202439e-09,499,499,0,0 +3.0783481097901e-09,500,500,0,0 +2.8884954582313e-09,501,501,0,0 +2.6986428066724e-09,502,502,0,0 +2.5087901551136e-09,503,503,0,0 +2.3189375035547e-09,504,504,0,0 +2.1290848519959e-09,505,505,0,0 +1.939232200437e-09,506,506,0,0 +1.7493795488782e-09,507,507,0,0 +1.5595268973193e-09,508,508,0,0 +1.3696742457605e-09,509,509,0,0 +1.1798215942016e-09,510,510,0,0 +1.1069590766249e-09,511,511,0,0 +1.0340965590481e-09,512,512,0,0 +9.6123404147134e-10,513,513,0,0 +8.8837152389458e-10,514,514,0,0 +8.1550900631782e-10,515,515,0,0 +7.4264648874106e-10,516,516,0,0 +6.697839711643e-10,517,517,0,0 +5.9692145358754e-10,518,518,0,0 +5.2405893601078e-10,519,519,0,0 +4.5119641843402e-10,520,520,0,0 +4.2329653386187e-10,521,521,0,0 +3.9539664928972e-10,522,522,0,0 +3.6749676471757e-10,523,523,0,0 +3.3959688014542e-10,524,524,0,0 +3.1169699557327e-10,525,525,0,0 +2.8379711100112e-10,526,526,0,0 +2.5589722642897e-10,527,527,0,0 +2.2799734185682e-10,528,528,0,0 +2.0009745728467e-10,529,529,0,0 +1.7219757271252e-10,530,530,0,0 +1.6153711809532e-10,531,531,0,0 +1.5087666347812e-10,532,532,0,0 +1.4021620886092e-10,533,533,0,0 +1.2955575424372e-10,534,534,0,0 +1.1889529962652e-10,535,535,0,0 +1.0823484500932e-10,536,536,0,0 +9.7574390392122e-11,537,537,0,0 +8.6913935774922e-11,538,538,0,0 +7.6253481157723e-11,539,539,0,0 +6.5593026540523e-11,540,540,0,0 +6.1527806707071e-11,541,541,0,0 +5.7462586873618e-11,542,542,0,0 +5.3397367040166e-11,543,543,0,0 +4.9332147206713e-11,544,544,0,0 +4.5266927373261e-11,545,545,0,0 +4.1201707539808e-11,546,546,0,0 +3.7136487706356e-11,547,547,0,0 +3.3071267872903e-11,548,548,0,0 +2.9006048039451e-11,549,549,0,0 +2.4940828205998e-11,550,550,0,0 +2.3393497567912e-11,551,551,0,0 +2.1846166929825e-11,552,552,0,0 +2.0298836291738e-11,553,553,0,0 +1.8751505653652e-11,554,554,0,0 +1.7204175015565e-11,555,555,0,0 +1.5656844377479e-11,556,556,0,0 +1.4109513739392e-11,557,557,0,0 +1.2562183101305e-11,558,558,0,0 +1.1014852463219e-11,559,559,0,0 +9.4675218251322e-12,560,560,0,0 +8.879592704199e-12,561,561,0,0 +8.2916635832657e-12,562,562,0,0 +7.7037344623324e-12,563,563,0,0 +7.1158053413991e-12,564,564,0,0 +6.5278762204659e-12,565,565,0,0 +5.9399470995326e-12,566,566,0,0 +5.3520179785993e-12,567,567,0,0 +4.764088857666e-12,568,568,0,0 +4.1761597367328e-12,569,569,0,0 +3.5882306157995e-12,570,570,0,0 +3.3652033150432e-12,571,571,0,0 +3.142176014287e-12,572,572,0,0 +2.9191487135307e-12,573,573,0,0 +2.6961214127744e-12,574,574,0,0 +2.4730941120182e-12,575,575,0,0 +2.2500668112619e-12,576,576,0,0 +2.0270395105057e-12,577,577,0,0 +1.8040122097494e-12,578,578,0,0 +1.5809849089931e-12,579,579,0,0 +1.3579576082369e-12,580,580,0,0 +1.2734827489568e-12,581,581,0,0 +1.1890078896768e-12,582,582,0,0 +1.1045330303967e-12,583,583,0,0 +1.0200581711166e-12,584,584,0,0 +9.3558331183656e-13,585,585,0,0 +8.511084525565e-13,586,586,0,0 +7.6663359327643e-13,587,587,0,0 +6.8215873399636e-13,588,588,0,0 +5.976838747163e-13,589,589,0,0 +5.1320901543623e-13,590,590,0,0 +4.8125867643218e-13,591,591,0,0 +4.4930833742812e-13,592,592,0,0 +4.1735799842406e-13,593,593,0,0 +3.8540765942e-13,594,594,0,0 +3.5345732041594e-13,595,595,0,0 +3.2150698141189e-13,596,596,0,0 +2.8955664240783e-13,597,597,0,0 +2.5760630340377e-13,598,598,0,0 +2.2565596439971e-13,599,599,0,0 +1.9370562539565e-13,600,600,0,0 +1.8163745734024e-13,601,601,0,0 +1.6956928928482e-13,602,602,0,0 +1.575011212294e-13,603,603,0,0 +1.4543295317398e-13,604,604,0,0 +1.3336478511856e-13,605,605,0,0 +1.2129661706315e-13,606,606,0,0 +1.0922844900773e-13,607,607,0,0 +9.7160280952311e-14,608,608,0,0 +8.5092112896893e-14,609,609,0,0 +7.3023944841475e-14,610,610,0,0 +6.847132021722e-14,611,611,0,0 +6.3918695592965e-14,612,612,0,0 +5.936607096871e-14,613,613,0,0 +5.4813446344455e-14,614,614,0,0 +5.02608217202e-14,615,615,0,0 +4.5708197095945e-14,616,616,0,0 +4.1155572471689e-14,617,617,0,0 +3.6602947847434e-14,618,618,0,0 +3.2050323223179e-14,619,619,0,0 +2.7497698598924e-14,620,620,0,0 +2.5782275490081e-14,621,621,0,0 +2.4066852381238e-14,622,622,0,0 +2.2351429272394e-14,623,623,0,0 +2.0636006163551e-14,624,624,0,0 +1.8920583054708e-14,625,625,0,0 +1.7205159945865e-14,626,626,0,0 +1.5489736837021e-14,627,627,0,0 +1.3774313728178e-14,628,628,0,0 +1.2058890619335e-14,629,629,0,0 +1.0343467510491e-14,630,630,0,0 +9.6978108447076e-15,631,631,0,0 +9.0521541789238e-15,632,632,0,0 +8.40649751314e-15,633,633,0,0 +7.7608408473562e-15,634,634,0,0 +7.1151841815724e-15,635,635,0,0 +6.4695275157886e-15,636,636,0,0 +5.8238708500048e-15,637,637,0,0 +5.178214184221e-15,638,638,0,0 +4.5325575184372e-15,639,639,0,0 +3.8869008526534e-15,640,640,0,0 +3.6441376014037e-15,641,641,0,0 +3.4013743501539e-15,642,642,0,0 +3.1586110989042e-15,643,643,0,0 +2.9158478476544e-15,644,644,0,0 +2.6730845964047e-15,645,645,0,0 +2.4303213451549e-15,646,646,0,0 +2.1875580939052e-15,647,647,0,0 +1.9447948426555e-15,648,648,0,0 +1.7020315914057e-15,649,649,0,0 +1.459268340156e-15,650,650,0,0 +1.3680791879938e-15,651,651,0,0 +1.2768900358316e-15,652,652,0,0 +1.1857008836694e-15,653,653,0,0 +1.0945117315073e-15,654,654,0,0 +1.0033225793451e-15,655,655,0,0 +9.1213342718296e-16,656,656,0,0 +8.2094427502079e-16,657,657,0,0 +7.2975512285862e-16,658,658,0,0 +6.3856597069645e-16,659,659,0,0 +5.4737681853429e-16,660,660,0,0 +5.1315457132869e-16,661,661,0,0 +4.7893232412309e-16,662,662,0,0 +4.4471007691749e-16,663,663,0,0 +4.104878297119e-16,664,664,0,0 +3.762655825063e-16,665,665,0,0 +3.420433353007e-16,666,666,0,0 +3.078210880951e-16,667,667,0,0 +2.7359884088951e-16,668,668,0,0 +2.3937659368391e-16,669,669,0,0 +2.0515434647831e-16,670,670,0,0 +1.9232207674135e-16,671,671,0,0 +1.794898070044e-16,672,672,0,0 +1.6665753726744e-16,673,673,0,0 +1.5382526753049e-16,674,674,0,0 +1.4099299779353e-16,675,675,0,0 +1.2816072805658e-16,676,676,0,0 +1.1532845831962e-16,677,677,0,0 +1.0249618858266e-16,678,678,0,0 +8.9663918845708e-17,679,679,0,0 +7.6831649108752e-17,680,680,0,0 +7.2023798488912e-17,681,681,0,0 +6.7215947869071e-17,682,682,0,0 +6.240809724923e-17,683,683,0,0 +5.760024662939e-17,684,684,0,0 +5.2792396009549e-17,685,685,0,0 +4.7984545389709e-17,686,686,0,0 +4.3176694769868e-17,687,687,0,0 +3.8368844150028e-17,688,688,0,0 +3.3560993530187e-17,689,689,0,0 +2.8753142910347e-17,690,690,0,0 +2.6953143211914e-17,691,691,0,0 +2.5153143513482e-17,692,692,0,0 +2.3353143815049e-17,693,693,0,0 +2.1553144116617e-17,694,694,0,0 +1.9753144418184e-17,695,695,0,0 +1.7953144719752e-17,696,696,0,0 +1.6153145021319e-17,697,697,0,0 +1.4353145322887e-17,698,698,0,0 +1.2553145624454e-17,699,699,0,0 +1.0753145926022e-17,700,700,0,0 +1.0079722900597e-17,701,701,0,0 +9.4062998751723e-18,702,702,0,0 +8.7328768497474e-18,703,703,0,0 +8.0594538243226e-18,704,704,0,0 +7.3860307988978e-18,705,705,0,0 +6.712607773473e-18,706,706,0,0 +6.0391847480482e-18,707,707,0,0 +5.3657617226233e-18,708,708,0,0 +4.6923386971985e-18,709,709,0,0 +4.0189156717737e-18,710,710,0,0 +3.767138496479e-18,711,711,0,0 +3.5153613211843e-18,712,712,0,0 +3.2635841458896e-18,713,713,0,0 +3.0118069705949e-18,714,714,0,0 +2.7600297953002e-18,715,715,0,0 +2.5082526200055e-18,716,716,0,0 +2.2564754447108e-18,717,717,0,0 +2.0046982694161e-18,718,718,0,0 +1.7529210941214e-18,719,719,0,0 +1.5011439188267e-18,720,720,0,0 +1.4070687016942e-18,721,721,0,0 +1.3129934845618e-18,722,722,0,0 +1.2189182674293e-18,723,723,0,0 +1.1248430502968e-18,724,724,0,0 +1.0307678331643e-18,725,725,0,0 +9.3669261603185e-19,726,726,0,0 +8.4261739889937e-19,727,727,0,0 +7.4854218176689e-19,728,728,0,0 +6.5446696463441e-19,729,729,0,0 +5.6039174750193e-19,730,730,0,0 +5.2526151073052e-19,731,731,0,0 +4.9013127395912e-19,732,732,0,0 +4.550010371877e-19,733,733,0,0 +4.198708004163e-19,734,734,0,0 +3.8474056364489e-19,735,735,0,0 +3.4961032687348e-19,736,736,0,0 +3.1448009010207e-19,737,737,0,0 +2.7934985333066e-19,738,738,0,0 +2.4421961655926e-19,739,739,0,0 +2.0908937978785e-19,740,740,0,0 +1.9597797101937e-19,741,741,0,0 +1.8286656225089e-19,742,742,0,0 +1.6975515348241e-19,743,743,0,0 +1.5664374471393e-19,744,744,0,0 +1.4353233594545e-19,745,745,0,0 +1.3042092717697e-19,746,746,0,0 +1.1730951840849e-19,747,747,0,0 +1.0419810964001e-19,748,748,0,0 +9.1086700871527e-20,749,749,0,0 +7.7975292103047e-20,750,750,0,0 +7.3084327071591e-20,751,751,0,0 +6.8193362040135e-20,752,752,0,0 +6.3302397008679e-20,753,753,0,0 +5.8411431977223e-20,754,754,0,0 +5.3520466945766e-20,755,755,0,0 +4.862950191431e-20,756,756,0,0 +4.3738536882854e-20,757,757,0,0 +3.8847571851398e-20,758,758,0,0 +3.3956606819942e-20,759,759,0,0 +2.9065641788486e-20,760,760,0,0 +2.7242038959685e-20,761,761,0,0 +2.5418436130883e-20,762,762,0,0 +2.3594833302082e-20,763,763,0,0 +2.1771230473281e-20,764,764,0,0 +1.994762764448e-20,765,765,0,0 +1.8124024815679e-20,766,766,0,0 +1.6300421986878e-20,767,767,0,0 +1.4476819158076e-20,768,768,0,0 +1.2653216329275e-20,769,769,0,0 +1.0829613500474e-20,770,770,0,0 +1.0149988750164e-20,771,771,0,0 +9.4703639998532e-21,772,772,0,0 +8.7907392495428e-21,773,773,0,0 +8.1111144992324e-21,774,774,0,0 +7.431489748922e-21,775,775,0,0 +6.7518649986116e-21,776,776,0,0 +6.0722402483012e-21,777,777,0,0 +5.3926154979907e-21,778,778,0,0 +4.7129907476803e-21,779,779,0,0 +4.0333659973699e-21,780,780,0,0 +3.7801895607515e-21,781,781,0,0 +3.527013124133e-21,782,782,0,0 +3.2738366875146e-21,783,783,0,0 +3.0206602508961e-21,784,784,0,0 +2.7674838142776e-21,785,785,0,0 +2.5143073776592e-21,786,786,0,0 +2.2611309410407e-21,787,787,0,0 +2.0079545044223e-21,788,788,0,0 +1.7547780678038e-21,789,789,0,0 +1.5016016311853e-21,790,790,0,0 +1.4073250679257e-21,791,791,0,0 +1.3130485046661e-21,792,792,0,0 +1.2187719414065e-21,793,793,0,0 +1.1244953781468e-21,794,794,0,0 +1.0302188148872e-21,795,795,0,0 +9.359422516276e-22,796,796,0,0 +8.4166568836797e-22,797,797,0,0 +7.4738912510835e-22,798,798,0,0 +6.5311256184872e-22,799,799,0,0 +5.588359985891e-22,800,800,0,0 +5.2374295254257e-22,801,801,0,0 +4.8864990649604e-22,802,802,0,0 +4.5355686044951e-22,803,803,0,0 +4.1846381440298e-22,804,804,0,0 +3.8337076835645e-22,805,805,0,0 +3.4827772230992e-22,806,806,0,0 +3.1318467626339e-22,807,807,0,0 +2.7809163021686e-22,808,808,0,0 +2.4299858417033e-22,809,809,0,0 +2.079055381238e-22,810,810,0,0 +1.9484728429237e-22,811,811,0,0 +1.8178903046095e-22,812,812,0,0 +1.6873077662952e-22,813,813,0,0 +1.556725227981e-22,814,814,0,0 +1.4261426896668e-22,815,815,0,0 +1.2955601513525e-22,816,816,0,0 +1.1649776130383e-22,817,817,0,0 +1.0343950747241e-22,818,818,0,0 +9.0381253640983e-23,819,819,0,0 +7.732299980956e-23,820,820,0,0 +7.246558596021e-23,821,821,0,0 +6.7608172110861e-23,822,822,0,0 +6.2750758261512e-23,823,823,0,0 +5.7893344412162e-23,824,824,0,0 +5.3035930562813e-23,825,825,0,0 +4.8178516713464e-23,826,826,0,0 +4.3321102864114e-23,827,827,0,0 +3.8463689014765e-23,828,828,0,0 +3.3606275165416e-23,829,829,0,0 +2.8748861316067e-23,830,830,0,0 +2.6942561896926e-23,831,831,0,0 +2.5136262477785e-23,832,832,0,0 +2.3329963058645e-23,833,833,0,0 +2.1523663639504e-23,834,834,0,0 +1.9717364220363e-23,835,835,0,0 +1.7911064801223e-23,836,836,0,0 +1.6104765382082e-23,837,837,0,0 +1.4298465962941e-23,838,838,0,0 +1.2492166543801e-23,839,839,0,0 +1.068586712466e-23,840,840,0,0 +1.0014365365424e-23,841,841,0,0 +9.3428636061881e-24,842,842,0,0 +8.6713618469521e-24,843,843,0,0 +7.999860087716e-24,844,844,0,0 +7.32835832848e-24,845,845,0,0 +6.656856569244e-24,846,846,0,0 +5.985354810008e-24,847,847,0,0 +5.313853050772e-24,848,848,0,0 +4.6423512915359e-24,849,849,0,0 +3.9708495322999e-24,850,850,0,0 +3.7212837801637e-24,851,851,0,0 +3.4717180280275e-24,852,852,0,0 +3.2221522758913e-24,853,853,0,0 +2.9725865237551e-24,854,854,0,0 +2.7230207716189e-24,855,855,0,0 +2.4734550194827e-24,856,856,0,0 +2.2238892673465e-24,857,857,0,0 +1.9743235152103e-24,858,858,0,0 +1.7247577630741e-24,859,859,0,0 +1.4751920109379e-24,860,860,0,0 +1.3824641132412e-24,861,861,0,0 +1.2897362155446e-24,862,862,0,0 +1.1970083178479e-24,863,863,0,0 +1.1042804201513e-24,864,864,0,0 +1.0115525224546e-24,865,865,0,0 +9.1882462475796e-25,866,866,0,0 +8.2609672706131e-25,867,867,0,0 +7.3336882936466e-25,868,868,0,0 +6.4064093166801e-25,869,869,0,0 +5.4791303397136e-25,870,870,0,0 +5.1346771809596e-25,871,871,0,0 +4.7902240222056e-25,872,872,0,0 +4.4457708634516e-25,873,873,0,0 +4.1013177046975e-25,874,874,0,0 +3.7568645459435e-25,875,875,0,0 +3.4124113871895e-25,876,876,0,0 +3.0679582284355e-25,877,877,0,0 +2.7235050696815e-25,878,878,0,0 +2.3790519109275e-25,879,879,0,0 +2.0345987521735e-25,880,880,0,0 +1.9066751773855e-25,881,881,0,0 +1.7787516025976e-25,882,882,0,0 +1.6508280278097e-25,883,883,0,0 +1.5229044530217e-25,884,884,0,0 +1.3949808782338e-25,885,885,0,0 +1.2670573034459e-25,886,886,0,0 +1.1391337286579e-25,887,887,0,0 +1.01121015387e-25,888,888,0,0 +8.8328657908205e-26,889,889,0,0 +7.5536300429411e-26,890,890,0,0 +7.078647551756e-26,891,891,0,0 +6.603665060571e-26,892,892,0,0 +6.1286825693859e-26,893,893,0,0 +5.6537000782009e-26,894,894,0,0 +5.1787175870158e-26,895,895,0,0 +4.7037350958308e-26,896,896,0,0 +4.2287526046457e-26,897,897,0,0 +3.7537701134607e-26,898,898,0,0 +3.2787876222756e-26,899,899,0,0 +2.8038051310906e-26,900,900,0,0 +2.6274789533795e-26,901,901,0,0 +2.4511527756685e-26,902,902,0,0 +2.2748265979574e-26,903,903,0,0 +2.0985004202464e-26,904,904,0,0 +1.9221742425353e-26,905,905,0,0 +1.7458480648243e-26,906,906,0,0 +1.5695218871132e-26,907,907,0,0 +1.3931957094022e-26,908,908,0,0 +1.2168695316911e-26,909,909,0,0 +1.0405433539801e-26,910,910,0,0 +9.7509881605514e-27,911,911,0,0 +9.0965427813018e-27,912,912,0,0 +8.4420974020522e-27,913,913,0,0 +7.7876520228026e-27,914,914,0,0 +7.133206643553e-27,915,915,0,0 +6.4787612643034e-27,916,916,0,0 +5.8243158850538e-27,917,917,0,0 +5.1698705058042e-27,918,918,0,0 +4.5154251265546e-27,919,919,0,0 +3.860979747305e-27,920,920,0,0 +3.6181217762059e-27,921,921,0,0 +3.3752638051068e-27,922,922,0,0 +3.1324058340077e-27,923,923,0,0 +2.8895478629086e-27,924,924,0,0 +2.6466898918095e-27,925,925,0,0 +2.4038319207103e-27,926,926,0,0 +2.1609739496112e-27,927,927,0,0 +1.9181159785121e-27,928,928,0,0 +1.675258007413e-27,929,929,0,0 +1.4324000363139e-27,930,930,0,0 +1.3422930862254e-27,931,931,0,0 +1.252186136137e-27,932,932,0,0 +1.1620791860486e-27,933,933,0,0 +1.0719722359602e-27,934,934,0,0 +9.8186528587177e-28,935,935,0,0 +8.9175833578335e-28,936,936,0,0 +8.0165138569493e-28,937,937,0,0 +7.1154443560651e-28,938,938,0,0 +6.2143748551809e-28,939,939,0,0 +5.3133053542967e-28,940,940,0,0 +4.979036790362e-28,941,941,0,0 +4.6447682264272e-28,942,942,0,0 +4.3104996624925e-28,943,943,0,0 +3.9762310985578e-28,944,944,0,0 +3.6419625346231e-28,945,945,0,0 +3.3076939706883e-28,946,946,0,0 +2.9734254067536e-28,947,947,0,0 +2.6391568428189e-28,948,948,0,0 +2.3048882788842e-28,949,949,0,0 +1.9706197149494e-28,950,950,0,0 +1.8466349896962e-28,951,951,0,0 +1.722650264443e-28,952,952,0,0 +1.5986655391898e-28,953,953,0,0 +1.4746808139365e-28,954,954,0,0 +1.3506960886833e-28,955,955,0,0 +1.2267113634301e-28,956,956,0,0 +1.1027266381769e-28,957,957,0,0 +9.7874191292364e-29,958,958,0,0 +8.5475718767041e-29,959,959,0,0 +7.3077246241719e-29,960,960,0,0 +6.8479128643387e-29,961,961,0,0 +6.3881011045055e-29,962,962,0,0 +5.9282893446722e-29,963,963,0,0 +5.468477584839e-29,964,964,0,0 +5.0086658250058e-29,965,965,0,0 +4.5488540651725e-29,966,966,0,0 +4.0890423053393e-29,967,967,0,0 +3.6292305455061e-29,968,968,0,0 +3.1694187856729e-29,969,969,0,0 +2.7096070258396e-29,970,970,0,0 +2.5391029305387e-29,971,971,0,0 +2.3685988352378e-29,972,972,0,0 +2.1980947399369e-29,973,973,0,0 +2.027590644636e-29,974,974,0,0 +1.8570865493351e-29,975,975,0,0 +1.6865824540342e-29,976,976,0,0 +1.5160783587333e-29,977,977,0,0 +1.3455742634324e-29,978,978,0,0 +1.1750701681315e-29,979,979,0,0 +1.0045660728306e-29,980,980,0,0 +9.4134879418429e-30,981,981,0,0 +8.78131515538e-30,982,982,0,0 +8.1491423689171e-30,983,983,0,0 +7.5169695824542e-30,984,984,0,0 +6.8847967959913e-30,985,985,0,0 +6.2526240095284e-30,986,986,0,0 +5.6204512230656e-30,987,987,0,0 +4.9882784366027e-30,988,988,0,0 +4.3561056501398e-30,989,989,0,0 +3.7239328636769e-30,990,990,0,0 +3.4895713966339e-30,991,991,0,0 +3.255209929591e-30,992,992,0,0 +3.020848462548e-30,993,993,0,0 +2.786486995505e-30,994,994,0,0 +2.552125528462e-30,995,995,0,0 +2.3177640614191e-30,996,996,0,0 +2.0834025943761e-30,997,997,0,0 +1.8490411273331e-30,998,998,0,0 +1.6146796602901e-30,999,999,0,0 +1.3803181932472e-30,1000,1000,0,0 diff --git a/test/tests/ver-1n/gold/ver-1n_vector_postproc_500s_line_0066.csv b/test/tests/ver-1n/gold/ver-1n_vector_postproc_500s_line_0066.csv new file mode 100644 index 000000000..6fb3951fb --- /dev/null +++ b/test/tests/ver-1n/gold/ver-1n_vector_postproc_500s_line_0066.csv @@ -0,0 +1,1002 @@ +deuterium_concentration_PCC,id,x,y,z +1918565.6588565,0,0,0,0 +1918552.0837055,1,1,0,0 +1918538.5085546,2,2,0,0 +1918524.9334036,3,3,0,0 +1918511.3582526,4,4,0,0 +1918497.7831017,5,5,0,0 +1918484.2079507,6,6,0,0 +1918470.6327998,7,7,0,0 +1918457.0576488,8,8,0,0 +1918443.4824978,9,9,0,0 +1918429.9073469,10,10,0,0 +1918412.032388,11,11,0,0 +1918394.1574292,12,12,0,0 +1918376.2824704,13,13,0,0 +1918358.4075115,14,14,0,0 +1918340.5325527,15,15,0,0 +1918322.6575938,16,16,0,0 +1918304.782635,17,17,0,0 +1918286.9076762,18,18,0,0 +1918269.0327173,19,19,0,0 +1918251.1577585,20,20,0,0 +1918228.088857,21,21,0,0 +1918205.0199556,22,22,0,0 +1918181.9510542,23,23,0,0 +1918158.8821527,24,24,0,0 +1918135.8132513,25,25,0,0 +1918112.7443499,26,26,0,0 +1918089.6754484,27,27,0,0 +1918066.606547,28,28,0,0 +1918043.5376455,29,29,0,0 +1918020.4687441,30,30,0,0 +1917991.1752437,31,31,0,0 +1917961.8817433,32,32,0,0 +1917932.588243,33,33,0,0 +1917903.2947426,34,34,0,0 +1917874.0012422,35,35,0,0 +1917844.7077418,36,36,0,0 +1917815.4142414,37,37,0,0 +1917786.1207411,38,38,0,0 +1917756.8272407,39,39,0,0 +1917727.5337403,40,40,0,0 +1917690.83454,41,41,0,0 +1917654.1353396,42,42,0,0 +1917617.4361393,43,43,0,0 +1917580.7369389,44,44,0,0 +1917544.0377386,45,45,0,0 +1917507.3385383,46,46,0,0 +1917470.6393379,47,47,0,0 +1917433.9401376,48,48,0,0 +1917397.2409373,49,49,0,0 +1917360.5417369,50,50,0,0 +1917315.0909956,51,51,0,0 +1917269.6402543,52,52,0,0 +1917224.189513,53,53,0,0 +1917178.7387717,54,54,0,0 +1917133.2880304,55,55,0,0 +1917087.8372891,56,56,0,0 +1917042.3865478,57,57,0,0 +1916996.9358065,58,58,0,0 +1916951.4850652,59,59,0,0 +1916906.0343239,60,60,0,0 +1916850.3069661,61,61,0,0 +1916794.5796083,62,62,0,0 +1916738.8522504,63,63,0,0 +1916683.1248926,64,64,0,0 +1916627.3975348,65,65,0,0 +1916571.670177,66,66,0,0 +1916515.9428191,67,67,0,0 +1916460.2154613,68,68,0,0 +1916404.4881035,69,69,0,0 +1916348.7607457,70,70,0,0 +1916281.0379722,71,71,0,0 +1916213.3151988,72,72,0,0 +1916145.5924254,73,73,0,0 +1916077.869652,74,74,0,0 +1916010.1468786,75,75,0,0 +1915942.4241052,76,76,0,0 +1915874.7013317,77,77,0,0 +1915806.9785583,78,78,0,0 +1915739.2557849,79,79,0,0 +1915671.5330115,80,80,0,0 +1915589.8880542,81,81,0,0 +1915508.2430969,82,82,0,0 +1915426.5981397,83,83,0,0 +1915344.9531824,84,84,0,0 +1915263.3082251,85,85,0,0 +1915181.6632678,86,86,0,0 +1915100.0183106,87,87,0,0 +1915018.3733533,88,88,0,0 +1914936.728396,89,89,0,0 +1914855.0834387,90,90,0,0 +1914757.3678275,91,91,0,0 +1914659.6522163,92,92,0,0 +1914561.9366051,93,93,0,0 +1914464.2209939,94,94,0,0 +1914366.5053827,95,95,0,0 +1914268.7897716,96,96,0,0 +1914171.0741604,97,97,0,0 +1914073.3585492,98,98,0,0 +1913975.642938,99,99,0,0 +1913877.9273268,100,100,0,0 +1913761.7579716,101,101,0,0 +1913645.5886164,102,102,0,0 +1913529.4192613,103,103,0,0 +1913413.2499061,104,104,0,0 +1913297.0805509,105,105,0,0 +1913180.9111958,106,106,0,0 +1913064.7418406,107,107,0,0 +1912948.5724854,108,108,0,0 +1912832.4031303,109,109,0,0 +1912716.2337751,110,110,0,0 +1912578.9811928,111,111,0,0 +1912441.7286105,112,112,0,0 +1912304.4760283,113,113,0,0 +1912167.223446,114,114,0,0 +1912029.9708637,115,115,0,0 +1911892.7182814,116,116,0,0 +1911755.4656991,117,117,0,0 +1911618.2131168,118,118,0,0 +1911480.9605346,119,119,0,0 +1911343.7079523,120,120,0,0 +1911182.4859958,121,121,0,0 +1911021.2640393,122,122,0,0 +1910860.0420829,123,123,0,0 +1910698.8201264,124,124,0,0 +1910537.5981699,125,125,0,0 +1910376.3762135,126,126,0,0 +1910215.154257,127,127,0,0 +1910053.9323005,128,128,0,0 +1909892.710344,129,129,0,0 +1909731.4883876,130,130,0,0 +1909543.1458568,131,131,0,0 +1909354.803326,132,132,0,0 +1909166.4607953,133,133,0,0 +1908978.1182645,134,134,0,0 +1908789.7757337,135,135,0,0 +1908601.4332029,136,136,0,0 +1908413.0906722,137,137,0,0 +1908224.7481414,138,138,0,0 +1908036.4056106,139,139,0,0 +1907848.0630798,140,140,0,0 +1907629.1776111,141,141,0,0 +1907410.2921423,142,142,0,0 +1907191.4066736,143,143,0,0 +1906972.5212048,144,144,0,0 +1906753.6357361,145,145,0,0 +1906534.7502673,146,146,0,0 +1906315.8647985,147,147,0,0 +1906096.9793298,148,148,0,0 +1905878.093861,149,149,0,0 +1905659.2083923,150,150,0,0 +1905406.0830338,151,151,0,0 +1905152.9576754,152,152,0,0 +1904899.832317,153,153,0,0 +1904646.7069585,154,154,0,0 +1904393.5816001,155,155,0,0 +1904140.4562416,156,156,0,0 +1903887.3308832,157,157,0,0 +1903634.2055248,158,158,0,0 +1903381.0801663,159,159,0,0 +1903127.9548079,160,160,0,0 +1902836.6176928,161,161,0,0 +1902545.2805777,162,162,0,0 +1902253.9434625,163,163,0,0 +1901962.6063474,164,164,0,0 +1901671.2692323,165,165,0,0 +1901379.9321172,166,166,0,0 +1901088.5950021,167,167,0,0 +1900797.2578869,168,168,0,0 +1900505.9207718,169,169,0,0 +1900214.5836567,170,170,0,0 +1899880.7911784,171,171,0,0 +1899546.9987001,172,172,0,0 +1899213.2062218,173,173,0,0 +1898879.4137435,174,174,0,0 +1898545.6212652,175,175,0,0 +1898211.8287869,176,176,0,0 +1897878.0363086,177,177,0,0 +1897544.2438303,178,178,0,0 +1897210.451352,179,179,0,0 +1896876.6588737,180,180,0,0 +1896495.9027563,181,181,0,0 +1896115.146639,182,182,0,0 +1895734.3905216,183,183,0,0 +1895353.6344043,184,184,0,0 +1894972.8782869,185,185,0,0 +1894592.1221695,186,186,0,0 +1894211.3660522,187,187,0,0 +1893830.6099348,188,188,0,0 +1893449.8538175,189,189,0,0 +1893069.0977001,190,190,0,0 +1892636.6163293,191,191,0,0 +1892204.1349585,192,192,0,0 +1891771.6535878,193,193,0,0 +1891339.172217,194,194,0,0 +1890906.6908462,195,195,0,0 +1890474.2094754,196,196,0,0 +1890041.7281046,197,197,0,0 +1889609.2467338,198,198,0,0 +1889176.765363,199,199,0,0 +1888744.2839923,200,200,0,0 +1888255.0783372,201,201,0,0 +1887765.8726821,202,202,0,0 +1887276.6670271,203,203,0,0 +1886787.461372,204,204,0,0 +1886298.255717,205,205,0,0 +1885809.0500619,206,206,0,0 +1885319.8444069,207,207,0,0 +1884830.6387518,208,208,0,0 +1884341.4330967,209,209,0,0 +1883852.2274417,210,210,0,0 +1883301.0818513,211,211,0,0 +1882749.9362608,212,212,0,0 +1882198.7906704,213,213,0,0 +1881647.6450799,214,214,0,0 +1881096.4994895,215,215,0,0 +1880545.353899,216,216,0,0 +1879994.2083086,217,217,0,0 +1879443.0627182,218,218,0,0 +1878891.9171277,219,219,0,0 +1878340.7715373,220,220,0,0 +1877722.2796347,221,221,0,0 +1877103.7877321,222,222,0,0 +1876485.2958295,223,223,0,0 +1875866.803927,224,224,0,0 +1875248.3120244,225,225,0,0 +1874629.8201218,226,226,0,0 +1874011.3282192,227,227,0,0 +1873392.8363167,228,228,0,0 +1872774.3444141,229,229,0,0 +1872155.8525115,230,230,0,0 +1871464.4483411,231,231,0,0 +1870773.0441707,232,232,0,0 +1870081.6400004,233,233,0,0 +1869390.23583,234,234,0,0 +1868698.8316596,235,235,0,0 +1868007.4274892,236,236,0,0 +1867316.0233188,237,237,0,0 +1866624.6191484,238,238,0,0 +1865933.214978,239,239,0,0 +1865241.8108077,240,240,0,0 +1864471.8053061,241,241,0,0 +1863701.7998045,242,242,0,0 +1862931.794303,243,243,0,0 +1862161.7888014,244,244,0,0 +1861391.7832999,245,245,0,0 +1860621.7777983,246,246,0,0 +1859851.7722968,247,247,0,0 +1859081.7667952,248,248,0,0 +1858311.7612937,249,249,0,0 +1857541.7557921,250,250,0,0 +1856687.378565,251,251,0,0 +1855833.0013379,252,252,0,0 +1854978.6241109,253,253,0,0 +1854124.2468838,254,254,0,0 +1853269.8696567,255,255,0,0 +1852415.4924296,256,256,0,0 +1851561.1152025,257,257,0,0 +1850706.7379754,258,258,0,0 +1849852.3607483,259,259,0,0 +1848997.9835213,260,260,0,0 +1848053.4298056,261,261,0,0 +1847108.87609,262,262,0,0 +1846164.3223743,263,263,0,0 +1845219.7686587,264,264,0,0 +1844275.214943,265,265,0,0 +1843330.6612274,266,266,0,0 +1842386.1075117,267,267,0,0 +1841441.5537961,268,268,0,0 +1840497.0000805,269,269,0,0 +1839552.4463648,270,270,0,0 +1838511.9289494,271,271,0,0 +1837471.4115341,272,272,0,0 +1836430.8941187,273,273,0,0 +1835390.3767033,274,274,0,0 +1834349.859288,275,275,0,0 +1833309.3418726,276,276,0,0 +1832268.8244573,277,277,0,0 +1831228.3070419,278,278,0,0 +1830187.7896265,279,279,0,0 +1829147.2722112,280,280,0,0 +1828005.0779743,281,281,0,0 +1826862.8837375,282,282,0,0 +1825720.6895006,283,283,0,0 +1824578.4952638,284,284,0,0 +1823436.3010269,285,285,0,0 +1822294.1067901,286,286,0,0 +1821151.9125532,287,287,0,0 +1820009.7183164,288,288,0,0 +1818867.5240795,289,289,0,0 +1817725.3298427,290,290,0,0 +1816475.8804487,291,291,0,0 +1815226.4310548,292,292,0,0 +1813976.9816608,293,293,0,0 +1812727.5322669,294,294,0,0 +1811478.0828729,295,295,0,0 +1810228.633479,296,296,0,0 +1808979.184085,297,297,0,0 +1807729.7346911,298,298,0,0 +1806480.2852971,299,299,0,0 +1805230.8359032,300,300,0,0 +1803868.7520832,301,301,0,0 +1802506.6682632,302,302,0,0 +1801144.5844433,303,303,0,0 +1799782.5006233,304,304,0,0 +1798420.4168033,305,305,0,0 +1797058.3329833,306,306,0,0 +1795696.2491633,307,307,0,0 +1794334.1653434,308,308,0,0 +1792972.0815234,309,309,0,0 +1791609.9977034,310,310,0,0 +1790130.166429,311,311,0,0 +1788650.3351545,312,312,0,0 +1787170.5038801,313,313,0,0 +1785690.6726057,314,314,0,0 +1784210.8413312,315,315,0,0 +1782731.0100568,316,316,0,0 +1781251.1787824,317,317,0,0 +1779771.3475079,318,318,0,0 +1778291.5162335,319,319,0,0 +1776811.6849591,320,320,0,0 +1775209.328708,321,321,0,0 +1773606.9724569,322,322,0,0 +1772004.6162059,323,323,0,0 +1770402.2599548,324,324,0,0 +1768799.9037038,325,325,0,0 +1767197.5474527,326,326,0,0 +1765595.1912017,327,327,0,0 +1763992.8349506,328,328,0,0 +1762390.4786996,329,329,0,0 +1760788.1224485,330,330,0,0 +1759058.8696597,331,331,0,0 +1757329.6168709,332,332,0,0 +1755600.3640821,333,333,0,0 +1753871.1112933,334,334,0,0 +1752141.8585045,335,335,0,0 +1750412.6057157,336,336,0,0 +1748683.3529269,337,337,0,0 +1746954.1001381,338,338,0,0 +1745224.8473493,339,339,0,0 +1743495.5945606,340,340,0,0 +1741635.5502835,341,341,0,0 +1739775.5060064,342,342,0,0 +1737915.4617293,343,343,0,0 +1736055.4174522,344,344,0,0 +1734195.3731751,345,345,0,0 +1732335.328898,346,346,0,0 +1730475.2846209,347,347,0,0 +1728615.2403439,348,348,0,0 +1726755.1960668,349,349,0,0 +1724895.1517897,350,350,0,0 +1722900.9674584,351,351,0,0 +1720906.783127,352,352,0,0 +1718912.5987957,353,353,0,0 +1716918.4144644,354,354,0,0 +1714924.2301331,355,355,0,0 +1712930.0458017,356,356,0,0 +1710935.8614704,357,357,0,0 +1708941.6771391,358,358,0,0 +1706947.4928078,359,359,0,0 +1704953.3084764,360,360,0,0 +1702822.2496784,361,361,0,0 +1700691.1908804,362,362,0,0 +1698560.1320824,363,363,0,0 +1696429.0732844,364,364,0,0 +1694298.0144863,365,365,0,0 +1692166.9556883,366,366,0,0 +1690035.8968903,367,367,0,0 +1687904.8380923,368,368,0,0 +1685773.7792942,369,369,0,0 +1683642.7204962,370,370,0,0 +1681372.7315676,371,371,0,0 +1679102.7426391,372,372,0,0 +1676832.7537105,373,373,0,0 +1674562.7647819,374,374,0,0 +1672292.7758533,375,375,0,0 +1670022.7869248,376,376,0,0 +1667752.7979962,377,377,0,0 +1665482.8090676,378,378,0,0 +1663212.820139,379,379,0,0 +1660942.8312105,380,380,0,0 +1658532.595472,381,381,0,0 +1656122.3597335,382,382,0,0 +1653712.123995,383,383,0,0 +1651301.8882565,384,384,0,0 +1648891.652518,385,385,0,0 +1646481.4167795,386,386,0,0 +1644071.181041,387,387,0,0 +1641660.9453025,388,388,0,0 +1639250.709564,389,389,0,0 +1636840.4738255,390,390,0,0 +1634289.4682808,391,391,0,0 +1631738.4627362,392,392,0,0 +1629187.4571915,393,393,0,0 +1626636.4516468,394,394,0,0 +1624085.4461021,395,395,0,0 +1621534.4405574,396,396,0,0 +1618983.4350127,397,397,0,0 +1616432.4294681,398,398,0,0 +1613881.4239234,399,399,0,0 +1611330.4183787,400,400,0,0 +1608638.9617305,401,401,0,0 +1605947.5050823,402,402,0,0 +1603256.0484341,403,403,0,0 +1600564.5917859,404,404,0,0 +1597873.1351377,405,405,0,0 +1595181.6784896,406,406,0,0 +1592490.2218414,407,407,0,0 +1589798.7651932,408,408,0,0 +1587107.308545,409,409,0,0 +1584415.8518968,410,410,0,0 +1581585.1447936,411,411,0,0 +1578754.4376904,412,412,0,0 +1575923.7305872,413,413,0,0 +1573093.0234841,414,414,0,0 +1570262.3163809,415,415,0,0 +1567431.6092777,416,416,0,0 +1564600.9021745,417,417,0,0 +1561770.1950713,418,418,0,0 +1558939.4879681,419,419,0,0 +1556108.780865,420,420,0,0 +1553140.9373776,421,421,0,0 +1550173.0938902,422,422,0,0 +1547205.2504028,423,423,0,0 +1544237.4069154,424,424,0,0 +1541269.5634281,425,425,0,0 +1538301.7199407,426,426,0,0 +1535333.8764533,427,427,0,0 +1532366.0329659,428,428,0,0 +1529398.1894786,429,429,0,0 +1526430.3459912,430,430,0,0 +1523328.4154282,431,431,0,0 +1520226.4848653,432,432,0,0 +1517124.5543023,433,433,0,0 +1514022.6237394,434,434,0,0 +1510920.6931764,435,435,0,0 +1507818.7626135,436,436,0,0 +1504716.8320505,437,437,0,0 +1501614.9014876,438,438,0,0 +1498512.9709246,439,439,0,0 +1495411.0403617,440,440,0,0 +1492179.0186682,441,441,0,0 +1488946.9969746,442,442,0,0 +1485714.9752811,443,443,0,0 +1482482.9535876,444,444,0,0 +1479250.9318941,445,445,0,0 +1476018.9102005,446,446,0,0 +1472786.888507,447,447,0,0 +1469554.8668135,448,448,0,0 +1466322.8451199,449,449,0,0 +1463090.8234264,450,450,0,0 +1459733.6535659,451,451,0,0 +1456376.4837054,452,452,0,0 +1453019.3138449,453,453,0,0 +1449662.1439844,454,454,0,0 +1446304.9741239,455,455,0,0 +1442947.8042634,456,456,0,0 +1439590.6344029,457,457,0,0 +1436233.4645425,458,458,0,0 +1432876.294682,459,459,0,0 +1429519.1248215,460,460,0,0 +1426042.6857186,461,461,0,0 +1422566.2466158,462,462,0,0 +1419089.8075129,463,463,0,0 +1415613.36841,464,464,0,0 +1412136.9293072,465,465,0,0 +1408660.4902043,466,466,0,0 +1405184.0511015,467,467,0,0 +1401707.6119986,468,468,0,0 +1398231.1728958,469,469,0,0 +1394754.7337929,470,470,0,0 +1391165.8176036,471,471,0,0 +1387576.9014143,472,472,0,0 +1383987.985225,473,473,0,0 +1380399.0690357,474,474,0,0 +1376810.1528464,475,475,0,0 +1373221.2366572,476,476,0,0 +1369632.3204679,477,477,0,0 +1366043.4042786,478,478,0,0 +1362454.4880893,479,479,0,0 +1358865.5719,480,480,0,0 +1355171.8495805,481,481,0,0 +1351478.1272609,482,482,0,0 +1347784.4049414,483,483,0,0 +1344090.6826219,484,484,0,0 +1340396.9603024,485,485,0,0 +1336703.2379829,486,486,0,0 +1333009.5156634,487,487,0,0 +1329315.7933438,488,488,0,0 +1325622.0710243,489,489,0,0 +1321928.3487048,490,490,0,0 +1318138.3240603,491,491,0,0 +1314348.2994157,492,492,0,0 +1310558.2747712,493,493,0,0 +1306768.2501266,494,494,0,0 +1302978.2254821,495,495,0,0 +1299188.2008375,496,496,0,0 +1295398.176193,497,497,0,0 +1291608.1515484,498,498,0,0 +1287818.1269039,499,499,0,0 +1284028.1022593,500,500,0,0 +1280151.0548654,501,501,0,0 +1276274.0074716,502,502,0,0 +1272396.9600777,503,503,0,0 +1268519.9126838,504,504,0,0 +1264642.8652899,505,505,0,0 +1260765.817896,506,506,0,0 +1256888.7705021,507,507,0,0 +1253011.7231082,508,508,0,0 +1249134.6757143,509,509,0,0 +1245257.6283204,510,510,0,0 +1241303.5459208,511,511,0,0 +1237349.4635212,512,512,0,0 +1233395.3811216,513,513,0,0 +1229441.298722,514,514,0,0 +1225487.2163224,515,515,0,0 +1221533.1339228,516,516,0,0 +1217579.0515232,517,517,0,0 +1213624.9691236,518,518,0,0 +1209670.886724,519,519,0,0 +1205716.8043244,520,520,0,0 +1201696.3055086,521,521,0,0 +1197675.8066929,522,522,0,0 +1193655.3078771,523,523,0,0 +1189634.8090613,524,524,0,0 +1185614.3102456,525,525,0,0 +1181593.8114298,526,526,0,0 +1177573.312614,527,527,0,0 +1173552.8137983,528,528,0,0 +1169532.3149825,529,529,0,0 +1165511.8161667,530,530,0,0 +1161436.0643224,531,531,0,0 +1157360.3124781,532,532,0,0 +1153284.5606338,533,533,0,0 +1149208.8087894,534,534,0,0 +1145133.0569451,535,535,0,0 +1141057.3051008,536,536,0,0 +1136981.5532565,537,537,0,0 +1132905.8014122,538,538,0,0 +1128830.0495678,539,539,0,0 +1124754.2977235,540,540,0,0 +1120634.9074274,541,541,0,0 +1116515.5171314,542,542,0,0 +1112396.1268353,543,543,0,0 +1108276.7365392,544,544,0,0 +1104157.3462431,545,545,0,0 +1100037.9559471,546,546,0,0 +1095918.565651,547,547,0,0 +1091799.1753549,548,548,0,0 +1087679.7850588,549,549,0,0 +1083560.3947628,550,550,0,0 +1079409.331925,551,551,0,0 +1075258.2690873,552,552,0,0 +1071107.2062496,553,553,0,0 +1066956.1434119,554,554,0,0 +1062805.0805741,555,555,0,0 +1058654.0177364,556,556,0,0 +1054502.9548987,557,557,0,0 +1050351.892061,558,558,0,0 +1046200.8292232,559,559,0,0 +1042049.7663855,560,560,0,0 +1037879.2435841,561,561,0,0 +1033708.7207828,562,562,0,0 +1029538.1979814,563,563,0,0 +1025367.67518,564,564,0,0 +1021197.1523786,565,565,0,0 +1017026.6295772,566,566,0,0 +1012856.1067759,567,567,0,0 +1008685.5839745,568,568,0,0 +1004515.0611731,569,569,0,0 +1000344.5383717,570,570,0,0 +996166.90690922,571,571,0,0 +991989.27544671,572,572,0,0 +987811.6439842,573,573,0,0 +983634.01252169,574,574,0,0 +979456.38105918,575,575,0,0 +975278.74959667,576,576,0,0 +971101.11813416,577,577,0,0 +966923.48667165,578,578,0,0 +962745.85520914,579,579,0,0 +958568.22374662,580,580,0,0 +954395.86402314,581,581,0,0 +950223.50429965,582,582,0,0 +946051.14457616,583,583,0,0 +941878.78485267,584,584,0,0 +937706.42512918,585,585,0,0 +933534.06540569,586,586,0,0 +929361.70568221,587,587,0,0 +925189.34595872,588,588,0,0 +921016.98623523,589,589,0,0 +916844.62651174,590,590,0,0 +912689.83833884,591,591,0,0 +908535.05016593,592,592,0,0 +904380.26199303,593,593,0,0 +900225.47382012,594,594,0,0 +896070.68564721,595,595,0,0 +891915.89747431,596,596,0,0 +887761.1093014,597,597,0,0 +883606.3211285,598,598,0,0 +879451.53295559,599,599,0,0 +875296.74478269,600,600,0,0 +871171.63925768,601,601,0,0 +867046.53373267,602,602,0,0 +862921.42820766,603,603,0,0 +858796.32268265,604,604,0,0 +854671.21715764,605,605,0,0 +850546.11163263,606,606,0,0 +846421.00610762,607,607,0,0 +842295.90058261,608,608,0,0 +838170.7950576,609,609,0,0 +834045.68953259,610,610,0,0 +829962.08405571,611,611,0,0 +825878.47857883,612,612,0,0 +821794.87310195,613,613,0,0 +817711.26762508,614,614,0,0 +813627.6621482,615,615,0,0 +809544.05667132,616,616,0,0 +805460.45119444,617,617,0,0 +801376.84571756,618,618,0,0 +797293.24024069,619,619,0,0 +793209.63476381,620,620,0,0 +789178.95271021,621,621,0,0 +785148.27065662,622,622,0,0 +781117.58860302,623,623,0,0 +777086.90654943,624,624,0,0 +773056.22449583,625,625,0,0 +769025.54244223,626,626,0,0 +764994.86038864,627,627,0,0 +760964.17833504,628,628,0,0 +756933.49628145,629,629,0,0 +752902.81422785,630,630,0,0 +748935.99068549,631,631,0,0 +744969.16714313,632,632,0,0 +741002.34360078,633,633,0,0 +737035.52005842,634,634,0,0 +733068.69651606,635,635,0,0 +729101.8729737,636,636,0,0 +725135.04943134,637,637,0,0 +721168.22588898,638,638,0,0 +717201.40234662,639,639,0,0 +713234.57880427,640,640,0,0 +709341.97366041,641,641,0,0 +705449.36851656,642,642,0,0 +701556.7633727,643,643,0,0 +697664.15822885,644,644,0,0 +693771.553085,645,645,0,0 +689878.94794114,646,646,0,0 +685986.34279729,647,647,0,0 +682093.73765343,648,648,0,0 +678201.13250958,649,649,0,0 +674308.52736573,650,650,0,0 +670499.84687164,651,651,0,0 +666691.16637755,652,652,0,0 +662882.48588346,653,653,0,0 +659073.80538937,654,654,0,0 +655265.12489528,655,655,0,0 +651456.44440119,656,656,0,0 +647647.7639071,657,657,0,0 +643839.08341301,658,658,0,0 +640030.40291892,659,659,0,0 +636221.72242483,660,660,0,0 +632505.95019521,661,661,0,0 +628790.17796559,662,662,0,0 +625074.40573596,663,663,0,0 +621358.63350634,664,664,0,0 +617642.86127672,665,665,0,0 +613927.0890471,666,666,0,0 +610211.31681747,667,667,0,0 +606495.54458785,668,668,0,0 +602779.77235823,669,669,0,0 +599064.0001286,670,670,0,0 +595449.33834352,671,671,0,0 +591834.67655843,672,672,0,0 +588220.01477334,673,673,0,0 +584605.35298826,674,674,0,0 +580990.69120317,675,675,0,0 +577376.02941808,676,676,0,0 +573761.367633,677,677,0,0 +570146.70584791,678,678,0,0 +566532.04406282,679,679,0,0 +562917.38227774,680,680,0,0 +559411.20365494,681,681,0,0 +555905.02503215,682,682,0,0 +552398.84640936,683,683,0,0 +548892.66778657,684,684,0,0 +545386.48916378,685,685,0,0 +541880.31054098,686,686,0,0 +538374.13191819,687,687,0,0 +534867.9532954,688,688,0,0 +531361.77467261,689,689,0,0 +527855.59604982,690,690,0,0 +524464.40694985,691,691,0,0 +521073.21784989,692,692,0,0 +517682.02874993,693,693,0,0 +514290.83964997,694,694,0,0 +510899.65055001,695,695,0,0 +507508.46145005,696,696,0,0 +504117.27235008,697,697,0,0 +500726.08325012,698,698,0,0 +497334.89415016,699,699,0,0 +493943.7050502,700,700,0,0 +490673.11987014,701,701,0,0 +487402.53469009,702,702,0,0 +484131.94951003,703,703,0,0 +480861.36432998,704,704,0,0 +477590.77914992,705,705,0,0 +474320.19396986,706,706,0,0 +471049.60878981,707,707,0,0 +467779.02360975,708,708,0,0 +464508.4384297,709,709,0,0 +461237.85324964,710,710,0,0 +458092.58005896,711,711,0,0 +454947.30686829,712,712,0,0 +451802.03367761,713,713,0,0 +448656.76048693,714,714,0,0 +445511.48729626,715,715,0,0 +442366.21410558,716,716,0,0 +439220.9409149,717,717,0,0 +436075.66772423,718,718,0,0 +432930.39453355,719,719,0,0 +429785.12134287,720,720,0,0 +426768.95852116,721,721,0,0 +423752.79569945,722,722,0,0 +420736.63287774,723,723,0,0 +417720.47005603,724,724,0,0 +414704.30723432,725,725,0,0 +411688.14441261,726,726,0,0 +408671.98159089,727,727,0,0 +405655.81876918,728,728,0,0 +402639.65594747,729,729,0,0 +399623.49312576,730,730,0,0 +396739.33658089,731,731,0,0 +393855.18003602,732,732,0,0 +390971.02349115,733,733,0,0 +388086.86694628,734,734,0,0 +385202.71040141,735,735,0,0 +382318.55385655,736,736,0,0 +379434.39731168,737,737,0,0 +376550.24076681,738,738,0,0 +373666.08422194,739,739,0,0 +370781.92767707,740,740,0,0 +368031.78805812,741,741,0,0 +365281.64843916,742,742,0,0 +362531.50882021,743,743,0,0 +359781.36920125,744,744,0,0 +357031.2295823,745,745,0,0 +354281.08996334,746,746,0,0 +351530.95034439,747,747,0,0 +348780.81072544,748,748,0,0 +346030.67110648,749,749,0,0 +343280.53148753,750,750,0,0 +340665.56066172,751,751,0,0 +338050.58983592,752,752,0,0 +335435.61901011,753,753,0,0 +332820.6481843,754,754,0,0 +330205.6773585,755,755,0,0 +327590.70653269,756,756,0,0 +324975.73570689,757,757,0,0 +322360.76488108,758,758,0,0 +319745.79405527,759,759,0,0 +317130.82322947,760,760,0,0 +314651.34916968,761,761,0,0 +312171.87510988,762,762,0,0 +309692.40105009,763,763,0,0 +307212.9269903,764,764,0,0 +304733.45293051,765,765,0,0 +302253.97887072,766,766,0,0 +299774.50481092,767,767,0,0 +297295.03075113,768,768,0,0 +294815.55669134,769,769,0,0 +292336.08263155,770,770,0,0 +289991.65176154,771,771,0,0 +287647.22089153,772,772,0,0 +285302.79002153,773,773,0,0 +282958.35915152,774,774,0,0 +280613.92828151,775,775,0,0 +278269.49741151,776,776,0,0 +275925.0665415,777,777,0,0 +273580.63567149,778,778,0,0 +271236.20480149,779,779,0,0 +268891.77393148,780,780,0,0 +266681.19990188,781,781,0,0 +264470.62587228,782,782,0,0 +262260.05184268,783,783,0,0 +260049.47781308,784,784,0,0 +257838.90378348,785,785,0,0 +255628.32975389,786,786,0,0 +253417.75572429,787,787,0,0 +251207.18169469,788,788,0,0 +248996.60766509,789,789,0,0 +246786.03363549,790,790,0,0 +244707.45145383,791,791,0,0 +242628.86927217,792,792,0,0 +240550.28709051,793,793,0,0 +238471.70490884,794,794,0,0 +236393.12272718,795,795,0,0 +234314.54054552,796,796,0,0 +232235.95836386,797,797,0,0 +230157.3761822,798,798,0,0 +228078.79400054,799,799,0,0 +226000.21181888,800,800,0,0 +224051.13623244,801,801,0,0 +222102.06064601,802,802,0,0 +220152.98505958,803,803,0,0 +218203.90947315,804,804,0,0 +216254.83388672,805,805,0,0 +214305.75830029,806,806,0,0 +212356.68271386,807,807,0,0 +210407.60712743,808,808,0,0 +208458.531541,809,809,0,0 +206509.45595457,810,810,0,0 +204686.84298367,811,811,0,0 +202864.23001276,812,812,0,0 +201041.61704186,813,813,0,0 +199219.00407095,814,814,0,0 +197396.39110005,815,815,0,0 +195573.77812915,816,816,0,0 +193751.16515824,817,817,0,0 +191928.55218734,818,818,0,0 +190105.93921644,819,819,0,0 +188283.32624553,820,820,0,0 +186583.63678559,821,821,0,0 +184883.94732565,822,822,0,0 +183184.2578657,823,823,0,0 +181484.56840576,824,824,0,0 +179784.87894582,825,825,0,0 +178085.18948587,826,826,0,0 +176385.50002593,827,827,0,0 +174685.81056599,828,828,0,0 +172986.12110604,829,829,0,0 +171286.4316461,830,830,0,0 +169705.69609837,831,831,0,0 +168124.96055065,832,832,0,0 +166544.22500292,833,833,0,0 +164963.48945519,834,834,0,0 +163382.75390746,835,835,0,0 +161802.01835973,836,836,0,0 +160221.28281201,837,837,0,0 +158640.54726428,838,838,0,0 +157059.81171655,839,839,0,0 +155479.07616882,840,840,0,0 +154012.95911799,841,841,0,0 +152546.84206715,842,842,0,0 +151080.72501632,843,843,0,0 +149614.60796548,844,844,0,0 +148148.49091464,845,845,0,0 +146682.37386381,846,846,0,0 +145216.25681297,847,847,0,0 +143750.13976214,848,848,0,0 +142284.0227113,849,849,0,0 +140817.90566047,850,850,0,0 +139461.7696913,851,851,0,0 +138105.63372214,852,852,0,0 +136749.49775298,853,853,0,0 +135393.36178382,854,854,0,0 +134037.22581466,855,855,0,0 +132681.0898455,856,856,0,0 +131324.95387634,857,857,0,0 +129968.81790718,858,858,0,0 +128612.68193802,859,859,0,0 +127256.54596886,860,860,0,0 +126005.51380016,861,861,0,0 +124754.48163146,862,862,0,0 +123503.44946276,863,863,0,0 +122252.41729406,864,864,0,0 +121001.38512536,865,865,0,0 +119750.35295666,866,866,0,0 +118499.32078796,867,867,0,0 +117248.28861926,868,868,0,0 +115997.25645056,869,869,0,0 +114746.22428186,870,870,0,0 +113595.23849082,871,871,0,0 +112444.25269978,872,872,0,0 +111293.26690874,873,873,0,0 +110142.2811177,874,874,0,0 +108991.29532666,875,875,0,0 +107840.30953562,876,876,0,0 +106689.32374458,877,877,0,0 +105538.33795354,878,878,0,0 +104387.35216249,879,879,0,0 +103236.36637145,880,880,0,0 +102180.2460834,881,881,0,0 +101124.12579535,882,882,0,0 +100068.00550729,883,883,0,0 +99011.885219237,884,884,0,0 +97955.764931183,885,885,0,0 +96899.644643129,886,886,0,0 +95843.524355075,887,887,0,0 +94787.40406702,888,888,0,0 +93731.283778966,889,889,0,0 +92675.163490912,890,890,0,0 +91708.657514085,891,891,0,0 +90742.151537257,892,892,0,0 +89775.64556043,893,893,0,0 +88809.139583603,894,894,0,0 +87842.633606775,895,895,0,0 +86876.127629948,896,896,0,0 +85909.621653121,897,897,0,0 +84943.115676293,898,898,0,0 +83976.609699466,899,899,0,0 +83010.103722639,900,900,0,0 +82127.939713515,901,901,0,0 +81245.775704392,902,902,0,0 +80363.611695268,903,903,0,0 +79481.447686145,904,904,0,0 +78599.283677021,905,905,0,0 +77717.119667898,906,906,0,0 +76834.955658775,907,907,0,0 +75952.791649651,908,908,0,0 +75070.627640528,909,909,0,0 +74188.463631404,910,910,0,0 +73385.392980152,911,911,0,0 +72582.3223289,912,912,0,0 +71779.251677647,913,913,0,0 +70976.181026395,914,914,0,0 +70173.110375143,915,915,0,0 +69370.03972389,916,916,0,0 +68566.969072638,917,917,0,0 +67763.898421386,918,918,0,0 +66960.827770134,919,919,0,0 +66157.757118881,920,920,0,0 +65428.595344761,921,921,0,0 +64699.433570641,922,922,0,0 +63970.27179652,923,923,0,0 +63241.1100224,924,924,0,0 +62511.94824828,925,925,0,0 +61782.786474159,926,926,0,0 +61053.624700039,927,927,0,0 +60324.462925919,928,928,0,0 +59595.301151798,929,929,0,0 +58866.139377678,930,930,0,0 +58205.801918779,931,931,0,0 +57545.46445988,932,932,0,0 +56885.12700098,933,933,0,0 +56224.789542081,934,934,0,0 +55564.452083182,935,935,0,0 +54904.114624283,936,936,0,0 +54243.777165384,937,937,0,0 +53583.439706485,938,938,0,0 +52923.102247585,939,939,0,0 +52262.764788686,940,940,0,0 +51666.298157694,941,941,0,0 +51069.831526701,942,942,0,0 +50473.364895709,943,943,0,0 +49876.898264716,944,944,0,0 +49280.431633723,945,945,0,0 +48683.965002731,946,946,0,0 +48087.498371738,947,947,0,0 +47491.031740746,948,948,0,0 +46894.565109753,949,949,0,0 +46298.09847876,950,950,0,0 +45760.706835347,951,951,0,0 +45223.315191935,952,952,0,0 +44685.923548522,953,953,0,0 +44148.531905109,954,954,0,0 +43611.140261696,955,955,0,0 +43073.748618283,956,956,0,0 +42536.35697487,957,957,0,0 +41998.965331457,958,958,0,0 +41461.573688045,959,959,0,0 +40924.182044632,960,960,0,0 +40441.249304679,961,961,0,0 +39958.316564727,962,962,0,0 +39475.383824774,963,963,0,0 +38992.451084821,964,964,0,0 +38509.518344869,965,965,0,0 +38026.585604916,966,966,0,0 +37543.652864964,967,967,0,0 +37060.720125011,968,968,0,0 +36577.787385058,969,969,0,0 +36094.854645106,970,970,0,0 +35661.962306749,971,971,0,0 +35229.069968392,972,972,0,0 +34796.177630035,973,973,0,0 +34363.285291678,974,974,0,0 +33930.39295332,975,975,0,0 +33497.500614963,976,976,0,0 +33064.608276606,977,977,0,0 +32631.715938249,978,978,0,0 +32198.823599892,979,979,0,0 +31765.931261535,980,980,0,0 +31378.872177781,981,981,0,0 +30991.813094027,982,982,0,0 +30604.754010273,983,983,0,0 +30217.694926519,984,984,0,0 +29830.635842765,985,985,0,0 +29443.576759011,986,986,0,0 +29056.517675257,987,987,0,0 +28669.458591503,988,988,0,0 +28282.399507749,989,989,0,0 +27895.340423995,990,990,0,0 +27550.128791424,991,991,0,0 +27204.917158853,992,992,0,0 +26859.705526283,993,993,0,0 +26514.493893712,994,994,0,0 +26169.282261142,995,995,0,0 +25824.070628571,996,996,0,0 +25478.858996001,997,997,0,0 +25133.64736343,998,998,0,0 +24788.435730859,999,999,0,0 +24443.224098289,1000,1000,0,0 diff --git a/test/tests/ver-1n/tests b/test/tests/ver-1n/tests new file mode 100644 index 000000000..786652738 --- /dev/null +++ b/test/tests/ver-1n/tests @@ -0,0 +1,41 @@ +[Tests] + design = 'EquilibriumBC.md' + verification = 'ver-1n.md' + issues = '#426' + [ver-1n] + type = Exodiff + input = ver-1n.i + exodiff = ver-1n_exodus.e + requirement = 'The system shall be able to model deuterium diffusion under applied voltage through a slab with a constant concentration boundary condition as the species source.' + [] + [ver-1n_csvdiff] + type = CSVDiff + input = ver-1n.i + should_execute = False # this test relies on the output files from ver-1n, so it shouldn't be run twice + csvdiff = ver-1n_out.csv + requirement = 'The system shall be able to model deuterium diffusion under applied voltage through a slab with a constant concentration boundary condition as the species source to generate CSV data for use in comparisons with the analytic solution over time.' + prereq = ver-1n + [] + [ver-1n_lineplot1] + type = CSVDiff + input = ver-1n.i + should_execute = False # this test relies on the output files from ver-1n, so it shouldn't be run twice + csvdiff = ver-1n_vector_postproc_30s_line_0015.csv + requirement = 'The system shall be able to model deuterium diffusion under applied voltage through a slab with a constant concentration boundary condition as the species source to generate concentration CSV data of point 1 for use in comparisons with the analytic solution over depth.' + prereq = ver-1n + [] + [ver-1n_lineplot2] + type = CSVDiff + input = ver-1n.i + should_execute = False # this test relies on the output files from ver-1n, so it shouldn't be run twice + csvdiff = ver-1n_vector_postproc_500s_line_0066.csv + requirement = 'The system shall be able to model deuterium diffusion under applied voltage through a slab with a constant concentration boundary condition as the species source to generate concentration CSV data of point 2 for use in comparisons with the analytic solution over depth.' + prereq = ver-1n + [] + [ver-1n_comparison] + type = RunCommand + command = 'python3 comparison_ver-1n.py' + requirement = 'The system shall be able to generate comparison plots between the analytical solution and simulated solution of verification case 1n, modeling deuterium diffusion under applied voltage through a slab with a constant concentration boundary condition as the species source.' + required_python_packages = 'matplotlib numpy pandas scipy os' + [] +[] diff --git a/test/tests/ver-1n/ver-1n.i b/test/tests/ver-1n/ver-1n.i new file mode 100644 index 000000000..eaf836757 --- /dev/null +++ b/test/tests/ver-1n/ver-1n.i @@ -0,0 +1,221 @@ +# Verification Problem #1n for voltage-assisted transport +# Diffusion verification under an applied voltage with constant source boundary condition + +# Physical constants +R = '${units 8.31446261815324 J/mol/K}' # ideal gas constant based on number used in include/utils/PhysicalConstants.h +eV_to_J = '${units 1.602176634e-19 eV/J}' +N_a = '${units 6.02214076e23 at/mol}' +q = '${units 1.602176634e-19 C}' +F = '${fparse N_a * q}' + +# Pressure conditions +pressure_high = '${units 100 Pa}' +pressure_low = '${units 1e-6 Pa}' + +# Temperature conditions +temperature = '${units 773 K}' # 500 C + +# PCC Materials properties +diffusion_pre_PCC = '${units ${fparse sqrt(3) * 1.41e-6} m^2/s -> mum^2/s}' # Deuterium +diffusion_energy_PCC = '${units ${fparse 0.74 * eV_to_J * N_a} J/mol}' +solubility_pre_PCC = '${units ${fparse 1.06 * N_a / 1e18} at/mum^3/Pa^0.5}' # at/m^3/Pa^0.5 -> at/mum^3/Pa^0.5 +solubility_energy_PCC = '${units 7726.21 J/mol}' +solubility_order = .5 # Here, we use Sievert's law +charge_number = 1 +V_current = '${units 20 V}' + +# Important times +end_time = '${units 500 s}' +dt_max = '${units 10 s}' +dt_start = '${units 1 s}' + +# Geometry and mesh +length = '${units 10 mm -> mum}' +num_nodes = 1000 + +[Mesh] + [cmg] + type = CartesianMeshGenerator + dim = 1 + dx = '${fparse length}' + ix = '${fparse num_nodes}' + [] +[] + +[Variables] + [deuterium_concentration_PCC] # (atoms/microns^3) + [] +[] + +[AuxVariables] + [voltage_phi] + [] +[] + +[AuxKernels] + [phi_auxkernel] + type = FunctionAux + variable = voltage_phi + function = '${V_current} * (${length} - x) / ${length}' + execute_on = 'INITIAL TIMESTEP_END' + [] +[] + +[Problem] + type = ReferenceResidualProblem + extra_tag_vectors = 'ref' + reference_vector = 'ref' +[] + +[Kernels] + [time_PCC] + type = TimeDerivative + variable = deuterium_concentration_PCC + extra_vector_tags = ref + [] + [diffusion_PCC] + type = ADMatDiffusion + variable = deuterium_concentration_PCC + diffusivity = diffusivity_PCC + extra_vector_tags = ref + [] + [diffusion_phi_PCC] + type = ADMatDiffusion + variable = deuterium_concentration_PCC + v = voltage_phi + diffusivity = conductivity + extra_vector_tags = ref + [] +[] + +[BCs] + [left_flux] + type = EquilibriumBC + Ko = '${solubility_pre_PCC}' + activation_energy = '${solubility_energy_PCC}' + boundary = left + enclosure_var = '${pressure_high}' + temperature = '${temperature}' + variable = deuterium_concentration_PCC + p = ${solubility_order} + [] + [right_flux] + type = EquilibriumBC + Ko = '${solubility_pre_PCC}' + activation_energy = '${solubility_energy_PCC}' + boundary = right + enclosure_var = '${pressure_low}' + temperature = '${temperature}' + variable = deuterium_concentration_PCC + p = ${solubility_order} + [] +[] + +[Functions] + [diffusivity_PCC_func] + type = ParsedFunction + expression = '${diffusion_pre_PCC} * exp(-${diffusion_energy_PCC} / ${R} / ${temperature})' + [] + [solubility_PCC_func] + type = ParsedFunction + expression = '${solubility_pre_PCC} * exp(-${solubility_energy_PCC} / ${R} / ${temperature})' + [] +[] + +[Materials] + [diffusion_solubility] + type = ADGenericFunctionMaterial + prop_names = 'diffusivity_PCC solubility_PCC' + prop_values = 'diffusivity_PCC_func solubility_PCC_func' + outputs = all + [] + [conductivity] + type = ADParsedMaterial + property_name = 'conductivity' + coupled_variables = 'deuterium_concentration_PCC' + functor_names = 'diffusivity_PCC_func' + functor_symbols = 'diffusivity' + expression = 'diffusivity * ${charge_number} * ${F} * deuterium_concentration_PCC / ${R} / ${temperature}' + outputs = all + [] +[] + +[Postprocessors] + [concentration_point1] + type = PointValue + variable = deuterium_concentration_PCC + point = '100 0 0' + outputs = 'csv' + [] + [concentration_point2] + type = PointValue + variable = deuterium_concentration_PCC + point = '500 0 0' + outputs = 'csv' + [] +[] + +[VectorPostprocessors] + [line] + type = LineValueSampler + start_point = '0 0 0' + end_point = '1000 0 0' + num_points = 1001 + sort_by = 'x' + variable = deuterium_concentration_PCC + outputs = 'vector_postproc_30s vector_postproc_500s' + [] +[] + +[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-8 + nl_abs_tol = 1e-8 + end_time = ${end_time} + automatic_scaling = true + compute_scaling_once = true + # nl_max_its = 7 + dtmax = ${dt_max} + [TimeStepper] + type = IterationAdaptiveDT + dt = ${dt_start} + optimal_iterations = 5 + growth_factor = 1.1 + cutback_factor = 0.9 + cutback_factor_at_failure = 0.9 + [] +[] + +[Debug] + show_var_residual_norms = true +[] + +[Outputs] + csv = true + [exodus] + type = Exodus + output_material_properties = true + time_step_interval = 5 + [] + [vector_postproc_30s] + type = CSV + sync_times = '30' + sync_only = true + [] + [vector_postproc_500s] + type = CSV + sync_times = '500' + sync_only = true + [] +[] diff --git a/test/tests/ver-1o/comparison_ver-1o.py b/test/tests/ver-1o/comparison_ver-1o.py new file mode 100644 index 000000000..6f18ec49d --- /dev/null +++ b/test/tests/ver-1o/comparison_ver-1o.py @@ -0,0 +1,369 @@ +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import os +import glob +import re + +# Define font size +plt.rcParams.update({"font.size": 15}) + +# Changes working directory to script directory (for consistent MooseDocs usage) +script_folder = os.path.dirname(__file__) +os.chdir(script_folder) + + +def get_repo_relative_path(test_path): + if "/tmap8/doc/" in script_folder.lower(): + return os.path.join("../../../../test/tests/ver-1o", test_path) + return os.path.join(".", test_path) + + +def strip_inline_comment(line): + in_quote = None + for index, character in enumerate(line): + if character in ("'", '"'): + if in_quote == character: + in_quote = None + elif in_quote is None: + in_quote = character + elif character == "#" and in_quote is None: + return line[:index] + return line + + +def search_parameter(path, visited, parameter_name): + if path in visited: + return None + visited.add(path) + with open(path, encoding="utf-8") as handle: + for line in handle: + stripped = strip_inline_comment(line).strip() + if stripped.startswith("!include "): + include_name = stripped.split(maxsplit=1)[1] + include_path = os.path.join(os.path.dirname(path), include_name) + result = search_parameter(include_path, visited, parameter_name) + if result is not None: + return result + if stripped.startswith(f"{parameter_name} ="): + return stripped.split("=", maxsplit=1)[1].strip().strip("'") + return None + + +def get_raw_parameter_value(parameter_name, source_file="ver-1o.i"): + parameters_file = get_repo_relative_path(source_file) + result = search_parameter(parameters_file, set(), parameter_name) + if result is None: + raise KeyError( + f"Could not find parameter {parameter_name} in {parameters_file}" + ) + return result + + +def get_raw_block_parameter(block_name, parameter_name, source_file="ver-1o.i"): + parameters_file = get_repo_relative_path(source_file) + active = False + depth = 0 + with open(parameters_file, encoding="utf-8") as handle: + for line in handle: + stripped = strip_inline_comment(line).strip() + if not active and stripped == f"[{block_name}]": + active = True + depth = 1 + continue + if not active: + continue + if stripped == "[]": + depth -= 1 + if depth == 0: + break + continue + if stripped.startswith("[") and stripped.endswith("]"): + depth += 1 + continue + if stripped.startswith(f"{parameter_name} ="): + return stripped.split("=", maxsplit=1)[1].strip().strip("'") + raise KeyError(f"Could not find parameter {parameter_name} in block {block_name}") + + +def evaluate_fparse_expression(expression, source_file): + safe_namespace = { + "exp": np.exp, + "sqrt": np.sqrt, + "pi": np.pi, + } + names = set(re.findall(r"\b[A-Za-z_][A-Za-z0-9_]*\b", expression)) + for name in names: + if name not in safe_namespace: + safe_namespace[name] = get_numeric_parameter(name, source_file) + return eval(expression, {"__builtins__": {}}, safe_namespace) + + +def resolve_fparse(value, source_file): + pattern = re.compile(r"\$\{fparse ([^{}]+)\}") + while True: + match = pattern.search(value) + if match is None: + return value + parsed_value = evaluate_fparse_expression(match.group(1), source_file) + value = value[: match.start()] + str(parsed_value) + value[match.end() :] + + +def parse_numeric_value(value, source_file="ver-1o.i", output_unit=None): + value = value.strip().strip("'") + if value.startswith("${") and value.endswith("}"): + inner_value = value[2:-1].strip() + if inner_value.startswith("units "): + units_expr = resolve_fparse( + inner_value[len("units ") :].strip(), source_file + ) + match = re.fullmatch(r"(.+?)\s+(\S+)(?:\s*->\s*(\S+))?", units_expr) + if not match: + raise ValueError(f"Unsupported units expression: {value}") + numeric_value = float(match.group(1)) + from_unit = match.group(2) + to_unit = match.group(3) + target_unit = output_unit + if target_unit is None: + if to_unit is None or from_unit == to_unit: + return numeric_value + target_unit = to_unit + if from_unit == target_unit: + return numeric_value + supported_conversions = { + ("mm", "m"): 1e-3, + ("m", "mum"): 1e6, + ("mum", "m"): 1e-6, + ("g/mol", "kg/mol"): 1e-3, + ("g/cm^3", "kg/m^3"): 1e3, + ("g/m^3", "kg/m^3"): 1e-3, + ("A/V/m", "S/m"): 1.0, + ("A/V/m", "A/V/mum"): 1e-6, + ("A/V/mum", "S/m"): 1e6, + } + factor = supported_conversions.get((from_unit, target_unit)) + if factor is None: + raise ValueError(f"Unsupported conversion in units expression: {value}") + return numeric_value * factor + if inner_value.startswith("fparse "): + return evaluate_fparse_expression( + inner_value[len("fparse ") :], source_file + ) + return get_numeric_parameter(inner_value, source_file, output_unit) + return float(value) + + +def get_numeric_parameter(parameter_name, source_file="ver-1o.i", output_unit=None): + raw_value = get_raw_parameter_value(parameter_name, source_file) + return parse_numeric_value(raw_value, source_file, output_unit) + + +# =============================================================================== +# Physical constants and material properties + +FULL_LENGTH = get_numeric_parameter("full_length", output_unit="m") +HALF_LENGTH = FULL_LENGTH / 2.0 +SURFACE_TEMPERATURE = get_numeric_parameter("temperature_surface") +THERMAL_CONDUCTIVITY = get_numeric_parameter("thermal_conductivity_SI") +SIGMA_REF = get_numeric_parameter("sigma_ref", output_unit="S/m") +VOLTAGE_TOTAL = get_numeric_parameter("V_full") +DENSITY = get_numeric_parameter("density_BCY20", output_unit="kg/m^3") +SPECIFIC_HEAT_MOLAR = get_numeric_parameter("specific_heat_molar") +MOLAR_MASS_BCY20 = get_numeric_parameter("molar_mass_BCY20", output_unit="kg/mol") +NUM_SERIES_TERMS = 2000 # number of Fourier series terms for convergence +PROFILE_TIMES = ( + float(get_raw_block_parameter("vector_postproc_1000s", "sync_times")), + float(get_raw_block_parameter("vector_postproc_20000s", "sync_times")), +) + +SPECIFIC_HEAT = SPECIFIC_HEAT_MOLAR / MOLAR_MASS_BCY20 # J/kg/K +THERMAL_DIFFUSIVITY = THERMAL_CONDUCTIVITY / (DENSITY * SPECIFIC_HEAT) # m^2/s +HEAT_SOURCE = ( + SIGMA_REF * (VOLTAGE_TOTAL / FULL_LENGTH) ** 2 +) # W/m^3, uniform Joule source +LAMBDA_N = ( + np.arange(NUM_SERIES_TERMS, dtype=float) + 0.5 +) * np.pi # eigenvalues: (n+1/2)*pi + +# =============================================================================== +# Analytical solution functions + + +def get_analytical_solution(x_m, time_s): + """Return the transient half-slab temperature profile in kelvin. + + x_m is measured from the prescribed-temperature surface at x = 0. + """ + x_array = np.atleast_1d(np.asarray(x_m, dtype=float)) + if np.isscalar(time_s) and time_s <= 0.0: + return np.full_like(x_array, SURFACE_TEMPERATURE) + + y = x_array / HALF_LENGTH + fourier_number = THERMAL_DIFFUSIVITY * float(time_s) / HALF_LENGTH**2 + sine_term = np.sin(np.outer(LAMBDA_N, y)) + decay_term = np.exp(-(LAMBDA_N**2) * fourier_number) + transient_sum = np.sum( + sine_term * decay_term[:, np.newaxis] / (LAMBDA_N[:, np.newaxis] ** 3), + axis=0, + ) + temperature_rise = ( + HEAT_SOURCE + * HALF_LENGTH**2 + / THERMAL_CONDUCTIVITY + * (y - 0.5 * y**2 - 2.0 * transient_sum) + ) + return SURFACE_TEMPERATURE + temperature_rise + + +def get_analytical_delta_t_history(time_s): + """Return the maximum temperature rise history at the insulated face x = L.""" + times = np.asarray(time_s, dtype=float) + delta_t = np.zeros_like(times) + positive_mask = times > 0.0 + if not np.any(positive_mask): + return delta_t + + fourier_numbers = THERMAL_DIFFUSIVITY * times[positive_mask] / HALF_LENGTH**2 + sine_at_right = np.sin(LAMBDA_N) + decay_term = np.exp(-np.outer(LAMBDA_N**2, fourier_numbers)) + transient_sum = np.sum( + sine_at_right[:, np.newaxis] * decay_term / (LAMBDA_N[:, np.newaxis] ** 3), + axis=0, + ) + delta_t[positive_mask] = ( + HEAT_SOURCE + * HALF_LENGTH**2 + / THERMAL_CONDUCTIVITY + * (0.5 - 2.0 * transient_sum) + ) + return delta_t + + +# =============================================================================== +# Extract TMAP8 results + +results_folder = get_repo_relative_path("gold") + +# one CSV per profile time, named by sync time and timestep index +profile_csvs = { + t: glob.glob( + os.path.join(results_folder, f"ver-1o_vector_postproc_{int(t)}s_line_*.csv") + )[0] + for t in PROFILE_TIMES +} + +# time-history postprocessor output +time_data = pd.read_csv(os.path.join(results_folder, "ver-1o_out.csv")) +time_history = time_data["time"].to_numpy(dtype=float) +tmap_delta_t_history = ( + time_data["delta_T"].to_numpy(dtype=float) + if "delta_T" in time_data + else time_data["temperature_max"].to_numpy(dtype=float) - SURFACE_TEMPERATURE +) + +# =============================================================================== +# Compute RMSPE for temperature-rise history + +analytical_delta_t_history = get_analytical_delta_t_history(time_history) +history_mask = time_history > 0.0 +history_rmse = np.sqrt( + np.mean( + (tmap_delta_t_history[history_mask] - analytical_delta_t_history[history_mask]) + ** 2 + ) +) +history_rmspe = history_rmse * 100.0 / np.mean(analytical_delta_t_history[history_mask]) + +# =============================================================================== +# Plot temperature-rise history + +fig, ax_history = plt.subplots(figsize=(6.5, 5.5)) +ax_history.plot( + time_history[history_mask], + tmap_delta_t_history[history_mask], + label="TMAP8", + c="tab:gray", + linewidth=2, +) +ax_history.plot( + time_history[history_mask], + analytical_delta_t_history[history_mask], + linestyle="--", + label="Analytical", + c="k", + linewidth=2, +) +ax_history.set_xscale("log") +ax_history.set_xlabel("Time (s)", fontsize=15) +ax_history.set_ylabel(r"$\Delta T_{\max}$ (K)", fontsize=15) +ax_history.set_ylim(bottom=0) +ax_history.set_xlim(left=1) +ax_history.legend(loc="lower right", fontsize=15) +ax_history.grid(visible=True, which="major", color="0.65", linestyle="--", alpha=0.3) +ax_history.text( + 0.03, + 0.93, + f"RMSPE = {history_rmspe:.2f} %", + transform=ax_history.transAxes, + fontweight="bold", + fontsize=15, + va="top", +) +ax_history.minorticks_on() +plt.tight_layout() +plt.savefig("ver-1o_comparison_temperature_history.png", bbox_inches="tight", dpi=300) +plt.close(fig) + +# =============================================================================== +# Plot spatial temperature profiles at selected times + +fig, ax_profiles = plt.subplots(figsize=(6.5, 5.5)) +profile_colors = {PROFILE_TIMES[0]: "C0", PROFILE_TIMES[1]: "C1"} +for time_s in PROFILE_TIMES: + line_csv = profile_csvs[time_s] + line_data = pd.read_csv(line_csv) + x_m = line_data["x"].to_numpy(dtype=float) * 1e-6 + tmap_temperature = line_data["temperature"].to_numpy(dtype=float) + analytical_temperature = get_analytical_solution(x_m, time_s) + rmse = np.sqrt(np.mean((tmap_temperature - analytical_temperature) ** 2)) + rmspe = rmse * 100.0 / np.mean(analytical_temperature) + x_mm = x_m * 1e3 + color = profile_colors[time_s] + ax_profiles.plot( + x_mm, + tmap_temperature, + label=f"TMAP8 {time_s:.0f} s", + c=color, + linewidth=2, + alpha=0.5, + ) + ax_profiles.plot( + x_mm, + analytical_temperature, + label=f"Analytical {time_s:.0f} s", + c=color, + linestyle="--", + linewidth=2, + ) + # place RMSPE label near the right end of the curve, colored to match + ax_profiles.text( + x_mm[-1] * 0.85, + (tmap_temperature[-1] + analytical_temperature[-1]) / 2 + 0.1, + f"RMSPE = {rmspe:.2f} %", + color=color, + fontsize=15, + fontweight="bold", + ha="right", + va="center", + ) + +ax_profiles.set_xlabel("Location (mm)", fontsize=15) +ax_profiles.set_ylabel("Temperature (K)", fontsize=15) +ax_profiles.set_xlim(left=0.0, right=HALF_LENGTH * 1e3) +ax_profiles.set_ylim(bottom=771.7, top=777) +ax_profiles.grid(visible=True, which="major", color="0.65", linestyle="--", alpha=0.3) +ax_profiles.legend(loc=[0.3, 0.01], fontsize=15, ncol=1) +ax_profiles.minorticks_on() +plt.tight_layout() +plt.savefig("ver-1o_comparison_temperature_profiles.png", bbox_inches="tight", dpi=300) +plt.close(fig) diff --git a/test/tests/ver-1o/gold/ver-1o_exodus.e b/test/tests/ver-1o/gold/ver-1o_exodus.e new file mode 100644 index 000000000..cc135543f Binary files /dev/null and b/test/tests/ver-1o/gold/ver-1o_exodus.e differ diff --git a/test/tests/ver-1o/gold/ver-1o_out.csv b/test/tests/ver-1o/gold/ver-1o_out.csv new file mode 100644 index 000000000..b29df2115 --- /dev/null +++ b/test/tests/ver-1o/gold/ver-1o_out.csv @@ -0,0 +1,124 @@ +time,delta_T,temperature_max,temperature_min +0,0,773,773 +1,0.0013724711459417,773.00153515329,773.00016268214 +2.1,0.0029384863992163,773.0032238219,773.00028533551 +3.31,0.0046988529967393,773.00508135738,773.00038250439 +4.641,0.0066572334279726,773.00712464641,773.00046741298 +6.1051,0.008825707919641,773.00937226434,773.00054655642 +7.71561,0.011221683303688,773.01184464406,773.00062296076 +9.487171,0.013866058831582,773.01456426175,773.00069820292 +11.4358881,0.016782598432542,773.01755584122,773.00077324278 +13.57947691,0.019997831092837,773.02084657863,773.00084874753 +15.937424601,0.023541162824472,773.02446638978,773.00092522695 +18.5311670611,0.027445084931401,773.02844818204,773.00100309711 +21.38428376721,0.031745439048564,773.03282815353,773.00108271449 +24.522712143931,0.0364817258926,773.03764612218,773.00116439628 +27.974983358324,0.041697454169139,773.04294588768,773.00124843351 +31.772481694157,0.047440529864957,773.04877562974,773.00133509987 +35.949729863572,0.053763687943388,773.055188346,773.00142465805 +40.544702849929,0.060724969512989,773.06224233389,773.00151736437 +45.599173134922,0.068388248293331,773.07000172056,773.00161347227 +51.159090448415,0.076823810845667,773.0785370459,773.00171323505 +57.274999493256,0.086108995619497,773.08792590374,773.00181690812 +64.002499442582,0.096328896447062,773.0982536472,773.00192475076 +71.40274938684,0.10757713659677,773.10961416431,773.00203702771 +79.543024325524,0.11995671973352,773.12211073026,773.00215401053 +88.497326758076,0.13358096363345,773.1358569424,773.00227597877 +98.347059433884,0.14857452025785,773.15097774138,773.00240322112 +109.18176537727,0.1650744801176,773.16761051655,773.00253603643 +121.099941915,0.18323154725272,773.18590628194,773.00267473469 +134.2099361065,0.20321125098326,773.20603088896,773.00281963798 +148.63092971715,0.22519513014629,773.22816621158,773.00297108143 +164.49402268886,0.24938178575758,773.25251119989,773.00312941414 +181.94342495775,0.27598765375399,773.27928265384,773.00329500008 +201.13776745353,0.30524730952902,773.30871552863,773.0034682191 +222.25154419888,0.33741309136258,773.34106255919,773.00364946783 +245.47669861877,0.37275383043766,773.37659299112,773.00383916068 +271.02436848064,0.41155250614463,773.41559023697,773.00403773083 +299.12680532871,0.45410270504885,773.4583483363,773.00424563125 +330.03948586158,0.50070384156425,773.5051671772,773.00446333563 +364.04343444774,0.55165518481772,773.556346524,773.00469133919 +401.44777789251,0.60724881506735,773.612178974,773.00493015893 +442.59255568176,0.66776169245725,773.67294202548,773.00518033302 +487.85181124994,0.73344705365457,773.73888947163,773.00544241797 +537.63699237493,0.80452535622089,773.81024233864,773.00571698242 +592.40069161242,0.88117496933717,773.8871795645,773.00600459516 +652.64076077367,0.96352276904793,773.96982857416,773.00630580512 +718.90483685103,1.0516347447901,774.05825585543,773.00662111064 +791.79532053614,1.1455066712954,774.15245758787,773.00695091657 +871.97485258975,1.2450548573129,774.25235033587,773.00729547855 +960.17233784872,1.3501069638858,774.35776180032,773.00765483643 +1000,1.3960320332077,774.4038428006,773.00781076739 +1097.0172337849,1.5040742200408,774.51225007358,773.00817585354 +1203.7361909482,1.6168533083619,774.62540833429,773.00855502592 +1321.1270438279,1.7338905322285,774.74283760233,773.0089470701 +1450.2569819956,1.8545889177816,774.86393928844,773.00935037066 +1592.29991398,1.978225244524,774.98798808216,773.00976283763 +1748.5471391629,2.1039466463097,775.11412852243,773.01018187612 +1920.4190868641,2.2307721487113,775.24137653917,773.01060439046 +2109.4782293353,2.3576003274931,775.36862714752,773.01102682003 +2317.4432860537,2.4832245100807,775.49466971556,773.01144520548 +2546.204848444,2.6063567685399,775.61821205356,773.01185528502 +2797.8425670733,2.7256614513423,775.73791407115,773.01225261981 +3074.6440575655,2.8397982187178,775.85243096578,773.01263274706 +3379.1256971069,2.9474735337949,775.960464891,773.01299135721 +3714.0555006024,3.0474983877323,776.06082287646,773.01332448873 +4082.4782844476,3.1388487975649,776.15247752796,773.0136287304 +4487.7433466772,3.2207244463153,776.23462586276,773.01390141644 +4933.5349151298,3.2925999219329,776.30674071888,773.01414079694 +5423.9056404276,3.354262585673,776.36860874942,773.01434616375 +5963.3134382553,3.4058314061516,776.42034931927,773.01451791311 +6556.6620158657,3.4477523300786,776.46240986035,773.01465753027 +7209.3454512371,3.4807679946987,776.49553548326,773.01476748856 +7927.2972301457,3.5058626837384,776.52071374988,773.01485106614 +8717.0441869451,3.524186996546,776.5390990916,773.01491209505 +9585.7658394245,3.536970106589,776.55192477565,773.01495466906 +10541.359657152,3.5454299572003,776.56041280169,773.01498284449 +11592.512856652,3.5506925525731,776.56569292408,773.01500037151 +12748.781376102,3.5537302086323,776.56874069702,773.01501048839 +14020.676747497,3.5553252891912,776.57034108997,773.01501580078 +15419.761656032,3.5560612174096,776.57107946919,773.01501825178 +16958.75505542,3.5563375537813,776.5713567259,773.01501917212 +18651.647794747,3.5564019652202,776.57142135186,773.01501938664 +20000,3.5563899669389,776.57140931362,773.01501934668 +21862.18201326,3.5563646738212,776.57138393626,773.01501926244 +23910.582227845,3.5563462985104,776.57136549975,773.01501920124 +26163.822463889,3.556336971634,776.57135614181,773.01501917018 +28642.386723537,3.556336971634,776.57135614181,773.01501917018 +31368.807409151,3.556336971634,776.57135614181,773.01501917018 +34367.870163325,3.556336971634,776.57135614181,773.01501917018 +37666.839192917,3.556336971634,776.57135614181,773.01501917018 +41295.705125469,3.556336971634,776.57135614181,773.01501917018 +45287.457651275,3.556336971634,776.57135614181,773.01501917018 +49678.385429662,3.556336971634,776.57135614181,773.01501917018 +54508.405985888,3.556336971634,776.57135614181,773.01501917018 +59508.405985888,3.556336971634,776.57135614181,773.01501917018 +64508.405985888,3.556336971634,776.57135614181,773.01501917018 +69508.405985888,3.556336971634,776.57135614181,773.01501917018 +74508.405985888,3.556336971634,776.57135614181,773.01501917018 +79508.405985888,3.556336971634,776.57135614181,773.01501917018 +84508.405985888,3.556336971634,776.57135614181,773.01501917018 +89508.405985888,3.556336971634,776.57135614181,773.01501917018 +94508.405985888,3.556336971634,776.57135614181,773.01501917018 +99508.405985888,3.556336971634,776.57135614181,773.01501917018 +104508.40598589,3.556336971634,776.57135614181,773.01501917018 +109508.40598589,3.556336971634,776.57135614181,773.01501917018 +114508.40598589,3.556336971634,776.57135614181,773.01501917018 +119508.40598589,3.556336971634,776.57135614181,773.01501917018 +124508.40598589,3.556336971634,776.57135614181,773.01501917018 +129508.40598589,3.556336971634,776.57135614181,773.01501917018 +134508.40598589,3.556336971634,776.57135614181,773.01501917018 +139508.40598589,3.556336971634,776.57135614181,773.01501917018 +144508.40598589,3.556336971634,776.57135614181,773.01501917018 +149508.40598589,3.556336971634,776.57135614181,773.01501917018 +154508.40598589,3.556336971634,776.57135614181,773.01501917018 +159508.40598589,3.556336971634,776.57135614181,773.01501917018 +164508.40598589,3.556336971634,776.57135614181,773.01501917018 +169508.40598589,3.556336971634,776.57135614181,773.01501917018 +174508.40598589,3.556336971634,776.57135614181,773.01501917018 +179508.40598589,3.556336971634,776.57135614181,773.01501917018 +184508.40598589,3.556336971634,776.57135614181,773.01501917018 +189508.40598589,3.556336971634,776.57135614181,773.01501917018 +194508.40598589,3.556336971634,776.57135614181,773.01501917018 +199508.40598589,3.556336971634,776.57135614181,773.01501917018 +200000,3.556336971634,776.57135614181,773.01501917018 diff --git a/test/tests/ver-1o/gold/ver-1o_vector_postproc_1000s_line_0049.csv b/test/tests/ver-1o/gold/ver-1o_vector_postproc_1000s_line_0049.csv new file mode 100644 index 000000000..e134d7776 --- /dev/null +++ b/test/tests/ver-1o/gold/ver-1o_vector_postproc_1000s_line_0049.csv @@ -0,0 +1,102 @@ +id,temperature,x,y,z +0,773,0,0,0 +50,773.03696094816,50,0,0 +100,773.07321612129,100,0,0 +150,773.10877402775,150,0,0 +200,773.1436431713,200,0,0 +250,773.17783204878,250,0,0 +300,773.21134914778,300,0,0 +350,773.24420294438,350,0,0 +400,773.27640190083,400,0,0 +450,773.30795446328,450,0,0 +500,773.3388690595,500,0,0 +550,773.36915409658,550,0,0 +600,773.39881795869,600,0,0 +650,773.42786900483,650,0,0 +700,773.45631556658,700,0,0 +750,773.48416594586,750,0,0 +800,773.51142841274,800,0,0 +850,773.5381112032,850,0,0 +900,773.56422251698,900,0,0 +950,773.58977051539,950,0,0 +1000,773.61476331914,1000,0,0 +1050,773.63920900621,1050,0,0 +1100,773.66311560976,1100,0,0 +1150,773.68649111599,1150,0,0 +1200,773.70934346206,1200,0,0 +1250,773.73168053405,1250,0,0 +1300,773.75351016491,1300,0,0 +1350,773.77484013246,1350,0,0 +1400,773.79567815734,1400,0,0 +1450,773.81603190112,1450,0,0 +1500,773.83590896429,1500,0,0 +1550,773.85531688434,1550,0,0 +1600,773.8742631339,1600,0,0 +1650,773.89275511886,1650,0,0 +1700,773.91080017647,1700,0,0 +1750,773.92840557361,1750,0,0 +1800,773.94557850491,1800,0,0 +1850,773.96232609105,1850,0,0 +1900,773.97865537701,1900,0,0 +1950,773.99457333034,1950,0,0 +2000,774.01008683949,2000,0,0 +2050,774.02520271217,2050,0,0 +2100,774.03992767375,2100,0,0 +2150,774.05426836562,2150,0,0 +2200,774.06823134366,2200,0,0 +2250,774.08182307673,2250,0,0 +2300,774.09504994511,2300,0,0 +2350,774.10791823909,2350,0,0 +2400,774.12043415752,2400,0,0 +2450,774.13260380637,2450,0,0 +2500,774.14443319738,2500,0,0 +2550,774.15592824673,2550,0,0 +2600,774.16709477367,2600,0,0 +2650,774.17793849929,2650,0,0 +2700,774.18846504525,2700,0,0 +2750,774.19867993254,2750,0,0 +2800,774.20858858031,2800,0,0 +2850,774.21819630471,2850,0,0 +2900,774.22750831773,2900,0,0 +2950,774.23652972615,2950,0,0 +3000,774.24526553041,3000,0,0 +3050,774.25372062363,3050,0,0 +3100,774.26189979055,3100,0,0 +3150,774.26980770659,3150,0,0 +3200,774.27744893688,3200,0,0 +3250,774.28482793534,3250,0,0 +3300,774.29194904378,3300,0,0 +3350,774.29881649109,3350,0,0 +3400,774.30543439231,3400,0,0 +3450,774.31180674791,3450,0,0 +3500,774.31793744299,3500,0,0 +3550,774.32383024651,3550,0,0 +3600,774.32948881058,3600,0,0 +3650,774.33491666978,3650,0,0 +3700,774.34011724045,3700,0,0 +3750,774.34509382011,3750,0,0 +3800,774.34984958681,3800,0,0 +3850,774.35438759853,3850,0,0 +3900,774.35871079263,3900,0,0 +3950,774.36282198535,3950,0,0 +4000,774.36672387122,4000,0,0 +4050,774.37041902266,4050,0,0 +4100,774.37390988944,4100,0,0 +4150,774.37719879831,4150,0,0 +4200,774.38028795254,4200,0,0 +4250,774.38317943155,4250,0,0 +4300,774.38587519053,4300,0,0 +4350,774.38837706012,4350,0,0 +4400,774.39068674608,4400,0,0 +4450,774.392805829,4450,0,0 +4500,774.394735764,4500,0,0 +4550,774.39647788051,4550,0,0 +4600,774.39803338204,4600,0,0 +4650,774.39940334595,4650,0,0 +4700,774.4005887233,4700,0,0 +4750,774.40159033865,4750,0,0 +4800,774.40240888995,4800,0,0 +4850,774.40304494841,4850,0,0 +4900,774.40349895841,4900,0,0 +4950,774.40377123741,4950,0,0 +5000,774.4038619759,5000,0,0 diff --git a/test/tests/ver-1o/gold/ver-1o_vector_postproc_20000s_line_0081.csv b/test/tests/ver-1o/gold/ver-1o_vector_postproc_20000s_line_0081.csv new file mode 100644 index 000000000..6a5868e5a --- /dev/null +++ b/test/tests/ver-1o/gold/ver-1o_vector_postproc_20000s_line_0081.csv @@ -0,0 +1,102 @@ +id,temperature,x,y,z +0,773,0,0,0 +50,773.07107231159,50,0,0 +100,773.14143033724,100,0,0 +150,773.21107407675,150,0,0 +200,773.28000352988,200,0,0 +250,773.34821869644,250,0,0 +300,773.41571957618,300,0,0 +350,773.48250616891,350,0,0 +400,773.54857847441,400,0,0 +450,773.61393649245,450,0,0 +500,773.67858022282,500,0,0 +550,773.74250966531,550,0,0 +600,773.8057248197,600,0,0 +650,773.86822568577,650,0,0 +700,773.93001226332,700,0,0 +750,773.99108455213,750,0,0 +800,774.05144255198,800,0,0 +850,774.11108626268,850,0,0 +900,774.17001568399,900,0,0 +950,774.22823081573,950,0,0 +1000,774.28573165767,1000,0,0 +1050,774.34251820961,1050,0,0 +1100,774.39859047134,1100,0,0 +1150,774.45394844266,1150,0,0 +1200,774.50859212336,1200,0,0 +1250,774.56252151325,1250,0,0 +1300,774.61573661211,1300,0,0 +1350,774.66823741974,1350,0,0 +1400,774.72002393596,1400,0,0 +1450,774.77109616055,1450,0,0 +1500,774.82145409333,1500,0,0 +1550,774.8710977341,1550,0,0 +1600,774.92002708266,1600,0,0 +1650,774.96824213883,1650,0,0 +1700,775.01574290241,1700,0,0 +1750,775.06252937321,1750,0,0 +1800,775.10860155105,1800,0,0 +1850,775.15395943575,1850,0,0 +1900,775.19860302711,1900,0,0 +1950,775.24253232497,1950,0,0 +2000,775.28574732913,2000,0,0 +2050,775.32824803943,2050,0,0 +2100,775.37003445569,2100,0,0 +2150,775.41110657773,2150,0,0 +2200,775.45146440538,2200,0,0 +2250,775.49110793848,2250,0,0 +2300,775.53003717685,2300,0,0 +2350,775.56825212034,2350,0,0 +2400,775.60575276878,2400,0,0 +2450,775.64253912201,2450,0,0 +2500,775.67861117987,2500,0,0 +2550,775.71396894221,2550,0,0 +2600,775.74861240887,2600,0,0 +2650,775.78254157971,2650,0,0 +2700,775.81575645457,2700,0,0 +2750,775.84825703332,2750,0,0 +2800,775.88004331581,2800,0,0 +2850,775.91111530189,2850,0,0 +2900,775.94147299143,2900,0,0 +2950,775.9711163843,2950,0,0 +3000,776.00004548036,3000,0,0 +3050,776.02826027949,3050,0,0 +3100,776.05576078156,3100,0,0 +3150,776.08254698643,3150,0,0 +3200,776.108618894,3200,0,0 +3250,776.13397650415,3250,0,0 +3300,776.15861981675,3300,0,0 +3350,776.1825488317,3350,0,0 +3400,776.20576354889,3400,0,0 +3450,776.22826396821,3450,0,0 +3500,776.25005008956,3500,0,0 +3550,776.27112191283,3550,0,0 +3600,776.29147943793,3600,0,0 +3650,776.31112266477,3650,0,0 +3700,776.33005159325,3700,0,0 +3750,776.34826622329,3750,0,0 +3800,776.36576655479,3800,0,0 +3850,776.38255258769,3850,0,0 +3900,776.3986243219,3900,0,0 +3950,776.41398175734,3950,0,0 +4000,776.42862489395,4000,0,0 +4050,776.44255373165,4050,0,0 +4100,776.45576827037,4100,0,0 +4150,776.46826851007,4150,0,0 +4200,776.48005445067,4200,0,0 +4250,776.49112609212,4250,0,0 +4300,776.50148343437,4300,0,0 +4350,776.51112647737,4350,0,0 +4400,776.52005522107,4400,0,0 +4450,776.52826966543,4450,0,0 +4500,776.53576981041,4500,0,0 +4550,776.54255565598,4550,0,0 +4600,776.54862720211,4600,0,0 +4650,776.55398444875,4650,0,0 +4700,776.5586273959,4700,0,0 +4750,776.56255604352,4750,0,0 +4800,776.56577039161,4800,0,0 +4850,776.56827044013,4850,0,0 +4900,776.57005618908,4900,0,0 +4950,776.57112763846,4950,0,0 +5000,776.57148478825,5000,0,0 diff --git a/test/tests/ver-1o/tests b/test/tests/ver-1o/tests new file mode 100644 index 000000000..12515f702 --- /dev/null +++ b/test/tests/ver-1o/tests @@ -0,0 +1,25 @@ +[Tests] + design = 'HeatConduction.md HeatConductionTimeDerivative.md HeatSource.md' + issues = '#426' + verification = 'ver-1o.md' + [ver-1o] + type = 'Exodiff' + input = 'ver-1o.i' + exodiff = 'ver-1o_exodus.e' + requirement = "The system shall model Joule heating in a PCC slab under a constant electric field and reproduce the transient and steady temperature field for a case with a prescribed left-surface temperature and an insulated right boundary." + [] + [ver-1o_csvdiff] + type = 'CSVDiff' + input = 'ver-1o.i' + csvdiff = 'ver-1o_out.csv' + should_execute = False + prereq = 'ver-1o' + requirement = "The system shall output correct CSV data for the slab Joule-heating temperature verification case with a prescribed left-surface temperature and an insulated right boundary." + [] + [ver-1o_comparison] + type = RunCommand + command = 'python3 comparison_ver-1o.py' + requirement = 'The system shall be able to compare the half-slab Joule-heating temperature transient against the analytical constant-source slab solution in a temperature-rise history figure and a two-time profile figure for case 1o.' + required_python_packages = 'matplotlib numpy pandas glob os' + [] +[] diff --git a/test/tests/ver-1o/ver-1o.i b/test/tests/ver-1o/ver-1o.i new file mode 100644 index 000000000..9a47383dd --- /dev/null +++ b/test/tests/ver-1o/ver-1o.i @@ -0,0 +1,212 @@ +# Verification Problem #1o for Joule heating effect +# Joule heating verification under an applied voltage for proton-conducting ceramics +# +# This case isolates Joule heating in the half-slab symmetry reduction of a +# 10 mm PCC membrane under a 20 V applied potential. + +# Geometry and electrical loading +full_length = '${units 10 mm -> mum}' +length = '${fparse full_length / 2}' +num_nodes = 100 +V_full = '${units 20 V}' +left_voltage = '${units 20 V}' + +# Initial and boundary temperature +temperature_surface = '${units 773 K}' + +# Important times +end_time = '${units 200000 s}' +dt_max = '${units 5000 s}' +dt_start = '${units 1 s}' + +# Thermal properties +# kappa chosen for verification (Delta_T_max ~ 20 K) +thermal_conductivity_SI = '${units 0.014 W/m/K}' +thermal_conductivity = '${fparse thermal_conductivity_SI * 1e-6}' # W/(mum*K) + +# Ref: Yamanaka et al. 2003, J. Alloys and Compounds, Vol. 359, 109-113 +molar_mass_BCY20 = '${units 283.42 g/mol}' +specific_heat_molar = '${units 120 J/mol/K}' +specific_heat = '${fparse specific_heat_molar / molar_mass_BCY20}' # J/(g*K) +density_BCY20 = '${units ${fparse 6.154} g/cm^3 -> g/m^3}' +density_thermal = '${fparse density_BCY20 * 1e-18}' # g/mum^3 + +# Electrical conductivity +# This verification parameter matches the previous coupled case's reference +# conductivity, converted from A/V/m to A/V/mum. +sigma_ref = '${units 1e-03 A/V/m -> A/V/mum}' + +[Mesh] + [cmg] + type = CartesianMeshGenerator + dim = 1 + dx = '${fparse length}' + ix = '${fparse num_nodes}' + [] +[] + +[Variables] + [temperature] + initial_condition = ${temperature_surface} + [] +[] + +[AuxVariables] + [voltage_phi] + [] +[] + +[AuxKernels] + [phi_auxkernel] + type = FunctionAux + variable = voltage_phi + function = '${left_voltage} - (${V_full} / ${full_length}) * x' + execute_on = 'INITIAL TIMESTEP_END' + [] +[] + +[Kernels] + [heat_time] + type = ADHeatConductionTimeDerivative + variable = temperature + specific_heat = specific_heat_BCY20 + density_name = density_BCY20_thermal + [] + [heat_conduction] + type = ADHeatConduction + variable = temperature + thermal_conductivity = thermal_conductivity_BCY20 + [] + [joule_heating_source] + type = ADJouleHeatingSource + variable = temperature + heating_term = joule_heating_Q + [] +[] + +[BCs] + [left_temperature] + type = ADDirichletBC + variable = temperature + boundary = left + value = ${temperature_surface} + [] + [right_insulated] + type = ADNeumannBC + variable = temperature + boundary = right + value = 0 + [] +[] + +[Materials] + [thermal_conductivity_mat] + type = ADGenericConstantMaterial + prop_names = 'thermal_conductivity_BCY20' + prop_values = '${thermal_conductivity}' + [] + [specific_heat_mat] + type = ADGenericConstantMaterial + prop_names = 'specific_heat_BCY20' + prop_values = '${specific_heat}' + [] + [density_thermal_mat] + type = ADGenericConstantMaterial + prop_names = 'density_BCY20_thermal' + prop_values = '${density_thermal}' + [] + + [electrical_conductivity_mat] + type = ADGenericConstantMaterial + prop_names = 'electrical_conductivity' + prop_values = '${sigma_ref}' + [] + [electromagnetic_heating] + type = ADParsedMaterial + property_name = 'joule_heating_Q' + material_property_names = 'electrical_conductivity' + expression = 'electrical_conductivity * (${V_full} / ${full_length})^2' + [] +[] + +[Postprocessors] + [temperature_max] + type = ElementExtremeValue + variable = temperature + value_type = max + execute_on = 'INITIAL TIMESTEP_END' + outputs = 'csv' + [] + [temperature_min] + type = ElementExtremeValue + variable = temperature + value_type = min + execute_on = 'INITIAL TIMESTEP_END' + outputs = 'csv' + [] + [delta_T] + type = ParsedPostprocessor + pp_names = 'temperature_max temperature_min' + expression = 'temperature_max - temperature_min' + execute_on = 'TIMESTEP_END' + outputs = 'csv' + [] +[] + +[VectorPostprocessors] + [line] + type = LineValueSampler + start_point = '0 0 0' + end_point = '${fparse length} 0 0' + num_points = 101 + sort_by = 'x' + variable = 'temperature' + outputs = 'vector_postproc_1000s vector_postproc_20000s' + [] +[] + +[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-8 + nl_abs_tol = 1e-8 + end_time = ${end_time} + automatic_scaling = true + compute_scaling_once = false + dtmax = ${dt_max} + [TimeStepper] + type = IterationAdaptiveDT + dt = ${dt_start} + optimal_iterations = 5 + growth_factor = 1.1 + cutback_factor = 0.9 + cutback_factor_at_failure = 0.9 + [] +[] + +[Outputs] + csv = true + [exodus] + type = Exodus + [] + [vector_postproc_1000s] + type = CSV + sync_times = '1000' + sync_only = true + [] + [vector_postproc_20000s] + type = CSV + sync_times = '20000' + sync_only = true + [] +[]