aboutsummaryrefslogtreecommitdiff
path: root/Source/Diagnostics/ComputeDiagFunctors/JFunctor.H
blob: db0e0331148828cc7d39111b98b79de367994184 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#ifndef WARPX_JFUNCTOR_H_
#define WARPX_JFUNCTOR_H_

#include "ComputeDiagFunctor.H"

#include <AMReX_BaseFwd.H>

/**
 * \brief Functor to cell-center MF for current density and store result in mf_out.
 */
class
JFunctor final : public ComputeDiagFunctor
{
public:
    /** Constructor.
     *
     * \param[in] dir direction of vector field to operate on
     * \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.
     */
    JFunctor (int dir, int lev,
             amrex::IntVect crse_ratio,
             bool convertRZmodes2cartesian=true,
             bool deposit_current=false, 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
     */
    virtual void operator()(amrex::MultiFab& mf_dst, int dcomp, int /*i_buffer=0*/) const override;
private:
    /** direction of the current density to save */
    const int m_dir;
    /** level on which mf_src is defined */
    int m_lev;
    /** (for cylindrical) whether to average all modes into 1 comp */
    bool m_convertRZmodes2cartesian;
    /** whether to deposit current density before saving */
    bool m_deposit_current;
};

#endif // WARPX_JFUNCTOR_H_