Alamo
Hexagonal.H
Go to the documentation of this file.
1//
2// This model implements an affine hexagonal material:
3//
4// .. math::
5//
6// W_{aff}(\nabla\mathbf{u}) = W_{lin}(\nabla\mathbf{u} - \mathbf{F}_0)
7//
8// where :math:`W_{aff}` is the present model, :math:`\mathbf{F}_0` is the eigenstrain,
9// and :math:`W_{lin}` is the cubic model defined in :ref:`Model::Solid::Linear::Hexagonal`.
10//
11#ifndef MODEL_SOLID_AFFINE_HEXAGONAL_H_
12#define MODEL_SOLID_AFFINE_HEXAGONAL_H_
13
14#include "Model/Solid/Solid.H"
16#include "IO/ParmParse.H"
17
18namespace Model
19{
20namespace Solid
21{
22namespace Affine
23{
25{
26public:
27 static constexpr const char *name = "hexagonal";
28
30 Hexagonal(Linear::Hexagonal base) : Linear::Hexagonal(base) {};
31 virtual ~Hexagonal() {};
32
33 void
34 Define(Set::Scalar C11, Set::Scalar C12, Set::Scalar C13, Set::Scalar C33, Set::Scalar C44, Set::Scalar phi1, Set::Scalar Phi, Set::Scalar phi2,Set::Matrix a_F0=Set::Matrix::Zero())
35 {
36 Linear::Hexagonal::Define(C11,C12,C13,C33,C44,phi1,Phi,phi2);
37 F0 = a_F0;
38 }
39 void
40 Define(Set::Scalar C11, Set::Scalar C12, Set::Scalar C13, Set::Scalar C33, Set::Scalar C44, Eigen::Matrix3d R, Set::Matrix a_F0=Set::Matrix::Zero())
41 {
42 Linear::Hexagonal::Define(C11,C12,C13,C33,C44,R);
43 F0 = a_F0;
44 }
45 Set::Scalar W(const Set::Matrix & gradu) const override
46 {
48 }
49 Set::Matrix DW(const Set::Matrix & gradu) const override
50 {
52 }
57 virtual void Print(std::ostream &out) const override
58 {
59 out << ddw;
60 }
61 AMREX_FORCE_INLINE
62 void SetF0 (Set::Matrix &a_F0) {F0 = a_F0;}
63
64public:
65 Set::Matrix F0 = Set::Matrix::Zero();
67
68 static Hexagonal Zero()
69 {
71 ret.F0 = Set::Matrix::Zero();
72 return ret;
73 }
79 {
80 Hexagonal ret = Linear::Hexagonal::Random(C11,C12,C13,C33,C44);
81 ret.F0 = Set::Matrix::Random();
82 return ret;
83 }
84 static void Parse(Hexagonal & value, IO::ParmParse & pp)
85 {
87 pp_queryarr("F0",value.F0); // Eigenstrain matrix. Can be defined in 2D or 3D.
88 }
89
90 AMREX_FORCE_INLINE
91 static Hexagonal Combine(const std::vector<Hexagonal> &models, const std::vector<Set::Scalar> &eta, int order)
92 {
93 Hexagonal ret;
95 ret.F0 = Set::Matrix::Zero();
96 if (order == 1)
97 {
98 Set::Scalar etasum = 0.;
99 for (unsigned int n = 0 ; n < models.size(); n++) etasum += eta[n];
100 for (unsigned int n = 0 ; n < models.size(); n++)
101 {
102 ret.ddw += models[n].ddw * (eta[n] / etasum);
103 ret.F0 += models[n].F0 * (eta[n] / etasum);
104 }
105 return ret;
106 }
107 Util::Exception(INFO,"Order value of ", order, " not supported yet");
108 return ret;
109 }
110
111 #define OP_CLASS Hexagonal
112 #define OP_VARS X(ddw) X(F0)
114};
116
117}
118}
119}
120
121template<>
124{
125 return 1;
126}
127
128template<>
131{
132 if (i==0) return name + ".Cxxxx";
133 return name;
134}
135
136template<>
139{
140 for (amrex::MFIter mfi(a_dst, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
141 {
142 const amrex::Box& bx = mfi.growntilebox(amrex::IntVect(a_nghost));
143 if (bx.ok())
144 {
145 amrex::Array4<const Model::Solid::Affine::Hexagonal> const & src = ((*this)[a_lev])->array(mfi);
146 amrex::Array4<Set::Scalar> const & dst = a_dst.array(mfi);
147 amrex::ParallelFor(bx, [=] AMREX_GPU_DEVICE(int i, int j, int k)
148 {
149 dst(i,j,k,a_dstcomp + 0) = src(i,j,k).ddw(0,0,0,0);
150 });
151 }
152 }
153}
154
155
156#endif
#define pp_queryarr(...)
Definition ParmParse.H:103
#define ALAMO_SINGLE_DEFINITION
Definition Util.H:25
#define INFO
Definition Util.H:20
void queryclass(std::string name, T *value, std::string file="", std::string func="", int line=-1)
Definition ParmParse.H:604
void Define(Set::Scalar C11, Set::Scalar C12, Set::Scalar C13, Set::Scalar C33, Set::Scalar C44, Set::Scalar phi1, Set::Scalar Phi, Set::Scalar phi2, Set::Matrix a_F0=Set::Matrix::Zero())
Definition Hexagonal.H:34
Set::Matrix4< AMREX_SPACEDIM, Set::Sym::MajorMinor > DDW(const Set::Matrix &gradu) const override
Definition Hexagonal.H:53
AMREX_FORCE_INLINE void SetF0(Set::Matrix &a_F0)
Definition Hexagonal.H:62
static Hexagonal Zero()
Definition Hexagonal.H:68
virtual void Print(std::ostream &out) const override
Definition Hexagonal.H:57
Hexagonal(Linear::Hexagonal base)
Definition Hexagonal.H:30
static Hexagonal Random()
Definition Hexagonal.H:74
void Define(Set::Scalar C11, Set::Scalar C12, Set::Scalar C13, Set::Scalar C33, Set::Scalar C44, Eigen::Matrix3d R, Set::Matrix a_F0=Set::Matrix::Zero())
Definition Hexagonal.H:40
Set::Scalar W(const Set::Matrix &gradu) const override
Definition Hexagonal.H:45
static AMREX_FORCE_INLINE Hexagonal Combine(const std::vector< Hexagonal > &models, const std::vector< Set::Scalar > &eta, int order)
Definition Hexagonal.H:91
static constexpr const char * name
Definition Hexagonal.H:27
static Hexagonal Random(Set::Scalar C11, Set::Scalar C12, Set::Scalar C13, Set::Scalar C33, Set::Scalar C44)
Definition Hexagonal.H:78
Set::Matrix DW(const Set::Matrix &gradu) const override
Definition Hexagonal.H:49
static void Parse(Hexagonal &value, IO::ParmParse &pp)
Definition Hexagonal.H:84
static const KinematicVariable kinvar
Definition Hexagonal.H:66
Set::Scalar W(const Set::Matrix &gradu) const override
Definition Hexagonal.H:112
static Hexagonal Random()
Definition Hexagonal.H:154
Set::Matrix4< AMREX_SPACEDIM, Set::Sym::MajorMinor > ddw
Definition Hexagonal.H:130
Set::Matrix4< AMREX_SPACEDIM, Set::Sym::MajorMinor > DDW(const Set::Matrix &) const override
Definition Hexagonal.H:120
void Define(Set::Scalar C11, Set::Scalar C12, Set::Scalar C13, Set::Scalar C33, Set::Scalar C44, Set::Scalar phi1, Set::Scalar Phi, Set::Scalar phi2)
Definition Hexagonal.H:58
Set::Matrix DW(const Set::Matrix &gradu) const override
Definition Hexagonal.H:116
std::string Name(int) const
Definition Set.H:73
void Copy(int, amrex::MultiFab &, int, int) const
Definition Set.H:68
int NComp() const
Definition Set.H:72
KinematicVariable
Definition Solid.H:26
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
void Exception(std::string file, std::string func, int line, Args const &... args)
Definition Util.H:205