LCOV - code coverage report
Current view: top level - src/IC - Random.H (source / functions) Coverage Total Hit
Test: coverage_merged.info Lines: 0.0 % 21 0
Test Date: 2025-04-03 04:02:21 Functions: 0.0 % 4 0

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

Generated by: LCOV version 2.0-1