OOFEM 3.0
Loading...
Searching...
No Matches
abaqususermaterial.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 abaqususermaterial_h
36#define abaqususermaterial_h
37
40#include "floatarray.h"
41#include "floatarrayf.h"
42#include "floatmatrix.h"
43
45
46#define _IFT_AbaqusUserMaterial_Name "abaqususermaterial"
47#define _IFT_AbaqusUserMaterial_numState "numstate"
48#define _IFT_AbaqusUserMaterial_properties "properties"
49#define _IFT_AbaqusUserMaterial_initialStress "initialstress"
50#define _IFT_AbaqusUserMaterial_userMaterial "umat"
51#define _IFT_AbaqusUserMaterial_name "name"
52#define _IFT_AbaqusUserMaterial_numericalTangent "numericaltangent"
53#define _IFT_AbaqusUserMaterial_numericalTangentPerturbation "perturbation"
55
56namespace oofem {
82{
83private:
85 void *umatobj = nullptr;
86
88 void ( *umat )(double *stress, double *statev, double *ddsdde, double *sse, double *spd, // 5
89 double *scd, double *rpl, double *ddsddt, double *drplde, double *drpldt, // 5
90 double *stran, double *dstran, double time[ 2 ], double *dtime, double *temp, // 4
91 double *dtemp, double predef[ 1 ], double dpred[ 1 ], char cmname[ 80 ], int *ndi, // 5
92 int *nshr, int *ntens, int *nstatv, double *props, int *nprops, double coords[ 3 ], // 6
93 double *drot, double *pnewdt, double *celent, double *dfgrd0, double *dfgrd1, // 5
94 int *noel, int *npt, int *layer, int *kspt, int *kstep, int *kinc) = nullptr; // 6
96 char cmname[ 80 ];
98 int numState = 0;
99
109
114
118 double mPerturbation = 1e-7;
119
121 std::string filename;
122
123 static std::size_t const abq2oo9[ 9 ];
124 static std::size_t const abq2oo6[ 6 ];
125
126public:
128 AbaqusUserMaterial(int n, Domain *d);
130 virtual ~AbaqusUserMaterial();
131
139 void initializeFrom(InputRecord &ir) override;
140 void giveInputRecord(DynamicInputRecord &input) override;
141
142 std::unique_ptr<MaterialStatus> CreateStatus(GaussPoint *gp) const override;
143
144 FloatMatrixF< 6, 6 >give3dMaterialStiffnessMatrix(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override;
145
147 GaussPoint *gp,
148 TimeStep *tStep) const override;
149
151 TimeStep *tStep) const override;
152
154 TimeStep *tStep) const override;
155
157 TimeStep *tStep) const override;
158
159 int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override;
160
161 const char *giveClassName() const override { return "AbaqusUserMaterial"; }
162 const char *giveInputRecordName() const override { return _IFT_AbaqusUserMaterial_Name; }
163};
164
166{
167protected:
176
179
180public:
183
184 void initTempStatus() override;
185 void updateYourself(TimeStep *tStep) override;
186
187 bool hasTangent() const { return hasTangentFlag; }
188
189 const FloatArray &giveStateVector() const { return stateVector; }
195 tempTangent = std::move(t);
196 hasTangentFlag = true;
197 }
198
199 void printOutputAt(FILE *file, TimeStep *tStep) const override;
200
201 const char *giveClassName() const override { return "AbaqusUserMaterialStatus"; }
202};
203} // end namespace oofem
204#endif // abaqususermaterial_h
#define _IFT_AbaqusUserMaterial_Name
const char * giveClassName() const override
const FloatArray & giveStateVector() const
FloatArray stateVector
General state vector.
AbaqusUserMaterialStatus(GaussPoint *gp, int numState)
Constructor.
FloatMatrix tempTangent
Temporary elastic tangent.
int numState
Number of state variables.
void updateYourself(TimeStep *tStep) override
FloatArray & letTempStateVectorBe(FloatArray &s)
bool hasTangentFlag
Checker to see if tangent has been computed.
const FloatMatrix & giveTempTangent()
FloatArray tempStateVector
Temporary state vector.
FloatArray & letStateVectorBe(FloatArray &s)
const FloatArray & giveTempStateVector() const
void printOutputAt(FILE *file, TimeStep *tStep) const override
Print receiver's output to given stream.
const char * giveInputRecordName() const override
static std::size_t const abq2oo9[9]
void giveInputRecord(DynamicInputRecord &input) override
std::string filename
Name of the file that contains the umat function.
const char * giveClassName() const override
std::unique_ptr< MaterialStatus > CreateStatus(GaussPoint *gp) const override
AbaqusUserMaterial(int n, Domain *d)
Constructor.
void * umatobj
Dynamically loaded umat.
void(* umat)(double *stress, double *statev, double *ddsdde, double *sse, double *spd, double *scd, double *rpl, double *ddsddt, double *drplde, double *drpldt, double *stran, double *dstran, double time[2], double *dtime, double *temp, double *dtemp, double predef[1], double dpred[1], char cmname[80], int *ndi, int *nshr, int *ntens, int *nstatv, double *props, int *nprops, double coords[3], double *drot, double *pnewdt, double *celent, double *dfgrd0, double *dfgrd1, int *noel, int *npt, int *layer, int *kspt, int *kstep, int *kinc)
Pointer to the dynamically loaded umat-function (translated to C).
FloatArrayF< 6 > initialStress
Initial stress.
char cmname[80]
Name for material routine.
FloatMatrixF< 5, 5 > givePlaneStrainStiffnessMatrix_dPdF(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override
FloatMatrixF< 9, 9 > give3dMaterialStiffnessMatrix_dPdF(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
static std::size_t const abq2oo6[6]
virtual ~AbaqusUserMaterial()
Destructor.
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
FloatArrayF< 6 > giveRealStressVector_3d(const FloatArrayF< 6 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector for second Piola-Kirchoff stress.
FloatArrayF< 9 > giveFirstPKStressVector_3d(const FloatArrayF< 9 > &vF, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector for second Piola-Kirchoff stress.
FloatArray properties
Material properties.
FloatMatrixF< 6, 6 > give3dMaterialStiffnessMatrix(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
void initializeFrom(InputRecord &ir) override
int numState
Size of the state vector.
GaussPoint * gp
Associated integration point.
StructuralMaterialStatus(GaussPoint *g)
Constructor. Creates new StructuralMaterialStatus with IntegrationPoint g.
StructuralMaterial(int n, Domain *d)

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