49MaxwellChainMaterial :: computeCharCoefficients(
double tPrime,
GaussPoint *gp,
TimeStep *tStep)
const
70 for (
int i = 1; i <= this->
nUnits; i++ ) {
72 for (
int j = 1; j <= this->
nUnits; j++ ) {
75 for (
int r = 1; r <= rSize; r++ ) {
80 sum += exp(-tti - ttj);
88 for (
int r = 1; r <= rSize; r++ ) {
91 sumRhs += exp(-tti) * discreteRelaxFunctionVal.
at(r);
119 if ( ! Material :: isActivated( tStep ) ) {
120 OOFEM_ERROR(
"Attempted to evaluate E modulus at time lower than casting time");
125 #pragma omp critical (MaxwellChainMaterial_EModulus)
130 for (
int mu = 1; mu <=
nUnits; mu++ ) {
132 if ( deltaYmu <= 0.0 ) {
138 double lambdaMu = ( 1.0 - exp(-deltaYmu) ) / deltaYmu;
150MaxwellChainMaterial :: giveEigenStrainVector(
FloatArray &answer,
162 if ( ! Material :: isActivated( tStep ) ) {
163 OOFEM_ERROR(
"Attempted to evaluate creep strain for time lower than casting time");
166 if ( mode == VM_Incremental ) {
169 reducedAnswer.
zero();
171 for (
int mu = 1; mu <=
nUnits; mu++ ) {
179 help.
times( 1.0 - exp(-deltaYmu) );
180 reducedAnswer.
add(help);
186 reducedAnswer.
times(1.0 /
E);
188 answer = reducedAnswer;
199 RheoChainMaterial :: giveRealStressVector(answer, gp, reducedStrain, tStep);
221 if ( ! Material :: isActivated( tStep ) ) {
224 for (
int mu = 1; mu <=
nUnits; mu++ ) {
247 for (
int mu = 1; mu <=
nUnits; mu++ ) {
251 double lambdaMu = ( 1.0 - exp(-deltaYmu) ) / deltaYmu;
256 help.
times(lambdaMu * Emu);
257 if ( muthHiddenVarsVector.
giveSize() ) {
258 muthHiddenVarsVector.
times( exp(-deltaYmu) );
259 muthHiddenVarsVector.
add(help);
268std::unique_ptr<MaterialStatus>
271 return std::make_unique<MaxwellChainMaterialStatus>(gp,
nUnits);
278 RheoChainMaterial :: initializeFrom(ir);
283MaxwellChainMaterialStatus :: MaxwellChainMaterialStatus(
GaussPoint *g,
int nunits) :
288MaxwellChainMaterialStatus :: printOutputAt(FILE *file,
TimeStep *tStep)
const
290 RheoChainMaterialStatus :: printOutputAt(file, tStep);
295MaxwellChainMaterialStatus :: updateYourself(
TimeStep *tStep)
297 RheoChainMaterialStatus :: updateYourself(tStep);
301MaxwellChainMaterialStatus :: initTempStatus()
303 RheoChainMaterialStatus :: initTempStatus();
309 RheoChainMaterialStatus :: saveContext(stream, mode);
315 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)
int giveNumberOfRows() const
Returns number of rows of receiver.
double at(std::size_t i, std::size_t j) const
bool solveForRhs(const FloatArray &b, FloatArray &answer, bool transpose=false)
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
void computeHiddenVars(GaussPoint *gp, TimeStep *tStep) const
double giveEModulus(GaussPoint *gp, TimeStep *tStep) const override
Evaluation of the incremental modulus.
RheoChainMaterialStatus(GaussPoint *g, int nunits)
FloatArray & giveHiddenVarsVector(int i)
void letTempHiddenVarsVectorBe(int i, FloatArray &valueArray)
const FloatArray & giveDiscreteTimes() const
int nUnits
Number of (Maxwell or Kelvin) units in the rheologic chain.
double relMatAge
Physical age of the material at castingTime.
void computeDiscreteRelaxationFunction(FloatArray &answer, const FloatArray &tSteps, double t0, double tr, GaussPoint *gp, TimeStep *tStep) const
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.
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 double giveCharTimeExponent(int i) const
Exponent to be used with the char time of a given unit, usually = 1.0.
virtual void updateEparModuli(double tPrime, GaussPoint *gp, TimeStep *tStep) const
Update of partial moduli of individual chain units.
void computeTrueStressIndependentStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep, ValueModeType mode) const
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 giveTargetTime()
Returns target time.
double sum(const FloatArray &x)