Skip to content

Note

Click here to download the full example code

Solution verification of the analytic Tan open-hole model

Assess the discretization error of the :class:TanOpenHole model with the DiscretizationSolutionVerification tool, which is based on the Richardson extrapolation 1 2, and compare two field-derived quantities:

  • sigma_xx_probe: sigma_xx bilinearly interpolated at a fixed point just outside the hole. It converges smoothly as the grid is refined.
  • sigma_xx_peak: the maximum of sigma_xx over the grid nodes. Because the node that happens to fall closest to the stress concentration jumps around as the grid changes, this quantity is non-monotone -- a sawtooth. Richardson extrapolation cannot be computed for a sawtooth, so the tool will fall back to a palliative estimator.

From the analytic solution, the model computes grid nodes evaluations and interpolates a field. Any value at a grid node is therefore exact, but coarse meshing degrades any other value querried from the discrete field. We look at two of them, plus the model's own native scalar outputs as a baseline.

... note::

This model is here used an illustrative use-case case for solution verification,
despite having a working principle different from
what is usually prone to solution verification.
from __future__ import annotations

import logging

import numpy as np
import plotly.graph_objects as go
from gemseo.utils.directory_creator import DirectoryNamingMethod
from numpy import atleast_1d
from pandas import DataFrame
from plotly.subplots import make_subplots

from vimseo import EXAMPLE_RUNS_DIR
from vimseo.api import activate_logger
from vimseo.api import create_model
from vimseo.core.model_result import ModelResult
from vimseo.core.model_settings import IntegratedModelSettings
from vimseo.tools.verification.solution_verification import (
    DiscretizationSolutionVerification,
)
from vimseo.utilities.datasets import dataframe_to_dataset

First we set the logger level:

activate_logger(level=logging.INFO)

The model to verify is the analytic Tan open-hole model, loaded in tension:

model_name = "TanOpenHole"
load_case = "Tension"
model = create_model(
    model_name,
    load_case,
    model_options=IntegratedModelSettings(
        directory_archive_root=EXAMPLE_RUNS_DIR / "archive/solution_verification",
        directory_scratch_root=EXAMPLE_RUNS_DIR / "scratch/solution_verification",
        cache_file_path=EXAMPLE_RUNS_DIR
        / f"caches/solution_verification/{model_name}_{load_case}_cache.hdf",
    ),
)

Out:

    INFO - 09:18:30: Found 6 entries in the cache file : C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\model_runs\caches\solution_verification\TanOpenHole_Tension_cache.hdf node : node

We define a set of grid resolutions (points per direction), from coarse to fine:

grid_resolutions = [25, 33, 50, 66, 100, 200]

Helper function to place two plotly figures side by side in a single figure.

def side_by_side(fig_left, fig_right, left_title, right_title, y_title):
    """Place the traces of two plotly figures in a single 1x2 subplot figure."""
    combined = make_subplots(rows=1, cols=2, subplot_titles=(left_title, right_title))
    for trace in fig_left.data:
        combined.add_trace(trace, row=1, col=1)
    for trace in fig_right.data:
        # Avoid duplicating the shared legend entries in the right-hand panel.
        trace.showlegend = False
        combined.add_trace(trace, row=1, col=2)
    combined.update_xaxes(title_text="dx")
    combined.update_yaxes(title_text=y_title, row=1, col=1)
    # ``make_subplots`` centres each panel title over its half-width column, so
    # keep them short (see call sites) and a touch smaller than the default so
    # they do not run into each other in the middle gutter.
    combined.update_annotations(font_size=13)
    return combined

Generate the convergence data for the four quantities of interest. The model is executed once for each grid resolution, and the four quantities (the two field-derived ones and the two native hole-edge stresses) are collected in a single table.

model.execute({"grid_resolution": atleast_1d(grid_resolutions[0])})
input_data = model.get_input_data()
length = float(input_data["length"][0])
width = float(input_data["width"][0])
radius = float(input_data["radius"][0])
probe_x = 0.5 * length
probe_y = 0.5 * width + radius + 3.0

dx_values = []
probe_stresses = []
peak_stresses = []
sigma_xx_r_values = []
sigma_xx_d0_values = []
model_results = {}
for grid_resolution in grid_resolutions:
    output_data = model.execute({"grid_resolution": atleast_1d(grid_resolution)})
    result = ModelResult.from_data(
        {"outputs": output_data, "inputs": model.get_input_data()},
        model=model,
        load_fields=True,
    )
    field = result.fields["flux"][0]
    dx_values.append(float(output_data["dx"][0]))
    probe_stresses.append(field.probe("sigma_xx", probe_x, probe_y))
    peak_stresses.append(float(np.nanmax(field.point_data["sigma_xx"])))
    sigma_xx_r_values.append(float(output_data["sigma_xx_r"][0]))
    sigma_xx_d0_values.append(float(output_data["sigma_xx_d0"][0]))
    model_results[grid_resolution] = result

convergence_table = DataFrame({
    "dx": dx_values,
    "sigma_xx_probe": probe_stresses,
    "sigma_xx_peak": peak_stresses,
    "sigma_xx_r": sigma_xx_r_values,
    "sigma_xx_d0": sigma_xx_d0_values,
})
print(convergence_table)

Out:

         dx  sigma_xx_probe  sigma_xx_peak   sigma_xx_r  sigma_xx_d0
0  3.333333     1312.692749    1998.087574  3137.629147   2094.95564
1  2.500000     1298.612676    1998.087574  3137.629147   2094.95564
2  1.632653     1296.809439    1753.841182  3137.629147   2094.95564
3  1.230769     1295.471224    1816.365910  3137.629147   2094.95564
4  0.808081     1295.369808    1937.173531  3137.629147   2094.95564
5  0.402010     1294.023377    2038.068734  3137.629147   2094.95564

The tool consumes an IODataset. We assemble it from the convergence table with the dataframe_to_dataset helper, using the name{group} naming convention to place dx in the input group and the four stresses in the output group:

dataset = dataframe_to_dataset(
    convergence_table.rename(
        columns={
            "dx": "dx{inputs}",
            "sigma_xx_probe": "sigma_xx_probe{outputs}",
            "sigma_xx_peak": "sigma_xx_peak{outputs}",
            "sigma_xx_r": "sigma_xx_r{outputs}",
            "sigma_xx_d0": "sigma_xx_d0{outputs}",
        }
    )
)

Out:

C:\Users\sebastien.bocquet\Dev\vimseo\src\vimseo\utilities\datasets.py:379: FutureWarning:

Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`

C:\Users\sebastien.bocquet\Dev\vimseo\src\vimseo\utilities\datasets.py:379: FutureWarning:

Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`

C:\Users\sebastien.bocquet\Dev\vimseo\src\vimseo\utilities\datasets.py:379: FutureWarning:

Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`

C:\Users\sebastien.bocquet\Dev\vimseo\src\vimseo\utilities\datasets.py:379: FutureWarning:

Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`

