diff options
author | 2020-01-10 14:11:57 -0800 | |
---|---|---|
committer | 2020-01-10 14:11:57 -0800 | |
commit | b178920da516e66a21a283c8b794a63b491d24a2 (patch) | |
tree | 8d20a64ad808662554c35b74f53c4f1c3df1c6ab /Source/FieldSolver/FiniteDifferenceSolver | |
parent | 9035ee165054e25aedf98d97f16786d8d5f2965a (diff) | |
download | WarpX-b178920da516e66a21a283c8b794a63b491d24a2.tar.gz WarpX-b178920da516e66a21a283c8b794a63b491d24a2.tar.zst WarpX-b178920da516e66a21a283c8b794a63b491d24a2.zip |
Update Evolve B
Diffstat (limited to 'Source/FieldSolver/FiniteDifferenceSolver')
4 files changed, 41 insertions, 30 deletions
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/EvolveB.cpp b/Source/FieldSolver/FiniteDifferenceSolver/EvolveB.cpp index e5514c697..1bba6b317 100644 --- a/Source/FieldSolver/FiniteDifferenceSolver/EvolveB.cpp +++ b/Source/FieldSolver/FiniteDifferenceSolver/EvolveB.cpp @@ -6,18 +6,18 @@ FiniteDifferenceSolver::EvolveB ( VectorField Bfield, // Select algorithm (The choice of algorithm is a runtime option, // but we compile code for each algorithm, using templates) if (fdtd_algo == MaxwellSolverAlgo::Yee){ - EvolveB <YeeAlgorithm> ( Bfield, Efield, dt ); + EvolveBwithAlgo <YeeAlgorithm> ( Bfield, Efield, dt ); } else if (fdtd_algo == MaxwellSolverAlgo::CKC) { - EvolveB <CKCAlgorithm> ( Bfield, Efield, dt ); + EvolveBwithAlgo <CKCAlgorithm> ( Bfield, Efield, dt ); } else { amrex::Abort("Unknown algorithm"); } ) template<typename algo> -FiniteDifferenceSolver::EvolveB ( VectorField Bfield, - ConstVectorField Efield, - amrex::Real dt ) { +FiniteDifferenceSolver::EvolveBwithAlgo ( VectorField Bfield, + ConstVectorField Efield, + amrex::Real dt ) { // Loop through the grids, and over the tiles within each grid #ifdef _OPENMP diff --git a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/YeeAlgorithm.H b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/YeeAlgorithm.H index 7c9572298..6ea2f440d 100644 --- a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/YeeAlgorithm.H +++ b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/YeeAlgorithm.H @@ -22,7 +22,7 @@ struct YeeAlgorithm { Array4 const F, int const i, int const j, int const k, Real const* coefs_x, int const n_coefs_x ) { - amrex::Real inv_dx = coefs_x[0]; + amrex::Real const inv_dx = coefs_x[0]; return inv_dx*( F(i+1,j,k) - F(i,j,k) ); }; @@ -31,7 +31,7 @@ struct YeeAlgorithm { Array4 const F, int const i, int const j, int const k, Real const* coefs_x, int const n_coefs_x ) { - amrex::Real inv_dx = coefs_x[0]; + amrex::Real const inv_dx = coefs_x[0]; return inv_dx*( F(i,j,k) - F(i-1,j,k) ); }; @@ -41,7 +41,7 @@ struct YeeAlgorithm { Real const* coefs_y, int const n_coefs_y ) { #if defined WARPX_DIM_3D - amrex::Real inv_dy = coefs_y[0]; + amrex::Real const inv_dy = coefs_y[0]; return inv_dy*( F(i,j+1,k) - F(i,j,k) ); #elif (defined WARPX_DIM_XZ) return 0; // 2D Cartesian: derivative along y is 0 @@ -54,7 +54,7 @@ struct YeeAlgorithm { Real const* coefs_y, int const n_coefs_y ) { #if defined WARPX_DIM_3D - amrex::Real inv_dy = coefs_y[0]; + amrex::Real const inv_dy = coefs_y[0]; return inv_dy*( F(i,j,k) - F(i,j-1,k) ); #elif (defined WARPX_DIM_XZ) return 0; // 2D Cartesian: derivative along y is 0 @@ -66,7 +66,7 @@ struct YeeAlgorithm { Array4 const F, int const i, int const j, int const k, Real const* coefs_z, int const n_coefs_z ) { - amrex::Real inv_dz = coefs_z[0]; + amrex::Real const inv_dz = coefs_z[0]; #if defined WARPX_DIM_3D return inv_dz*( F(i,j,k+1) - F(i,j,k) ); #elif (defined WARPX_DIM_XZ) @@ -74,6 +74,18 @@ struct YeeAlgorithm { #endif }; + AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE + amrex::Real DownwardDz( + Array4 const F, int const i, int const j, int const k, + Real const* coefs_z, int const n_coefs_z ) { + + amrex::Real const inv_dz = coefs_z[0]; + #if defined WARPX_DIM_3D + return inv_dz*( F(i,j,k) - F(i,j,k-1) ); + #elif (defined WARPX_DIM_XZ) + return inv_dz*( F(i,j,k) - F(i,j-1,k) ); + #endif + }; } diff --git a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H index c1fdef5dd..98a34e634 100644 --- a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H +++ b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H @@ -14,11 +14,23 @@ class FiniteDifferenceSolver using ConstVectorField = std::array< std::unique_ptr<amrex::MultiFab const>, 3 >; // Constructor - void FiniteDifferenceSolver( std::array<Real,3> dx ); + void FiniteDifferenceSolver::FiniteDifferenceSolver ( std::array<Real,3> cell_size ) { + // Select algorithm (The choice of algorithm is a runtime option, + // but we compile code for each algorithm, using templates) + if (fdtd_algo == MaxwellSolverAlgo::Yee){ + YeeAlgorithm::InitializeStencilCoefficients( cell_size, + stencil_coefs_x, stencil_coefs_y, stencil_coefs_z ); + } else if (fdtd_algo == MaxwellSolverAlgo::CKC) { + CKCAlgorithm::InitializeStencilCoefficients( cell_size, + stencil_coefs_x, stencil_coefs_y, stencil_coefs_z ); + } else { + amrex::Abort("Unknown algorithm"); + } + }; - void EvolveB( VectorField Bfield, - ConstVectorField Efield, - amrex::Real dt ) const; + void EvolveB ( VectorField Bfield, + ConstVectorField Efield, + amrex::Real dt ) const; }; @@ -31,7 +43,9 @@ class FiniteDifferenceSolver amrex::Gpu::ManagedVector<amrex::Real> stencil_coefs_z; template< typename fdtd_algo > - void EvolveB + void EvolveBwithAlgo ( VectorField Bfield, + ConstVectorField Efield, + amrex::Real dt ) const; }; diff --git a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.cpp b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.cpp deleted file mode 100644 index a146b66b1..000000000 --- a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.cpp +++ /dev/null @@ -1,15 +0,0 @@ - - -void FiniteDifferenceSolver::FiniteDifferenceSolver ( std::array<Real,3> cell_size ) { - // Select algorithm (The choice of algorithm is a runtime option, - // but we compile code for each algorithm, using templates) - if (fdtd_algo == MaxwellSolverAlgo::Yee){ - YeeAlgorithm::InitializeStencilCoefficients( cell_size, - stencil_coefs_x, stencil_coefs_y, stencil_coefs_z ); - } else if (fdtd_algo == MaxwellSolverAlgo::CKC) { - CKCAlgorithm::InitializeStencilCoefficients( cell_size, - stencil_coefs_x, stencil_coefs_y, stencil_coefs_z ); - } else { - amrex::Abort("Unknown algorithm"); - } -}; |