aboutsummaryrefslogtreecommitdiff
path: root/Source/WarpX.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WarpX.cpp')
-rw-r--r--Source/WarpX.cpp40
1 files changed, 26 insertions, 14 deletions
diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp
index 827f7fb1c..3d11074df 100644
--- a/Source/WarpX.cpp
+++ b/Source/WarpX.cpp
@@ -1224,6 +1224,9 @@ WarpX::ReadParameters ()
if (m_v_comoving[0] != 0. || m_v_comoving[1] != 0. || m_v_comoving[2] != 0.) {
amrex::Abort("Esirkepov current deposition cannot be used with the comoving PSATD algorithm");
}
+ if (m_v_galilean[0] != 0. || m_v_galilean[1] != 0. || m_v_galilean[2] != 0.) {
+ amrex::Abort("Esirkepov current deposition cannot be used with the Galilean algorithm.");
+ }
}
if (current_deposition_algo == CurrentDepositionAlgo::Vay) {
@@ -2206,12 +2209,19 @@ WarpX::getRealBox(const Box& bx, int lev)
}
std::array<Real,3>
-WarpX::LowerCorner(const Box& bx, std::array<amrex::Real,3> galilean_shift, int lev)
+WarpX::LowerCorner(const Box& bx, const int lev, const amrex::Real time_shift_delta)
{
+ auto & warpx = GetInstance();
RealBox grid_box = getRealBox( bx, lev );
const Real* xyzmin = grid_box.lo();
+ amrex::Real cur_time = warpx.gett_new(lev);
+ amrex::Real time_shift = (cur_time + time_shift_delta - warpx.time_of_last_gal_shift);
+ amrex::Array<amrex::Real,3> galilean_shift = { warpx.m_v_galilean[0]*time_shift,
+ warpx.m_v_galilean[1]*time_shift,
+ warpx.m_v_galilean[2]*time_shift };
+
#if defined(WARPX_DIM_3D)
return { xyzmin[0] + galilean_shift[0], xyzmin[1] + galilean_shift[1], xyzmin[2] + galilean_shift[2] };
@@ -2224,28 +2234,30 @@ WarpX::LowerCorner(const Box& bx, std::array<amrex::Real,3> galilean_shift, int
}
std::array<Real,3>
-WarpX::UpperCorner(const Box& bx, int lev)
+WarpX::UpperCorner(const Box& bx, const int lev, const amrex::Real time_shift_delta)
{
+ auto & warpx = GetInstance();
const RealBox grid_box = getRealBox( bx, lev );
+
const Real* xyzmax = grid_box.hi();
+
+ amrex::Real cur_time = warpx.gett_new(lev);
+ amrex::Real time_shift = (cur_time + time_shift_delta - warpx.time_of_last_gal_shift);
+ amrex::Array<amrex::Real,3> galilean_shift = { warpx.m_v_galilean[0]*time_shift,
+ warpx.m_v_galilean[1]*time_shift,
+ warpx.m_v_galilean[2]*time_shift };
+
#if defined(WARPX_DIM_3D)
- return { xyzmax[0], xyzmax[1], xyzmax[2] };
+ return { xyzmax[0] + galilean_shift[0], xyzmax[1] + galilean_shift[1], xyzmax[2] + galilean_shift[2] };
+
#elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
- return { xyzmax[0], std::numeric_limits<Real>::max(), xyzmax[1] };
+ return { xyzmax[0] + galilean_shift[0], std::numeric_limits<Real>::max(), xyzmax[1] + galilean_shift[1] };
+
#elif defined(WARPX_DIM_1D_Z)
- return { std::numeric_limits<Real>::max(), std::numeric_limits<Real>::max(), xyzmax[0] };
+ return { std::numeric_limits<Real>::max(), std::numeric_limits<Real>::max(), xyzmax[0] + galilean_shift[0] };
#endif
}
-std::array<Real,3>
-WarpX::LowerCornerWithGalilean (const Box& bx, const amrex::Vector<amrex::Real>& v_galilean, int lev)
-{
- amrex::Real cur_time = gett_new(lev);
- amrex::Real time_shift = (cur_time - time_of_last_gal_shift);
- amrex::Array<amrex::Real,3> galilean_shift = { v_galilean[0]*time_shift, v_galilean[1]*time_shift, v_galilean[2]*time_shift };
- return WarpX::LowerCorner(bx, galilean_shift, lev);
-}
-
IntVect
WarpX::RefRatio (int lev)
{