Alamo
Laplacian.H
Go to the documentation of this file.
1 #ifndef MODEL_SOLID_LINEAR_LAPLACIAN_H_
2 #define MODEL_SOLID_LINEAR_LAPLACIAN_H_
3 
4 #include <AMReX.H>
5 #include <AMReX_REAL.H>
6 #include <eigen3/Eigen/Core>
7 
8 #include "IO/ParmParse.H"
9 #include "Util/Util.H"
10 #include "Set/Set.H"
11 
12 namespace Model
13 {
14 namespace Solid
15 {
16 namespace Linear
17 {
18 ///
19 /// Isotropic implements the following elastic model
20 /// \f[ \mathbb{C}_{ijkl} = \alpha\delta_{ik}\delta_{jl} \f]
21 /// corresponding to the elastic model
22 /// \f[ \sigma_{ij} = \alpha\delta_{ik}\delta_{jl}u_{k,l} = \alpha u_{i,j} \f]
23 /// \f[ f_{i} = \mathbb{C}_{ijkl}u_{k,jl} = \alpha\delta_{ik}\delta_{jl}u_{k,jl} = \alpha u_{i,jj} \f]
24 ///
25 class Laplacian : public Model::Solid::Solid<Set::Sym::Diagonal>
26 {
27 public:
28  Laplacian() { Define(); } ;
29  Laplacian(Set::Scalar alpha) { Define(alpha); } ;
31  ~Laplacian() {} ;
32  void Define(Set::Scalar alpha = 1.0)
33  {
34  ddw = alpha*Set::Matrix4<AMREX_SPACEDIM,Set::Sym::Diagonal>(Set::Matrix::Ones());
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 public:
49  static Laplacian Zero()
50  {
51  return Laplacian(0.0);
52  }
53  static void Parse(Laplacian value,IO::ParmParse pp)
54  {
55  Set::Scalar alpha = NAN;
56  // Coefficient for the Laplacian
57  pp_query_default("alpha",alpha,1.0);
58  value.Define(alpha);
59  }
60 
63  static Laplacian Random()
64  {
65  Set::Scalar alpha = (Util::Random() + 0.1)/1.1;
66  return Laplacian(alpha);
67  }
68 
69 #define OP_CLASS Laplacian
70 #define OP_VARS X(ddw)
72 };
74 
75 }
76 }
77 }
78 #endif
Model::Solid::Linear::Laplacian::kinvar
static const KinematicVariable kinvar
Definition: Laplacian.H:62
Model::Solid::gradu
@ gradu
Definition: Solid.H:26
Model::Solid::Linear::Laplacian::Parse
static void Parse(Laplacian value, IO::ParmParse pp)
Definition: Laplacian.H:53
Model::Solid::Linear::Laplacian
Definition: Laplacian.H:25
Model::Solid::Linear::Laplacian::W
Set::Scalar W(const Set::Matrix &gradu) const override
Definition: Laplacian.H:36
Set::Sym
Sym
Definition: Base.H:197
Util.H
Model::Solid::Linear::Laplacian::DW
Set::Matrix DW(const Set::Matrix &gradu) const override
Definition: Laplacian.H:40
ParmParse.H
Util::Random
Set::Scalar Random()
Definition: Set.cpp:9
Set::Scalar
amrex::Real Scalar
Definition: Base.H:19
Set
A collection of data types and symmetry-reduced data structures.
Definition: Base.H:17
Model::Solid::Linear::Laplacian::Define
void Define(Set::Scalar alpha=1.0)
Definition: Laplacian.H:32
InClassOperators.H
Set::Matrix
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, AMREX_SPACEDIM > Matrix
Definition: Base.H:23
ExtClassOperators.H
Model::Solid::Linear::Laplacian::~Laplacian
~Laplacian()
Definition: Laplacian.H:31
Model::Solid::Linear::Laplacian::DDW
Set::Matrix4< AMREX_SPACEDIM, Set::Sym::Diagonal > DDW(const Set::Matrix &) const override
Definition: Laplacian.H:44
pp_query_default
#define pp_query_default(...)
Definition: ParmParse.H:100
Model::Solid::Solid
Definition: Solid.H:29
Model::Solid::Linear::Laplacian::Laplacian
Laplacian(Solid< Set::Sym::Diagonal > base)
Definition: Laplacian.H:30
Set::Matrix4< AMREX_SPACEDIM, Set::Sym::Diagonal >
Set.H
Model::Solid::Linear::Laplacian::Laplacian
Laplacian()
Definition: Laplacian.H:28
Model::Solid::KinematicVariable
KinematicVariable
Definition: Solid.H:26
IO::ParmParse
Definition: ParmParse.H:110
Model::Solid::Linear::Laplacian::Zero
static Laplacian Zero()
Definition: Laplacian.H:49
Model::Solid::Linear::Laplacian::Laplacian
Laplacian(Set::Scalar alpha)
Definition: Laplacian.H:29
Model
Definition: Constant.H:12
Model::Solid::Linear::Laplacian::Random
static Laplacian Random()
Definition: Laplacian.H:63
Set::Diagonal
@ Diagonal
Definition: Base.H:197
Model::Solid::Linear::Laplacian::ddw
Set::Matrix4< AMREX_SPACEDIM, Set::Sym::Diagonal > ddw
Definition: Laplacian.H:61