OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
trabbonenl3d.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 #include "trabbonenl3d.h"
35 #include "../sm/Elements/structuralelement.h"
36 #include "gausspoint.h"
37 #include "floatmatrix.h"
38 #include "floatarray.h"
39 #include "mathfem.h"
40 #include "sparsemtrx.h"
41 #include "nonlocalmaterialext.h"
42 #include "classfactory.h"
43 #include "dynamicinputrecord.h"
44 #include "unknownnumberingscheme.h"
45 
46 #ifdef __OOFEG
47  #include "oofeggraphiccontext.h"
48  #include "connectivitytable.h"
49 #endif
50 
51 #include <cstdlib>
52 
53 namespace oofem {
54 REGISTER_Material(TrabBoneNL3D);
55 
57 {
58  R = 0.;
59 }
60 
61 
63 { }
64 
65 
66 void
68 {
69  FloatArray SDstrainVector;
70  double cumPlastStrain;
71  TrabBoneNL3DStatus *nlStatus = static_cast< TrabBoneNL3DStatus * >( this->giveStatus(gp) );
72 
73  this->initTempStatus(gp);
74  this->giveStressDependentPartOfStrainVector(SDstrainVector, gp, strainVector, tStep, VM_Total);
75 
76  nlStatus->letTempStrainVectorBe(strainVector);
77 
78  this->performPlasticityReturn(gp, strainVector, tStep);
79  this->computeLocalCumPlastStrain(cumPlastStrain, strainVector, gp, tStep);
80  nlStatus->setLocalCumPlastStrainForAverage(cumPlastStrain);
81 }
82 
83 
84 void
86  MatResponseMode mode, GaussPoint *gp,
87  TimeStep *tStep)
88 {
89  TrabBoneNL3DStatus *nlStatus = static_cast< TrabBoneNL3DStatus * >( this->giveStatus(gp) );
90 
91  double tempDam, beta, nlKappa;
92  FloatArray tempEffectiveStress, tempTensor2, prodTensor, plasFlowDirec;
93  FloatMatrix elasticity, compliance, SSaTensor, secondTerm, thirdTerm, tangentMatrix;
94 
95  if ( mode == ElasticStiffness ) {
96  this->constructAnisoComplTensor(compliance);
97  elasticity.beInverseOf(compliance);
98 
99  answer = elasticity;
100  } else if ( mode == SecantStiffness ) {
101  this->constructAnisoComplTensor(compliance);
102  elasticity.beInverseOf(compliance);
103  tempDam = nlStatus->giveTempDam();
104 
105  answer = elasticity;
106  answer.times(1.0 - tempDam);
107  } else if ( mode == TangentStiffness ) {
108  double kappa = nlStatus->giveKappa();
109  double tempKappa = nlStatus->giveTempKappa();
110  double dKappa = tempKappa - kappa;
111  if ( dKappa < 10.e-9 ) {
112  dKappa = 0;
113  }
114 
115  if ( dKappa > 0.0 ) {
116  // Imports
117  tempEffectiveStress = nlStatus->giveTempEffectiveStress();
118  this->computeCumPlastStrain(nlKappa, gp, tStep);
119  tempDam = nlStatus->giveTempDam();
120  double dam = nlStatus->giveDam();
121  plasFlowDirec = nlStatus->givePlasFlowDirec();
122  SSaTensor = nlStatus->giveSSaTensor();
123  beta = nlStatus->giveBeta();
124  // Construction of the dyadic product tensor
125  prodTensor.beTProductOf(SSaTensor, plasFlowDirec);
126  // Construction of the tangent stiffness third term
127  if ( tempDam - dam > 0 ) {
128  thirdTerm.beDyadicProductOf(tempEffectiveStress, prodTensor);
129  thirdTerm.times(-expDam * critDam * exp(-expDam * nlKappa) * ( 1.0 - mParam ) / beta);
130  } else {
131  thirdTerm.resize(6, 6);
132  }
133 
134  // Construction of the tangent stiffness second term
135  tempTensor2.beProductOf(SSaTensor, plasFlowDirec);
136  secondTerm.beDyadicProductOf(tempTensor2, prodTensor);
137  secondTerm.times(-( 1.0 - tempDam ) / beta);
138  // Construction of the tangent stiffness
139  tangentMatrix = SSaTensor;
140  tangentMatrix.times(1.0 - tempDam);
141  tangentMatrix.add(secondTerm);
142  tangentMatrix.add(thirdTerm);
143 
144  answer = tangentMatrix;
145  } else {
146  // Import of state variables
147  tempDam = nlStatus->giveTempDam();
148  // Construction of the tangent stiffness
149  this->constructAnisoComplTensor(compliance);
150  elasticity.beInverseOf(compliance);
151  answer = elasticity;
152  answer.times(1.0 - tempDam);
153  }
154  }
155 
156  nlStatus->setSmtrx(answer);
157 }
158 
159 
160 void
162 {
163  TrabBoneNL3DStatus *nlStatus = static_cast< TrabBoneNL3DStatus * >( this->giveStatus(gp) );
164  auto list = nlStatus->giveIntegrationDomainList();
165  TrabBoneNL3D *rmat;
166 
167  double coeff;
168  FloatArray rcontrib, lcontrib;
169  IntArray loc, rloc;
170 
171  FloatMatrix contrib;
172 
173  if ( this->giveLocalNonlocalStiffnessContribution(gp, loc, s, lcontrib, tStep) == 0 ) {
174  return;
175  }
176 
177  for ( auto &lir: *list ) {
178  rmat = dynamic_cast< TrabBoneNL3D * >( lir.nearGp->giveMaterial() );
179  if ( rmat ) {
180  rmat->giveRemoteNonlocalStiffnessContribution(lir.nearGp, rloc, s, rcontrib, tStep);
181  coeff = gp->giveElement()->computeVolumeAround(gp) * lir.weight / nlStatus->giveIntegrationScale();
182 
183  contrib.clear();
184  contrib.plusDyadUnsym(lcontrib, rcontrib, - 1.0 * coeff);
185  dest.assemble(loc, rloc, contrib);
186  }
187  }
188 }
189 
190 std :: vector< localIntegrationRecord > *
192 {
193  TrabBoneNL3DStatus *nlStatus = static_cast< TrabBoneNL3DStatus * >( this->giveStatus(gp) );
194  this->buildNonlocalPointTable(gp);
195  return nlStatus->giveIntegrationDomainList();
196 }
197 
198 int
200  FloatArray &lcontrib, TimeStep *tStep)
201 {
202  TrabBoneNL3DStatus *nlStatus = static_cast< TrabBoneNL3DStatus * >( this->giveStatus(gp) );
203  StructuralElement *elem = static_cast< StructuralElement * >( gp->giveElement() );
204 
205  int nrows, nsize;
206  double sum, nlKappa, dDamFunc, dam, tempDam;
207  FloatArray localNu;
208  FloatMatrix b;
209 
210  this->computeCumPlastStrain(nlKappa, gp, tStep);
211  dam = nlStatus->giveDam();
212  tempDam = nlStatus->giveTempDam();
213 
214  if ( ( tempDam - dam ) > 0.0 ) {
215  elem->giveLocationArray(loc, s);
216  localNu = nlStatus->giveTempEffectiveStress();
217 
219  elem->computeBmatrixAt(gp, b);
220  dDamFunc = expDam * critDam * exp(-expDam * nlKappa);
221 
222  nrows = b.giveNumberOfColumns();
223  nsize = localNu.giveSize();
224  lcontrib.resize(nrows);
225  for ( int i = 1; i <= nrows; i++ ) {
226  sum = 0.0;
227  for ( int j = 1; j <= nsize; j++ ) {
228  sum += b.at(j, i) * localNu.at(j);
229  }
230 
231  lcontrib.at(i) = mParam * dDamFunc * sum;
232  }
233 
234  return 1;
235  } else {
236  loc.clear();
237  return 0;
238  }
239 }
240 
241 void
243  FloatArray &rcontrib, TimeStep *tStep)
244 {
245  TrabBoneNL3DStatus *nlStatus = static_cast< TrabBoneNL3DStatus * >( this->giveStatus(gp) );
246  StructuralElement *elem = static_cast< StructuralElement * >( gp->giveElement() );
247 
248  FloatMatrix b;
249 
250  elem->giveLocationArray(rloc, s);
251  elem->computeBmatrixAt(gp, b);
252 
253  double kappa = nlStatus->giveKappa();
254  double tempKappa = nlStatus->giveTempKappa();
255  double dKappa = tempKappa - kappa;
256  if ( dKappa < 10.e-9 ) {
257  dKappa = 0;
258  }
259 
260  if ( dKappa > 0.0 ) {
261  FloatArray remoteNu, prodTensor;
262  const FloatArray &plasFlowDirec = nlStatus->givePlasFlowDirec();
263  const FloatMatrix &SSaTensor = nlStatus->giveSSaTensor();
264  double beta = nlStatus->giveBeta();
265 
266  prodTensor.beTProductOf(SSaTensor, plasFlowDirec);
267  remoteNu = 1 / beta * prodTensor;
268  rcontrib.beTProductOf(b, remoteNu);
269  } else {
270  rcontrib.resize(b.giveNumberOfColumns());
271  rcontrib.zero();
272  }
273 }
274 
275 
276 void
278  const FloatArray &totalStrain, TimeStep *tStep)
279 {
280  TrabBoneNL3DStatus *nlStatus = static_cast< TrabBoneNL3DStatus * >( this->giveStatus(gp) );
281 
282  this->initTempStatus(gp);
283 
284  double tempDam;
285  FloatArray effStress, totalStress, densStress;
286 
287  performPlasticityReturn(gp, totalStrain, tStep);
288  tempDam = computeDamage(gp, tStep);
289  effStress = nlStatus->giveTempEffectiveStress();
290 
291  totalStress = ( 1 - tempDam ) * effStress;
292 
293  for ( int i = 1; i <= 6; i++ ) {
294  if ( sqrt( totalStress.at(i) * totalStress.at(i) ) < 1e-8 ) {
295  totalStress.at(i) = 0.;
296  }
297  }
298 
299  computePlasStrainEnerDensity(gp, totalStrain, totalStress);
300 
301  if ( densCrit != 0. ) {
302  computeDensificationStress(densStress, gp, totalStrain, tStep);
303  answer.add(densStress);
304  }
305 
306  answer = totalStress;
307  nlStatus->setTempDam(tempDam);
308  nlStatus->letTempStrainVectorBe(totalStrain);
309  nlStatus->letTempStressVectorBe(answer);
310 }
311 
312 
313 void
315 {
316  double nonlocalContribution, nonlocalCumPlastStrain = 0.0;
317  TrabBoneNL3DStatus *nonlocStatus, *nlStatus = static_cast< TrabBoneNL3DStatus * >( this->giveStatus(gp) );
318 
319  this->buildNonlocalPointTable(gp);
320  this->updateDomainBeforeNonlocAverage(tStep);
321 
322  auto list = nlStatus->giveIntegrationDomainList();
323 
324  for ( auto &lir: *list ) {
325  nonlocStatus = static_cast< TrabBoneNL3DStatus * >( this->giveStatus(lir.nearGp) );
326  nonlocalContribution = nonlocStatus->giveLocalCumPlastStrainForAverage();
327  nonlocalContribution *= lir.weight;
328  nonlocalCumPlastStrain += nonlocalContribution;
329  }
330 
331  nonlocalCumPlastStrain *= 1. / nlStatus->giveIntegrationScale();
332 
333  double localCumPlastStrain = nlStatus->giveLocalCumPlastStrainForAverage();
334  kappa = mParam * nonlocalCumPlastStrain + ( 1 - mParam ) * localCumPlastStrain;
335 }
336 
337 
338 Interface *
340 {
342  return static_cast< StructuralNonlocalMaterialExtensionInterface * >(this);
343  } else if ( type == NonlocalMaterialStiffnessInterfaceType ) {
344  return static_cast< NonlocalMaterialStiffnessInterface * >(this);
345  } else {
346  return NULL;
347  }
348 }
349 
350 
353 {
354  IRResultType result; // Required by IR_GIVE_FIELD macro
355 
356  result = TrabBone3D :: initializeFrom(ir);
357  if ( result != IRRT_OK ) {
358  return result;
359  }
360 
362  if ( result != IRRT_OK ) {
363  return result;
364  }
365 
367  if ( R < 0.0 ) {
368  R = 0.0;
369  }
370 
371  mParam = 2.;
373 
374  return IRRT_OK;
375 }
376 
377 
378 void
380 {
382  input.setField(this->R, _IFT_TrabBoneNL3D_r);
383  input.setField(this->mParam, _IFT_TrabBoneNL3D_m);
384 }
385 
386 
387 
388 double
390 {
391  double dist = src.distance(coord);
392 
393  if ( ( dist >= 0. ) && ( dist <= this->R ) ) {
394  double help = ( 1. - dist * dist / ( R * R ) );
395  return help * help;
396  }
397 
398  return 0.0;
399 }
400 
401 
405 
408 {
410 }
411 
412 
414 { }
415 
416 
417 void
419 {
421  fprintf(file, "status {");
422  fprintf(file, " plastrains ");
423  for ( auto &val : plasDef ) {
424  fprintf( file, " %.4e", val );
425  }
426 
427  fprintf(file, " ,");
428  fprintf(file, " kappa %.4e ,", kappa);
429  fprintf(file, " dam %.4e ,", tempDam);
430  fprintf(file, " esed %.4e ,", this->tempTSED - this->tempPSED);
431  fprintf(file, " psed %.4e ,", this->tempPSED);
432  fprintf(file, " tsed %.4e", this->tempTSED);
433  fprintf(file, "}\n");
434 }
435 
436 
437 void
439 {
441 }
442 
443 
444 void
446 {
448 }
449 
450 
451 Interface *
453 {
455  return this;
456  } else {
457  return NULL;
458  }
459 }
460 
461 
462 int
464 {
465  abort();
466  return 0;
467  #if 0
468  IDNLMaterialStatus *nlStatus = static_cast< IDNLMaterialStatus * >( this->giveStatus(ip) );
469 
470  this->buildNonlocalPointTable(ip);
471  this->updateDomainBeforeNonlocAverage(tStep);
472 
473  return buff.write( nlStatus->giveLocalEquivalentStrainForAverage() );
474 
475  #endif
476 }
477 
478 int
480 {
481  abort();
482  return 0;
483  #if 0
484  int result;
485  IDNLMaterialStatus *nlStatus = static_cast< IDNLMaterialStatus * >( this->giveStatus(ip) );
486  double localEquivalentStrainForAverage;
487 
488  result = buff.read(localEquivalentStrainForAverage);
489  nlStatus->setLocalEquivalentStrainForAverage(localEquivalentStrainForAverage);
490  return result;
491 
492  #endif
493 }
494 
495 int
497 {
498  abort();
499  return 0;
500  #if 0
501  // Note: nlStatus localStrainVectorForAverage memeber must be properly sized!
502  // IDNLMaterialStatus *nlStatus = (IDNLMaterialStatus*) this -> giveStatus (ip);
503  return buff.givePackSizeOfDouble(1);
504 
505  #endif
506 }
507 
508 //
509 // END: PARALLEL MODE OPTION
511 } // end namespace oofem
virtual std::vector< localIntegrationRecord > * NonlocalMaterialStiffnessInterface_giveIntegrationDomainList(GaussPoint *gp)
Returns integration list of receiver.
Definition: trabbonenl3d.C:191
Abstract base class for all nonlocal structural materials.
void setField(int item, InputFieldType id)
int giveNumberOfColumns() const
Returns number of columns of receiver.
Definition: floatmatrix.h:158
The representation of EngngModel default unknown numbering.
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: trabbonenl3d.C:479
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
Definition: structuralms.h:137
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
Definition: material.C:244
double beta
Parameter which multiplied with the interaction radius cl0 gives its minimum allowed value...
void updateDomainBeforeNonlocAverage(TimeStep *tStep)
Updates data in all integration points before nonlocal average takes place.
This class implements associated Material Status to IDNLMaterial (Nonlocal isotropic damage)...
Definition: idmnl1.h:55
void computeDensificationStress(FloatArray &answer, GaussPoint *gp, const FloatArray &totalStrain, TimeStep *tStep)
Definition: trabbone3d.C:635
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.
void setLocalEquivalentStrainForAverage(double ls)
Sets the localEquivalentStrainForAverage to given value.
Definition: idmnl1.h:78
double giveLocalCumPlastStrainForAverage()
Definition: trabbonenl3d.h:67
const FloatArray & giveTempEffectiveStress() const
Definition: trabbone3d.C:1193
Base class for all matrices stored in sparse format.
Definition: sparsemtrx.h:60
virtual double computeWeightFunction(const FloatArray &src, const FloatArray &coord)
Evaluates the basic nonlocal weight function for two points with given coordinates.
Definition: trabbonenl3d.C:389
void performPlasticityReturn(GaussPoint *gp, const FloatArray &totalStrain, TimeStep *tStep)
Definition: trabbone3d.C:203
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
Definition: datastream.h:54
virtual Interface * giveInterface(InterfaceType it)
Interface requesting service.
Definition: trabbonenl3d.C:339
double & at(int i)
Coefficient access function.
Definition: floatarray.h:131
Trabecular bone nonlocal material model.
Definition: trabbonenl3d.h:83
virtual void computeCumPlastStrain(double &kappa, GaussPoint *gp, TimeStep *tStep)
Definition: trabbonenl3d.C:314
Trabecular bone nonlocal material status.
Definition: trabbonenl3d.h:55
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 ...
Definition: trabbonenl3d.C:85
TrabBoneNL3DStatus(int n, Domain *d, GaussPoint *g)
Definition: trabbonenl3d.C:406
virtual Interface * giveInterface(InterfaceType it)
Interface requesting service.
Definition: trabbonenl3d.C:452
void buildNonlocalPointTable(GaussPoint *gp)
Builds list of integration points which take part in nonlocal average in given integration point...
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: trabbonenl3d.C:463
Element * giveElement()
Returns corresponding element to receiver.
Definition: gausspoint.h:188
std::vector< localIntegrationRecord > * giveIntegrationDomainList()
Returns integration list of receiver.
double computeDamage(GaussPoint *gp, TimeStep *tStep)
Definition: trabbone3d.C:612
void constructAnisoComplTensor(FloatMatrix &answer)
Construct anisotropic compliance tensor.
Definition: trabbone3d.C:686
void plusDyadUnsym(const FloatArray &a, const FloatArray &b, double dV)
Adds to the receiver the product .
Definition: floatmatrix.C:811
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: trabbonenl3d.C:67
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...
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
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 giveLocalEquivalentStrainForAverage()
Returns the local equivalent strain to be averaged.
Definition: idmnl1.h:76
IRResultType initializeFrom(InputRecord *ir)
double distance(const FloatArray &x) const
Computes the distance between position represented by receiver and position given as parameter...
Definition: floatarray.C:489
virtual int write(const int *data, int count)=0
Writes count integer values from array pointed by data.
Abstract base class for all "structural" finite elements.
virtual double computeVolumeAround(GaussPoint *gp)
Returns volume related to given integration point.
Definition: element.h:518
void computeLocalCumPlastStrain(double &kappa, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep)
Computes the local cumulated plastic strain from given strain vector (full form). ...
Definition: trabbonenl3d.h:112
void setSmtrx(FloatMatrix &smt)
Definition: trabbone3d.h:146
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver&#39;s output to given stream.
Definition: trabbonenl3d.C:418
TrabBoneNL3D(int n, Domain *d)
Definition: trabbonenl3d.C:56
void clear()
Clears the array (zero size).
Definition: intarray.h:177
Class Nonlocal Material Stiffness Interface.
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
void times(double f)
Multiplies receiver by factor f.
Definition: floatmatrix.C:1594
Abstract base class allowing to control the way, how equations are assigned to individual DOFs...
void setLocalCumPlastStrainForAverage(double ls)
Definition: trabbonenl3d.h:69
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
Definition: floatarray.C:676
virtual int estimatePackSize(DataStream &buff, GaussPoint *ip)
Estimates the necessary pack size to hold all packed data of receiver.
Definition: trabbonenl3d.C:496
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: trabbonenl3d.C:352
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix^T and anArray.
Definition: floatarray.C:708
double at(int i, int j) const
Coefficient access function.
Definition: floatmatrix.h:176
void computePlasStrainEnerDensity(GaussPoint *gp, const FloatArray &totalStrain, const FloatArray &totalStress)
Definition: trabbone3d.C:54
#define _IFT_TrabBoneNL3D_m
Definition: trabbonenl3d.h:48
#define _IFT_TrabBoneNL3D_r
Definition: trabbonenl3d.h:47
virtual void updateYourself(TimeStep *)
Update equilibrium history variables according to temp-variables.
Definition: trabbone3d.C:1247
void setTempDam(double da)
Definition: trabbone3d.h:139
Class representing vector of real numbers.
Definition: floatarray.h:82
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
const FloatArray & givePlasFlowDirec() const
Definition: trabbone3d.C:1199
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
Definition: structuralms.h:135
double localCumPlastStrainForAverage
Equivalent strain for averaging.
Definition: trabbonenl3d.h:59
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
Definition: floatmatrix.C:1358
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: trabbonenl3d.C:242
const FloatMatrix & giveSSaTensor() const
Definition: trabbone3d.C:1217
Class representing the general Input Record.
Definition: inputrecord.h:101
void add(const FloatMatrix &a)
Adds matrix to the receiver.
Definition: floatmatrix.C:1023
Base class for all nonlocal structural material statuses.
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
Definition: trabbonenl3d.C:445
Class Interface.
Definition: interface.h:82
void zero()
Zeroes all coefficients of receiver.
Definition: floatarray.C:658
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
Definition: trabbonenl3d.C:438
void beDyadicProductOf(const FloatArray &vec1, const FloatArray &vec2)
Assigns to the receiver the dyadic product .
Definition: floatmatrix.C:492
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.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: trabbone3d.C:964
virtual void NonlocalMaterialStiffnessInterface_addIPContribution(SparseMtrx &dest, const UnknownNumberingScheme &s, GaussPoint *gp, TimeStep *tStep)
Computes and adds IP contributions to destination matrix.
Definition: trabbonenl3d.C:161
This class implements associated Material Status to TrabBone3D (trabecular bone material).
Definition: trabbone3d.h:101
InterfaceType
Enumerative type, used to identify interface type.
Definition: interfacetype.h:43
double giveIntegrationScale()
Returns associated integration scale.
virtual void giveRealStressVector_3d(FloatArray &answer, GaussPoint *gp, const FloatArray &strainVector, TimeStep *tStep)
Default implementation relies on giveRealStressVector for second Piola-Kirchoff stress.
Definition: trabbonenl3d.C:277
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
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
Returns the size of receiver.
Definition: floatarray.h:218
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: trabbonenl3d.C:199
the oofem namespace is to define a context or scope in which all oofem names are defined.
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
Definition: trabbonenl3d.C:379
void clear()
Sets size of receiver to be an empty matrix. It will have zero rows and zero columns size...
Definition: floatmatrix.h:516
#define IR_GIVE_FIELD(__ir, __value, __id)
Macro facilitating the use of input record reading methods.
Definition: inputrecord.h:69
virtual ~TrabBoneNL3D()
Definition: trabbonenl3d.C:62
virtual void initTempStatus(GaussPoint *gp)
Initializes temporary variables stored in integration point status at the beginning of new time step...
Definition: material.C:267
void beInverseOf(const FloatMatrix &src)
Modifies receiver to become inverse of given parameter.
Definition: floatmatrix.C:835
Class representing integration point in finite element program.
Definition: gausspoint.h:93
Class representing solution step.
Definition: timestep.h:80
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
Definition: trabbone3d.C:1235
void add(const FloatArray &src)
Adds array src to receiver.
Definition: floatarray.C:156
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:32 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011