44 #include "../sm/CrossSections/structuralcrosssection.h" 49 EparVal(), charTimes(), discreteTimeScale()
73 return mode == _3dMat || mode == _PlaneStress ||
74 mode == _PlaneStrain || mode == _1dMat ||
75 mode == _PlateLayer || mode == _2dBeamLayer ||
76 mode == _2dLattice || mode == _3dLattice;
92 FloatArray stressIncrement, stressVector, strainIncrement, reducedStrain;
117 tStep, VM_Incremental);
143 Binv.
times(Emodulus);
147 stressIncrement.
beProductOf(Binv, strainIncrement);
151 stressVector.
add(stressIncrement);
164 answer = stressVector;
183 if ( mMode == _2dLattice || mMode == _3dLattice ) {
195 double t0,
double tr,
198 int size, nsteps, si;
199 double taui, tauk, Jtrt0, totalDeltaSigma;
214 totalDeltaSigma = 0.;
215 for (
int k = si; k <= nsteps; k++ ) {
217 for (
int i = si; i <= k - 1; i++ ) {
221 taui = 0.5 * ( t0 + tSteps.
at(i) + tr );
223 taui = t0 + 0.5 * ( tSteps.
at(i) + tSteps.
at(i - 1) );
232 tauk = 0.5 * ( t0 + tSteps.
at(k) + tr );
234 tauk = t0 + 0.5 * ( tSteps.
at(k) + tSteps.
at(k - 1) );
240 totalDeltaSigma += deltaSigma.
at(k);
241 answer.
at(k) = sig0 - totalDeltaSigma;
252 double help = log(to / from) / nsteps;
253 for (
int i = 1; i <= nsteps; i++ ) {
254 answer.
at(i) = exp(i * help) * from;
362 #ifdef keep_track_of_strains 422 double endTime, Taun1, Tau1, help;
424 double stepMultiplier = 10.;
427 Taun1 = 0.75 * endTime;
436 OOFEM_ERROR(
"begOfTimeOfInterest must be a positive number");
439 nsteps = ( int ) ( ( log(Taun1) - log(Tau1) ) / log(stepMultiplier) + 1. );
444 this->
nUnits = size = nsteps + 2;
451 help = ( log(Taun1) - log(Tau1) ) / (
double ) nsteps;
452 for (
int i = 1; i <= nsteps; i++ ) {
480 answer.
times(incrStiffness);
498 answer.
times(incrStiffness);
515 answer.
times(incrStiffness);
533 answer.
times(incrStiffness);
551 answer.
times(incrStiffness);
569 answer.
times(incrStiffness);
588 if ( result !=
IRRT_OK )
return result;
703 if ( type == IST_ThermalStrainTensor ) {
728 #ifdef keep_track_of_strains 744 OOFEM_ERROR(
"unit number exceeds the specified limit");
757 fprintf(file,
"{hidden variables: ");
758 for (
int i = 0; i <
nUnits; i++ ) {
761 fprintf( file,
"%f ", val );
768 fprintf(file,
"shrinkageStrain: {");
770 fprintf( file,
"%f ", val );
776 fprintf(file,
"}\n");
785 for (
int i = 0; i <
nUnits; i++ ) {
789 #ifdef keep_track_of_strains 814 for (
int i = 0; i <
nUnits; i++ ) {
841 for (
int i = 0; i <
nUnits; i++ ) {
static int giveSizeOfVoigtSymVector(MaterialMode mmode)
Returns the size of symmetric part of a reduced stress/strain vector according to given mode...
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.
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
double relMatAge
Physical age of the material at simulation time = 0.
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
virtual void give1dStressStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing 1d stiffness matrix of receiver.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
virtual bool isActivated(TimeStep *tStep)
double giveCharTime(int) const
Access to the characteristic time of a given unit.
double nu
Poisson's ratio (assumed to be constant, unaffected by creep).
virtual void give3dMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes full 3d material stiffness matrix at given integration point, time, respecting load history ...
std::vector< FloatArray > tempHiddenVars
Domain * domain
Link to domain object, useful for communicating with other FEM components.
virtual ~RheoChainMaterialStatus()
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
virtual contextIOResultType saveIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Stores integration point state to output stream.
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...
contextIOResultType storeYourself(DataStream &stream) const
double giveThermalStrain(void)
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
#define _IFT_RheoChainMaterial_endoftimeofinterest
virtual void give1dStressStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing 1d stiffness matrix of receiver.
void computeTrueStressIndependentStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep, ValueModeType mode)
Computes, for the given integration point, the strain vector induced by stress-independent internal p...
double & at(int i)
Coefficient access function.
virtual void givePlaneStrainStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane strain stiffness matrix of receiver.
virtual int hasIncrementalShrinkageFormulation()
If only incremental shrinkage strain formulation is provided, then total shrinkage strain must be tra...
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
LinearElasticMaterial * giveLinearElasticMaterial()
Access to the underlying linear elastic material with unit Young's modulus.
virtual void giveShrinkageStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep, ValueModeType mode)
Computes, for the given integration point, the strain vector induced by stress-independent shrinkage...
This class implements a structural material status information.
double begOfTimeOfInterest
Time from which the model should give a good approximation. Optional field. Default value is 0...
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.
FloatArray EparVal
Partial moduli of individual units.
int preCastingTimeMat
Stiffness at time less than casting time - optional parameter, negative by default.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
EngngModel * giveEngngModel()
Returns engineering model to which receiver is associated.
void setTempThermalStrain(double src)
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...
virtual contextIOResultType restoreIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Reads integration point state to output stream.
#define _IFT_RheoChainMaterial_timefactor
virtual contextIOResultType restoreIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Reads integration point state to output stream.
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.
MatResponseMode
Describes the character of characteristic material matrix.
const FloatArray & giveDiscreteTimes()
#define _IFT_RheoChainMaterial_alphaOne
virtual void give2dLatticeStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing 2d lattice stiffness matrix of receiver.
virtual void giveThermalDilatationVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep)
Returns a vector of coefficients of thermal dilatation in direction of each material principal (local...
double giveEndOfTimeOfInterest()
Access to the time up to which the response should be accurate.
This class is a abstract base class for all linear elastic material models in a finite element proble...
double giveEparModulus(int iChain)
Access to partial modulus of a given unit.
FloatArray charTimes
Characteristic times of individual units (relaxation or retardation times).
void letTempHiddenVarsVectorBe(int i, FloatArray &valueArray)
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
Sets receiver to be a - b.
virtual contextIOResultType saveIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Stores integration point state to output stream.
virtual int hasMaterialModeCapability(MaterialMode mode)
Tests if material supports material mode.
void giveUnitStiffnessMatrix(FloatMatrix &answer, GaussPoint *gp, TimeStep *tStep)
Evaluation of elastic stiffness matrix for unit Young's modulus.
virtual void give3dLatticeStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing 3d lattice stiffness matrix of receiver.
double timeFactor
Scaling factor transforming the simulation time units into days (gives the number of simulation time ...
RheoChainMaterialStatus(int n, Domain *d, GaussPoint *g, int nunits)
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual ~RheoChainMaterial()
virtual void giveStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix for giveRealStressVector of receiver in given integration point...
double alphaOne
Parameters for the lattice model.
double endOfTimeOfInterest
Time (age???) up to which the model should give a good approximation.
virtual double giveEModulus(GaussPoint *gp, TimeStep *tStep)=0
Evaluation of the incremental modulus.
Material * giveMaterial(int n)
Service for accessing particular domain material model.
This class implements an isotropic linear elastic material in a finite element problem.
void giveUnitComplianceMatrix(FloatMatrix &answer, GaussPoint *gp, TimeStep *tStep)
Evaluation of elastic compliance matrix for unit Young's modulus.
virtual MaterialStatus * CreateStatus(GaussPoint *gp) const
Creates new copy of associated status and inserts it into given integration point.
virtual void give3dMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes full 3d material stiffness matrix at given integration point, time, respecting load history ...
void times(double f)
Multiplies receiver by factor f.
contextIOResultType restoreYourself(DataStream &stream)
FloatArray shrinkageStrain
Total shrinkage strain (needed only when the shrinkage evolution is described in the incremental form...
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
void computeDiscreteRelaxationFunction(FloatArray &answer, const FloatArray &tSteps, double t0, double tr, GaussPoint *gp, TimeStep *tSte)
Evaluation of the relaxation function at given times.
RheoChainMaterial(int n, Domain *d)
#define _IFT_RheoChainMaterial_talpha
#define _IFT_RheoChainMaterial_n
double giveIntrinsicTime()
Returns intrinsic time, e.g. time in which constitutive model is evaluated.
std::vector< FloatArray > hiddenVars
Hidden (internal) variables, the meaning of which depends on the type of chain.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
virtual double giveEndOfTimeOfInterest()
Returns end of time interest (time corresponding to end of time integration).
virtual void givePlaneStressStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane stress stiffness matrix of receiver.
#define _IFT_RheoChainMaterial_preCastingTimeMat
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.
virtual void give3dLatticeStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing 3d lattice stiffness matrix of receiver.
Class representing vector of real numbers.
#define _IFT_RheoChainMaterial_begoftimeofinterest
#define _IFT_RheoChainMaterial_relmatage
virtual void givePlaneStrainStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane strain stiffness matrix of receiver.
Implementation of matrix containing floating point numbers.
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 void give2dLatticeStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing 2d lattice stiffness matrix of receiver.
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
void zero()
Zeroes all coefficients of receiver.
virtual void computeCharTimes()
Evaluation of characteristic times.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
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.
Abstract base class for all "structural" constitutive models.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
virtual void computeCharCoefficients(FloatArray &answer, double tPrime, GaussPoint *gp, TimeStep *tStep)=0
Evaluation of the moduli of individual units.
Domain * giveDomain() const
FloatArray discreteTimeScale
Times at which the errors are evaluated if the least-square method is used.
double talpha
thermal dilatation coeff.
double castingTime
Casting time.
#define _IFT_RheoChainMaterial_alphaTwo
int giveSize() const
Returns the size of receiver.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
virtual const FloatArray & giveViscoelasticStressVector() const
the oofem namespace is to define a context or scope in which all oofem names are defined.
bool isNotEmpty() const
Returns true if receiver is not empty.
virtual void initTempStatus(GaussPoint *gp)
Initializes temporary variables stored in integration point status at the beginning of new time step...
void beInverseOf(const FloatMatrix &src)
Modifies receiver to become inverse of given parameter.
virtual void givePlaneStressStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane stress stiffness matrix of receiver.
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.
void setShrinkageStrainVector(FloatArray src)
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...
LinearElasticMaterial * linearElasticMaterial
Associated linearElasticMaterial, with E = 1.
Class representing integration point in finite element program.
Class representing solution step.
double EparValTime
Time for which the partial moduli of individual units have been evaluated.
void add(const FloatArray &src)
Adds array src to receiver.
#define _IFT_RheoChainMaterial_lattice
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...
int nUnits
Number of units in the chain.
void resize(int s)
Resizes receiver towards requested size.
static void generateLogTimeScale(FloatArray &answer, double from, double to, int nsteps)
Generates discrete times starting from time "from" to time "to" uniformly distributed in log time sca...