aboutsummaryrefslogtreecommitdiff
path: root/Source/Initialization/PlasmaInjector.cpp
diff options
context:
space:
mode:
authorGravatar Prabhat Kumar <89051199+prkkumar@users.noreply.github.com> 2021-11-19 00:31:18 -0800
committerGravatar GitHub <noreply@github.com> 2021-11-19 00:31:18 -0800
commit45ef533c39a55d05afbb9872659963d19b79f463 (patch)
tree65d7756277fd82059e8267b92a65e16d7865590f /Source/Initialization/PlasmaInjector.cpp
parentff8b73f58d71762e8d81be797c8afd1519d79c2a (diff)
downloadWarpX-45ef533c39a55d05afbb9872659963d19b79f463.tar.gz
WarpX-45ef533c39a55d05afbb9872659963d19b79f463.tar.zst
WarpX-45ef533c39a55d05afbb9872659963d19b79f463.zip
1D3V Cartesian Support (#2307)
* Build System: Add 1D Geometry * test PR * test PR * 1D cartesian yee algorithm * fixed typo * Fixes for PML * 1D support related multiple changes * Fix compilation * change 1D to 1D_Z * 1D Field Gather and typo fix * 1D Charge Deposition * Particle Pusher * multiple changes related to 1D * 1D diagnostics and initialization * PlasmaInjector and PEC fixes for 1D * clean-up delete diags file * mobility 1D laser particle and bilinear filter * deleted diags files * update laser particle weight formula * delete diags files * Azure: Add 1D Cartesian Runner * 1D fixes for FieldProbe * Update Docs/source/developers/dimensionality.rst Co-authored-by: Remi Lehe <remi.lehe@normalesup.org> * 1d laser injection and langmuir test input files * 1d tests * clean up : delete print statements * analyse simulation result for laser injection and Langmuir tests * EOL * delete input files for which there are no automated tests * delete input files for which there are no automated tests * add ignore_unused to remove warnings * remove space * Fix compilation issues * fix error : macro name must be an identifier * Small bug fix * cleanup Python script for analysis * bug fix * bug fix * Update ParticleProbe: Check 1D in-domain * Update Source/Make.WarpX * Update .azure-pipelines.yml * Add USE_OPENPMD=FALSE to .azure-pipeline.yml * resolve conflict * resolve conflict * fix typo * Correct out-of-bound access * Fix Particle BC in WarpXParticleContainer and correct path to checksumAPI in python analysis scripts * EOL * Fix bug : accessing out of bound index of cell in 1D * remove 1d test for cartesian3d * Fix CI check * Slight style change * Address review comments * Fix GPU compilation Filter.cpp * Fix CI * Fix Indentation * Address review comments * More consistent ifdef for dimension bigger than 1 * Update Examples/Tests/Langmuir/analysis_langmuir_multi_1d.py Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja> * Update GNUmakefile Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja> * Update Regression/prepare_file_ci.py Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja> * Update Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianCKCAlgorithm.H Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja> * Update Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceAlgorithms/CartesianNodalAlgorithm.H Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja> * Update Source/Filter/Filter.cpp Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja> * Update Source/Filter/Filter.cpp Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja> * Update Source/Filter/Filter.cpp Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja> * Update Source/Filter/Filter.cpp Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja> * Update Source/Initialization/PlasmaInjector.cpp Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja> * Update Source/Initialization/PlasmaInjector.cpp Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja> * add comment inline to explain twice push_back * Add amrex::Abort for NCIGodfreyFilter Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja> Co-authored-by: Prabhat Kumar <prabhatkumar@kraken.dhcp.lbl.gov> Co-authored-by: Remi Lehe <remi.lehe@normalesup.org> Co-authored-by: Remi Lehe <rlehe@lbl.gov>
Diffstat (limited to 'Source/Initialization/PlasmaInjector.cpp')
-rw-r--r--Source/Initialization/PlasmaInjector.cpp26
1 files changed, 22 insertions, 4 deletions
diff --git a/Source/Initialization/PlasmaInjector.cpp b/Source/Initialization/PlasmaInjector.cpp
index af6a7a208..5710cab9a 100644
--- a/Source/Initialization/PlasmaInjector.cpp
+++ b/Source/Initialization/PlasmaInjector.cpp
@@ -81,10 +81,16 @@ PlasmaInjector::PlasmaInjector (int ispecies, const std::string& name)
// NOTE: When periodic boundaries are used, default injection range is set to mother grid dimensions.
const amrex::Geometry& geom = WarpX::GetInstance().Geom(0);
if( geom.isPeriodic(0) ) {
+# ifndef WARPX_DIM_1D_Z
xmin = geom.ProbLo(0);
xmax = geom.ProbHi(0);
+# else
+ zmin = geom.ProbLo(0);
+ zmax = geom.ProbHi(0);
+# endif
}
+# ifndef WARPX_DIM_1D_Z
if( geom.isPeriodic(1) ) {
# ifndef WARPX_DIM_3D
zmin = geom.ProbLo(1);
@@ -94,6 +100,7 @@ PlasmaInjector::PlasmaInjector (int ispecies, const std::string& name)
ymax = geom.ProbHi(1);
# endif
}
+# endif
# ifdef WARPX_DIM_3D
if( geom.isPeriodic(2) ) {
@@ -246,16 +253,18 @@ PlasmaInjector::PlasmaInjector (int ispecies, const std::string& name)
flux_normal_axis = 0;
}
#else
+# ifndef WARPX_DIM_1D_Z
if (flux_normal_axis_string == "x" || flux_normal_axis_string == "X") {
flux_normal_axis = 0;
}
+# endif
#endif
#ifdef WARPX_DIM_3D
- else if (flux_normal_axis_string == "y" || flux_normal_axis_string == "Y") {
+ if (flux_normal_axis_string == "y" || flux_normal_axis_string == "Y") {
flux_normal_axis = 1;
}
#endif
- else if (flux_normal_axis_string == "z" || flux_normal_axis_string == "Z") {
+ if (flux_normal_axis_string == "z" || flux_normal_axis_string == "Z") {
flux_normal_axis = AMREX_SPACEDIM-1;
}
#ifdef WARPX_DIM_3D
@@ -263,8 +272,10 @@ PlasmaInjector::PlasmaInjector (int ispecies, const std::string& name)
#else
# ifdef WARPX_DIM_RZ
std::string flux_normal_axis_help = "'r' or 'z'.";
-# else
+# elif WARPX_DIM_XZ
std::string flux_normal_axis_help = "'x' or 'z'.";
+# else
+ std::string flux_normal_axis_help = "'z'.";
# endif
#endif
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(flux_normal_axis >= 0,
@@ -282,7 +293,10 @@ PlasmaInjector::PlasmaInjector (int ispecies, const std::string& name)
} else if (injection_style == "nuniformpercell") {
// Note that for RZ, three numbers are expected, r, theta, and z.
// For 2D, only two are expected. The third is overwritten with 1.
-#if WARPX_DIM_XZ
+ // For 1D, only one is expected. The second and third are overwritten with 1.
+#if defined(WARPX_DIM_1D_Z)
+ constexpr int num_required_ppc_each_dim = 1;
+#elif defined(WARPX_DIM_XZ)
constexpr int num_required_ppc_each_dim = 2;
#else
constexpr int num_required_ppc_each_dim = 3;
@@ -292,6 +306,10 @@ PlasmaInjector::PlasmaInjector (int ispecies, const std::string& name)
#if WARPX_DIM_XZ
num_particles_per_cell_each_dim.push_back(1);
#endif
+#if WARPX_DIM_1D_Z
+ num_particles_per_cell_each_dim.push_back(1); // overwrite 2nd number with 1
+ num_particles_per_cell_each_dim.push_back(1); // overwrite 3rd number with 1
+#endif
#if WARPX_DIM_RZ
if (WarpX::n_rz_azimuthal_modes > 1) {
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(