aboutsummaryrefslogtreecommitdiff
path: root/Source/FieldSolver/FiniteDifferenceSolver
diff options
context:
space:
mode:
Diffstat (limited to 'Source/FieldSolver/FiniteDifferenceSolver')
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H6
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H6
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H6
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H4
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H10
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.cpp40
6 files changed, 51 insertions, 21 deletions
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H
index 58973fdab..ef6d53416 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H
+++ b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H
@@ -27,9 +27,9 @@ struct CartesianCKCAlgorithm {
static void InitializeStencilCoefficients (
std::array<amrex::Real,3>& cell_size,
- amrex::Gpu::ManagedVector<amrex::Real>& stencil_coefs_x,
- amrex::Gpu::ManagedVector<amrex::Real>& stencil_coefs_y,
- amrex::Gpu::ManagedVector<amrex::Real>& stencil_coefs_z ) {
+ amrex::Vector<amrex::Real>& stencil_coefs_x,
+ amrex::Vector<amrex::Real>& stencil_coefs_y,
+ amrex::Vector<amrex::Real>& stencil_coefs_z ) {
using namespace amrex;
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H
index 5434f60fb..5bd7e88bc 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H
+++ b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H
@@ -27,9 +27,9 @@ struct CartesianNodalAlgorithm {
static void InitializeStencilCoefficients (
std::array<amrex::Real,3>& cell_size,
- amrex::Gpu::ManagedVector<amrex::Real>& stencil_coefs_x,
- amrex::Gpu::ManagedVector<amrex::Real>& stencil_coefs_y,
- amrex::Gpu::ManagedVector<amrex::Real>& stencil_coefs_z ) {
+ amrex::Vector<amrex::Real>& stencil_coefs_x,
+ amrex::Vector<amrex::Real>& stencil_coefs_y,
+ amrex::Vector<amrex::Real>& stencil_coefs_z ) {
using namespace amrex;
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H
index d8f057a70..305fb3507 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H
+++ b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianYeeAlgorithm.H
@@ -27,9 +27,9 @@ struct CartesianYeeAlgorithm {
static void InitializeStencilCoefficients (
std::array<amrex::Real,3>& cell_size,
- amrex::Gpu::ManagedVector<amrex::Real>& stencil_coefs_x,
- amrex::Gpu::ManagedVector<amrex::Real>& stencil_coefs_y,
- amrex::Gpu::ManagedVector<amrex::Real>& stencil_coefs_z ) {
+ amrex::Vector<amrex::Real>& stencil_coefs_x,
+ amrex::Vector<amrex::Real>& stencil_coefs_y,
+ amrex::Vector<amrex::Real>& stencil_coefs_z ) {
using namespace amrex;
// Store the inverse cell size along each direction in the coefficients
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H
index 4e01041b2..13807b131 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H
+++ b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CylindricalYeeAlgorithm.H
@@ -26,8 +26,8 @@ struct CylindricalYeeAlgorithm {
static void InitializeStencilCoefficients (
std::array<amrex::Real,3>& cell_size,
- amrex::Gpu::ManagedVector<amrex::Real>& stencil_coefs_r,
- amrex::Gpu::ManagedVector<amrex::Real>& stencil_coefs_z ) {
+ amrex::Vector<amrex::Real>& stencil_coefs_r,
+ amrex::Vector<amrex::Real>& stencil_coefs_z ) {
using namespace amrex;
// Store the inverse cell size along each direction in the coefficients
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H
index 31f8008bf..047a8cb98 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H
+++ b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H
@@ -96,12 +96,12 @@ class FiniteDifferenceSolver
#ifdef WARPX_DIM_RZ
amrex::Real m_dr, m_rmin;
amrex::Real m_nmodes;
- amrex::Gpu::ManagedVector<amrex::Real> m_stencil_coefs_r;
- amrex::Gpu::ManagedVector<amrex::Real> m_stencil_coefs_z;
+ amrex::Gpu::DeviceVector<amrex::Real> m_stencil_coefs_r;
+ amrex::Gpu::DeviceVector<amrex::Real> m_stencil_coefs_z;
#else
- amrex::Gpu::ManagedVector<amrex::Real> m_stencil_coefs_x;
- amrex::Gpu::ManagedVector<amrex::Real> m_stencil_coefs_y;
- amrex::Gpu::ManagedVector<amrex::Real> m_stencil_coefs_z;
+ amrex::Gpu::DeviceVector<amrex::Real> m_stencil_coefs_x;
+ amrex::Gpu::DeviceVector<amrex::Real> m_stencil_coefs_y;
+ amrex::Gpu::DeviceVector<amrex::Real> m_stencil_coefs_z;
#endif
public:
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.cpp b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.cpp
index 08ff5e18f..fcab20510 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.cpp
@@ -33,26 +33,56 @@ FiniteDifferenceSolver::FiniteDifferenceSolver (
m_rmin = WarpX::GetInstance().Geom(0).ProbLo(0);
if (fdtd_algo == MaxwellSolverAlgo::Yee) {
+ amrex::Vector<amrex::Real> stencil_coefs_r, stencil_coefs_z;
CylindricalYeeAlgorithm::InitializeStencilCoefficients( cell_size,
- m_stencil_coefs_r, m_stencil_coefs_z );
+ stencil_coefs_r, stencil_coefs_z );
+ m_stencil_coefs_r.resize(stencil_coefs_r.size());
+ m_stencil_coefs_z.resize(stencil_coefs_z.size());
+ amrex::Gpu::copyAsync(amrex::Gpu::hostToDevice,
+ stencil_coefs_r.begin(), stencil_coefs_r.end(),
+ m_stencil_coefs_r.begin());
+ amrex::Gpu::copyAsync(amrex::Gpu::hostToDevice,
+ stencil_coefs_z.begin(), stencil_coefs_z.end(),
+ m_stencil_coefs_z.begin());
+ amrex::Gpu::synchronize();
+ } else {
+ amrex::Abort("Unknown algorithm");
+ }
#else
+ amrex::Vector<amrex::Real> stencil_coefs_x, stencil_coefs_y, stencil_coefs_z;
+
if (do_nodal) {
CartesianNodalAlgorithm::InitializeStencilCoefficients( cell_size,
- m_stencil_coefs_x, m_stencil_coefs_y, m_stencil_coefs_z );
+ stencil_coefs_x, stencil_coefs_y, stencil_coefs_z );
} else if (fdtd_algo == MaxwellSolverAlgo::Yee) {
CartesianYeeAlgorithm::InitializeStencilCoefficients( cell_size,
- m_stencil_coefs_x, m_stencil_coefs_y, m_stencil_coefs_z );
+ stencil_coefs_x, stencil_coefs_y, stencil_coefs_z );
} else if (fdtd_algo == MaxwellSolverAlgo::CKC) {
CartesianCKCAlgorithm::InitializeStencilCoefficients( cell_size,
- m_stencil_coefs_x, m_stencil_coefs_y, m_stencil_coefs_z );
+ stencil_coefs_x, stencil_coefs_y, stencil_coefs_z );
-#endif
} else {
amrex::Abort("Unknown algorithm");
}
+
+ m_stencil_coefs_x.resize(stencil_coefs_x.size());
+ m_stencil_coefs_y.resize(stencil_coefs_y.size());
+ m_stencil_coefs_z.resize(stencil_coefs_z.size());
+
+ amrex::Gpu::copyAsync(amrex::Gpu::hostToDevice,
+ stencil_coefs_x.begin(), stencil_coefs_x.end(),
+ m_stencil_coefs_x.begin());
+ amrex::Gpu::copyAsync(amrex::Gpu::hostToDevice,
+ stencil_coefs_y.begin(), stencil_coefs_y.end(),
+ m_stencil_coefs_y.begin());
+ amrex::Gpu::copyAsync(amrex::Gpu::hostToDevice,
+ stencil_coefs_z.begin(), stencil_coefs_z.end(),
+ m_stencil_coefs_z.begin());
+ amrex::Gpu::synchronize();
+#endif
}