diff options
author | 2019-10-18 13:04:28 -0700 | |
---|---|---|
committer | 2019-10-18 13:04:28 -0700 | |
commit | 3829d345242b045f5a30fd24f08c2a3d59c70eda (patch) | |
tree | a8ac4e62649aa8c2c30495f967f402bb7ab84302 /Source/Particles/PhysicalParticleContainer.cpp | |
parent | ab5f29617d543523435c8c36821fcc305666e390 (diff) | |
parent | b166bbe7a0919cab96ea20610198ee7919f1d4f7 (diff) | |
download | WarpX-3829d345242b045f5a30fd24f08c2a3d59c70eda.tar.gz WarpX-3829d345242b045f5a30fd24f08c2a3d59c70eda.tar.zst WarpX-3829d345242b045f5a30fd24f08c2a3d59c70eda.zip |
Merge pull request #479 from Yin-YinjianZhao/PusherHC
Add Higuera-Cary Pusher and Automatic Test
Diffstat (limited to 'Source/Particles/PhysicalParticleContainer.cpp')
-rw-r--r-- | Source/Particles/PhysicalParticleContainer.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/Source/Particles/PhysicalParticleContainer.cpp b/Source/Particles/PhysicalParticleContainer.cpp index 79a93abda..66331db26 100644 --- a/Source/Particles/PhysicalParticleContainer.cpp +++ b/Source/Particles/PhysicalParticleContainer.cpp @@ -17,6 +17,7 @@ #include <UpdatePosition.H> #include <UpdateMomentumBoris.H> #include <UpdateMomentumVay.H> +#include <UpdateMomentumHigueraCary.H> using namespace amrex; @@ -1605,6 +1606,19 @@ PhysicalParticleContainer::PushPX(WarpXParIter& pti, ux[i], uy[i], uz[i], dt ); } ); + } else if (WarpX::particle_pusher_algo == ParticlePusherAlgo::HigueraCary) { + amrex::ParallelFor( + pti.numParticles(), + [=] AMREX_GPU_DEVICE (long i) { + Real qp = q; + if (ion_lev){ qp *= ion_lev[i]; } + UpdateMomentumHigueraCary( ux[i], uy[i], uz[i], + Ex[i], Ey[i], Ez[i], Bx[i], + By[i], Bz[i], qp, m, dt); + UpdatePosition( x[i], y[i], z[i], + ux[i], uy[i], uz[i], dt ); + } + ); } else { amrex::Abort("Unknown particle pusher"); }; @@ -1701,6 +1715,13 @@ PhysicalParticleContainer::PushP (int lev, Real dt, Expp[i], Eypp[i], Ezpp[i], Bxpp[i], Bypp[i], Bzpp[i], q, m, dt); } ); + } else if (WarpX::particle_pusher_algo == ParticlePusherAlgo::HigueraCary) { + amrex::ParallelFor( pti.numParticles(), + [=] AMREX_GPU_DEVICE (long i) { + UpdateMomentumHigueraCary( ux[i], uy[i], uz[i], + Expp[i], Eypp[i], Ezpp[i], Bxpp[i], Bypp[i], Bzpp[i], q, m, dt); + } + ); } else { amrex::Abort("Unknown particle pusher"); }; |