OOFEM 3.0
Loading...
Searching...
No Matches
structuralmaterial.h
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#ifndef structuralmaterial_h
36#define structuralmaterial_h
37
38#include "material.h"
39#include "floatarray.h"
40#include "floatmatrix.h"
41#include "floatarrayf.h"
42#include "floatmatrixf.h"
43#include "mathfem.h"
44#include "matconst.h"
45#include "matstatus.h"
47#include "valuemodetype.h"
48#include <vector>
49
51
52#define _IFT_StructuralMaterial_referencetemperature "referencetemperature"
53#define _IFT_StructuralMaterial_talpha "talpha"
54#define _IFT_StructuralMaterial_StressControl_stiffmode "scstiffmode"
55#define _IFT_StructuralMaterial_StressControl_reltol "screltol"
56#define _IFT_StructuralMaterial_StressControl_abstol "scabstol"
57#define _IFT_StructuralMaterial_StressControl_maxiter "maxiter"
59
60namespace oofem {
61#define STRAIN_STEPS 10.0
62
63class GaussPoint;
65
121{
122protected:
126 MatResponseMode SCStiffMode = TangentStiffness; // tangent
128 double SCRelTol = 1.e-3; // relative stress control tolerance
130 double SCAbsTol = 1.e-12;
132 int SCMaxiter = 100000;
133
134public:
136 static std::array< std::array< int, 3 >, 3 >vIindex;
137
139 static std::array< std::array< int, 3 >, 3 >svIndex;
140
141 static int giveSymVI(int ind1, int ind2) { return svIndex [ ind1 - 1 ] [ ind2 - 1 ]; }
142 static int giveVI(int ind1, int ind2) { return vIindex [ ind1 - 1 ] [ ind2 - 1 ]; }
143
149 StructuralMaterial(int n, Domain *d);
150
151 bool hasMaterialModeCapability(MaterialMode mode) const override;
152 const char *giveClassName() const override { return "StructuralMaterial"; }
153
154 void initializeFrom(InputRecord &ir) override;
155 void giveInputRecord(DynamicInputRecord &input) override;
156 void giveCharacteristicMatrix(FloatMatrix &answer, MatResponseMode type, GaussPoint* gp, TimeStep *tStep) const override;
157 void giveCharacteristicVector(FloatArray &answer, FloatArray& flux, MatResponseMode type, GaussPoint* gp, TimeStep *tStep) const override;
158
168 virtual void giveStiffnessMatrix(FloatMatrix &answer,
169 MatResponseMode mode,
170 GaussPoint *gp,
171 TimeStep *tStep) const;
172
186 virtual void giveRealStressVector(FloatArray &answer, GaussPoint *gp,
187 const FloatArray &reducedStrain, TimeStep *tStep) const;
189 virtual FloatArrayF< 6 >giveRealStressVector_3d(const FloatArrayF< 6 > &strain, GaussPoint *gp, TimeStep *tStep) const;
191 virtual FloatArrayF< 4 >giveRealStressVector_PlaneStrain(const FloatArrayF< 4 > &strain, GaussPoint *gp, TimeStep *tStep) const;
193 virtual FloatArray giveRealStressVector_StressControl(const FloatArray &reducedE, const IntArray &strainControl, GaussPoint *gp, TimeStep *tStep) const;
194 virtual FloatArray giveRealStressVector_ShellStressControl(const FloatArray &reducedE, const IntArray &strainControl, GaussPoint *gp, TimeStep *tStep) const;
196 virtual FloatArrayF< 3 >giveRealStressVector_PlaneStress(const FloatArrayF< 3 > &reducedE, GaussPoint *gp, TimeStep *tStep) const;
198 virtual FloatArrayF< 1 >giveRealStressVector_1d(const FloatArrayF< 1 > &reducedE, GaussPoint *gp, TimeStep *tStep) const;
199
201 virtual FloatArrayF< 2 >giveRealStressVector_Warping(const FloatArrayF< 2 > &reducedE, GaussPoint *gp, TimeStep *tStep) const;
203 virtual FloatArrayF< 2 >giveRealStressVector_2dBeamLayer(const FloatArrayF< 2 > &reducedE, GaussPoint *gp, TimeStep *tStep) const;
205 virtual FloatArrayF< 5 >giveRealStressVector_PlateLayer(const FloatArrayF< 5 > &reducedE, GaussPoint *gp, TimeStep *tStep) const;
207 virtual FloatArrayF< 3 >giveRealStressVector_Fiber(const FloatArrayF< 3 > &reducedE, GaussPoint *gp, TimeStep *tStep) const;
208
210 virtual FloatArrayF< 3 >giveRealStressVector_2dPlateSubSoil(const FloatArrayF< 3 > &reducedE, GaussPoint *gp, TimeStep *tStep) const;
211 virtual FloatArrayF< 6 >giveRealStressVector_3dBeamSubSoil(const FloatArrayF< 6 > &reducedE, GaussPoint *gp, TimeStep *tStep) const;
212
231
232 virtual FloatArrayF< 9 >giveFirstPKStressVector_3d(const FloatArrayF< 9 > &vF, GaussPoint *gp, TimeStep *tStep) const;
234 virtual FloatArrayF< 5 >giveFirstPKStressVector_PlaneStrain(const FloatArrayF< 5 > &vF, GaussPoint *gp, TimeStep *tStep) const;
236 virtual FloatArray giveFirstPKStressVector_StressControl(const FloatArray &reducedvF, const IntArray &FControl, GaussPoint *gp, TimeStep *tStep) const;
238 virtual FloatArrayF< 4 >giveFirstPKStressVector_PlaneStress(const FloatArrayF< 4 > &vF, GaussPoint *gp, TimeStep *tStep) const;
240 virtual FloatArrayF< 1 >giveFirstPKStressVector_1d(const FloatArrayF< 1 > &vF, GaussPoint *gp, TimeStep *tStep) const;
242
262 virtual void giveCauchyStressVector_3d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep)
263 { OOFEM_ERROR("not implemented "); }
264 virtual void giveCauchyStressVector_PlaneStrain(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep)
265 { OOFEM_ERROR("not implemented "); }
266 virtual void giveCauchyStressVector_PlaneStress(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep)
267 { OOFEM_ERROR("not implemented "); }
268 virtual void giveCauchyStressVector_1d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep)
269 { OOFEM_ERROR("not implemented "); }
270
271
275 virtual void giveEshelbyStressVector_PlaneStrain(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep);
276
277 static FloatMatrixF< 9, 9 >convert_dSdE_2_dPdF_3D(const FloatMatrixF< 6, 6 > &dSdE, const FloatArrayF< 6 > &S, const FloatArrayF< 9 > &F);
278 static FloatMatrixF< 5, 5 >convert_dSdE_2_dPdF_PlaneStrain(const FloatMatrixF< 4, 4 > &dSdE, const FloatArrayF< 4 > &S, const FloatArrayF< 5 > &F);
279 static FloatMatrixF< 4, 4 >convert_dSdE_2_dPdF_PlaneStress(const FloatMatrixF< 3, 3 > &dSdE, const FloatArrayF< 3 > &S, const FloatArrayF< 4 > &F);
280 static FloatMatrixF< 1, 1 >convert_dSdE_2_dPdF_1D(const FloatMatrixF< 1, 1 > &dSdE, const FloatArrayF< 1 > &S, const FloatArrayF< 1 > &F);
281
288 virtual FloatArrayF< 6 >giveThermalDilatationVector(GaussPoint *gp, TimeStep *tStep) const;
293
303 virtual FloatArray computeStressIndependentStrainVector(GaussPoint *gp, TimeStep *tStep, ValueModeType mode) const;
304 FloatArrayF< 6 >computeStressIndependentStrainVector_3d(GaussPoint *gp, TimeStep *tStep, ValueModeType mode) const;
306
307
313 static void computePrincipalValues(FloatArray &answer, const FloatArray &s, stressStrainPrincMode mode);
320 static FloatArrayF< 3 >computePrincipalValues(const FloatMatrixF< 3, 3 > &s);
321
329 static FloatArrayF< 3 >computePrincipalValues(double I1, double I2, double I3);
337 static void computePrincipalValDir(FloatArray &answer, FloatMatrix &dir, const FloatArray &s, stressStrainPrincMode mode);
344 static std::pair< FloatArrayF< 3 >, FloatMatrixF< 3, 3 > >computePrincipalValDir(const FloatMatrixF< 3, 3 > &s);
345
352 static FloatArrayF< 6 >computeDeviator(const FloatArrayF< 6 > &s);
353 static std::pair< FloatArrayF< 6 >, double >computeDeviatoricVolumetricSplit(const FloatArrayF< 6 > &s);
354 static FloatArrayF< 6 >computeDeviatoricVolumetricSum(const FloatArrayF< 6 > &dev, double mean);
355
356 static FloatArrayF< 6 >applyDeviatoricElasticCompliance(const FloatArrayF< 6 > &stress, double EModulus, double nu);
357 static FloatArrayF< 6 >applyDeviatoricElasticCompliance(const FloatArrayF< 6 > &stress, double GModulus);
358
359 static FloatArrayF< 6 >applyDeviatoricElasticStiffness(const FloatArrayF< 6 > &strain, double EModulus, double nu);
360 static FloatArrayF< 6 >applyDeviatoricElasticStiffness(const FloatArrayF< 6 > &strain, double GModulus);
361
362 static FloatArrayF< 6 >applyElasticStiffness(const FloatArrayF< 6 > &strain, double EModulus, double nu);
363 static FloatArrayF< 6 >applyElasticCompliance(const FloatArrayF< 6 > &stress, double EModulus, double nu);
364
365 static double computeStressNorm(const FloatArrayF< 6 > &stress);
366
367 static double computeFirstInvariant(const FloatArrayF< 6 > &s);
368 static double computeSecondStressInvariant(const FloatArrayF< 6 > &s);
369 static double computeThirdStressInvariant(const FloatArrayF< 6 > &s);
370
371 static double computeFirstCoordinate(const FloatArrayF< 6 > &s);
372 static double computeSecondCoordinate(const FloatArrayF< 6 > &s);
373 static double computeThirdCoordinate(const FloatArrayF< 6 > &s);
375
384 virtual FloatMatrixF< 6, 6 >give3dMaterialStiffnessMatrix(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const
385 { OOFEM_ERROR("not implemented "); }
386
387
397 virtual void giveStiffnessMatrix_dPdF(FloatMatrix &answer,
398 MatResponseMode mode,
399 GaussPoint *gp,
400 TimeStep *tStep);
401
402
403
404
405 virtual FloatMatrixF< 9, 9 >give3dMaterialStiffnessMatrix_dPdF(MatResponseMode mode,
406 GaussPoint *gp, TimeStep *tStep) const;
407
408 virtual void give3dMaterialStiffnessMatrix_dCde(FloatMatrix &answer,
409 MatResponseMode mode,
410 GaussPoint *gp, TimeStep *tStep);
411
426 static int giveVoigtVectorMask(IntArray &answer, MaterialMode mmode);
427
445 static int giveVoigtSymVectorMask(IntArray &answer, MaterialMode mmode);
450 static void giveInvertedVoigtVectorMask(IntArray &answer, MaterialMode mmode);
451
456 static int giveSizeOfVoigtVector(MaterialMode mmode);
461 static int giveSizeOfVoigtSymVector(MaterialMode mmode);
462
464 static void giveFullVectorForm(FloatArray &answer, const FloatArray &strainVector, MaterialMode matMode);
466 static void giveFullVectorFormF(FloatArray &answer, const FloatArray &strainVector, MaterialMode matMode);
468 static void giveFullSymVectorForm(FloatArray &answer, const FloatArray &vec, MaterialMode matMode);
470 static void giveReducedVectorForm(FloatArray &answer, const FloatArray &vec, MaterialMode matMode);
472 static void giveReducedSymVectorForm(FloatArray &answer, const FloatArray &vec, MaterialMode matMode);
473
475 static void giveFullSymMatrixForm(FloatMatrix &answer, const FloatMatrix &red, MaterialMode matMode);
477 static void giveReducedMatrixForm(FloatMatrix &answer, const FloatMatrix &full, MaterialMode matMode);
479 static void giveReducedSymMatrixForm(FloatMatrix &answer, const FloatMatrix &full, MaterialMode matMode);
480
492 void giveStressDependentPartOfStrainVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrainVector,
493 TimeStep *tStep, ValueModeType mode) const;
494
495 int setIPValue(const FloatArray &value, GaussPoint *gp, InternalStateType type) override;
496 int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override;
497
511 virtual FloatMatrixF< 3, 3 >givePlaneStressStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const;
512 virtual FloatMatrixF< 4, 4 >givePlaneStressStiffnessMatrix_dPdF(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const;
513
514 virtual void givePlaneStressStiffMtrx_dCde(FloatMatrix &answer,
515 MatResponseMode mmode, GaussPoint *gp,
516 TimeStep *tStep);
518
537 virtual FloatMatrixF< 4, 4 >givePlaneStrainStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const;
538 virtual FloatMatrixF< 5, 5 >givePlaneStrainStiffnessMatrix_dPdF(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const;
539
540 virtual void givePlaneStrainStiffMtrx_dCde(FloatMatrix &answer,
541 MatResponseMode mmode, GaussPoint *gp,
542 TimeStep *tStep);
544
558 virtual FloatMatrixF< 1, 1 >give1dStressStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const;
559 virtual FloatMatrixF< 1, 1 >give1dStressStiffnessMatrix_dPdF(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const;
560
561 virtual void give1dStressStiffMtrx_dCde(FloatMatrix &answer,
562 MatResponseMode mmode, GaussPoint *gp,
563 TimeStep *tStep);
565
578 virtual FloatMatrixF< 2, 2 >give2dBeamLayerStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const;
591 virtual FloatMatrixF< 5, 5 >givePlateLayerStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const;
604 virtual FloatMatrixF< 3, 3 >giveFiberStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const;
605
614 virtual FloatMatrixF< 3, 3 >give2dPlateSubSoilStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const;
623 virtual FloatMatrixF< 6, 6 >give3dBeamSubSoilStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const;
633 static FloatArrayF< 6 >transformStrainVectorTo(const FloatMatrixF< 3, 3 > &base,
634 const FloatArrayF< 6 > &strain, bool transpose = false);
644 static FloatArrayF< 6 >transformStressVectorTo(const FloatMatrixF< 3, 3 > &base,
645 const FloatArrayF< 6 > &stress, bool transpose = false);
650 static double computeVonMisesStress(const FloatArray &currentStress);
651 static double computeVonMisesStress_3D(const FloatArrayF< 6 > &stress);
652 static double computeVonMisesStress_PlaneStress(const FloatArrayF< 3 > &stress);
653
661 static FloatMatrixF< 6, 6 >giveStrainVectorTranformationMtrx(const FloatMatrixF< 3, 3 > &base, bool transpose = false);
662
670 static FloatMatrixF< 3, 3 >give2DStrainVectorTranformationMtrx(const FloatMatrixF< 2, 2 > &base, bool transpose = false);
671
679 static FloatMatrixF< 6, 6 >giveStressVectorTranformationMtrx(const FloatMatrixF< 3, 3 > &base, bool transpose = false);
687 static FloatMatrixF< 3, 3 >givePlaneStressVectorTranformationMtrx(const FloatMatrixF< 2, 2 > &base, bool transpose = false);
697 static void sortPrincDirAndValCloseTo(FloatArray &pVal, FloatMatrix &pDir, const FloatMatrix &toPDir);
698
699 friend class CrossSection;
701 friend class SimpleCrossSection;
703};
704} // end namespace oofem
705#endif // structuralmaterial_h
Material(int n, Domain *d)
Definition material.C:46
virtual void giveCauchyStressVector_PlaneStress(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep)
static std::array< std::array< int, 3 >, 3 > svIndex
Symmetric Voigt index map.
static std::array< std::array< int, 3 >, 3 > vIindex
Voigt index map.
static int giveVI(int ind1, int ind2)
virtual FloatMatrixF< 6, 6 > give3dMaterialStiffnessMatrix(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const
StructuralMaterial(int n, Domain *d)
double referenceTemperature
Reference temperature (temperature, when material has been built into structure).
virtual void giveCauchyStressVector_1d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep)
static int giveSymVI(int ind1, int ind2)
double SCRelTol
relative tolerance for stress control
virtual void giveCauchyStressVector_PlaneStrain(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep)
MatResponseMode SCStiffMode
stifness mode used in stress control
int SCMaxiter
maximum iterations for stress-control
virtual void giveCauchyStressVector_3d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep)
double SCAbsTol
absolute stress tolerance for stress control
const char * giveClassName() const override
#define OOFEM_ERROR(...)
Definition error.h:79
#define S(p)
Definition mdm.C:469
FloatMatrixF< M, N > transpose(const FloatMatrixF< N, M > &mat)
Constructs transposed matrix.
#define OOFEM_EXPORT
Definition oofemcfg.h:7

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