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
12namespace Model
13{
14namespace Solid
15{
16namespace 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///
25class Laplacian : public Model::Solid::Solid<Set::Sym::Diagonal>
26{
27public:
28 Laplacian() { Define(); } ;
29 Laplacian(Set::Scalar alpha) { Define(alpha); } ;
30 Laplacian(Solid<Set::Sym::Diagonal> base) : Solid<Set::Sym::Diagonal>(base) {};
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 }
48public:
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
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
#define pp_query_default(...)
Definition ParmParse.H:100
Isotropic implements the following elastic model.
Definition Laplacian.H:26
Set::Scalar W(const Set::Matrix &gradu) const override
Definition Laplacian.H:36
Set::Matrix4< AMREX_SPACEDIM, Set::Sym::Diagonal > ddw
Definition Laplacian.H:61
static Laplacian Random()
Definition Laplacian.H:63
Set::Matrix4< AMREX_SPACEDIM, Set::Sym::Diagonal > DDW(const Set::Matrix &) const override
Definition Laplacian.H:44
void Define(Set::Scalar alpha=1.0)
Definition Laplacian.H:32
static void Parse(Laplacian value, IO::ParmParse pp)
Definition Laplacian.H:53
Laplacian(Set::Scalar alpha)
Definition Laplacian.H:29
static const KinematicVariable kinvar
Definition Laplacian.H:62
static Laplacian Zero()
Definition Laplacian.H:49
Set::Matrix DW(const Set::Matrix &gradu) const override
Definition Laplacian.H:40
Laplacian(Solid< Set::Sym::Diagonal > base)
Definition Laplacian.H:30
KinematicVariable
Definition Solid.H:26
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