diff options
Diffstat (limited to 'Source/FieldSolver/SpectralSolver/SpectralSolver.cpp')
-rw-r--r-- | Source/FieldSolver/SpectralSolver/SpectralSolver.cpp | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/Source/FieldSolver/SpectralSolver/SpectralSolver.cpp b/Source/FieldSolver/SpectralSolver/SpectralSolver.cpp index ca7bd06a0..c24a7af69 100644 --- a/Source/FieldSolver/SpectralSolver/SpectralSolver.cpp +++ b/Source/FieldSolver/SpectralSolver/SpectralSolver.cpp @@ -7,8 +7,10 @@ #include <SpectralKSpace.H> #include <SpectralSolver.H> #include <PsatdAlgorithm.H> +#include <GalileanAlgorithm.H> #include <PMLPsatdAlgorithm.H> + /* \brief Initialize the spectral Maxwell solver * * This function selects the spectral algorithm to be used, allocates the @@ -28,6 +30,7 @@ SpectralSolver::SpectralSolver( const amrex::DistributionMapping& dm, const int norder_x, const int norder_y, const int norder_z, const bool nodal, + const amrex::Array<amrex::Real,3>& v_galilean, const amrex::RealVect dx, const amrex::Real dt, const bool pml ) { @@ -40,13 +43,20 @@ SpectralSolver::SpectralSolver( // - Select the algorithm depending on the input parameters // Initialize the corresponding coefficients over k space + if (pml) { algorithm = std::unique_ptr<PMLPsatdAlgorithm>( new PMLPsatdAlgorithm( k_space, dm, norder_x, norder_y, norder_z, nodal, dt ) ); - } else { - algorithm = std::unique_ptr<PsatdAlgorithm>( new PsatdAlgorithm( - k_space, dm, norder_x, norder_y, norder_z, nodal, dt ) ); - } + } else if ((v_galilean[0]==0) && (v_galilean[1]==0) && (v_galilean[2]==0)){ + // v_galilean is 0: use standard PSATD algorithm + algorithm = std::unique_ptr<PsatdAlgorithm>( new PsatdAlgorithm( + k_space, dm, norder_x, norder_y, norder_z, nodal, dt ) ); + } else { + // Otherwise: use the Galilean algorithm + algorithm = std::unique_ptr<GalileanAlgorithm>( new GalileanAlgorithm( + k_space, dm, norder_x, norder_y, norder_z, nodal, v_galilean, dt )); + } + // - Initialize arrays for fields in spectral space + FFT plans field_data = SpectralFieldData( realspace_ba, k_space, dm, |