Skip to content

Commit

Permalink
created an x-pencil extraction routine
Browse files Browse the repository at this point in the history
  • Loading branch information
ajnonaka committed Jan 30, 2025
1 parent 05e6a23 commit b8d18b4
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 0 deletions.
52 changes: 52 additions & 0 deletions src_common/ComputeAverages.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -372,3 +372,55 @@ void ExtractSlice(const MultiFab& mf, MultiFab& mf_slice,
}
}
}


void ExtractXPencil(const MultiFab& mf, MultiFab& mf_pencil,
const int pencily, const int pencilz,
const int incomp, const int ncomp)
{
BL_PROFILE_VAR("ExtractXPencil()",ExtractXPencil);

// create BoxArray

// get lo and hi coordinates of problem domain
Box domain(mf.boxArray().minimalBox());
IntVect dom_lo(domain.loVect());
IntVect dom_hi(domain.hiVect());

dom_lo[1] = dom_hi[1] = pencily;
dom_lo[2] = dom_hi[2] = pencilz;

// create a BoxArray with a single box containing the pencil
Box domain_pencil(dom_lo, dom_hi);
BoxArray ba_pencil(domain_pencil);

// create a new DistributionMapping and define the MultiFab
DistributionMapping dmap_pencil(ba_pencil);
MultiFab mf_pencil_tmp(ba_pencil,dmap_pencil,ncomp,0);

// copy data from full MF into pencil
mf_pencil_tmp.ParallelCopy(mf, incomp, 0, ncomp);

// now copy this into a multifab with index zero in x and y
// (structure factor code requires this)
dom_lo[1] = dom_hi[1] = 0;
dom_lo[2] = dom_hi[2] = 0;

Box domain_pencil2(dom_lo,dom_hi);
BoxArray ba_pencil2(domain_pencil2);
mf_pencil.define(ba_pencil2,dmap_pencil,ncomp,0);

for ( MFIter mfi(mf_pencil_tmp,TilingIfNotGPU()); mfi.isValid(); ++mfi ) {

const Box& bx = mfi.tilebox();

const Array4<Real> & pencil = mf_pencil.array(mfi);
const Array4<Real> & pencil_tmp = mf_pencil_tmp.array(mfi);

amrex::ParallelFor(bx, ncomp, [=] AMREX_GPU_DEVICE (int i, int j, int k, int n) noexcept
{
pencil(i,0,0,n) = pencil_tmp(i,j,k,n);
});

}
}
4 changes: 4 additions & 0 deletions src_common/common_functions.H
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,10 @@ void ComputeVerticalAverage(const MultiFab & mf, MultiFab & mf_flat,
void ExtractSlice(const MultiFab & mf, MultiFab & mf_slice,
const int dir, const int slice, const int incomp, const int ncomp);

void ExtractXPencil(const MultiFab& mf, MultiFab& mf_pencil,
const int pencily, const int pencilz,
const int incomp, const int ncomp);

///////////////////////////
// in MultiFabPhysBC.cpp
// see comments in C++ files for descriptions
Expand Down

0 comments on commit b8d18b4

Please sign in to comment.