aboutsummaryrefslogtreecommitdiff
path: root/Source/WarpXUtil.cpp
diff options
context:
space:
mode:
authorGravatar Andrew Myers <atmyers2@gmail.com> 2018-08-10 17:31:25 -0700
committerGravatar Andrew Myers <atmyers2@gmail.com> 2018-08-10 17:31:25 -0700
commit3d1d1eabb87ae06dd4c96e9be1a4e04151d9098f (patch)
tree6d09779c79b3306577bdc5f89e7d7777449d6f60 /Source/WarpXUtil.cpp
parent4a97495cc08c2ab1f07a3357c036c3380506b67c (diff)
parent3178c53b5a71b3daaedf4272f376bf48fad2bc35 (diff)
downloadWarpX-3d1d1eabb87ae06dd4c96e9be1a4e04151d9098f.tar.gz
WarpX-3d1d1eabb87ae06dd4c96e9be1a4e04151d9098f.tar.zst
WarpX-3d1d1eabb87ae06dd4c96e9be1a4e04151d9098f.zip
Merge branch 'master' of bitbucket.org:berkeleylab/warpx
Diffstat (limited to 'Source/WarpXUtil.cpp')
-rw-r--r--Source/WarpXUtil.cpp77
1 files changed, 77 insertions, 0 deletions
diff --git a/Source/WarpXUtil.cpp b/Source/WarpXUtil.cpp
new file mode 100644
index 000000000..4edd41838
--- /dev/null
+++ b/Source/WarpXUtil.cpp
@@ -0,0 +1,77 @@
+#include <cmath>
+
+#include <WarpXUtil.H>
+#include <WarpXConst.H>
+#include <AMReX_ParmParse.H>
+
+using namespace amrex;
+
+void ReadBoostedFrameParameters(Real& gamma_boost, Real& beta_boost,
+ Vector<int>& boost_direction)
+{
+ ParmParse pp("warpx");
+ pp.query("gamma_boost", gamma_boost);
+ beta_boost = std::sqrt(1.-1./pow(gamma_boost,2));
+ if( gamma_boost > 1. ) {
+ std::string s;
+ pp.get("boost_direction", s);
+ if (s == "x" || s == "X") {
+ boost_direction[0] = 1;
+ }
+#if (AMREX_SPACEDIM == 3)
+ else if (s == "y" || s == "Y") {
+ boost_direction[1] = 1;
+ }
+#endif
+ else if (s == "z" || s == "Z") {
+ boost_direction[2] = 1;
+ }
+ else {
+ const std::string msg = "Unknown boost_dir: "+s;
+ Abort(msg.c_str());
+ }
+
+ AMREX_ALWAYS_ASSERT_WITH_MESSAGE( s == "z" || s == "Z" ,
+ "The boost must be in the z direction.");
+ }
+}
+
+void ConvertLabParamsToBoost()
+{
+
+ Real gamma_boost, beta_boost;
+ Vector<int> boost_direction {0,0,0};
+
+ ReadBoostedFrameParameters(gamma_boost, beta_boost, boost_direction);
+
+ if (gamma_boost <= 1.) return;
+
+ Vector<Real> prob_lo(AMREX_SPACEDIM);
+ Vector<Real> prob_hi(AMREX_SPACEDIM);
+
+ ParmParse pp("geometry");
+ pp.getarr("prob_lo",prob_lo,0,AMREX_SPACEDIM);
+ BL_ASSERT(prob_lo.size() == AMREX_SPACEDIM);
+ pp.getarr("prob_hi",prob_hi,0,AMREX_SPACEDIM);
+ BL_ASSERT(prob_hi.size() == AMREX_SPACEDIM);
+
+#if (AMREX_SPACEDIM == 3)
+ Vector<int> dim_map {0, 1, 2};
+#else
+ Vector<int> dim_map {0, 2};
+#endif
+
+ for (int idim = 0; idim < AMREX_SPACEDIM; ++idim)
+ {
+ if (boost_direction[dim_map[idim]]) {
+ amrex::Real convert_factor;
+ // Assume that the window travels with speed +c
+ convert_factor = 1./( gamma_boost * ( 1 - beta_boost ) );
+ prob_lo[idim] *= convert_factor;
+ prob_hi[idim] *= convert_factor;
+ break;
+ }
+ }
+ pp.addarr("prob_lo", prob_lo);
+ pp.addarr("prob_hi", prob_hi);
+}