**non_local#

Description#

This post increment method provides a “smoothing” of specified material variables in order to constrain the gradient in those variables to be below a given limit. This is an important method in eliminating localization when stiffness drops according to those parameters (i.e. damage or strain softening). This is a “weak” method in that it allows localization during the solution convergence of a given increment.

Let \(d\) be the non–local variable ; \(\Delta d\) the local time increment ; \(\Delta d_{\rm nl}\) the non–local time increment.

(101)#\[\Delta d_{\rm nl}\left(\vect{X}\right) = \int_V \Delta d(\vect{x}) \psi(\vect x -\vect X)\,d x\]
(102)#\[\psi(\vect x) = \frac{1}{\lambda^N\pi^{N/2}} \exp\left(-||x||^2/\lambda^2 \right)\]

where \(N=1,2,3\) is the space dimension.

(103)#\[\int_{-\infty}^{+\infty} \dots \int_{-\infty}^{+\infty} \frac{1}{\lambda^N\pi^{N/2}} \exp\left(-(x_1^2+\dots+x_N^2)/\lambda^2 \right)\,dx_1\dots dx_N =1\]

Using the FE method integrals are discretized using Gauss quadrature. So that

(104)#\[\Delta d_{\rm nl}(\vect x_i) = \sum_j \Delta d(\vect x_j) \psi(\vect x_j-\vect x_i) V_j = M_{ij} \Delta d(\vect x_j)\]

and \(V_j\) the volume associated to Gauss point \(j\). where \(x_i\), \(x_j\) are the positions of the Gauss points (\(G\) number of Gauss points).

Due to numerical integration and other limitations (optimizing memory) it is necessary to correct the \(M\) matrix which should fulfill the conditions

(105)#\[\hbox{[c$_1$]}\;\sum_j M_{ij} =1\quad \hbox{and}\quad \hbox{[c$_2$]}\;\sum_i M_{ij}=1\]

Several correction methods can be proposed (\(M\to M^\prime\)):

average_line

\(M^\prime_{ij} = M_{ij}/\sum_i M_{ij}\). [c\(_2\)] is not fulfilled.

average_column

\(M^\prime_{ij} = M_{ij}/\sum_j M_{ij}\). [c\(_1\)] is not fulfilled.

diagonal_line

\(M^\prime_{ii} = M_{ii} + (1-\sum_i M_{ij})\) and \(M^\prime_{ij} = M_{ij}\) for \(i\ne j\). [c\(_2\)] is not fulfilled.

diagonal_column

\(M^\prime_{ii} = M_{ii} + (1-\sum_j M_{ij})\) and \(M^\prime_{ij} = M_{ij}\) for \(i\ne j\). [c\(_1\)] is not fulfilled.

iterative

Line \(i\) is multiply by a scalar \(l_i\) and column \(j\) is multiply by a scalar \(c_j\). Conditions [c\(_1\)] and c[c\(_2\)]can be fulfilled simultaneously. There are \(2\times G\) equations

(106)#\[\sum_i l_i c_j M_{ij}=c_j\sum_i l_i M_{ij}=1\]
(107)#\[\sum_j l_i c_j M_{ij}=l_i\sum_j c_j M_{ij}=1\]

Coefficient can be found iteratively:

(108)#\[c_j^{k+1} = \frac{1}{\sum_i l^k_i M_{Ia}}=\frac{1}{\left.M^T l^k\right|j}\]
(109)#\[l_i^{k+1} = \frac{1}{\sum_j c^k_j M_{ij}}=\frac{1}{\left.M c^k\right|i}\]

with \(l_i^0=1\) and \(c_j^0=1\).

Syntax#

The command syntax is described below, with a few sub-commands.

**non_local \(~\,\) *lambda lam \(~\,\) *variable var1  …  varN \(~\,\) *elset elset-name \(~\,\) *cut_off val \(~\,\) *normalize type

*lambda

takes a real value for \(\lambda\)

*variable

lists the material variables which are to be the subject of non-local.

*elset

apply the method to the given elset name.

*cut_off

specify a real value for the cut-off.

*normalize

replace type with one of the keywords described above (average_line, etc).