aboutsummaryrefslogtreecommitdiff
path: root/Source/Utils/WarpXMovingWindow.cpp
diff options
context:
space:
mode:
authorGravatar Olga Shapoval <30510597+oshapoval@users.noreply.github.com> 2020-02-18 22:25:34 -0800
committerGravatar GitHub <noreply@github.com> 2020-02-18 22:25:34 -0800
commit050e12f5293d42aabd812ff314baa2199060cdc3 (patch)
tree7e23162948ed11c0d9593323f6c66e796b5b5a5c /Source/Utils/WarpXMovingWindow.cpp
parent9d27958bc8467090e17d784999c4dd13f1eb8846 (diff)
downloadWarpX-050e12f5293d42aabd812ff314baa2199060cdc3.tar.gz
WarpX-050e12f5293d42aabd812ff314baa2199060cdc3.tar.zst
WarpX-050e12f5293d42aabd812ff314baa2199060cdc3.zip
Galilean PSATD with shift (#704)
* Read Galilean velocity * Prepare structures for Galilean solver * Started implementing Galilean equations * Analytical limits for X1, X2, X3, X4 coefficients added * Slight changes added * Added Galilean position pusher * Scale galilean velocity * Remove unneeded Abort * Fix Galilean pusher * Allocate Theta2 array * Fix definition of coefficients * Increase guard cells for Galilean * Add guard cell in particle exchange * Type corrected * v_gal added to warpx_current_deposition * v_gal added to WarpXParticleContainer.H * Bug fixed - update particle x-position over one time step * Fix issues with merge from dev * Preparation for merging dev into galilean. * Adding galilean shift * Implemented galilean shift * Changed method's name from GalileanShift to ShiftGalileanBoundary * Added doxygen string for ShiftGalileanBoundary * Removed never used method LowerCornerWithCentering * Removed temporary comments * Removed dt as a variable from DepositCharge method and its dependencies * Converted tab to spaces * Removed EOL white space * Add documentation and automated tests * Fix compilation error * Add automated test * Update automated test * Removed temporary used galilean shift * Removed temporary used particle's push for Galilean PSATD * Removed unused statement * Remove EOL white space. * Added zero shift for LowerCorner in RZ geometry * Minor changes to Galilean implementation * Modifications for GPU * Fix typo Co-authored-by: Remi Lehe <remi.lehe@normalesup.org>
Diffstat (limited to 'Source/Utils/WarpXMovingWindow.cpp')
-rw-r--r--Source/Utils/WarpXMovingWindow.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/Source/Utils/WarpXMovingWindow.cpp b/Source/Utils/WarpXMovingWindow.cpp
index a94ffede9..6c2a249e0 100644
--- a/Source/Utils/WarpXMovingWindow.cpp
+++ b/Source/Utils/WarpXMovingWindow.cpp
@@ -349,6 +349,41 @@ WarpX::shiftMF (MultiFab& mf, const Geometry& geom, int num_shift, int dir,
}
void
+WarpX::ShiftGalileanBoundary ()
+{
+ Real cur_time = t_new[0];
+ Real new_lo[AMREX_SPACEDIM];
+ Real new_hi[AMREX_SPACEDIM];
+ const Real* current_lo = geom[0].ProbLo();
+ const Real* current_hi = geom[0].ProbHi();
+
+ Real time_shift = (cur_time - time_of_last_gal_shift);
+
+ #if (AMREX_SPACEDIM == 3)
+ amrex::Array<amrex::Real,3> galilean_shift = { v_galilean[0]* time_shift, v_galilean[1]*time_shift, v_galilean[2]*time_shift };
+ #elif (AMREX_SPACEDIM == 2)
+ amrex::Array<amrex::Real,3> galilean_shift = { v_galilean[0]* time_shift, std::numeric_limits<Real>::quiet_NaN(), v_galilean[2]*time_shift };
+ #endif
+
+ #if (AMREX_SPACEDIM == 3)
+ for (int i=0; i<AMREX_SPACEDIM; i++) {
+ new_lo[i] = current_lo[i] + galilean_shift[i];
+ new_hi[i] = current_hi[i] + galilean_shift[i];
+ }
+ #elif (AMREX_SPACEDIM == 2)
+ {
+ new_lo[0] = current_lo[0] + galilean_shift[0];
+ new_hi[0] = current_hi[0] + galilean_shift[0];
+ new_lo[1] = current_lo[1] + galilean_shift[2];
+ new_hi[1] = current_hi[1] + galilean_shift[2];
+ }
+ #endif
+ time_of_last_gal_shift = cur_time;
+
+ ResetProbDomain(RealBox(new_lo, new_hi));
+}
+
+void
WarpX::ResetProbDomain (const RealBox& rb)
{
Geometry::ResetDefaultProbDomain(rb);