38 #include "../sm/Materials/structuralmaterial.h" 53 return mode == _1dMat;
77 if ( mode == ElasticStiffness ) {
80 }
else if ( mode == SecantStiffness ) {
85 answer.
at(1, 1) = ( 1.0 - dam ) *
E0 + matconstc;
101 -
E0 *
E0 * ( epsnew - epsp ) / (
E0 +
Eil +
Ek ) *
adam * exp(-
adam * alpha) * depsp / fabs(depsp) + matconstc;
103 answer.
at(1, 1) = ( 1.0 - dam ) *
E0 + matconstc;
114 double epsnew, epsold;
118 double gNewton, dgNewton;
122 epsnew = totalStrain.
at(1);
126 sigp =
E0 * epsnew - (
E0 +
Ek ) * epsp;
134 if ( sigp / fabs(sigp) * sigp > sigY +
Eil * alpha +
Eie * ( 1 - exp(-
kie * alpha) ) ) {
135 depsp = epsnew - epsold;
136 gNewton = sigp / fabs(sigp) * (
E0 * epsnew - (
E0 +
Ek ) * ( epsp + depsp ) ) - ( sigY +
Eil * ( alpha +
137 sigp / fabs(sigp) * depsp ) +
Eie * ( 1 - exp( -
kie * ( alpha + sigp / fabs(sigp) * depsp ) ) ) );
138 while ( fabs(gNewton) > 10.e-7 ) {
139 gNewton = sigp / fabs(sigp) * (
E0 * epsnew - (
E0 +
Ek ) * ( epsp + depsp ) ) - ( sigY +
Eil * ( alpha +
140 sigp / fabs(sigp) * depsp ) +
Eie * ( 1 - exp( -
kie * ( alpha + sigp / fabs(sigp) * depsp ) ) ) );
141 dgNewton = -sigp / fabs(sigp) * ( (
E0 +
Ek ) +
Eil +
142 Eie *
kie * exp( -
kie * ( alpha + sigp / fabs(sigp) * depsp ) ) );
143 depsp += -gNewton / dgNewton;
151 alpha += fabs(depsp);
167 epsnew = totalStrain.
at(1);
169 if ( epsnew >
EpsC ) {
174 matconstc =
Cc + 7 *
Cc2 * ( epsnew -
EpsC ) * ( epsnew -
EpsC ) * ( epsnew -
EpsC ) * ( epsnew -
EpsC ) * ( epsnew -
EpsC ) * ( epsnew -
EpsC );
187 dam = 1.0 - exp(-
adam * alpha);
228 epsnew = totalStrain.
at(1);
236 sig = ( 1 - dam ) *
E0 * ( epsnew - epsp ) + sigc;
367 fprintf(file,
"status { ");
368 fprintf(file,
"plastrains %f, alpha %f, dam %f, Slope %f, Smtrx %f ", this->
tempEpsp.
at(1),
370 fprintf(file,
"}\n");
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
#define _IFT_TrabBoneMaterial_Eie
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
#define _IFT_TrabBoneMaterial_adam
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
#define _IFT_TrabBoneMaterial_Cc
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
const FloatArray & giveTempIncPlasStrainVector()
const FloatArray & giveTempPlasStrainVector()
GaussPoint * gp
Associated integration point.
void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
virtual ~TrabBoneMaterialStatus()
double & at(int i)
Coefficient access function.
void setTempDepsp(double depsip)
#define _IFT_TrabBoneMaterial_EpsC
This class implements a structural material status information.
virtual void computeCumPlastStrain(double &alpha, GaussPoint *gp, TimeStep *tStep)
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
#define _IFT_TrabBoneMaterial_kie
void setTempAlpha(double al)
TrabBoneMaterialStatus(int n, Domain *d, GaussPoint *g)
#define _IFT_TrabBoneMaterial_E0
virtual void give1dStressStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Method for computing 1d stiffness matrix of receiver.
MaterialMode
Type representing material mode of integration point.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
MatResponseMode
Describes the character of characteristic material matrix.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
#define _IFT_TrabBoneMaterial_SigYn
#define _IFT_TrabBoneMaterial_Cc2
This class implements associated Material Status to TrabBoneMaterial.
double computeDamageParam(double alpha, GaussPoint *gp)
const FloatArray & giveTempStrainVector() const
Returns the const pointer to receiver's temporary strain vector.
double at(int i, int j) const
Coefficient access function.
#define _IFT_TrabBoneMaterial_SigYp
void setMatConstC(double mcc)
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
virtual void giveRealStressVector_1d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
Default implementation relies on giveRealStressVector_StressControl.
void setTempEpsp(double epsip)
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
void performPlasticityReturn(GaussPoint *gp, const FloatArray &totalStrain)
Abstract base class representing a material status information.
Class representing vector of real numbers.
Implementation of matrix containing floating point numbers.
IRResultType
Type defining the return values of InputRecord reading operations.
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
TrabBoneMaterial(int n, Domain *d)
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
double computeDamage(GaussPoint *gp, TimeStep *tStep)
void setSmtrx(double smt)
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
Abstract base class for all "structural" constitutive models.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
Domain * giveDomain() const
void setTempDam(double da)
virtual MaterialStatus * CreateStatus(GaussPoint *gp) const
Creates new copy of associated status and inserts it into given integration point.
#define _IFT_TrabBoneMaterial_Eil
#define _IFT_TrabBoneMaterial_Ek
REGISTER_Material(DummyMaterial)
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.
void computeDensification(GaussPoint *gp, const FloatArray &totalStrain)
const FloatArray & givePlasStrainVector()
virtual void initTempStatus(GaussPoint *gp)
Initializes temporary variables stored in integration point status at the beginning of new time step...
const FloatArray & giveStrainVector() const
Returns the const pointer to receiver's strain vector.
Class representing integration point in finite element program.
Class representing solution step.
virtual int hasMaterialModeCapability(MaterialMode)
Tests if material supports material mode.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
void resize(int s)
Resizes receiver towards requested size.