59 auto &oldTotalDef = status->giveStrainVector();
60 auto &tempPlasDef = status->giveTempPlasDef();
61 auto &oldStress = status->giveTempStressVector();
63 auto elStrain = strain - tempPlasDef;
64 auto deltaStrain = strain - oldTotalDef;
66 auto tmpStress = stress + oldStress;
68 double tempESED = 0.5 *
dot(elStrain, stress);
69 double tempTSED = tsed + 0.5 *
dot(deltaStrain, tmpStress);
70 double tempPSED = tempTSED - tempESED;
72 status->setTempTSED(tempTSED);
73 status->setTempPSED(tempPSED);
78TrabBone3D :: give3dMaterialStiffnessMatrix(MatResponseMode mode,
GaussPoint *gp,
TimeStep *tStep)
const
82 if ( mode == ElasticStiffness ) {
84 auto elasticity =
inv(compliance);
86 }
else if ( mode == SecantStiffness ) {
92 auto elasticity =
inv(compliance);
93 auto tempDam = status->giveTempDam();
94 return elasticity * (1.0 - tempDam);
96 double kappa = status->giveKappa();
97 double tempKappa = status->giveTempKappa();
98 double tempDam = status->giveTempDam();
101 if ( tempKappa > kappa ) {
104 auto &tempEffectiveStress = status->giveTempEffectiveStress();
105 auto &plasFlowDirec = status->givePlasFlowDirec();
106 auto &SSaTensor = status->giveSSaTensor();
107 auto beta = status->giveBeta();
109 auto prodTensor =
Tdot(SSaTensor, plasFlowDirec);
111 auto thirdTerm =
dyad(tempEffectiveStress, prodTensor) * ((-
expDam *
critDam * exp(-
expDam * tempKappa)) / beta);
113 auto tempTensor2 =
dot(SSaTensor, plasFlowDirec);
114 auto secondTerm =
dyad(tempTensor2, prodTensor) * (( 1.0 - tempDam ) / beta);
116 auto tangentMatrix = SSaTensor * (1.0 - tempDam) + secondTerm + thirdTerm;
117 answer = tangentMatrix;
122 auto elasticity =
inv(compliance);
123 answer = elasticity * (1.0 - tempDam);
126 double g = status->giveDensG();
130 answer +=
I6_I6 * factor;
138TrabBone3D :: evaluateCurrentYieldStress(
double kappa)
const
144TrabBone3D :: evaluateCurrentPlasticModulus(
double kappa)
const
151TrabBone3D :: evaluateCurrentViscousStress(
const double deltaKappa,
TimeStep *tStep)
const
158 answer = -
viscosity * deltaKappa / deltaT;
165TrabBone3D :: evaluateCurrentViscousModulus(
double deltaKappa,
TimeStep *tStep)
const
182 auto elasticity =
inv(compliance);
187 auto tempPlasDef = status->givePlasDef();
188 double tempKappa = status->giveKappa();
190 auto trialEffectiveStress =
dot(elasticity, strain - tempPlasDef);
191 auto tempEffectiveStress = trialEffectiveStress;
198 bool convergence =
projectOnYieldSurface(tempKappa, tempEffectiveStress, tempPlasDef, trialEffectiveStress, elasticity, compliance, status, tStep, gp, 0);
200 status->setTempPlasDef(tempPlasDef);
201 status->setTempKappa(tempKappa);
202 status->setTempEffectiveStress(tempEffectiveStress);
205 tempEffectiveStress = trialEffectiveStress;
206 tempKappa = status->giveKappa();
207 tempPlasDef = status->givePlasDef();
208 convergence =
projectOnYieldSurface(tempKappa, tempEffectiveStress, tempPlasDef, trialEffectiveStress, elasticity, compliance, status, tStep, gp, 1);
209 if ( !convergence ) {
210 OOFEM_ERROR(
"No convergence of the stress return algorithm in TrabBone3D :: performPlasticityReturn\n");
213 status->setTempPlasDef(tempPlasDef);
214 status->setTempKappa(tempKappa);
215 status->setTempEffectiveStress(tempEffectiveStress);
221TrabBone3D :: projectOnYieldSurface(
double &tempKappa,
FloatArrayF<6> &tempEffectiveStress,
FloatArrayF<6> &tempPlasDef,
const FloatArrayF<6> &trialEffectiveStress,
const FloatMatrixF<6,6> &elasticity,
const FloatMatrixF<6,6> &compliance,
TrabBone3DStatus *status,
TimeStep *tStep,
GaussPoint *gp,
int lineSearchFlag)
const
228 auto tempTensor2 =
dot(fabric, trialEffectiveStress);
229 auto FS =
dot(F, trialEffectiveStress);
230 auto SFS = sqrt(
dot(trialEffectiveStress, tempTensor2) );
241 double toSolveScalar = plasCriterion;
242 double errorF = plasCriterion;
244 double deltaKappa = 0.;
245 auto SSaTensor = elasticity;
248 auto plasFlowDirec = tmp.first;
249 double norm = tmp.second;
252 double radialReturnFlag = lineSearchFlag;
253 if ( radialReturnFlag == 2 ) {
255 double k = tempKappa;
256 double f = plasCriterion;
257 double SFSr = sqrt(
dot(trialEffectiveStress, tempTensor2) );
258 double FSr =
dot(F, trialEffectiveStress);
260 auto tempTensor2 =
dot(compliance, trialEffectiveStress);
261 auto helpArray =
dot(normAdjust, tempTensor2);
262 norm = sqrt(
dot(tempTensor2, helpArray) );
265 while ( fabs(f) > 1.e-12 ) {
268 double denom = SFSr + FSr - dSYdA;
269 double dAlfa = -f / denom;
271 stress = trialEffectiveStress * alfa;
272 k += ( 1 - alfa ) *
norm;
276 tempEffectiveStress = stress;
281 plasFlowDirec = tmp.first;
285 printf(
"tempS %d \n", tempEffectiveStress.
giveSize() );
286 printf(
"trial S %d \n", trialEffectiveStress.
giveSize() );
289 toSolveTensor =
dot( compliance, ( tempEffectiveStress - trialEffectiveStress ) ) + deltaKappa * plasFlowDirec;
293 SSaTensor =
inv(derivPlasFlowDirec * deltaKappa + compliance);
305 double beta =
dot(plasFlowDirec,
dot(SSaTensor, plasFlowDirec)) + ( plasModulus - viscoModulus ) /
norm;
307 auto tempScalar =
dot(plasFlowDirec,
dot(SSaTensor, toSolveTensor));
308 auto incKappa = ( toSolveScalar /
norm - tempScalar ) / beta;
309 auto incTempEffectiveStress =
dot(SSaTensor, plasFlowDirec * incKappa + toSolveTensor);
311 if ( lineSearchFlag == 1 ) {
312 current_max_num_iter = 4000;
317 double M = ( errorR * errorR + errorF * errorF ) / 2;
319 for (
int j = 0; ; ++j ) {
320 auto tempStress = incTempEffectiveStress * (-alfa) + tempEffectiveStress;
321 auto newDeltaKappa = deltaKappa + alfa * incKappa;
329 SSaTensor =
inv(derivPlasFlowDirec * newDeltaKappa + compliance);
333 plasFlowDirec = tmp.first;
336 toSolveTensor =
dot( compliance, ( tempStress - trialEffectiveStress ) ) + newDeltaKappa * plasFlowDirec;
339 toSolveScalar =
evaluatePlasCriterion(fabric, F, tempStress, tempKappa + newDeltaKappa, newDeltaKappa, tStep);
343 errorR = sqrt(
dot(toSolveTensor, toSolveTensor));
344 errorF = fabs(toSolveScalar);
345 double newM = ( errorR * errorR + errorF * errorF ) / 2;
348 if ( newM < ( 1 - 2 * beta * alfa ) * M || j == jMax ) {
349 deltaKappa = newDeltaKappa;
350 tempEffectiveStress = tempStress;
354 double alfa1 = eta * alfa;
355 double alfa2 = -alfa * alfa * dM / 2 / ( newM - M - alfa * dM );
357 if ( alfa1 < alfa2 ) {
363 deltaKappa += incKappa;
364 tempEffectiveStress -= incTempEffectiveStress;
376 plasFlowDirec = tmp.first;
378 toSolveTensor =
dot( compliance, ( tempEffectiveStress - trialEffectiveStress ) ) + deltaKappa * plasFlowDirec;
382 toSolveScalar =
evaluatePlasCriterion(fabric, F, tempEffectiveStress, tempKappa + deltaKappa, deltaKappa, tStep);
386 errorR = sqrt(
dot(toSolveTensor, toSolveTensor));
387 errorF = fabs(toSolveScalar);
391 printf(
" %d %g %g %g %g\n", flagLoop, tempEffectiveStress.
at(1), tempEffectiveStress.
at(3), incKappa, deltaKappa);
396 }
while ( flagLoop <= current_max_num_iter && !convergence );
401 auto tempTensor2 =
dot(SSaTensor, plasFlowDirec);
402 auto beta =
dot(plasFlowDirec, tempTensor2) + ( plasModulus - viscoModulus ) /
norm;
403 tempPlasDef += deltaKappa * plasFlowDirec;
404 tempKappa += deltaKappa;
414std::pair<FloatArrayF<6>,
double>
417 auto FFS =
dot(fabric,
S);
419 double SFS = sqrt(
dot(
S, FFS) );
423 auto answer = F + FFS * (1. / SFS);
424 auto tempTensor2 =
dot(normAdjust, answer);
426 double norm = sqrt(
dot(answer, tempTensor2) );
428 answer *= 1.0 /
norm;
430 return {answer,
norm};
448 auto FFS =
dot(fabric,
S);
449 auto SFS = sqrt(
dot(
S, FFS) );
453 auto tempTensor2 = FFS * (1. / SFS) + F;
454 auto tempTensor21 =
dot(normAdjust, tempTensor2);
456 auto norm = sqrt(
dot(tempTensor2, tempTensor21) );
458 auto FSFS =
dyad(FFS, FFS);
459 auto dNp = (FSFS * (-1. / SFS / SFS) + fabric) * (1. / SFS /
norm);
461 auto FFSF = FFS * (1. / SFS) + F;
463 auto tempTensor4 = (FSFS * (-1. / SFS / SFS) + fabric) * (1. / SFS /
norm);
464 tempTensor2 =
dot(normAdjust, FFSF);
465 auto dNorm =
dot(tempTensor4, tempTensor2);
469 return dNp + tempTensor4;
475 auto FFS =
dot(fabric, stress);
476 auto FS =
dot(F, stress);
477 auto SFS = sqrt(
dot(stress, FFS) );
482TrabBone3D :: computeDamageParam(
double tempKappa)
const
485 if ( tempKappa > 0. ) {
496TrabBone3D :: computeDamageParamPrime(
double tempKappa)
const
535 double traceLnU = ( strain.
at(1) + strain.
at(2) + strain.
at(3) );
540 answer.
at(1) = answer.
at(2) = answer.
at(3) = factor;
556 auto effStress = status->giveTempEffectiveStress();
562 auto stress = ( 1 - tempDam ) * effStress;
572 status->setTempDam(tempDam);
573 status->letTempStrainVectorBe(strain);
574 status->letTempStressVectorBe(stress);
580TrabBone3D :: constructAnisoComplTensor()
const
582 double m3 = 3. -
m1 -
m2;
585 double m1l = pow(
m1,
expl);
586 double m2l = pow(
m2,
expl);
587 double m3l = pow(m3,
expl);
591 D.
at(1, 1) = 1 / ( eps0k * m1l * m1l );
592 D.
at(2, 2) = 1 / ( eps0k * m2l * m2l );
593 D.
at(3, 3) = 1 / ( eps0k * m3l * m3l );
594 D.
at(1, 2) = -
nu0 / ( eps0k * m1l * m2l );
595 D.
at(2, 1) = D.
at(1, 2);
596 D.
at(1, 3) = -
nu0 / ( eps0k * m1l * m3l );
597 D.
at(3, 1) = D.
at(1, 3);
598 D.
at(2, 3) = -
nu0 / ( eps0k * m2l * m3l );
599 D.
at(3, 2) = D.
at(2, 3);
600 D.
at(4, 4) = 1 / ( mu0k * m2l * m3l );
601 D.
at(5, 5) = 1 / ( mu0k * m3l * m1l );
602 D.
at(6, 6) = 1 / ( mu0k * m1l * m2l );
607 auto stiffness =
inv(D);
617TrabBone3D :: constructAnisoStiffnessTensor()
const
619 double m3 = 3. -
m1 -
m2;
622 double m1l = pow(
m1,
expl);
623 double m2l = pow(
m2,
expl);
624 double m3l = pow(m3,
expl);
626 double E1 = eps0k * m1l * m1l;
627 double E2 = eps0k * m2l * m2l;
628 double E3 = eps0k * m3l * m3l;
630 double G23 = mu0k * m2l * m3l;
631 double G13 = mu0k * m1l * m3l;
632 double G12 = mu0k * m1l * m2l;
634 double n23 =
nu0 * m2l / m3l;
635 double n12 =
nu0 * m1l / m2l;
636 double n31 =
nu0 * m3l / m1l;
637 double n32 =
nu0 * m3l / m2l;
638 double n21 =
nu0 * m2l / m1l;
639 double n13 =
nu0 * m1l / m3l;
641 double eksi = 1. - ( n12 * n21 + n23 * n32 + n31 * n13 ) - ( n12 * n23 * n31 + n21 * n32 * n13 );
645 D.
at(1, 1) = E1 * ( 1. - n23 * n32 ) / eksi;
646 D.
at(1, 2) = E2 * ( n12 + n13 * n32 ) / eksi;
647 D.
at(1, 3) = E3 * ( n13 + n23 * n12 ) / eksi;
648 D.
at(2, 2) = E2 * ( 1. - n13 * n31 ) / eksi;
649 D.
at(2, 3) = E3 * ( n23 + n21 * n13 ) / eksi;
650 D.
at(3, 3) = E3 * ( 1. - n21 * n12 ) / eksi;
653 for (
int i = 1; i < 4; i++ ) {
654 for (
int j = 1; j < i; j++ ) {
655 D.
at(i, j) = D.
at(j, i);
669TrabBone3D :: constructAnisoFabricTensor()
const
672 double rhoP = pow(
rho, 2. *
expp);
673 double m3 = 3. -
m1 -
m2;
674 double m1q = pow(
m1, 2. *
expq);
675 double m2q = pow(
m2, 2. *
expq);
676 double m3q = pow(m3, 2. *
expq);
679 F.
at(1, 1) = S0 * S0 / ( rhoP * m1q * m1q );
680 F.
at(2, 2) = S0 * S0 / ( rhoP * m2q * m2q );
681 F.
at(3, 3) = S0 * S0 / ( rhoP * m3q * m3q );
682 F.
at(1, 2) = -
chi0 * S0 * S0 / ( rhoP * m1q * m2q );
683 F.
at(2, 1) = F.
at(1, 2);
684 F.
at(1, 3) = -
chi0 * S0 * S0 / ( rhoP * m1q * m3q );
685 F.
at(3, 1) = F.
at(1, 3);
686 F.
at(2, 3) = -
chi0 * S0 * S0 / ( rhoP * m2q * m3q );
687 F.
at(3, 2) = F.
at(2, 3);
688 F.
at(4, 4) = 1. / (
tau0 *
tau0 * rhoP * m2q * m3q );
689 F.
at(5, 5) = 1. / (
tau0 *
tau0 * rhoP * m1q * m3q );
690 F.
at(6, 6) = 1. / (
tau0 *
tau0 * rhoP * m1q * m2q );
698TrabBone3D :: constructAnisoFtensor()
const
701 double m3 = 3. -
m1 -
m2;
702 double m1q = pow(
m1, 2. *
expq);
703 double m2q = pow(
m2, 2. *
expq);
704 double m3q = pow(m3, 2. *
expq);
717TrabBone3D :: constructStiffnessTransformationMatrix()
const
721 answer.
at(1, 1) =
x1 *
x1;
722 answer.
at(1, 2) =
x2 *
x2;
723 answer.
at(1, 3) =
x3 *
x3;
724 answer.
at(1, 4) =
x2 *
x3;
725 answer.
at(1, 5) =
x1 *
x3;
726 answer.
at(1, 6) =
x1 *
x2;
728 answer.
at(2, 1) =
y1 *
y1;
729 answer.
at(2, 2) =
y2 *
y2;
730 answer.
at(2, 3) =
y3 *
y3;
731 answer.
at(2, 4) =
y2 *
y3;
732 answer.
at(2, 5) =
y1 *
y3;
733 answer.
at(2, 6) =
y1 *
y2;
735 answer.
at(3, 1) =
z1 *
z1;
736 answer.
at(3, 2) =
z2 *
z2;
737 answer.
at(3, 3) =
z3 *
z3;
738 answer.
at(3, 4) =
z2 *
z3;
739 answer.
at(3, 5) =
z1 *
z3;
740 answer.
at(3, 6) =
z1 *
z2;
742 answer.
at(4, 1) = 2. *
y1 *
z1;
743 answer.
at(4, 2) = 2. *
y2 *
z2;
744 answer.
at(4, 3) = 2. *
y3 *
z3;
749 answer.
at(5, 1) = 2. *
x1 *
z1;
750 answer.
at(5, 2) = 2. *
x2 *
z2;
751 answer.
at(5, 3) = 2. *
x3 *
z3;
756 answer.
at(6, 1) = 2. *
x1 *
y1;
757 answer.
at(6, 2) = 2. *
x2 *
y2;
758 answer.
at(6, 3) = 2. *
x3 *
y3;
768TrabBone3D :: constructNormAdjustTensor()
const
772 for (
int i = 1; i <= 3; i++ ) {
773 answer.
at(i, i) = 1.;
776 for (
int i = 4; i <= 6; i++ ) {
777 answer.
at(i, i) = 0.5;
785TrabBone3D :: constructFabricTransformationMatrix()
const
789 answer.
at(1, 1) =
x1 *
x1;
790 answer.
at(1, 2) =
x2 *
x2;
791 answer.
at(1, 3) =
x3 *
x3;
792 answer.
at(1, 4) = 2 *
x2 *
x3;
793 answer.
at(1, 5) = 2 *
x1 *
x3;
794 answer.
at(1, 6) = 2 *
x1 *
x2;
796 answer.
at(2, 1) =
y1 *
y1;
797 answer.
at(2, 2) =
y2 *
y2;
798 answer.
at(2, 3) =
y3 *
y3;
799 answer.
at(2, 4) = 2 *
y2 *
y3;
800 answer.
at(2, 5) = 2 *
y1 *
y3;
801 answer.
at(2, 6) = 2 *
y1 *
y2;
803 answer.
at(3, 1) =
z1 *
z1;
804 answer.
at(3, 2) =
z2 *
z2;
805 answer.
at(3, 3) =
z3 *
z3;
806 answer.
at(3, 4) = 2 *
z2 *
z3;
807 answer.
at(3, 5) = 2 *
z1 *
z3;
808 answer.
at(3, 6) = 2 *
z1 *
z2;
810 answer.
at(4, 1) =
y1 *
z1;
811 answer.
at(4, 2) =
y2 *
z2;
812 answer.
at(4, 3) =
y3 *
z3;
817 answer.
at(5, 1) =
x1 *
z1;
818 answer.
at(5, 2) =
x2 *
z2;
819 answer.
at(5, 3) =
x3 *
z3;
824 answer.
at(6, 1) =
x1 *
y1;
825 answer.
at(6, 2) =
x2 *
y2;
826 answer.
at(6, 3) =
x3 *
y3;
837 StructuralMaterial :: initializeFrom(ir);
927 if ( type == IST_DamageScalar ) {
929 answer.
at(1) = status->giveTempDam();
931 }
else if ( type == IST_PlasticStrainTensor ) {
932 answer = status->giveTempPlasDef();
934 }
else if ( type == IST_MaxEquivalentStrainLevel ) {
936 answer.
at(1) = status->giveTempKappa();
938 }
else if ( type == IST_BoneVolumeFraction ) {
942 }
else if ( type == IST_PlasStrainEnerDens ) {
944 answer.
at(1) = status->giveTempPSED();
946 }
else if ( type == IST_ElasStrainEnerDens ) {
948 answer.
at(1) = status->giveTempTSED() - status->giveTempPSED();
950 }
else if ( type == IST_TotalStrainEnerDens ) {
952 answer.
at(1) = status->giveTempTSED();
955 return StructuralMaterial :: giveIPValue(answer, gp, type, tStep);
960double TrabBone3D :: predictRelativeComputationalCost(
GaussPoint *gp)
964 if ( status->giveTempDam() > 0.0 ) {
972double TrabBone3D :: predictRelativeRedistributionCost(
GaussPoint *gp)
985TrabBone3DStatus :: printOutputAt(FILE *file,
TimeStep *tStep)
const
987 StructuralMaterialStatus :: printOutputAt(file, tStep);
988 fprintf(file,
"status { ");
989 fprintf( file,
"plastrains: %f %f %f %f %f %f", this->
plasDef.at(1), this->plasDef.at(2), this->plasDef.at(3), this->plasDef.at(4), this->plasDef.at(5), this->plasDef.at(6) );
990 fprintf(file,
" , kappa %f , dam %f , esed %f , psed %f , tsed %f ", this->
tempKappa, this->
tempDam, this->
tempTSED - this->
tempPSED, this->
tempPSED, this->
tempTSED);
991 fprintf(file,
"}\n");
996TrabBone3DStatus :: initTempStatus()
998 StructuralMaterialStatus :: initTempStatus();
1010 StructuralMaterialStatus :: updateYourself(tStep);
1024 StructuralMaterialStatus :: saveContext(stream, mode);
1026 if ( ( iores =
plasDef.storeYourself(stream) ) !=
CIO_OK ) {
1075 StructuralMaterialStatus :: restoreContext(stream, mode);
1078 if ( ( iores =
plasDef.restoreYourself(stream) ) !=
CIO_OK ) {
1121std::unique_ptr<MaterialStatus> TrabBone3D :: CreateStatus(
GaussPoint *gp)
const
1123 return std::make_unique<TrabBone3DStatus>(gp);
#define REGISTER_Material(class)
virtual int read(int *data, std::size_t count)=0
Reads count integer values into array pointed by data.
virtual int write(const int *data, std::size_t count)=0
Writes count integer values from array pointed by data.
double & at(std::size_t i)
int giveSize() const
Returns the size of receiver.
double at(std::size_t i, std::size_t j) const
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
virtual void initTempStatus(GaussPoint *gp) const
StructuralMaterialStatus(GaussPoint *g)
Constructor. Creates new StructuralMaterialStatus with IntegrationPoint g.
StructuralMaterial(int n, Domain *d)
double giveTimeIncrement()
Returns solution step associated time increment.
double densG
Densificator criterion.
FloatArrayF< 6 > tempPlasDef
double giveTempKappa() const
FloatArrayF< 6 > effectiveStress
void setSSaTensor(const FloatMatrixF< 6, 6 > &ssa)
void setPlasFlowDirec(const FloatArrayF< 6 > &pfd)
FloatArrayF< 6 > plasFlowDirec
FloatMatrixF< 6, 6 > constructAnisoComplTensor() const
Construct anisotropic compliance tensor.
double evaluateCurrentYieldStress(double kappa) const
std::pair< FloatArrayF< 6 >, double > constructPlasFlowDirec(FloatMatrixF< 6, 6 > &fabric, const FloatArrayF< 6 > &F, const FloatArrayF< 6 > &S) const
void computePlasStrainEnerDensity(GaussPoint *gp, const FloatArrayF< 6 > &strain, const FloatArrayF< 6 > &stress) const
double gammaL0
Densificator properties.
double evaluateCurrentPlasticModulus(double kappa) const
double x1
Local coordinate system.
FloatMatrixF< 6, 6 > constructNormAdjustTensor() const
Construct Tensor to adjust Norm.
double evaluateCurrentViscousStress(double deltaKappa, TimeStep *tStep) const
double evaluatePlasCriterion(const FloatMatrixF< 6, 6 > &fabric, const FloatArrayF< 6 > &F, const FloatArrayF< 6 > &stress, double kappa, double deltaKappa, TimeStep *tStep) const
double evaluateCurrentViscousModulus(double deltaKappa, TimeStep *tStep) const
virtual double computeCumPlastStrain(GaussPoint *gp, TimeStep *tStep) const
FloatMatrixF< 6, 6 > constructStiffnessTransformationMatrix() const
void performPlasticityReturn(GaussPoint *gp, const FloatArrayF< 6 > &strain, TimeStep *tStep) const
bool projectOnYieldSurface(double &tempKappa, FloatArrayF< 6 > &tempEffectiveStress, FloatArrayF< 6 > &tempPlasDef, const FloatArrayF< 6 > &trialEffectiveStress, const FloatMatrixF< 6, 6 > &elasticity, const FloatMatrixF< 6, 6 > &compliance, TrabBone3DStatus *status, TimeStep *tStep, GaussPoint *gp, int lineSearchFlag) const
double viscosity
Viscosity parameter.
FloatArrayF< 6 > constructAnisoFtensor() const
FloatMatrixF< 6, 6 > constructDerivativeOfPlasFlowDirec(const FloatMatrixF< 6, 6 > &fabric, const FloatArrayF< 6 > &F, const FloatArrayF< 6 > &S) const
double computeDamage(GaussPoint *gp, TimeStep *tStep) const
FloatArrayF< 6 > computeDensificationStress(GaussPoint *gp, const FloatArrayF< 6 > &totalStrain, TimeStep *tStep) const
double computeDamageParam(double kappa) const
FloatMatrixF< 6, 6 > constructFabricTransformationMatrix() const
FloatMatrixF< 6, 6 > constructAnisoFabricTensor() const
Construct anisotropic fabric tensor.
double norm(const FloatArray &x)
FloatMatrixF< N, P > Tdot(const FloatMatrixF< M, N > &a, const FloatMatrixF< M, P > &b)
Computes .
FloatMatrixF< N, M > dyad(const FloatArrayF< N > &a, const FloatArrayF< M > &b)
Computes the dyadic product .
const FloatMatrixF< 6, 6 > I6_I6
I(x)I expressed in Voigt form.
FloatMatrixF< M, M > rotate(FloatMatrixF< N, N > &a, const FloatMatrixF< N, M > &r)
Computes .
double dot(const FloatArray &x, const FloatArray &y)
FloatMatrixF< N, N > inv(const FloatMatrixF< N, N > &mat, double zeropiv=1e-24)
Computes the inverse.
@ CIO_IOERR
General IO error.
#define _IFT_TrabBone3D_m1
#define _IFT_TrabBone3D_strain_tol
#define _IFT_TrabBone3D_sig0Neg
#define _IFT_TrabBone3D_x1
#define _IFT_TrabBone3D_tau0
#define _IFT_TrabBone3D_max_num_iter
#define _IFT_TrabBone3D_expq
#define _IFT_TrabBone3D_expPlasHard
#define _IFT_TrabBone3D_y2
#define _IFT_TrabBone3D_rel_yield_tol
#define _IFT_TrabBone3D_mu0
#define _IFT_TrabBone3D_m2
#define _IFT_TrabBone3D_expDam
#define _IFT_TrabBone3D_critDam
#define _IFT_TrabBone3D_rho
#define _IFT_TrabBone3D_x3
#define _IFT_TrabBone3D_printflag
#define _IFT_TrabBone3D_eps0
#define _IFT_TrabBone3D_expk
#define _IFT_TrabBone3D_expp
#define _IFT_TrabBone3D_nu0
#define _IFT_TrabBone3D_plasHardFactor
#define _IFT_TrabBone3D_y3
#define _IFT_TrabBone3D_chi0Pos
#define _IFT_TrabBone3D_y1
#define _IFT_TrabBone3D_viscosity
#define _IFT_TrabBone3D_expl
#define _IFT_TrabBone3D_sig0Pos
#define _IFT_TrabBone3D_x2