OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
microplane_m1.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 "microplane_m1.h"
36 #include "floatarray.h"
37 #include "floatmatrix.h"
38 #include "mathfem.h"
39 #include "classfactory.h"
40 
41 namespace oofem {
42 REGISTER_Material(M1Material);
43 
44 #ifdef microplane_m1_new_implementation
45 // ========================= new implementation =========================
47 { E = 0.; nu = 0.; EN = 0.; s0 = 0.; HN = 0.; }
48 
51 {
53 
54  IRResultType result; // Required by IR_GIVE_FIELD macro
55 
56  if ( nu != 0.25 ) {
57  OOFEM_WARNING("Poisson ratio of microplane model M1 must be set to 0.25");
58  }
59  nu = 0.25; // read by MicroplaneMaterial, but overwritten here
60  EN = E / ( 1. - 2. * nu );
62  HN = 0.;
64  ENtan = EN * HN / ( EN + HN );
65 
66  return IRRT_OK;
67 }
68 
69 void
71  GaussPoint *gp,
72  const FloatArray &totalStrain,
73  TimeStep *tStep)
74 {
75  answer.resize(6);
76  answer.zero();
77 
78  // get the status at the beginning
79  M1MaterialStatus *status = static_cast< M1MaterialStatus * >( this->giveStatus(gp) );
80  // prepare status at the end
81  this->initTempStatus(gp);
82  // get the initial values of plastic strains on microplanes (set to zero in the first step)
84  if ( epspN.giveSize() < numberOfMicroplanes ) {
86  epspN.zero();
87  }
88 
89  // loop over microplanes
92  for ( int imp = 1; imp <= numberOfMicroplanes; imp++ ) {
93  Microplane *mPlane = this->giveMicroplane(imp - 1, gp);
94  //IntegrationPointStatus *mPlaneStatus = this->giveMicroplaneStatus(mPlane);
95  double epsN = computeNormalStrainComponent(mPlane, totalStrain);
96  // evaluate trial stress on the microplane
97  double sigTrial = EN * ( epsN - epspN.at(imp) );
98  // evaluate the yield stress (from total microplane strain, not from its plastic part)
99  double sigYield = EN * ( s0 + HN * epsN ) / ( EN + HN );
100  if ( sigYield < 0. ) {
101  sigYield = 0.;
102  }
103  // check whether the yield stress is exceeded and set the microplane stress
104  if ( sigTrial > sigYield ) { //plastic yielding
105  sigN.at(imp) = sigYield;
106  epspN.at(imp) = epsN - sigYield / EN;
107  plState.at(imp) = 1;
108  } else {
109  sigN.at(imp) = sigTrial;
110  plState.at(imp) = 0;
111  }
112  // add the contribution of the microplane to macroscopic stresses
113  for ( int i = 1; i <= 6; i++ ) {
114  answer.at(i) += N [ imp - 1 ] [ i - 1 ] * sigN.at(imp) * microplaneWeights [ imp - 1 ];
115  }
116  }
117  // multiply the integral over unit hemisphere by 6
118  answer.times(6);
119 
120  // update status
121  status->letTempStrainVectorBe(totalStrain);
122  status->letTempStressVectorBe(answer);
123  status->letTempNormalMplaneStressesBe(sigN);
125  status->letPlasticStateIndicatorsBe(plState);
126 }
127 
128 void
130  MatResponseMode mode,
131  GaussPoint *gp,
132  TimeStep *tStep)
133 {
134  answer.resize(6, 6);
135  answer.zero();
136  // elastic stiffness matrix
137  if ( mode == ElasticStiffness ) {
139  return;
140  }
141 
142  M1MaterialStatus *status = static_cast< M1MaterialStatus * >( this->giveStatus(gp) );
143  IntArray plasticState = status->givePlasticStateIndicators();
144  if ( plasticState.giveSize() != numberOfMicroplanes ) {
146  return;
147  }
148  // tangent stiffness matrix
149  double aux, D11 = 0., D12 = 0., D13 = 0., D14 = 0., D15 = 0., D16 = 0., D22 = 0., D23 = 0., D24 = 0., D25 = 0., D26 = 0., D33 = 0., D34 = 0., D35 = 0., D36 = 0.;
150  // loop over microplanes
151  for ( int im = 0; im < numberOfMicroplanes; im++ ) {
152  if ( plasticState.at(im + 1) ) {
153  aux = ENtan * microplaneWeights [ im ];
154  } else {
155  aux = EN * microplaneWeights [ im ];
156  }
157  D11 += aux * N [ im ] [ 0 ] * N [ im ] [ 0 ];
158  D12 += aux * N [ im ] [ 0 ] * N [ im ] [ 1 ];
159  D13 += aux * N [ im ] [ 0 ] * N [ im ] [ 2 ];
160  D14 += aux * N [ im ] [ 0 ] * N [ im ] [ 3 ];
161  D15 += aux * N [ im ] [ 0 ] * N [ im ] [ 4 ];
162  D16 += aux * N [ im ] [ 0 ] * N [ im ] [ 5 ];
163 
164  D22 += aux * N [ im ] [ 1 ] * N [ im ] [ 1 ];
165  D23 += aux * N [ im ] [ 1 ] * N [ im ] [ 2 ];
166  D24 += aux * N [ im ] [ 1 ] * N [ im ] [ 3 ];
167  D25 += aux * N [ im ] [ 1 ] * N [ im ] [ 4 ];
168  D26 += aux * N [ im ] [ 1 ] * N [ im ] [ 5 ];
169 
170  D33 += aux * N [ im ] [ 2 ] * N [ im ] [ 2 ];
171  D34 += aux * N [ im ] [ 2 ] * N [ im ] [ 3 ];
172  D35 += aux * N [ im ] [ 2 ] * N [ im ] [ 4 ];
173  D36 += aux * N [ im ] [ 2 ] * N [ im ] [ 5 ];
174  }
175  answer.at(1, 1) = D11;
176  answer.at(1, 2) = answer.at(2, 1) = answer.at(6, 6) = D12;
177  answer.at(1, 3) = answer.at(3, 1) = answer.at(5, 5) = D13;
178  answer.at(1, 4) = answer.at(4, 1) = answer.at(5, 6) = answer.at(6, 5) = D14;
179  answer.at(1, 5) = answer.at(5, 1) = D15;
180  answer.at(1, 6) = answer.at(6, 1) = D16;
181 
182  answer.at(2, 2) = D22;
183  answer.at(2, 3) = answer.at(3, 2) = answer.at(4, 4) = D23;
184  answer.at(2, 4) = answer.at(4, 2) = D24;
185  answer.at(2, 5) = answer.at(5, 2) = answer.at(4, 6) = answer.at(6, 4) = D25;
186  answer.at(2, 6) = answer.at(6, 2) = D26;
187 
188  answer.at(3, 3) = answer.at(3, 3) = D33;
189  answer.at(3, 4) = answer.at(4, 3) = D34;
190  answer.at(3, 5) = answer.at(5, 3) = D35;
191  answer.at(3, 6) = answer.at(6, 3) = answer.at(4, 5) = answer.at(5, 4) = D36;
192 
193  answer.times(6.);
194 }
195 
196 int
198 {
199  M1MaterialStatus *status = static_cast< M1MaterialStatus * >( this->giveStatus(gp) );
200  if ( type == IST_PlasticStrainTensor ) {
201  // plastic strain is computed as total strain minus elastic strain
202  // (note that integration of microplane plastic strains would give a different result)
203  answer = status->giveStrainVector();
204  FloatArray sig = status->giveStressVector();
205  double aux = nu * ( sig.at(1) + sig.at(2) + sig.at(3) );
206  double G = E / ( 2. * ( 1. + nu ) );
207  answer.at(1) -= ( ( 1. + nu ) * sig.at(1) - aux ) / E;
208  answer.at(2) -= ( ( 1. + nu ) * sig.at(2) - aux ) / E;
209  answer.at(3) -= ( ( 1. + nu ) * sig.at(3) - aux ) / E;
210  answer.at(4) -= sig.at(4) / G;
211  answer.at(5) -= sig.at(5) / G;
212  answer.at(6) -= sig.at(6) / G;
213  return 1;
214  } else {
215  return StructuralMaterial :: giveIPValue(answer, gp, type, tStep);
216  }
217 }
219 
221  StructuralMaterialStatus(n, d, g), sigN(0), epspN(0), plasticState(0)
222 {}
223 
224 
226 { }
227 
228 void
230 {
232 }
233 
234 void
236 {
238  fprintf(file, "status { sigN ");
239  int nm = sigN.giveSize();
240  for ( int imp = 1; imp <= nm; imp++ ) {
241  fprintf( file, " %g ", sigN.at(imp) );
242  }
243  fprintf(file, " epspN ");
244  for ( int imp = 1; imp <= nm; imp++ ) {
245  fprintf( file, " %g ", epspN.at(imp) );
246  }
247  fprintf(file, " plast ");
248  for ( int imp = 1; imp <= nm; imp++ ) {
249  fprintf( file, " %d ", plasticState.at(imp) );
250  }
251  fprintf(file, "}\n");
252 }
253 
254 void
256 {
257  sigN = tempSigN;
258  epspN = tempEpspN;
260 }
261 
264 {
265  return StructuralMaterialStatus :: saveContext(stream, mode, obj);
266 }
267 
270 {
271  return StructuralMaterialStatus :: restoreContext(stream, mode, obj);
272 }
273 
274 #else
275 // ========================= old implementation =========================
277 { E = 0.; nu = 0.; EN = 0.; s0 = 0.; HN = 0.; }
278 
279 void
281  GaussPoint *gp,
282  const FloatArray &totalStrain,
283  TimeStep *tStep)
284 {
285  FloatArray sigmaN, deps, sigmaNyield;
286  double depsN, epsN;
287 
288  answer.resize(3);
289  answer.zero();
290  sigmaNyield.resize(nmp);
291  sigmaNyield.zero();
292 
293  M1MaterialStatus *status = static_cast< M1MaterialStatus * >( this->giveStatus(gp) );
294  this->initTempStatus(gp);
295  sigmaN = status->giveNormalMplaneStresses();
296  if ( sigmaN.giveSize() < nmp ) {
297  sigmaN.resize(nmp);
298  sigmaN.zero();
299  }
300  deps.beDifferenceOf( totalStrain, status->giveStrainVector() );
301 
302  for ( int imp = 1; imp <= nmp; imp++ ) {
303  depsN = N.at(imp, 1) * deps.at(1) + N.at(imp, 2) * deps.at(2) + N.at(imp, 3) * deps.at(3);
304  epsN = N.at(imp, 1) * totalStrain.at(1) + N.at(imp, 2) * totalStrain.at(2) + N.at(imp, 3) * totalStrain.at(3);
305  sigmaN.at(imp) += EN * depsN;
306  double sy = EN * ( s0 + HN * epsN ) / ( EN + HN ); // current microplane yield stress
307  if ( sy < 0. ) {
308  sy = 0.;
309  }
310  if ( sigmaN.at(imp) > sy ) {
311  sigmaN.at(imp) = sy;
312  }
313  sigmaNyield.at(imp) = sy;
314  for ( int i = 1; i <= 3; i++ ) {
315  answer.at(i) += N.at(imp, i) * sigmaN.at(imp) * mw.at(imp);
316  }
317  }
318 
319  // update status
320  status->letTempStrainVectorBe(totalStrain);
321  status->letTempNormalMplaneStressesBe(sigmaN);
322  status->letNormalMplaneYieldStressesBe(sigmaNyield);
323  status->letTempStressVectorBe(answer);
324 }
325 
326 void
327 M1Material :: giveElasticPlaneStressStiffMtrx(FloatMatrix &answer)
328 {
329  answer.resize(3, 3);
330  answer.at(1, 1) = answer.at(2, 2) = E / ( 1. - nu * nu );
331  answer.at(1, 2) = answer.at(2, 1) = E * nu / ( 1. - nu * nu );
332  answer.at(1, 3) = answer.at(2, 3) = answer.at(3, 1) = answer.at(3, 2) = 0.;
333  answer.at(3, 3) = E / ( 2. * ( 1. + nu ) );
334 }
335 
336 void
338 {
339  answer.resize(3, 3);
340  if ( rMode == ElasticStiffness ) {
341  giveElasticPlaneStressStiffMtrx(answer);
342  return;
343  }
344 
345  M1MaterialStatus *status = static_cast< M1MaterialStatus * >( this->giveStatus(gp) );
346  FloatArray sigmaN = status->giveTempNormalMplaneStresses();
347  if ( sigmaN.giveSize() != nmp ) {
348  sigmaN = status->giveNormalMplaneStresses();
349  if ( sigmaN.giveSize() != nmp ) {
350  giveElasticPlaneStressStiffMtrx(answer);
351  return;
352  }
353  }
354  FloatArray sigmaNyield = status->giveNormalMplaneYieldStresses();
355 
356  double D11, D12, D13, D22, D23, aux;
357  D11 = D12 = D13 = D22 = D23 = 0.;
358  for ( int imp = 1; imp <= nmp; imp++ ) {
359  if ( sigmaN.at(imp) < sigmaNyield.at(imp) ) { // otherwise the plane is yielding
360  aux = mw.at(imp) * EN;
361  } else if ( sigmaNyield.at(imp) > 0. ) {
362  aux = mw.at(imp) * EN * HN / ( EN + HN );
363  } else {
364  aux = 0.;
365  }
366  D11 += aux * NN.at(imp, 1);
367  D12 += aux * NN.at(imp, 3);
368  D13 += aux * NN.at(imp, 2);
369  D22 += aux * NN.at(imp, 5);
370  D23 += aux * NN.at(imp, 4);
371  }
372  answer.at(1, 1) = D11;
373  answer.at(1, 2) = answer.at(2, 1) = answer.at(3, 3) = D12;
374  answer.at(1, 3) = answer.at(3, 1) = D13;
375  answer.at(2, 2) = D22;
376  answer.at(2, 3) = answer.at(3, 2) = D23;
377 }
378 
379 
382 {
383  IRResultType result; // Required by IR_GIVE_FIELD macro
384 
386  if ( result != IRRT_OK ) return result;
387 
388  IR_GIVE_FIELD(ir, E, _IFT_M1Material_e);
389  EN = 1.5 * E;
390  nu = 1. / 3.;
392  HN = 0.;
394 
395  // specify microplanes
396  IR_GIVE_FIELD(ir, nmp, _IFT_M1Material_nmp);
397  n.resize(nmp, 2);
398  N.resize(nmp, 3);
399  NN.resize(nmp, 5);
400  mw.resize(nmp);
401  for ( int imp = 1; imp <= nmp; imp++ ) {
402  double alpha = ( imp - 1 ) * ( M_PI / nmp );
403  double c = cos(alpha);
404  double s = sin(alpha);
405  n.at(imp, 1) = c;
406  n.at(imp, 2) = s;
407  N.at(imp, 1) = c * c;
408  N.at(imp, 2) = s * s;
409  N.at(imp, 3) = c * s;
410  NN.at(imp, 1) = c * c * c * c;
411  NN.at(imp, 2) = c * c * c * s;
412  NN.at(imp, 3) = c * c * s * s;
413  NN.at(imp, 4) = c * s * s * s;
414  NN.at(imp, 5) = s * s * s * s;
415  mw.at(imp) = 2. / nmp;
416  }
417 
418  return IRRT_OK;
419 }
420 
421 int
423 {
424  return mode == _PlaneStress;
425 }
426 
427 int
429 {
430  M1MaterialStatus *status = static_cast< M1MaterialStatus * >( this->giveStatus(gp) );
431  if ( type == IST_PlasticStrainTensor ) {
432  FloatArray plasticStrain(3);
433  plasticStrain.zero();
434  FloatArray sigmaN = status->giveTempNormalMplaneStresses();
435  FloatArray strain = status->giveTempStrainVector();
436  double Exx, Eyy, Gamma;
437  Exx = Eyy = Gamma = 0.;
438  if ( sigmaN.giveSize() == nmp ) {
439  for ( int imp = 1; imp <= nmp; imp++ ) {
440  double epsN = 0.;
441  for ( int i = 1; i <= 3; i++ ) {
442  epsN += strain.at(i) * N.at(imp, i);
443  }
444  double epsNpl = epsN - sigmaN.at(imp) / EN;
445  double aux = epsNpl * mw.at(imp);
446  Exx += aux * N.at(imp, 1);
447  Eyy += aux * N.at(imp, 2);
448  Gamma += aux * N.at(imp, 3);
449  }
450  }
451  plasticStrain.at(1) = 1.5 * Exx - 0.5 * Eyy;
452  plasticStrain.at(2) = -0.5 * Exx + 1.5 * Eyy;
453  plasticStrain.at(3) = 4. * Gamma;
454  StructuralMaterial :: giveFullSymVectorForm( answer, plasticStrain, gp->giveMaterialMode() );
455  return 1;
456  } else {
457  return StructuralMaterial :: giveIPValue(answer, gp, type, tStep);
458  }
459 }
460 
462 
464  StructuralMaterialStatus(n, d, g), sigN(0)
465 {}
466 
467 
469 { }
470 
471 void
473 {
475 }
476 
477 void
479 {
481  fprintf(file, "status { sigN ");
482  int nm = sigN.giveSize();
483  for ( int imp = 1; imp <= nm; imp++ ) {
484  fprintf( file, " %f ", sigN.at(imp) );
485  }
486  fprintf(file, "}\n");
487 }
488 
489 void
491 {
492  sigN = tempSigN;
494 }
495 
498 {
499  return StructuralMaterialStatus :: saveContext(stream, mode, obj);
500 }
501 
504 {
505  return StructuralMaterialStatus :: restoreContext(stream, mode, obj);
506 }
507 
508 #endif // end of old implementation
509 } // 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.
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
Definition: gausspoint.h:191
int numberOfMicroplanes
Number of microplanes.
M1Material(int n, Domain *d)
Constructor.
Definition: microplane_m1.C:46
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
Definition: structuralms.h:137
void letTempNormalMplaneStressesBe(FloatArray sigmaN)
Definition: microplane_m1.h:69
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
Definition: material.C:244
GaussPoint * gp
Associated integration point.
Class and object Domain.
Definition: domain.h:115
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 ...
double E
Young&#39;s modulus.
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
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 & at(int i)
Coefficient access function.
Definition: floatarray.h:131
void letTempNormalMplanePlasticStrainsBe(FloatArray epsilonpN)
Definition: microplane_m1.h:70
This class implements a structural material status information.
Definition: structuralms.h:65
const FloatArray & giveNormalMplaneStresses()
Definition: microplane_m1.h:72
void letPlasticStateIndicatorsBe(IntArray plSt)
Definition: microplane_m1.h:71
Microplane * giveMicroplane(int i, GaussPoint *masterGp)
Returns i-th microplane belonging to master-macro-integration point. )-based indexing.
MaterialMode
Type representing material mode of integration point.
Definition: materialmode.h:89
M1MaterialStatus(int n, Domain *d, GaussPoint *g)
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver&#39;s output to given stream.
Definition: structuralms.C:73
Class implementing an array of integers.
Definition: intarray.h:61
const FloatArray & giveNormalMplanePlasticStrains()
Definition: microplane_m1.h:74
int & at(int i)
Coefficient access function.
Definition: intarray.h:103
MatResponseMode
Describes the character of characteristic material matrix.
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
Sets receiver to be a - b.
Definition: floatarray.C:341
static void giveFullSymVectorForm(FloatArray &answer, const FloatArray &vec, MaterialMode matMode)
Converts the reduced unsymmetric Voigt vector (2nd order tensor) to full form.
virtual void initTempStatus(GaussPoint *gp)
Initializes temporary variables stored in integration point status at the beginning of new time step...
Abstract base class for all microplane models.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
StructuralMaterialStatus(int n, Domain *d, GaussPoint *g)
Constructor. Creates new StructuralMaterialStatus with number n, belonging to domain d and Integratio...
Definition: structuralms.C:42
#define E(p)
Definition: mdm.C:368
#define M_PI
Definition: mathfem.h:52
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
double nu
Poisson&#39;s ratio.
Class representing microplane integration point in finite element program.
Definition: microplane.h:74
void times(double f)
Multiplies receiver by factor f.
Definition: floatmatrix.C:1594
#define N(p, q)
Definition: mdm.C:367
const FloatArray & giveTempStrainVector() const
Returns the const pointer to receiver&#39;s temporary strain vector.
Definition: structuralms.h:115
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
double at(int i, int j) const
Coefficient access function.
Definition: floatmatrix.h:176
double computeNormalStrainComponent(Microplane *mplane, const FloatArray &macroStrain)
Computes the length of normal strain vector on given microplane.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver&#39;s output to given stream.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
Definition: structuralms.C:157
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 ...
Class representing vector of real numbers.
Definition: floatarray.h:82
double N[MAX_NUMBER_OF_MICROPLANES][6]
Normal projection tensors for all microplanes.
#define _IFT_M1Material_s0
Definition: microplane_m1.h:51
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
#define _IFT_M1Material_hn
Definition: microplane_m1.h:52
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
Definition: structuralms.h:135
double microplaneWeights[MAX_NUMBER_OF_MICROPLANES]
Integration weights of microplanes.
const FloatArray & giveStressVector() const
Returns the const pointer to receiver&#39;s stress vector.
Definition: structuralms.h:107
virtual int hasMaterialModeCapability(MaterialMode mode)
Tests if material supports material mode.
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
void zero()
Zeroes all coefficients of receiver.
Definition: floatarray.C:658
virtual void giveRealStressVector_3d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
Default implementation relies on giveRealStressVector for second Piola-Kirchoff stress.
Definition: microplane_m1.C:70
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: microplane_m1.C:50
void times(double s)
Multiplies receiver with scalar.
Definition: floatarray.C:818
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.
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
virtual void giveRealStressVector_PlaneStress(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
Default implementation relies on giveRealStressVector_StressControl.
const IntArray & givePlasticStateIndicators()
Definition: microplane_m1.h:76
REGISTER_Material(DummyMaterial)
#define IR_GIVE_OPTIONAL_FIELD(__ir, __value, __id)
Macro facilitating the use of input record reading methods.
Definition: inputrecord.h:78
int giveSize() const
Definition: intarray.h:203
int giveSize() const
Returns the size of receiver.
Definition: floatarray.h:218
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
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
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&#39;s strain vector.
Definition: structuralms.h:105
const FloatArray & giveTempNormalMplaneStresses()
Definition: microplane_m1.h:73
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
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:30 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011