Alamo
AbsSin.H
Go to the documentation of this file.
1 #ifndef MODEL_INTERFACE_GB_ABSSIN_H
2 #define MODEL_INTERFACE_GB_ABSSIN_H
3 
4 #include <iostream>
5 #include <fstream>
6 
7 #include "AMReX.H"
8 #include "GB.H"
9 #include "Set/Set.H"
10 #include "Util/Util.H"
11 
12 namespace Model
13 {
14 namespace Interface
15 {
16 namespace GB
17 {
18 class AbsSin : public GB
19 {
20 public:
21  static constexpr const char* name = "abssin";
22 
23 AbsSin() {};
25 AbsSin(IO::ParmParse &pp, std::string name) {pp_queryclass(name,*this);};
26 
27 AbsSin(amrex::Real _theta0, amrex::Real _sigma0, amrex::Real _sigma1)
28 {
29  Define(_theta0,_sigma0,_sigma1);
30 };
31 void Define(amrex::Real _theta0, amrex::Real _sigma0, amrex::Real _sigma1)
32 {
33  theta0 = _theta0;
34  sigma0 = _sigma0;
35  sigma1 = _sigma1;
36 };
37 void Randomize()
38 {
40  sigma0 = Util::Random();
41  sigma1 = Util::Random();
42 };
43 Set::Scalar W(const Set::Scalar theta) const
44 {
45  //sigma(theta)=sigma0+sigma1*fabs(sin(n*(theta-theta0)))
46  //n=2:
47  return sigma0+sigma1*fabs(sin(2*(theta-theta0)));
48 
49 };
50 Set::Scalar DW(const Set::Scalar theta) const
51 {
52  //sigma'(theta)=(n*sigma1*sin(n*(theta-theta0))*cos(n*(theta-theta0)))/fabs(sin(n*(theta-theta0)))
53  //n=2:
54  return (2*sigma1*sin(2*(theta-theta0))*cos(2*(theta-theta0)))/fabs(sin(2*(theta-theta0)));
55 };
56 Set::Scalar DDW(const Set::Scalar theta) const
57 {
58  //sigma''(theta)=-n^2*sigma1*fabs(sin(n*(theta-theta0)))
59  //n=2:
60  return -4*sigma1*fabs(sin(2*(theta-theta0)));
61 };
62 
63 private:
64  Set::Scalar theta0 = NAN, sigma0 = NAN, sigma1 = NAN;
65 
66 public:
67  static void Parse(AbsSin & value, amrex::ParmParse & pp)
68  {
69  pp_query("theta0",value.theta0); // Angle offset (degrees)
70  value.theta0 *= 0.01745329251; // convert degrees into radians
71  pp_query("sigma0",value.sigma0); // Minimum energy
72  pp_query("sigma1",value.sigma1); // Energy multiplier
73  }
74 
75 };
76 }
77 }
78 }
79 
80 #endif
Model::Interface::GB::AbsSin::sigma1
Set::Scalar sigma1
Definition: AbsSin.H:64
Model::Interface::GB::AbsSin::AbsSin
AbsSin(amrex::Real _theta0, amrex::Real _sigma0, amrex::Real _sigma1)
Definition: AbsSin.H:27
Model::Interface::GB::AbsSin::DDW
Set::Scalar DDW(const Set::Scalar theta) const
Definition: AbsSin.H:56
Util.H
Model::Interface::GB::GB
Definition: GB.H:18
Model::Interface::GB::AbsSin::Randomize
void Randomize()
Definition: AbsSin.H:37
Model::Interface::GB::AbsSin::AbsSin
AbsSin()
Definition: AbsSin.H:23
pp_query
#define pp_query(...)
Definition: ParmParse.H:105
Model::Interface::GB::AbsSin::W
Set::Scalar W(const Set::Scalar theta) const
Definition: AbsSin.H:43
Util::Random
Set::Scalar Random()
Definition: Set.cpp:9
Set::Scalar
amrex::Real Scalar
Definition: Base.H:19
pp_queryclass
#define pp_queryclass(...)
Definition: ParmParse.H:106
GB.H
Model::Interface::GB::AbsSin::Parse
static void Parse(AbsSin &value, amrex::ParmParse &pp)
Definition: AbsSin.H:67
Model::Interface::GB::AbsSin::name
static constexpr const char * name
Definition: AbsSin.H:21
Model::Interface::GB::AbsSin::DW
Set::Scalar DW(const Set::Scalar theta) const
Definition: AbsSin.H:50
Model::Interface::GB::AbsSin::sigma0
Set::Scalar sigma0
Definition: AbsSin.H:64
Model::Interface::GB::AbsSin::theta0
Set::Scalar theta0
Definition: AbsSin.H:64
Model::Interface::GB::AbsSin::AbsSin
AbsSin(IO::ParmParse &pp)
Definition: AbsSin.H:24
Set.H
Set::Constant::Pi
static const Set::Scalar Pi
Definition: Set.H:286
IO::ParmParse
Definition: ParmParse.H:112
Model::Interface::GB::AbsSin::Define
void Define(amrex::Real _theta0, amrex::Real _sigma0, amrex::Real _sigma1)
Definition: AbsSin.H:31
Model::Interface::GB::AbsSin::AbsSin
AbsSin(IO::ParmParse &pp, std::string name)
Definition: AbsSin.H:25
Model
Definition: Constant.H:12
Model::Interface::GB::AbsSin
Definition: AbsSin.H:18