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
12namespace Model
13{
14namespace Interface
15{
16namespace GB
17{
18class AbsSin : public GB
19{
20public:
21 static constexpr const char* name = "abssin";
22
23AbsSin() {};
25AbsSin(IO::ParmParse &pp, std::string name) {pp_queryclass(name,*this);};
26
27AbsSin(amrex::Real _theta0, amrex::Real _sigma0, amrex::Real _sigma1)
28{
29 Define(_theta0,_sigma0,_sigma1);
30};
31void Define(amrex::Real _theta0, amrex::Real _sigma0, amrex::Real _sigma1)
32{
33 theta0 = _theta0;
34 sigma0 = _sigma0;
35 sigma1 = _sigma1;
36};
43Set::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};
50Set::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};
56Set::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
63private:
64 Set::Scalar theta0 = NAN, sigma0 = NAN, sigma1 = NAN;
65
66public:
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
#define pp_query(...)
Definition ParmParse.H:106
#define pp_queryclass(...)
Definition ParmParse.H:107
AbsSin(IO::ParmParse &pp)
Definition AbsSin.H:24
Set::Scalar W(const Set::Scalar theta) const
Definition AbsSin.H:43
Set::Scalar DW(const Set::Scalar theta) const
Definition AbsSin.H:50
Set::Scalar DDW(const Set::Scalar theta) const
Definition AbsSin.H:56
void Define(amrex::Real _theta0, amrex::Real _sigma0, amrex::Real _sigma1)
Definition AbsSin.H:31
static constexpr const char * name
Definition AbsSin.H:21
AbsSin(amrex::Real _theta0, amrex::Real _sigma0, amrex::Real _sigma1)
Definition AbsSin.H:27
static void Parse(AbsSin &value, amrex::ParmParse &pp)
Definition AbsSin.H:67
AbsSin(IO::ParmParse &pp, std::string name)
Definition AbsSin.H:25
static const Set::Scalar Pi
Definition Set.H:286
amrex::Real Scalar
Definition Base.H:19
Set::Scalar Random()
Definition Set.cpp:9