LCOV - code coverage report
Current view: top level - src/IC - Random.H (source / functions) Hit Total Coverage
Test: coverage_merged.info Lines: 0 22 0.0 %
Date: 2024-11-18 05:28:54 Functions: 0 5 0.0 %

          Line data    Source code
       1             : #ifndef IC_RANDOM_H_
       2             : #define IC_RANDOM_H_
       3             : 
       4             : #include "AMReX_Vector.H"
       5             : 
       6             : #include "IO/ParmParse.H"
       7             : #include "IC/IC.H"
       8             : #include "Util/Util.H"
       9             : #include "Set/Set.H"
      10             : #include "IO/ParmParse.H"
      11             : 
      12             : namespace IC
      13             : {
      14             : /// \brief Set each point to a random value.
      15             : class Random : public IC
      16             : {
      17             : public:
      18             :     static constexpr const char* name = "random";
      19             : 
      20           0 :     Random (amrex::Vector<amrex::Geometry> &_geom, Set::Scalar a_mult) :
      21           0 :         IC(_geom), mult(a_mult)
      22           0 :     {}
      23           0 :     Random(amrex::Vector<amrex::Geometry>& _geom, IO::ParmParse& pp, std::string name) : IC(_geom)
      24             :     {
      25           0 :         pp.queryclass(name, *this);
      26           0 :     }
      27             :   
      28           0 :     void Add(const int &lev, Set::Field<Set::Scalar> &a_field, Set::Scalar)
      29             :     {
      30           0 :         for (amrex::MFIter mfi(*a_field[lev], amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
      31             :         {
      32           0 :             amrex::Box bx;
      33           0 :             amrex::IndexType type = a_field[lev]->ixType();
      34           0 :             if (type == amrex::IndexType::TheCellType())      bx = mfi.growntilebox();
      35           0 :             else if (type == amrex::IndexType::TheNodeType()) bx = mfi.grownnodaltilebox();
      36           0 :             else Util::Abort(INFO, "Unkonwn index type");
      37             :             
      38           0 :             Set::Patch<Set::Scalar> field = a_field.Patch(lev,mfi);
      39           0 :             for (int n = 0; n < a_field[lev]->nComp(); n++)
      40             :             {
      41           0 :                 amrex::ParallelFor(bx, [=] AMREX_GPU_DEVICE(int i, int j, int k)
      42             :                 {
      43           0 :                     field(i,j,k,n) += mult * Util::Random();
      44           0 :                 });
      45             :             }
      46             :         }
      47           0 :     }
      48             : 
      49             :     using IC::Add;
      50             : 
      51           0 :     static void Parse(Random & value, IO::ParmParse & pp)
      52             :     {
      53           0 :         pp.query_default("mult",value.mult,1.0); // Multiplier
      54           0 :     }
      55             :     
      56             : private:
      57             :     Set::Scalar mult = NAN;
      58             : 
      59             : };
      60             : }
      61             : #endif
      62             : 

Generated by: LCOV version 1.14