Line data Source code
1 : #ifndef MODEL_INTERFACE_GB_SIN_H 2 : #define MODEL_INTERFACE_GB_SIN_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 Sin : public GB 19 : { 20 : public: 21 : static constexpr const char* name = "sin"; 22 : 23 : Sin() {}; 24 : Sin(IO::ParmParse &pp) {pp_queryclass(*this);}; 25 2 : Sin(IO::ParmParse &pp,std::string name) {pp_queryclass(name,*this);}; 26 : Sin(amrex::Real _theta0, amrex::Real _sigma0, amrex::Real _sigma1) 27 : { 28 : Define(_theta0,_sigma0,_sigma1); 29 : }; 30 : void Define(amrex::Real _theta0, amrex::Real _sigma0, amrex::Real _sigma1) 31 : { 32 : theta0 = _theta0; 33 : sigma0 = _sigma0; 34 : sigma1 = _sigma1; 35 : }; 36 : void Randomize() 37 : { 38 : theta0 = Util::Random()*Set::Constant::Pi; 39 : sigma0 = Util::Random(); 40 : sigma1 = Util::Random(); 41 : }; 42 2886850 : Set::Scalar W(const Set::Scalar theta) const 43 : { 44 2886850 : return sigma0 + 0.5*sigma1*(1.0 - cos(n*(theta-theta0))); 45 : }; 46 1362860 : Set::Scalar DW(const Set::Scalar theta) const 47 : { 48 1362860 : return 2.0*sigma1*sin(n*(theta-theta0)); 49 : }; 50 1362860 : Set::Scalar DDW(const Set::Scalar theta) const 51 : { 52 1362860 : return 8.0*sigma1*cos(n*(theta-theta0)); 53 : }; 54 : 55 : private: 56 : Set::Scalar theta0 = NAN, sigma0 = NAN, sigma1 = NAN, n = 4.0; 57 : 58 : public: 59 2 : static void Parse(Sin & value, amrex::ParmParse & pp) 60 : { 61 2 : pp_query("theta0",value.theta0); // Theta offset (degrees) 62 2 : value.theta0 *= 0.01745329251; // convert degrees into radians 63 2 : pp_query("sigma0",value.sigma0); // Minimum energy 64 2 : pp_query("sigma1",value.sigma1); // Energy multiplier 65 2 : pp_query("n",value.n); // Frequency number (integer) 66 2 : } 67 : 68 : }; 69 : } 70 : } 71 : } 72 : #endif