Line data Source code
1 : //
2 : // Class of BC operators that work with :ref:`Operator::Elastic`.
3 : //
4 :
5 : #ifndef BC_OPERATOR_ELASTIC_H
6 : #define BC_OPERATOR_ELASTIC_H
7 :
8 : // #include "Operator/Elastic.H"
9 : #include "IO/ParmParse.H"
10 : #include "Numeric/Interpolator/Linear.H"
11 :
12 : namespace BC
13 : {
14 : namespace Operator
15 : {
16 : namespace Elastic
17 : {
18 : class Elastic
19 : {
20 : public:
21 : static const int min = 1, max = 2;
22 :
23 : public:
24 : enum Type {Displacement, Traction, Periodic, Neumann, None};
25 :
26 : #if AMREX_SPACEDIM==2
27 : enum Face{
28 : XLO, YLO, XHI, YHI,
29 : XLO_YLO, XLO_YHI, XHI_YLO, XHI_YHI,
30 : INT
31 : };
32 : #elif AMREX_SPACEDIM==3
33 : enum Face{
34 : XLO, YLO, ZLO, XHI, YHI, ZHI, // 6
35 : YLO_ZLO, YLO_ZHI, YHI_ZLO, YHI_ZHI, // 12
36 : ZLO_XLO, ZLO_XHI, ZHI_XLO, ZHI_XHI,
37 : XLO_YLO, XLO_YHI, XHI_YLO, XHI_YHI,
38 : XLO_YLO_ZLO, XLO_YLO_ZHI, XLO_YHI_ZLO, XLO_YHI_ZHI, // 8
39 : XHI_YLO_ZLO, XHI_YLO_ZHI, XHI_YHI_ZLO, XHI_YHI_ZHI,
40 : INT
41 : };
42 : #endif
43 :
44 : enum Direction {AMREX_D_DECL(X=0,Y=1,Z=2)};
45 :
46 : void
47 426 : SetTime(const Set::Scalar a_time) {m_time = a_time;}
48 :
49 : virtual void
50 : Init(amrex::MultiFab * a_rhs,
51 : const amrex::Geometry &a_geom,
52 : bool a_homogeneous = false) const = 0;
53 :
54 : virtual void
55 : Init(amrex::FabArray<amrex::BaseFab<Set::Vector>> * a_rhs,
56 : const amrex::Geometry &a_geom,
57 : bool a_homogeneous = false) const = 0;
58 :
59 : void
60 0 : Init(Set::Field<Set::Scalar> &a_rhs,
61 : const amrex::Vector<amrex::Geometry> &a_geom,
62 : bool a_homogeneous = false) const
63 : {
64 0 : for (int ilev = 0; ilev <= a_rhs.finest_level; ilev++)
65 0 : Init(a_rhs[ilev].get(),a_geom[ilev],a_homogeneous);
66 0 : }
67 :
68 : void
69 426 : Init(Set::Field<Set::Vector> &a_rhs,
70 : const amrex::Vector<amrex::Geometry> &a_geom,
71 : bool a_homogeneous = false) const
72 : {
73 898 : for (int ilev = 0; ilev <= a_rhs.finest_level; ilev++)
74 472 : Init(a_rhs[ilev].get(),a_geom[ilev],a_homogeneous);
75 426 : }
76 :
77 : #define SQRT3INV 0.57735026919
78 : #define SQRT2INV 0.70710678118
79 :
80 : virtual
81 : std::array<Type,AMREX_SPACEDIM> getType (
82 : const int &i, const int &j, const int &k,
83 : const amrex::Box &domain) = 0;
84 :
85 : virtual
86 : Set::Vector operator () (const Set::Vector &u,
87 : const Set::Matrix &gradu,
88 : const Set::Matrix &sigma,
89 : const int &i, const int &j, const int &k,
90 : const amrex::Box &domain) = 0;
91 :
92 : protected:
93 : Set::Scalar m_time = 0.0;
94 : };
95 : }
96 : }
97 : }
98 : #endif
|