diff options
Diffstat (limited to 'Source/FieldSolver/FiniteDifferenceSolver')
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 } |