diff options
Diffstat (limited to 'Source/FieldSolver/SpectralSolver')
5 files changed, 35 insertions, 29 deletions
diff --git a/Source/FieldSolver/SpectralSolver/PsatdAlgorithm.H b/Source/FieldSolver/SpectralSolver/PsatdAlgorithm.H index 9fbdc7073..375fa48bb 100644 --- a/Source/FieldSolver/SpectralSolver/PsatdAlgorithm.H +++ b/Source/FieldSolver/SpectralSolver/PsatdAlgorithm.H @@ -11,10 +11,12 @@ class PsatdAlgorithm using SpectralCoefficients = amrex::FabArray< amrex::BaseFab <amrex::Real> >; public: - PsatdAlgorithm(const SpectralKSpace& spectral_kspace, - const amrex::DistributionMapping& dm, - const int norder_x, const int norder_y, - const int norder_z, const amrex::Real dt); + PsatdAlgorithm( const SpectralKSpace& spectral_kspace, + const amrex::DistributionMapping& dm, + const int norder_x, const int norder_y, + const int norder_z, const amrex::Real dt); + PsatdAlgorithm() = default; // Default constructor + PsatdAlgorithm& operator=(PsatdAlgorithm&& algorithm) = default; // Default move assignment void pushSpectralFields( SpectralFieldData& f ) const; private: diff --git a/Source/FieldSolver/SpectralSolver/SpectralFieldData.H b/Source/FieldSolver/SpectralSolver/SpectralFieldData.H index 9f5b85a2b..a74bfe22b 100644 --- a/Source/FieldSolver/SpectralSolver/SpectralFieldData.H +++ b/Source/FieldSolver/SpectralSolver/SpectralFieldData.H @@ -30,6 +30,8 @@ class SpectralFieldData SpectralFieldData( const amrex::BoxArray& realspace_ba, const SpectralKSpace& k_space, const amrex::DistributionMapping& dm ); + 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 ); diff --git a/Source/FieldSolver/SpectralSolver/SpectralKSpace.H b/Source/FieldSolver/SpectralSolver/SpectralKSpace.H index f61cffe14..a790be94f 100644 --- a/Source/FieldSolver/SpectralSolver/SpectralKSpace.H +++ b/Source/FieldSolver/SpectralSolver/SpectralKSpace.H @@ -13,15 +13,16 @@ class SpectralKSpace { public: SpectralKSpace( const amrex::BoxArray& realspace_ba, - const amrex::DistributionMapping& dm, const amrex::Real* dx ); + const amrex::DistributionMapping& dm, + const amrex::Array<amrex::Real,3> dx ); amrex::BoxArray spectralspace_ba; SpectralKVector kx_vec, ky_vec, kz_vec; - const amrex::Real* dx; + amrex::Array<amrex::Real,3> dx; }; void AllocateAndFillKvector( amrex::Gpu::ManagedVector<amrex::Real>& k, - const amrex::Box& bx, const amrex::Real* dx, const int i_dim ); + const amrex::Box& bx, const amrex::Array<amrex::Real,3> dx, const int i_dim ); void ComputeModifiedKVector( amrex::Gpu::ManagedVector<amrex::Real>& modified_k, diff --git a/Source/FieldSolver/SpectralSolver/SpectralKSpace.cpp b/Source/FieldSolver/SpectralSolver/SpectralKSpace.cpp index 0bd57c7ea..2b1e7ee33 100644 --- a/Source/FieldSolver/SpectralSolver/SpectralKSpace.cpp +++ b/Source/FieldSolver/SpectralSolver/SpectralKSpace.cpp @@ -6,7 +6,7 @@ using namespace Gpu; SpectralKSpace::SpectralKSpace( const BoxArray& realspace_ba, const DistributionMapping& dm, - const Real* realspace_dx ) + const Array<Real,3> realspace_dx ) { // Create the box array that corresponds to spectral space BoxList spectral_bl; // Create empty box list @@ -37,7 +37,8 @@ SpectralKSpace::SpectralKSpace( const BoxArray& realspace_ba, } void -AllocateAndFillKvector( ManagedVector<Real>& k, const Box& bx, const Real* dx, const int i_dim ) +AllocateAndFillKvector( ManagedVector<Real>& k, const Box& bx, + const Array<Real,3> dx, const int i_dim ) { // Alllocate k to the right size int N = bx.length( i_dim ); diff --git a/Source/FieldSolver/SpectralSolver/SpectralSolver.H b/Source/FieldSolver/SpectralSolver/SpectralSolver.H index cde1fccd2..521e558ba 100644 --- a/Source/FieldSolver/SpectralSolver/SpectralSolver.H +++ b/Source/FieldSolver/SpectralSolver/SpectralSolver.H @@ -1,24 +1,39 @@ #ifndef WARPX_SPECTRAL_SOLVER_H_ #define WARPX_SPECTRAL_SOLVER_H_ +#include <SpectralKSpace.H> +#include <PsatdAlgorithm.H> +#include <SpectralFieldData.H> + /* \brief * TODO */ class SpectralSolver { private: - SpectralKSpace k_space; // Contains size of each box in spectral space, - // and corresponding values of the k vectors SpectralFieldData field_data; // Store field in spectral space // and perform the Fourier transforms PsatdAlgorithm algorithm; // Contains Psatd coefficients // and field update equation public: - SpectralSolver(); - void ForwardTransform( const MultiFab& mf, const int field_index ){ + SpectralSolver( const amrex::BoxArray& realspace_ba, + const amrex::DistributionMapping& dm, + const int norder_x, const int norder_y, const int norder_z, + const amrex::Array<amrex::Real,3> dx, const amrex::Real dt ) + { + // Initialize all structures using the same distribution mapping dm + // - Initialize k space (Contains size of each box in spectral space, + // and corresponding values of the k vectors) + const SpectralKSpace k_space = SpectralKSpace( realspace_ba, dm, dx ); + // - Initialize algorithm (coefficients) over this space + algorithm = PsatdAlgorithm( k_space, dm, norder_x, norder_y, norder_z, dt ); + // - 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 BackwardTransform( MultiFab& mf, const int field_index ){ + void BackwardTransform( amrex::MultiFab& mf, const int field_index ){ field_data.BackwardTransform( mf, field_index ); }; void pushSpectralFields(){ @@ -26,19 +41,4 @@ class SpectralSolver }; }; -SpectralSolver::SpectralSolver( const SpectralKSpace& realspace_ba, - const DistributionMapping& dm, - const int norder_x, const int norder_y, - const int norder_z, const Real* dx, - const Real dt ) -{ - // Initialize all structures using the same distribution mapping dm - // - Initialize k space values - k_space = SpectralKSpace( realspace_ba, dm, dx ); - // - Initialize algorithm (coefficients) over this space - algorithm = PsatdAlgorithm( k_space, dm, norder_x, norder_y, norder_z ); - // - Initialize arrays for fields in Fourier space + FFT plans - field_data = SpectralFieldData( realspace_ba, k_space, dm ); -}; - #endif // WARPX_SPECTRAL_SOLVER_H_ |