https://mooseframework.inl.gov
elastic2.C
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 /***************************************************************************************
11 ** UMAT, FOR ABAQUS/STANDARD INCORPORATING ISOTROPIC ELASTICITY **
12 ***************************************************************************************/
13 
14 #pragma GCC diagnostic push
15 #pragma GCC diagnostic ignored "-Wunused-parameter"
16 
17 extern "C" void
18 umat_(double * stress,
19  double * statev,
20  double * ddsdde,
21  double * sse,
22  double * spd,
23  double * scd,
24  double * rpl,
25  double * ddsddt,
26  double * drplde,
27  double * drpldt,
28  double * stran,
29  double * dstran,
30  double * time,
31  double * dtime,
32  double * temp,
33  double * dtemp,
34  double * predef,
35  double * dpred,
36  char * cmname,
37  int * ndi,
38  int * nshr,
39  int * ntens,
40  int * nstatv,
41  double * props,
42  int * nprops,
43  double * coords,
44  double * drot,
45  double * pnewdt,
46  double * celent,
47  double * dfgrd0,
48  double * dfgrd1,
49  int * noel,
50  int * npt,
51  int * layer,
52  int * kspt,
53  int * kstep,
54  int * kinc,
55  short cmname_len)
56 {
57  auto emod = props[0];
58  auto enu = props[1];
59  auto ebulk3 = emod / (1.0 - 2.0 * enu);
60  auto eg2 = emod / (1.0 + enu);
61  auto eg = eg2 / 2.0;
62  auto elam = (ebulk3 - eg2) / 3.0;
63 
64  // elastic stiffness
65  for (int k1 = 0; k1 < *ndi; ++k1)
66  {
67  for (int k2 = 0; k2 < *ndi; ++k2)
68  ddsdde[k1 * *ntens + k2] = elam;
69  ddsdde[k1 * *ntens + k1] += eg2;
70  }
71  for (int k1 = *ndi; k1 < *ntens; ++k1)
72  ddsdde[k1 * *ntens + k1] = eg;
73 
74  // calculate stress
75  for (int k1 = 0; k1 < *ntens; ++k1)
76  for (int k2 = 0; k2 < *ntens; ++k2)
77  stress[k1] += ddsdde[k1 * *ntens + k2] * dstran[k2];
78 }
79 
80 #pragma GCC diagnostic pop
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, double *dtime, double *temp, double *dtemp, double *predef, double *dpred, char *cmname, int *ndi, int *nshr, int *ntens, int *nstatv, double *props, int *nprops, double *coords, double *drot, double *pnewdt, double *celent, double *dfgrd0, double *dfgrd1, int *noel, int *npt, int *layer, int *kspt, int *kstep, int *kinc, short cmname_len)
Definition: elastic2.C:18