void MCLinOp::residual (MultiFab& residL, const MultiFab& rhsL, MultiFab& solnL, int level, MCBC_Mode bc_mode) { apply(residL, solnL, level, bc_mode); for (MFIter solnLmfi(solnL); solnLmfi.isValid(); ++solnLmfi) { int nc = residL.nComp(); const Box& vbox = solnLmfi.validbox(); FArrayBox& resfab = residL[solnLmfi]; const FArrayBox& rhsfab = rhsL[solnLmfi]; FORT_RESIDL( resfab.dataPtr(), ARLIM(resfab.loVect()), ARLIM(resfab.hiVect()), rhsfab.dataPtr(), ARLIM(rhsfab.loVect()), ARLIM(rhsfab.hiVect()), resfab.dataPtr(), ARLIM(resfab.loVect()), ARLIM(resfab.hiVect()), vbox.loVect(), vbox.hiVect(), &nc); } }
void LinOp::residual (MultiFab& residL, const MultiFab& rhsL, MultiFab& solnL, int level, LinOp::BC_Mode bc_mode, bool local) { BL_PROFILE("LinOp::residual()"); apply(residL, solnL, level, bc_mode, local); const bool tiling = true; #ifdef _OPENMP #pragma omp parallel #endif for (MFIter solnLmfi(solnL,tiling); solnLmfi.isValid(); ++solnLmfi) { const int nc = residL.nComp(); // // Only single-component solves supported (verified) by this class. // BL_ASSERT(nc == 1); const Box& tbx = solnLmfi.tilebox(); BL_ASSERT(gbox[level][solnLmfi.index()] == solnLmfi.validbox()); FArrayBox& residfab = residL[solnLmfi]; const FArrayBox& rhsfab = rhsL[solnLmfi]; FORT_RESIDL( residfab.dataPtr(), ARLIM(residfab.loVect()), ARLIM(residfab.hiVect()), rhsfab.dataPtr(), ARLIM(rhsfab.loVect()), ARLIM(rhsfab.hiVect()), residfab.dataPtr(), ARLIM(residfab.loVect()), ARLIM(residfab.hiVect()), tbx.loVect(), tbx.hiVect(), &nc); } }