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

          Line data    Source code
       1             : #include <AMReX_MultiFabUtil.H>
       2             : #include <AMReX_REAL.H>
       3             : #include <AMReX_MLCGSolver.H>
       4             : #include "Set/Set.H"
       5             : 
       6             : #include <AMReX_ArrayLim.H>
       7             : 
       8             : #include "Set/Set.H"
       9             : #include "Diagonal.H"
      10             : 
      11             : 
      12             : 
      13             : namespace Operator
      14             : {
      15           0 : Diagonal::Diagonal (const Vector<Geometry>& a_geom,
      16             :     const Vector<BoxArray>& a_grids,
      17             :     const Vector<DistributionMapping>& a_dmap,
      18           0 :     const LPInfo& a_info)
      19           0 : {define(a_geom, a_grids, a_dmap, a_info);}
      20           0 : Diagonal::~Diagonal () {}
      21             : 
      22             : 
      23             : void
      24           0 : Diagonal::Fapply (int amrlev,
      25             :         int mglev,
      26             :         MultiFab& f,
      27             :         const MultiFab& u
      28             :         ) const
      29             : {
      30             :     BL_PROFILE("Operator::Diagonal::Diagonal::Fapply()");
      31           0 :     std::cout << "in fapply, amrlev = " << amrlev << std::endl; 
      32             : 
      33           0 :     amrex::Box domain(m_geom[amrlev][mglev].Domain());
      34             : 
      35           0 :     for (MFIter mfi(f, true); mfi.isValid(); ++mfi)
      36             :     {
      37           0 :         const amrex::FArrayBox &ufab    = u[mfi];
      38           0 :         if(ufab.contains_inf()) Util::Abort(INFO, "Inf in ufab [before update]");
      39           0 :         if(ufab.contains_nan()) Util::Abort(INFO, "Nan in ufab [before update]");
      40             :     }
      41             : 
      42           0 :     for (MFIter mfi(f, true); mfi.isValid(); ++mfi)
      43             :     {
      44           0 :         const Box& bx = mfi.tilebox();
      45           0 :         const amrex::FArrayBox &ufab    = u[mfi];
      46           0 :         amrex::FArrayBox       &ffab    = f[mfi];
      47             : 
      48           0 :         AMREX_D_TERM(for (int m1 = bx.loVect()[0]; m1<=bx.hiVect()[0]; m1++),
      49             :                 for (int m2 = bx.loVect()[1]; m2<=bx.hiVect()[1]; m2++),
      50             :                 for (int m3 = bx.loVect()[2]; m3<=bx.hiVect()[2]; m3++))
      51             :         {
      52           0 :             amrex::IntVect m(AMREX_D_DECL(m1,m2,m3));
      53           0 :             for (int i=0; i<AMREX_SPACEDIM; i++)
      54             :             {
      55           0 :                 if (AMREX_D_TERM(m1 == domain.loVect()[0],
      56             :                         || m2 == domain.loVect()[1],
      57           0 :                         || m3 == domain.loVect()[2]) ||
      58           0 :                     AMREX_D_TERM(m1 == domain.hiVect()[0]+1,
      59             :                         || m2 == domain.hiVect()[1]+1,
      60             :                         || m3 == domain.hiVect()[2]+1))
      61             :                 {
      62           0 :                     ffab(m,i) = 2*ufab(m,i);
      63             :                 }
      64           0 :                 else if (AMREX_D_TERM(m1 == bx.loVect()[0], 
      65             :                             || m2 == bx.loVect()[1],
      66           0 :                             || m3 == bx.loVect()[2]) || 
      67           0 :                     AMREX_D_TERM(m1 == bx.hiVect()[0],
      68             :                             || m2 == bx.hiVect()[1],
      69             :                             || m3 == bx.hiVect()[2]))
      70           0 :                     continue;
      71             :                 else 
      72           0 :                     ffab(m,i) = 2*ufab(m,i);
      73             :             }
      74             :         }
      75             :     }
      76           0 :     for (MFIter mfi(f, true); mfi.isValid(); ++mfi)
      77             :     {
      78           0 :         amrex::FArrayBox       &ffab    = f[mfi];
      79           0 :         if(ffab.contains_inf()) Util::Abort(INFO, "Inf in ffab [after update]");
      80           0 :         if(ffab.contains_nan()) Util::Abort(INFO, "Nan in ffab [after update]");
      81             :     }
      82           0 : }
      83             : 
      84             : 
      85             : void
      86           0 : Diagonal::Fsmooth (int amrlev,
      87             :         int mglev,  
      88             :         MultiFab& u, 
      89             :         const MultiFab& rhs
      90             :         ) const
      91             : {
      92           0 :     for (int redblack = 0; redblack < 2; redblack++)
      93             :     {
      94             :         BL_PROFILE("Operator::Diagonal::Diagonal::Fsmooth()");
      95             : 
      96           0 :         amrex::Box domain(m_geom[amrlev][mglev].Domain());
      97             : 
      98           0 :         for (MFIter mfi(u,MFItInfo().EnableTiling().SetDynamic(true));
      99           0 :             mfi.isValid(); ++mfi)
     100             :         {
     101           0 :             const Box&       bx     = mfi.tilebox();
     102           0 :             FArrayBox&       ufab    = u[mfi];
     103           0 :             const FArrayBox& rhsfab  = rhs[mfi];
     104             : 
     105           0 :             AMREX_D_TERM(for (int m1 = bx.loVect()[0]; m1<=bx.hiVect()[0]; m1++),
     106             :                     for (int m2 = bx.loVect()[1]; m2<=bx.hiVect()[1]; m2++),
     107             :                     for (int m3 = bx.loVect()[2]; m3<=bx.hiVect()[2]; m3++))
     108             :             {
     109           0 :                 if ((AMREX_D_TERM(m1, + m2, + m3))%2 == redblack) continue;
     110           0 :                 amrex::IntVect m(AMREX_D_DECL(m1,m2,m3));
     111             : 
     112           0 :                 for (int i=0; i<AMREX_SPACEDIM; i++)
     113             :                 {
     114           0 :                     for (int k=0; k<AMREX_SPACEDIM; k++)
     115             :                     {
     116           0 :                         if (AMREX_D_TERM(m1 == domain.loVect()[0],
     117             :                                 || m2 == domain.loVect()[1],
     118           0 :                                 || m3 == domain.loVect()[2]) ||
     119           0 :                             AMREX_D_TERM(m1 == domain.hiVect()[0]+1,
     120             :                                 || m2 == domain.hiVect()[1]+1,
     121             :                                 || m3 == domain.hiVect()[2]+1))
     122             :                         {
     123           0 :                             ufab(m,k) = rhsfab(m,k) / 2.0;
     124             :                         }
     125           0 :                         else if (AMREX_D_TERM(m1 == bx.loVect()[0],
     126             :                                     || m2 == bx.loVect()[1],
     127           0 :                                     || m3 == bx.loVect()[2]) || 
     128           0 :                             AMREX_D_TERM(m1 == bx.hiVect()[0], 
     129             :                                     || m2 == bx.hiVect()[1],
     130             :                                     || m3 == bx.hiVect()[2]))
     131           0 :                             continue;
     132             :                         else 
     133           0 :                             ufab(m,k) = rhsfab(m,k) / 2.0;
     134             :                     }
     135             :                 }
     136             :             }
     137             :         }
     138             :     }
     139           0 : }
     140             : }

Generated by: LCOV version 1.14