55 return mode == _1dMat;
70 if ( reinfClass == 1 ) {
74 }
else if ( reinfClass == 2 ) {
78 }
else if ( reinfClass == 3 ) {
112std::unique_ptr<MaterialStatus>
115 return std::make_unique<SteelRelaxMatStatus>(gp);
124 FloatArray reducedStrain, strainIncrement, stressVector;
125 double stressIncrement;
142 double lossIncrement;
154 stressIncrement = strainIncrement.
at(1) * this->
E;
156 stressVector.
at(1) += stressIncrement;
158 if ( stressVector.
at(1) > 0. ) {
160 stressVector.
at(1) -= lossIncrement;
166 double prevIterTempStress;
183 stressIncrement = strainIncrement.
at(1) * this->
E;
185 stressVector.
at(1) += stressIncrement;
201 OOFEM_WARNING(
"Criterion of the algorithm reached in %d iterations, consider increasing tolerance", i);
205 if ( stressVector.
at(1) > this->charStrength ) {
206 OOFEM_ERROR(
"Stress %f exeeds the characteristic strength of the material!", stressVector.
at(1) );
210 answer.
at(1) = stressVector.
at(1);
239 answer = temperatureFreeStrain;
260 mu = prestress / this->charStrength;
263 k = 0.75 * ( 1. -
mu );
266 answer = prestress * rho * pow( ( dt / lambda ), k);
279 double lossesUpTillNow;
286 prestress = stress + lossesUpTillNow;
292 mu = prestress / this->charStrength;
294 k = 0.75 * ( 1. -
mu );
299 t_equiv = pow( ( lossesUpTillNow / ( prestress * rho ) ), ( 1. / k ) ) * lambda;
306 answer = loss - lossesUpTillNow;
316 double averageStress = 0.;
318 double k, rho, lambda;
345 double averageMechStrain = averageRelaxationStrain + averageStress / this->
E;
347 double F = averageMechStrain * this->
E;
349 double relaxStrainIncrement;
356 relaxStrainIncrement /= this->E;
372 relaxStrainIncrement = 0.;
377 mu = prestress / this->charStrength;
379 k = 0.75 * ( 1. -
mu );
381 relaxStrainIncrement = k * pow(rho, 1. / k) * F * dt;
382 relaxStrainIncrement /= this->E * lambda * pow( ( 1. - averageStress / F ), 1. / k - 1.);
390 if ( mode == VM_Incremental ) {
391 answer.
at(1) = relaxStrainIncrement;
417 fprintf(file,
" relaxationInternalVariable ");
421 fprintf(file,
" prestress ");
#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.
Index giveSize() const
Returns the size of receiver.
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
void zero()
Zeroes all coefficients of receiver.
void subtract(const FloatArray &src)
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
virtual bool isActivated(TimeStep *tStep) const
void initTempStatus() override
double tempRelaxIntVariable
double giveTempPrestress() const
double giveRelaxIntVariable() const
void setTempPrestress(double src)
double givePrestress() const
double giveTempRelaxIntVariable() const
void printOutputAt(FILE *file, TimeStep *tStep) const override
Print receiver's output to given stream.
void saveContext(DataStream &stream, ContextMode mode) override
void restoreContext(DataStream &stream, ContextMode mode) override
SteelRelaxMatStatus(GaussPoint *g)
void setTempRelaxIntVariable(double src)
void updateYourself(TimeStep *tStep) override
double k1
constant depending on the reinforcement class
double tolerance
tolerance specifying the residual in the stress evaluation algorithm, default value is $10^{-6}...
double rho1000
constant depending on the reinforcement class
FloatMatrixF< 1, 1 > give1dStressStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
void evalStressRelaxationAtConstStrain(double &answer, GaussPoint *gp, double dt) const
void giveStressDependentPartOfStrainVector(FloatArray &answer, GaussPoint *gp, const FloatArray &totalStrain, TimeStep *tStep, ValueModeType mode) const
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
SteelRelaxMat(int n, Domain *d)
void computeStressRelaxationStrainVector(FloatArray &answer, GaussPoint *gp, const FloatArray &totalStrain, TimeStep *tStep, ValueModeType mode) const
double mu
ratio of prestress vs. characteristic strength
bool hasMaterialModeCapability(MaterialMode mode) const override
enum oofem::SteelRelaxMat::approachType Approach
double k2
constant depending on the reinforcement class
void initializeFrom(InputRecord &ir) override
void computeIncrOfPrestressLossAtVarStrain(double &answer, GaussPoint *gp, TimeStep *tStep, double stress) const
void giveRealStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep) const override
std::unique_ptr< MaterialStatus > CreateStatus(GaussPoint *gp) const override
double charStrength
characteristic strength of prestressing steel in appropriate units (not necessarily MPa)
const FloatArray & giveStrainVector() const
Returns the const pointer to receiver's strain vector.
const FloatArray & giveTempStressVector() const
Returns the const pointer to receiver's temporary stress vector.
void initTempStatus() override
void printOutputAt(FILE *file, TimeStep *tStep) const override
Print receiver's output to given stream.
void saveContext(DataStream &stream, ContextMode mode) override
StructuralMaterialStatus(GaussPoint *g)
Constructor. Creates new StructuralMaterialStatus with IntegrationPoint g.
void updateYourself(TimeStep *tStep) override
const FloatArray & giveStressVector() const
Returns the const pointer to receiver's stress vector.
void restoreContext(DataStream &stream, ContextMode mode) override
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
void initializeFrom(InputRecord &ir) override
StructuralMaterial(int n, Domain *d)
void giveStressDependentPartOfStrainVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrainVector, TimeStep *tStep, ValueModeType mode) const
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
double giveTimeIncrement()
Returns solution step associated time increment.
#define OOFEM_WARNING(...)
@ CIO_IOERR
General IO error.
#define _IFT_SteelRelaxMat_rho1000
#define _IFT_SteelRelaxMat_k2
#define _IFT_SteelRelaxMat_timeFactor
#define _IFT_SteelRelaxMat_charStrength
#define _IFT_SteelRelaxMat_approach
#define _IFT_SteelRelaxMat_relRelaxBound
#define _IFT_SteelRelaxMat_k1
#define _IFT_SteelRelaxMat_E
#define _IFT_SteelRelaxMat_tolerance
#define _IFT_SteelRelaxMat_reinfClass