diff options
Diffstat (limited to 'Source/WarpX.H')
-rw-r--r-- | Source/WarpX.H | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/Source/WarpX.H b/Source/WarpX.H index decde3dc2..7609e3343 100644 --- a/Source/WarpX.H +++ b/Source/WarpX.H @@ -25,6 +25,8 @@ #include <AMReX_Interpolater.H> #include <AMReX_FillPatchUtil.H> +#include "GuardCellManager.H" + #ifdef _OPENMP # include <omp.h> #endif @@ -74,7 +76,7 @@ public: MultiParticleContainer& GetPartContainer () { return *mypc; } static void shiftMF(amrex::MultiFab& mf, const amrex::Geometry& geom, int num_shift, int dir, - amrex::Real external_field = 0.); + amrex::IntVect ng_extra, amrex::Real external_field = 0.); static void GotoNextLine (std::istream& is); @@ -219,12 +221,14 @@ public: void UpdateAuxilaryDataSameType (); // Fill boundary cells including coarse/fine boundaries - void FillBoundaryB (); - void FillBoundaryE (); - void FillBoundaryF (); - void FillBoundaryE (int lev); - void FillBoundaryB (int lev); - void FillBoundaryF (int lev); + void FillBoundaryB (amrex::IntVect ng, amrex::IntVect ng_extra_fine=amrex::IntVect::TheZeroVector()); + void FillBoundaryE (amrex::IntVect ng, amrex::IntVect ng_extra_fine=amrex::IntVect::TheZeroVector()); + void FillBoundaryF (amrex::IntVect ng); + void FillBoundaryAux (amrex::IntVect ng); + void FillBoundaryE (int lev, amrex::IntVect ng, amrex::IntVect ng_extra_fine=amrex::IntVect::TheZeroVector()); + void FillBoundaryB (int lev, amrex::IntVect ng, amrex::IntVect ng_extra_fine=amrex::IntVect::TheZeroVector()); + void FillBoundaryF (int lev, amrex::IntVect ng); + void FillBoundaryAux (int lev, amrex::IntVect ng); void SyncCurrent (); void SyncRho (); @@ -308,6 +312,8 @@ public: const std::array<const amrex::MultiFab*, 3>& B, const std::array<amrex::Real,3>& dx, int ngrow); + const amrex::IntVect getngE() const { return guard_cells.ng_alloc_EB; }; + const amrex::IntVect getngF() const { return guard_cells.ng_alloc_F; }; void InitSpaceChargeField (WarpXParticleContainer& pc); void computePhi (const amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rho, @@ -358,9 +364,9 @@ private: /// void EvolveEM(int numsteps); - void FillBoundaryB (int lev, PatchType patch_type); - void FillBoundaryE (int lev, PatchType patch_type); - void FillBoundaryF (int lev, PatchType patch_type); + void FillBoundaryB (int lev, PatchType patch_type, amrex::IntVect ng); + void FillBoundaryE (int lev, PatchType patch_type, amrex::IntVect ng); + void FillBoundaryF (int lev, PatchType patch_type, amrex::IntVect ng); void OneStep_nosub (amrex::Real t); void OneStep_sub1 (amrex::Real t); @@ -449,7 +455,8 @@ private: void AllocLevelMFs (int lev, const amrex::BoxArray& ba, const amrex::DistributionMapping& dm, const amrex::IntVect& ngE, const amrex::IntVect& ngJ, - const amrex::IntVect& ngRho, int ngF); + const amrex::IntVect& ngRho, const amrex::IntVect& ngF, + const amrex::IntVect& ngextra, const bool aux_is_nodal); amrex::Vector<int> istep; // which step? amrex::Vector<int> nsubsteps; // how many substeps on each level? @@ -587,6 +594,8 @@ private: bool is_synchronized = true; + guardCellManager guard_cells; + //Slice Parameters int slice_max_grid_size; int slice_plot_int = -1; @@ -612,18 +621,19 @@ private: amrex::Vector< std::unique_ptr<amrex::MultiFab> > rho_cp_fft; #endif + bool fft_hybrid_mpi_decomposition = false; + int nox_fft = 16; + int noy_fft = 16; + int noz_fft = 16; + #ifdef WARPX_USE_PSATD private: void EvolvePSATD (int numsteps); void PushPSATD (amrex::Real dt); void PushPSATD_localFFT (int lev, amrex::Real dt); - bool fft_hybrid_mpi_decomposition = false; int ngroups_fft = 4; int fftw_plan_measure = 1; - int nox_fft = 16; - int noy_fft = 16; - int noz_fft = 16; amrex::Vector<std::unique_ptr<SpectralSolver>> spectral_solver_fp; amrex::Vector<std::unique_ptr<SpectralSolver>> spectral_solver_cp; |