Line data Source code
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() {}; 24 : AbsSin(IO::ParmParse &pp) {pp_queryclass(*this);}; 25 0 : 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 : { 39 : theta0 = Util::Random()*Set::Constant::Pi; 40 : sigma0 = Util::Random(); 41 : sigma1 = Util::Random(); 42 : }; 43 0 : Set::Scalar W(const Set::Scalar theta) const 44 : { 45 : //sigma(theta)=sigma0+sigma1*fabs(sin(n*(theta-theta0))) 46 : //n=2: 47 0 : return sigma0+sigma1*fabs(sin(2*(theta-theta0))); 48 : 49 : }; 50 0 : 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 0 : return (2*sigma1*sin(2*(theta-theta0))*cos(2*(theta-theta0)))/fabs(sin(2*(theta-theta0))); 55 : }; 56 0 : Set::Scalar DDW(const Set::Scalar theta) const 57 : { 58 : //sigma''(theta)=-n^2*sigma1*fabs(sin(n*(theta-theta0))) 59 : //n=2: 60 0 : 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 0 : static void Parse(AbsSin & value, amrex::ParmParse & pp) 68 : { 69 0 : pp_query("theta0",value.theta0); // Angle offset (degrees) 70 0 : value.theta0 *= 0.01745329251; // convert degrees into radians 71 0 : pp_query("sigma0",value.sigma0); // Minimum energy 72 0 : pp_query("sigma1",value.sigma1); // Energy multiplier 73 0 : } 74 : 75 : }; 76 : } 77 : } 78 : } 79 : 80 : #endif