LCOV - code coverage report
Current view: top level - src/Model/Interface/GB - Sin.H (source / functions) Hit Total Coverage
Test: coverage_merged.info Lines: 14 14 100.0 %
Date: 2024-11-18 05:28:54 Functions: 5 5 100.0 %

          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

Generated by: LCOV version 1.14