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 AbsSin() {};
23 AbsSin(IO::ParmParse &pp, std::string name) {pp_queryclass(name,*this);};
24 
25 AbsSin(amrex::Real _theta0, amrex::Real _sigma0, amrex::Real _sigma1)
26 {
27  Define(_theta0,_sigma0,_sigma1);
28 };
29 void Define(amrex::Real _theta0, amrex::Real _sigma0, amrex::Real _sigma1)
30 {
31  theta0 = _theta0;
32  sigma0 = _sigma0;
33  sigma1 = _sigma1;
34 };
35 void Randomize()
36 {
38  sigma0 = Util::Random();
39  sigma1 = Util::Random();
40 };
41 Set::Scalar W(const Set::Scalar theta) const
42 {
43  //sigma(theta)=sigma0+sigma1*fabs(sin(n*(theta-theta0)))
44  //n=2:
45  return sigma0+sigma1*fabs(sin(2*(theta-theta0)));
46 
47 };
48 Set::Scalar DW(const Set::Scalar theta) const
49 {
50  //sigma'(theta)=(n*sigma1*sin(n*(theta-theta0))*cos(n*(theta-theta0)))/fabs(sin(n*(theta-theta0)))
51  //n=2:
52  return (2*sigma1*sin(2*(theta-theta0))*cos(2*(theta-theta0)))/fabs(sin(2*(theta-theta0)));
53 };
54 Set::Scalar DDW(const Set::Scalar theta) const
55 {
56  //sigma''(theta)=-n^2*sigma1*fabs(sin(n*(theta-theta0)))
57  //n=2:
58  return -4*sigma1*fabs(sin(2*(theta-theta0)));
59 };
60 
61 private:
62  Set::Scalar theta0 = NAN, sigma0 = NAN, sigma1 = NAN;
63 
64 public:
65  static void Parse(AbsSin & value, amrex::ParmParse & pp)
66  {
67  pp_query("theta0",value.theta0); // Angle offset (degrees)
68  value.theta0 *= 0.01745329251; // convert degrees into radians
69  pp_query("sigma0",value.sigma0); // Minimum energy
70  pp_query("sigma1",value.sigma1); // Energy multiplier
71  }
72 
73 };
74 }
75 }
76 }
77 
78 #endif
Model::Interface::GB::AbsSin::sigma1
Set::Scalar sigma1
Definition: AbsSin.H:62
Model::Interface::GB::AbsSin::AbsSin
AbsSin(amrex::Real _theta0, amrex::Real _sigma0, amrex::Real _sigma1)
Definition: AbsSin.H:25
Model::Interface::GB::AbsSin::DDW
Set::Scalar DDW(const Set::Scalar theta) const
Definition: AbsSin.H:54
Util.H
Model::Interface::GB::GB
Definition: GB.H:18
Model::Interface::GB::AbsSin::Randomize
void Randomize()
Definition: AbsSin.H:35
Model::Interface::GB::AbsSin::AbsSin
AbsSin()
Definition: AbsSin.H:21
pp_query
#define pp_query(...)
Definition: ParmParse.H:104
Model::Interface::GB::AbsSin::W
Set::Scalar W(const Set::Scalar theta) const
Definition: AbsSin.H:41
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:105
GB.H
Model::Interface::GB::AbsSin::Parse
static void Parse(AbsSin &value, amrex::ParmParse &pp)
Definition: AbsSin.H:65
Model::Interface::GB::AbsSin::DW
Set::Scalar DW(const Set::Scalar theta) const
Definition: AbsSin.H:48
Model::Interface::GB::AbsSin::sigma0
Set::Scalar sigma0
Definition: AbsSin.H:62
Model::Interface::GB::AbsSin::theta0
Set::Scalar theta0
Definition: AbsSin.H:62
Model::Interface::GB::AbsSin::AbsSin
AbsSin(IO::ParmParse &pp)
Definition: AbsSin.H:22
Set.H
Set::Constant::Pi
static const Set::Scalar Pi
Definition: Set.H:286
IO::ParmParse
Definition: ParmParse.H:110
Model::Interface::GB::AbsSin::Define
void Define(amrex::Real _theta0, amrex::Real _sigma0, amrex::Real _sigma1)
Definition: AbsSin.H:29
Model::Interface::GB::AbsSin::AbsSin
AbsSin(IO::ParmParse &pp, std::string name)
Definition: AbsSin.H:23
Model
Definition: Constant.H:12
Model::Interface::GB::AbsSin
Definition: AbsSin.H:18