OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
steelrelaxmat.C
Go to the documentation of this file.
1 /*
2  *
3  * ##### ##### ###### ###### ### ###
4  * ## ## ## ## ## ## ## ### ##
5  * ## ## ## ## #### #### ## # ##
6  * ## ## ## ## ## ## ## ##
7  * ## ## ## ## ## ## ## ##
8  * ##### ##### ## ###### ## ##
9  *
10  *
11  * OOFEM : Object Oriented Finite Element Code
12  *
13  * Copyright (C) 1993 - 2013 Borek Patzak
14  *
15  *
16  *
17  * Czech Technical University, Faculty of Civil Engineering,
18  * Department of Structural Mechanics, 166 29 Prague, Czech Republic
19  *
20  * This library is free software; you can redistribute it and/or
21  * modify it under the terms of the GNU Lesser General Public
22  * License as published by the Free Software Foundation; either
23  * version 2.1 of the License, or (at your option) any later version.
24  *
25  * This program is distributed in the hope that it will be useful,
26  * but WITHOUT ANY WARRANTY; without even the implied warranty of
27  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
28  * Lesser General Public License for more details.
29  *
30  * You should have received a copy of the GNU Lesser General Public
31  * License along with this library; if not, write to the Free Software
32  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
33  */
34 
35 #include "steelrelaxmat.h"
36 #include "gausspoint.h"
37 #include "floatmatrix.h"
38 #include "floatarray.h"
39 #include "intarray.h"
40 #include "mathfem.h"
41 #include "contextioerr.h"
42 #include "datastream.h"
43 #include "classfactory.h"
44 
45 namespace oofem {
46 REGISTER_Material(SteelRelaxMat);
47 
48 // constructor
50 {
51  E = 0.;
52  k1 = 0.;
53  k2 = 0.;
54  rho1000 = 0.;
55  mu = 0.;
56  timeFactor = 0.;
57  //stiffnessFactor = 1.e6;
58  // prestress = 0.;
59 }
60 
61 // destructor
63 {}
64 
65 
66 int
68 //
69 // returns whether the receiver supports the given mode
70 //
71 {
72  return mode == _1dMat;
73 }
74 
75 
76 
77 // reads the model parameters from the input file
80 {
81  IRResultType result; // required by IR_GIVE_FIELD macro
82 
84  if ( result != IRRT_OK ) {
85  return result;
86  }
87 
88 
89  IR_GIVE_FIELD(ir, this->E, _IFT_SteelRelaxMat_E); // Young's modulus
90 
91  int reinfClass;
92  IR_GIVE_FIELD(ir, reinfClass, _IFT_SteelRelaxMat_reinfClass); // class of reinforcement according to MC2010 or EC2
93 
94  // Attention!!! rho1000 must be provided in % and not dimensionless
95  if ( reinfClass == 1 ) { // class 1 (wires or cables with normal relaxation)
96  this->k1 = 5.39;
97  this->k2 = 6.7;
98  this->rho1000 = 8.;
99  } else if ( reinfClass == 2 ) { // class 2 (wires or cables with lowered relaxation)
100  this->k1 = 0.66;
101  this->k2 = 9.1;
102  this->rho1000 = 2.5;
103  } else if ( reinfClass == 3 ) { // class 3 (hot-rolled or modified rods)
104  this->k1 = 1.98;
105  this->k2 = 8.0;
106  this->rho1000 = 4.;
107  } else {
108  OOFEM_ERROR("unsupported value of reinfClass");
109  }
110 
111  // possibility to overwrite
115 
116  //IR_GIVE_OPTIONAL_FIELD(ir, this->stiffnessFactor, _IFT_SteelRelaxMat_stiffnessFactor);
117 
119 
120  // IR_GIVE_OPTIONAL_FIELD(ir, this->prestress, _IFT_SteelRelaxMat_prestress);
121 
123 
124  this->relRelaxBound = 0.;
126 
127  int approach;
129 
130  this->Approach = ( approachType ) approach;
131 
132  // in incremental linear statics it seems that it is necessary to iterate equilibrium at the material point level (for the Bazant approach only) because otherwise the strain relaxation would be calculated from too high stress
133  // tolerance = 1 Pa
134  // MPa -> SF = 1e6 -> tol = 1
135  // Pa -> SF = 1 -> tol = 1
136  //this->tolerance = 1. / this->stiffnessFactor;
137  this->tolerance = 1. / 1.e6;
139 
140 
141  return IRRT_OK;
142 }
143 
144 // creates a new material status corresponding to this class
147 {
148  return new SteelRelaxMatStatus(1, this->giveDomain(), gp);
149 }
150 
151 void
153  GaussPoint *gp,
154  const FloatArray &totalStrain,
155  TimeStep *tStep)
156 {
157  FloatArray reducedStrain, strainIncrement, stressVector;
158  double stressIncrement;
159 
160  SteelRelaxMatStatus *status = static_cast< SteelRelaxMatStatus * >( this->giveStatus(gp) );
161 
162  if ( !this->isActivated(tStep) ) {
163  stressVector.resize(1);
164  stressVector.zero();
165 
166  status->letTempStrainVectorBe(totalStrain);
167  status->letTempStressVectorBe(stressVector);
168 
169  answer.resize(1);
170  answer.zero();
171  return;
172  }
173 
174  if ( this->Approach == EquivTime_EC2 ) {
175  double lossIncrement;
176 
177  StructuralMaterial :: giveStressDependentPartOfStrainVector(reducedStrain, gp, totalStrain, tStep, VM_Incremental);
178 
179  strainIncrement.beDifferenceOf( reducedStrain, status->giveStrainVector() );
180  stressIncrement = strainIncrement.at(1) * this->E;
181 
182  // subtract stress increment due to prestress losses in the current time step
183 
184 
185  if ( status->giveStressVector().giveSize() ) {
186  stressVector = status->giveStressVector();
187  } else {
188  stressVector.resize(1);
189  stressVector.zero();
190  }
191 
192  stressVector.at(1) += stressIncrement;
193 
194  if ( stressVector.at(1) > 0. ) {
195  this->computeIncrOfPrestressLossAtVarStrain( lossIncrement, gp, tStep, stressVector.at(1) );
196  stressVector.at(1) -= lossIncrement;
197  }
198 
199  status->letTempStrainVectorBe(totalStrain);
200  status->letTempStressVectorBe(stressVector);
201  } else if ( this->Approach == Bazant_EC2 ) {
202  double prevIterTempStress;
203  int i = 0;
204 
205  do {
206  prevIterTempStress = status->giveTempStressVector().at(1);
207 
208  if ( status->giveStressVector().giveSize() ) {
209  stressVector = status->giveStressVector();
210  } else {
211  stressVector.resize(1);
212  stressVector.zero();
213  }
214 
215  // subtracts both thermal strain increment and strain due to cable relaxation
216  this->giveStressDependentPartOfStrainVector(reducedStrain, gp, totalStrain, tStep, VM_Incremental);
217 
218  strainIncrement.beDifferenceOf( reducedStrain, status->giveStrainVector() );
219  stressIncrement = strainIncrement.at(1) * this->E;
220 
221  stressVector.at(1) += stressIncrement;
222 
223 
224  // store the final strain and stress in the status
225  status->letTempStrainVectorBe(totalStrain);
226  status->letTempStressVectorBe(stressVector);
227 
228  i++;
229 
230  if ( i > 1000 ) {
231  OOFEM_ERROR("Algorithm not converging");
232  }
233  } while ( fabs( prevIterTempStress - status->giveTempStressVector().at(1) ) >= this->tolerance );
234 
235 
236  if ( i > 30 ) {
237  OOFEM_WARNING("Criterion of the algorithm reached in %d iterations, consider increasing tolerance", i);
238  }
239  }
240 
241  if ( stressVector.at(1) > this->charStrength ) {
242  OOFEM_ERROR( "Stress %f exeeds the characteristic strength of the material!", stressVector.at(1) );
243  }
244 
245  answer.resize(1);
246  answer.at(1) = stressVector.at(1);
247 }
248 
249 
250 void
252  MatResponseMode mode,
253  GaussPoint *gp,
254  TimeStep *tStep)
255 {
256  answer.resize(1, 1);
257  answer.zero();
258  if ( this->isActivated(tStep) ) {
259  answer.at(1, 1) = this->E;
260  }
261 }
262 
263 
264 
265 
266 void
268 {
269  FloatArray temperatureFreeStrain;
270  FloatArray relaxationStrain;
271 
272  // subtracts temperature strain
273  StructuralMaterial :: giveStressDependentPartOfStrainVector(temperatureFreeStrain, gp, totalStrain, tStep, mode);
274 
275  // strains due to relaxation
276  this->computeStressRelaxationStrainVector(relaxationStrain, gp, totalStrain, tStep, mode);
277 
278  answer = temperatureFreeStrain;
279  answer.subtract(relaxationStrain);
280 
281  return;
282 }
283 
284 
285 void
287 {
288  double rho;
289  double k;
290  double lambda;
291  double mu;
292  double prestress;
293 
294  SteelRelaxMatStatus *status = static_cast< SteelRelaxMatStatus * >( this->giveStatus(gp) );
295  prestress = status->givePrestress();
296 
297  answer = 0.;
298 
299  if ( prestress > this->relRelaxBound * this->charStrength ) {
300  mu = prestress / this->charStrength;
301 
302  rho = this->k1 * this->rho1000 * exp(this->k2 * mu) * 1.e-5;
303  k = 0.75 * ( 1. - mu );
304  lambda = 1000. * this->timeFactor / 24.;
305 
306  answer = prestress * rho * pow( ( dt / lambda ), k );
307  }
308 }
309 
310 
311 void
313 {
314  double rho;
315  double k;
316  double lambda;
317  double mu;
318  double prestress;
319  double lossesUpTillNow;
320  double loss;
321 
322  SteelRelaxMatStatus *status = static_cast< SteelRelaxMatStatus * >( this->giveStatus(gp) );
323  lossesUpTillNow = status->giveRelaxIntVariable();
324 
325  // "initial" value of prestress is the sum of the current stress plus the cumulative subsequent relaxation
326  prestress = stress + lossesUpTillNow;
327  status->setPrestress(prestress);
328 
329  answer = 0.;
330 
331  if ( prestress > this->relRelaxBound * this->charStrength ) {
332  mu = prestress / this->charStrength;
333  rho = this->k1 * this->rho1000 * exp(this->k2 * mu) * 1.e-5;
334  k = 0.75 * ( 1. - mu );
335  lambda = 1000. * this->timeFactor / 24.;
336 
337 
338  // compute total loss for updated prestress and time equiv
339  double t_equiv;
340  t_equiv = pow( ( lossesUpTillNow / ( prestress * rho ) ), ( 1. / k ) ) * lambda;
341  this->evalStressRelaxationAtConstStrain( loss, gp, t_equiv + tStep->giveTimeIncrement() );
342 
343 
344  // set temporary sum of losses
345  status->setTempRelaxIntVariable(loss);
346 
347  // subtract the preceding sum of losses to get the increment
348  loss -= lossesUpTillNow;
349 
350  answer = loss;
351  }
352 }
353 
354 
355 
356 
357 
358 
359 
360 void
362 {
363  // here we deal with total strain vector with subtracted tempreature
364 
365  SteelRelaxMatStatus *status = static_cast< SteelRelaxMatStatus * >( this->giveStatus(gp) );
366 
367  double averageStress = 0.;
368  int n = 0;
369  double mu = 0.;
370 
371  double k, rho, lambda;
372 
373  double dt = tStep->giveTimeIncrement();
374 
375  FloatArray temperFreeStrain, temperFreeStrainIncrement;
376  StructuralMaterial :: giveStressDependentPartOfStrainVector(temperFreeStrain, gp, totalStrain, tStep, VM_Total);
377 
378  double averageMechStrain = temperFreeStrain.at(1);
379 
380  double prestress;
381  prestress = status->givePrestress();
382 
383  if ( prestress > 0. ) {
384  temperFreeStrainIncrement = totalStrain; // result = eps i+1 tot
385  temperFreeStrainIncrement.subtract( status->giveStrainVector() ); // result = delta eps tot
386 
387  // epsilon temperature increment
388  FloatArray deltaEpsTemperature;
389  this->computeStressIndependentStrainVector(deltaEpsTemperature, gp, tStep, VM_Incremental);
390 
391  temperFreeStrainIncrement.subtract(deltaEpsTemperature); // results = delta epsilon stress
392 
393  averageMechStrain -= 0.5 * temperFreeStrainIncrement.at(1);
394  }
395 
396  double F = averageMechStrain * this->E;
397 
398 
399  if ( prestress == 0. ) {
400  prestress = F;
401  status->setPrestress(prestress);
402  }
403 
404  double relaxStrainIncrement;
405 
406  // different approach for the first step and for the following steps
407  if ( status->giveRelaxIntVariable() == 0. ) {
408  // assume that the strain is constant and equal to zero - eval from Eurocode function
409  this->evalStressRelaxationAtConstStrain(relaxStrainIncrement, gp, dt);
410  // convert into strain
411  relaxStrainIncrement /= this->E;
412  } else {
413  if ( status->giveStressVector().giveSize() ) {
414  averageStress += status->giveStressVector().at(1);
415  n++;
416  }
417 
418  if ( status->giveTempStressVector().giveSize() ) {
419  averageStress += status->giveTempStressVector().at(1);
420  n++;
421  }
422 
423  if ( n > 0 ) {
424  averageStress /= n;
425  }
426 
427  // governing equations 3.28-3.30 rewritten to the following form
428  //
429  // original:
430  // mu = sigma_0 / fk
431  // t in hours
432  // delta sigma_p / sigma_0 = k1 * rho1000 * exp( k2 * mu) * (t/1000)^(0.75*(1-mu) ) * 1e-5;
433 
434  // new: (according to Bazant & Yu 2013)
435  // delta sigma_p / F(epsilon) = rho * (t/lambda)^k;
436  // where ... rho = k1 * rho1000 * exp( k2 * mu) * 1e-5
437  // ... k = 0.75*(1-mu)
438  // ... lambda = 1000 * timeFactor / 24
439  // ... timeFactor = 1 for day / 24 for hour / 86400 for sec, etc.
440 
441  relaxStrainIncrement = 0.;
442 
443  if ( averageStress > this->relRelaxBound * this->charStrength ) {
444  mu = prestress / this->charStrength;
445  rho = this->k1 * this->rho1000 * exp(this->k2 * mu) * 1.e-5;
446  k = 0.75 * ( 1. - mu );
447  lambda = 1000. * this->timeFactor / 24.;
448  relaxStrainIncrement = k * pow(rho, 1. / k) * F * dt;
449  relaxStrainIncrement /= this->E * lambda * pow( ( 1. - averageStress / F ), 1. / k - 1. );
450  }
451  }
452 
453  status->setTempRelaxIntVariable( relaxStrainIncrement + status->giveRelaxIntVariable() );
454 
455  answer.resize(1);
456 
457  if ( mode == VM_Incremental ) {
458  answer.at(1) = relaxStrainIncrement;
459  } else {
460  answer.at(1) = relaxStrainIncrement + status->giveRelaxIntVariable();
461  }
462 
463  return;
464 }
465 
466 
467 int
469 {
470  return StructuralMaterial :: giveIPValue(answer, gp, type, tStep);
471 }
472 
473 //=============================================================================
474 
476 {
478  prestress = 0.;
479 }
480 
482 { }
483 
484 void
486 {
488 
489  fprintf(file, " relaxationInternalVariable ");
490  fprintf(file, "%.4e ", relaxIntVariable);
491  fprintf(file, "\n");
492 
493  fprintf(file, " initialPrestress ");
494  fprintf(file, "%.4e ", prestress);
495  fprintf(file, "\n");
496 }
497 
498 
499 // initializes temporary variables based on their values at the previous equlibrium state
501 {
503 
505 }
506 
507 
508 // updates internal variables when equilibrium is reached
509 void
511 {
513 
515 }
516 
517 
518 // saves full information stored in this status
519 // temporary variables are NOT stored
522 {
523  contextIOResultType iores;
524 
525  // save parent class status
526  if ( ( iores = StructuralMaterialStatus :: saveContext(stream, mode, obj) ) != CIO_OK ) {
527  THROW_CIOERR(iores);
528  }
529 
530  // write raw data
531  if ( !stream.write(relaxIntVariable) ) {
532  return CIO_IOERR;
533  }
534 
535  if ( !stream.write(prestress) ) {
536  return CIO_IOERR;
537  }
538 
539  return CIO_OK;
540 }
541 
542 
543 
546 //
547 // restores full information stored in stream to this Status
548 //
549 {
550  contextIOResultType iores;
551 
552  // read parent class status
553  if ( ( iores = StructuralMaterialStatus :: restoreContext(stream, mode, obj) ) != CIO_OK ) {
554  THROW_CIOERR(iores);
555  }
556 
557  if ( !stream.read(relaxIntVariable) ) {
558  return CIO_IOERR;
559  }
560 
561  return CIO_OK; // return succes
562 }
563 } // end namespace oofem
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
Definition: structuralms.C:96
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
enum oofem::SteelRelaxMat::approachType Approach
#define _IFT_SteelRelaxMat_reinfClass
Definition: steelrelaxmat.h:48
void subtract(const FloatArray &src)
Subtracts array src to receiver.
Definition: floatarray.C:258
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
Definition: structuralms.h:137
double k2
constant depending on the reinforcement class
Definition: steelrelaxmat.h:91
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
Definition: material.C:244
Class and object Domain.
Definition: domain.h:115
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.
Definition: steelrelaxmat.C:67
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver&#39;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...
Definition: datastream.h:54
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
Definition: steelrelaxmat.h:94
double & at(int i)
Coefficient access function.
Definition: floatarray.h:131
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
Definition: valuemodetype.h:78
#define _IFT_SteelRelaxMat_k1
Definition: steelrelaxmat.h:49
This class implements a structural material status information.
Definition: structuralms.h:65
double mu
ratio of prestress vs. characteristic strength
Definition: steelrelaxmat.h:97
General IO error.
double E
Young&#39;s modulus.
Definition: steelrelaxmat.h:85
virtual ~SteelRelaxMat()
Definition: steelrelaxmat.C:62
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.
Definition: materialmode.h:89
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver&#39;s output to given stream.
Definition: structuralms.C:73
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.
#define THROW_CIOERR(e)
Definition: contextioerr.h:61
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
Sets receiver to be a - b.
Definition: floatarray.C:341
double giveTimeIncrement()
Returns solution step associated time increment.
Definition: timestep.h:150
#define _IFT_SteelRelaxMat_timeFactor
Definition: steelrelaxmat.h:52
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
Definition: steelrelaxmat.h:56
double charStrength
characteristic strength of prestressing steel in appropriate units (not necessarily MPa) ...
#define OOFEM_ERROR(...)
Definition: error.h:61
#define _IFT_SteelRelaxMat_charStrength
Definition: steelrelaxmat.h:53
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.
Definition: steelrelaxmat.C:79
#define _IFT_SteelRelaxMat_k2
Definition: steelrelaxmat.h:50
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
Definition: steelrelaxmat.h:55
#define _IFT_SteelRelaxMat_rho1000
Definition: steelrelaxmat.h:51
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.
Definition: floatmatrix.h:176
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.
Definition: structuralms.C:157
Abstract base class representing a material status information.
Definition: matstatus.h:84
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.
Definition: floatarray.h:82
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.
Definition: floatmatrix.h:94
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
Definition: structuralms.h:135
const FloatArray & giveStressVector() const
Returns the const pointer to receiver&#39;s stress vector.
Definition: structuralms.h:107
void evalStressRelaxationAtConstStrain(double &answer, GaussPoint *gp, double dt)
computes steel relaxation (eurocode formula)
#define _IFT_SteelRelaxMat_approach
Definition: steelrelaxmat.h:54
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
Definition: floatmatrix.C:1358
Class representing the general Input Record.
Definition: inputrecord.h:101
double relaxIntVariable
For Bazant&#39;s approach this internal variable is a cumulative viscous strain while for Eurocode approa...
void zero()
Zeroes all coefficients of receiver.
Definition: floatarray.C:658
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.
Definition: contextmode.h:43
Abstract base class for all "structural" constitutive models.
#define _IFT_SteelRelaxMat_E
Definition: steelrelaxmat.h:47
virtual bool isActivated(TimeStep *tStep)
Definition: material.h:161
void zero()
Zeroes all coefficient of receiver.
Definition: floatmatrix.C:1326
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
Definition: structuralms.C:108
Domain * giveDomain() const
Definition: femcmpnn.h:100
double giveRelaxIntVariable(void)
REGISTER_Material(DummyMaterial)
#define IR_GIVE_OPTIONAL_FIELD(__ir, __value, __id)
Macro facilitating the use of input record reading methods.
Definition: inputrecord.h:78
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&#39;s temporary stress vector.
Definition: structuralms.h:117
int giveSize() const
Returns the size of receiver.
Definition: floatarray.h:218
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
Definition: structuralms.C:133
the oofem namespace is to define a context or scope in which all oofem names are defined.
#define IR_GIVE_FIELD(__ir, __value, __id)
Macro facilitating the use of input record reading methods.
Definition: inputrecord.h:69
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&#39;s strain vector.
Definition: structuralms.h:105
SteelRelaxMat(int n, Domain *d)
Definition: steelrelaxmat.C:49
Class representing integration point in finite element program.
Definition: gausspoint.h:93
#define OOFEM_WARNING(...)
Definition: error.h:62
Class representing solution step.
Definition: timestep.h:80
double k1
constant depending on the reinforcement class
Definition: steelrelaxmat.h:88
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.
Definition: floatarray.C:631

This page is part of the OOFEM documentation. Copyright (c) 2011 Borek Patzak
Project e-mail: info@oofem.org
Generated at Tue Jan 2 2018 20:07:31 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011