forked from ECP-WarpX/WarpX
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
29a0a56
commit 3feb26a
Showing
4 changed files
with
86 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
45 changes: 45 additions & 0 deletions
45
Source/Diagnostics/ComputeDiagFunctors/ProcessorMapFunctor.H
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
#ifndef WARPX_PROCESSORMAPFUNCTOR_H_ | ||
#define WARPX_PROCESSORMAPFUNCTOR_H_ | ||
|
||
#include "ComputeDiagFunctor.H" | ||
|
||
#include <AMReX_BaseFwd.H> | ||
|
||
/** | ||
* \brief Functor to cell-center MF and store result in mf_out. | ||
*/ | ||
class ProcessorMapFunctor final : public ComputeDiagFunctor | ||
{ | ||
public: | ||
/** Constructor. | ||
* | ||
* \param[in] mf_src source multifab. | ||
* \param[in] lev level of multifab. Used for averaging in rz. | ||
* \param[in] crse_ratio for interpolating field values from the simulation MultiFab, src_mf, | ||
to the output diagnostic MultiFab, mf_dst. | ||
* \param[in] convertRZmodes2cartesian (in cylindrical) whether to | ||
* sum all modes in mf_src before cell-centering into dst multifab. | ||
* \param[in] ncomp Number of component of mf_src to cell-center in dst multifab. | ||
*/ | ||
ProcessorMapFunctor(const amrex::MultiFab * mf_src, int lev, | ||
amrex::IntVect crse_ratio, | ||
bool convertRZmodes2cartesian=true, int ncomp=1); | ||
/** \brief Cell-center m_mf_src and write the result in mf_dst. | ||
* | ||
* In cylindrical geometry, by default this functor average all components | ||
* of a MultiFab and writes into one single component. | ||
* | ||
* \param[out] mf_dst output MultiFab where the result is written | ||
* \param[in] dcomp first component of mf_dst in which cell-centered | ||
* data is stored | ||
*/ | ||
void operator()(amrex::MultiFab& mf_dst, int dcomp, int /*i_buffer=0*/) const override; | ||
private: | ||
/** pointer to source multifab (can be multi-component) */ | ||
amrex::MultiFab const * const m_mf_src = nullptr; | ||
int m_lev; /**< level on which mf_src is defined (used in cylindrical) */ | ||
/**< (for cylindrical) whether to average all modes into 1 comp */ | ||
bool m_convertRZmodes2cartesian; | ||
}; | ||
|
||
#endif // WARPX_CELLCENTERFUNCTOR_H_ |
37 changes: 37 additions & 0 deletions
37
Source/Diagnostics/ComputeDiagFunctors/ProcessorMapFunctor.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
#include "ProcessorMapFunctor.H" | ||
|
||
#include "WarpX.H" | ||
|
||
#include <AMReX.H> | ||
#include <AMReX_IntVect.H> | ||
#include <AMReX_MultiFab.H> | ||
|
||
ProcessorMapFunctor::ProcessorMapFunctor(amrex::MultiFab const * mf_src, int lev, | ||
amrex::IntVect crse_ratio, | ||
bool convertRZmodes2cartesian, int ncomp) | ||
: ComputeDiagFunctor(ncomp, crse_ratio), m_mf_src(mf_src), m_lev(lev), | ||
m_convertRZmodes2cartesian(convertRZmodes2cartesian) | ||
{} | ||
|
||
void | ||
ProcessorMapFunctor::operator()(amrex::MultiFab& mf_dst, int dcomp, const int /*i_buffer*/) const | ||
{ | ||
std::unique_ptr<amrex::MultiFab> tmp; | ||
tmp = std::make_unique<amrex::MultiFab>(m_mf_src->boxArray(), m_mf_src->DistributionMap(), 1, m_mf_src->nGrowVect()); | ||
|
||
auto& warpx = WarpX::GetInstance(); | ||
const amrex::DistributionMapping& dm = warpx.DistributionMap(m_lev); | ||
for (amrex::MFIter mfi(*tmp, false); mfi.isValid(); ++mfi) | ||
{ | ||
auto bx = mfi.growntilebox(tmp->nGrowVect()); | ||
auto arr = tmp->array(mfi); | ||
int iproc = dm[mfi.index()]; | ||
amrex::ParallelFor(bx, | ||
[=] AMREX_GPU_DEVICE(int i, int j, int k) | ||
{ | ||
arr(i,j,k) = iproc; | ||
}); | ||
} | ||
InterpolateMFForDiag(mf_dst, *tmp, dcomp, warpx.DistributionMap(m_lev), | ||
m_convertRZmodes2cartesian); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters