OOFEM 3.0
Loading...
Searching...
No Matches
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 - 2025 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"
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
48namespace oofem {
50
54
55
57MisesMatNl :: giveRealStressVector_3d(const FloatArrayF<6> &strain, GaussPoint *gp, TimeStep *tStep) const
58{
59 OOFEM_ERROR("3D mode not supported");
60}
61
62
64MisesMatNl :: giveRealStressVector_1d(const FloatArrayF<1> &totalStrain, GaussPoint *gp, TimeStep *tStep) const
65{
66 auto nlStatus = static_cast< MisesMatNlStatus * >( this->giveStatus(gp) );
67
68 performPlasticityReturn(totalStrain, gp, tStep);
69 double tempDam = this->computeDamage(gp, tStep);
70 FloatArrayF<6> stress = (1.0 - tempDam) * nlStatus->giveTempEffectiveStress();
71 nlStatus->setTempDamage(tempDam);
72 nlStatus->letTempStrainVectorBe(totalStrain);
73 nlStatus->letTempStressVectorBe(stress);
74 return stress[0];
75}
76
77
79MisesMatNl :: give1dStressStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const
80{
81 auto status = static_cast< MisesMatNlStatus * >( this->giveStatus(gp) );
82 double E = linearElasticMaterial.give('E', gp);
83 double kappa = status->giveCumulativePlasticStrain();
84 double tempKappa = status->giveTempCumulativePlasticStrain();
85 double tempDamage = status->giveTempDamage();
86 double damage = status->giveDamage();
87
88 auto tangent = ( 1 - tempDamage ) * E;
89 if ( mode != TangentStiffness ) {
90 return {tangent};
91 }
92
93 if ( tempKappa <= kappa ) { // elastic loading - elastic stiffness plays the role of tangent stiffness
94 return {tangent};
95 }
96
97 // === plastic loading ===
98 const auto &stressVector = status->giveTempEffectiveStress();
99 double stress = stressVector.at(1);
100 tangent = ( 1. - tempDamage ) * E * H / ( E + H );
101 if ( tempDamage > damage ) {
102 double nlKappa = this->computeCumPlasticStrain(gp, tStep);
103 tangent -= ( 1 - mm ) * computeDamageParamPrime(nlKappa) * E / ( E + H ) * stress * sgn(stress);
104 }
105 return {tangent};
106}
107
108
109void
110MisesMatNl :: updateBeforeNonlocAverage(const FloatArray &strainVector, GaussPoint *gp, TimeStep *tStep) const
111{
112 /* Implements the service updating local variables in given integration points,
113 * which take part in nonlocal average process. Actually, no update is necessary,
114 * because the value used for nonlocal averaging is strain vector used for nonlocal secant stiffness
115 * computation. It is therefore necessary only to store local strain in corresponding status.
116 * This service is declared at StructuralNonlocalMaterial level.
117 */
118
119 auto nlstatus = static_cast< MisesMatNlStatus * >( this->giveStatus(gp) );
120
121 this->initTempStatus(gp);
122 this->performPlasticityReturn(strainVector, gp, tStep);
123 double cumPlasticStrain = this->computeLocalCumPlasticStrain(gp, tStep);
124 // standard formulation based on averaging of equivalent strain
125 nlstatus->setLocalCumPlasticStrainForAverage(cumPlasticStrain);
126
127 // influence of damage on weight function
128 if ( averType >= 2 && averType <= 5 ) {
130 }
131}
132
133
134void
135MisesMatNl :: modifyNonlocalWeightFunctionAround(GaussPoint *gp) const
136{
137 MisesMatNlStatus *nonlocStatus, *status = static_cast< MisesMatNlStatus * >( this->giveStatus(gp) );
138 auto list = this->giveIPIntegrationList(gp);
139 std :: vector< localIntegrationRecord > :: iterator pos, postarget;
140
141 // find the current Gauss point (target) in the list of it neighbors
142 for ( pos = list->begin(); pos != list->end(); ++pos ) {
143 if ( pos->nearGp == gp ) {
144 postarget = pos;
145 }
146 }
147
148 Element *elem = gp->giveElement();
149 FloatArray coords;
151 double xtarget = coords.at(1);
152
153 double w, wsum = 0., x, xprev, damage, damageprev = 0.0;
154 Element *nearElem;
155
156 // process the list from the target to the end
157 double distance = 0.; // distance modified by damage
158 xprev = xtarget;
159 for ( pos = postarget; pos != list->end(); ++pos ) {
160 nearElem = ( pos->nearGp )->giveElement();
161 nearElem->computeGlobalCoordinates( coords, pos->nearGp->giveNaturalCoordinates() );
162 x = coords.at(1);
163 nonlocStatus = static_cast< MisesMatNlStatus * >( this->giveStatus(pos->nearGp) );
164 damage = nonlocStatus->giveTempDamage();
165 if ( pos != postarget ) {
166 distance += ( x - xprev ) * 0.5 * ( computeDistanceModifier(damage) + computeDistanceModifier(damageprev) );
167 }
168
169 w = computeWeightFunction(this->cl, distance) * nearElem->computeVolumeAround(pos->nearGp);
170 pos->weight = w;
171 wsum += w;
172 xprev = x;
173 damageprev = damage;
174 }
175
176 // process the list from the target to the beginning
177 distance = 0.;
178 for ( pos = postarget; pos != list->begin(); --pos ) {
179 nearElem = ( pos->nearGp )->giveElement();
180 nearElem->computeGlobalCoordinates( coords, pos->nearGp->giveNaturalCoordinates() );
181 x = coords.at(1);
182 nonlocStatus = static_cast< MisesMatNlStatus * >( this->giveStatus(pos->nearGp) );
183 damage = nonlocStatus->giveTempDamage();
184 if ( pos != postarget ) {
185 distance += ( xprev - x ) * 0.5 * ( computeDistanceModifier(damage) + computeDistanceModifier(damageprev) );
186 w = computeWeightFunction(this->cl, distance) * nearElem->computeVolumeAround(pos->nearGp);
187 pos->weight = w;
188 wsum += w;
189 }
190
191 xprev = x;
192 damageprev = damage;
193 }
194
195 // the beginning must be treated separately
196 pos = list->begin();
197 if ( pos != postarget ) {
198 nearElem = ( pos->nearGp )->giveElement();
199 nearElem->computeGlobalCoordinates( coords, pos->nearGp->giveNaturalCoordinates() );
200 x = coords.at(1);
201 nonlocStatus = static_cast< MisesMatNlStatus * >( this->giveStatus(pos->nearGp) );
202 damage = nonlocStatus->giveTempDamage();
203 distance += ( xprev - x ) * 0.5 * ( computeDistanceModifier(damage) + computeDistanceModifier(damageprev) );
204 w = computeWeightFunction(this->cl, distance) * nearElem->computeVolumeAround(pos->nearGp);
205 pos->weight = w;
206 wsum += w;
207 }
208
209 status->setIntegrationScale(wsum);
210}
211
212double
213MisesMatNl :: computeDistanceModifier(double damage) const
214{
215 switch ( averType ) {
216 case 2: return 1. / ( Rf / cl + ( 1. - Rf / cl ) * pow(1. - damage, exponent) );
217
218 case 3: if ( damage == 0. ) {
219 return 1.;
220 } else {
221 return 1. / ( 1. - ( 1. - Rf / cl ) * pow(damage, exponent) );
222 }
223
224 case 4: return 1. / pow(Rf / cl, damage);
225
226 case 5: return ( 2. * cl ) / ( cl + Rf + ( cl - Rf ) * cos(M_PI * damage) );
227
228 default: return 1.;
229 }
230}
231
232double
233MisesMatNl :: computeCumPlasticStrain(GaussPoint *gp, TimeStep *tStep) const
234{
235 auto status = static_cast< MisesMatNlStatus * >( this->giveStatus(gp) );
236
237 this->buildNonlocalPointTable(gp);
239 double localCumPlasticStrain = status->giveLocalCumPlasticStrainForAverage();
240 // compute nonlocal cumulative plastic strain
241 auto list = this->giveIPIntegrationList(gp);
242
243 double nonlocalCumPlasticStrain = 0.0;
244 for ( auto &lir: *list ) {
245 auto nonlocStatus = static_cast< MisesMatNlStatus * >( this->giveStatus(lir.nearGp) );
246 auto nonlocalContribution = nonlocStatus->giveLocalCumPlasticStrainForAverage();
247 if ( nonlocalContribution > 0 ) {
248 nonlocalContribution *= lir.weight;
249 }
250
251 nonlocalCumPlasticStrain += nonlocalContribution;
252 }
253
254 double scale = status->giveIntegrationScale();
255 if ( scaling == ST_Standard ) { // standard rescaling
256 nonlocalCumPlasticStrain *= 1. / scale;
257 } else if ( scaling == ST_Borino ) { // Borino modification
258 if ( scale > 1. ) {
259 nonlocalCumPlasticStrain *= 1. / scale;
260 } else {
261 nonlocalCumPlasticStrain += ( 1. - scale ) * status->giveLocalCumPlasticStrainForAverage();
262 }
263 }
264
265 return mm * nonlocalCumPlasticStrain + ( 1. - mm ) * localCumPlasticStrain;
266}
267
268Interface *
269MisesMatNl :: giveInterface(InterfaceType type)
270{
272 return static_cast< StructuralNonlocalMaterialExtensionInterface * >(this);
273 } else if ( type == NonlocalMaterialStiffnessInterfaceType ) {
274 return static_cast< NonlocalMaterialStiffnessInterface * >(this);
275 } else {
276 return NULL;
277 }
278}
279
280
281void
282MisesMatNl :: initializeFrom(InputRecord &ir)
283{
284 MisesMat :: initializeFrom(ir);
285 StructuralNonlocalMaterialExtensionInterface :: initializeFrom(ir);
286
287 averType = 0;
289 if ( averType == 2 ) {
290 exponent = 0.5; // default value for averaging type 2
291 }
292
293 if ( averType == 3 ) {
294 exponent = 1.; // default value for averaging type 3
295 }
296
297 if ( averType == 2 || averType == 3 ) {
299 }
300
301 if ( averType >= 2 && averType <= 5 ) {
303 }
304}
305
306
307void
308MisesMatNl :: giveInputRecord(DynamicInputRecord &input)
309{
310 StructuralMaterial :: giveInputRecord(input);
311 StructuralNonlocalMaterialExtensionInterface :: giveInputRecord(input);
312
314
315 if ( averType == 2 || averType == 3 ) {
317 }
318
319 if ( averType >= 2 && averType <= 5 ) {
321 }
322}
323
324
325double
326MisesMatNl :: computeDamage(GaussPoint *gp, TimeStep *tStep) const
327{
328 auto nlStatus = static_cast< MisesMatNlStatus * >( this->giveStatus(gp) );
329 double nlKappa = this->computeCumPlasticStrain(gp, tStep);
330 double dam = nlStatus->giveDamage();
331 double tempDam = this->computeDamageParam(nlKappa);
332 if ( tempDam < dam ) {
333 tempDam = dam;
334 }
335
336 return tempDam;
337}
338
339
340void
341MisesMatNl :: NonlocalMaterialStiffnessInterface_addIPContribution(SparseMtrx &dest, const UnknownNumberingScheme &s,
342 GaussPoint *gp, TimeStep *tStep)
343{
344 double coeff;
345 MisesMatNlStatus *status = static_cast< MisesMatNlStatus * >( this->giveStatus(gp) );
346 auto list = status->giveIntegrationDomainList();
347 MisesMatNl *rmat;
348 FloatArray rcontrib, lcontrib;
349 IntArray loc, rloc;
350
351 FloatMatrix contrib;
352
353 if ( this->giveLocalNonlocalStiffnessContribution(gp, loc, s, lcontrib, tStep) == 0 ) {
354 return;
355 }
356
357 for ( auto &lir: *list ) {
358 rmat = dynamic_cast< MisesMatNl * >( lir.nearGp->giveMaterial() );
359 if ( rmat ) {
360 rmat->giveRemoteNonlocalStiffnessContribution(lir.nearGp, rloc, s, rcontrib, tStep);
361 coeff = gp->giveElement()->computeVolumeAround(gp) * lir.weight / status->giveIntegrationScale();
362
363 contrib.clear();
364 contrib.plusDyadUnsym(lcontrib, rcontrib, - 1.0 * coeff);
365 dest.assemble(loc, rloc, contrib);
366 }
367 }
368}
369
370
371std :: vector< localIntegrationRecord > *
372MisesMatNl :: NonlocalMaterialStiffnessInterface_giveIntegrationDomainList(GaussPoint *gp)
373{
374 MisesMatNlStatus *status = static_cast< MisesMatNlStatus * >( this->giveStatus(gp) );
375 this->buildNonlocalPointTable(gp);
376 return status->giveIntegrationDomainList();
377}
378
379
380int
381MisesMatNl :: giveLocalNonlocalStiffnessContribution(GaussPoint *gp, IntArray &loc, const UnknownNumberingScheme &s,
382 FloatArray &lcontrib, TimeStep *tStep)
383{
384 auto status = static_cast< MisesMatNlStatus * >( this->giveStatus(gp) );
385 auto elem = static_cast< StructuralElement * >( gp->giveElement() );
386 FloatMatrix b;
387
388 double nlKappa = this->computeCumPlasticStrain(gp, tStep);
389 double damage = status->giveDamage();
390 double tempDamage = status->giveTempDamage();
391 if ( ( tempDamage - damage ) > 0 ) {
392 const FloatArray &stress = status->giveTempEffectiveStress();
393 elem->giveLocationArray(loc, s);
394 elem->computeBmatrixAt(gp, b);
395 double dDamF = computeDamageParamPrime(nlKappa);
396 lcontrib.clear();
397 lcontrib.plusProduct(b, stress, mm * dDamF);
398 }
399
400 return 1;
401}
402
403
404void
405MisesMatNl :: giveRemoteNonlocalStiffnessContribution(GaussPoint *gp, IntArray &rloc, const UnknownNumberingScheme &s,
406 FloatArray &rcontrib, TimeStep *tStep)
407{
408 double kappa, tempKappa;
409 MisesMatNlStatus *status = static_cast< MisesMatNlStatus * >( this->giveStatus(gp) );
410 StructuralElement *elem = static_cast< StructuralElement * >( gp->giveElement() );
411 FloatMatrix b;
412
413 elem->giveLocationArray(rloc, s);
414 elem->computeBmatrixAt(gp, b);
415 kappa = status->giveCumulativePlasticStrain();
416 tempKappa = status->giveTempCumulativePlasticStrain();
417
418 rcontrib.clear();
419 if ( ( tempKappa - kappa ) > 0 ) {
420 double E = linearElasticMaterial.give('E', gp);
421 const FloatArray &stress = status->giveTempEffectiveStress();
422 if ( gp->giveMaterialMode() == _1dMat ) {
423 double coeff = sgn( stress.at(1) ) * E / ( E + H );
424 rcontrib.plusProduct(b, stress, coeff);
425 return;
426 }
427 }
428 rcontrib.resize(b.giveNumberOfColumns());
429 rcontrib.zero();
430}
431
432
433/*********************************************status**************************************************************/
434
435MisesMatNlStatus :: MisesMatNlStatus(GaussPoint *g) :
437{}
438
439
440void
441MisesMatNlStatus :: printOutputAt(FILE *file, TimeStep *tStep) const
442{
443 StructuralMaterialStatus :: printOutputAt(file, tStep);
444 fprintf(file, "status { ");
445 fprintf(file, "kappa %f, damage %f ", this->kappa, this->damage);
446 fprintf(file, "}\n");
447}
448
449
450void
451MisesMatNlStatus :: initTempStatus()
452//
453// initializes temp variables according to variables form previous equlibrium state.
454// builds new crackMap
455//
456{
457 MisesMatStatus :: initTempStatus();
458}
459
460
461void
462MisesMatNlStatus :: updateYourself(TimeStep *tStep)
463//
464// updates variables (nonTemp variables describing situation at previous equilibrium state)
465// after a new equilibrium state has been reached
466// temporary variables are having values corresponding to newly reched equilibrium.
467//
468{
469 MisesMatStatus :: updateYourself(tStep);
470}
471
472
473void
474MisesMatNlStatus :: saveContext(DataStream &stream, ContextMode mode)
475{
476 MisesMatStatus :: saveContext(stream, mode);
477 //if (!stream.write(localEquivalentStrainForAverage,1)) THROW_CIOERR(CIO_IOERR);
478}
479
480
481void
482MisesMatNlStatus :: restoreContext(DataStream &stream, ContextMode mode)
483{
484 MisesMatStatus :: restoreContext(stream, mode);
485 //if (!stream.read(localEquivalentStrainForAverage,1)) THROW_CIOERR(CIO_IOERR);
486}
487
488
489Interface *
490MisesMatNlStatus :: giveInterface(InterfaceType type)
491{
493 return static_cast< StructuralNonlocalMaterialStatusExtensionInterface * >(this);
494 } else {
495 return MisesMatStatus :: giveInterface(type);
496 }
497}
498
499
500int
501MisesMatNl :: packUnknowns(DataStream &buff, TimeStep *tStep, GaussPoint *ip)
502{
503 MisesMatNlStatus *nlStatus = static_cast< MisesMatNlStatus * >( this->giveStatus(ip) );
504
505 this->buildNonlocalPointTable(ip);
507
508 return buff.write( nlStatus->giveLocalCumPlasticStrainForAverage() );
509}
510
511
512int
513MisesMatNl :: unpackAndUpdateUnknowns(DataStream &buff, TimeStep *tStep, GaussPoint *ip)
514{
515 int result;
516 MisesMatNlStatus *nlStatus = static_cast< MisesMatNlStatus * >( this->giveStatus(ip) );
517 double localCumPlasticStrainForAverage;
518
519 result = buff.read(localCumPlasticStrainForAverage);
520 nlStatus->setLocalCumPlasticStrainForAverage(localCumPlasticStrainForAverage);
521 return result;
522}
523
524
525int
526MisesMatNl :: estimatePackSize(DataStream &buff, GaussPoint *ip)
527{
528 // Note: nlStatus localStrainVectorForAverage memeber must be properly sized!
529 // IDNLMaterialStatus *nlStatus = (IDNLMaterialStatus*) this -> giveStatus (ip);
530 return buff.givePackSizeOfDouble(1);
531}
532
533} // end namespace oofem
#define E(a, b)
#define REGISTER_Material(class)
virtual int read(int *data, std::size_t count)=0
Reads count integer values into array pointed by data.
virtual int givePackSizeOfDouble(std::size_t count)=0
virtual int write(const int *data, std::size_t count)=0
Writes count integer values from array pointed by data.
void setField(int item, InputFieldType id)
virtual int computeGlobalCoordinates(FloatArray &answer, const FloatArray &lcoords)
Definition element.C:1225
void giveLocationArray(IntArray &locationArray, const UnknownNumberingScheme &s, IntArray *dofIds=NULL) const
Definition element.C:429
virtual double computeVolumeAround(GaussPoint *gp)
Definition element.h:530
void resize(Index s)
Definition floatarray.C:94
double & at(Index i)
Definition floatarray.h:202
void plusProduct(const FloatMatrix &b, const FloatArray &s, double dV)
Definition floatarray.C:288
void zero()
Zeroes all coefficients of receiver.
Definition floatarray.C:683
*Sets size of receiver to be an empty matrix It will have zero rows and zero columns size void clear()
int giveNumberOfColumns() const
Returns number of columns of receiver.
void plusDyadUnsym(const FloatArray &a, const FloatArray &b, double dV)
const FloatArray & giveNaturalCoordinates() const
Returns coordinate array of receiver.
Definition gausspoint.h:138
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
Definition gausspoint.h:190
Element * giveElement()
Returns corresponding element to receiver.
Definition gausspoint.h:187
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Definition material.C:206
virtual void initTempStatus(GaussPoint *gp) const
Definition material.C:221
double giveLocalCumPlasticStrainForAverage()
Definition misesmatnl.h:69
void setLocalCumPlasticStrainForAverage(double ls)
Definition misesmatnl.h:70
void modifyNonlocalWeightFunctionAround(GaussPoint *gp) const
Definition misesmatnl.C:135
double computeDistanceModifier(double damage) const
Definition misesmatnl.C:213
MisesMatNl(int n, Domain *d)
Definition misesmatnl.C:51
double computeDamage(GaussPoint *gp, TimeStep *tStep) const
Definition misesmatnl.C:326
virtual double computeCumPlasticStrain(GaussPoint *gp, TimeStep *tStep) const
Definition misesmatnl.C:233
int giveLocalNonlocalStiffnessContribution(GaussPoint *gp, IntArray &loc, const UnknownNumberingScheme &s, FloatArray &lcontrib, TimeStep *tStep)
Definition misesmatnl.C:381
void giveRemoteNonlocalStiffnessContribution(GaussPoint *gp, IntArray &rloc, const UnknownNumberingScheme &s, FloatArray &rcontrib, TimeStep *tStep)
Definition misesmatnl.C:405
double computeLocalCumPlasticStrain(GaussPoint *gp, TimeStep *tStep) const
Definition misesmatnl.h:117
double damage
damage variable (initial).
Definition misesmat.h:182
double giveTempCumulativePlasticStrain() const
Definition misesmat.h:201
double giveTempDamage() const
Definition misesmat.h:198
double giveCumulativePlasticStrain() const
Definition misesmat.h:200
const FloatArray & giveTempEffectiveStress() const
Definition misesmat.h:203
double kappa
Cumulative plastic strain (initial).
Definition misesmat.h:176
MisesMatStatus(GaussPoint *g)
Definition misesmat.C:672
IsotropicLinearElasticMaterial linearElasticMaterial
Reference to the basic elastic material.
Definition misesmat.h:80
double computeDamageParam(double tempKappa) const
Definition misesmat.C:451
void performPlasticityReturn(const FloatArray &totalStrain, GaussPoint *gp, TimeStep *tStep) const
Definition misesmat.C:181
double H
Hardening modulus.
Definition misesmat.h:89
double computeDamageParamPrime(double tempKappa) const
Definition misesmat.C:461
MisesMat(int n, Domain *d)
Definition misesmat.C:54
virtual double computeWeightFunction(const double cl, const double distance) const
void buildNonlocalPointTable(GaussPoint *gp) const
ScalingType scaling
Parameter specifying the type of scaling of nonlocal weight function.
double mm
For "undernonlocal" or "overnonlocal" formulation.
void updateDomainBeforeNonlocAverage(TimeStep *tStep) const
std ::vector< localIntegrationRecord > * giveIPIntegrationList(GaussPoint *gp) const
void setIntegrationScale(double val)
Sets associated integration scale.
std ::vector< localIntegrationRecord > * giveIntegrationDomainList()
double giveIntegrationScale()
Returns associated integration scale.
virtual int assemble(const IntArray &loc, const FloatMatrix &mat)=0
virtual void computeBmatrixAt(GaussPoint *gp, FloatMatrix &answer, int lowerIndx=1, int upperIndx=ALL_STRAINS)=0
#define OOFEM_ERROR(...)
Definition error.h:79
#define IR_GIVE_OPTIONAL_FIELD(__ir, __value, __id)
Definition inputrecord.h:75
#define M_PI
Definition mathfem.h:52
#define _IFT_MisesMatNl_exp
Definition misesmatnl.h:46
#define _IFT_MisesMatNl_averagingtype
Definition misesmatnl.h:45
#define _IFT_MisesMatNl_rf
Definition misesmatnl.h:47
long ContextMode
Definition contextmode.h:43
double sgn(double i)
Returns the signum of given value (if value is < 0 returns -1, otherwise returns 1).
Definition mathfem.h:104
@ NonlocalMaterialStiffnessInterfaceType
@ NonlocalMaterialStatusExtensionInterfaceType
@ NonlocalMaterialExtensionInterfaceType
double distance(const FloatArray &x, const FloatArray &y)

This page is part of the OOFEM-3.0 documentation. Copyright Copyright (C) 1994-2025 Borek Patzak Bořek Patzák
Project e-mail: oofem@fsv.cvut.cz
Generated at for OOFEM by doxygen 1.15.0 written by Dimitri van Heesch, © 1997-2011