66 FloatArray discreteComplianceFunctionVal(rSize);
71 for (
int i = 1; i <= rSize; i++ ) {
78 for (
int i = 1; i <= this->
nUnits; i++ ) {
80 for (
int j = 1; j <= this->
nUnits; j++ ) {
83 for (
int r = 1; r <= rSize; r++ ) {
84 double tti = rTimes.
at(r) / taui;
85 double ttj = rTimes.
at(r) / tauj;
86 sum += ( 1. - exp(-tti) ) * ( 1. - exp(-ttj) );
95 for (
int r = 1; r <= rSize; r++ ) {
96 double tti = rTimes.
at(r) / taui;
97 sumRhs += ( 1. - exp(-tti) ) * discreteComplianceFunctionVal.
at(r);
107 for (
int i = 1; i <= this->
nUnits; i++ ) {
108 answer.
at(i) = 1. / answer.
at(i);
126 OOFEM_ERROR(
"Attempted to evaluate E modulus at time lower than casting time");
136 for (
int mu = 1; mu <=
nUnits; mu++ ) {
139 if ( deltaT / tauMu < 1.e-5 ) {
140 lambdaMu = 1 - 0.5 * ( deltaT / tauMu ) + 1 / 6 * ( pow(deltaT / tauMu, 2) ) - 1 / 24 * ( pow(deltaT / tauMu, 3) );
141 }
else if ( deltaT / tauMu > 30 ) {
142 lambdaMu = tauMu / deltaT;
144 lambdaMu = ( 1.0 - exp(-deltaT / tauMu) ) * tauMu / deltaT;
148 sum += ( 1 - lambdaMu ) / Dmu;
169 OOFEM_ERROR(
"Attempted to evaluate creep strain for time lower than casting time");
172 if ( mode == VM_Incremental ) {
175 for (
int mu = 1; mu <=
nUnits; mu++ ) {
185 reducedAnswer.
add(1.0 - beta, * gamma);
189 answer = reducedAnswer;
221 for (
int mu = 1; mu <=
nUnits; mu++ ) {
241 for (
int mu = 1; mu <=
nUnits; mu++ ) {
247 if ( deltaT / tauMu < 1.e-5 ) {
248 betaMu = exp(-( deltaT ) / tauMu);
249 lambdaMu = 1 - 0.5 * ( deltaT / tauMu ) + 1 / 6 * ( pow(deltaT / tauMu, 2) ) - 1 / 24 * ( pow(deltaT / tauMu, 3) );
250 }
else if ( deltaT / tauMu > 30 ) {
252 lambdaMu = tauMu / deltaT;
254 betaMu = exp(-( deltaT ) / tauMu);
255 lambdaMu = ( 1.0 - betaMu ) * tauMu / deltaT;
261 if ( muthHiddenVarsVector.
giveSize() ) {
262 muthHiddenVarsVector.
times(betaMu);
263 muthHiddenVarsVector.
add(help);
282 if ( result !=
IRRT_OK )
return result;
static int giveSizeOfVoigtSymVector(MaterialMode mmode)
Returns the size of symmetric part of a reduced stress/strain vector according to given mode...
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
double relMatAge
Physical age of the material at simulation time = 0.
void subtract(const FloatArray &src)
Subtracts array src to receiver.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
double giveCharTime(int) const
Access to the characteristic time of a given unit.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
bool solveForRhs(const FloatArray &b, FloatArray &answer, bool transpose=false)
Solves the system of linear equations .
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
virtual 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...
KelvinChainMaterial(int n, Domain *d)
double & at(int i)
Coefficient access function.
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
virtual void giveRealStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
Computes the real stress vector for given total strain and integration point.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
This class implements associated Material Status to RheoChainMaterial.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
double giveTargetTime()
Returns target time.
virtual double computeCreepFunction(double t, double t_prime, GaussPoint *gp, TimeStep *tStep)=0
Evaluation of the creep compliance function at time t when loading is acting from time t_prime...
This class implements a rheologic chain model describing a viscoelastic material. ...
virtual double giveEModulus(GaussPoint *gp, TimeStep *tStep)
Evaluation of the incremental modulus.
const FloatArray & giveDiscreteTimes()
void computeHiddenVars(GaussPoint *gp, TimeStep *tStep)
double giveEparModulus(int iChain)
Access to partial modulus of a given unit.
void letTempHiddenVarsVectorBe(int i, FloatArray &valueArray)
double giveTimeIncrement()
Returns solution step associated time increment.
virtual void computeCharCoefficients(FloatArray &answer, double tPrime, GaussPoint *gp, TimeStep *tStep)
Evaluation of the moduli of individual units.
virtual void giveEigenStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep, ValueModeType mode)
Computes, for the given integration point, the strain vector induced by the stress history (typically...
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
const FloatArray & giveTempStrainVector() const
Returns the const pointer to receiver's temporary strain vector.
This class implements associated Material Status to KelvinChainMaterial.
double at(int i, int j) const
Coefficient access function.
double giveIntrinsicTime()
Returns intrinsic time, e.g. time in which constitutive model is evaluated.
FloatArray & giveHiddenVarsVector(int i)
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
Abstract base class representing a material status information.
virtual void updateEparModuli(double tPrime, GaussPoint *gp, TimeStep *tStep)
Update of partial moduli of individual chain units.
Class representing vector of real numbers.
Implementation of matrix containing floating point numbers.
virtual MaterialStatus * CreateStatus(GaussPoint *gp) const
Creates new copy of associated status and inserts it into given integration point.
KelvinChainMaterialStatus(int n, Domain *d, GaussPoint *g, int nunits)
virtual void computeStressIndependentStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep, ValueModeType mode)
Computes reduced strain vector in given integration point, generated by internal processes in materia...
IRResultType
Type defining the return values of InputRecord reading operations.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
virtual void giveRealStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
Computes the real stress vector for given total strain and integration point.
void zero()
Zeroes all coefficients of receiver.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
void times(double s)
Multiplies receiver with scalar.
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Domain * giveDomain() const
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
double castingTime
Casting time.
int giveSize() const
Returns the size of receiver.
the oofem namespace is to define a context or scope in which all oofem names are defined.
const FloatArray & giveStrainVector() const
Returns the const pointer to receiver's strain vector.
int nUnits
Number of (Maxwell or Kelvin) units in the rheologic chain.
Class representing integration point in finite element program.
Class representing solution step.
void add(const FloatArray &src)
Adds array src to receiver.
void resize(int s)
Resizes receiver towards requested size.