54void IntMatBilinearCZStatus :: initTempStatus()
57void IntMatBilinearCZStatus :: updateYourself(
TimeStep *tStep)
67 StructuralInterfaceMaterialStatus ::updateYourself(tStep);
71void IntMatBilinearCZStatus :: copyStateVariables(
const MaterialStatus &iStatus)
73 StructuralInterfaceMaterialStatus :: copyStateVariables(iStatus);
88void IntMatBilinearCZStatus :: addStateVariables(
const MaterialStatus &iStatus)
98int IntMatBilinearCZ :: checkConsistency()
105 double maxDamage = 0.99999999;
115 double TTrNormal = tractionTrial.at(3);
116 double TTrTang = sqrt( pow(tractionTrial.at(1), 2.0) + pow(tractionTrial.at(2), 2.0) );
144 auto answer = tractionTrial;
149 if ( answer.at(3) > 0.0 ) {
158 double absTol = 1.0e-9;
159 double relTol = 1.0e-9;
160 double eps = 1.0e-12;
161 double plastMultInc = 0.0;
162 double initialRes = 0.0;
164 for (
int iter = 0; iter < maxIter; iter++ ) {
168 double TNormal = answer.at(3);
169 double TTang = sqrt( pow(answer.at(1), 2.0) + pow(answer.at(2), 2.0) );
177 initialRes = fabs(phi);
178 initialRes =
max(initialRes, 1.0e-12);
181 if ( (iter >= minIter && fabs(phi) < absTol) || ( iter >= minIter && ( fabs(phi) / initialRes ) < relTol ) ) {
208 if ( answer.at(3) > 0.0 ) {
217 if ( answer.at(3) > 0.0 ) {
226 auto tractionPert =
computeTraction(tractionTrial, plastMultInc + eps);
227 double TNormalPert = tractionPert.at(3);
228 double TTangPert = sqrt( pow(tractionPert.at(1), 2.0) + pow(tractionPert.at(2), 2.0) );
231 double Jac = ( phiPert - phi ) / eps;
232 plastMultInc -= ( 1.0 / Jac ) * phi;
241 OOFEM_WARNING(
"not implemented. Use numerical Jacobian instead.");
245double IntMatBilinearCZ :: computeYieldFunction(
double iTractionNormal,
double iTractionTang)
const
265 if ( iTTrial.
at(3) <= 0.0 ) {
266 oT.
at(3) = iTTrial.
at(3);
275 StructuralInterfaceMaterial :: initializeFrom(ir);
292 printf(
"In IntMatBilinearCZ::initializeFrom: Semi-explicit time integration activated.\n");
298 StructuralInterfaceMaterial :: giveInputRecord(input);
310void IntMatBilinearCZ :: printYourself()
312 printf(
"\nInitializing IntMatBilinearCZ:\n");
314 printf(
"mGIc: %e\n",
mGIc);
315 printf(
"mGIIc: %e\n",
mGIIc);
316 printf(
"mSigmaF: %e\n",
mSigmaF);
317 printf(
"mMu: %e\n",
mMu);
318 printf(
"mGamma: %e\n\n",
mGamma);
#define REGISTER_Material(class)
double & at(std::size_t i)
FloatArrayF< 3 > mTractionOld
Traction.
IntMatBilinearCZStatus(GaussPoint *g)
double mDamageNew
damage variable
FloatArrayF< 3 > mTractionNew
FloatArrayF< 3 > mJumpOld
Discontinuity.
FloatArrayF< 3 > mJumpNew
FloatArrayF< 3 > computeTraction(const FloatArrayF< 3 > &iTTrial, double iPlastMultInc) const
double computeYieldFunction(double iTractionNormal, double iTractionTang) const
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
StructuralInterfaceMaterialStatus(GaussPoint *g)
Constructor. Creates new StructuralInterfaceMaterialStatus with number n, belonging to domain d and I...
FloatArrayF< 3 > jump
Equilibrated jump (discontinuity).
void letTempFirstPKTractionBe(const FloatArrayF< 3 > v)
Assigns tempFirstPKTraction to given vector v.
void letTempTractionBe(const FloatArrayF< 3 > v)
Assigns tempTraction to given vector v.
void letTempJumpBe(const FloatArrayF< 3 > v)
Assigns tempJump to given vector v.
StructuralInterfaceMaterial(int n, Domain *d)
FloatMatrixF< 3, 3 > give3dStiffnessMatrix_dTdj_Num(GaussPoint *gp, TimeStep *tStep) const
#define OOFEM_WARNING(...)
#define _IFT_IntMatBilinearCZ_semiexplicit
#define _IFT_IntMatBilinearCZ_gamma
#define _IFT_IntMatBilinearCZ_g2c
#define _IFT_IntMatBilinearCZ_g1c
#define _IFT_IntMatBilinearCZ_mu
#define _IFT_IntMatBilinearCZ_PenaltyStiffness
#define _IFT_IntMatBilinearCZ_sigf
FloatArrayF< N > max(const FloatArrayF< N > &a, const FloatArrayF< N > &b)