https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
17extern "C" void
18umat_(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