58 double tsed, tempPSED, tempTSED, tempESED;
59 FloatArray oldTotalDef, tempPlasDef, oldStress;
72 tmpStress = totalStress;
73 tmpStress.
add(oldStress);
75 tempESED = 0.5 * elStrain.
dotProduct(totalStress);
76 tempTSED = tsed + 0.5 * deltaStrain.
dotProduct(tmpStress);
77 tempPSED = tempTSED - tempESED;
89 double tempDam, beta, tempKappa, kappa;
90 FloatArray tempEffectiveStress, tempTensor2, prodTensor, plasFlowDirec;
91 FloatMatrix elasticity, compliance, SSaTensor, secondTerm, thirdTerm, tangentMatrix;
94 if ( mode == ElasticStiffness ) {
98 }
else if ( mode == SecantStiffness ) {
110 answer.
times(1.0 - tempDam);
111 }
else if ( mode == TangentStiffness ) {
115 if ( tempKappa > kappa ) {
127 thirdTerm.
times(1. / beta);
131 secondTerm.
times(-( 1.0 - tempDam ) / beta);
133 tangentMatrix = SSaTensor;
134 tangentMatrix.
times(1.0 - tempDam);
135 tangentMatrix.
add(secondTerm);
136 tangentMatrix.
add(thirdTerm);
137 answer = tangentMatrix;
144 answer.
times(1.0 - tempDam);
151 tangentMatrix.
resize(6, 6);
152 tangentMatrix.
zero();
153 tangentMatrix.
at(1, 1) = tangentMatrix.
at(1, 2) = tangentMatrix.
at(1, 3) = 1;
154 tangentMatrix.
at(2, 1) = tangentMatrix.
at(2, 2) = tangentMatrix.
at(2, 3) = 1;
155 tangentMatrix.
at(3, 1) = tangentMatrix.
at(3, 2) = tangentMatrix.
at(3, 3) = 1;
156 tangentMatrix.
times(factor);
157 answer.
add(tangentMatrix);
186 answer = -
viscosity * deltaKappa / deltaT;
207 FloatArray tempPlasDef, tempEffectiveStress, trialEffectiveStress;
223 trialEffectiveStress.
beProductOf(elasticity, totalStrain - tempPlasDef);
224 tempEffectiveStress = trialEffectiveStress;
231 convergence =
projectOnYieldSurface(tempKappa, tempEffectiveStress, tempPlasDef, trialEffectiveStress, elasticity, compliance, status, tStep, gp, 0);
238 tempEffectiveStress = trialEffectiveStress;
241 convergence =
projectOnYieldSurface(tempKappa, tempEffectiveStress, tempPlasDef, trialEffectiveStress, elasticity, compliance, status, tStep, gp, 1);
242 if ( !convergence ) {
243 OOFEM_ERROR(
"No convergence of the stress return algorithm in TrabBone3D :: performPlasticityReturn\n");
258 double deltaKappa, incKappa, beta, tempScalar,
norm, FS, SFS;
259 double plasCriterion, plasModulus, viscoModulus, toSolveScalar, errorF, errorR;
261 FloatArray toSolveTensor, plasFlowDirec, tempTensor2, tensorFF_S, F;
262 FloatMatrix fabric, SSaTensor, tempTensor4, normAdjust, derivPlasFlowDirec;
267 tempTensor2.
beProductOf(fabric, trialEffectiveStress);
269 SFS = sqrt( trialEffectiveStress.
dotProduct(tempTensor2) );
279 toSolveTensor.
zero();
280 toSolveScalar = plasCriterion;
281 errorF = plasCriterion;
283 SSaTensor = elasticity;
285 tensorFF_S.
beProductOf(fabric, tempEffectiveStress);
288 double radialReturnFlag = lineSearchFlag;
289 if ( radialReturnFlag == 2 ) {
291 double denom, dSYdA, dAlfa;
292 double k = tempKappa;
293 double f = plasCriterion;
298 double SFSr = sqrt( trialEffectiveStress.
dotProduct(tempTensor2) );
299 double FSr = F.
dotProduct(trialEffectiveStress);
300 tempTensor2.
beProductOf(compliance, trialEffectiveStress);
303 norm = sqrt( tempTensor2.
dotProduct(helpArray) );
304 while ( fabs(f) > 1.e-12 ) {
307 denom = SFSr + FSr - dSYdA;
310 stress = trialEffectiveStress;
312 k = k + ( 1 - alfa ) * norm;
316 tempEffectiveStress = stress;
323 printf(
"tempS %d \n", tempEffectiveStress.
giveSize() );
324 printf(
"trial S %d \n", trialEffectiveStress.
giveSize() );
327 tempTensor2.
beProductOf( compliance, ( tempEffectiveStress - trialEffectiveStress ) );
328 toSolveTensor = tempTensor2 + deltaKappa * plasFlowDirec;
332 tempTensor4 = derivPlasFlowDirec;
333 tempTensor4.
times(deltaKappa);
334 tempTensor4.
add(compliance);
349 beta += ( plasModulus - viscoModulus ) / norm;
352 tempScalar = plasFlowDirec.
dotProduct(tempTensor2);
353 incKappa = ( toSolveScalar / norm - tempScalar ) / beta;
354 tempTensor2 = plasFlowDirec;
355 tempTensor2.
times(incKappa);
356 tempTensor2 += toSolveTensor;
357 incTempEffectiveStress.
beProductOf(SSaTensor, tempTensor2);
359 if ( lineSearchFlag == 1 ) {
365 double M = ( errorR * errorR + errorF * errorF ) / 2;
367 double newDeltaKappa;
369 for (
int j = 0; ; ++j ) {
370 tempStress = incTempEffectiveStress;
371 tempStress.
times(-alfa);
372 tempStress.
add(tempEffectiveStress);
373 newDeltaKappa = deltaKappa + alfa * incKappa;
380 tempTensor4 = derivPlasFlowDirec;
381 tempTensor4.
times(newDeltaKappa);
382 tempTensor4.
add(compliance);
386 tempTensor2.
beProductOf( compliance, ( tempStress - trialEffectiveStress ) );
387 toSolveTensor = tempTensor2 + newDeltaKappa * plasFlowDirec;
390 SFS = sqrt( tempStress.
dotProduct(tempTensor2) );
391 toSolveScalar =
evaluatePlasCriterion(fabric, F, tempStress, tempKappa + newDeltaKappa, newDeltaKappa, tStep);
395 errLoop = toSolveTensor;
397 errorF = fabs(toSolveScalar);
398 double newM = ( errorR * errorR + errorF * errorF ) / 2;
401 if ( newM < ( 1 - 2 * beta * alfa ) * M || j == jMax ) {
402 deltaKappa = newDeltaKappa;
403 tempEffectiveStress = tempStress;
407 double alfa1 = eta * alfa;
408 double alfa2 = -alfa * alfa * dM / 2 / ( newM - M - alfa * dM );
410 if ( alfa1 < alfa2 ) {
416 deltaKappa += incKappa;
417 tempEffectiveStress -= incTempEffectiveStress;
424 tempTensor4 = derivPlasFlowDirec;
425 tempTensor4.
times(deltaKappa);
426 tempTensor4.
add(compliance);
430 tempTensor2.
beProductOf( compliance, ( tempEffectiveStress - trialEffectiveStress ) );
431 toSolveTensor = tempTensor2 + deltaKappa * plasFlowDirec;
433 tempTensor2.
beProductOf(fabric, tempEffectiveStress);
434 SFS = sqrt( tempEffectiveStress.
dotProduct(tempTensor2) );
435 toSolveScalar =
evaluatePlasCriterion(fabric, F, tempEffectiveStress, tempKappa + deltaKappa, deltaKappa, tStep);
439 errLoop = toSolveTensor;
441 errorF = fabs(toSolveScalar);
445 printf(
" %d %g %g %g %g\n", flagLoop, tempEffectiveStress.
at(1), tempEffectiveStress.
at(3), incKappa, deltaKappa);
457 beta += ( plasModulus - viscoModulus ) / norm;
458 tempPlasDef += deltaKappa * plasFlowDirec;
459 tempKappa += deltaKappa;
483 answer.
add(1. / SFS, FFS);
486 norm = sqrt( answer.
dotProduct(tempTensor2) );
488 answer.
times(1.0 / norm);
494 double SFS,
norm, SGS, h;
495 FloatArray FFS, FFSF, tempTensor2, tempTensor21, dNorm;
505 gradientOfG.
add(FFS);
506 gradientOfG.
times(1. / SFS);
510 helpMatrix.
add(fabric);
511 helpMatrix.
times(1. / SFS);
513 secondGradientOfG.
times(-1. * SGS);
514 secondGradientOfG.
add(helpMatrix);
520 gradientOfH.
beTProductOf(secondGradientOfG, gradientOfG);
521 gradientOfH.
times(1. / h);
523 secondGradientOfG.
times(h);
527 test.
add(secondGradientOfG);
528 test.
times(1. / h / h);
536 tempTensor2.
times(1. / SFS);
540 norm = sqrt( tempTensor2.
dotProduct(tempTensor21) );
545 dNp.
times(-1. / SFS / SFS);
547 dNp.
times(1. / SFS / norm);
551 FFSF.
times(1. / SFS);
555 tempTensor4.
add(FSFS);
556 tempTensor4.
times(-1. / SFS / SFS);
557 tempTensor4.
add(fabric);
558 tempTensor4.
times(1. / SFS / norm);
563 tempTensor4.
times(-1. / norm / norm);
567 answer.
add(tempTensor4);
585 if ( tempKappa > 0. ) {
640 double traceLnU = ( totalStrain.
at(1) + totalStrain.
at(2) + totalStrain.
at(3) );
644 answer.
at(1) = answer.
at(2) = answer.
at(3) = 1;
646 answer.
times(factor);
668 answer = ( 1 - tempDam ) * effStress;
675 answer.
add(densStress);
694 double m3 = 3. -
m1 -
m2;
697 double m1l = pow(
m1,
expl);
698 double m2l = pow(m2,
expl);
699 double m3l = pow(m3,
expl);
703 D.
at(1, 1) = 1 / ( eps0k * m1l * m1l );
704 D.
at(2, 2) = 1 / ( eps0k * m2l * m2l );
705 D.
at(3, 3) = 1 / ( eps0k * m3l * m3l );
706 D.
at(1, 2) = -
nu0 / ( eps0k * m1l * m2l );
707 D.
at(2, 1) = D.
at(1, 2);
708 D.
at(1, 3) = -
nu0 / ( eps0k * m1l * m3l );
709 D.
at(3, 1) = D.
at(1, 3);
710 D.
at(2, 3) = -
nu0 / ( eps0k * m2l * m3l );
711 D.
at(3, 2) = D.
at(2, 3);
712 D.
at(4, 4) = 1 / ( mu0k * m2l * m3l );
713 D.
at(5, 5) = 1 / ( mu0k * m3l * m1l );
714 D.
at(6, 6) = 1 / ( mu0k * m1l * m2l );
731 double m3 = 3. -
m1 -
m2;
734 double m1l = pow(
m1,
expl);
735 double m2l = pow(m2,
expl);
736 double m3l = pow(m3,
expl);
739 double eksi, n13, n23, n12, n31, n32, n21;
741 double E1 = eps0k * m1l * m1l;
742 double E2 = eps0k * m2l * m2l;
743 double E3 = eps0k * m3l * m3l;
745 double G23 = mu0k * m2l * m3l;
746 double G13 = mu0k * m1l * m3l;
747 double G12 = mu0k * m1l * m2l;
749 n23 =
nu0 * m2l / m3l;
750 n12 =
nu0 * m1l / m2l;
751 n31 =
nu0 * m3l / m1l;
752 n32 =
nu0 * m3l / m2l;
753 n21 =
nu0 * m2l / m1l;
754 n13 =
nu0 * m1l / m3l;
756 eksi = 1. - ( n12 * n21 + n23 * n32 + n31 * n13 ) - ( n12 * n23 * n31 + n21 * n32 * n13 );
762 D.
at(1, 1) = E1 * ( 1. - n23 * n32 ) / eksi;
763 D.
at(1, 2) = E2 * ( n12 + n13 * n32 ) / eksi;
764 D.
at(1, 3) = E3 * ( n13 + n23 * n12 ) / eksi;
765 D.
at(2, 2) = E2 * ( 1. - n13 * n31 ) / eksi;
766 D.
at(2, 3) = E3 * ( n23 + n21 * n13 ) / eksi;
767 D.
at(3, 3) = E3 * ( 1. - n21 * n12 ) / eksi;
770 for (
int i = 1; i < 4; i++ ) {
771 for (
int j = 1; j < i; j++ ) {
772 D.
at(i, j) = D.
at(j, i);
794 double rhoP = pow(
rho, 2. *
expp);
795 double m3 = 3. -
m1 -
m2;
796 double m1q = pow(
m1, 2. *
expq);
797 double m2q = pow(m2, 2. *
expq);
798 double m3q = pow(m3, 2. *
expq);
806 F.
at(1, 1) = S0 * S0 / ( rhoP * m1q * m1q );
807 F.
at(2, 2) = S0 * S0 / ( rhoP * m2q * m2q );
808 F.
at(3, 3) = S0 * S0 / ( rhoP * m3q * m3q );
809 F.
at(1, 2) = -
chi0 * S0 * S0 / ( rhoP * m1q * m2q );
810 F.
at(2, 1) = F.
at(1, 2);
811 F.
at(1, 3) = -
chi0 * S0 * S0 / ( rhoP * m1q * m3q );
812 F.
at(3, 1) = F.
at(1, 3);
813 F.
at(2, 3) = -
chi0 * S0 * S0 / ( rhoP * m2q * m3q );
814 F.
at(3, 2) = F.
at(2, 3);
815 F.
at(4, 4) = 1. / (
tau0 *
tau0 * rhoP * m2q * m3q );
816 F.
at(5, 5) = 1. / (
tau0 *
tau0 * rhoP * m1q * m3q );
817 F.
at(6, 6) = 1. / (
tau0 *
tau0 * rhoP * m1q * m2q );
831 double m3 = 3. -
m1 -
m2;
832 double m1q = pow(
m1, 2. *
expq);
833 double m2q = pow(m2, 2. *
expq);
834 double m3q = pow(m3, 2. *
expq);
854 answer.
at(1, 1) =
x1 *
x1;
855 answer.
at(1, 2) =
x2 *
x2;
856 answer.
at(1, 3) =
x3 *
x3;
857 answer.
at(1, 4) = x2 *
x3;
858 answer.
at(1, 5) = x1 *
x3;
859 answer.
at(1, 6) = x1 *
x2;
861 answer.
at(2, 1) =
y1 *
y1;
862 answer.
at(2, 2) =
y2 *
y2;
863 answer.
at(2, 3) =
y3 *
y3;
864 answer.
at(2, 4) = y2 *
y3;
865 answer.
at(2, 5) = y1 *
y3;
866 answer.
at(2, 6) = y1 *
y2;
868 answer.
at(3, 1) =
z1 *
z1;
869 answer.
at(3, 2) =
z2 *
z2;
870 answer.
at(3, 3) =
z3 *
z3;
871 answer.
at(3, 4) = z2 *
z3;
872 answer.
at(3, 5) = z1 *
z3;
873 answer.
at(3, 6) = z1 *
z2;
875 answer.
at(4, 1) = 2. * y1 *
z1;
876 answer.
at(4, 2) = 2. * y2 *
z2;
877 answer.
at(4, 3) = 2. * y3 *
z3;
878 answer.
at(4, 4) = ( y2 * z3 + y3 *
z2 );
879 answer.
at(4, 5) = ( y1 * z3 + y3 *
z1 );
880 answer.
at(4, 6) = ( y1 * z2 + y2 *
z1 );
882 answer.
at(5, 1) = 2. * x1 *
z1;
883 answer.
at(5, 2) = 2. * x2 *
z2;
884 answer.
at(5, 3) = 2. * x3 *
z3;
885 answer.
at(5, 4) = ( x2 * z3 + x3 *
z2 );
886 answer.
at(5, 5) = ( x1 * z3 + x3 *
z1 );
887 answer.
at(5, 6) = ( x1 * z2 + x2 *
z1 );
889 answer.
at(6, 1) = 2. * x1 *
y1;
890 answer.
at(6, 2) = 2. * x2 *
y2;
891 answer.
at(6, 3) = 2. * x3 *
y3;
892 answer.
at(6, 4) = ( x2 * y3 + x3 *
y2 );
893 answer.
at(6, 5) = ( x1 * y3 + x3 *
y1 );
894 answer.
at(6, 6) = ( x1 * y2 + x2 *
y1 );
904 for (
int i = 1; i <= 3; i++ ) {
905 answer.
at(i, i) = 1.;
908 for (
int i = 4; i <= 6; i++ ) {
909 answer.
at(i, i) = 0.5;
920 answer.
at(1, 1) =
x1 *
x1;
921 answer.
at(1, 2) =
x2 *
x2;
922 answer.
at(1, 3) =
x3 *
x3;
923 answer.
at(1, 4) = 2 * x2 *
x3;
924 answer.
at(1, 5) = 2 * x1 *
x3;
925 answer.
at(1, 6) = 2 * x1 *
x2;
927 answer.
at(2, 1) =
y1 *
y1;
928 answer.
at(2, 2) =
y2 *
y2;
929 answer.
at(2, 3) =
y3 *
y3;
930 answer.
at(2, 4) = 2 * y2 *
y3;
931 answer.
at(2, 5) = 2 * y1 *
y3;
932 answer.
at(2, 6) = 2 * y1 *
y2;
934 answer.
at(3, 1) =
z1 *
z1;
935 answer.
at(3, 2) =
z2 *
z2;
936 answer.
at(3, 3) =
z3 *
z3;
937 answer.
at(3, 4) = 2 * z2 *
z3;
938 answer.
at(3, 5) = 2 * z1 *
z3;
939 answer.
at(3, 6) = 2 * z1 *
z2;
941 answer.
at(4, 1) = y1 *
z1;
942 answer.
at(4, 2) = y2 *
z2;
943 answer.
at(4, 3) = y3 *
z3;
944 answer.
at(4, 4) = ( y2 * z3 + y3 *
z2 );
945 answer.
at(4, 5) = ( y1 * z3 + y3 *
z1 );
946 answer.
at(4, 6) = ( y1 * z2 + y2 *
z1 );
948 answer.
at(5, 1) = x1 *
z1;
949 answer.
at(5, 2) = x2 *
z2;
950 answer.
at(5, 3) = x3 *
z3;
951 answer.
at(5, 4) = ( x2 * z3 + x3 *
z2 );
952 answer.
at(5, 5) = ( x1 * z3 + x3 *
z1 );
953 answer.
at(5, 6) = ( x1 * z2 + x2 *
z1 );
955 answer.
at(6, 1) = x1 *
y1;
956 answer.
at(6, 2) = x2 *
y2;
957 answer.
at(6, 3) = x3 *
y3;
958 answer.
at(6, 4) = ( x2 * y3 + x3 *
y2 );
959 answer.
at(6, 5) = ( x1 * y3 + x3 *
y1 );
960 answer.
at(6, 6) = ( x1 * y2 + x2 *
y1 );
1066 if ( type == IST_DamageScalar ) {
1070 }
else if ( type == IST_PlasticStrainTensor ) {
1073 }
else if ( type == IST_MaxEquivalentStrainLevel ) {
1077 }
else if ( type == IST_BoneVolumeFraction ) {
1081 }
else if ( type == IST_PlasStrainEnerDens ) {
1085 }
else if ( type == IST_ElasStrainEnerDens ) {
1089 }
else if ( type == IST_TotalStrainEnerDens ) {
1227 fprintf(file,
"status { ");
1229 fprintf(file,
" , kappa %f , dam %f , esed %f , psed %f , tsed %f ", this->
tempKappa, this->
tempDam, this->
tempTSED - this->
tempPSED, this->
tempPSED, this->
tempTSED);
1230 fprintf(file,
"}\n");
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
void constructDerivativeOfPlasFlowDirec(FloatMatrix &answer, FloatMatrix &fabric, FloatArray &F, FloatArray &S)
void computeDensificationStress(FloatArray &answer, GaussPoint *gp, const FloatArray &totalStrain, TimeStep *tStep)
TrabBone3DStatus(int n, Domain *d, GaussPoint *g)
#define _IFT_TrabBone3D_tau0
GaussPoint * gp
Associated integration point.
const FloatArray & giveTempEffectiveStress() const
#define _IFT_TrabBone3D_expDam
void setTempPSED(double pse)
#define _IFT_TrabBone3D_eps0
void performPlasticityReturn(GaussPoint *gp, const FloatArray &totalStrain, TimeStep *tStep)
double evaluateCurrentPlasticModulus(const double kappa)
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
contextIOResultType storeYourself(DataStream &stream) const
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
double & at(int i)
Coefficient access function.
double evaluateCurrentViscousModulus(const double deltaKappa, TimeStep *tStep)
double evaluateCurrentYieldStress(const double kappa)
This class implements a structural material status information.
#define _IFT_TrabBone3D_y1
#define _IFT_TrabBone3D_sig0Neg
void setTempKappa(double al)
#define _IFT_TrabBone3D_x2
double computeDamage(GaussPoint *gp, TimeStep *tStep)
void constructAnisoComplTensor(FloatMatrix &answer)
Construct anisotropic compliance tensor.
double evaluateCurrentViscousStress(const double deltaKappa, TimeStep *tStep)
#define _IFT_TrabBone3D_expPlasHard
#define _IFT_TrabBone3D_nu0
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
virtual int read(int *data, int count)=0
Reads count integer values into array pointed by data.
MatResponseMode
Describes the character of characteristic material matrix.
#define _IFT_TrabBone3D_expl
void constructNormAdjustTensor(FloatMatrix &answer)
Construct Tensor to adjust Norm.
void setSSaTensor(FloatMatrix &ssa)
virtual void giveRealStressVector_3d(FloatArray &answer, GaussPoint *, const FloatArray &, TimeStep *)
Default implementation relies on giveRealStressVector for second Piola-Kirchoff stress.
void setTempTSED(double tse)
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
Sets receiver to be a - b.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
double giveTimeIncrement()
Returns solution step associated time increment.
#define _IFT_TrabBone3D_chi0Pos
virtual int write(const int *data, int count)=0
Writes count integer values from array pointed by data.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
void setSmtrx(FloatMatrix &smt)
void constructPlasFlowDirec(FloatArray &answer, double &norm, FloatMatrix &fabric, FloatArray &F, FloatArray &S)
double dotProduct(const FloatArray &x) const
Computes the dot product (or inner product) of receiver and argument.
#define _IFT_TrabBone3D_plasHardFactor
const FloatArray & giveTempPlasDef() const
void setPlasFlowDirec(FloatArray &pfd)
#define _IFT_TrabBone3D_strain_tol
double x1
Local coordinate system.
void times(double f)
Multiplies receiver by factor f.
#define _IFT_TrabBone3D_expk
double computeDamageParam(double kappa)
#define _IFT_TrabBone3D_m2
contextIOResultType restoreYourself(DataStream &stream)
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
#define _IFT_TrabBone3D_expq
#define _IFT_TrabBone3D_critDam
#define _IFT_TrabBone3D_x1
virtual double predictRelativeComputationalCost(GaussPoint *gp)
Returns the weight representing relative computational cost of receiver The reference material model ...
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix^T and anArray.
double at(int i, int j) const
Coefficient access function.
void computePlasStrainEnerDensity(GaussPoint *gp, const FloatArray &totalStrain, const FloatArray &totalStress)
double computeDamageParamPrime(double kappa)
void constructStiffnessTransformationMatrix(FloatMatrix &answer)
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
bool projectOnYieldSurface(double &tempKappa, FloatArray &tempEffectiveStress, FloatArray &tempPlasDef, const FloatArray &trialEffectiveStress, const FloatMatrix &elasticity, const FloatMatrix &compliance, TrabBone3DStatus *status, TimeStep *tStep, GaussPoint *gp, int lineSearchFlag)
#define _IFT_TrabBone3D_expp
virtual void updateYourself(TimeStep *)
Update equilibrium history variables according to temp-variables.
void setTempDam(double da)
Abstract base class representing a material status information.
double gammaL0
Densificator properties.
#define _IFT_TrabBone3D_rho
virtual ~TrabBone3DStatus()
Class representing vector of real numbers.
virtual void give3dMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode, GaussPoint *gp, TimeStep *tStep)
Computes full 3d material stiffness matrix at given integration point, time, respecting load history ...
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
#define _IFT_TrabBone3D_max_num_iter
virtual void computeCumPlastStrain(double &kappa, GaussPoint *gp, TimeStep *tStep)
Implementation of matrix containing floating point numbers.
IRResultType
Type defining the return values of InputRecord reading operations.
const FloatArray & givePlasFlowDirec() const
const FloatArray & givePlasDef() const
TrabBone3D(int n, Domain *d)
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
void setTempPlasDef(FloatArray &epsip)
double norm(const FloatArray &x)
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
const FloatMatrix & giveSSaTensor() const
void setTempEffectiveStress(FloatArray &sc)
void add(const FloatMatrix &a)
Adds matrix to the receiver.
void zero()
Zeroes all coefficients of receiver.
void beDyadicProductOf(const FloatArray &vec1, const FloatArray &vec2)
Assigns to the receiver the dyadic product .
void beTProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
void times(double s)
Multiplies receiver with scalar.
FloatMatrix tangentMatrix
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
Abstract base class for all "structural" constitutive models.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
This class implements associated Material Status to TrabBone3D (trabecular bone material).
void zero()
Zeroes all coefficient of receiver.
void constructAnisoFtensor(FloatArray &answer)
void constructFabricTransformationMatrix(FloatMatrix &answer)
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
virtual MaterialStatus * CreateStatus(GaussPoint *gp) const
Creates new copy of associated status and inserts it into given integration point.
Domain * giveDomain() const
#define _IFT_TrabBone3D_y3
double densG
Densificator criterion.
#define _IFT_TrabBone3D_printflag
#define _IFT_TrabBone3D_mu0
virtual double predictRelativeRedistributionCost(GaussPoint *gp)
Returns the relative redistribution cost of the receiver.
void constructAnisoFabricTensor(FloatMatrix &answer)
Construct anisotropic fabric tensor.
#define _IFT_TrabBone3D_rel_yield_tol
REGISTER_Material(DummyMaterial)
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
void constructAnisoStiffnessTensor(FloatMatrix &answer)
Construct anisotropic stiffness tensor.
double viscosity
Viscosity parameter.
const FloatArray & giveTempStressVector() const
Returns the const pointer to receiver's temporary stress vector.
int giveSize() const
Returns the size of receiver.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
the oofem namespace is to define a context or scope in which all oofem names are defined.
FloatArray tempEffectiveStress
virtual void initTempStatus(GaussPoint *gp)
Initializes temporary variables stored in integration point status at the beginning of new time step...
void beInverseOf(const FloatMatrix &src)
Modifies receiver to become inverse of given parameter.
#define _IFT_TrabBone3D_x3
#define _IFT_TrabBone3D_m1
const FloatArray & giveStrainVector() const
Returns the const pointer to receiver's strain vector.
#define _IFT_TrabBone3D_y2
#define _IFT_TrabBone3D_sig0Pos
Class representing integration point in finite element program.
Class representing solution step.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
void add(const FloatArray &src)
Adds array src to receiver.
double evaluatePlasCriterion(FloatMatrix &fabric, FloatArray &F, FloatArray &stress, double kappa, double deltaKappa, TimeStep *tStep)
void resize(int s)
Resizes receiver towards requested size.
#define _IFT_TrabBone3D_viscosity
FloatArray effectiveStress