Alamo
Cubic.H
Go to the documentation of this file.
1//
2// This class implements basic cubic elasticity.
3// For a discussion on cubic elasticity, `please see this link <http://solidmechanics.org/text/Chapter3_2/Chapter3_2.htm#Sect3_2_16>`_.
4//
5
6#ifndef MODEL_SOLID_LINEAR_CUBIC_H_
7#define MODEL_SOLID_LINEAR_CUBIC_H_
8
9#include "Model/Solid/Solid.H"
10#include "IO/ParmParse.H"
11
12namespace Model
13{
14namespace Solid
15{
16namespace Linear
17{
18class Cubic : public Solid<Set::Sym::MajorMinor>
19{
20public:
21
22 Cubic() {};
23 Cubic(Solid<Set::Sym::MajorMinor> base) : Solid<Set::Sym::MajorMinor>(base) {};
24 virtual ~Cubic() {};
25
26 void
31 void
32 Define(Set::Scalar C11, Set::Scalar C12, Set::Scalar C44, Eigen::Matrix3d R)
33 {
35 }
36 Set::Scalar W(const Set::Matrix & gradu) const override
37 {
38 return ( 0.5 * gradu.transpose() * (ddw*gradu) ).trace();
39 }
40 Set::Matrix DW(const Set::Matrix & gradu) const override
41 {
42 return ddw*gradu;
43 }
45 {
46 return ddw;
47 }
48 virtual void Print(std::ostream &out) const override
49 {
50 out << ddw;
51 }
52
53public:
56
57 AMREX_FORCE_INLINE
58 static Cubic Combine(const std::vector<Cubic> &models, const std::vector<Set::Scalar> &eta)
59 {
60 Cubic ret;
62 Set::Scalar etasum = 0.;
63 for (unsigned int n = 0 ; n < models.size(); n++) etasum += eta[n];
64 for (unsigned int n = 0 ; n < models.size(); n++)
65 {
66 ret.ddw += models[n].ddw * (eta[n] / etasum);
67 }
68 return ret;
69 }
70
71 static Cubic Zero()
72 {
73 Cubic ret;
74 ret.Define(0.0,0.0,0.0,0.0,0.0,0.0);
75 return ret;
76
77 }
78 static Cubic Random()
79 {
81 }
83 {
84 Cubic ret;
88 ret.Define(C11,C12,C44,phi1,Phi,phi2);
89 return ret;
90 }
91
92 static void Parse(Cubic & value, IO::ParmParse & pp)
93 {
94 Set::Scalar C11 = NAN, C12 = NAN, C44 = NAN;
95 pp_query_default("C11",C11,1.68); // Elastic constant
96 pp_query_default("C12",C12,1.21); // Elastic constant
97 pp_query_default("C44",C44,0.75); // Elastic constant
98
99 if (pp.contains("random"))
100 {
101 value = Cubic::Random(C11,C12,C44);
102 return;
103 }
104
105 std::string anglefmt;
106 // specify whether using radians or degrees
107 pp_query_validate("anglefmt",anglefmt,{"radians","degrees"});
108
109 Set::Scalar phi1 = NAN, Phi = NAN, phi2 = NAN;
110 pp_query_default("phi1",phi1,0.0); // Bunge Euler angle :math:`\phi_1` about x axis
111 pp_query_default("Phi", Phi, 0.0); // Bunge Euler angle :math:`\Phi` about z axis
112 pp_query_default("phi2",phi2,0.0); // Bunge Euler angle :math:`\phi_2` about x axis
113
114 if (anglefmt == "degrees")
115 {
116 phi1 *= Set::Constant::Pi / 180.0;
117 Phi *= Set::Constant::Pi / 180.0;
118 phi2 *= Set::Constant::Pi / 180.0;
119 }
120
121 value.Define(C11,C12,C44,phi1,Phi,phi2);
122 }
123
124 #define OP_CLASS Cubic
125 #define OP_VARS X(ddw)
127};
129
130}
131}
132}
133
134#endif
#define pp_query_validate(...)
Definition ParmParse.H:101
#define pp_query_default(...)
Definition ParmParse.H:100
bool contains(std::string name)
Definition ParmParse.H:154
Cubic(Solid< Set::Sym::MajorMinor > base)
Definition Cubic.H:23
Set::Matrix4< AMREX_SPACEDIM, Set::Sym::MajorMinor > DDW(const Set::Matrix &) const override
Definition Cubic.H:44
static void Parse(Cubic &value, IO::ParmParse &pp)
Definition Cubic.H:92
Set::Matrix DW(const Set::Matrix &gradu) const override
Definition Cubic.H:40
Set::Matrix4< AMREX_SPACEDIM, Set::Sym::MajorMinor > ddw
Definition Cubic.H:54
static Cubic Random(Set::Scalar C11, Set::Scalar C12, Set::Scalar C44)
Definition Cubic.H:82
static Cubic Zero()
Definition Cubic.H:71
void Define(Set::Scalar C11, Set::Scalar C12, Set::Scalar C44, Eigen::Matrix3d R)
Definition Cubic.H:32
Set::Scalar W(const Set::Matrix &gradu) const override
Definition Cubic.H:36
static const KinematicVariable kinvar
Definition Cubic.H:55
static Cubic Random()
Definition Cubic.H:78
void Define(Set::Scalar C11, Set::Scalar C12, Set::Scalar C44, Set::Scalar phi1, Set::Scalar Phi, Set::Scalar phi2)
Definition Cubic.H:27
virtual void Print(std::ostream &out) const override
Definition Cubic.H:48
static AMREX_FORCE_INLINE Cubic Combine(const std::vector< Cubic > &models, const std::vector< Set::Scalar > &eta)
Definition Cubic.H:58
KinematicVariable
Definition Solid.H:26
static const Set::Scalar Pi
Definition Set.H:286
A collection of data types and symmetry-reduced data structures.
Definition Base.H:18
amrex::Real Scalar
Definition Base.H:19
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, 1 > Vector
Definition Base.H:20
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, AMREX_SPACEDIM > Matrix
Definition Base.H:23
Set::Scalar Random()
Definition Set.cpp:9