72 return mode == _1dMat;
95 if ( reinfClass == 1 ) {
99 }
else if ( reinfClass == 2 ) {
103 }
else if ( reinfClass == 3 ) {
157 FloatArray reducedStrain, strainIncrement, stressVector;
158 double stressIncrement;
175 double lossIncrement;
180 stressIncrement = strainIncrement.
at(1) * this->
E;
192 stressVector.
at(1) += stressIncrement;
194 if ( stressVector.
at(1) > 0. ) {
196 stressVector.
at(1) -= lossIncrement;
202 double prevIterTempStress;
219 stressIncrement = strainIncrement.
at(1) * this->
E;
221 stressVector.
at(1) += stressIncrement;
237 OOFEM_WARNING(
"Criterion of the algorithm reached in %d iterations, consider increasing tolerance", i);
242 OOFEM_ERROR(
"Stress %f exeeds the characteristic strength of the material!", stressVector.
at(1) );
246 answer.
at(1) = stressVector.
at(1);
259 answer.
at(1, 1) = this->
E;
278 answer = temperatureFreeStrain;
302 rho = this->
k1 * this->
rho1000 * exp(this->
k2 * mu) * 1.e-5;
303 k = 0.75 * ( 1. -
mu );
306 answer = prestress * rho * pow( ( dt / lambda ), k );
319 double lossesUpTillNow;
326 prestress = stress + lossesUpTillNow;
333 rho = this->
k1 * this->
rho1000 * exp(this->
k2 * mu) * 1.e-5;
334 k = 0.75 * ( 1. -
mu );
340 t_equiv = pow( ( lossesUpTillNow / ( prestress * rho ) ), ( 1. / k ) ) * lambda;
348 loss -= lossesUpTillNow;
367 double averageStress = 0.;
371 double k, rho, lambda;
375 FloatArray temperFreeStrain, temperFreeStrainIncrement;
378 double averageMechStrain = temperFreeStrain.
at(1);
383 if ( prestress > 0. ) {
384 temperFreeStrainIncrement = totalStrain;
391 temperFreeStrainIncrement.
subtract(deltaEpsTemperature);
393 averageMechStrain -= 0.5 * temperFreeStrainIncrement.
at(1);
396 double F = averageMechStrain * this->
E;
399 if ( prestress == 0. ) {
404 double relaxStrainIncrement;
411 relaxStrainIncrement /= this->
E;
441 relaxStrainIncrement = 0.;
445 rho = this->
k1 * this->
rho1000 * exp(this->
k2 * mu) * 1.e-5;
446 k = 0.75 * ( 1. -
mu );
448 relaxStrainIncrement = k * pow(rho, 1. / k) * F * dt;
449 relaxStrainIncrement /= this->E * lambda * pow( ( 1. - averageStress / F ), 1. / k - 1. );
457 if ( mode == VM_Incremental ) {
458 answer.
at(1) = relaxStrainIncrement;
489 fprintf(file,
" relaxationInternalVariable ");
493 fprintf(file,
" initialPrestress ");
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.
enum oofem::SteelRelaxMat::approachType Approach
#define _IFT_SteelRelaxMat_reinfClass
void subtract(const FloatArray &src)
Subtracts array src to receiver.
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
double k2
constant depending on the reinforcement class
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
void computeStressRelaxationStrainVector(FloatArray &answer, GaussPoint *gp, const FloatArray &totalStrain, TimeStep *tStep, ValueModeType mode)
evaluates eigenstrain due to steel relaxation
virtual int hasMaterialModeCapability(MaterialMode mode)
Tests if material supports material mode.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given 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 setTempRelaxIntVariable(double src)
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
double rho1000
constant depending on the reinforcement class
double & at(int i)
Coefficient access function.
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
#define _IFT_SteelRelaxMat_k1
This class implements a structural material status information.
double mu
ratio of prestress vs. characteristic strength
double E
Young's modulus.
void giveStressDependentPartOfStrainVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrainVector, TimeStep *tStep, ValueModeType mode)
Method for subtracting from reduced space strain vector its stress-independent parts (caused by tempe...
MaterialMode
Type representing material mode of integration point.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in 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.
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
Sets receiver to be a - b.
double giveTimeIncrement()
Returns solution step associated time increment.
#define _IFT_SteelRelaxMat_timeFactor
virtual void give1dStressStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Method for computing 1d stiffness matrix of receiver.
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.
#define _IFT_SteelRelaxMat_relRelaxBound
double charStrength
characteristic strength of prestressing steel in appropriate units (not necessarily MPa) ...
#define _IFT_SteelRelaxMat_charStrength
double relRelaxBound
Ratio of stress to characteristic strength under which the relaxation is zero (typically 0...
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
#define _IFT_SteelRelaxMat_k2
double tolerance
tolerance specifying the residual in the stress evaluation algorithm, default value is $10^{-6}$ ...
virtual void giveStressDependentPartOfStrainVector(FloatArray &answer, GaussPoint *gp, const FloatArray &totalStrain, TimeStep *tStep, ValueModeType mode)
evaluates stress-related strain - subtracts not only temperature strains but also strains caused by s...
#define _IFT_SteelRelaxMat_tolerance
#define _IFT_SteelRelaxMat_rho1000
approachType
0 = approach according to Ba{z}ant and Yu, 1 = equivalent time approach according to Eurocode 2 and {...
double at(int i, int j) const
Coefficient access function.
SteelRelaxMatStatus(int n, Domain *d, GaussPoint *g)
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
Abstract base class representing a material status information.
virtual MaterialStatus * CreateStatus(GaussPoint *gp) const
Creates new copy of associated status and inserts it into given integration point.
Class representing vector of real numbers.
double timeFactor
Scaling factor transforming the actual time into appropriate units needed by the formulae of the euro...
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.
const FloatArray & giveStressVector() const
Returns the const pointer to receiver's stress vector.
void evalStressRelaxationAtConstStrain(double &answer, GaussPoint *gp, double dt)
computes steel relaxation (eurocode formula)
#define _IFT_SteelRelaxMat_approach
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
double tempRelaxIntVariable
double relaxIntVariable
For Bazant's approach this internal variable is a cumulative viscous strain while for Eurocode approa...
virtual ~SteelRelaxMatStatus()
void zero()
Zeroes all coefficients of receiver.
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
Abstract base class for all "structural" constitutive models.
#define _IFT_SteelRelaxMat_E
virtual bool isActivated(TimeStep *tStep)
void zero()
Zeroes all coefficient of receiver.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
Domain * giveDomain() const
double giveRelaxIntVariable(void)
REGISTER_Material(DummyMaterial)
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
const FloatArray & giveTempStressVector() const
Returns the const pointer to receiver's temporary stress vector.
int giveSize() const
Returns the size of receiver.
double givePrestress(void)
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 computeIncrOfPrestressLossAtVarStrain(double &answer, GaussPoint *gp, TimeStep *tStep, double stress)
implementation of cumulative time approach according to Eurocode to get prestress loss at variable st...
const FloatArray & giveStrainVector() const
Returns the const pointer to receiver's strain vector.
SteelRelaxMat(int n, Domain *d)
Class representing integration point in finite element program.
#define OOFEM_WARNING(...)
Class representing solution step.
double k1
constant depending on the reinforcement class
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
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...
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
void setPrestress(double src)
void resize(int s)
Resizes receiver towards requested size.