C:\Users\sebastien.bocquet\Dev\vimseo\src\vimseo\utilities\datasets.py:379: FutureWarning:

Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`

A smoothly converging quantity

We first verify the smooth probe stress. It converges monotonically, so the power-law fit recovers the converged stress with a small residual. The three-point Richardson cross-validation may still return nan here: it is fragile as soon as one grid triplet is ill-conditioned, which is one of the motivations for the robust estimators.

verificator = DiscretizationSolutionVerification(
    directory_naming_method=DirectoryNamingMethod.NUMBERED,
    working_directory="DiscretizationSolutionVerification_probe",
)
verificator.execute(
    simulated_data=dataset,
    element_size_variable_name="dx",
    abscissa_name="dx",
    output_name="sigma_xx_probe",
)
extrapolation = verificator.result.extrapolation
print("Richardson q_extrap:", extrapolation["q_extrap"])
print(
    f"Power-law fit: q_converged={extrapolation['q_converged_fit']:.2f}, "
    f"order={extrapolation['order_fit']:.2f}, rmse={extrapolation['fit_rmse']:.2g}"
)
print(
    f"Robust median: q_converged={extrapolation['q_converged_robust']:.2f} "
    f"+/- {extrapolation['q_converged_robust_band']:.2g}"
)
# The tool selects Richardson when available and falls back to a palliative
# otherwise; ``q_converged_method`` says which one was used.
print(
    f"Selected converged value: {extrapolation['q_converged']:.2f} "
    f"(method: {extrapolation['q_converged_method']})"
)

Out:

C:\Users\sebastien.bocquet\Dev\vimseo\.tox\doc\Lib\site-packages\pydantic\main.py:387: UserWarning:

Pydantic serializer warnings:
  Expected `str` but got `tuple` with value `(FieldInfo(annotation=Non... assess convergence.'),)` - serialized value may not be as expected

    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_probe
    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_probe\CustomDOETool
 WARNING - 09:18:31: Richardson extrapolation could not be computed (returned nan); falling back to the palliative 'power_law_fit (palliative)' for output 'sigma_xx_probe'. This is not the reference Richardson method.
Richardson q_extrap: nan
Power-law fit: q_converged=1294.77, order=4.00, rmse=0.92
Robust median: q_converged=1295.37 +/- 0.15
Selected converged value: 1294.77 (method: power_law_fit (palliative))

The convergence-fit plot shows the sampled stress, the fitted power law and the converged-value estimates at a null element size:

figures = verificator.plot_results(
    verificator.result,
    save=False,
    show=True,
    directory_path=verificator.working_directory,
)
figures["convergence_fit"]

Out:

    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_probe
{'text/html': '<div>            <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG"></script><script type="text/javascript">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: "STIX-Web"}});}</script>                <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: \'local\'};</script>\n        <script charset="utf-8" src="https://cdn.plot.ly/plotly-2.35.0.min.js"></script>                <div id="a75c04d1-96a4-4018-87c2-2fe0ee73b482" class="plotly-graph-div" style="height:525px; width:100%;"></div>            <script type="text/javascript">                                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById("a75c04d1-96a4-4018-87c2-2fe0ee73b482")) {                    Plotly.newPlot(                        "a75c04d1-96a4-4018-87c2-2fe0ee73b482",                        [{"error_y":{"array":[0.3506248184377099],"type":"data"},"line":{"color":"chocolate"},"marker":{"size":11,"symbol":"square"},"mode":"markers","name":"converged (power_law_fit (palliative))","showlegend":true,"x":[0.0],"y":[1294.7659549080054],"type":"scatter"},{"line":{"color":"blue","dash":"dash","width":2},"mode":"lines+markers","name":"fold[2.5    1.6327 1.2308 0.8081 0.402 ]","showlegend":true,"x":[2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[1298.6126764271248,1296.8094386216826,1295.4712244795198,1295.3698079185901,1294.0233767083528],"type":"scatter"},{"line":{"color":"blue","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.4020100502512563,0.0],"y":[1294.0233767083528,1293.4013344773641],"type":"scatter"},{"line":{"color":"red","dash":"dash","width":2},"mode":"lines+markers","name":"fold[3.3333 1.6327 1.2308 0.8081 0.402 ]","showlegend":true,"x":[3.3333333333333335,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[1312.6927490695966,1296.8094386216826,1295.4712244795198,1295.3698079185901,1294.0233767083528],"type":"scatter"},{"line":{"color":"red","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.4020100502512563,0.0],"y":[1294.0233767083528,1294.3780602126342],"type":"scatter"},{"line":{"color":"black","dash":"dash","width":2},"mode":"lines+markers","name":"fold[3.3333 2.5    1.2308 0.8081 0.402 ]","showlegend":true,"x":[3.3333333333333335,2.5,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[1312.6927490695966,1298.6126764271248,1295.4712244795198,1295.3698079185901,1294.0233767083528],"type":"scatter"},{"line":{"color":"black","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.4020100502512563,0.0],"y":[1294.0233767083528,1295.4213974790132],"type":"scatter"},{"line":{"color":"green","dash":"dash","width":2},"mode":"lines+markers","name":"fold[3.3333 2.5    1.6327 0.8081 0.402 ]","showlegend":true,"x":[3.3333333333333335,2.5,1.6326530612244898,0.8080808080808081,0.4020100502512563],"y":[1312.6927490695966,1298.6126764271248,1296.8094386216826,1295.3698079185901,1294.0233767083528],"type":"scatter"},{"line":{"color":"green","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.4020100502512563,0.0],"y":[1294.0233767083528,1296.73004125082],"type":"scatter"},{"line":{"color":"orange","dash":"dash","width":2},"mode":"lines+markers","name":"fold[3.3333 2.5    1.6327 1.2308 0.402 ]","showlegend":true,"x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.4020100502512563],"y":[1312.6927490695966,1298.6126764271248,1296.8094386216826,1295.4712244795198,1294.0233767083528],"type":"scatter"},{"line":{"color":"orange","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.4020100502512563,0.0],"y":[1294.0233767083528,1296.73004125082],"type":"scatter"},{"line":{"color":"magenta","dash":"dash","width":2},"mode":"lines+markers","name":"fold[3.3333 2.5    1.6327 1.2308 0.8081]","showlegend":true,"x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081],"y":[1312.6927490695966,1298.6126764271248,1296.8094386216826,1295.4712244795198,1295.3698079185901],"type":"scatter"},{"line":{"color":"magenta","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.8080808080808081,0.0],"y":[1295.3698079185901,1296.73004125082],"type":"scatter"}],                        {"template":{"data":{"candlestick":[{"decreasing":{"line":{"color":"#000033"}},"increasing":{"line":{"color":"#000032"}},"type":"candlestick"}],"contourcarpet":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contourcarpet"}],"contour":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contour"}],"heatmap":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"heatmap"}],"histogram2d":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"histogram2d"}],"icicle":[{"textfont":{"color":"white"},"type":"icicle"}],"sankey":[{"textfont":{"color":"#000036"},"type":"sankey"}],"scatter":[{"marker":{"line":{"width":0}},"type":"scatter"}],"table":[{"cells":{"fill":{"color":"#000038"},"font":{"color":"#000037"},"line":{"color":"#000039"}},"header":{"fill":{"color":"#000040"},"font":{"color":"#000036"},"line":{"color":"#000039"}},"type":"table"}],"waterfall":[{"connector":{"line":{"color":"#000036","width":2}},"decreasing":{"marker":{"color":"#000033"}},"increasing":{"marker":{"color":"#000032"}},"totals":{"marker":{"color":"#000034"}},"type":"waterfall"}]},"layout":{"coloraxis":{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorscale":{"diverging":[[0.0,"#000021"],[0.1,"#000022"],[0.2,"#000023"],[0.3,"#000024"],[0.4,"#000025"],[0.5,"#000026"],[0.6,"#000027"],[0.7,"#000028"],[0.8,"#000029"],[0.9,"#000030"],[1.0,"#000031"]],"sequential":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"sequentialminus":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorway":["#000001","#000002","#000003","#000004","#000005","#000006","#000007","#000008","#000009","#000010"]}},"title":{"text":""},"xaxis":{"title":{"text":"dx"},"showgrid":true},"yaxis":{"title":{"text":"sigma_xx_probe"},"showgrid":true}},                        {"responsive": true}                    )                };                            </script>        </div>'}
    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_probe
{'text/html': '<div>            <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG"></script><script type="text/javascript">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: "STIX-Web"}});}</script>                <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: \'local\'};</script>\n        <script charset="utf-8" src="https://cdn.plot.ly/plotly-2.35.0.min.js"></script>                <div id="2e1914dc-72c4-4ac9-bddc-018e9d676583" class="plotly-graph-div" style="height:525px; width:100%;"></div>            <script type="text/javascript">                                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById("2e1914dc-72c4-4ac9-bddc-018e9d676583")) {                    Plotly.newPlot(                        "2e1914dc-72c4-4ac9-bddc-018e9d676583",                        [{"marker":{"color":"blue"},"mode":"lines+markers","name":"sigma_xx_probe","x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[1312.6927490695966,1298.6126764271248,1296.8094386216826,1295.4712244795198,1295.3698079185901,1294.0233767083528],"type":"scatter"},{"line":{"color":"green","dash":"dash"},"mode":"lines","name":"power-law fit palliative (order=4.00, rmse=0.92)","x":[0.0,0.03367003367003367,0.06734006734006734,0.10101010101010101,0.13468013468013468,0.16835016835016836,0.20202020202020202,0.23569023569023567,0.26936026936026936,0.30303030303030304,0.3367003367003367,0.37037037037037035,0.40404040404040403,0.4377104377104377,0.47138047138047134,0.5050505050505051,0.5387205387205387,0.5723905723905723,0.6060606060606061,0.6397306397306397,0.6734006734006734,0.7070707070707071,0.7407407407407407,0.7744107744107744,0.8080808080808081,0.8417508417508417,0.8754208754208754,0.9090909090909091,0.9427609427609427,0.9764309764309764,1.0101010101010102,1.0437710437710437,1.0774410774410774,1.1111111111111112,1.1447811447811447,1.1784511784511784,1.2121212121212122,1.2457912457912457,1.2794612794612794,1.3131313131313131,1.3468013468013469,1.3804713804713804,1.4141414141414141,1.4478114478114479,1.4814814814814814,1.5151515151515151,1.5488215488215489,1.5824915824915824,1.6161616161616161,1.6498316498316499,1.6835016835016834,1.7171717171717171,1.7508417508417509,1.7845117845117844,1.8181818181818181,1.8518518518518519,1.8855218855218854,1.9191919191919191,1.9528619528619529,1.9865319865319866,2.0202020202020203,2.0538720538720536,2.0875420875420874,2.121212121212121,2.154882154882155,2.1885521885521886,2.2222222222222223,2.255892255892256,2.2895622895622894,2.323232323232323,2.356902356902357,2.3905723905723906,2.4242424242424243,2.457912457912458,2.4915824915824913,2.525252525252525,2.558922558922559,2.5925925925925926,2.6262626262626263,2.65993265993266,2.6936026936026938,2.727272727272727,2.760942760942761,2.7946127946127945,2.8282828282828283,2.861952861952862,2.8956228956228958,2.929292929292929,2.962962962962963,2.9966329966329965,3.0303030303030303,3.063973063973064,3.0976430976430978,3.131313131313131,3.164983164983165,3.1986531986531985,3.2323232323232323,3.265993265993266,3.2996632996632997,3.3333333333333335],"y":[1294.7659549080054,1294.7659550898102,1294.765957816882,1294.7659696341934,1294.7660014500316,1294.7660685359992,1294.7661905270134,1294.7663914213063,1294.7666995804254,1294.7671477292329,1294.767772955906,1294.7686167119366,1294.7697248121322,1294.7711474346142,1294.7729391208204,1294.7751587755022,1294.777869666727,1294.781139425876,1294.7850400476468,1294.7896478900511,1294.7950436744152,1294.8013124853815,1294.808543770906,1294.8168313422611,1294.826273374033,1294.8369724041233,1294.8490353337486,1294.8625734274406,1294.8777023130456,1294.894541981725,1294.9132167879554,1294.933855449528,1294.9565910475492,1294.9815610264402,1295.0089071939374,1295.0387757210917,1295.0713171422697,1295.1066863551523,1295.1450426207355,1295.1865495633306,1295.2313751705633,1295.279691793375,1295.3316761460212,1295.387509306073,1295.4473767144164,1295.511468175252,1295.5799778560956,1295.6531042877782,1295.731050364445,1295.8140233435574,1295.9022348458905,1295.995900855535,1296.0952417198964,1296.2004821496955,1296.3118512189674,1296.4295823650627,1296.5539133886468,1296.6850864537003,1296.823348087518,1296.9689491807108,1297.1221449872035,1297.2831951242363,1297.4523635723644,1297.6299186754584,1297.8161331407027,1298.0112840385978,1298.2156528029586,1298.429525230915,1298.6531914829122,1298.8869460827098,1299.1310879173827,1299.3859202373208,1299.6517506562288,1299.9288911511267,1300.217658062349,1300.5183720935454,1300.8313583116803,1301.1569461470338,1301.4954693932,1301.8472662070888,1302.212679108924,1302.5920549822458,1302.9857450739082,1303.3941049940809,1303.8174947162477,1304.2562785772081,1304.7108252770765,1305.1815078792822,1305.668703810569,1306.1727948609962,1306.6941671839377,1307.233211296083,1307.7903220774358,1308.365898771315,1308.9603449843548,1309.5740686865038,1310.2074822110262,1310.8610022545006,1311.5350498768207,1312.2300505011954],"type":"scatter"},{"marker":{"color":"green","size":10,"symbol":"square"},"mode":"markers","name":"q converged (power-law fit)","x":[0.0],"y":[1294.7659549080054],"type":"scatter"},{"error_y":{"array":[0.15036019323436198],"type":"data"},"marker":{"color":"chocolate","size":10,"symbol":"diamond"},"mode":"markers","name":"q converged (robust median)","x":[0.0],"y":[1295.3698079185901],"type":"scatter"}],                        {"template":{"data":{"candlestick":[{"decreasing":{"line":{"color":"#000033"}},"increasing":{"line":{"color":"#000032"}},"type":"candlestick"}],"contourcarpet":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contourcarpet"}],"contour":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contour"}],"heatmap":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"heatmap"}],"histogram2d":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"histogram2d"}],"icicle":[{"textfont":{"color":"white"},"type":"icicle"}],"sankey":[{"textfont":{"color":"#000036"},"type":"sankey"}],"scatter":[{"marker":{"line":{"width":0}},"type":"scatter"}],"table":[{"cells":{"fill":{"color":"#000038"},"font":{"color":"#000037"},"line":{"color":"#000039"}},"header":{"fill":{"color":"#000040"},"font":{"color":"#000036"},"line":{"color":"#000039"}},"type":"table"}],"waterfall":[{"connector":{"line":{"color":"#000036","width":2}},"decreasing":{"marker":{"color":"#000033"}},"increasing":{"marker":{"color":"#000032"}},"totals":{"marker":{"color":"#000034"}},"type":"waterfall"}]},"layout":{"coloraxis":{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorscale":{"diverging":[[0.0,"#000021"],[0.1,"#000022"],[0.2,"#000023"],[0.3,"#000024"],[0.4,"#000025"],[0.5,"#000026"],[0.6,"#000027"],[0.7,"#000028"],[0.8,"#000029"],[0.9,"#000030"],[1.0,"#000031"]],"sequential":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"sequentialminus":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorway":["#000001","#000002","#000003","#000004","#000005","#000006","#000007","#000008","#000009","#000010"]}},"title":{"text":"Converged sigma_xx_probe = 1295  (method: power_law_fit (palliative))"},"xaxis":{"title":{"text":"dx"}},"yaxis":{"title":{"text":"sigma_xx_probe"}}},                        {"responsive": true}                    )                };                            </script>        </div>'}
    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_probe
{'text/html': '<div>            <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG"></script><script type="text/javascript">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: "STIX-Web"}});}</script>                <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: \'local\'};</script>\n        <script charset="utf-8" src="https://cdn.plot.ly/plotly-2.35.0.min.js"></script>                <div id="adf24dee-d372-4225-903d-5838a72c3a41" class="plotly-graph-div" style="height:525px; width:100%;"></div>            <script type="text/javascript">                                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById("adf24dee-d372-4225-903d-5838a72c3a41")) {                    Plotly.newPlot(                        "adf24dee-d372-4225-903d-5838a72c3a41",                        [{"marker":{"color":"blue"},"mode":"markers","name":"|sigma_xx_probe-extrap|","x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[17.92679416159126,3.8467215191194555,2.043483713677233,0.7052695715144637,0.6038530105847713,0.7425781996525984],"type":"scatter"},{"line":{"color":"green","dash":"dash"},"mode":"lines","name":"order 1","x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[6.157210905452795,4.617908179089596,3.015776770017695,2.2734317189364166,1.4926571892006775,0.7425781996525984],"type":"scatter"},{"line":{"color":"black","dash":"dash"},"mode":"lines","name":"order 2","x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[51.053540424379435,28.717616488713425,12.2477464741535,6.960198647205337,3.0003917237468163,0.7425781996525985],"type":"scatter"}],                        {"template":{"data":{"candlestick":[{"decreasing":{"line":{"color":"#000033"}},"increasing":{"line":{"color":"#000032"}},"type":"candlestick"}],"contourcarpet":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contourcarpet"}],"contour":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contour"}],"heatmap":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"heatmap"}],"histogram2d":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"histogram2d"}],"icicle":[{"textfont":{"color":"white"},"type":"icicle"}],"sankey":[{"textfont":{"color":"#000036"},"type":"sankey"}],"scatter":[{"marker":{"line":{"width":0}},"type":"scatter"}],"table":[{"cells":{"fill":{"color":"#000038"},"font":{"color":"#000037"},"line":{"color":"#000039"}},"header":{"fill":{"color":"#000040"},"font":{"color":"#000036"},"line":{"color":"#000039"}},"type":"table"}],"waterfall":[{"connector":{"line":{"color":"#000036","width":2}},"decreasing":{"marker":{"color":"#000033"}},"increasing":{"marker":{"color":"#000032"}},"totals":{"marker":{"color":"#000034"}},"type":"waterfall"}]},"layout":{"coloraxis":{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorscale":{"diverging":[[0.0,"#000021"],[0.1,"#000022"],[0.2,"#000023"],[0.3,"#000024"],[0.4,"#000025"],[0.5,"#000026"],[0.6,"#000027"],[0.7,"#000028"],[0.8,"#000029"],[0.9,"#000030"],[1.0,"#000031"]],"sequential":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"sequentialminus":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorway":["#000001","#000002","#000003","#000004","#000005","#000006","#000007","#000008","#000009","#000010"]}},"xaxis":{"type":"log","title":{"text":"dx"},"minor":{"ticks":"inside","ticklen":6,"showgrid":true}},"yaxis":{"type":"log","minor":{"ticks":"inside","ticklen":6,"showgrid":true}}},                        {"responsive": true}                    )                };                            </script>        </div>'}
    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_probe
{'text/html': '<div>            <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG"></script><script type="text/javascript">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: "STIX-Web"}});}</script>                <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: \'local\'};</script>\n        <script charset="utf-8" src="https://cdn.plot.ly/plotly-2.35.0.min.js"></script>                <div id="7a77149c-cd2f-4376-99f0-3c0c8e64e943" class="plotly-graph-div" style="height:525px; width:100%;"></div>            <script type="text/javascript">                                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById("7a77149c-cd2f-4376-99f0-3c0c8e64e943")) {                    Plotly.newPlot(                        "7a77149c-cd2f-4376-99f0-3c0c8e64e943",                        [{"marker":{"color":"blue"},"mode":"lines+markers","name":"sigma_xx_probe","x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[0.013845586604773663,0.002970978271816523,0.0015782649411896414,0.0005447081527290961,0.0004663800498428117,-0.0005735231119089469],"type":"scatter"}],                        {"template":{"data":{"candlestick":[{"decreasing":{"line":{"color":"#000033"}},"increasing":{"line":{"color":"#000032"}},"type":"candlestick"}],"contourcarpet":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contourcarpet"}],"contour":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contour"}],"heatmap":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"heatmap"}],"histogram2d":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"histogram2d"}],"icicle":[{"textfont":{"color":"white"},"type":"icicle"}],"sankey":[{"textfont":{"color":"#000036"},"type":"sankey"}],"scatter":[{"marker":{"line":{"width":0}},"type":"scatter"}],"table":[{"cells":{"fill":{"color":"#000038"},"font":{"color":"#000037"},"line":{"color":"#000039"}},"header":{"fill":{"color":"#000040"},"font":{"color":"#000036"},"line":{"color":"#000039"}},"type":"table"}],"waterfall":[{"connector":{"line":{"color":"#000036","width":2}},"decreasing":{"marker":{"color":"#000033"}},"increasing":{"marker":{"color":"#000032"}},"totals":{"marker":{"color":"#000034"}},"type":"waterfall"}]},"layout":{"coloraxis":{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorscale":{"diverging":[[0.0,"#000021"],[0.1,"#000022"],[0.2,"#000023"],[0.3,"#000024"],[0.4,"#000025"],[0.5,"#000026"],[0.6,"#000027"],[0.7,"#000028"],[0.8,"#000029"],[0.9,"#000030"],[1.0,"#000031"]],"sequential":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"sequentialminus":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorway":["#000001","#000002","#000003","#000004","#000005","#000006","#000007","#000008","#000009","#000010"]}},"yaxis":{"minor":{"ticks":"inside","ticklen":6,"showgrid":true},"title":{"text":"Relative error on sigma_xx_probe"}},"xaxis":{"minor":{"ticks":"inside","ticklen":6,"showgrid":true},"title":{"text":"dx"}}},                        {"responsive": true}                    )                };                            </script>        </div>'}

A sawtooth quantity

We now verify the peak stress. Its non-monotone (sawtooth) behaviour makes the three-point Richardson extrapolation fail (nan), so the Richardson-based indicators are unavailable:

verificator_peak = DiscretizationSolutionVerification(
    directory_naming_method=DirectoryNamingMethod.NUMBERED,
    working_directory="DiscretizationSolutionVerification_peak",
)
verificator_peak.execute(
    simulated_data=dataset,
    element_size_variable_name="dx",
    abscissa_name="dx",
    output_name="sigma_xx_peak",
)
extrapolation_peak = verificator_peak.result.extrapolation
print(
    "Richardson q_extrap (nan expected for sawtooth):", extrapolation_peak["q_extrap"]
)
# The residual and band are now much larger than for the smooth probe, correctly
# flagging that this converged value is far less trustworthy.
print(
    f"Power-law fit: q_converged={extrapolation_peak['q_converged_fit']:.2f}, "
    f"order={extrapolation_peak['order_fit']:.2f}, rmse={extrapolation_peak['fit_rmse']:.2g}"
)
print(
    f"Robust median: q_converged={extrapolation_peak['q_converged_robust']:.2f} "
    f"+/- {extrapolation_peak['q_converged_robust_band']:.2g}"
)
# Richardson failed here, so the tool falls back to a palliative and says so.
print(
    f"Selected converged value: {extrapolation_peak['q_converged']:.2f} "
    f"(method: {extrapolation_peak['q_converged_method']})"
)

Out:

C:\Users\sebastien.bocquet\Dev\vimseo\.tox\doc\Lib\site-packages\pydantic\main.py:387: UserWarning:

Pydantic serializer warnings:
  Expected `str` but got `tuple` with value `(FieldInfo(annotation=Non... assess convergence.'),)` - serialized value may not be as expected

    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_peak
    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_peak\CustomDOETool
 WARNING - 09:18:31: Richardson extrapolation could not be computed (returned nan); falling back to the palliative 'power_law_fit (palliative)' for output 'sigma_xx_peak'. This is not the reference Richardson method.
Richardson q_extrap (nan expected for sawtooth): nan
Power-law fit: q_converged=1897.80, order=4.00, rmse=96
Robust median: q_converged=1937.17 +/- 1.5e+02
Selected converged value: 1897.80 (method: power_law_fit (palliative))

Two plots are produced. The convergence-fit plot (on all grid points) stays informative: it overlays the power-law fit (with its fitted order and residual) and the model-free median of the finest grids (with its uncertainty band) on the sawtooth data:

figures_peak = verificator_peak.plot_results(
    verificator_peak.result,
    save=False,
    show=True,
    directory_path=verificator_peak.working_directory,
)
figures_peak["convergence_fit"]

Out:

    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_peak
{'text/html': '<div>            <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG"></script><script type="text/javascript">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: "STIX-Web"}});}</script>                <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: \'local\'};</script>\n        <script charset="utf-8" src="https://cdn.plot.ly/plotly-2.35.0.min.js"></script>                <div id="e11b0356-aa11-4353-a636-a75ea4954dc8" class="plotly-graph-div" style="height:525px; width:100%;"></div>            <script type="text/javascript">                                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById("e11b0356-aa11-4353-a636-a75ea4954dc8")) {                    Plotly.newPlot(                        "e11b0356-aa11-4353-a636-a75ea4954dc8",                        [{"error_y":{"array":[193.3300805846279],"type":"data"},"line":{"color":"chocolate"},"marker":{"size":11,"symbol":"square"},"mode":"markers","name":"converged (power_law_fit (palliative))","showlegend":true,"x":[0.0],"y":[1897.8033759569723],"type":"scatter"},{"line":{"color":"blue","dash":"dash","width":2},"mode":"lines+markers","name":"fold[2.5    1.6327 1.2308 0.8081 0.402 ]","showlegend":true,"x":[2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[1998.0875744127472,1753.8411818590084,1816.3659098216335,1937.173530737571,2038.068733813785],"type":"scatter"},{"line":{"color":"blue","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.4020100502512563,0.0],"y":[2038.068733813785,2583.456639599675],"type":"scatter"},{"line":{"color":"red","dash":"dash","width":2},"mode":"lines+markers","name":"fold[3.3333 1.6327 1.2308 0.8081 0.402 ]","showlegend":true,"x":[3.3333333333333335,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[1998.0875744127472,1753.8411818590084,1816.3659098216335,1937.173530737571,2038.068733813785],"type":"scatter"},{"line":{"color":"red","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.4020100502512563,0.0],"y":[2038.068733813785,2310.6834124445013],"type":"scatter"},{"line":{"color":"black","dash":"dash","width":2},"mode":"lines+markers","name":"fold[3.3333 2.5    1.2308 0.8081 0.402 ]","showlegend":true,"x":[3.3333333333333335,2.5,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[1998.0875744127472,1998.0875744127472,1816.3659098216335,1937.173530737571,2038.068733813785],"type":"scatter"},{"line":{"color":"black","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.4020100502512563,0.0],"y":[2038.068733813785,1938.2577493846047],"type":"scatter"},{"line":{"color":"green","dash":"dash","width":2},"mode":"lines+markers","name":"fold[3.3333 2.5    1.6327 0.8081 0.402 ]","showlegend":true,"x":[3.3333333333333335,2.5,1.6326530612244898,0.8080808080808081,0.4020100502512563],"y":[1998.0875744127472,1998.0875744127472,1753.8411818590084,1937.173530737571,2038.068733813785],"type":"scatter"},{"line":{"color":"green","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.4020100502512563,0.0],"y":[2038.068733813785,1922.6689889309228],"type":"scatter"},{"line":{"color":"orange","dash":"dash","width":2},"mode":"lines+markers","name":"fold[3.3333 2.5    1.6327 1.2308 0.402 ]","showlegend":true,"x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.4020100502512563],"y":[1998.0875744127472,1998.0875744127472,1753.8411818590084,1816.3659098216335,2038.068733813785],"type":"scatter"},{"line":{"color":"orange","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.4020100502512563,0.0],"y":[2038.068733813785,1885.8323324465757],"type":"scatter"},{"line":{"color":"magenta","dash":"dash","width":2},"mode":"lines+markers","name":"fold[3.3333 2.5    1.6327 1.2308 0.8081]","showlegend":true,"x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081],"y":[1998.0875744127472,1998.0875744127472,1753.8411818590084,1816.3659098216335,1937.173530737571],"type":"scatter"},{"line":{"color":"magenta","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.8080808080808081,0.0],"y":[1937.173530737571,1844.6950529857547],"type":"scatter"}],                        {"template":{"data":{"candlestick":[{"decreasing":{"line":{"color":"#000033"}},"increasing":{"line":{"color":"#000032"}},"type":"candlestick"}],"contourcarpet":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contourcarpet"}],"contour":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contour"}],"heatmap":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"heatmap"}],"histogram2d":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"histogram2d"}],"icicle":[{"textfont":{"color":"white"},"type":"icicle"}],"sankey":[{"textfont":{"color":"#000036"},"type":"sankey"}],"scatter":[{"marker":{"line":{"width":0}},"type":"scatter"}],"table":[{"cells":{"fill":{"color":"#000038"},"font":{"color":"#000037"},"line":{"color":"#000039"}},"header":{"fill":{"color":"#000040"},"font":{"color":"#000036"},"line":{"color":"#000039"}},"type":"table"}],"waterfall":[{"connector":{"line":{"color":"#000036","width":2}},"decreasing":{"marker":{"color":"#000033"}},"increasing":{"marker":{"color":"#000032"}},"totals":{"marker":{"color":"#000034"}},"type":"waterfall"}]},"layout":{"coloraxis":{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorscale":{"diverging":[[0.0,"#000021"],[0.1,"#000022"],[0.2,"#000023"],[0.3,"#000024"],[0.4,"#000025"],[0.5,"#000026"],[0.6,"#000027"],[0.7,"#000028"],[0.8,"#000029"],[0.9,"#000030"],[1.0,"#000031"]],"sequential":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"sequentialminus":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorway":["#000001","#000002","#000003","#000004","#000005","#000006","#000007","#000008","#000009","#000010"]}},"title":{"text":""},"xaxis":{"title":{"text":"dx"},"showgrid":true},"yaxis":{"title":{"text":"sigma_xx_peak"},"showgrid":true}},                        {"responsive": true}                    )                };                            </script>        </div>'}
    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_peak
{'text/html': '<div>            <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG"></script><script type="text/javascript">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: "STIX-Web"}});}</script>                <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: \'local\'};</script>\n        <script charset="utf-8" src="https://cdn.plot.ly/plotly-2.35.0.min.js"></script>                <div id="f54ddb53-ad63-493b-a323-35bd6dccb0c7" class="plotly-graph-div" style="height:525px; width:100%;"></div>            <script type="text/javascript">                                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById("f54ddb53-ad63-493b-a323-35bd6dccb0c7")) {                    Plotly.newPlot(                        "f54ddb53-ad63-493b-a323-35bd6dccb0c7",                        [{"marker":{"color":"blue"},"mode":"lines+markers","name":"sigma_xx_peak","x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[1998.0875744127472,1998.0875744127472,1753.8411818590084,1816.3659098216335,1937.173530737571,2038.068733813785],"type":"scatter"},{"line":{"color":"green","dash":"dash"},"mode":"lines","name":"power-law fit palliative (order=4.00, rmse=96)","x":[0.0,0.03367003367003367,0.06734006734006734,0.10101010101010101,0.13468013468013468,0.16835016835016836,0.20202020202020202,0.23569023569023567,0.26936026936026936,0.30303030303030304,0.3367003367003367,0.37037037037037035,0.40404040404040403,0.4377104377104377,0.47138047138047134,0.5050505050505051,0.5387205387205387,0.5723905723905723,0.6060606060606061,0.6397306397306397,0.6734006734006734,0.7070707070707071,0.7407407407407407,0.7744107744107744,0.8080808080808081,0.8417508417508417,0.8754208754208754,0.9090909090909091,0.9427609427609427,0.9764309764309764,1.0101010101010102,1.0437710437710437,1.0774410774410774,1.1111111111111112,1.1447811447811447,1.1784511784511784,1.2121212121212122,1.2457912457912457,1.2794612794612794,1.3131313131313131,1.3468013468013469,1.3804713804713804,1.4141414141414141,1.4478114478114479,1.4814814814814814,1.5151515151515151,1.5488215488215489,1.5824915824915824,1.6161616161616161,1.6498316498316499,1.6835016835016834,1.7171717171717171,1.7508417508417509,1.7845117845117844,1.8181818181818181,1.8518518518518519,1.8855218855218854,1.9191919191919191,1.9528619528619529,1.9865319865319866,2.0202020202020203,2.0538720538720536,2.0875420875420874,2.121212121212121,2.154882154882155,2.1885521885521886,2.2222222222222223,2.255892255892256,2.2895622895622894,2.323232323232323,2.356902356902357,2.3905723905723906,2.4242424242424243,2.457912457912458,2.4915824915824913,2.525252525252525,2.558922558922559,2.5925925925925926,2.6262626262626263,2.65993265993266,2.6936026936026938,2.727272727272727,2.760942760942761,2.7946127946127945,2.8282828282828283,2.861952861952862,2.8956228956228958,2.929292929292929,2.962962962962963,2.9966329966329965,3.0303030303030303,3.063973063973064,3.0976430976430978,3.131313131313131,3.164983164983165,3.1986531986531985,3.2323232323232323,3.265993265993266,3.2996632996632997,3.3333333333333335],"y":[1897.8033759569723,1897.8033771111998,1897.8033944246106,1897.8034694493908,1897.8036714391837,1897.8040973490902,1897.804871835668,1897.8061472569325,1897.808103672356,1897.8109488428688,1897.814918230858,1897.820275000168,1897.8273100161011,1897.836341845416,1897.8477167563292,1897.8618087185148,1897.879019403104,1897.8997781826847,1897.9245421313033,1897.9537960244625,1897.9880523391228,1898.0278512537018,1898.0737606480745,1898.1263761035734,1898.186320902988,1898.2542460305651,1898.3308301720094,1898.416779714482,1898.512828746602,1898.6197390584457,1898.7383001415465,1898.869329188895,1899.0136710949396,1899.1721984555859,1899.345811568196,1899.5354384315908,1899.742034746047,1899.9665839132997,1900.2100970365407,1900.4736129204193,1900.758198071042,1901.064946695973,1901.3949807042336,1901.749449706302,1902.129531014114,1902.5364296410633,1902.971378302,1903.4356374132317,1903.9304950925239,1904.4572671590988,1905.017297133636,1905.6119562382728,1906.2426433966032,1906.910785233679,1907.6178360760093,1908.3652779515603,1909.1546205897553,1909.9874014214754,1910.8651855790586,1911.7895658963005,1912.762162908454,1913.7846248522292,1914.8586276657932,1915.985874988771,1917.1680981622446,1918.4070562287534,1919.7045359322938,1921.0623517183199,1922.482345733743,1923.9663878269316,1925.5163755477115,1927.134234147366,1928.8219165786356,1930.5814034957182,1932.4147032542685,1934.3238519113993,1936.3109132256802,1938.3779786571383,1940.5271673672576,1942.7606262189802,1945.0805297767047,1947.4890803062874,1949.988507775042,1952.5810698517396,1955.2690519066077,1958.0547670113324,1960.9405559390561,1963.928787164379,1967.0218568633586,1970.2221889135096,1973.532234893804,1976.9544740846707,1980.491413467997,1984.1455877271264,1987.9195592468602,1991.8159181134572,1995.837282114633,1999.9862967395607,2004.2656351788708,2008.677998324651],"type":"scatter"},{"marker":{"color":"green","size":10,"symbol":"square"},"mode":"markers","name":"q converged (power-law fit)","x":[0.0],"y":[1897.8033759569723],"type":"scatter"},{"error_y":{"array":[149.58722808079503],"type":"data"},"marker":{"color":"chocolate","size":10,"symbol":"diamond"},"mode":"markers","name":"q converged (robust median)","x":[0.0],"y":[1937.173530737571],"type":"scatter"}],                        {"template":{"data":{"candlestick":[{"decreasing":{"line":{"color":"#000033"}},"increasing":{"line":{"color":"#000032"}},"type":"candlestick"}],"contourcarpet":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contourcarpet"}],"contour":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contour"}],"heatmap":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"heatmap"}],"histogram2d":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"histogram2d"}],"icicle":[{"textfont":{"color":"white"},"type":"icicle"}],"sankey":[{"textfont":{"color":"#000036"},"type":"sankey"}],"scatter":[{"marker":{"line":{"width":0}},"type":"scatter"}],"table":[{"cells":{"fill":{"color":"#000038"},"font":{"color":"#000037"},"line":{"color":"#000039"}},"header":{"fill":{"color":"#000040"},"font":{"color":"#000036"},"line":{"color":"#000039"}},"type":"table"}],"waterfall":[{"connector":{"line":{"color":"#000036","width":2}},"decreasing":{"marker":{"color":"#000033"}},"increasing":{"marker":{"color":"#000032"}},"totals":{"marker":{"color":"#000034"}},"type":"waterfall"}]},"layout":{"coloraxis":{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorscale":{"diverging":[[0.0,"#000021"],[0.1,"#000022"],[0.2,"#000023"],[0.3,"#000024"],[0.4,"#000025"],[0.5,"#000026"],[0.6,"#000027"],[0.7,"#000028"],[0.8,"#000029"],[0.9,"#000030"],[1.0,"#000031"]],"sequential":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"sequentialminus":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorway":["#000001","#000002","#000003","#000004","#000005","#000006","#000007","#000008","#000009","#000010"]}},"title":{"text":"Converged sigma_xx_peak = 1898  (method: power_law_fit (palliative))"},"xaxis":{"title":{"text":"dx"}},"yaxis":{"title":{"text":"sigma_xx_peak"}}},                        {"responsive": true}                    )                };                            </script>        </div>'}
    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_peak
{'text/html': '<div>            <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG"></script><script type="text/javascript">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: "STIX-Web"}});}</script>                <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: \'local\'};</script>\n        <script charset="utf-8" src="https://cdn.plot.ly/plotly-2.35.0.min.js"></script>                <div id="1bc0ad08-3129-42a2-bb14-681ae30445fd" class="plotly-graph-div" style="height:525px; width:100%;"></div>            <script type="text/javascript">                                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById("1bc0ad08-3129-42a2-bb14-681ae30445fd")) {                    Plotly.newPlot(                        "1bc0ad08-3129-42a2-bb14-681ae30445fd",                        [{"marker":{"color":"blue"},"mode":"markers","name":"|sigma_xx_peak-extrap|","x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[100.28419845577491,100.28419845577491,143.9621940979639,81.43746613533881,39.37015478059857,140.26535785681267],"type":"scatter"},{"line":{"color":"green","dash":"dash"},"mode":"lines","name":"order 1","x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[1163.033592229405,872.2751941720537,569.6491063980759,429.427787900088,281.9475375101588,140.26535785681267],"type":"scatter"},{"line":{"color":"black","dash":"dash"},"mode":"lines","name":"order 2","x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[9643.48686890215,5424.4613637574585,2313.472901494227,1314.7096891095002,566.7430299446626,140.26535785681267],"type":"scatter"}],                        {"template":{"data":{"candlestick":[{"decreasing":{"line":{"color":"#000033"}},"increasing":{"line":{"color":"#000032"}},"type":"candlestick"}],"contourcarpet":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contourcarpet"}],"contour":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contour"}],"heatmap":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"heatmap"}],"histogram2d":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"histogram2d"}],"icicle":[{"textfont":{"color":"white"},"type":"icicle"}],"sankey":[{"textfont":{"color":"#000036"},"type":"sankey"}],"scatter":[{"marker":{"line":{"width":0}},"type":"scatter"}],"table":[{"cells":{"fill":{"color":"#000038"},"font":{"color":"#000037"},"line":{"color":"#000039"}},"header":{"fill":{"color":"#000040"},"font":{"color":"#000036"},"line":{"color":"#000039"}},"type":"table"}],"waterfall":[{"connector":{"line":{"color":"#000036","width":2}},"decreasing":{"marker":{"color":"#000033"}},"increasing":{"marker":{"color":"#000032"}},"totals":{"marker":{"color":"#000034"}},"type":"waterfall"}]},"layout":{"coloraxis":{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorscale":{"diverging":[[0.0,"#000021"],[0.1,"#000022"],[0.2,"#000023"],[0.3,"#000024"],[0.4,"#000025"],[0.5,"#000026"],[0.6,"#000027"],[0.7,"#000028"],[0.8,"#000029"],[0.9,"#000030"],[1.0,"#000031"]],"sequential":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"sequentialminus":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorway":["#000001","#000002","#000003","#000004","#000005","#000006","#000007","#000008","#000009","#000010"]}},"xaxis":{"type":"log","title":{"text":"dx"},"minor":{"ticks":"inside","ticklen":6,"showgrid":true}},"yaxis":{"type":"log","minor":{"ticks":"inside","ticklen":6,"showgrid":true}}},                        {"responsive": true}                    )                };                            </script>        </div>'}
    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_peak
{'text/html': '<div>            <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG"></script><script type="text/javascript">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: "STIX-Web"}});}</script>                <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: \'local\'};</script>\n        <script charset="utf-8" src="https://cdn.plot.ly/plotly-2.35.0.min.js"></script>                <div id="408baaca-04e0-4e98-b4c8-2eb723eb1893" class="plotly-graph-div" style="height:525px; width:100%;"></div>            <script type="text/javascript">                                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById("408baaca-04e0-4e98-b4c8-2eb723eb1893")) {                    Plotly.newPlot(                        "408baaca-04e0-4e98-b4c8-2eb723eb1893",                        [{"marker":{"color":"blue"},"mode":"lines+markers","name":"sigma_xx_peak","x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[0.052842248952795934,0.052842248952795934,-0.07585727579674612,-0.042911434960575805,0.02074511789755146,0.07390932044584624],"type":"scatter"}],                        {"template":{"data":{"candlestick":[{"decreasing":{"line":{"color":"#000033"}},"increasing":{"line":{"color":"#000032"}},"type":"candlestick"}],"contourcarpet":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contourcarpet"}],"contour":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contour"}],"heatmap":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"heatmap"}],"histogram2d":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"histogram2d"}],"icicle":[{"textfont":{"color":"white"},"type":"icicle"}],"sankey":[{"textfont":{"color":"#000036"},"type":"sankey"}],"scatter":[{"marker":{"line":{"width":0}},"type":"scatter"}],"table":[{"cells":{"fill":{"color":"#000038"},"font":{"color":"#000037"},"line":{"color":"#000039"}},"header":{"fill":{"color":"#000040"},"font":{"color":"#000036"},"line":{"color":"#000039"}},"type":"table"}],"waterfall":[{"connector":{"line":{"color":"#000036","width":2}},"decreasing":{"marker":{"color":"#000033"}},"increasing":{"marker":{"color":"#000032"}},"totals":{"marker":{"color":"#000034"}},"type":"waterfall"}]},"layout":{"coloraxis":{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorscale":{"diverging":[[0.0,"#000021"],[0.1,"#000022"],[0.2,"#000023"],[0.3,"#000024"],[0.4,"#000025"],[0.5,"#000026"],[0.6,"#000027"],[0.7,"#000028"],[0.8,"#000029"],[0.9,"#000030"],[1.0,"#000031"]],"sequential":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"sequentialminus":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorway":["#000001","#000002","#000003","#000004","#000005","#000006","#000007","#000008","#000009","#000010"]}},"yaxis":{"minor":{"ticks":"inside","ticklen":6,"showgrid":true},"title":{"text":"Relative error on sigma_xx_peak"}},"xaxis":{"minor":{"ticks":"inside","ticklen":6,"showgrid":true},"title":{"text":"dx"}}},                        {"responsive": true}                    )                };                            </script>        </div>'}

Discussion: smooth versus sawtooth

Putting the two diagnostics side by side for the two outputs tells a consistent story about whether the mesh is in the asymptotic (converged) regime.

Cross-validation plot (smooth probe on the left, sawtooth peak on the right). For the smooth probe stress the leave-one-grid-out folds almost overlap and all extrapolate to nearly the same value, so the cross-validation band is tight: dropping any grid barely moves the estimate, a sign that the converged value is trustworthy. For the sawtooth peak stress the folds scatter and extrapolate to markedly different values, giving a wide band: the estimate depends heavily on which grids are used.

side_by_side(
    figures["convergence_cross_validation"],
    figures_peak["convergence_cross_validation"],
    "smooth probe",
    "sawtooth peak",
    "sigma_xx",
)

Relative-error plot (smooth probe on the left, sawtooth peak on the right). For the probe the relative error with respect to the converged value decreases monotonically as the element size shrinks -- the expected asymptotic behaviour. For the peak it oscillates and does not settle, showing that the quantity never enters the asymptotic regime, so no meaningful discretization order (and hence no reliable Richardson extrapolation) exists.

side_by_side(
    figures["relative_error_versus_element_size"],
    figures_peak["relative_error_versus_element_size"],
    "smooth probe",
    "sawtooth peak",
    "relative error",
)

The two diagnostics agree, and they agree with the fit residual and the robust band reported earlier: the probe stress is converged and its palliative value is reliable, whereas the peak stress is dominated by mesh sampling noise and its "converged value" should be treated with caution. In practice, a wide cross-validation band or a non-monotone relative error is the signal to refine the mesh further (or to pick a smoother quantity of interest) before trusting the extrapolation.

Native analytic outputs: a mesh-independent baseline

The model's native scalar outputs sigma_xx_r and sigma_xx_d0 are the hole-edge stresses evaluated directly on the analytic Tan solution (at the hole radius, and one stress-point distance d0 beyond it). They do not read the discretised field at all, so they are exactly mesh-independent. They were collected in the same loop as the field-derived quantities above, so no extra model runs are needed here -- we just verify them from the same dataset. Verifying them is a useful sanity check and a third reference behaviour, next to the smooth and sawtooth field quantities.

native_verificators = {}
for native_output in ("sigma_xx_r", "sigma_xx_d0"):
    verificator_native = DiscretizationSolutionVerification(
        directory_naming_method=DirectoryNamingMethod.NUMBERED,
        working_directory=f"DiscretizationSolutionVerification_{native_output}",
    )
    verificator_native.execute(
        simulated_data=dataset,
        element_size_variable_name="dx",
        abscissa_name="dx",
        output_name=native_output,
    )
    native_verificators[native_output] = verificator_native
    native_extrapolation = verificator_native.result.extrapolation
    print(
        f"{native_output}: converged={native_extrapolation['q_converged']:.4f} "
        f"(method: {native_extrapolation['q_converged_method']})"
    )

Out:

C:\Users\sebastien.bocquet\Dev\vimseo\.tox\doc\Lib\site-packages\pydantic\main.py:387: UserWarning:

Pydantic serializer warnings:
  Expected `str` but got `tuple` with value `(FieldInfo(annotation=Non... assess convergence.'),)` - serialized value may not be as expected

    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_sigma_xx_r
    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_sigma_xx_r\CustomDOETool
sigma_xx_r: converged=3137.6291 (method: richardson)
C:\Users\sebastien.bocquet\Dev\vimseo\.tox\doc\Lib\site-packages\pydantic\main.py:387: UserWarning:

Pydantic serializer warnings:
  Expected `str` but got `tuple` with value `(FieldInfo(annotation=Non... assess convergence.'),)` - serialized value may not be as expected

    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_sigma_xx_d0
    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_sigma_xx_d0\CustomDOETool
sigma_xx_d0: converged=2094.9556 (method: richardson)

Because the values are constant, Richardson succeeds trivially and returns the constant as the converged value (no palliative needed). The convergence-fit plots are flat, side by side (sigma_xx_r on the left, sigma_xx_d0 on the right):

native_figures = {
    name: verificator.plot_results(
        verificator.result,
        save=False,
        show=True,
        directory_path=verificator.working_directory,
    )
    for name, verificator in native_verificators.items()
}
side_by_side(
    native_figures["sigma_xx_r"]["convergence_fit"],
    native_figures["sigma_xx_d0"]["convergence_fit"],
    "sigma_xx_r",
    "sigma_xx_d0",
    "sigma_xx",
)

Out:

    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_sigma_xx_r
{'text/html': '<div>            <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG"></script><script type="text/javascript">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: "STIX-Web"}});}</script>                <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: \'local\'};</script>\n        <script charset="utf-8" src="https://cdn.plot.ly/plotly-2.35.0.min.js"></script>                <div id="a3ebc21b-1cdc-4ad5-9b1b-2160a7c9020c" class="plotly-graph-div" style="height:525px; width:100%;"></div>            <script type="text/javascript">                                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById("a3ebc21b-1cdc-4ad5-9b1b-2160a7c9020c")) {                    Plotly.newPlot(                        "a3ebc21b-1cdc-4ad5-9b1b-2160a7c9020c",                        [{"error_y":{"array":[1.3484168448485433e-12],"type":"data"},"line":{"color":"chocolate"},"marker":{"size":11,"symbol":"square"},"mode":"markers","name":"converged (richardson)","showlegend":true,"x":[0.0],"y":[3137.6291470592705],"type":"scatter"},{"line":{"color":"blue","dash":"dash","width":2},"mode":"lines+markers","name":"fold[2.5    1.6327 1.2308 0.8081 0.402 ]","showlegend":true,"x":[2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271],"type":"scatter"},{"line":{"color":"blue","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.4020100502512563,0.0],"y":[3137.629147059271,3137.629147059271],"type":"scatter"},{"line":{"color":"red","dash":"dash","width":2},"mode":"lines+markers","name":"fold[3.3333 1.6327 1.2308 0.8081 0.402 ]","showlegend":true,"x":[3.3333333333333335,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271],"type":"scatter"},{"line":{"color":"red","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.4020100502512563,0.0],"y":[3137.629147059271,3137.629147059271],"type":"scatter"},{"line":{"color":"black","dash":"dash","width":2},"mode":"lines+markers","name":"fold[3.3333 2.5    1.2308 0.8081 0.402 ]","showlegend":true,"x":[3.3333333333333335,2.5,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271],"type":"scatter"},{"line":{"color":"black","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.4020100502512563,0.0],"y":[3137.629147059271,3137.629147059271],"type":"scatter"},{"line":{"color":"green","dash":"dash","width":2},"mode":"lines+markers","name":"fold[3.3333 2.5    1.6327 0.8081 0.402 ]","showlegend":true,"x":[3.3333333333333335,2.5,1.6326530612244898,0.8080808080808081,0.4020100502512563],"y":[3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271],"type":"scatter"},{"line":{"color":"green","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.4020100502512563,0.0],"y":[3137.629147059271,3137.629147059271],"type":"scatter"},{"line":{"color":"orange","dash":"dash","width":2},"mode":"lines+markers","name":"fold[3.3333 2.5    1.6327 1.2308 0.402 ]","showlegend":true,"x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.4020100502512563],"y":[3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271],"type":"scatter"},{"line":{"color":"orange","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.4020100502512563,0.0],"y":[3137.629147059271,3137.629147059271],"type":"scatter"},{"line":{"color":"magenta","dash":"dash","width":2},"mode":"lines+markers","name":"fold[3.3333 2.5    1.6327 1.2308 0.8081]","showlegend":true,"x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081],"y":[3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271],"type":"scatter"},{"line":{"color":"magenta","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.8080808080808081,0.0],"y":[3137.629147059271,3137.629147059271],"type":"scatter"}],                        {"template":{"data":{"candlestick":[{"decreasing":{"line":{"color":"#000033"}},"increasing":{"line":{"color":"#000032"}},"type":"candlestick"}],"contourcarpet":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contourcarpet"}],"contour":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contour"}],"heatmap":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"heatmap"}],"histogram2d":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"histogram2d"}],"icicle":[{"textfont":{"color":"white"},"type":"icicle"}],"sankey":[{"textfont":{"color":"#000036"},"type":"sankey"}],"scatter":[{"marker":{"line":{"width":0}},"type":"scatter"}],"table":[{"cells":{"fill":{"color":"#000038"},"font":{"color":"#000037"},"line":{"color":"#000039"}},"header":{"fill":{"color":"#000040"},"font":{"color":"#000036"},"line":{"color":"#000039"}},"type":"table"}],"waterfall":[{"connector":{"line":{"color":"#000036","width":2}},"decreasing":{"marker":{"color":"#000033"}},"increasing":{"marker":{"color":"#000032"}},"totals":{"marker":{"color":"#000034"}},"type":"waterfall"}]},"layout":{"coloraxis":{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorscale":{"diverging":[[0.0,"#000021"],[0.1,"#000022"],[0.2,"#000023"],[0.3,"#000024"],[0.4,"#000025"],[0.5,"#000026"],[0.6,"#000027"],[0.7,"#000028"],[0.8,"#000029"],[0.9,"#000030"],[1.0,"#000031"]],"sequential":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"sequentialminus":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorway":["#000001","#000002","#000003","#000004","#000005","#000006","#000007","#000008","#000009","#000010"]}},"title":{"text":""},"xaxis":{"title":{"text":"dx"},"showgrid":true},"yaxis":{"title":{"text":"sigma_xx_r"},"showgrid":true}},                        {"responsive": true}                    )                };                            </script>        </div>'}
    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_sigma_xx_r
{'text/html': '<div>            <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG"></script><script type="text/javascript">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: "STIX-Web"}});}</script>                <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: \'local\'};</script>\n        <script charset="utf-8" src="https://cdn.plot.ly/plotly-2.35.0.min.js"></script>                <div id="b1bca124-a324-4dc1-a170-c0efd5313889" class="plotly-graph-div" style="height:525px; width:100%;"></div>            <script type="text/javascript">                                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById("b1bca124-a324-4dc1-a170-c0efd5313889")) {                    Plotly.newPlot(                        "b1bca124-a324-4dc1-a170-c0efd5313889",                        [{"marker":{"color":"blue"},"mode":"lines+markers","name":"sigma_xx_r","x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271],"type":"scatter"},{"error_y":{"array":[1.3484168448485433e-12],"type":"data"},"marker":{"color":"red","size":11,"symbol":"circle"},"mode":"markers","name":"Richardson extrapolation","x":[0.0],"y":[3137.6291470592705],"type":"scatter"},{"line":{"color":"green","dash":"dash"},"mode":"lines","name":"power-law fit palliative (order=2.00, rmse=0)","x":[0.0,0.03367003367003367,0.06734006734006734,0.10101010101010101,0.13468013468013468,0.16835016835016836,0.20202020202020202,0.23569023569023567,0.26936026936026936,0.30303030303030304,0.3367003367003367,0.37037037037037035,0.40404040404040403,0.4377104377104377,0.47138047138047134,0.5050505050505051,0.5387205387205387,0.5723905723905723,0.6060606060606061,0.6397306397306397,0.6734006734006734,0.7070707070707071,0.7407407407407407,0.7744107744107744,0.8080808080808081,0.8417508417508417,0.8754208754208754,0.9090909090909091,0.9427609427609427,0.9764309764309764,1.0101010101010102,1.0437710437710437,1.0774410774410774,1.1111111111111112,1.1447811447811447,1.1784511784511784,1.2121212121212122,1.2457912457912457,1.2794612794612794,1.3131313131313131,1.3468013468013469,1.3804713804713804,1.4141414141414141,1.4478114478114479,1.4814814814814814,1.5151515151515151,1.5488215488215489,1.5824915824915824,1.6161616161616161,1.6498316498316499,1.6835016835016834,1.7171717171717171,1.7508417508417509,1.7845117845117844,1.8181818181818181,1.8518518518518519,1.8855218855218854,1.9191919191919191,1.9528619528619529,1.9865319865319866,2.0202020202020203,2.0538720538720536,2.0875420875420874,2.121212121212121,2.154882154882155,2.1885521885521886,2.2222222222222223,2.255892255892256,2.2895622895622894,2.323232323232323,2.356902356902357,2.3905723905723906,2.4242424242424243,2.457912457912458,2.4915824915824913,2.525252525252525,2.558922558922559,2.5925925925925926,2.6262626262626263,2.65993265993266,2.6936026936026938,2.727272727272727,2.760942760942761,2.7946127946127945,2.8282828282828283,2.861952861952862,2.8956228956228958,2.929292929292929,2.962962962962963,2.9966329966329965,3.0303030303030303,3.063973063973064,3.0976430976430978,3.131313131313131,3.164983164983165,3.1986531986531985,3.2323232323232323,3.265993265993266,3.2996632996632997,3.3333333333333335],"y":[3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271,3137.629147059271],"type":"scatter"},{"marker":{"color":"green","size":10,"symbol":"square"},"mode":"markers","name":"q converged (power-law fit)","x":[0.0],"y":[3137.629147059271],"type":"scatter"},{"error_y":{"array":[0.0],"type":"data"},"marker":{"color":"chocolate","size":10,"symbol":"diamond"},"mode":"markers","name":"q converged (robust median)","x":[0.0],"y":[3137.629147059271],"type":"scatter"}],                        {"template":{"data":{"candlestick":[{"decreasing":{"line":{"color":"#000033"}},"increasing":{"line":{"color":"#000032"}},"type":"candlestick"}],"contourcarpet":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contourcarpet"}],"contour":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contour"}],"heatmap":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"heatmap"}],"histogram2d":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"histogram2d"}],"icicle":[{"textfont":{"color":"white"},"type":"icicle"}],"sankey":[{"textfont":{"color":"#000036"},"type":"sankey"}],"scatter":[{"marker":{"line":{"width":0}},"type":"scatter"}],"table":[{"cells":{"fill":{"color":"#000038"},"font":{"color":"#000037"},"line":{"color":"#000039"}},"header":{"fill":{"color":"#000040"},"font":{"color":"#000036"},"line":{"color":"#000039"}},"type":"table"}],"waterfall":[{"connector":{"line":{"color":"#000036","width":2}},"decreasing":{"marker":{"color":"#000033"}},"increasing":{"marker":{"color":"#000032"}},"totals":{"marker":{"color":"#000034"}},"type":"waterfall"}]},"layout":{"coloraxis":{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorscale":{"diverging":[[0.0,"#000021"],[0.1,"#000022"],[0.2,"#000023"],[0.3,"#000024"],[0.4,"#000025"],[0.5,"#000026"],[0.6,"#000027"],[0.7,"#000028"],[0.8,"#000029"],[0.9,"#000030"],[1.0,"#000031"]],"sequential":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"sequentialminus":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorway":["#000001","#000002","#000003","#000004","#000005","#000006","#000007","#000008","#000009","#000010"]}},"title":{"text":"Converged sigma_xx_r = 3138  (method: richardson)"},"xaxis":{"title":{"text":"dx"}},"yaxis":{"title":{"text":"sigma_xx_r"}}},                        {"responsive": true}                    )                };                            </script>        </div>'}
    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_sigma_xx_r
{'text/html': '<div>            <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG"></script><script type="text/javascript">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: "STIX-Web"}});}</script>                <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: \'local\'};</script>\n        <script charset="utf-8" src="https://cdn.plot.ly/plotly-2.35.0.min.js"></script>                <div id="afe9f936-c97f-4071-a4d4-0219505f2121" class="plotly-graph-div" style="height:525px; width:100%;"></div>            <script type="text/javascript">                                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById("afe9f936-c97f-4071-a4d4-0219505f2121")) {                    Plotly.newPlot(                        "afe9f936-c97f-4071-a4d4-0219505f2121",                        [{"marker":{"color":"blue"},"mode":"markers","name":"|sigma_xx_r-extrap|","x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[4.547473508864641e-13,4.547473508864641e-13,4.547473508864641e-13,4.547473508864641e-13,4.547473508864641e-13,4.547473508864641e-13],"type":"scatter"},{"line":{"color":"green","dash":"dash"},"mode":"lines","name":"order 1","x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[3.770613451100265e-12,2.8279600883251987e-12,1.8468310780899254e-12,1.3922265050216362e-12,9.1408810935764e-13,4.547473508864641e-13],"type":"scatter"},{"line":{"color":"black","dash":"dash"},"mode":"lines","name":"order 2","x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[3.126466986537303e-11,1.7586376799272326e-11,7.500395602855003e-12,4.26235499229701e-12,1.8374094319411145e-12,4.547473508864641e-13],"type":"scatter"}],                        {"template":{"data":{"candlestick":[{"decreasing":{"line":{"color":"#000033"}},"increasing":{"line":{"color":"#000032"}},"type":"candlestick"}],"contourcarpet":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contourcarpet"}],"contour":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contour"}],"heatmap":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"heatmap"}],"histogram2d":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"histogram2d"}],"icicle":[{"textfont":{"color":"white"},"type":"icicle"}],"sankey":[{"textfont":{"color":"#000036"},"type":"sankey"}],"scatter":[{"marker":{"line":{"width":0}},"type":"scatter"}],"table":[{"cells":{"fill":{"color":"#000038"},"font":{"color":"#000037"},"line":{"color":"#000039"}},"header":{"fill":{"color":"#000040"},"font":{"color":"#000036"},"line":{"color":"#000039"}},"type":"table"}],"waterfall":[{"connector":{"line":{"color":"#000036","width":2}},"decreasing":{"marker":{"color":"#000033"}},"increasing":{"marker":{"color":"#000032"}},"totals":{"marker":{"color":"#000034"}},"type":"waterfall"}]},"layout":{"coloraxis":{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorscale":{"diverging":[[0.0,"#000021"],[0.1,"#000022"],[0.2,"#000023"],[0.3,"#000024"],[0.4,"#000025"],[0.5,"#000026"],[0.6,"#000027"],[0.7,"#000028"],[0.8,"#000029"],[0.9,"#000030"],[1.0,"#000031"]],"sequential":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"sequentialminus":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorway":["#000001","#000002","#000003","#000004","#000005","#000006","#000007","#000008","#000009","#000010"]}},"xaxis":{"type":"log","title":{"text":"dx"},"minor":{"ticks":"inside","ticklen":6,"showgrid":true}},"yaxis":{"type":"log","minor":{"ticks":"inside","ticklen":6,"showgrid":true}}},                        {"responsive": true}                    )                };                            </script>        </div>'}
    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_sigma_xx_r
{'text/html': '<div>            <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG"></script><script type="text/javascript">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: "STIX-Web"}});}</script>                <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: \'local\'};</script>\n        <script charset="utf-8" src="https://cdn.plot.ly/plotly-2.35.0.min.js"></script>                <div id="5938a783-afa5-4c6d-92a2-980dd5c19b40" class="plotly-graph-div" style="height:525px; width:100%;"></div>            <script type="text/javascript">                                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById("5938a783-afa5-4c6d-92a2-980dd5c19b40")) {                    Plotly.newPlot(                        "5938a783-afa5-4c6d-92a2-980dd5c19b40",                        [{"marker":{"color":"blue"},"mode":"lines+markers","name":"sigma_xx_r","x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[1.4493342889572343e-16,1.4493342889572343e-16,1.4493342889572343e-16,1.4493342889572343e-16,1.4493342889572343e-16,1.4493342889572343e-16],"type":"scatter"}],                        {"template":{"data":{"candlestick":[{"decreasing":{"line":{"color":"#000033"}},"increasing":{"line":{"color":"#000032"}},"type":"candlestick"}],"contourcarpet":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contourcarpet"}],"contour":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contour"}],"heatmap":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"heatmap"}],"histogram2d":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"histogram2d"}],"icicle":[{"textfont":{"color":"white"},"type":"icicle"}],"sankey":[{"textfont":{"color":"#000036"},"type":"sankey"}],"scatter":[{"marker":{"line":{"width":0}},"type":"scatter"}],"table":[{"cells":{"fill":{"color":"#000038"},"font":{"color":"#000037"},"line":{"color":"#000039"}},"header":{"fill":{"color":"#000040"},"font":{"color":"#000036"},"line":{"color":"#000039"}},"type":"table"}],"waterfall":[{"connector":{"line":{"color":"#000036","width":2}},"decreasing":{"marker":{"color":"#000033"}},"increasing":{"marker":{"color":"#000032"}},"totals":{"marker":{"color":"#000034"}},"type":"waterfall"}]},"layout":{"coloraxis":{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorscale":{"diverging":[[0.0,"#000021"],[0.1,"#000022"],[0.2,"#000023"],[0.3,"#000024"],[0.4,"#000025"],[0.5,"#000026"],[0.6,"#000027"],[0.7,"#000028"],[0.8,"#000029"],[0.9,"#000030"],[1.0,"#000031"]],"sequential":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"sequentialminus":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorway":["#000001","#000002","#000003","#000004","#000005","#000006","#000007","#000008","#000009","#000010"]}},"yaxis":{"minor":{"ticks":"inside","ticklen":6,"showgrid":true},"title":{"text":"Relative error on sigma_xx_r"}},"xaxis":{"minor":{"ticks":"inside","ticklen":6,"showgrid":true},"title":{"text":"dx"}}},                        {"responsive": true}                    )                };                            </script>        </div>'}
    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_sigma_xx_d0
{'text/html': '<div>            <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG"></script><script type="text/javascript">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: "STIX-Web"}});}</script>                <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: \'local\'};</script>\n        <script charset="utf-8" src="https://cdn.plot.ly/plotly-2.35.0.min.js"></script>                <div id="6d51434d-6b24-4d27-b238-fba4ad5e0f42" class="plotly-graph-div" style="height:525px; width:100%;"></div>            <script type="text/javascript">                                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById("6d51434d-6b24-4d27-b238-fba4ad5e0f42")) {                    Plotly.newPlot(                        "6d51434d-6b24-4d27-b238-fba4ad5e0f42",                        [{"error_y":{"array":[0.0],"type":"data"},"line":{"color":"chocolate"},"marker":{"size":11,"symbol":"square"},"mode":"markers","name":"converged (richardson)","showlegend":true,"x":[0.0],"y":[2094.9556398123455],"type":"scatter"},{"line":{"color":"blue","dash":"dash","width":2},"mode":"lines+markers","name":"fold[2.5    1.6327 1.2308 0.8081 0.402 ]","showlegend":true,"x":[2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455],"type":"scatter"},{"line":{"color":"blue","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.4020100502512563,0.0],"y":[2094.9556398123455,2094.9556398123455],"type":"scatter"},{"line":{"color":"red","dash":"dash","width":2},"mode":"lines+markers","name":"fold[3.3333 1.6327 1.2308 0.8081 0.402 ]","showlegend":true,"x":[3.3333333333333335,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455],"type":"scatter"},{"line":{"color":"red","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.4020100502512563,0.0],"y":[2094.9556398123455,2094.9556398123455],"type":"scatter"},{"line":{"color":"black","dash":"dash","width":2},"mode":"lines+markers","name":"fold[3.3333 2.5    1.2308 0.8081 0.402 ]","showlegend":true,"x":[3.3333333333333335,2.5,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455],"type":"scatter"},{"line":{"color":"black","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.4020100502512563,0.0],"y":[2094.9556398123455,2094.9556398123455],"type":"scatter"},{"line":{"color":"green","dash":"dash","width":2},"mode":"lines+markers","name":"fold[3.3333 2.5    1.6327 0.8081 0.402 ]","showlegend":true,"x":[3.3333333333333335,2.5,1.6326530612244898,0.8080808080808081,0.4020100502512563],"y":[2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455],"type":"scatter"},{"line":{"color":"green","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.4020100502512563,0.0],"y":[2094.9556398123455,2094.9556398123455],"type":"scatter"},{"line":{"color":"orange","dash":"dash","width":2},"mode":"lines+markers","name":"fold[3.3333 2.5    1.6327 1.2308 0.402 ]","showlegend":true,"x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.4020100502512563],"y":[2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455],"type":"scatter"},{"line":{"color":"orange","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.4020100502512563,0.0],"y":[2094.9556398123455,2094.9556398123455],"type":"scatter"},{"line":{"color":"magenta","dash":"dash","width":2},"mode":"lines+markers","name":"fold[3.3333 2.5    1.6327 1.2308 0.8081]","showlegend":true,"x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081],"y":[2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455],"type":"scatter"},{"line":{"color":"magenta","dash":"dashdot"},"mode":"lines","name":"","showlegend":false,"x":[0.8080808080808081,0.0],"y":[2094.9556398123455,2094.9556398123455],"type":"scatter"}],                        {"template":{"data":{"candlestick":[{"decreasing":{"line":{"color":"#000033"}},"increasing":{"line":{"color":"#000032"}},"type":"candlestick"}],"contourcarpet":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contourcarpet"}],"contour":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contour"}],"heatmap":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"heatmap"}],"histogram2d":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"histogram2d"}],"icicle":[{"textfont":{"color":"white"},"type":"icicle"}],"sankey":[{"textfont":{"color":"#000036"},"type":"sankey"}],"scatter":[{"marker":{"line":{"width":0}},"type":"scatter"}],"table":[{"cells":{"fill":{"color":"#000038"},"font":{"color":"#000037"},"line":{"color":"#000039"}},"header":{"fill":{"color":"#000040"},"font":{"color":"#000036"},"line":{"color":"#000039"}},"type":"table"}],"waterfall":[{"connector":{"line":{"color":"#000036","width":2}},"decreasing":{"marker":{"color":"#000033"}},"increasing":{"marker":{"color":"#000032"}},"totals":{"marker":{"color":"#000034"}},"type":"waterfall"}]},"layout":{"coloraxis":{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorscale":{"diverging":[[0.0,"#000021"],[0.1,"#000022"],[0.2,"#000023"],[0.3,"#000024"],[0.4,"#000025"],[0.5,"#000026"],[0.6,"#000027"],[0.7,"#000028"],[0.8,"#000029"],[0.9,"#000030"],[1.0,"#000031"]],"sequential":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"sequentialminus":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorway":["#000001","#000002","#000003","#000004","#000005","#000006","#000007","#000008","#000009","#000010"]}},"title":{"text":""},"xaxis":{"title":{"text":"dx"},"showgrid":true},"yaxis":{"title":{"text":"sigma_xx_d0"},"showgrid":true}},                        {"responsive": true}                    )                };                            </script>        </div>'}
    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_sigma_xx_d0
{'text/html': '<div>            <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG"></script><script type="text/javascript">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: "STIX-Web"}});}</script>                <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: \'local\'};</script>\n        <script charset="utf-8" src="https://cdn.plot.ly/plotly-2.35.0.min.js"></script>                <div id="bccb6318-5309-4c27-af2a-9105141def7f" class="plotly-graph-div" style="height:525px; width:100%;"></div>            <script type="text/javascript">                                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById("bccb6318-5309-4c27-af2a-9105141def7f")) {                    Plotly.newPlot(                        "bccb6318-5309-4c27-af2a-9105141def7f",                        [{"marker":{"color":"blue"},"mode":"lines+markers","name":"sigma_xx_d0","x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455],"type":"scatter"},{"error_y":{"array":[0.0],"type":"data"},"marker":{"color":"red","size":11,"symbol":"circle"},"mode":"markers","name":"Richardson extrapolation","x":[0.0],"y":[2094.9556398123455],"type":"scatter"},{"line":{"color":"green","dash":"dash"},"mode":"lines","name":"power-law fit palliative (order=2.00, rmse=0)","x":[0.0,0.03367003367003367,0.06734006734006734,0.10101010101010101,0.13468013468013468,0.16835016835016836,0.20202020202020202,0.23569023569023567,0.26936026936026936,0.30303030303030304,0.3367003367003367,0.37037037037037035,0.40404040404040403,0.4377104377104377,0.47138047138047134,0.5050505050505051,0.5387205387205387,0.5723905723905723,0.6060606060606061,0.6397306397306397,0.6734006734006734,0.7070707070707071,0.7407407407407407,0.7744107744107744,0.8080808080808081,0.8417508417508417,0.8754208754208754,0.9090909090909091,0.9427609427609427,0.9764309764309764,1.0101010101010102,1.0437710437710437,1.0774410774410774,1.1111111111111112,1.1447811447811447,1.1784511784511784,1.2121212121212122,1.2457912457912457,1.2794612794612794,1.3131313131313131,1.3468013468013469,1.3804713804713804,1.4141414141414141,1.4478114478114479,1.4814814814814814,1.5151515151515151,1.5488215488215489,1.5824915824915824,1.6161616161616161,1.6498316498316499,1.6835016835016834,1.7171717171717171,1.7508417508417509,1.7845117845117844,1.8181818181818181,1.8518518518518519,1.8855218855218854,1.9191919191919191,1.9528619528619529,1.9865319865319866,2.0202020202020203,2.0538720538720536,2.0875420875420874,2.121212121212121,2.154882154882155,2.1885521885521886,2.2222222222222223,2.255892255892256,2.2895622895622894,2.323232323232323,2.356902356902357,2.3905723905723906,2.4242424242424243,2.457912457912458,2.4915824915824913,2.525252525252525,2.558922558922559,2.5925925925925926,2.6262626262626263,2.65993265993266,2.6936026936026938,2.727272727272727,2.760942760942761,2.7946127946127945,2.8282828282828283,2.861952861952862,2.8956228956228958,2.929292929292929,2.962962962962963,2.9966329966329965,3.0303030303030303,3.063973063973064,3.0976430976430978,3.131313131313131,3.164983164983165,3.1986531986531985,3.2323232323232323,3.265993265993266,3.2996632996632997,3.3333333333333335],"y":[2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455,2094.9556398123455],"type":"scatter"},{"marker":{"color":"green","size":10,"symbol":"square"},"mode":"markers","name":"q converged (power-law fit)","x":[0.0],"y":[2094.9556398123455],"type":"scatter"},{"error_y":{"array":[0.0],"type":"data"},"marker":{"color":"chocolate","size":10,"symbol":"diamond"},"mode":"markers","name":"q converged (robust median)","x":[0.0],"y":[2094.9556398123455],"type":"scatter"}],                        {"template":{"data":{"candlestick":[{"decreasing":{"line":{"color":"#000033"}},"increasing":{"line":{"color":"#000032"}},"type":"candlestick"}],"contourcarpet":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contourcarpet"}],"contour":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contour"}],"heatmap":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"heatmap"}],"histogram2d":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"histogram2d"}],"icicle":[{"textfont":{"color":"white"},"type":"icicle"}],"sankey":[{"textfont":{"color":"#000036"},"type":"sankey"}],"scatter":[{"marker":{"line":{"width":0}},"type":"scatter"}],"table":[{"cells":{"fill":{"color":"#000038"},"font":{"color":"#000037"},"line":{"color":"#000039"}},"header":{"fill":{"color":"#000040"},"font":{"color":"#000036"},"line":{"color":"#000039"}},"type":"table"}],"waterfall":[{"connector":{"line":{"color":"#000036","width":2}},"decreasing":{"marker":{"color":"#000033"}},"increasing":{"marker":{"color":"#000032"}},"totals":{"marker":{"color":"#000034"}},"type":"waterfall"}]},"layout":{"coloraxis":{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorscale":{"diverging":[[0.0,"#000021"],[0.1,"#000022"],[0.2,"#000023"],[0.3,"#000024"],[0.4,"#000025"],[0.5,"#000026"],[0.6,"#000027"],[0.7,"#000028"],[0.8,"#000029"],[0.9,"#000030"],[1.0,"#000031"]],"sequential":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"sequentialminus":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorway":["#000001","#000002","#000003","#000004","#000005","#000006","#000007","#000008","#000009","#000010"]}},"title":{"text":"Converged sigma_xx_d0 = 2095  (method: richardson)"},"xaxis":{"title":{"text":"dx"}},"yaxis":{"title":{"text":"sigma_xx_d0"}}},                        {"responsive": true}                    )                };                            </script>        </div>'}
    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_sigma_xx_d0
{'text/html': '<div>            <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG"></script><script type="text/javascript">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: "STIX-Web"}});}</script>                <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: \'local\'};</script>\n        <script charset="utf-8" src="https://cdn.plot.ly/plotly-2.35.0.min.js"></script>                <div id="f6eb38bf-1d08-494c-ac24-f648675efbe6" class="plotly-graph-div" style="height:525px; width:100%;"></div>            <script type="text/javascript">                                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById("f6eb38bf-1d08-494c-ac24-f648675efbe6")) {                    Plotly.newPlot(                        "f6eb38bf-1d08-494c-ac24-f648675efbe6",                        [{"marker":{"color":"blue"},"mode":"markers","name":"|sigma_xx_d0-extrap|","x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[0.0,0.0,0.0,0.0,0.0,0.0],"type":"scatter"},{"line":{"color":"green","dash":"dash"},"mode":"lines","name":"order 1","x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[0.0,0.0,0.0,0.0,0.0,0.0],"type":"scatter"},{"line":{"color":"black","dash":"dash"},"mode":"lines","name":"order 2","x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[0.0,0.0,0.0,0.0,0.0,0.0],"type":"scatter"}],                        {"template":{"data":{"candlestick":[{"decreasing":{"line":{"color":"#000033"}},"increasing":{"line":{"color":"#000032"}},"type":"candlestick"}],"contourcarpet":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contourcarpet"}],"contour":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contour"}],"heatmap":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"heatmap"}],"histogram2d":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"histogram2d"}],"icicle":[{"textfont":{"color":"white"},"type":"icicle"}],"sankey":[{"textfont":{"color":"#000036"},"type":"sankey"}],"scatter":[{"marker":{"line":{"width":0}},"type":"scatter"}],"table":[{"cells":{"fill":{"color":"#000038"},"font":{"color":"#000037"},"line":{"color":"#000039"}},"header":{"fill":{"color":"#000040"},"font":{"color":"#000036"},"line":{"color":"#000039"}},"type":"table"}],"waterfall":[{"connector":{"line":{"color":"#000036","width":2}},"decreasing":{"marker":{"color":"#000033"}},"increasing":{"marker":{"color":"#000032"}},"totals":{"marker":{"color":"#000034"}},"type":"waterfall"}]},"layout":{"coloraxis":{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorscale":{"diverging":[[0.0,"#000021"],[0.1,"#000022"],[0.2,"#000023"],[0.3,"#000024"],[0.4,"#000025"],[0.5,"#000026"],[0.6,"#000027"],[0.7,"#000028"],[0.8,"#000029"],[0.9,"#000030"],[1.0,"#000031"]],"sequential":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"sequentialminus":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorway":["#000001","#000002","#000003","#000004","#000005","#000006","#000007","#000008","#000009","#000010"]}},"xaxis":{"type":"log","title":{"text":"dx"},"minor":{"ticks":"inside","ticklen":6,"showgrid":true}},"yaxis":{"type":"log","minor":{"ticks":"inside","ticklen":6,"showgrid":true}}},                        {"responsive": true}                    )                };                            </script>        </div>'}
    INFO - 09:18:31: Working directory is C:\Users\sebastien.bocquet\Dev\vimseo\docs\runnable_examples\05_solution_verification\DiscretizationSolutionVerification_sigma_xx_d0
{'text/html': '<div>            <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG"></script><script type="text/javascript">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: "STIX-Web"}});}</script>                <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: \'local\'};</script>\n        <script charset="utf-8" src="https://cdn.plot.ly/plotly-2.35.0.min.js"></script>                <div id="f3212854-9a80-4220-8b59-82c345a7203d" class="plotly-graph-div" style="height:525px; width:100%;"></div>            <script type="text/javascript">                                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById("f3212854-9a80-4220-8b59-82c345a7203d")) {                    Plotly.newPlot(                        "f3212854-9a80-4220-8b59-82c345a7203d",                        [{"marker":{"color":"blue"},"mode":"lines+markers","name":"sigma_xx_d0","x":[3.3333333333333335,2.5,1.6326530612244898,1.2307692307692308,0.8080808080808081,0.4020100502512563],"y":[0.0,0.0,0.0,0.0,0.0,0.0],"type":"scatter"}],                        {"template":{"data":{"candlestick":[{"decreasing":{"line":{"color":"#000033"}},"increasing":{"line":{"color":"#000032"}},"type":"candlestick"}],"contourcarpet":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contourcarpet"}],"contour":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"contour"}],"heatmap":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"heatmap"}],"histogram2d":[{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"type":"histogram2d"}],"icicle":[{"textfont":{"color":"white"},"type":"icicle"}],"sankey":[{"textfont":{"color":"#000036"},"type":"sankey"}],"scatter":[{"marker":{"line":{"width":0}},"type":"scatter"}],"table":[{"cells":{"fill":{"color":"#000038"},"font":{"color":"#000037"},"line":{"color":"#000039"}},"header":{"fill":{"color":"#000040"},"font":{"color":"#000036"},"line":{"color":"#000039"}},"type":"table"}],"waterfall":[{"connector":{"line":{"color":"#000036","width":2}},"decreasing":{"marker":{"color":"#000033"}},"increasing":{"marker":{"color":"#000032"}},"totals":{"marker":{"color":"#000034"}},"type":"waterfall"}]},"layout":{"coloraxis":{"colorscale":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorscale":{"diverging":[[0.0,"#000021"],[0.1,"#000022"],[0.2,"#000023"],[0.3,"#000024"],[0.4,"#000025"],[0.5,"#000026"],[0.6,"#000027"],[0.7,"#000028"],[0.8,"#000029"],[0.9,"#000030"],[1.0,"#000031"]],"sequential":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]],"sequentialminus":[[0.0,"#000011"],[0.1111111111111111,"#000012"],[0.2222222222222222,"#000013"],[0.3333333333333333,"#000014"],[0.4444444444444444,"#000015"],[0.5555555555555556,"#000016"],[0.6666666666666666,"#000017"],[0.7777777777777778,"#000018"],[0.8888888888888888,"#000019"],[1.0,"#000020"]]},"colorway":["#000001","#000002","#000003","#000004","#000005","#000006","#000007","#000008","#000009","#000010"]}},"yaxis":{"minor":{"ticks":"inside","ticklen":6,"showgrid":true},"title":{"text":"Relative error on sigma_xx_d0"}},"xaxis":{"minor":{"ticks":"inside","ticklen":6,"showgrid":true},"title":{"text":"dx"}}},                        {"responsive": true}                    )                };                            </script>        </div>'}

The relative-error plots sit at zero: these outputs carry no discretization error, in contrast with the field-sampled quantities above. This is exactly the behaviour expected of an analytical model output, and a reassuring baseline for the solution-verification workflow.

side_by_side(
    native_figures["sigma_xx_r"]["relative_error_versus_element_size"],
    native_figures["sigma_xx_d0"]["relative_error_versus_element_size"],
    "sigma_xx_r",
    "sigma_xx_d0",
    "relative error",
)

Comparison of the fields

Beyond the scalar convergence, the whole sigma_xx field can be compared between the coarsest and the finest grid. Both are exact at their nodes, but the finer grid resolves the stress concentration around the hole far better:

coarse = model_results[grid_resolutions[0]].fields["flux"][0]
fine = model_results[grid_resolutions[-1]].fields["flux"][0]
x_coarse, y_coarse, z_coarse = coarse.to_structured_grid("sigma_xx")
x_fine, y_fine, z_fine = fine.to_structured_grid("sigma_xx")

color_min = float(np.nanmin([np.nanmin(z_coarse), np.nanmin(z_fine)]))
color_max = float(np.nanmax([np.nanmax(z_coarse), np.nanmax(z_fine)]))

fig = make_subplots(
    rows=1,
    cols=2,
    shared_yaxes=True,
    subplot_titles=(
        f"coarse grid ({grid_resolutions[0]})",
        f"fine grid ({grid_resolutions[-1]})",
    ),
)
fig.add_trace(
    go.Heatmap(
        x=x_coarse, y=y_coarse, z=z_coarse.T, coloraxis="coloraxis", name="coarse"
    ),
    row=1,
    col=1,
)
fig.add_trace(
    go.Heatmap(x=x_fine, y=y_fine, z=z_fine.T, coloraxis="coloraxis", name="fine"),
    row=1,
    col=2,
)
fig.update_layout(
    title={
        "text": "sigma_xx field around the hole",
        "x": 0.5,
        "xanchor": "center",
        "y": 0.98,
        "yanchor": "top",
    },
    # Extra top margin so the centred figure title clears the two panel titles
    # that ``make_subplots`` pins just above the plot area.
    margin={"t": 110},
    coloraxis={
        "colorscale": "Viridis",
        "cmin": color_min,
        "cmax": color_max,
        "colorbar": {"title": "sigma_xx"},
    },
)
# Equal aspect ratio so the hole stays circular in both panels:
fig.update_yaxes(scaleanchor="x", row=1, col=1)
fig.update_yaxes(scaleanchor="x2", row=1, col=2)
fig

Total running time of the script: ( 0 minutes 0.901 seconds)

Download Python source code: plot_tan_open_hole_convergence.py

Download Jupyter notebook: plot_tan_open_hole_convergence.ipynb

Gallery generated by mkdocs-gallery


  1. Lewis Fry Richardson. The approximate arithmetical solution by finite differences of physical problems involving differential equations, with an application to the stresses in a masonry dam. Philosophical Transactions of the Royal Society A, 210:307–357, 1911. doi:https://doi.org/10.1098/rsta.1911.0009. ↩

  2. Petr Krysl. Confidence intervals for richardson extrapolation in solid mechanics. J. Verif. Valid. Uncert., 7(3):031005, 2022. doi:https://doi.org/10.1115/1.4055728. ↩