aboutsummaryrefslogtreecommitdiff
path: root/Source/FieldSolver
diff options
context:
space:
mode:
Diffstat (limited to 'Source/FieldSolver')
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/EvolveB.cpp21
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H18
-rw-r--r--Source/FieldSolver/WarpXPushFieldsEM.cpp16
3 files changed, 22 insertions, 33 deletions
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/EvolveB.cpp b/Source/FieldSolver/FiniteDifferenceSolver/EvolveB.cpp
index 1bba6b317..33253c986 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/EvolveB.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/EvolveB.cpp
@@ -1,4 +1,5 @@
-// TODO include statements
+#include<FiniteDifferenceAlgorithms/YeeAlgorithm.H>
+#include<FiniteDifferenceSolver.H>
FiniteDifferenceSolver::EvolveB ( VectorField Bfield,
ConstVectorField Efield,
@@ -7,8 +8,8 @@ FiniteDifferenceSolver::EvolveB ( VectorField Bfield,
// but we compile code for each algorithm, using templates)
if (fdtd_algo == MaxwellSolverAlgo::Yee){
EvolveBwithAlgo <YeeAlgorithm> ( Bfield, Efield, dt );
- } else if (fdtd_algo == MaxwellSolverAlgo::CKC) {
- EvolveBwithAlgo <CKCAlgorithm> ( Bfield, Efield, dt );
+// } else if (fdtd_algo == MaxwellSolverAlgo::CKC) {
+// EvolveBwithAlgo <CKCAlgorithm> ( Bfield, Efield, dt );
} else {
amrex::Abort("Unknown algorithm");
}
@@ -23,7 +24,7 @@ FiniteDifferenceSolver::EvolveBwithAlgo ( VectorField Bfield,
#ifdef _OPENMP
#pragma omp parallel if (Gpu::notInLaunchRegion())
#endif
- for ( MFIter mfi(*Bx, TilingIfNotGPU()); mfi.isValid(); ++mfi ) {
+ for ( MFIter mfi(*Bfield[0], TilingIfNotGPU()); mfi.isValid(); ++mfi ) {
// Extract field data for this grid/tile
auto const& Bx = Bfield[0]->array(mfi);
@@ -47,18 +48,18 @@ FiniteDifferenceSolver::EvolveBwithAlgo ( VectorField Bfield,
amrex::ParallelFor(tbx, tby, tbz,
[=] AMREX_GPU_DEVICE (int i, int j, int k){
- Bx(i, j, k) += dt * algo::UpwardDz( Ey, i, j, k, coefs_z)
- - dt * algo::UpwardDy( Ez, i, j, k, coefs_y);
+ Bx(i, j, k) += dt * algo::UpwardDz(Ey, i, j, k, coefs_z)
+ - dt * algo::UpwardDy(Ez, i, j, k, coefs_y);
},
[=] AMREX_GPU_DEVICE (int i, int j, int k){
- By(i, j, k) += dt * algo::UpwardDx( Ez, i, j, k, coefs_x)
- - dt * algo::UpwardDz( Ex, i, j, k, coefs_z);
+ By(i, j, k) += dt * algo::UpwardDx(Ez, i, j, k, coefs_x)
+ - dt * algo::UpwardDz(Ex, i, j, k, coefs_z);
},
[=] AMREX_GPU_DEVICE (int i, int j, int k){
- Bz(i, j, k) += dt * algo::UpwardDy( Ex, i, j, k, coefs_y)
- - dt * algo::UpwardDx( Ey, i, j, k, coefs_x);
+ Bz(i, j, k) += dt * algo::UpwardDy(Ex, i, j, k, coefs_y)
+ - dt * algo::UpwardDx(Ey, i, j, k, coefs_x);
}
);
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H
index 98a34e634..1aa9c7e38 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H
+++ b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H
@@ -1,6 +1,8 @@
#ifndef WARPX_FINITE_DIFFERENCE_SOLVER_H_
#define WARPX_FINITE_DIFFERENCE_SOLVER_H_
+#include<FiniteDifferenceAlgorithms/YeeAlgorithm.H>
+
/**
* \brief Top-level class for the electromagnetic finite-difference solver
*
@@ -15,14 +17,17 @@ class FiniteDifferenceSolver
// Constructor
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)
+
+ // Register the type of finite-difference algorithm
+ fdtd_algo = WarpX::maxwell_fdtd_solver_id;
+
+ // Calculate coefficients of finite-difference stencil
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 if (fdtd_algo == MaxwellSolverAlgo::CKC) {
+// CKCAlgorithm::InitializeStencilCoefficients( cell_size,
+// stencil_coefs_x, stencil_coefs_y, stencil_coefs_z );
} else {
amrex::Abort("Unknown algorithm");
}
@@ -31,9 +36,6 @@ class FiniteDifferenceSolver
void EvolveB ( VectorField Bfield,
ConstVectorField Efield,
amrex::Real dt ) const;
-
- };
-
private:
int fdtd_algo;
diff --git a/Source/FieldSolver/WarpXPushFieldsEM.cpp b/Source/FieldSolver/WarpXPushFieldsEM.cpp
index 1137da741..97c2d1997 100644
--- a/Source/FieldSolver/WarpXPushFieldsEM.cpp
+++ b/Source/FieldSolver/WarpXPushFieldsEM.cpp
@@ -261,21 +261,7 @@ WarpX::EvolveB (int lev, PatchType patch_type, amrex::Real a_dt)
auto const& pml_Exfab = pml_E[0]->array(mfi);
auto const& pml_Eyfab = pml_E[1]->array(mfi);
auto const& pml_Ezfab = pml_E[2]->array(mfi);
- if (WarpX::maxwell_fdtd_solver_id == 0) {
- amrex::ParallelFor(tbx, tby, tbz,
- [=] AMREX_GPU_DEVICE (int i, int j, int k) {
- warpx_push_pml_bx_yee(i,j,k,pml_Bxfab,pml_Eyfab,pml_Ezfab,
- dtsdy,dtsdz);
- },
- [=] AMREX_GPU_DEVICE (int i, int j, int k) {
- warpx_push_pml_by_yee(i,j,k,pml_Byfab,pml_Exfab,pml_Ezfab,
- dtsdx,dtsdz);
- },
- [=] AMREX_GPU_DEVICE (int i, int j, int k) {
- warpx_push_pml_bz_yee(i,j,k,pml_Bzfab,pml_Exfab,pml_Eyfab,
- dtsdx,dtsdy);
- });
- } else if (WarpX::maxwell_fdtd_solver_id == 1) {
+ if (WarpX::maxwell_fdtd_solver_id == 1) {
Real betaxy, betaxz, betayx, betayz, betazx, betazy;
Real gammax, gammay, gammaz;
Real alphax, alphay, alphaz;