aboutsummaryrefslogtreecommitdiff
path: root/Source/FieldSolver/SpectralSolver/SpectralSolverRZ.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/FieldSolver/SpectralSolver/SpectralSolverRZ.cpp')
-rw-r--r--Source/FieldSolver/SpectralSolver/SpectralSolverRZ.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/Source/FieldSolver/SpectralSolver/SpectralSolverRZ.cpp b/Source/FieldSolver/SpectralSolver/SpectralSolverRZ.cpp
new file mode 100644
index 000000000..3d7aa77b4
--- /dev/null
+++ b/Source/FieldSolver/SpectralSolver/SpectralSolverRZ.cpp
@@ -0,0 +1,52 @@
+/* Copyright 2019-2020 David Grote
+ *
+ * This file is part of WarpX.
+ *
+ * License: BSD-3-Clause-LBNL
+ */
+#include "SpectralKSpaceRZ.H"
+#include "SpectralSolverRZ.H"
+#include "SpectralAlgorithms/PsatdAlgorithmRZ.H"
+
+/* \brief Initialize the spectral Maxwell solver
+ *
+ * This function selects the spectral algorithm to be used, allocates the
+ * corresponding coefficients for the discretized field update equation,
+ * and prepares the structures that store the fields in spectral space.
+ *
+ * \param n_rz_azimuthal_modes Number of azimuthal modes
+ * \param norder_z Order of accuracy of the spatial derivatives along z
+ * \param nodal Whether the solver is applied to a nodal or staggered grid
+ * \param dx Cell size along each dimension
+ * \param dt Time step
+ * \param pml Whether the boxes in which the solver is applied are PML boxes
+ * PML is not supported.
+ */
+SpectralSolverRZ::SpectralSolverRZ(amrex::BoxArray const & realspace_ba,
+ amrex::DistributionMapping const & dm,
+ int const n_rz_azimuthal_modes,
+ int const norder_z, bool const nodal,
+ amrex::RealVect const dx, amrex::Real const dt,
+ int const lev,
+ bool const pml )
+{
+
+ // Initialize all structures using the same distribution mapping dm
+
+ // - The k space object contains info about the size of
+ // the spectral space corresponding to each box in `realspace_ba`,
+ // as well as the value of the corresponding k coordinates.
+ SpectralKSpaceRZ k_space(realspace_ba, dm, dx);
+
+ // - Select the algorithm depending on the input parameters
+ // Initialize the corresponding coefficients over k space
+ // PML is not supported.
+ algorithm = std::unique_ptr<PsatdAlgorithmRZ>(
+ new PsatdAlgorithmRZ(k_space, dm, n_rz_azimuthal_modes, norder_z, nodal, dt));
+
+ // - Initialize arrays for fields in spectral space + FFT plans
+ field_data = SpectralFieldDataRZ(realspace_ba, k_space, dm,
+ algorithm->getRequiredNumberOfFields(),
+ n_rz_azimuthal_modes, lev);
+
+};