diff options
author | 2021-11-19 00:31:18 -0800 | |
---|---|---|
committer | 2021-11-19 00:31:18 -0800 | |
commit | 45ef533c39a55d05afbb9872659963d19b79f463 (patch) | |
tree | 65d7756277fd82059e8267b92a65e16d7865590f /Source/Initialization/PlasmaInjector.cpp | |
parent | ff8b73f58d71762e8d81be797c8afd1519d79c2a (diff) | |
download | WarpX-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.cpp | 26 |
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( |