BASIC_SIMULATOR#
Description#
The BASIC_SIMULATOR ZebFront class type is used for FEM behaviors
which are meant to be run in the simulation mode as well. Classes of
this type must be valid BASIC_NL_BEHAVIOR classes, and require
special code to calculate the mixed-mode loading case, but also allow
definition of yield surface functions.
Syntax#
The class declaration is the same as that for BASIC_NL_BEHAVIOR with
some extensions. No new class methods (main functions) are provided for
the simulation mode.
The class definition for BASIC_SIMULATOR is the following:
@class NAME_OF_CLASS : BASIC_NL_BEHAVIOR, BASIC_SIMULATOR {
\(~\,~\,~\,\) standard behavior options from page
\(~\,~\,~\,\) @Criterion list;
\(~\,~\,~\,\) additional C++ code
};
Resolving mixed flux-grad loading#
One of the main benefits of the simulator is the ability to solve mixed
loadings exactly, while displacement based FE solutions are approximate
and require iterations in the non-linear case (and therefore desiring a
good tangent matrix calculation). The disadvantage is a formulation must
be made to solve the mixed rate loading. To address the later, special
methods are given in the BASIC_SIMULATOR base class for resolving
such a difficulty (this is in contrast to the solution in the class
SIMUL_MODEL). Using the notation
\({\bf f}\) for the flux and \(\bf g\) for the gradient, the
following forms are allowed. See the developers manual for a description
of how these methods are implemented.
Code |
Description |
|---|---|
|
\(\dot{{\bf f}}=\bf E(\dot{\bf g}-\dot{\bf e}-\dot{\bf e_2})\) |
|
\(\dot{{\bf f}}=\bf E(\dot{\bf g}-\dot{\bf e})\) |
Example#
Here’s an example of a combined FEM-simulator model with a criterion object.
@Class FEM_SIM_BEHAVIOR : BASIC_NL_BEHAVIOR, BASIC_SIMULATOR {
@Name example;
@Coefs E, poisson;
@Coefs R0, H, Q, b;
@Coefs alpha, beta, A, k, r;
@Coefs dmax;
@tVarInt eel;
@sVarInt evcum, D;
@sVarAux R,j0,j1,j2,chi;
@tVarAux evi;
@Criterion yield, damage;
};
Resolving mixed loading for time independent plasticity and damage#
Zmat routines to compute the increment of elastic
strain eel knowing the Hooke’s tensor E, the increment of the
total strain eto and the increment of the plastic strain evi.
However, this function is not suitable in the case of time independent
plasticity and it is even less if damage is introduced into the model.and the consistency condition
A linear system is built and solved on the light of the two previous equations. The unkowns are the strain components that are not involved in the loading.
CODE |
DESCRIPTION |
|---|---|
|
Numerical backgrounds
In the following, subscripts “k” and “u” refer to as “known” and “unknown” total strain respectively. Thus, vectors containing total strain components and stress components together with the Hooke’s tensor write:
The linear system allowing to compute the strain rates \(\dot{\varepsilon}^u\) and the plastic multiplier \(\dot p\) is presented in the case of time independent model without damage and then including damage:
time independent model without damage
The Hooke’s law writes:
\[\dot\sigma=E\left(\dot\varepsilon-\dot{p}n\right)\]\[\begin{split}\left(\begin{array}{l} \dot{\sigma}^k\\ \dot{\sigma}^u \end{array} \right) = \left(\begin{array}{ll} E_{kk} & E_{ku}\\ E_{uk} & E_{uu} \end{array} \right) \left(\begin{array}{l} \dot{\varepsilon}^k- \dot{p}n^k\\ \dot{\varepsilon}^u- \dot{p}n^u \end{array} \right) \qquad\end{split}\]\[\dot{\sigma}^u=E_{uk}\dot{\varepsilon}^k+E_{uu}\dot{\varepsilon}^u -\dot{p}\left(E_{uk}n^k+E_{uu}n^u\right)\]“u” équations are then be obtained:
\[\boxed{ E_{uu}\dot{\varepsilon}^u-\left(En\right)^u\dot{p}=\dot{\sigma}^u-E_{uk}\dot{\varepsilon}^k }\]The consistency condition \(\dot f = 0\) gives:
\[n\dot{\sigma}=H\dot{p} \qquad n\left(E\dot{\varepsilon}\right)=\left(H+nEn\right)\dot{p}\]\[\begin{split}\left(\begin{array}{ll} n^{k}\\ n^{u} \end{array} \right) \left(\begin{array}{ll} E_{kk} & E_{ku}\\ E_{uk} & E_{uu} \end{array} \right) \left(\begin{array}{l} \dot{\varepsilon}^k\\ \dot{\varepsilon}^u \end{array} \right) = \left(H+nEn\right)\dot{p}\end{split}\]\[\begin{split}\left(\begin{array}{ll} n^{k}\\ n^{u} \end{array} \right) \left(\begin{array}{ll} E_{kk}\dot{\varepsilon}^k+ E_{ku}\dot{\varepsilon}^u\\ E_{uk}\dot{\varepsilon}^k+ E_{uu}\dot{\varepsilon}^u \end{array} \right) = \left(H+nEn\right)\dot{p}\end{split}\]and leads to the scalar equation:
\[\boxed{ \left(n^{k}E_{ku}+n^{u}E_{uu}\right)\dot{\varepsilon}^u-\left(H+nEn\right)\dot{p}= -\left(n^{k}E_{kk}+n^{u}E_{uk}\right)\dot{\varepsilon}^k }\]The system to be solved in the case of time independent plasticity is as follows:
\[\begin{split}\left(\begin{array}{ll} H_{cc} & H_{cp}\\ H_{pc} & H_{pp} \end{array} \right) \left(\begin{array}{l} \dot{\varepsilon}^u\\ \dot{p} \end{array} \right) = \left(\begin{array}{l} b_c\\ b_p \end{array} \right)\end{split}\]\[\begin{split}\begin{aligned} H_{cc}&=E_{uu}\\ H_{cp}&=-\left(En\right)^u\\ H_{pc}&=\left(n^{k}E_{ku}+n^{u}E_{uu}\right)\\ H_{pp}&=-\left(H+nEn\right)\\ b_c&=\dot{\sigma}^u-E_{uk}\dot{\varepsilon}^k\\ b_p&=-\left(n^{k}E_{kk}+n^{u}E_{uk}\right)\dot{\varepsilon}^k \end{aligned}\end{split}\]time independent model with damage
The Hooke’s law is now such that:
\[\begin{split}\begin{aligned} \sigma&=(1-D)E\left(\varepsilon-\varepsilon^p\right)\\ \dot\sigma&=(1-D)E\left(\dot\varepsilon-\dot{p}n/(1-D)\right) -E\left(\varepsilon-\varepsilon^p\right)\dot{D} \end{aligned}\end{split}\]\[\begin{split}\left(\begin{array}{l} \dot{\sigma}^k\\ \dot{\sigma}^u \end{array} \right) =(1-D) \left(\begin{array}{ll} E_{kk} & E_{ku}\\ E_{uk} & E_{uu} \end{array} \right) \left(\begin{array}{l} \dot{\varepsilon}^k- \dot{p}n^k/(1-D)\\ \dot{\varepsilon}^u- \dot{p}n^u/(1-D) \end{array} \right) - \left(\begin{array}{ll} E_{kk} & E_{ku}\\ E_{uk} & E_{uu} \end{array} \right) \left(\begin{array}{l} \varepsilon^k- \varepsilon_p^k\\ \varepsilon^u- \varepsilon_p^u \end{array} \right) \dot{D} \qquad\end{split}\]\[\dot{\sigma}^u=(1-D)\left(E_{uk}\dot{\varepsilon}^k+E_{uu}\dot{\varepsilon}^u\right) -\dot{p}\left(E_{uk}n^k+E_{uu}n^u\right) -\dot{D}\Big( E_{uk}\left(\varepsilon^k-\varepsilon_p^k\right)+ E_{uu}\left(\varepsilon^u-\varepsilon_p^u\right) \Big)\]The “u” equations depend on the damage law. If, for example, the damage evolution rule \(\dot{D}=(Y/S)^s\dot{p}\) is used:
\[\boxed{ (1-D)E_{uu}\dot{\varepsilon}^u -\Big[ \left(En\right)^u + (Y/S)^s \left(E\varepsilon^e\right)^u \Big] \dot{p} =\dot{\sigma}^u-(1-D)E_{uk}\dot{\varepsilon}^k }\]The damage variable leads to the modification of the consistency condition as:
\[(1-D)n\left(E\dot{\varepsilon}\right)=\left(H+nEn\right)\dot{p}\]\[\begin{split}(1-D)\left(\begin{array}{ll} n^{k}\\ n^{u} \end{array} \right) \left(\begin{array}{ll} E_{kk} & E_{ku}\\ E_{uk} & E_{uu} \end{array} \right) \left(\begin{array}{l} \dot{\varepsilon}^k\\ \dot{\varepsilon}^u \end{array} \right) = \left(H+nEn\right)\dot{p}\end{split}\]\[\begin{split}(1-D)\left(\begin{array}{ll} n^{k}\\ n^{u} \end{array} \right) \left(\begin{array}{ll} E_{kk}\dot{\varepsilon}^k+ E_{ku}\dot{\varepsilon}^u\\ E_{uk}\dot{\varepsilon}^k+ E_{uu}\dot{\varepsilon}^u \end{array} \right) = \left(H+nEn\right)\dot{p}\end{split}\]\[\boxed{ (1-D)\left(n^{k}E_{ku}+n^{u}E_{uu}\right)\dot{\varepsilon}^u-\left(H+nEn\right)\dot{p}= -(1-D)\left(n^{k}E_{kk}+n^{u}E_{uk}\right)\dot{\varepsilon}^k }\]Finally, the system to be solved is of the form:
\[\begin{split}\left(\begin{array}{ll} H_{cc} & H_{cp}\\ H_{pc} & H_{pp} \end{array} \right) \left(\begin{array}{l} \dot{\varepsilon}^u\\ \dot{p} \end{array} \right) = \left(\begin{array}{l} b_c\\ b_p \end{array} \right)\end{split}\]where:
\[\begin{split}\begin{aligned} H_{cc}&=(1-D)E_{uu}\\ H_{pc}&=(1-D)\left(n^{k}E_{ku}+n^{u}E_{uu}\right)\\ H_{pp}&=-\left(H+nEn\right)\\ b_p&=-(1-D)\left(n^{k}E_{kk}+n^{u}E_{uk}\right)\dot{\varepsilon}^k \end{aligned}\end{split}\]If a damage evolution law of the form \(\dot{D}=(Y/S)^s\dot{p}\) is chosen:
\[\begin{split}\begin{aligned} H_{cp}&= -\Big[ \left(En\right)^u + (Y/S)^s \left(E\varepsilon^e\right)^u \Big]\\ b_c&=\dot{\sigma}^u-(1-D)E_{uk}\dot{\varepsilon}^k \end{aligned}\end{split}\]
Example#
Here’s an example of a time independent model involving damage
@Class TEST_CDM : BASIC_NL_BEHAVIOR, BASIC_SIMULATOR {
@Name test_cdm;
@SubClass ELASTICITY elasticity;
@tVarInt evi,eel,alpha;
@sVarInt evcum,D,r;
@Coefs C,B,b,Q,R0;
@Coefs S,s;
};
@StrainPart {
double umD = 1.0;
if(D>0.0) {
umD = 1.0 - Zmin(0.99,D);
}
sig = umD*(*elasticity*eel);
m_tg_matrix=*elasticity;
}
@Derivative {
double J,Reff,Y,crit,umD,H,miso;
TENSOR2 m,norm,sigeff,sprime,Xeff;
ELASTICITY& E=*elasticity;
umD = 1.0;
if(D>0.0) {
umD = 1.0 - Zmin(0.99,D);
}
sig = umD*(E*eel);
sigeff = E*eel;
Xeff = (2./3.)*C*alpha;
Reff = b*Q*r;
sprime = deviator(sigeff-Xeff);
J = sqrt(1.5*(sprime|sprime));
crit = J - Reff - R0 ;
if(crit<=0.){
devcum=0.; dalpha=0.; dr=0.0; dD=0.0;
resolve_flux_grad(*elasticity*umD, deel, deto);
}
else {
norm = 1.5*sprime/J;
m = norm - B*alpha;
miso = 1. - b*r;
H = norm|((C/1.5)*m);
H += b*Q*miso;
Y = (1./2.)*(eel|sigeff);
double dD_dp = pow(Y/S,s);
resolve_flux_grad_consistency(E,norm,H,deto,devcum,eel,D,dD_dp);
devi = devcum*norm/umD;
deel = deto - devi;
dalpha = devcum*(norm-B*alpha)/umD;
dr = devcum*(1.-b*r)/umD;
dD = devcum*dD_dp;
}
}