Peridynamics does not pass tests for a mechanics discretization:
git clone
my implementation PeriFlakes:
https://github.com/afqueiruga/PeriFlakes
The Jupyter notebooks replicate the graphs in this presentation.
Today, I'm going to talk about the constant strain modes.
Shale natural gas, Enhanced geothermal, Escape of gasses from nuclear waste, Bubbling of methane through oceanic sediments
It looks good, but not under actual scrutiny:
Queiruga, A. F. and G. J. Moridis, "Numerical experiments on the convergence properties of state-based peridynamic laws and influence functions in two-dimensional problems." Computer Methods in Applied Mechanics and Engineering 322 (2017): 97-122.
It is critical to verify and validate numerical methods on known solutions and expected discretization refinement behavior.
What the properties of the Peridynamics specification of $L(\alpha)$?
For a given method, some problems are in an exactly-representable solution space. E.g., Quadratic finite elements solve quadratic solutions exactly.
Which solutions are exactly representable by Peridynamics?
These are Unit Tests in all of my codes! (PD, FEM, FDM, RKPM, etc.)
self.AssertTrue( error < 1.0e-12 )
Also check for convergence to more complicated analytical solutions.
\begin{equation}
\hat{Z}\left(z = x+iy\right)=P\left(\sqrt{z^{2}-L^{2}}-z\right)
\end{equation}
\begin{equation} u_{x} = \frac{1}{2G}\left(\frac{2-4\nu}{2}\mathrm{Re}\left[\hat{Z}\right]-y\mathrm{Im}\left[Z\right]\right) \end{equation} \begin{equation} u_{y} = \frac{1}{2G}\left(\frac{4-4\nu}{2}\mathrm{Im}\left[\hat{Z}\right]-y\mathrm{Re}\left[Z\right]\right) \end{equation}
Calculate an error against the analytical solution $u^a$ to judge the numerical solution $u^N$: \begin{equation} e = \frac{ \int \left|u^N-u^a \right|^2 \mathrm{d}x }{ \int \left|u^a \right|^2 \mathrm{d}x } \end{equation}
Add more grid points keeping $w(r;\delta)$ fixed.
Periflakes/computation.ipynb
Larger $\delta$ vs $h$ means more points interact.
\begin{equation}
m=1.5
\end{equation}
Periflakes/computation.ipynb
\begin{equation}
m=2.5
\end{equation}
Periflakes/computation.ipynb
\begin{equation}
m=3.5
\end{equation}
Periflakes/computation.ipynb
\begin{equation}
m=4.5
\end{equation}
Even if we don't assemble a matrix, this still shows data access patterns
of the program.
Even if we don't assemble a matrix, this still shows data access patterns
of the program.
Periflakes/computation.ipynb
Our goal is to obtain a computer program that solves the problems we want accurately and efficiently.
In the Peridynamics scope, we have the following hyperparameters:
These are arbitrary. We need to determine which combinations are acceptable, and which of those are the best.
It is well known that bond-based does not work due to $\nu$ problem.
The are three classes of state-based models:
My ad hoc approach was to post process the solution: \begin{equation} \mathbf{u}^s = \frac{\int_\mathcal{H} w^s \alpha \mathbf{u} \mathrm{d}x'}{\int_\mathcal{H} w^s \alpha \mathrm{d}x'} \end{equation}
The smoothing kernel $w^s$ doesn't have to be the same $w$.
This worked to stabilize the fracture path in my original hydraulic fracturing simulations, but the method never passed any other validations!
We can add a stabilizer to the force: \begin{equation} \mathbf{T}\left<\xi\right> = w\alpha \sigma \mathbf{K}^{-1} \mathbf{\xi} + \mathbf{T}^s \end{equation}
Silling's 2017 paper: \begin{equation} \mathbf{T}^s = w\alpha A \frac{18 K}{ w_0 \pi \delta^5} \left( \mathbf{Y} - \mathbf{F}\xi \right), \quad w_0 = \int_\mathcal{H} w\alpha \mathrm{d}x' \end{equation}
Littlewood's 2010 paper: \begin{equation} \mathbf{T}^s = w\alpha A \frac{18 K}{\pi \delta^4} \left( \frac{ \left|\mathbf{Y}\right| - \left|\mathbf{F}\xi\right| }{ \left|\xi\right| } \right) \frac{\mathbf{Y}}{\left|\mathbf{Y}\right|} \end{equation}
$A$ is a new penalty hyperparameter. It would be nice if it were insensitive to the grid size.
$w(\mathbf{r})$ is another arbitrary choice!
\begin{equation} w(x'-x)=0 \quad\text{for}\quad x' \notin H(x) \end{equation}
I tried all of these (and more):
Name | $w(r)$ in ${H}(x)$ |
---|---|
Const | 1 |
Inv | $\delta/r$ |
Linear | $1-\frac{r}{\delta}$ |
Quadr | $\left(1-\frac{r}{\delta}\right)^2$ |
Cubic | $\left(1-\frac{r}{\delta}\right)^3$ |
Different meshless methods have requirements on their radial kernel. Does PD have any?
https://github.com/afqueiruga/PeriFlakes
Alejandro Francisco Queiruga. (2018). 2D Peridynamic Displacement Fields [Data set]. Zenodo. http://doi.org/10.5281/zenodo.1284634
The file peri_kernels_pop.py
contains object-oriented implementations like this:
class Oterkus(StateBased):
def m_expr(self):
return self.w0I * alpha_I * rxabs
def a_expr(self):
return self.w0I * alpha_I * rxabs**2
def b_expr(self):
return self.w0I * alpha_I * (xn[0] * xn[1] )**2 * rxabs**2
def theta_expr(self):
return 2/m[0] * self.w0I * alpha_I * (ryabs-rxabs) * (yn.T*xn)[0,0]
def force(self):
a = (c_K - 2*c_G*a_integ[0]/b_denom[0])/2
b = c_G /( 2* b_denom[0])
A = 2 * self.w0I* alpha_I * ( a*2/m[0]*(yn.T*xn)[0,0]*theta[0] + b*(ryabs-rxabs) )
return A * yn
We want to exhaustively search for methods:
formulations = {
'Silling' : StateBased,
'Oterkus2': Oterkus,
'Fbased':Fbased,
'Fstab_Littlewood':Fstab_Littlewood2010,
'Fstab_Littlewood2011':Fstab_Littlewood2011,
'Fstab_Silling':Fstab_Silling,
}
delta = i_delta[0]
weight_funcs = {
'const' : lambda r : Piecewise( (1.0 , Le(r,delta)), (0.0,True)),
'inv' : lambda r : Piecewise( (delta/r, Le(r,delta)), (0.0,True)),
'linear': lambda r : Piecewise( ((1.0-r / delta)**1.0, Le(r,delta)), (0.0,True)),
'quadr' : lambda r : Piecewise( ((1.0-r / delta)**2.0, Le(r,delta)), (0.0,True)),
'cubic' : lambda r : Piecewise( ((1.0-r / delta)**3.0, Le(r,delta)), (0.0,True)),
'quarticA':lambda r: Piecewise( (1.0 - 6.0*(r/delta)**2 + 8.0*(r/delta)**3 - 3.0*(r/delta)**4, Le(r,delta)), (0.0,True))
}
for methodname,c in formulations.iteritems():
for weightname,f in weight_funcs.iteritems():
c(methodname+"_"+weightname, f).kernel()
This generates 36 different methods with only 240 lines of code!
Queiruga, 2017
Queiruga, 2017
Queiruga, 2017
Queiruga, 2017
How quickly do those methods converge to the true solution:
isotropic | shear | uniaxial | |
Fbased | 0.998518471486 | 0.88580762397 | 0.961508949756 |
Oterkus2 | -0.0934425713562 | 0.992619961121 | -0.133199906094 |
Silling | 0.940215702548 | -0.155718080685 | -0.120152361872 |
The $x$ component of Silling's with different $m$s:
PeriFlakes/surface_corrections.ipynb
The $x$ component of Silling's with different $m$s:
PeriFlakes/surface_corrections.ipynb
Tried different ways of handling boundary conditions:
Use a finite difference stencil: \begin{equation} \frac{u^f_y-u^o_y}{\Delta y} + \nu \frac{u^+_y-u^-_y}{2 \Delta x} = \frac{t_y(1-\nu^2)}{E} \end{equation} \begin{equation} \frac{u^f_x-u^o_x}{\Delta y} + \nu \frac{u^+_x-u^-_x}{2 \Delta x} = \frac{2 t_x (1+\nu)}{E} \end{equation}
Build the deformation gradient from differences, \begin{equation} \mathbf{F}=\frac{\left(\mathbf{u}^{f}-\mathbf{u}^{o}\right)}{\left|\mathbf{x}^{f}-\mathbf{x}^{o}\right|}\otimes\mathbf{n}+\frac{\left(\mathbf{u}^{+}-\mathbf{u}^{-}\right)}{\left|\mathbf{x}^{+}-\mathbf{x}^{-}\right|}\otimes\mathbf{e}_{t} \end{equation} and then apply the BC constraint by \begin{equation} 0=\lambda\mathrm{tr}\left[\varepsilon\right]\mathbf{n}+2G\varepsilon\mathbf{n}-\bar{\mathbf{t}} \end{equation} with $\varepsilon=\frac{1}{2}\left(\mathbf{F}^{T}+\mathbf{F}\right)$.
Equivalent to the stencil in Le and Bobaru, but rotates. Replace $-$ with $o$ for a corner.
PeriFlakes/surface_corrections.ipynb
PeriFlakes/surface_corrections.ipynb
PeriFlakes/surface_corrections.ipynb
PeriFlakes/surface_corrections.ipynb
Periflakes/analysis.ipynb
method | Uni. | Iso. | Shear | LFM | Stable |
---|---|---|---|---|---|
Silling | ❌ | ❎ | ❌ | ✅, #1 | ✅ |
Oterkus | ❌ | ❌ | ❎ | ❌ | ✅ |
Fbased | ❎ | ❎ | ❎ | ✅ | ❌ |
Smoothed F | ❎ | ❎ | ❎ | ✅,#2 | ✅ |
Email: afqueiruga@lbl.gov
Checkout my codes at
https://github.com/afqueiruga/PeriFlakes
and look at the Jupyter notebook and Zenodo database.
We can churn out and test more Peridynamics models in PeriFlakes!
We're searching for a numerical method that:
Compare to a discretely meshed fracture solved by FEM:
PeriFlakes/fem/fem_crack.py
Wall-clock time for matrix/vector assemble + solve.
Periflakes/analysis.ipynb
FEM solves a smaller length scale faster!
Periflakes/analysis.ipynb