OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
misesmatnl.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 "misesmatnl.h"
36 #include "../sm/Elements/structuralelement.h"
37 #include "gausspoint.h"
38 #include "floatmatrix.h"
39 #include "floatarray.h"
40 #include "mathfem.h"
41 #include "sparsemtrx.h"
42 #include "nonlocalmaterialext.h"
43 #include "contextioerr.h"
44 #include "classfactory.h"
45 #include "dynamicinputrecord.h"
46 #include "datastream.h"
47 
48 namespace oofem {
49 REGISTER_Material(MisesMatNl);
50 
52 {
53  Rf = 0.;
54  exponent = 1.;
55  averType = 0;
56 }
57 
58 
60 { }
61 
62 
63 void
65  const FloatArray &totalStrain, TimeStep *tStep)
66 {
67  OOFEM_ERROR("3D mode not supported");
68 }
69 
70 
71 void
73  const FloatArray &totalStrain, TimeStep *tStep)
74 {
75  MisesMatNlStatus *nlStatus = static_cast< MisesMatNlStatus * >( this->giveStatus(gp) );
76 
77  double tempDam;
78  performPlasticityReturn(gp, totalStrain, tStep);
79  tempDam = this->computeDamage(gp, tStep);
80  answer.beScaled(1.0 - tempDam, nlStatus->giveTempEffectiveStress());
81  nlStatus->setTempDamage(tempDam);
82  nlStatus->letTempStrainVectorBe(totalStrain);
83  nlStatus->letTempStressVectorBe(answer);
84 }
85 
86 
87 void
89 {
90  answer.resize(1, 1);
92  double E = lmat->give('E', gp);
93  MisesMatNlStatus *status = static_cast< MisesMatNlStatus * >( this->giveStatus(gp) );
94  double kappa = status->giveCumulativePlasticStrain();
95  double tempKappa = status->giveTempCumulativePlasticStrain();
96  double tempDamage = status->giveTempDamage();
97  double damage = status->giveDamage();
98  answer.at(1, 1) = ( 1 - tempDamage ) * E;
99  if ( mode != TangentStiffness ) {
100  return;
101  }
102 
103  if ( tempKappa <= kappa ) { // elastic loading - elastic stiffness plays the role of tangent stiffness
104  return;
105  }
106 
107  // === plastic loading ===
108  const FloatArray &stressVector = status->giveTempEffectiveStress();
109  double stress = stressVector.at(1);
110  answer.at(1, 1) = ( 1. - tempDamage ) * E * H / ( E + H );
111  if ( tempDamage > damage ) {
112  double nlKappa;
113  this->computeCumPlasticStrain(nlKappa, gp, tStep);
114  answer.at(1, 1) -= ( 1 - mm ) * computeDamageParamPrime(nlKappa) * E / ( E + H ) * stress * sgn(stress);
115  }
116 }
117 
118 
119 void
121 {
122  /* Implements the service updating local variables in given integration points,
123  * which take part in nonlocal average process. Actually, no update is necessary,
124  * because the value used for nonlocal averaging is strain vector used for nonlocal secant stiffness
125  * computation. It is therefore necessary only to store local strain in corresponding status.
126  * This service is declared at StructuralNonlocalMaterial level.
127  */
128 
129  double cumPlasticStrain;
130  MisesMatNlStatus *nlstatus = static_cast< MisesMatNlStatus * >( this->giveStatus(gp) );
131 
132  this->initTempStatus(gp);
133  this->performPlasticityReturn(gp, strainVector, tStep);
134  this->computeLocalCumPlasticStrain(cumPlasticStrain, gp, tStep);
135  // standard formulation based on averaging of equivalent strain
136  nlstatus->setLocalCumPlasticStrainForAverage(cumPlasticStrain);
137 
138  // influence of damage on weight function
139  if ( averType >= 2 && averType <= 5 ) {
141  }
142 }
143 
144 
145 void
147 {
148  MisesMatNlStatus *nonlocStatus, *status = static_cast< MisesMatNlStatus * >( this->giveStatus(gp) );
149  auto list = this->giveIPIntegrationList(gp);
150  std :: vector< localIntegrationRecord > :: iterator pos, postarget;
151 
152  // find the current Gauss point (target) in the list of it neighbors
153  for ( pos = list->begin(); pos != list->end(); ++pos ) {
154  if ( pos->nearGp == gp ) {
155  postarget = pos;
156  }
157  }
158 
159  Element *elem = gp->giveElement();
160  FloatArray coords;
161  elem->computeGlobalCoordinates( coords, gp->giveNaturalCoordinates() );
162  double xtarget = coords.at(1);
163 
164  double w, wsum = 0., x, xprev, damage, damageprev = 0.0;
165  Element *nearElem;
166 
167  // process the list from the target to the end
168  double distance = 0.; // distance modified by damage
169  xprev = xtarget;
170  for ( pos = postarget; pos != list->end(); ++pos ) {
171  nearElem = ( pos->nearGp )->giveElement();
172  nearElem->computeGlobalCoordinates( coords, pos->nearGp->giveNaturalCoordinates() );
173  x = coords.at(1);
174  nonlocStatus = static_cast< MisesMatNlStatus * >( this->giveStatus(pos->nearGp) );
175  damage = nonlocStatus->giveTempDamage();
176  if ( pos != postarget ) {
177  distance += ( x - xprev ) * 0.5 * ( computeDistanceModifier(damage) + computeDistanceModifier(damageprev) );
178  }
179 
180  w = computeWeightFunction(distance) * nearElem->computeVolumeAround(pos->nearGp);
181  pos->weight = w;
182  wsum += w;
183  xprev = x;
184  damageprev = damage;
185  }
186 
187  // process the list from the target to the beginning
188  distance = 0.;
189  for ( pos = postarget; pos != list->begin(); --pos ) {
190  nearElem = ( pos->nearGp )->giveElement();
191  nearElem->computeGlobalCoordinates( coords, pos->nearGp->giveNaturalCoordinates() );
192  x = coords.at(1);
193  nonlocStatus = static_cast< MisesMatNlStatus * >( this->giveStatus(pos->nearGp) );
194  damage = nonlocStatus->giveTempDamage();
195  if ( pos != postarget ) {
196  distance += ( xprev - x ) * 0.5 * ( computeDistanceModifier(damage) + computeDistanceModifier(damageprev) );
197  w = computeWeightFunction(distance) * nearElem->computeVolumeAround(pos->nearGp);
198  pos->weight = w;
199  wsum += w;
200  }
201 
202  xprev = x;
203  damageprev = damage;
204  }
205 
206  // the beginning must be treated separately
207  pos = list->begin();
208  if ( pos != postarget ) {
209  nearElem = ( pos->nearGp )->giveElement();
210  nearElem->computeGlobalCoordinates( coords, pos->nearGp->giveNaturalCoordinates() );
211  x = coords.at(1);
212  nonlocStatus = static_cast< MisesMatNlStatus * >( this->giveStatus(pos->nearGp) );
213  damage = nonlocStatus->giveTempDamage();
214  distance += ( xprev - x ) * 0.5 * ( computeDistanceModifier(damage) + computeDistanceModifier(damageprev) );
215  w = computeWeightFunction(distance) * nearElem->computeVolumeAround(pos->nearGp);
216  pos->weight = w;
217  wsum += w;
218  }
219 
220  status->setIntegrationScale(wsum);
221 }
222 
223 double
225 {
226  switch ( averType ) {
227  case 2: return 1. / ( Rf / cl + ( 1. - Rf / cl ) * pow(1. - damage, exponent) );
228 
229  case 3: if ( damage == 0. ) {
230  return 1.;
231  } else {
232  return 1. / ( 1. - ( 1. - Rf / cl ) * pow(damage, exponent) );
233  }
234 
235  case 4: return 1. / pow(Rf / cl, damage);
236 
237  case 5: return ( 2. * cl ) / ( cl + Rf + ( cl - Rf ) * cos(M_PI * damage) );
238 
239  default: return 1.;
240  }
241 }
242 
243 void
245 {
246  double nonlocalContribution, nonlocalCumPlasticStrain = 0.0;
247  MisesMatNlStatus *nonlocStatus, *status = static_cast< MisesMatNlStatus * >( this->giveStatus(gp) );
248 
249  this->buildNonlocalPointTable(gp);
250  this->updateDomainBeforeNonlocAverage(tStep);
251  double localCumPlasticStrain = status->giveLocalCumPlasticStrainForAverage();
252  // compute nonlocal cumulative plastic strain
253  auto list = this->giveIPIntegrationList(gp);
254 
255  for ( auto &lir: *list ) {
256  nonlocStatus = static_cast< MisesMatNlStatus * >( this->giveStatus(lir.nearGp) );
257  nonlocalContribution = nonlocStatus->giveLocalCumPlasticStrainForAverage();
258  if ( nonlocalContribution > 0 ) {
259  nonlocalContribution *= lir.weight;
260  }
261 
262  nonlocalCumPlasticStrain += nonlocalContribution;
263  }
264 
265  double scale = status->giveIntegrationScale();
266  if ( scaling == ST_Standard ) { // standard rescaling
267  nonlocalCumPlasticStrain *= 1. / scale;
268  } else if ( scaling == ST_Borino ) { // Borino modification
269  if ( scale > 1. ) {
270  nonlocalCumPlasticStrain *= 1. / scale;
271  } else {
272  nonlocalCumPlasticStrain += ( 1. - scale ) * status->giveLocalCumPlasticStrainForAverage();
273  }
274  }
275 
276  kappa = mm * nonlocalCumPlasticStrain + ( 1. - mm ) * localCumPlasticStrain;
277 }
278 
279 Interface *
281 {
283  return static_cast< StructuralNonlocalMaterialExtensionInterface * >(this);
284  } else if ( type == NonlocalMaterialStiffnessInterfaceType ) {
285  return static_cast< NonlocalMaterialStiffnessInterface * >(this);
286  } else {
287  return NULL;
288  }
289 }
290 
291 
294 {
295  IRResultType result; // Required by IR_GIVE_FIELD macro
296 
297  result = MisesMat :: initializeFrom(ir);
298  if ( result != IRRT_OK ) return result;
300  if ( result != IRRT_OK ) return result;
301 
302  averType = 0;
304  if ( averType == 2 ) {
305  exponent = 0.5; // default value for averaging type 2
306  }
307 
308  if ( averType == 3 ) {
309  exponent = 1.; // default value for averaging type 3
310  }
311 
312  if ( averType == 2 || averType == 3 ) {
314  }
315 
316  if ( averType >= 2 && averType <= 5 ) {
318  }
319 
320  return IRRT_OK;
321 }
322 
323 
324 void
326 {
329 
331 
332  if ( averType == 2 || averType == 3 ) {
334  }
335 
336  if ( averType >= 2 && averType <= 5 ) {
338  }
339 }
340 
341 
342 double
344 {
345  MisesMatNlStatus *nlStatus = static_cast< MisesMatNlStatus * >( this->giveStatus(gp) );
346  double nlKappa;
347  this->computeCumPlasticStrain(nlKappa, gp, tStep);
348  double dam, tempDam;
349  dam = nlStatus->giveDamage();
350  tempDam = this->computeDamageParam(nlKappa);
351  if ( tempDam < dam ) {
352  tempDam = dam;
353  }
354 
355  return tempDam;
356 }
357 
358 
359 void
361  GaussPoint *gp, TimeStep *tStep)
362 {
363  double coeff;
364  MisesMatNlStatus *status = static_cast< MisesMatNlStatus * >( this->giveStatus(gp) );
365  auto list = status->giveIntegrationDomainList();
366  MisesMatNl *rmat;
367  FloatArray rcontrib, lcontrib;
368  IntArray loc, rloc;
369 
370  FloatMatrix contrib;
371 
372  if ( this->giveLocalNonlocalStiffnessContribution(gp, loc, s, lcontrib, tStep) == 0 ) {
373  return;
374  }
375 
376  for ( auto &lir: *list ) {
377  rmat = dynamic_cast< MisesMatNl * >( lir.nearGp->giveMaterial() );
378  if ( rmat ) {
379  rmat->giveRemoteNonlocalStiffnessContribution(lir.nearGp, rloc, s, rcontrib, tStep);
380  coeff = gp->giveElement()->computeVolumeAround(gp) * lir.weight / status->giveIntegrationScale();
381 
382  contrib.clear();
383  contrib.plusDyadUnsym(lcontrib, rcontrib, - 1.0 * coeff);
384  dest.assemble(loc, rloc, contrib);
385  }
386  }
387 }
388 
389 
390 std :: vector< localIntegrationRecord > *
392 {
393  MisesMatNlStatus *status = static_cast< MisesMatNlStatus * >( this->giveStatus(gp) );
394  this->buildNonlocalPointTable(gp);
395  return status->giveIntegrationDomainList();
396 }
397 
398 
399 int
401  FloatArray &lcontrib, TimeStep *tStep)
402 {
403  double nlKappa, damage, tempDamage, dDamF;
404  MisesMatNlStatus *status = static_cast< MisesMatNlStatus * >( this->giveStatus(gp) );
405  StructuralElement *elem = static_cast< StructuralElement * >( gp->giveElement() );
406  FloatMatrix b;
407 
408  this->computeCumPlasticStrain(nlKappa, gp, tStep);
409  damage = status->giveDamage();
410  tempDamage = status->giveTempDamage();
411  if ( ( tempDamage - damage ) > 0 ) {
412  const FloatArray &stress = status->giveTempEffectiveStress();
413  elem->giveLocationArray(loc, s);
414  elem->computeBmatrixAt(gp, b);
415  dDamF = computeDamageParamPrime(nlKappa);
416  lcontrib.clear();
417  lcontrib.plusProduct(b, stress, mm * dDamF);
418  }
419 
420  return 1;
421 }
422 
423 
424 void
426  FloatArray &rcontrib, TimeStep *tStep)
427 {
428  double kappa, tempKappa;
429  MisesMatNlStatus *status = static_cast< MisesMatNlStatus * >( this->giveStatus(gp) );
430  StructuralElement *elem = static_cast< StructuralElement * >( gp->giveElement() );
431  FloatMatrix b;
432 
433  elem->giveLocationArray(rloc, s);
434  elem->computeBmatrixAt(gp, b);
435  kappa = status->giveCumulativePlasticStrain();
436  tempKappa = status->giveTempCumulativePlasticStrain();
437 
438  rcontrib.clear();
439  if ( ( tempKappa - kappa ) > 0 ) {
441  double E = lmat->give('E', gp);
442  const FloatArray &stress = status->giveTempEffectiveStress();
443  if ( gp->giveMaterialMode() == _1dMat ) {
444  double coeff = sgn( stress.at(1) ) * E / ( E + H );
445  rcontrib.plusProduct(b, stress, coeff);
446  return;
447  }
448  }
449  rcontrib.resize(b.giveNumberOfColumns());
450  rcontrib.zero();
451 }
452 
453 
454 /*********************************************status**************************************************************/
455 
458 {
460 }
461 
462 
464 { }
465 
466 
467 void
469 {
471  fprintf(file, "status { ");
472  fprintf(file, "kappa %f, damage %f ", this->kappa, this->damage);
473  fprintf(file, "}\n");
474 }
475 
476 
477 void
479 //
480 // initializes temp variables according to variables form previous equlibrium state.
481 // builds new crackMap
482 //
483 {
485 }
486 
487 
488 void
490 //
491 // updates variables (nonTemp variables describing situation at previous equilibrium state)
492 // after a new equilibrium state has been reached
493 // temporary variables are having values corresponding to newly reched equilibrium.
494 //
495 {
497 }
498 
499 
502 //
503 // saves full information stored in this Status
504 // no temp variables stored
505 //
506 {
507  contextIOResultType iores;
508  // save parent class status
509  if ( ( iores = MisesMatStatus :: saveContext(stream, mode, obj) ) != CIO_OK ) {
510  THROW_CIOERR(iores);
511  }
512 
513  //if (!stream.write(&localEquivalentStrainForAverage,1)) THROW_CIOERR(CIO_IOERR);
514  return CIO_OK;
515 }
516 
517 
520 //
521 // restores full information stored in stream to this Status
522 //
523 {
524  contextIOResultType iores;
525  // read parent class status
526  if ( ( iores = MisesMatStatus :: restoreContext(stream, mode, obj) ) != CIO_OK ) {
527  THROW_CIOERR(iores);
528  }
529 
530  // read raw data
531  //if (!stream.read (&localEquivalentStrainForAverage,1)) THROW_CIOERR(CIO_IOERR);
532 
533  return CIO_OK;
534 }
535 
536 
537 Interface *
539 {
541  return static_cast< StructuralNonlocalMaterialStatusExtensionInterface * >(this);
542  } else {
543  return MisesMatStatus :: giveInterface(type);
544  }
545 }
546 
547 
548 int
550 {
551  MisesMatNlStatus *nlStatus = static_cast< MisesMatNlStatus * >( this->giveStatus(ip) );
552 
553  this->buildNonlocalPointTable(ip);
554  this->updateDomainBeforeNonlocAverage(tStep);
555 
556  return buff.write( nlStatus->giveLocalCumPlasticStrainForAverage() );
557 }
558 
559 
560 int
562 {
563  int result;
564  MisesMatNlStatus *nlStatus = static_cast< MisesMatNlStatus * >( this->giveStatus(ip) );
566 
567  result = buff.read(localCumPlasticStrainForAverage);
568  nlStatus->setLocalCumPlasticStrainForAverage(localCumPlasticStrainForAverage);
569  return result;
570 }
571 
572 
573 int
575 {
576  // Note: nlStatus localStrainVectorForAverage memeber must be properly sized!
577  // IDNLMaterialStatus *nlStatus = (IDNLMaterialStatus*) this -> giveStatus (ip);
578  return buff.givePackSizeOfDouble(1);
579 }
580 
581 } // end namespace oofem
virtual void NonlocalMaterialStiffnessInterface_addIPContribution(SparseMtrx &dest, const UnknownNumberingScheme &s, GaussPoint *gp, TimeStep *tStep)
Computes and adds IP contributions to destination matrix.
Definition: misesmatnl.C:360
void computeLocalCumPlasticStrain(double &kappa, GaussPoint *gp, TimeStep *tStep)
Definition: misesmatnl.h:121
Abstract base class for all nonlocal structural materials.
void setField(int item, InputFieldType id)
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
Definition: gausspoint.h:191
int giveNumberOfColumns() const
Returns number of columns of receiver.
Definition: floatmatrix.h:158
Mises nonlocal material.
Definition: misesmatnl.h:91
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
Definition: structuralms.h:137
This class implements an isotropic elastoplastic material with Mises yield condition, associated flow rule and linear isotropic hardening.
Definition: misesmat.h:72
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
Definition: material.C:244
void updateDomainBeforeNonlocAverage(TimeStep *tStep)
Updates data in all integration points before nonlocal average takes place.
Class and object Domain.
Definition: domain.h:115
virtual int assemble(const IntArray &loc, const FloatMatrix &mat)=0
Assembles sparse matrix from contribution of local elements.
virtual Interface * giveInterface(InterfaceType)
Interface requesting service.
Definition: misesmatnl.C:538
#define _IFT_MisesMatNl_exp
Definition: misesmatnl.h:46
Base class for all matrices stored in sparse format.
Definition: sparsemtrx.h:60
virtual int packUnknowns(DataStream &buff, TimeStep *tStep, GaussPoint *ip)
Pack all necessary data of integration point (according to element parallel_mode) into given communic...
Definition: misesmatnl.C:549
double H
Hardening modulus.
Definition: misesmat.h:85
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
Definition: datastream.h:54
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
Definition: misesmatnl.C:489
double & at(int i)
Coefficient access function.
Definition: floatarray.h:131
double sgn(double i)
Returns the signum of given value (if value is < 0 returns -1, otherwise returns 1) ...
Definition: mathfem.h:91
void giveRemoteNonlocalStiffnessContribution(GaussPoint *gp, IntArray &rloc, const UnknownNumberingScheme &s, FloatArray &rcontrib, TimeStep *tStep)
Computes the "remote" part of nonlocal stiffness contribution assembled for given integration point...
Definition: misesmatnl.C:425
void clear()
Clears receiver (zero size).
Definition: floatarray.h:206
double giveCumulativePlasticStrain()
Definition: misesmat.h:197
virtual std::vector< localIntegrationRecord > * NonlocalMaterialStiffnessInterface_giveIntegrationDomainList(GaussPoint *gp)
Returns integration list of receiver.
Definition: misesmatnl.C:391
double giveTempCumulativePlasticStrain()
Definition: misesmat.h:198
double giveTempDamage()
Definition: misesmat.h:195
void buildNonlocalPointTable(GaussPoint *gp)
Builds list of integration points which take part in nonlocal average in given integration point...
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
Definition: misesmat.C:861
Abstract base class for all finite elements.
Definition: element.h:145
Element * giveElement()
Returns corresponding element to receiver.
Definition: gausspoint.h:188
ScalingType scaling
Parameter specifying the type of scaling of nonlocal weight function.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
Definition: misesmatnl.C:501
std::vector< localIntegrationRecord > * giveIntegrationDomainList()
Returns integration list of receiver.
double computeDistanceModifier(double damage)
Definition: misesmatnl.C:224
void modifyNonlocalWeightFunctionAround(GaussPoint *gp)
Definition: misesmatnl.C:146
void plusDyadUnsym(const FloatArray &a, const FloatArray &b, double dV)
Adds to the receiver the product .
Definition: floatmatrix.C:811
#define _IFT_MisesMatNl_rf
Definition: misesmatnl.h:47
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver&#39;s output to given stream.
Definition: structuralms.C:73
int giveLocalNonlocalStiffnessContribution(GaussPoint *gp, IntArray &loc, const UnknownNumberingScheme &s, FloatArray &lcontrib, TimeStep *tStep)
Computes the "local" part of nonlocal stiffness contribution assembled for given integration point...
Definition: misesmatnl.C:400
Class implementing an array of integers.
Definition: intarray.h:61
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.
double computeDamageParam(double tempKappa)
Definition: misesmat.C:369
#define THROW_CIOERR(e)
Definition: contextioerr.h:61
This class is a abstract base class for all linear elastic material models in a finite element proble...
Mises Nonlocal material status.
Definition: misesmatnl.h:55
virtual void giveRealStressVector_3d(FloatArray &answer, GaussPoint *gp, const FloatArray &strainVector, TimeStep *tStep)
Default implementation relies on giveRealStressVector for second Piola-Kirchoff stress.
Definition: misesmatnl.C:64
virtual Interface * giveInterface(InterfaceType)
Interface requesting service.
Definition: misesmatnl.C:280
IRResultType initializeFrom(InputRecord *ir)
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
Definition: misesmat.C:815
void performPlasticityReturn(GaussPoint *gp, const FloatArray &totalStrain, TimeStep *tStep)
Definition: misesmat.C:294
virtual int write(const int *data, int count)=0
Writes count integer values from array pointed by data.
void beScaled(double s, const FloatArray &b)
Sets receiver to be .
Definition: floatarray.C:146
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property &#39;aProperty&#39;.
Definition: material.C:52
Abstract base class for all "structural" finite elements.
double localCumPlasticStrainForAverage
Definition: misesmatnl.h:60
virtual double computeVolumeAround(GaussPoint *gp)
Returns volume related to given integration point.
Definition: element.h:518
virtual void updateBeforeNonlocAverage(const FloatArray &strainVector, GaussPoint *gp, TimeStep *tStep)
Declares the service updating local variables in given integration points, which take part in nonloca...
Definition: misesmatnl.C:120
#define E(p)
Definition: mdm.C:368
virtual ~MisesMatNl()
Definition: misesmatnl.C:59
#define M_PI
Definition: mathfem.h:52
virtual void computeCumPlasticStrain(double &kappa, GaussPoint *gp, TimeStep *tStep)
Computes the nonlocal cumulated plastic strain from its local form.
Definition: misesmatnl.C:244
MisesMatNlStatus(int n, Domain *d, GaussPoint *g)
Definition: misesmatnl.C:456
#define OOFEM_ERROR(...)
Definition: error.h:61
Class Nonlocal Material Stiffness Interface.
virtual void give1dStressStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing 1d stiffness matrix of receiver.
Definition: misesmatnl.C:88
void giveLocationArray(IntArray &locationArray, const UnknownNumberingScheme &s, IntArray *dofIds=NULL) const
Returns the location array (array of code numbers) of receiver for given numbering scheme...
Definition: element.C:390
std::vector< localIntegrationRecord > * giveIPIntegrationList(GaussPoint *gp)
Returns integration list corresponding to given integration point.
Abstract base class allowing to control the way, how equations are assigned to individual DOFs...
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
Definition: misesmatnl.C:519
#define _IFT_MisesMatNl_averagingtype
Definition: misesmatnl.h:45
virtual void giveRealStressVector_1d(FloatArray &answer, GaussPoint *gp, const FloatArray &strainVector, TimeStep *tStep)
Default implementation relies on giveRealStressVector_StressControl.
Definition: misesmatnl.C:72
double at(int i, int j) const
Coefficient access function.
Definition: floatmatrix.h:176
double computeDamageParamPrime(double tempKappa)
Definition: misesmat.C:379
void setTempDamage(double value)
Definition: misesmat.h:220
Class representing vector of real numbers.
Definition: floatarray.h:82
double kappa
Cumulative plastic strain (initial).
Definition: misesmat.h:169
double computeDamage(GaussPoint *gp, TimeStep *tStep)
Definition: misesmatnl.C:343
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
virtual int givePackSizeOfDouble(int count)=0
void setIntegrationScale(double val)
Sets associated integration scale.
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
Definition: structuralms.h:135
double mm
For "undernonlocal" or "overnonlocal" formulation.
double giveLocalCumPlasticStrainForAverage()
Definition: misesmatnl.h:70
virtual int estimatePackSize(DataStream &buff, GaussPoint *ip)
Estimates the necessary pack size to hold all packed data of receiver.
Definition: misesmatnl.C:574
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
const FloatArray & giveTempEffectiveStress()
Definition: misesmat.h:203
Base class for all nonlocal structural material statuses.
Class Interface.
Definition: interface.h:82
void zero()
Zeroes all coefficients of receiver.
Definition: floatarray.C:658
virtual int unpackAndUpdateUnknowns(DataStream &buff, TimeStep *tStep, GaussPoint *ip)
Unpack and updates all necessary data of given integration point (according to element parallel_mode)...
Definition: misesmatnl.C:561
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver&#39;s output to given stream.
Definition: misesmatnl.C:468
virtual Interface * giveInterface(InterfaceType t)
Interface requesting service.
Definition: femcmpnn.h:179
Class representing the a dynamic Input Record.
virtual void computeBmatrixAt(GaussPoint *gp, FloatMatrix &answer, int lowerIndx=1, int upperIndx=ALL_STRAINS)=0
Computes the geometrical matrix of receiver in given integration point.
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
Definition: contextmode.h:43
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
Definition: misesmat.C:893
virtual ~MisesMatNlStatus()
Definition: misesmatnl.C:463
InterfaceType
Enumerative type, used to identify interface type.
Definition: interfacetype.h:43
double giveIntegrationScale()
Returns associated integration scale.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: misesmatnl.C:293
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
MisesMatNl(int n, Domain *d)
Definition: misesmatnl.C:51
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 void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
Definition: misesmat.C:801
the oofem namespace is to define a context or scope in which all oofem names are defined.
void clear()
Sets size of receiver to be an empty matrix. It will have zero rows and zero columns size...
Definition: floatmatrix.h:516
virtual void initTempStatus(GaussPoint *gp)
Initializes temporary variables stored in integration point status at the beginning of new time step...
Definition: material.C:267
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
Definition: misesmatnl.C:478
double cl
Characteristic length of the nonlocal model (its interpretation depends on the type of weight functio...
Class representing integration point in finite element program.
Definition: gausspoint.h:93
Class representing solution step.
Definition: timestep.h:80
virtual int computeGlobalCoordinates(FloatArray &answer, const FloatArray &lcoords)
Computes the global coordinates from given element&#39;s local coordinates.
Definition: element.C:1207
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: misesmat.C:71
virtual double computeWeightFunction(double distance)
Evaluates the basic nonlocal weight function for a given distance between interacting points...
const FloatArray & giveNaturalCoordinates()
Returns coordinate array of receiver.
Definition: gausspoint.h:138
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
Definition: misesmatnl.C:325
void setLocalCumPlasticStrainForAverage(double ls)
Definition: misesmatnl.h:72
void giveInputRecord(DynamicInputRecord &input)
Stores receiver in an input record.
void resize(int s)
Resizes receiver towards requested size.
Definition: floatarray.C:631
LinearElasticMaterial * giveLinearElasticMaterial()
Returns a reference to the basic elastic material.
Definition: misesmat.h:112
void plusProduct(const FloatMatrix &b, const FloatArray &s, double dV)
Adds the product .
Definition: floatarray.C:226

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