aboutsummaryrefslogtreecommitdiff
path: root/Source/WarpX.cpp
diff options
context:
space:
mode:
authorGravatar Remi Lehe <remi.lehe@normalesup.org> 2019-04-26 21:24:14 -0700
committerGravatar GitHub <noreply@github.com> 2019-04-26 21:24:14 -0700
commitdb115f923353e4fe483f13c5de50e9fe9dc701a9 (patch)
tree5ed62dcbace3e277f844bbc6186f40b2a193b627 /Source/WarpX.cpp
parente9d3c12bbaf51fab7dc67be2e02a802dd22ae60f (diff)
parentcd2fc39d1dae02510a9fda43eab698d044eb7bd5 (diff)
downloadWarpX-db115f923353e4fe483f13c5de50e9fe9dc701a9.tar.gz
WarpX-db115f923353e4fe483f13c5de50e9fe9dc701a9.tar.zst
WarpX-db115f923353e4fe483f13c5de50e9fe9dc701a9.zip
Merge pull request #95 from ECP-WarpX/new_spectral_structures
Implement PSATD solver in C++
Diffstat (limited to 'Source/WarpX.cpp')
-rw-r--r--Source/WarpX.cpp31
1 files changed, 18 insertions, 13 deletions
diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp
index a1c90da91..98d6edadf 100644
--- a/Source/WarpX.cpp
+++ b/Source/WarpX.cpp
@@ -206,6 +206,9 @@ WarpX::WarpX ()
dataptr_fp_fft.resize(nlevs_max);
dataptr_cp_fft.resize(nlevs_max);
+ spectral_solver_fp.resize(nlevs_max);
+ spectral_solver_cp.resize(nlevs_max);
+
ba_valid_fp_fft.resize(nlevs_max);
ba_valid_cp_fft.resize(nlevs_max);
@@ -261,12 +264,12 @@ WarpX::ReadParameters ()
pp.query("verbose", verbose);
pp.query("regrid_int", regrid_int);
pp.query("do_subcycling", do_subcycling);
-
+
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(do_subcycling != 1 || max_level <= 1,
"Subcycling method 1 only works for 2 levels.");
-
+
ReadBoostedFrameParameters(gamma_boost, beta_boost, boost_direction);
-
+
pp.queryarr("B_external", B_external);
pp.query("do_moving_window", do_moving_window);
@@ -313,7 +316,7 @@ WarpX::ReadParameters ()
pp.query("do_boosted_frame_diagnostic", do_boosted_frame_diagnostic);
if (do_boosted_frame_diagnostic) {
-
+
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(gamma_boost > 1.0,
"gamma_boost must be > 1 to use the boosted frame diagnostic.");
@@ -328,8 +331,8 @@ WarpX::ReadParameters ()
pp.query("do_boosted_frame_fields", do_boosted_frame_fields);
pp.query("do_boosted_frame_particles", do_boosted_frame_particles);
-
-
+
+
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(do_moving_window,
"The moving window should be on if using the boosted frame diagnostic.");
@@ -352,7 +355,7 @@ WarpX::ReadParameters ()
filter_npass_each_dir[1] = parse_filter_npass_each_dir[1];
#if (AMREX_SPACEDIM == 3)
filter_npass_each_dir[2] = parse_filter_npass_each_dir[2];
-#endif
+#endif
pp.query("serialize_ics", serialize_ics);
pp.query("refine_plasma", refine_plasma);
@@ -389,7 +392,7 @@ WarpX::ReadParameters ()
}
}
}
-
+
if (plot_F){
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(do_dive_cleaning,
"plot_F only works if warpx.do_dive_cleaning = 1");
@@ -432,7 +435,7 @@ WarpX::ReadParameters ()
// select which particle comps to write
{
pp.queryarr("particle_plot_vars", particle_plot_vars);
-
+
if (particle_plot_vars.size() == 0)
{
particle_plot_flags.resize(PIdx::nattribs, 1);
@@ -440,18 +443,18 @@ WarpX::ReadParameters ()
else
{
particle_plot_flags.resize(PIdx::nattribs, 0);
-
+
for (const auto& var : particle_plot_vars)
{
particle_plot_flags[ParticleStringNames::to_index.at(var)] = 1;
}
}
}
-
+
pp.query("load_balance_int", load_balance_int);
pp.query("load_balance_with_sfc", load_balance_with_sfc);
pp.query("load_balance_knapsack_factor", load_balance_knapsack_factor);
-
+
pp.query("do_dynamic_scheduling", do_dynamic_scheduling);
pp.query("do_nodal", do_nodal);
@@ -509,11 +512,14 @@ WarpX::ReadParameters ()
#ifdef WARPX_USE_PSATD
{
ParmParse pp("psatd");
+ pp.query("hybrid_mpi_decomposition", fft_hybrid_mpi_decomposition);
pp.query("ngroups_fft", ngroups_fft);
pp.query("fftw_plan_measure", fftw_plan_measure);
pp.query("nox", nox_fft);
pp.query("noy", noy_fft);
pp.query("noz", noz_fft);
+ // Override value
+ if (fft_hybrid_mpi_decomposition==false) ngroups_fft=ParallelDescriptor::NProcs();
}
#endif
@@ -1075,4 +1081,3 @@ WarpX::PicsarVersion ()
return std::string("Unknown");
#endif
}
-