https://mooseframework.inl.gov
Loading...
Searching...
No Matches
elastic_print_c.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#pragma GCC diagnostic push
11#pragma GCC diagnostic ignored "-Wunused-parameter"
12
13#include "MooseError.h"
14#include <iomanip>
15
16extern "C" void
17umat_(double * stress,
18 double * statev,
19 double * ddsdde,
20 double * sse,
21 double * spd,
22 double * scd,
23 double * rpl,
24 double * ddsddt,
25 double * drplde,
26 double * drpldt,
27 double * stran,
28 double * dstran,
29 double * time,
30 double * dtime,
31 double * temp,
32 double * dtemp,
33 double * predef,
34 double * dpred,
35 char * cmname,
36 int * ndi,
37 int * nshr,
38 int * ntens,
39 int * nstatv,
40 double * props,
41 int * nprops,
42 double * coords,
43 double * drot,
44 double * pnewdt,
45 double * celent,
46 double * dfgrd0,
47 double * dfgrd1,
48 int * noel,
49 int * npt,
50 int * layer,
51 int * kspt,
52 int * kstep,
53 int * kinc,
54 short cmname_len)
55{
56 const double E = props[0];
57 const double nu = props[1];
58 const double Ebulk = E / (1.0 - 2.0 * nu);
59 const double Eg2 = E / (1.0 + nu);
60 const double Eg = Eg2 / 2.0;
61 const double Elam = (Ebulk - Eg2) / 3.0;
62
63 // elastic stiffness
64 for (int k1 = 0; k1 < *ndi; ++k1)
65 {
66 for (int k2 = 0; k2 < *ndi; ++k2)
67 ddsdde[k1 * *ntens + k2] = Elam;
68 ddsdde[k1 * *ntens + k1] += Eg2;
69 }
70 for (int k1 = *ndi; k1 < *ntens; ++k1)
71 ddsdde[k1 * *ntens + k1] = Eg;
72
73 // calculate stress
74 for (int k1 = 0; k1 < *ntens; ++k1)
75 for (int k2 = 0; k2 < *ntens; ++k2)
76 stress[k1] += ddsdde[k1 * *ntens + k2] * dstran[k2];
77
78 if (*npt == 8)
79 {
80 Moose::out << std::fixed << std::setprecision(7);
81 for (int k1 = 0; k1 < *ntens; ++k1)
82 Moose::out << "stran " << k1 << " = " << stran[k1] << "\n";
83
84 for (int k1 = 0; k1 < *ntens; ++k1)
85 Moose::out << "dstran " << k1 << " = " << dstran[k1] << "\n";
86
87 for (int k1 = 0; k1 < *ntens; ++k1)
88 Moose::out << "stress " << k1 << " = " << stress[k1] << "\n";
89
90 for (int k1 = 0; k1 < *ndi; ++k1)
91 Moose::out << "coords " << k1 << " = " << coords[k1] << "\n";
92
93 for (int k1 = 0; k1 < *ndi * *ndi; ++k1)
94 Moose::out << "dfgrd0 " << k1 << " = " << dfgrd0[k1] << "\n";
95
96 for (int k1 = 0; k1 < *ndi * *ndi; ++k1)
97 Moose::out << "dfgrd1 " << k1 << " = " << dfgrd1[k1] << "\n";
98
99 for (int k1 = 0; k1 < *ndi * *ndi; ++k1)
100 Moose::out << "drot " << k1 << " = " << drot[k1] << "\n";
101
102 Moose::out << "time 0 = " << time[0] << "\n";
103 Moose::out << "time 1 = " << time[1] << "\n";
104 Moose::out << "celent = " << *celent << "\n";
105 Moose::out << std::defaultfloat;
106 Moose::out << "ndi = " << *ndi << "\n";
107 Moose::out << "nshr = " << *nshr << "\n";
108 Moose::out << "ntens = " << *ntens << "\n";
109 Moose::out << "noel = " << *noel << "\n";
110 Moose::out << "npt = " << *npt << "\n";
111 Moose::out << "layer = " << *layer << "\n";
112 Moose::out << "kspt = " << *kspt << "\n";
113 Moose::out << "kstep = " << *kstep << "\n";
114 Moose::out << "kinc = " << *kinc << "\n";
115 Moose::out << "cmname = " << cmname << "\n";
116 }
117}
118
119#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)