aboutsummaryrefslogtreecommitdiff
path: root/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H
diff options
context:
space:
mode:
Diffstat (limited to 'Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H')
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H60
1 files changed, 60 insertions, 0 deletions
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H
new file mode 100644
index 000000000..9ce910e3d
--- /dev/null
+++ b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H
@@ -0,0 +1,60 @@
+#ifndef WARPX_FINITE_DIFFERENCE_SOLVER_H_
+#define WARPX_FINITE_DIFFERENCE_SOLVER_H_
+
+#include "WarpXAlgorithmSelection.H"
+#ifdef WARPX_DIM_RZ
+ #include "FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H"
+#else
+ #include "FiniteDifferenceAlgorithms/YeeAlgorithm.H"
+ #include "FiniteDifferenceAlgorithms/CKCAlgorithm.H"
+#endif
+#include <AMReX_MultiFab.H>
+
+/**
+ * \brief Top-level class for the electromagnetic finite-difference solver
+ *
+ * TODO
+ */
+class FiniteDifferenceSolver
+{
+ public:
+
+ using VectorField = std::array< std::unique_ptr<amrex::MultiFab>, 3 >;
+
+ // Constructor
+ FiniteDifferenceSolver ( int const fdtd_algo,
+ std::array<amrex::Real,3> cell_size );
+
+ void EvolveB ( VectorField& Bfield,
+ VectorField const& Efield,
+ amrex::Real const dt );
+ private:
+
+ int m_fdtd_algo;
+
+#ifdef WARPX_DIM_RZ
+ amrex::Real m_dr, m_rmin;
+ amrex::Real m_nmodes;
+ amrex::Gpu::ManagedVector<amrex::Real> stencil_coefs_r;
+ amrex::Gpu::ManagedVector<amrex::Real> stencil_coefs_z;
+#else
+ amrex::Gpu::ManagedVector<amrex::Real> stencil_coefs_x;
+ amrex::Gpu::ManagedVector<amrex::Real> stencil_coefs_y;
+ amrex::Gpu::ManagedVector<amrex::Real> stencil_coefs_z;
+#endif
+
+#ifdef WARPX_DIM_RZ
+ template< typename T_Algo >
+ void EvolveBCylindrical ( VectorField& Bfield,
+ VectorField const& Efield,
+ amrex::Real const dt );
+#else
+ template< typename T_Algo >
+ void EvolveBCartesian ( VectorField& Bfield,
+ VectorField const& Efield,
+ amrex::Real const dt );
+#endif
+
+};
+
+#endif // WARPX_FINITE_DIFFERENCE_SOLVER_H_