60 if ( ! Material :: isActivated( tStep ) ) {
61 OOFEM_ERROR(
"Attempted to evaluate E modulus at time lower than casting time");
65 #pragma omp critical (KelvinChainSolidMaterial_EModulus)
68 if ( this->
EparVal.isEmpty() ) {
72 for (
int mu = 1; mu <=
nUnits; mu++ ) {
75 sum += ( 1 - lambdaMu ) / Emu;
92 if ( ! Material :: isActivated( tStep ) ) {
93 OOFEM_ERROR(
"Attempted to evaluate creep strain for time lower than casting time");
96 if ( this->
EparVal.isEmpty() ) {
100 if ( mode == VM_Incremental ) {
101 FloatArray *sigmaVMu =
nullptr, reducedAnswer;
102 for (
int mu = 1; mu <=
nUnits; mu++ ) {
107 reducedAnswer.add(( 1.0 - betaMu ) / this->
giveEparModulus(mu), * sigmaVMu);
115 reducedAnswer.beProductOf(C, help);
117 reducedAnswer.times(1. / v);
120 answer = reducedAnswer;
133 if ( deltaT / tauMu > 30 ) {
136 return exp(-( deltaT ) / tauMu);
146 if ( deltaT / tauMu < 1.e-5 ) {
147 return 1 - 0.5 * ( deltaT / tauMu ) + 1 / 6 * ( pow(deltaT / tauMu, 2) ) - 1 / 24 * ( pow(deltaT / tauMu, 3) );
148 }
else if ( deltaT / tauMu > 30 ) {
149 return tauMu / deltaT;
151 return ( 1.0 - exp(-( deltaT ) / tauMu) ) * tauMu / deltaT;
159 RheoChainMaterial :: giveRealStressVector(answer, gp, reducedStrain, tStep);
180 if ( ! Material :: isActivated( tStep ) ) {
183 for (
int mu = 1; mu <=
nUnits; mu++ ) {
194 if ( deltaEps0.giveSize() ) {
204 for (
int mu = 1; mu <=
nUnits; mu++ ) {
209 help.
times(lambdaMu);
214 SigmaVMu.
times(betaMu);
224std::unique_ptr<MaterialStatus>
225KelvinChainSolidMaterial :: CreateStatus(
GaussPoint *gp)
const
230 return std::make_unique<KelvinChainSolidMaterialStatus>(gp,
nUnits);
236 RheoChainMaterial :: initializeFrom(ir);
241KelvinChainSolidMaterial :: computeCreepFunction(
double t,
double t_prime,
GaussPoint *gp,
TimeStep *tStep)
const
243 OOFEM_ERROR(
"function has not been yet implemented to KelvinChainSolidMaterialStatus.C");
249KelvinChainSolidMaterialStatus :: KelvinChainSolidMaterialStatus(
GaussPoint *g,
int nunits) :
253KelvinChainSolidMaterialStatus :: printOutputAt(FILE *file,
TimeStep *tStep)
const
255 RheoChainMaterialStatus :: printOutputAt(file, tStep);
260KelvinChainSolidMaterialStatus :: updateYourself(
TimeStep *tStep)
262 RheoChainMaterialStatus :: updateYourself(tStep);
266KelvinChainSolidMaterialStatus :: initTempStatus()
268 RheoChainMaterialStatus :: initTempStatus();
274 RheoChainMaterialStatus :: saveContext(stream, mode);
280 RheoChainMaterialStatus :: restoreContext(stream, mode);
Index giveSize() const
Returns the size of receiver.
void zero()
Zeroes all coefficients of receiver.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
void add(const FloatArray &src)
void subtract(const FloatArray &src)
bool isNotEmpty() const
Returns true if receiver is not empty.
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
virtual double computeLambdaMu(GaussPoint *gp, TimeStep *tStep, int Mu) const
void computeHiddenVars(GaussPoint *gp, TimeStep *tStep) const
virtual double computeBetaMu(GaussPoint *gp, TimeStep *tStep, int Mu) const
factors for exponential algorithm
double giveEModulus(GaussPoint *gp, TimeStep *tStep) const override
Evaluation of the incremental modulus.
virtual double computeSolidifiedVolume(GaussPoint *gp, TimeStep *tStep) const =0
Evaluation of the relative volume of the solidified material.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
RheoChainMaterialStatus(GaussPoint *g, int nunits)
FloatArray & giveHiddenVarsVector(int i)
void letTempHiddenVarsVectorBe(int i, FloatArray &valueArray)
int nUnits
Number of (Maxwell or Kelvin) units in the rheologic chain.
void giveUnitStiffnessMatrix(FloatMatrix &answer, GaussPoint *gp, TimeStep *tStep) const
Evaluation of elastic stiffness matrix for unit Young's modulus.
double giveCharTime(int) const
Access to the characteristic time of a given unit.
FloatArray EparVal
Partial moduli of individual units.
void giveUnitComplianceMatrix(FloatMatrix &answer, GaussPoint *gp, TimeStep *tStep) const
Evaluation of elastic compliance matrix for unit Young's modulus.
RheoChainMaterial(int n, Domain *d)
double giveEparModulus(int iChain) const
Access to partial modulus of a given unit.
virtual void updateEparModuli(double tPrime, GaussPoint *gp, TimeStep *tStep) const
Update of partial moduli of individual chain units.
FloatArray computeStressIndependentStrainVector(GaussPoint *gp, TimeStep *tStep, ValueModeType mode) const override
const FloatArray & giveStrainVector() const
Returns the const pointer to receiver's strain vector.
const FloatArray & giveTempStrainVector() const
Returns the const pointer to receiver's temporary strain vector.
double giveTimeIncrement()
Returns solution step associated time increment.
double sum(const FloatArray &x)