Notebook 02: mesh-resolution diagnostic for \(h/\ell_0\)

This notebook samples the one-dimensional AT2 crack profile to show why a diffuse crack requires several elements across its width. It is an educational resolution diagnostic, not a solved mesh-convergence or fracture-validation study. Keep \(\ell_0\) fixed when assessing mesh convergence; changing \(\ell_0\) changes the regularized model.

import numpy as np
import matplotlib.pyplot as plt

ell_0 = 0.015  # regularization length; mm
ratios = [1.0, 0.5, 0.25]  # h / ell_0

For an isolated AT2 crack in one dimension, a commonly used reference profile is \(d(x)=\exp(-|x|/\ell_0)\). The plot compares nodal sampling at three values of \(h/\ell_0\).

x_exact = np.linspace(-4 * ell_0, 4 * ell_0, 801)
d_exact = np.exp(-np.abs(x_exact) / ell_0)

fig, axes = plt.subplots(1, 3, figsize=(12, 3.2), sharey=True)
for axis, ratio in zip(axes, ratios):
    h = ratio * ell_0
    x_nodes = np.arange(-4 * ell_0, 4 * ell_0 + 0.5 * h, h)
    d_nodes = np.exp(-np.abs(x_nodes) / ell_0)
    axis.plot(x_exact / ell_0, d_exact, color='0.35', label='continuous profile')
    axis.plot(x_nodes / ell_0, d_nodes, 'o-', color='#287271', label='nodal sampling')
    axis.set_title(f'h / ell_0 = {ratio:g}')
    axis.set_xlabel('x / ell_0')
    axis.grid(alpha=0.25)
axes[0].set_ylabel('damage d')
axes[-1].legend(frameon=False, fontsize=8)
fig.tight_layout()
../_images/9c26de4c94b13b437680faf171037c6bc73d94cd3896f8fbff14fdb0b200b69b.png
print('Resolution table at fixed ell_0')
for ratio in ratios:
    h = ratio * ell_0
    print(f'h/ell_0={ratio:4.2f}  h={h:.6f} mm  elements across 2*ell_0~{2/ratio:.0f}')
print('Starting criterion: h <= ell_0/2. This is not a convergence guarantee.')
Resolution table at fixed ell_0
h/ell_0=1.00  h=0.015000 mm  elements across 2*ell_0~2
h/ell_0=0.50  h=0.007500 mm  elements across 2*ell_0~4
h/ell_0=0.25  h=0.003750 mm  elements across 2*ell_0~8
Starting criterion: h <= ell_0/2. This is not a convergence guarantee.

What a research study must add

A numerical study should refine \(h\) at fixed \(\ell_0\) and compare load-displacement response, dissipated fracture energy, crack path, and solver convergence. A separate \(\ell_0\) sensitivity study addresses model regularization. Do not combine those two questions into one claimed convergence result.