https://mooseframework.inl.gov
Loading...
Searching...
No Matches
AbaqusUMATStress.h
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
10#pragma once
11
14#include "ComputeFiniteStrain.h"
15#include "RotationTensor.h"
17
19
24{
25public:
27
28 AbaqusUMATStress(const InputParameters & parameters);
29
31 void initialSetup() override;
32
34 void computeProperties() override;
35
36protected:
38 typedef void (*umat_t)(Real STRESS[],
39 Real STATEV[],
40 Real DDSDDE[],
41 Real * SSE,
42 Real * SPD,
43 Real * SCD,
44 Real * RPL,
45 Real DDSDDT[],
46 Real DRPLDE[],
47 Real * DRPLDT,
48 Real STRAN[],
49 Real DSTRAN[],
50 Real TIME[],
51 Real * DTIME,
52 Real * TEMP,
53 Real * DTEMP,
54 Real PREDEF[],
55 Real DPRED[],
56 char * CMNAME,
57 int * NDI,
58 int * NSHR,
59 int * NTENS,
60 int * NSTATV,
61 Real PROPS[],
62 int * NPROPS,
63 Real COORDS[],
64 Real DROT[],
65 Real * PNEWDT,
66 Real * CELENT,
67 Real DFGRD0[],
68 Real DFGRD1[],
69 int * NOEL,
70 unsigned int * NPT,
71 int * LAYER,
72 int * KSPT,
73 int * KSTEP,
74 int * KINC);
75
76 // The plugin file name
77 FileName _plugin;
78
79 // The plugin library wrapper
81
82 // Function pointer to the dynamically loaded function
84
89 Real _aqRPL;
90
93
96
99
102
105
108
110 char _aqCMNAME[80];
111
114
117
120
123
126
128 unsigned int _aqNPT;
129
132
135
138
142
143 // An array containing the solution-dependent state variables
144 std::vector<Real> _aqSTATEV;
145
147 std::vector<Real> _aqDDSDDT;
148
150 std::vector<Real> _aqDRPLDE;
151
153 std::vector<Real> _aqSTRAN;
154
156 std::vector<Real> _aqDFGRD0;
157
159 std::vector<Real> _aqDFGRD1;
160
162 std::vector<Real> _aqSTRESS;
163
165 std::vector<Real> _aqDDSDDE;
166
172 std::vector<Real> _aqDSTRAN;
173
175 std::vector<Real> _aqPROPS;
176
178 std::array<Real, 2> _aqTIME;
179
181 std::array<Real, 3> _aqCOORDS;
182
184 std::vector<Real> _aqDROT;
185
188
190 std::vector<Real> _aqPREDEF;
191
193 std::vector<Real> _aqDPRED;
194
195 void initQpStatefulProperties() override;
196 void computeQpStress() override;
197
201
204
207
210
211 // energy quantities
218
221
222 // Time step rotation increment
225
226 // Coupled temperature field
229
230 // Coupled user-defined field
231 const std::vector<const VariableValue *> _external_fields;
232 const std::vector<const VariableValue *> _external_fields_old;
233
234 // External field names
235 std::vector<VariableName> _external_field_names;
236
237 // Number of external fields provided by the user
238 const std::size_t _number_external_fields;
239
240 const std::vector<MaterialPropertyName> _external_property_names;
242 std::vector<const MaterialProperty<Real> *> _external_properties;
243 std::vector<const MaterialProperty<Real> *> _external_properties_old;
244
247
253
254private:
256 const ComputeFiniteStrain::DecompMethod _decomposition_method;
257
260};
Coupling material to use Abaqus UMAT models in MOOSE.
const OptionalMaterialProperty< RankTwoTensor > & _strain_increment
void initialSetup() override
check optional material properties for consistency
std::array< Real, 3 > _aqCOORDS
An array containing the coordinates of this point.
MaterialProperty< RankTwoTensor > & _total_rotation
const MaterialProperty< Real > & _plastic_dissipation_old
const VariableValue & _temperature_old
const std::vector< const VariableValue * > _external_fields_old
const OptionalMaterialProperty< RankTwoTensor > & _rotation_increment_old
int _aqNOEL
Element number.
const MaterialProperty< Real > & _creep_dissipation_old
std::vector< Real > _aqDFGRD0
Array containing the deformation gradient at the beginning of the increment.
int _aqKINC
Increment number (_t_step).
const MaterialProperty< RankTwoTensor > & _total_strain_old
int _aqKSTEP
The step number (as per Abaqus definition) can be set by the user.
int _aqLAYER
Layer number (for composite shells and layered solids). (not supported)
void(* umat_t)(Real STRESS[], Real STATEV[], Real DDSDDE[], Real *SSE, Real *SPD, Real *SCD, Real *RPL, Real DDSDDT[], Real DRPLDE[], Real *DRPLDT, Real STRAN[], Real DSTRAN[], Real TIME[], Real *DTIME, Real *TEMP, Real *DTEMP, Real PREDEF[], Real DPRED[], char *CMNAME, int *NDI, int *NSHR, int *NTENS, int *NSTATV, Real PROPS[], int *NPROPS, Real COORDS[], Real DROT[], Real *PNEWDT, Real *CELENT, Real DFGRD0[], Real DFGRD1[], int *NOEL, unsigned int *NPT, int *LAYER, int *KSPT, int *KSTEP, int *KINC)
function type for the external UMAT function
std::vector< Real > _aqDROT
Rotation increment matrix.
std::vector< VariableName > _external_field_names
const RotationTensor _R
std::vector< Real > _aqDDSDDE
Jacobian matrix of the model (out)
std::vector< const MaterialProperty< Real > * > _external_properties_old
DynamicLibraryLoader _library
Real _aqCELENT
Characteristic element length, which is a typical length of a line across an element for a first-orde...
std::vector< Real > _aqDRPLDE
Variation of RPL with respect to the strain increments.
const std::vector< const VariableValue * > _external_fields
int _aqNTENS
Size of the stress or strain component array (NDI + NSHR).
const OptionalMaterialProperty< RankTwoTensor > & _rotation_increment
const bool _use_orientation
Rotation information.
std::vector< Real > _aqDFGRD1
Array containing the deformation gradient at the end of the increment.
const std::size_t _number_external_properties
const AnalysisStepUserObject * _step_user_object
User object that determines step number.
void initQpStatefulProperties() override
std::vector< Real > _aqPROPS
User-specified array of material constants associated with this user material.
unsigned int _aqNPT
Integration point number.
MaterialProperty< std::vector< Real > > & _state_var
const MaterialProperty< std::vector< Real > > & _state_var_old
std::vector< Real > _aqDDSDDT
Variation of the stress increments with respect to the temperature.
char _aqCMNAME[80]
Model name buffer.
MaterialProperty< Real > & _creep_dissipation
std::vector< Real > _aqSTRAN
An array containing the total strains at the beginning of the increment.
MaterialProperty< RankFourTensor > & _jacobian_mult
Jacobian multiplier.
const ComputeFiniteStrain::DecompMethod _decomposition_method
Method being used to compute strain and rotation increments.
const VariableValue & _temperature
std::vector< Real > _aqPREDEF
Array of interpolated values of predefined field variables at this point at the start of the incremen...
Real _aqRPL
Volumetric heat generation per unit time at the end of the increment caused by mechanical working of ...
std::vector< Real > _aqSTATEV
const bool _use_one_based_indexing
parameter to assist with the transition to 1-based indexing
const OptionalMaterialProperty< RankTwoTensor > & _Fbar
int _aqNSHR
Number of engineering shear stress components at this point.
const MaterialProperty< RankTwoTensor > & _total_rotation_old
const MaterialProperty< Real > & _elastic_strain_energy_old
std::vector< Real > _aqDSTRAN
Array of strain increments.
const std::size_t _number_external_fields
int _aqNPROPS
User-defined number of material constants associated with this user material.
Real _aqDRPLDT
Variation of the volumetric heat generation (RPL) with respect to the temperature.
Real _aqDTIME
Time increment.
Real _aqTEMP
Temperature at the start of the increment.
int _aqNSTATV
Number of solution-dependent state variables that are associated with this material type.
const MaterialProperty< RankTwoTensor > & _stress_old
void computeProperties() override
perform per-element computation/initialization
std::array< Real, 2 > _aqTIME
Value of step time at the beginning of the current increment, total time at the beginning of the curr...
void computeQpStress() override
Compute the stress and store it in the _stress material property for the current quadrature point.
std::vector< const MaterialProperty< Real > * > _external_properties
const OptionalMaterialProperty< RankTwoTensor > & _Fbar_old
int _aqNDI
Number of direct stress components at this point.
MaterialProperty< Real > & _elastic_strain_energy
Real _aqDTEMP
Increment of temperature.
MaterialProperty< Real > & _material_timestep
recommended maximum timestep for this model under the current conditions
MaterialProperty< Real > & _plastic_dissipation
const std::vector< MaterialPropertyName > _external_property_names
int _aqKSPT
Section point number within the current layer. (not supported)
std::vector< Real > _aqDPRED
Array of increments of predefined field variables.
std::vector< Real > _aqSTRESS
Stress tensor (in: old stress, out: updated stress)
Real _aqPNEWDT
Ratio of suggested new time increment to the time increment being used (out)
static InputParameters validParams()
Interface class for step user object.
User object that provides analysis steps given user input.
ComputeGeneralStressBase is the direct base class for stress calculator materials that may leverage q...
Wrapper class to facilitate loading and lifetime management of dynamic libraries and obtaining pointe...
This is a RealTensor version of a rotation matrix It is instantiated with the Euler angles,...
VariableValueTempl< false > VariableValue