diff options
Diffstat (limited to 'Source')
-rw-r--r-- | Source/FieldSolver/SpectralSolver/SpectralFieldData.H | 6 | ||||
-rw-r--r-- | Source/FieldSolver/SpectralSolver/SpectralFieldData.cpp | 10 | ||||
-rw-r--r-- | Source/FieldSolver/SpectralSolver/SpectralSolver.H | 10 | ||||
-rw-r--r-- | Source/FieldSolver/WarpXFFT.cpp | 3 | ||||
-rw-r--r-- | Source/WarpX.cpp | 2 |
5 files changed, 20 insertions, 11 deletions
diff --git a/Source/FieldSolver/SpectralSolver/SpectralFieldData.H b/Source/FieldSolver/SpectralSolver/SpectralFieldData.H index a74bfe22b..2abe81889 100644 --- a/Source/FieldSolver/SpectralSolver/SpectralFieldData.H +++ b/Source/FieldSolver/SpectralSolver/SpectralFieldData.H @@ -33,8 +33,10 @@ class SpectralFieldData SpectralFieldData() = default; // Default constructor SpectralFieldData& operator=(SpectralFieldData&& field_data) = default; // Default move assignment ~SpectralFieldData(); - void ForwardTransform( const amrex::MultiFab& mf, const int field_index ); - void BackwardTransform( amrex::MultiFab& mf, const int field_index ); + void ForwardTransform( const amrex::MultiFab& mf, + const int field_index, const int i_comp ); + void BackwardTransform( amrex::MultiFab& mf, + const int field_index, const int i_comp ); private: SpectralField Ex, Ey, Ez, Bx, By, Bz, Jx, Jy, Jz, rho_old, rho_new; diff --git a/Source/FieldSolver/SpectralSolver/SpectralFieldData.cpp b/Source/FieldSolver/SpectralSolver/SpectralFieldData.cpp index 66e1e3470..ee6dbff6a 100644 --- a/Source/FieldSolver/SpectralSolver/SpectralFieldData.cpp +++ b/Source/FieldSolver/SpectralSolver/SpectralFieldData.cpp @@ -73,7 +73,8 @@ SpectralFieldData::~SpectralFieldData() * Example: ForwardTransform( Efield_cp[0], SpectralFieldIndex::Ex ) */ void -SpectralFieldData::ForwardTransform( const MultiFab& mf, const int field_index ) +SpectralFieldData::ForwardTransform( const MultiFab& mf, + const int field_index, const int i_comp ) { // Loop over boxes for ( MFIter mfi(mf); mfi.isValid(); ++mfi ){ @@ -91,7 +92,7 @@ SpectralFieldData::ForwardTransform( const MultiFab& mf, const int field_index ) Array4<Complex> tmp_arr = tmpRealField[mfi].array(); ParallelFor( realspace_bx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { - tmp_arr(i,j,k) = mf_arr(i,j,k); + tmp_arr(i,j,k) = mf_arr(i,j,k,i_comp); }); } @@ -122,7 +123,8 @@ SpectralFieldData::ForwardTransform( const MultiFab& mf, const int field_index ) /* TODO: Documentation */ void -SpectralFieldData::BackwardTransform( MultiFab& mf, const int field_index ) +SpectralFieldData::BackwardTransform( MultiFab& mf, + const int field_index, const int i_comp ) { // Loop over boxes for ( MFIter mfi(mf); mfi.isValid(); ++mfi ){ @@ -160,7 +162,7 @@ SpectralFieldData::BackwardTransform( MultiFab& mf, const int field_index ) Array4<const Complex> tmp_arr = tmpRealField[mfi].array(); ParallelFor( realspace_bx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { - mf_arr(i,j,k) = tmp_arr(i,j,k).real(); + mf_arr(i,j,k,i_comp) = tmp_arr(i,j,k).real(); }); } } diff --git a/Source/FieldSolver/SpectralSolver/SpectralSolver.H b/Source/FieldSolver/SpectralSolver/SpectralSolver.H index 521e558ba..a471666b9 100644 --- a/Source/FieldSolver/SpectralSolver/SpectralSolver.H +++ b/Source/FieldSolver/SpectralSolver/SpectralSolver.H @@ -30,11 +30,13 @@ class SpectralSolver // - Initialize arrays for fields in Fourier space + FFT plans field_data = SpectralFieldData( realspace_ba, k_space, dm ); }; - void ForwardTransform( const amrex::MultiFab& mf, const int field_index ){ - field_data.ForwardTransform( mf, field_index ); + void ForwardTransform( const amrex::MultiFab& mf, + const int field_index, const int i_comp=0 ){ + field_data.ForwardTransform( mf, field_index, i_comp ); }; - void BackwardTransform( amrex::MultiFab& mf, const int field_index ){ - field_data.BackwardTransform( mf, field_index ); + void BackwardTransform( amrex::MultiFab& mf, + const int field_index, const int i_comp=0 ){ + field_data.BackwardTransform( mf, field_index, i_comp ); }; void pushSpectralFields(){ algorithm.pushSpectralFields( field_data ); diff --git a/Source/FieldSolver/WarpXFFT.cpp b/Source/FieldSolver/WarpXFFT.cpp index 2e146b2a1..1f7fe6cd0 100644 --- a/Source/FieldSolver/WarpXFFT.cpp +++ b/Source/FieldSolver/WarpXFFT.cpp @@ -455,6 +455,9 @@ WarpX::PushPSATD (int lev, amrex::Real /* dt */) solver.ForwardTransform(*current_fp_fft[lev][0], SpectralFieldIndex::Jx); solver.ForwardTransform(*current_fp_fft[lev][1], SpectralFieldIndex::Jy); solver.ForwardTransform(*current_fp_fft[lev][2], SpectralFieldIndex::Jz); + solver.ForwardTransform(*rho_fp_fft[lev], SpectralFieldIndex::rho_old, 0); + solver.ForwardTransform(*rho_fp_fft[lev], SpectralFieldIndex::rho_new, 1); + // TODO: Transform rho // Advance fields in spectral space diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp index 7f831c542..1bee1263f 100644 --- a/Source/WarpX.cpp +++ b/Source/WarpX.cpp @@ -208,7 +208,7 @@ WarpX::WarpX () spectral_solver_fp.resize(nlevs_max); spectral_solver_cp.resize(nlevs_max); - + ba_valid_fp_fft.resize(nlevs_max); ba_valid_cp_fft.resize(nlevs_max); |