From 8d890d18ad4cabd4dc434a14d1925f2e1e8f48ab Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Thu, 25 Apr 2019 17:39:00 -0700 Subject: add capability to have multiple antennas --- Source/Particles/MultiParticleContainer.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'Source/Particles/MultiParticleContainer.cpp') diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp index 1b644b543..81a908179 100644 --- a/Source/Particles/MultiParticleContainer.cpp +++ b/Source/Particles/MultiParticleContainer.cpp @@ -14,7 +14,7 @@ MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core) { ReadParameters(); - int n = WarpX::use_laser ? nspecies+1 : nspecies; + int n = nspecies + nlasers; allcontainers.resize(n); for (int i = 0; i < nspecies; ++i) { if (species_types[i] == PCTypes::Physical) { @@ -25,9 +25,11 @@ MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core) } allcontainers[i]->deposit_on_main_grid = deposit_on_main_grid[i]; } - if (WarpX::use_laser) { - allcontainers[n-1].reset(new LaserParticleContainer(amr_core,n-1)); + + for (int i = nspecies; i < nspecies+nlasers; ++i) { + allcontainers[i].reset(new LaserParticleContainer(amr_core,n-1, lasers_names[i])); } + pc_tmp.reset(new PhysicalParticleContainer(amr_core)); } @@ -37,7 +39,7 @@ MultiParticleContainer::ReadParameters () static bool initialized = false; if (!initialized) { - ParmParse pp("particles"); + ParmParse pp("particles"); pp.query("nspecies", nspecies); BL_ASSERT(nspecies >= 0); @@ -70,8 +72,18 @@ MultiParticleContainer::ReadParameters () } } } + pp.query("use_fdtd_nci_corr", WarpX::use_fdtd_nci_corr); pp.query("l_lower_order_in_v", WarpX::l_lower_order_in_v); + + ParmParse ppl("lasers"); + ppl.query("nlasers", nlasers); + BL_ASSERT(nlasers >= 0); + if (nlasers > 0) { + ppl.getarr("lasers_names", lasers_names); + BL_ASSERT(lasers.size() == nlasers); + } + initialized = true; } } -- cgit v1.2.3 From a8b2f0c88434f08955399ca6dfdbc551979717f2 Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Thu, 25 Apr 2019 18:14:36 -0700 Subject: minor fixes --- Source/Particles/MultiParticleContainer.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'Source/Particles/MultiParticleContainer.cpp') diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp index 81a908179..0a8eae8d4 100644 --- a/Source/Particles/MultiParticleContainer.cpp +++ b/Source/Particles/MultiParticleContainer.cpp @@ -14,8 +14,7 @@ MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core) { ReadParameters(); - int n = nspecies + nlasers; - allcontainers.resize(n); + allcontainers.resize(nspecies + nlasers); for (int i = 0; i < nspecies; ++i) { if (species_types[i] == PCTypes::Physical) { allcontainers[i].reset(new PhysicalParticleContainer(amr_core, i, species_names[i])); @@ -25,9 +24,9 @@ MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core) } allcontainers[i]->deposit_on_main_grid = deposit_on_main_grid[i]; } - + for (int i = nspecies; i < nspecies+nlasers; ++i) { - allcontainers[i].reset(new LaserParticleContainer(amr_core,n-1, lasers_names[i])); + allcontainers[i].reset(new LaserParticleContainer(amr_core,i, lasers_names[i-nspecies])); } pc_tmp.reset(new PhysicalParticleContainer(amr_core)); @@ -81,7 +80,7 @@ MultiParticleContainer::ReadParameters () BL_ASSERT(nlasers >= 0); if (nlasers > 0) { ppl.getarr("lasers_names", lasers_names); - BL_ASSERT(lasers.size() == nlasers); + BL_ASSERT(lasers_names.size() == nlasers); } initialized = true; -- cgit v1.2.3 From 8da49069958472c566f8ab1eedf17976b3a78b0f Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Fri, 26 Apr 2019 07:41:14 -0700 Subject: change ParmParse param from lasers to antennas --- Source/Particles/MultiParticleContainer.H | 4 ++-- Source/Particles/MultiParticleContainer.cpp | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) (limited to 'Source/Particles/MultiParticleContainer.cpp') diff --git a/Source/Particles/MultiParticleContainer.H b/Source/Particles/MultiParticleContainer.H index f3fd522a9..1f8a1b728 100644 --- a/Source/Particles/MultiParticleContainer.H +++ b/Source/Particles/MultiParticleContainer.H @@ -192,7 +192,7 @@ protected: std::vector species_names; - std::vector lasers_names; + std::vector antennas_names; std::vector deposit_on_main_grid; @@ -208,7 +208,7 @@ private: void ReadParameters (); // runtime parameters - int nlasers = 0; + int nantennas = 0; int nspecies = 1; // physical particles only. nspecies+nlasers == allcontainers.size(). }; #endif /*WARPX_ParticleContainer_H_*/ diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp index 0a8eae8d4..e42fbb9db 100644 --- a/Source/Particles/MultiParticleContainer.cpp +++ b/Source/Particles/MultiParticleContainer.cpp @@ -14,7 +14,7 @@ MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core) { ReadParameters(); - allcontainers.resize(nspecies + nlasers); + allcontainers.resize(nspecies + nantennas); for (int i = 0; i < nspecies; ++i) { if (species_types[i] == PCTypes::Physical) { allcontainers[i].reset(new PhysicalParticleContainer(amr_core, i, species_names[i])); @@ -25,8 +25,8 @@ MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core) allcontainers[i]->deposit_on_main_grid = deposit_on_main_grid[i]; } - for (int i = nspecies; i < nspecies+nlasers; ++i) { - allcontainers[i].reset(new LaserParticleContainer(amr_core,i, lasers_names[i-nspecies])); + for (int i = nspecies; i < nspecies+nantennas; ++i) { + allcontainers[i].reset(new LaserParticleContainer(amr_core,i, antennas_names[i-nspecies])); } pc_tmp.reset(new PhysicalParticleContainer(amr_core)); @@ -75,12 +75,12 @@ MultiParticleContainer::ReadParameters () pp.query("use_fdtd_nci_corr", WarpX::use_fdtd_nci_corr); pp.query("l_lower_order_in_v", WarpX::l_lower_order_in_v); - ParmParse ppl("lasers"); - ppl.query("nlasers", nlasers); - BL_ASSERT(nlasers >= 0); - if (nlasers > 0) { - ppl.getarr("lasers_names", lasers_names); - BL_ASSERT(lasers_names.size() == nlasers); + ParmParse ppl("antennas"); + ppl.query("nantennas", nantennas); + BL_ASSERT(nantennas >= 0); + if (nantennas > 0) { + ppl.getarr("names", antennas_names); + BL_ASSERT(antennas_names.size() == nantennas); } initialized = true; -- cgit v1.2.3 From e743c0dc397e65a4823b947fb11c0c96f3d8c3e8 Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Fri, 26 Apr 2019 09:22:48 -0700 Subject: use laser instead of antenna --- Examples/Modules/boosted_diags/inputs.2d | 24 +++++++++---------- Examples/Modules/boosted_diags/inputs.3d | 24 +++++++++---------- Examples/Modules/laser_injection/inputs | 24 +++++++++---------- Examples/Modules/laser_injection/inputs.2d.rt | 24 +++++++++---------- Examples/Modules/laser_injection/inputs.rt | 24 +++++++++---------- .../laser_acceleration/inputs.2d | 4 ++-- .../laser_acceleration/inputs.3d | 24 +++++++++---------- .../Physics_applications/plasma_mirror/inputs.2d | 24 +++++++++---------- Examples/Tests/Larmor/inputs | 2 +- Examples/Tests/Larmor/inputs.ml | 2 +- Examples/Tests/PML/inputs2d | 24 +++++++++---------- Examples/Tests/gpu_test/inputs | 24 +++++++++---------- Examples/Tests/laser_on_fine/inputs | 28 +++++++++++----------- Examples/Tests/laser_on_fine/inputs.2d | 28 +++++++++++----------- Examples/Tests/self_force_test/inputs | 2 +- Source/Particles/MultiParticleContainer.H | 4 ++-- Source/Particles/MultiParticleContainer.cpp | 18 +++++++------- 17 files changed, 152 insertions(+), 152 deletions(-) (limited to 'Source/Particles/MultiParticleContainer.cpp') diff --git a/Examples/Modules/boosted_diags/inputs.2d b/Examples/Modules/boosted_diags/inputs.2d index 9178169dd..6315d34cb 100644 --- a/Examples/Modules/boosted_diags/inputs.2d +++ b/Examples/Modules/boosted_diags/inputs.2d @@ -87,15 +87,15 @@ ions.density = 1. ions.momentum_distribution_type = "constant" # Laser -antennas.nantennas = 1 -antennas.names = laser -laser.profile = Gaussian -laser.position = 0. 0. -1.e-6 # This point is on the laser plane -laser.direction = 0. 0. 1. # The plane normal direction -laser.polarization = 1. 0. 0. # The main polarization vector -laser.e_max = 8.e12 # Maximum amplitude of the laser field (in V/m) -laser.profile_waist = 5.e-5 # The waist of the laser (in meters) -laser.profile_duration = 16.7e-15 # The duration of the laser (in seconds) -laser.profile_t_peak = 33.4e-15 # The time at which the laser reaches its peak (in seconds) -laser.profile_focal_distance = 0.e-6 # Focal distance from the antenna (in meters) -laser.wavelength = 0.8e-6 # The wavelength of the laser (in meters) +lasers.nlasers = 1 +lasers.names = laser1 +laser1.profile = Gaussian +laser1.position = 0. 0. -1.e-6 # This point is on the laser plane +laser1.direction = 0. 0. 1. # The plane normal direction +laser1.polarization = 1. 0. 0. # The main polarization vector +laser1.e_max = 8.e12 # Maximum amplitude of the laser field (in V/m) +laser1.profile_waist = 5.e-5 # The waist of the laser (in meters) +laser1.profile_duration = 16.7e-15 # The duration of the laser (in seconds) +laser1.profile_t_peak = 33.4e-15 # The time at which the laser reaches its peak (in seconds) +laser1.profile_focal_distance = 0.e-6 # Focal distance from the antenna (in meters) +laser1.wavelength = 0.8e-6 # The wavelength of the laser (in meters) diff --git a/Examples/Modules/boosted_diags/inputs.3d b/Examples/Modules/boosted_diags/inputs.3d index 9178169dd..6315d34cb 100644 --- a/Examples/Modules/boosted_diags/inputs.3d +++ b/Examples/Modules/boosted_diags/inputs.3d @@ -87,15 +87,15 @@ ions.density = 1. ions.momentum_distribution_type = "constant" # Laser -antennas.nantennas = 1 -antennas.names = laser -laser.profile = Gaussian -laser.position = 0. 0. -1.e-6 # This point is on the laser plane -laser.direction = 0. 0. 1. # The plane normal direction -laser.polarization = 1. 0. 0. # The main polarization vector -laser.e_max = 8.e12 # Maximum amplitude of the laser field (in V/m) -laser.profile_waist = 5.e-5 # The waist of the laser (in meters) -laser.profile_duration = 16.7e-15 # The duration of the laser (in seconds) -laser.profile_t_peak = 33.4e-15 # The time at which the laser reaches its peak (in seconds) -laser.profile_focal_distance = 0.e-6 # Focal distance from the antenna (in meters) -laser.wavelength = 0.8e-6 # The wavelength of the laser (in meters) +lasers.nlasers = 1 +lasers.names = laser1 +laser1.profile = Gaussian +laser1.position = 0. 0. -1.e-6 # This point is on the laser plane +laser1.direction = 0. 0. 1. # The plane normal direction +laser1.polarization = 1. 0. 0. # The main polarization vector +laser1.e_max = 8.e12 # Maximum amplitude of the laser field (in V/m) +laser1.profile_waist = 5.e-5 # The waist of the laser (in meters) +laser1.profile_duration = 16.7e-15 # The duration of the laser (in seconds) +laser1.profile_t_peak = 33.4e-15 # The time at which the laser reaches its peak (in seconds) +laser1.profile_focal_distance = 0.e-6 # Focal distance from the antenna (in meters) +laser1.wavelength = 0.8e-6 # The wavelength of the laser (in meters) diff --git a/Examples/Modules/laser_injection/inputs b/Examples/Modules/laser_injection/inputs index 1b3cd49a3..4186f2682 100644 --- a/Examples/Modules/laser_injection/inputs +++ b/Examples/Modules/laser_injection/inputs @@ -30,18 +30,18 @@ algo.particle_pusher = 0 warpx.cfl = 1.0 # Laser -antennas.nantennas = 1 -antennas.names = laser -laser.profile = Gaussian -laser.position = 0. 0. 9.e-6 # This point is on the laser plane -laser.direction = 0. 0. 1. # The plane normal direction -laser.polarization = 0. 1. 0. # The main polarization vector -laser.e_max = 4.e12 # Maximum amplitude of the laser field (in V/m) -laser.profile_waist = 5.e-6 # The waist of the laser (in meters) -laser.profile_duration = 15.e-15 # The duration of the laser (in seconds) -laser.profile_t_peak = 30.e-15 # The time at which the laser reaches its peak (in seconds) -laser.profile_focal_distance = 100.e-6 # Focal distance from the antenna (in meters) -laser.wavelength = 0.8e-6 # The wavelength of the laser (in meters) +lasers.nlasers = 1 +lasers.names = laser1 +laser1.profile = Gaussian +laser1.position = 0. 0. 9.e-6 # This point is on the laser plane +laser1.direction = 0. 0. 1. # The plane normal direction +laser1.polarization = 0. 1. 0. # The main polarization vector +laser1.e_max = 4.e12 # Maximum amplitude of the laser field (in V/m) +laser1.profile_waist = 5.e-6 # The waist of the laser (in meters) +laser1.profile_duration = 15.e-15 # The duration of the laser (in seconds) +laser1.profile_t_peak = 30.e-15 # The time at which the laser reaches its peak (in seconds) +laser1.profile_focal_distance = 100.e-6 # Focal distance from the antenna (in meters) +laser1.wavelength = 0.8e-6 # The wavelength of the laser (in meters) # I/O amr.plot_int = 20 diff --git a/Examples/Modules/laser_injection/inputs.2d.rt b/Examples/Modules/laser_injection/inputs.2d.rt index 2d68f0320..1c40525f8 100644 --- a/Examples/Modules/laser_injection/inputs.2d.rt +++ b/Examples/Modules/laser_injection/inputs.2d.rt @@ -32,18 +32,18 @@ algo.particle_pusher = 0 warpx.cfl = 1.0 # Laser -antennas.nantennas = 1 -antennas.names = laser -laser.profile = Gaussian -laser.position = 9.e-6 0. 0. # This point is on the laser plane -laser.direction = 1. 0. 0. # The plane normal direction -laser.polarization = 0. 1. 0. # The main polarization vector -laser.e_max = 4.e12 # Maximum amplitude of the laser field (in V/m) -laser.wavelength = 0.8e-6 # The wavelength of the laser (in meters) -laser.profile_waist = 5.e-6 # The waist of the laser (in meters) -laser.profile_duration = 15.e-15 # The duration of the laser (in seconds) -laser.profile_t_peak = 30.e-15 # The time at which the laser reaches its peak (in seconds) -laser.profile_focal_distance = 100.e-6 # Focal distance from the antenna (in meters) +lasers.nlasers = 1 +lasers.names = laser1 +laser1.profile = Gaussian +laser1.position = 9.e-6 0. 0. # This point is on the laser plane +laser1.direction = 1. 0. 0. # The plane normal direction +laser1.polarization = 0. 1. 0. # The main polarization vector +laser1.e_max = 4.e12 # Maximum amplitude of the laser field (in V/m) +laser1.wavelength = 0.8e-6 # The wavelength of the laser (in meters) +laser1.profile_waist = 5.e-6 # The waist of the laser (in meters) +laser1.profile_duration = 15.e-15 # The duration of the laser (in seconds) +laser1.profile_t_peak = 30.e-15 # The time at which the laser reaches its peak (in seconds) +laser1.profile_focal_distance = 100.e-6 # Focal distance from the antenna (in meters) # I/O amr.plot_int = 20 diff --git a/Examples/Modules/laser_injection/inputs.rt b/Examples/Modules/laser_injection/inputs.rt index 071e33f86..b6f49d661 100644 --- a/Examples/Modules/laser_injection/inputs.rt +++ b/Examples/Modules/laser_injection/inputs.rt @@ -32,18 +32,18 @@ algo.particle_pusher = 0 warpx.cfl = 1.0 # Laser -antennas.nantennas = 1 -antennas.names = laser -laser.profile = Gaussian -laser.position = 0. 0. 9.e-6 # This point is on the laser plane -laser.direction = 0. 0. 1. # The plane normal direction -laser.polarization = 0. 1. 0. # The main polarization vector -laser.e_max = 4.e12 # Maximum amplitude of the laser field (in V/m) -laser.profile_waist = 5.e-6 # The waist of the laser (in meters) -laser.profile_duration = 15.e-15 # The duration of the laser (in seconds) -laser.profile_t_peak = 30.e-15 # The time at which the laser reaches its peak (in seconds) -laser.profile_focal_distance = 100.e-6 # Focal distance from the antenna (in meters) -laser.wavelength = 0.8e-6 # The wavelength of the laser (in meters) +lasers.nlasers = 1 +lasers.names = laser1 +laser1.profile = Gaussian +laser1.position = 0. 0. 9.e-6 # This point is on the laser plane +laser1.direction = 0. 0. 1. # The plane normal direction +laser1.polarization = 0. 1. 0. # The main polarization vector +laser1.e_max = 4.e12 # Maximum amplitude of the laser field (in V/m) +laser1.profile_waist = 5.e-6 # The waist of the laser (in meters) +laser1.profile_duration = 15.e-15 # The duration of the laser (in seconds) +laser1.profile_t_peak = 30.e-15 # The time at which the laser reaches its peak (in seconds) +laser1.profile_focal_distance = 100.e-6 # Focal distance from the antenna (in meters) +laser1.wavelength = 0.8e-6 # The wavelength of the laser (in meters) # I/O amr.plot_int = 20 diff --git a/Examples/Physics_applications/laser_acceleration/inputs.2d b/Examples/Physics_applications/laser_acceleration/inputs.2d index 9a90027a8..733ea6b86 100644 --- a/Examples/Physics_applications/laser_acceleration/inputs.2d +++ b/Examples/Physics_applications/laser_acceleration/inputs.2d @@ -82,8 +82,8 @@ warpx.injected_plasma_species = 0 ################################# ############ PLASMA ############# ################################# -lasers.nlasers = 1 -lasers.lasers_names = laser1 +lasers.nlasers = 1 +lasers.names = laser1 laser1.profile = Gaussian laser1.position = 0. 0. 9.e-6 # This point is on the laser plane laser1.direction = 0. 0. 1. # The plane normal direction diff --git a/Examples/Physics_applications/laser_acceleration/inputs.3d b/Examples/Physics_applications/laser_acceleration/inputs.3d index e9cfdf553..91837b23c 100644 --- a/Examples/Physics_applications/laser_acceleration/inputs.3d +++ b/Examples/Physics_applications/laser_acceleration/inputs.3d @@ -64,15 +64,15 @@ warpx.injected_plasma_species = 0 ################################# ############ PLASMA ############# ################################# -antennas.nantennas = 1 -antennas.names = laser -laser.profile = Gaussian -laser.position = 0. 0. 9.e-6 # This point is on the laser plane -laser.direction = 0. 0. 1. # The plane normal direction -laser.polarization = 0. 1. 0. # The main polarization vector -laser.e_max = 16.e12 # Maximum amplitude of the laser field (in V/m) -laser.profile_waist = 5.e-6 # The waist of the laser (in m) -laser.profile_duration = 15.e-15 # The duration of the laser (in s) -laser.profile_t_peak = 30.e-15 # Time at which the laser reaches its peak (in s) -laser.profile_focal_distance = 100.e-6 # Focal distance from the antenna (in m) -laser.wavelength = 0.8e-6 # The wavelength of the laser (in m) +lasers.nlasers = 1 +lasers.names = laser1 +laser1.profile = Gaussian +laser1.position = 0. 0. 9.e-6 # This point is on the laser plane +laser1.direction = 0. 0. 1. # The plane normal direction +laser1.polarization = 0. 1. 0. # The main polarization vector +laser1.e_max = 16.e12 # Maximum amplitude of the laser field (in V/m) +laser1.profile_waist = 5.e-6 # The waist of the laser (in m) +laser1.profile_duration = 15.e-15 # The duration of the laser (in s) +laser1.profile_t_peak = 30.e-15 # Time at which the laser reaches its peak (in s) +laser1.profile_focal_distance = 100.e-6 # Focal distance from the antenna (in m) +laser1.wavelength = 0.8e-6 # The wavelength of the laser (in m) diff --git a/Examples/Physics_applications/plasma_mirror/inputs.2d b/Examples/Physics_applications/plasma_mirror/inputs.2d index 6f94d1096..e16313b42 100644 --- a/Examples/Physics_applications/plasma_mirror/inputs.2d +++ b/Examples/Physics_applications/plasma_mirror/inputs.2d @@ -69,15 +69,15 @@ ions.density_function(x,y,z) = "(zzp)*(z species_names; - std::vector antennas_names; + std::vector lasers_names; std::vector deposit_on_main_grid; @@ -208,7 +208,7 @@ private: void ReadParameters (); // runtime parameters - int nantennas = 0; + int nlasers = 0; int nspecies = 1; // physical particles only. nspecies+nlasers == allcontainers.size(). }; #endif /*WARPX_ParticleContainer_H_*/ diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp index e42fbb9db..f98a56568 100644 --- a/Source/Particles/MultiParticleContainer.cpp +++ b/Source/Particles/MultiParticleContainer.cpp @@ -14,7 +14,7 @@ MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core) { ReadParameters(); - allcontainers.resize(nspecies + nantennas); + allcontainers.resize(nspecies + nlasers); for (int i = 0; i < nspecies; ++i) { if (species_types[i] == PCTypes::Physical) { allcontainers[i].reset(new PhysicalParticleContainer(amr_core, i, species_names[i])); @@ -25,8 +25,8 @@ MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core) allcontainers[i]->deposit_on_main_grid = deposit_on_main_grid[i]; } - for (int i = nspecies; i < nspecies+nantennas; ++i) { - allcontainers[i].reset(new LaserParticleContainer(amr_core,i, antennas_names[i-nspecies])); + for (int i = nspecies; i < nspecies+nlasers; ++i) { + allcontainers[i].reset(new LaserParticleContainer(amr_core,i, lasers_names[i-nspecies])); } pc_tmp.reset(new PhysicalParticleContainer(amr_core)); @@ -75,12 +75,12 @@ MultiParticleContainer::ReadParameters () pp.query("use_fdtd_nci_corr", WarpX::use_fdtd_nci_corr); pp.query("l_lower_order_in_v", WarpX::l_lower_order_in_v); - ParmParse ppl("antennas"); - ppl.query("nantennas", nantennas); - BL_ASSERT(nantennas >= 0); - if (nantennas > 0) { - ppl.getarr("names", antennas_names); - BL_ASSERT(antennas_names.size() == nantennas); + ParmParse ppl("lasers"); + ppl.query("nlasers", nlasers); + BL_ASSERT(nlasers >= 0); + if (nlasers > 0) { + ppl.getarr("names", lasers_names); + BL_ASSERT(lasers_names.size() == nlasers); } initialized = true; -- cgit v1.2.3 From d479c907ed9965771fbd26913b6f383f6d83c2a7 Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Fri, 26 Apr 2019 12:01:04 -0700 Subject: typos and cleaning --- .../laser_acceleration/inputs.2d.boost | 24 ++++++++-------- Examples/Tests/Larmor/inputs | 3 -- Examples/Tests/Larmor/inputs.ml | 3 -- Examples/Tests/self_force_test/inputs | 3 -- GNUmakefile | 2 +- Source/Particles/MultiParticleContainer.cpp | 32 +++++++++++----------- 6 files changed, 29 insertions(+), 38 deletions(-) (limited to 'Source/Particles/MultiParticleContainer.cpp') diff --git a/Examples/Physics_applications/laser_acceleration/inputs.2d.boost b/Examples/Physics_applications/laser_acceleration/inputs.2d.boost index 1a6daf7d1..e07e3a87a 100644 --- a/Examples/Physics_applications/laser_acceleration/inputs.2d.boost +++ b/Examples/Physics_applications/laser_acceleration/inputs.2d.boost @@ -116,15 +116,15 @@ warpx.injected_plasma_species = 0 1 ################################# ############# LASER ############# ################################# -antennas.nantennas = 1 -antennas.names = laser -laser.profile = Gaussian -laser.position = 0. 0. -0.1e-6 # This point is on the laser plane -laser.direction = 0. 0. 1. # The plane normal direction -laser.polarization = 0. 1. 0. # The main polarization vector -laser.e_max = 2.e12 # Maximum amplitude of the laser field (in V/m) -laser.profile_waist = 45.e-6 # The waist of the laser (in meters) -laser.profile_duration = 20.e-15 # The duration of the laser (in seconds) -laser.profile_t_peak = 40.e-15 # The time at which the laser reaches its peak (in seconds) -laser.profile_focal_distance = 0.e-6 # Focal distance from the antenna (in meters) -laser.wavelength = 0.81e-6 # The wavelength of the laser (in meters) +lasers.nlasers = 1 +lasers.names = laser1 +laser1.profile = Gaussian +laser1.position = 0. 0. -0.1e-6 # This point is on the laser plane +laser1.direction = 0. 0. 1. # The plane normal direction +laser1.polarization = 0. 1. 0. # The main polarization vector +laser1.e_max = 2.e12 # Maximum amplitude of the laser field (in V/m) +laser1.profile_waist = 45.e-6 # The waist of the laser (in meters) +laser1.profile_duration = 20.e-15 # The duration of the laser (in seconds) +laser1.profile_t_peak = 40.e-15 # The time at which the laser reaches its peak (in seconds) +laser1.profile_focal_distance = 0.e-6 # Focal distance from the antenna (in meters) +laser1.wavelength = 0.81e-6 # The wavelength of the laser (in meters) diff --git a/Examples/Tests/Larmor/inputs b/Examples/Tests/Larmor/inputs index d335a1837..265a43383 100644 --- a/Examples/Tests/Larmor/inputs +++ b/Examples/Tests/Larmor/inputs @@ -82,7 +82,4 @@ warpx.do_moving_window = 0 # Particle Injection warpx.do_plasma_injection = 0 -# Laser -lasers.nlasers = 0 - warpx.do_dive_cleaning = 1 diff --git a/Examples/Tests/Larmor/inputs.ml b/Examples/Tests/Larmor/inputs.ml index b631d5bd5..9adb655fb 100644 --- a/Examples/Tests/Larmor/inputs.ml +++ b/Examples/Tests/Larmor/inputs.ml @@ -82,7 +82,4 @@ warpx.do_moving_window = 0 # Particle Injection warpx.do_plasma_injection = 0 -# Laser -lasers.nlasers = 0 - warpx.do_dive_cleaning = 1 diff --git a/Examples/Tests/self_force_test/inputs b/Examples/Tests/self_force_test/inputs index 80e947592..9da7d5675 100644 --- a/Examples/Tests/self_force_test/inputs +++ b/Examples/Tests/self_force_test/inputs @@ -72,6 +72,3 @@ warpx.do_moving_window = 0 # Particle Injection warpx.do_plasma_injection = 0 - -# Laser -lasers.nlasers = 0 diff --git a/GNUmakefile b/GNUmakefile index 14f1fea43..be8c80650 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -6,7 +6,7 @@ DEBUG = FALSE #DEBUG = TRUE #DIM = 2 -DIM = 2 +DIM = 3 COMP = gcc #COMP = intel diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp index f98a56568..46d26152b 100644 --- a/Source/Particles/MultiParticleContainer.cpp +++ b/Source/Particles/MultiParticleContainer.cpp @@ -38,10 +38,10 @@ MultiParticleContainer::ReadParameters () static bool initialized = false; if (!initialized) { - ParmParse pp("particles"); + ParmParse pp("particles"); - pp.query("nspecies", nspecies); - BL_ASSERT(nspecies >= 0); + pp.query("nspecies", nspecies); + BL_ASSERT(nspecies >= 0); if (nspecies > 0) { pp.getarr("species_names", species_names); @@ -72,18 +72,18 @@ MultiParticleContainer::ReadParameters () } } - pp.query("use_fdtd_nci_corr", WarpX::use_fdtd_nci_corr); - pp.query("l_lower_order_in_v", WarpX::l_lower_order_in_v); + pp.query("use_fdtd_nci_corr", WarpX::use_fdtd_nci_corr); + pp.query("l_lower_order_in_v", WarpX::l_lower_order_in_v); - ParmParse ppl("lasers"); - ppl.query("nlasers", nlasers); - BL_ASSERT(nlasers >= 0); - if (nlasers > 0) { - ppl.getarr("names", lasers_names); - BL_ASSERT(lasers_names.size() == nlasers); - } + ParmParse ppl("lasers"); + ppl.query("nlasers", nlasers); + BL_ASSERT(nlasers >= 0); + if (nlasers > 0) { + ppl.getarr("names", lasers_names); + BL_ASSERT(lasers_names.size() == nlasers); + } - initialized = true; + initialized = true; } } @@ -91,7 +91,7 @@ void MultiParticleContainer::AllocData () { for (auto& pc : allcontainers) { - pc->AllocData(); + pc->AllocData(); } pc_tmp->AllocData(); } @@ -100,7 +100,7 @@ void MultiParticleContainer::InitData () { for (auto& pc : allcontainers) { - pc->InitData(); + pc->InitData(); } pc_tmp->InitData(); } @@ -112,7 +112,7 @@ MultiParticleContainer::FieldGatherES (const Vector > > >& masks) { for (auto& pc : allcontainers) { - pc->FieldGatherES(E, masks); + pc->FieldGatherES(E, masks); } } -- cgit v1.2.3 From c2b4a4e35febef5b6adc7d050a146ac1588cc4d7 Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Fri, 26 Apr 2019 15:22:25 -0700 Subject: fix indentation on LaserParticleContainer and MultiParticleContainer files --- Source/Laser/LaserParticleContainer.H | 8 +- Source/Laser/LaserParticleContainer.cpp | 368 ++++++++++++++-------------- Source/Particles/MultiParticleContainer.cpp | 55 ++--- 3 files changed, 212 insertions(+), 219 deletions(-) (limited to 'Source/Particles/MultiParticleContainer.cpp') diff --git a/Source/Laser/LaserParticleContainer.H b/Source/Laser/LaserParticleContainer.H index 5e45e3044..5dd94d0c7 100644 --- a/Source/Laser/LaserParticleContainer.H +++ b/Source/Laser/LaserParticleContainer.H @@ -20,14 +20,14 @@ public: #ifdef WARPX_DO_ELECTROSTATIC virtual void EvolveES (const amrex::Vector, 3> >& E, - amrex::Vector >& rho, + amrex::Vector >& rho, amrex::Real t, amrex::Real dt) { BL_ASSERT(false); } #endif // WARPX_DO_ELECTROSTATIC virtual void Evolve (int lev, - const amrex::MultiFab&, const amrex::MultiFab&, const amrex::MultiFab&, - const amrex::MultiFab&, const amrex::MultiFab&, const amrex::MultiFab&, - amrex::MultiFab& jx, amrex::MultiFab& jy, amrex::MultiFab& jz, + const amrex::MultiFab&, const amrex::MultiFab&, const amrex::MultiFab&, + const amrex::MultiFab&, const amrex::MultiFab&, const amrex::MultiFab&, + amrex::MultiFab& jx, amrex::MultiFab& jy, amrex::MultiFab& jz, amrex::MultiFab*, amrex::MultiFab*, amrex::MultiFab*, amrex::MultiFab* rho, amrex::MultiFab* crho, const amrex::MultiFab*, const amrex::MultiFab*, const amrex::MultiFab*, diff --git a/Source/Laser/LaserParticleContainer.cpp b/Source/Laser/LaserParticleContainer.cpp index 7ebb05e39..2b56c3cfd 100644 --- a/Source/Laser/LaserParticleContainer.cpp +++ b/Source/Laser/LaserParticleContainer.cpp @@ -15,7 +15,7 @@ namespace { Vector CrossProduct (const Vector& a, const Vector& b) { - return { a[1]*b[2]-a[2]*b[1], a[2]*b[0]-a[0]*b[2], a[0]*b[1]-a[1]*b[0] }; + return { a[1]*b[2]-a[2]*b[1], a[2]*b[0]-a[0]*b[2], a[0]*b[1]-a[1]*b[0] }; } } @@ -34,10 +34,10 @@ LaserParticleContainer::LaserParticleContainer (AmrCore* amr_core, int ispecies, std::transform(laser_type_s.begin(), laser_type_s.end(), laser_type_s.begin(), ::tolower); if (laser_type_s == "gaussian") { profile = laser_t::Gaussian; - } else if(laser_type_s == "harris") { - profile = laser_t::Harris; - } else if(laser_type_s == "parse_field_function") { - profile = laser_t::parse_field_function; + } else if(laser_type_s == "harris") { + profile = laser_t::Harris; + } else if(laser_type_s == "parse_field_function") { + profile = laser_t::parse_field_function; } else { amrex::Abort("Unknown laser type"); } @@ -52,91 +52,90 @@ LaserParticleContainer::LaserParticleContainer (AmrCore* amr_core, int ispecies, if ( profile == laser_t::Gaussian ) { // Parse the properties of the Gaussian profile - pp.get("profile_waist", profile_waist); - pp.get("profile_duration", profile_duration); - pp.get("profile_t_peak", profile_t_peak); - pp.get("profile_focal_distance", profile_focal_distance); - stc_direction = p_X; - pp.queryarr("stc_direction", stc_direction); - pp.query("zeta", zeta); - pp.query("beta", beta); - pp.query("phi2", phi2); + pp.get("profile_waist", profile_waist); + pp.get("profile_duration", profile_duration); + pp.get("profile_t_peak", profile_t_peak); + pp.get("profile_focal_distance", profile_focal_distance); + stc_direction = p_X; + pp.queryarr("stc_direction", stc_direction); + pp.query("zeta", zeta); + pp.query("beta", beta); + pp.query("phi2", phi2); } - if ( profile == laser_t::Harris ) { - // Parse the properties of the Harris profile - pp.get("profile_waist", profile_waist); - pp.get("profile_duration", profile_duration); - pp.get("profile_focal_distance", profile_focal_distance); - } + if ( profile == laser_t::Harris ) { + // Parse the properties of the Harris profile + pp.get("profile_waist", profile_waist); + pp.get("profile_duration", profile_duration); + pp.get("profile_focal_distance", profile_focal_distance); + } - if ( profile == laser_t::parse_field_function ) { - // Parse the properties of the parse_field_function profile - pp.get("field_function(X,Y,t)", field_function); - parser.define(field_function); - parser.registerVariables({"X","Y","t"}); - - ParmParse pp("my_constants"); - std::set symbols = parser.symbols(); - symbols.erase("X"); - symbols.erase("Y"); - symbols.erase("t"); // after removing variables, we are left with constants - for (auto it = symbols.begin(); it != symbols.end(); ) { - Real v; - if (pp.query(it->c_str(), v)) { - parser.setConstant(*it, v); - it = symbols.erase(it); - } else { - ++it; - } - } - for (auto const& s : symbols) { // make sure there no unknown symbols - amrex::Abort("Laser Profile: Unknown symbol "+s); + if ( profile == laser_t::parse_field_function ) { + // Parse the properties of the parse_field_function profile + pp.get("field_function(X,Y,t)", field_function); + parser.define(field_function); + parser.registerVariables({"X","Y","t"}); + + ParmParse pp("my_constants"); + std::set symbols = parser.symbols(); + symbols.erase("X"); + symbols.erase("Y"); + symbols.erase("t"); // after removing variables, we are left with constants + for (auto it = symbols.begin(); it != symbols.end(); ) { + Real v; + if (pp.query(it->c_str(), v)) { + parser.setConstant(*it, v); + it = symbols.erase(it); + } else { + ++it; } } + for (auto const& s : symbols) { // make sure there no unknown symbols + amrex::Abort("Laser Profile: Unknown symbol "+s); + } + } // Plane normal Real s = 1.0/std::sqrt(nvec[0]*nvec[0] + nvec[1]*nvec[1] + nvec[2]*nvec[2]); nvec = { nvec[0]*s, nvec[1]*s, nvec[2]*s }; - if (WarpX::gamma_boost > 1.) { - // Check that the laser direction is equal to the boost direction - AMREX_ALWAYS_ASSERT_WITH_MESSAGE( - nvec[0]*WarpX::boost_direction[0] - + nvec[1]*WarpX::boost_direction[1] - + nvec[2]*WarpX::boost_direction[2] - 1. < 1.e-12, - "The Lorentz boost should be in the same direction as the laser propagation"); - // Get the position of the plane, along the boost direction, in the lab frame - // and convert the position of the antenna to the boosted frame - Z0_lab = nvec[0]*position[0] + nvec[1]*position[1] + nvec[2]*position[2]; - Real Z0_boost = Z0_lab/WarpX::gamma_boost; - position[0] += (Z0_boost-Z0_lab)*nvec[0]; - position[1] += (Z0_boost-Z0_lab)*nvec[1]; - position[2] += (Z0_boost-Z0_lab)*nvec[2]; - } + if (WarpX::gamma_boost > 1.) { + // Check that the laser direction is equal to the boost direction + AMREX_ALWAYS_ASSERT_WITH_MESSAGE( nvec[0]*WarpX::boost_direction[0] + + nvec[1]*WarpX::boost_direction[1] + + nvec[2]*WarpX::boost_direction[2] - 1. < 1.e-12, + "The Lorentz boost should be in the same direction as the laser propagation"); + // Get the position of the plane, along the boost direction, in the lab frame + // and convert the position of the antenna to the boosted frame + Z0_lab = nvec[0]*position[0] + nvec[1]*position[1] + nvec[2]*position[2]; + Real Z0_boost = Z0_lab/WarpX::gamma_boost; + position[0] += (Z0_boost-Z0_lab)*nvec[0]; + position[1] += (Z0_boost-Z0_lab)*nvec[1]; + position[2] += (Z0_boost-Z0_lab)*nvec[2]; + } // The first polarization vector s = 1.0/std::sqrt(p_X[0]*p_X[0] + p_X[1]*p_X[1] + p_X[2]*p_X[2]); p_X = { p_X[0]*s, p_X[1]*s, p_X[2]*s }; Real dp = std::inner_product(nvec.begin(), nvec.end(), p_X.begin(), 0.0); - AMREX_ALWAYS_ASSERT_WITH_MESSAGE(std::abs(dp) < 1.0e-14, - "Laser plane vector is not perpendicular to the main polarization vector"); + AMREX_ALWAYS_ASSERT_WITH_MESSAGE(std::abs(dp) < 1.0e-14, + "Laser plane vector is not perpendicular to the main polarization vector"); p_Y = CrossProduct(nvec, p_X); // The second polarization vector s = 1.0/std::sqrt(stc_direction[0]*stc_direction[0] + stc_direction[1]*stc_direction[1] + stc_direction[2]*stc_direction[2]); stc_direction = { stc_direction[0]*s, stc_direction[1]*s, stc_direction[2]*s }; dp = std::inner_product(nvec.begin(), nvec.end(), stc_direction.begin(), 0.0); - AMREX_ALWAYS_ASSERT_WITH_MESSAGE(std::abs(dp) < 1.0e-14, - "stc_direction is not perpendicular to the laser plane vector"); + AMREX_ALWAYS_ASSERT_WITH_MESSAGE(std::abs(dp) < 1.0e-14, + "stc_direction is not perpendicular to the laser plane vector"); // Get angle between p_X and stc_direction // in 2d, stcs are in the simulation plane #if AMREX_SPACEDIM == 3 theta_stc = acos(stc_direction[0]*p_X[0] + - stc_direction[1]*p_X[1] + - stc_direction[2]*p_X[2]); + stc_direction[1]*p_X[1] + + stc_direction[2]*p_X[2]); #else theta_stc = 0.; #endif @@ -149,16 +148,16 @@ LaserParticleContainer::LaserParticleContainer (AmrCore* amr_core, int ispecies, u_Y = {0., 1., 0.}; #endif - prob_domain = Geometry::ProbDomain(); - { - Vector lo, hi; - if (pp.queryarr("prob_lo", lo)) { - prob_domain.setLo(lo); - } - if (pp.queryarr("prob_hi", hi)) { - prob_domain.setHi(hi); - } + prob_domain = Geometry::ProbDomain(); + { + Vector lo, hi; + if (pp.queryarr("prob_lo", lo)) { + prob_domain.setLo(lo); } + if (pp.queryarr("prob_hi", hi)) { + prob_domain.setHi(hi); + } + } } void @@ -176,60 +175,57 @@ LaserParticleContainer::InitData (int lev) ComputeSpacing(lev, S_X, S_Y); ComputeWeightMobility(S_X, S_Y); - auto Transform = [&](int i, int j) -> Vector - { + auto Transform = [&](int i, int j) -> Vector{ #if (AMREX_SPACEDIM == 3) - return { position[0] + (S_X*(i+0.5))*u_X[0] + (S_Y*(j+0.5))*u_Y[0], - position[1] + (S_X*(i+0.5))*u_X[1] + (S_Y*(j+0.5))*u_Y[1], - position[2] + (S_X*(i+0.5))*u_X[2] + (S_Y*(j+0.5))*u_Y[2] }; + return { position[0] + (S_X*(i+0.5))*u_X[0] + (S_Y*(j+0.5))*u_Y[0], + position[1] + (S_X*(i+0.5))*u_X[1] + (S_Y*(j+0.5))*u_Y[1], + position[2] + (S_X*(i+0.5))*u_X[2] + (S_Y*(j+0.5))*u_Y[2] }; #else - return { position[0] + (S_X*(i+0.5))*u_X[0], - 0.0, - position[2] + (S_X*(i+0.5))*u_X[2] }; + return { position[0] + (S_X*(i+0.5))*u_X[0], + 0.0, + position[2] + (S_X*(i+0.5))*u_X[2] }; #endif }; // Given the "lab" frame coordinates, return the real coordinates in the laser plane coordinates - auto InverseTransform = [&](const Vector& pos) -> Vector - { + auto InverseTransform = [&](const Vector& pos) -> Vector{ #if (AMREX_SPACEDIM == 3) - return {u_X[0]*(pos[0]-position[0])+u_X[1]*(pos[1]-position[1])+u_X[2]*(pos[2]-position[2]), - u_Y[0]*(pos[0]-position[0])+u_Y[1]*(pos[1]-position[1])+u_Y[2]*(pos[2]-position[2])}; + return {u_X[0]*(pos[0]-position[0])+u_X[1]*(pos[1]-position[1])+u_X[2]*(pos[2]-position[2]), + u_Y[0]*(pos[0]-position[0])+u_Y[1]*(pos[1]-position[1])+u_Y[2]*(pos[2]-position[2])}; #else - return {u_X[0]*(pos[0]-position[0])+u_X[2]*(pos[2]-position[2]), 0.0}; + return {u_X[0]*(pos[0]-position[0])+u_X[2]*(pos[2]-position[2]), 0.0}; #endif }; Vector plane_lo(2, std::numeric_limits::max()); Vector plane_hi(2, std::numeric_limits::min()); { - auto compute_min_max = [&](Real x, Real y, Real z) - { - const Vector& pos_plane = InverseTransform({x, y, z}); - int i = pos_plane[0]/S_X; - int j = pos_plane[1]/S_Y; - plane_lo[0] = std::min(plane_lo[0], i); - plane_lo[1] = std::min(plane_lo[1], j); - plane_hi[0] = std::max(plane_hi[0], i); - plane_hi[1] = std::max(plane_hi[1], j); - }; - - const Real* prob_lo = prob_domain.lo(); - const Real* prob_hi = prob_domain.hi(); + auto compute_min_max = [&](Real x, Real y, Real z){ + const Vector& pos_plane = InverseTransform({x, y, z}); + int i = pos_plane[0]/S_X; + int j = pos_plane[1]/S_Y; + plane_lo[0] = std::min(plane_lo[0], i); + plane_lo[1] = std::min(plane_lo[1], j); + plane_hi[0] = std::max(plane_hi[0], i); + plane_hi[1] = std::max(plane_hi[1], j); + }; + + const Real* prob_lo = prob_domain.lo(); + const Real* prob_hi = prob_domain.hi(); #if (AMREX_SPACEDIM == 3) - compute_min_max(prob_lo[0], prob_lo[1], prob_lo[2]); - compute_min_max(prob_hi[0], prob_lo[1], prob_lo[2]); - compute_min_max(prob_lo[0], prob_hi[1], prob_lo[2]); - compute_min_max(prob_hi[0], prob_hi[1], prob_lo[2]); - compute_min_max(prob_lo[0], prob_lo[1], prob_hi[2]); - compute_min_max(prob_hi[0], prob_lo[1], prob_hi[2]); - compute_min_max(prob_lo[0], prob_hi[1], prob_hi[2]); - compute_min_max(prob_hi[0], prob_hi[1], prob_hi[2]); + compute_min_max(prob_lo[0], prob_lo[1], prob_lo[2]); + compute_min_max(prob_hi[0], prob_lo[1], prob_lo[2]); + compute_min_max(prob_lo[0], prob_hi[1], prob_lo[2]); + compute_min_max(prob_hi[0], prob_hi[1], prob_lo[2]); + compute_min_max(prob_lo[0], prob_lo[1], prob_hi[2]); + compute_min_max(prob_hi[0], prob_lo[1], prob_hi[2]); + compute_min_max(prob_lo[0], prob_hi[1], prob_hi[2]); + compute_min_max(prob_hi[0], prob_hi[1], prob_hi[2]); #else - compute_min_max(prob_lo[0], 0.0, prob_lo[1]); - compute_min_max(prob_hi[0], 0.0, prob_lo[1]); - compute_min_max(prob_lo[0], 0.0, prob_hi[1]); - compute_min_max(prob_hi[0], 0.0, prob_hi[1]); + compute_min_max(prob_lo[0], 0.0, prob_lo[1]); + compute_min_max(prob_hi[0], 0.0, prob_lo[1]); + compute_min_max(prob_lo[0], 0.0, prob_hi[1]); + compute_min_max(prob_hi[0], 0.0, prob_hi[1]); #endif } @@ -270,22 +266,22 @@ LaserParticleContainer::InitData (int lev) const Box& bx = plane_ba[i]; for (IntVect cell = bx.smallEnd(); cell <= bx.bigEnd(); bx.next(cell)) { - const Vector& pos = Transform(cell[0], cell[1]); + const Vector& pos = Transform(cell[0], cell[1]); #if (AMREX_SPACEDIM == 3) - const Real* x = pos.dataPtr(); + const Real* x = pos.dataPtr(); #else - const Real x[2] = {pos[0], pos[2]}; + const Real x[2] = {pos[0], pos[2]}; #endif - if (prob_domain.contains(x)) - { - for (int k = 0; k<2; ++k) { - particle_x.push_back(pos[0]); - particle_y.push_back(pos[1]); - particle_z.push_back(pos[2]); - } - particle_w.push_back( weight); - particle_w.push_back(-weight); - } + if (prob_domain.contains(x)) + { + for (int k = 0; k<2; ++k) { + particle_x.push_back(pos[0]); + particle_y.push_back(pos[1]); + particle_z.push_back(pos[2]); + } + particle_w.push_back( weight); + particle_w.push_back(-weight); + } } } } @@ -297,15 +293,15 @@ LaserParticleContainer::InitData (int lev) if (Verbose()) amrex::Print() << "Adding laser particles\n"; AddNParticles(lev, np, particle_x.dataPtr(), particle_y.dataPtr(), particle_z.dataPtr(), - particle_ux.dataPtr(), particle_uy.dataPtr(), particle_uz.dataPtr(), - 1, particle_w.dataPtr(), 1); + particle_ux.dataPtr(), particle_uy.dataPtr(), particle_uz.dataPtr(), + 1, particle_w.dataPtr(), 1); } void LaserParticleContainer::Evolve (int lev, - const MultiFab&, const MultiFab&, const MultiFab&, - const MultiFab&, const MultiFab&, const MultiFab&, - MultiFab& jx, MultiFab& jy, MultiFab& jz, + const MultiFab&, const MultiFab&, const MultiFab&, + const MultiFab&, const MultiFab&, const MultiFab&, + MultiFab& jx, MultiFab& jy, MultiFab& jz, MultiFab* cjx, MultiFab* cjy, MultiFab* cjz, MultiFab* rho, MultiFab* crho, const MultiFab*, const MultiFab*, const MultiFab*, @@ -335,18 +331,18 @@ LaserParticleContainer::Evolve (int lev, #endif { #ifdef _OPENMP - int thread_num = omp_get_thread_num(); + int thread_num = omp_get_thread_num(); #else - int thread_num = 0; + int thread_num = 0; #endif Cuda::ManagedDeviceVector plane_Xp, plane_Yp, amplitude_E; for (WarpXParIter pti(*this, lev); pti.isValid(); ++pti) - { + { Real wt = amrex::second(); - const Box& box = pti.validbox(); + const Box& box = pti.validbox(); auto& attribs = pti.GetAttribs(); @@ -355,80 +351,80 @@ LaserParticleContainer::Evolve (int lev, auto& uyp = attribs[PIdx::uy]; auto& uzp = attribs[PIdx::uz]; - const long np = pti.numParticles(); + const long np = pti.numParticles(); // For now, laser particles do not take the current buffers into account const long np_current = np; m_giv[thread_num].resize(np); - plane_Xp.resize(np); - plane_Yp.resize(np); + plane_Xp.resize(np); + plane_Yp.resize(np); amplitude_E.resize(np); - // - // copy data from particle container to temp arrays - // - BL_PROFILE_VAR_START(blp_copy); + // + // copy data from particle container to temp arrays + // + BL_PROFILE_VAR_START(blp_copy); pti.GetPosition(m_xp[thread_num], m_yp[thread_num], m_zp[thread_num]); - BL_PROFILE_VAR_STOP(blp_copy); + BL_PROFILE_VAR_STOP(blp_copy); if (rho) DepositCharge(pti, wp, rho, crho, 0, np_current, np, thread_num, lev); - // - // Particle Push - // - BL_PROFILE_VAR_START(blp_pxr_pp); + // + // Particle Push + // + BL_PROFILE_VAR_START(blp_pxr_pp); // Find the coordinates of the particles in the emission plane calculate_laser_plane_coordinates( &np, - m_xp[thread_num].dataPtr(), - m_yp[thread_num].dataPtr(), - m_zp[thread_num].dataPtr(), - plane_Xp.dataPtr(), plane_Yp.dataPtr(), - &u_X[0], &u_X[1], &u_X[2], &u_Y[0], &u_Y[1], &u_Y[2], - &position[0], &position[1], &position[2] ); - // Calculate the laser amplitude to be emitted, - // at the position of the emission plane - if (profile == laser_t::Gaussian) { - warpx_gaussian_laser( &np, plane_Xp.dataPtr(), plane_Yp.dataPtr(), - &t_lab, &wavelength, &e_max, &profile_waist, &profile_duration, - &profile_t_peak, &profile_focal_distance, amplitude_E.dataPtr(), - &zeta, &beta, &phi2, &theta_stc ); - } + m_xp[thread_num].dataPtr(), + m_yp[thread_num].dataPtr(), + m_zp[thread_num].dataPtr(), + plane_Xp.dataPtr(), plane_Yp.dataPtr(), + &u_X[0], &u_X[1], &u_X[2], &u_Y[0], &u_Y[1], &u_Y[2], + &position[0], &position[1], &position[2] ); + // Calculate the laser amplitude to be emitted, + // at the position of the emission plane + if (profile == laser_t::Gaussian) { + warpx_gaussian_laser( &np, plane_Xp.dataPtr(), plane_Yp.dataPtr(), + &t_lab, &wavelength, &e_max, &profile_waist, &profile_duration, + &profile_t_peak, &profile_focal_distance, amplitude_E.dataPtr(), + &zeta, &beta, &phi2, &theta_stc ); + } if (profile == laser_t::Harris) { - warpx_harris_laser( &np, plane_Xp.dataPtr(), plane_Yp.dataPtr(), + warpx_harris_laser( &np, plane_Xp.dataPtr(), plane_Yp.dataPtr(), &t, &wavelength, &e_max, &profile_waist, &profile_duration, &profile_focal_distance, amplitude_E.dataPtr() ); - } + } if (profile == laser_t::parse_field_function) { for (int i = 0; i < np; ++i) { amplitude_E[i] = parser.eval(plane_Xp[i], plane_Yp[i], t); } - } - // Calculate the corresponding momentum and position for the particles + } + // Calculate the corresponding momentum and position for the particles update_laser_particle( - &np, - m_xp[thread_num].dataPtr(), - m_yp[thread_num].dataPtr(), - m_zp[thread_num].dataPtr(), - uxp.dataPtr(), uyp.dataPtr(), uzp.dataPtr(), - m_giv[thread_num].dataPtr(), - wp.dataPtr(), amplitude_E.dataPtr(), &p_X[0], &p_X[1], &p_X[2], - &nvec[0], &nvec[1], &nvec[2], &mobility, &dt, - &PhysConst::c, &WarpX::beta_boost, &WarpX::gamma_boost ); - BL_PROFILE_VAR_STOP(blp_pxr_pp); - - // - // Current Deposition - // + &np, + m_xp[thread_num].dataPtr(), + m_yp[thread_num].dataPtr(), + m_zp[thread_num].dataPtr(), + uxp.dataPtr(), uyp.dataPtr(), uzp.dataPtr(), + m_giv[thread_num].dataPtr(), + wp.dataPtr(), amplitude_E.dataPtr(), &p_X[0], &p_X[1], &p_X[2], + &nvec[0], &nvec[1], &nvec[2], &mobility, &dt, + &PhysConst::c, &WarpX::beta_boost, &WarpX::gamma_boost ); + BL_PROFILE_VAR_STOP(blp_pxr_pp); + + // + // Current Deposition + // DepositCurrent(pti, wp, uxp, uyp, uzp, jx, jy, jz, cjx, cjy, cjz, np_current, np, thread_num, lev, dt); - // - // copy particle data back - // - BL_PROFILE_VAR_START(blp_copy); + // + // copy particle data back + // + BL_PROFILE_VAR_START(blp_copy); pti.SetPosition(m_xp[thread_num], m_yp[thread_num], m_zp[thread_num]); BL_PROFILE_VAR_STOP(blp_copy); @@ -443,7 +439,7 @@ LaserParticleContainer::Evolve (int lev, costfab->plus(wt, work_box); }); } - } + } } } @@ -464,14 +460,14 @@ LaserParticleContainer::ComputeSpacing (int lev, Real& Sx, Real& Sy) const const Real eps = dx[0]*1.e-50; #if (AMREX_SPACEDIM == 3) Sx = std::min(std::min(dx[0]/(std::abs(u_X[0])+eps), - dx[1]/(std::abs(u_X[1])+eps)), - dx[2]/(std::abs(u_X[2])+eps)); + dx[1]/(std::abs(u_X[1])+eps)), + dx[2]/(std::abs(u_X[2])+eps)); Sy = std::min(std::min(dx[0]/(std::abs(u_Y[0])+eps), - dx[1]/(std::abs(u_Y[1])+eps)), - dx[2]/(std::abs(u_Y[2])+eps)); + dx[1]/(std::abs(u_Y[1])+eps)), + dx[2]/(std::abs(u_Y[2])+eps)); #else Sx = std::min(dx[0]/(std::abs(u_X[0])+eps), - dx[2]/(std::abs(u_X[2])+eps)); + dx[2]/(std::abs(u_X[2])+eps)); Sy = 1.0; #endif } diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp index 46d26152b..0485f7b8f 100644 --- a/Source/Particles/MultiParticleContainer.cpp +++ b/Source/Particles/MultiParticleContainer.cpp @@ -130,7 +130,7 @@ MultiParticleContainer::EvolveES (const VectorEvolveES(E, rho, t, dt); + pc->EvolveES(E, rho, t, dt); } for (unsigned i = 0; i < nlevs; i++) { @@ -159,7 +159,7 @@ MultiParticleContainer::Evolve (int lev, if (rho) rho->setVal(0.0); for (auto& pc : allcontainers) { pc->Evolve(lev, Ex, Ey, Ez, Bx, By, Bz, jx, jy, jz, cjx, cjy, cjz, - rho, cEx, cEy, cEz, cBx, cBy, cBz, t, dt); + rho, cEx, cEy, cEz, cBx, cBy, cBz, t, dt); } } @@ -167,7 +167,7 @@ void MultiParticleContainer::PushXES (Real dt) { for (auto& pc : allcontainers) { - pc->PushXES(dt); + pc->PushXES(dt); } } @@ -183,7 +183,7 @@ DepositCharge (Vector >& rho, bool local) } for (unsigned i = 0, n = allcontainers.size(); i < n; ++i) { - allcontainers[i]->DepositCharge(rho, true); + allcontainers[i]->DepositCharge(rho, true); } if (!local) { @@ -212,7 +212,7 @@ MultiParticleContainer::FieldGather (int lev, const MultiFab& Bx, const MultiFab& By, const MultiFab& Bz) { for (auto& pc : allcontainers) { - pc->FieldGather(lev, Ex, Ey, Ez, Bx, By, Bz); + pc->FieldGather(lev, Ex, Ey, Ez, Bx, By, Bz); } } @@ -237,7 +237,7 @@ MultiParticleContainer::Evolve (int lev, if (crho) crho->setVal(0.0); for (auto& pc : allcontainers) { pc->Evolve(lev, Ex, Ey, Ez, Bx, By, Bz, jx, jy, jz, cjx, cjy, cjz, - rho, crho, cEx, cEy, cEz, cBx, cBy, cBz, t, dt); + rho, crho, cEx, cEy, cEz, cBx, cBy, cBz, t, dt); } } @@ -245,7 +245,7 @@ void MultiParticleContainer::PushX (Real dt) { for (auto& pc : allcontainers) { - pc->PushX(dt); + pc->PushX(dt); } } @@ -255,7 +255,7 @@ MultiParticleContainer::PushP (int lev, Real dt, const MultiFab& Bx, const MultiFab& By, const MultiFab& Bz) { for (auto& pc : allcontainers) { - pc->PushP(lev, dt, Ex, Ey, Ez, Bx, By, Bz); + pc->PushP(lev, dt, Ex, Ey, Ez, Bx, By, Bz); } } @@ -264,12 +264,12 @@ MultiParticleContainer::GetChargeDensity (int lev, bool local) { std::unique_ptr rho = allcontainers[0]->GetChargeDensity(lev, true); for (unsigned i = 1, n = allcontainers.size(); i < n; ++i) { - std::unique_ptr rhoi = allcontainers[i]->GetChargeDensity(lev, true); - MultiFab::Add(*rho, *rhoi, 0, 0, 1, rho->nGrow()); + std::unique_ptr rhoi = allcontainers[i]->GetChargeDensity(lev, true); + MultiFab::Add(*rho, *rhoi, 0, 0, 1, rho->nGrow()); } if (!local) { - const Geometry& gm = allcontainers[0]->Geom(lev); - rho->SumBoundary(gm.periodicity()); + const Geometry& gm = allcontainers[0]->Geom(lev); + rho->SumBoundary(gm.periodicity()); } return rho; } @@ -278,7 +278,7 @@ void MultiParticleContainer::SortParticlesByCell () { for (auto& pc : allcontainers) { - pc->SortParticlesByCell(); + pc->SortParticlesByCell(); } } @@ -286,7 +286,7 @@ void MultiParticleContainer::Redistribute () { for (auto& pc : allcontainers) { - pc->Redistribute(); + pc->Redistribute(); } } @@ -294,7 +294,7 @@ void MultiParticleContainer::RedistributeLocal (const int num_ghost) { for (auto& pc : allcontainers) { - pc->Redistribute(0, 0, 0, num_ghost); + pc->Redistribute(0, 0, 0, num_ghost); } } @@ -304,10 +304,10 @@ MultiParticleContainer::NumberOfParticlesInGrid(int lev) const const bool only_valid=true, only_local=true; Vector r = allcontainers[0]->NumberOfParticlesInGrid(lev,only_valid,only_local); for (unsigned i = 1, n = allcontainers.size(); i < n; ++i) { - const auto& ri = allcontainers[i]->NumberOfParticlesInGrid(lev,only_valid,only_local); - for (unsigned j=0, m=ri.size(); jNumberOfParticlesInGrid(lev,only_valid,only_local); + for (unsigned j=0, m=ri.size(); jIncrement(mf,lev); + pc->Increment(mf,lev); } } @@ -325,7 +325,7 @@ void MultiParticleContainer::SetParticleBoxArray (int lev, BoxArray& new_ba) { for (auto& pc : allcontainers) { - pc->SetParticleBoxArray(lev,new_ba); + pc->SetParticleBoxArray(lev,new_ba); } } @@ -333,7 +333,7 @@ void MultiParticleContainer::SetParticleDistributionMap (int lev, DistributionMapping& new_dm) { for (auto& pc : allcontainers) { - pc->SetParticleDistributionMap(lev,new_dm); + pc->SetParticleDistributionMap(lev,new_dm); } } @@ -341,7 +341,7 @@ void MultiParticleContainer::PostRestart () { for (auto& pc : allcontainers) { - pc->PostRestart(); + pc->PostRestart(); } pc_tmp->PostRestart(); } @@ -357,16 +357,13 @@ MultiParticleContainer BL_PROFILE("MultiParticleContainer::GetLabFrameData"); - for (int i = 0; i < nspecies; ++i) - { + for (int i = 0; i < nspecies; ++i){ WarpXParticleContainer* pc = allcontainers[i].get(); WarpXParticleContainer::DiagnosticParticles diagnostic_particles; pc->GetParticleSlice(direction, z_old, z_new, t_boost, t_lab, dt, diagnostic_particles); - for (int lev = 0; lev <= pc->finestLevel(); ++lev) - { - for (auto it = diagnostic_particles[lev].begin(); it != diagnostic_particles[lev].end(); ++it) - { + for (int lev = 0; lev <= pc->finestLevel(); ++lev){ + for (auto it = diagnostic_particles[lev].begin(); it != diagnostic_particles[lev].end(); ++it){ parts[i].GetRealData(DiagIdx::w).insert( parts[i].GetRealData(DiagIdx::w ).end(), it->second.GetRealData(DiagIdx::w ).begin(), it->second.GetRealData(DiagIdx::w ).end()); -- cgit v1.2.3 From c38f60ee1fe22ae21f9bc38a7d4ff5b1be2d2d5a Mon Sep 17 00:00:00 2001 From: Andrew Myers Date: Mon, 29 Apr 2019 10:18:34 -0700 Subject: add the xold, uxold, etc particle components at runtime if doing boosted frame diagnostics for the particles --- Source/Particles/MultiParticleContainer.cpp | 21 +++++++++++++++++++- Source/Particles/WarpXParticleContainer.H | 30 +++++++++++++++++------------ Source/Particles/WarpXParticleContainer.cpp | 15 +++++++++++++++ 3 files changed, 53 insertions(+), 13 deletions(-) (limited to 'Source/Particles/MultiParticleContainer.cpp') diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp index 1b644b543..01ea948cd 100644 --- a/Source/Particles/MultiParticleContainer.cpp +++ b/Source/Particles/MultiParticleContainer.cpp @@ -28,7 +28,26 @@ MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core) if (WarpX::use_laser) { allcontainers[n-1].reset(new LaserParticleContainer(amr_core,n-1)); } - pc_tmp.reset(new PhysicalParticleContainer(amr_core)); + pc_tmp.reset(new PhysicalParticleContainer(amr_core)); + + if (WarpX::do_boosted_frame_diagnostic && WarpX::do_boosted_frame_particles) + { + for (int i = 0; i < n; ++i) + { + allcontainers[i]->AddRealComp("xold"); + allcontainers[i]->AddRealComp("yold"); + allcontainers[i]->AddRealComp("zold"); + allcontainers[i]->AddRealComp("uxold"); + allcontainers[i]->AddRealComp("uyold"); + allcontainers[i]->AddRealComp("uzold"); + } + pc_tmp->AddRealComp("xold"); + pc_tmp->AddRealComp("yold"); + pc_tmp->AddRealComp("zold"); + pc_tmp->AddRealComp("uxold"); + pc_tmp->AddRealComp("uyold"); + pc_tmp->AddRealComp("uzold"); + } } void diff --git a/Source/Particles/WarpXParticleContainer.H b/Source/Particles/WarpXParticleContainer.H index 050060b47..275554cd8 100644 --- a/Source/Particles/WarpXParticleContainer.H +++ b/Source/Particles/WarpXParticleContainer.H @@ -14,9 +14,6 @@ struct PIdx #ifdef WARPX_RZ theta, // RZ needs all three position components #endif -#ifdef WARPX_STORE_OLD_PARTICLE_ATTRIBS - xold, yold, zold, uxold, uyold, uzold, -#endif nattribs }; }; @@ -42,15 +39,7 @@ namespace ParticleStringNames {"Ez", PIdx::Ez }, {"Bx", PIdx::Bx }, {"By", PIdx::By }, - {"Bz", PIdx::Bz }, -#ifdef WARPX_STORE_OLD_PARTICLE_ATTRIBS - {"xold", PIdx::xold }, - {"yold", PIdx::yold }, - {"zold", PIdx::zold }, - {"uxold", PIdx::uxold}, - {"uyold", PIdx::uyold}, - {"uzold", PIdx::uzold}, -#endif + {"Bz", PIdx::Bz } }; } @@ -231,8 +220,25 @@ public: // split along axes (0) or diagonals (1) int split_type = 0; + using amrex::ParticleContainer<0, 0, PIdx::nattribs>::AddRealComp; + using amrex::ParticleContainer<0, 0, PIdx::nattribs>::AddIntComp; + + void AddRealComp (const std::string& name, bool comm=true) + { + particle_comps[name] = NumRealComps(); + AddRealComp(comm); + } + + void AddIntComp (const std::string& name, bool comm=true) + { + particle_comps[name] = NumIntComps(); + AddIntComp(comm); + } + protected: + std::map particle_comps; + int species_id; amrex::Real charge; diff --git a/Source/Particles/WarpXParticleContainer.cpp b/Source/Particles/WarpXParticleContainer.cpp index c52e0a6d0..567a3ff51 100644 --- a/Source/Particles/WarpXParticleContainer.cpp +++ b/Source/Particles/WarpXParticleContainer.cpp @@ -63,6 +63,21 @@ WarpXParticleContainer::WarpXParticleContainer (AmrCore* amr_core, int ispecies) SetParticleSize(); ReadParameters(); + // build up the map of string names to particle component numbers + particle_comps["w"] = PIdx::w; + particle_comps["ux"] = PIdx::ux; + particle_comps["uy"] = PIdx::uy; + particle_comps["uz"] = PIdx::uz; + particle_comps["Ex"] = PIdx::Ex; + particle_comps["Ey"] = PIdx::Ey; + particle_comps["Ez"] = PIdx::Ez; + particle_comps["Bx"] = PIdx::Bx; + particle_comps["By"] = PIdx::By; + particle_comps["Bz"] = PIdx::Bz; +#ifdef WARPX_RZ + particle_comps["theta"] = PIdx::theta; +#endif + // Initialize temporary local arrays for charge/current deposition int num_threads = 1; #ifdef _OPENMP -- cgit v1.2.3 From 0cff28db0a8b9125fa18a7b604eb97070377a26a Mon Sep 17 00:00:00 2001 From: Andrew Myers Date: Mon, 29 Apr 2019 15:56:37 -0700 Subject: fix number of particle containers due to upstream changes --- Source/Particles/MultiParticleContainer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Particles/MultiParticleContainer.cpp') diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp index fd6a7783f..42a8bcbfb 100644 --- a/Source/Particles/MultiParticleContainer.cpp +++ b/Source/Particles/MultiParticleContainer.cpp @@ -33,7 +33,7 @@ MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core) if (WarpX::do_boosted_frame_diagnostic && WarpX::do_boosted_frame_particles) { - for (int i = 0; i < n; ++i) + for (int i = 0; i < nspecies + nlaser; ++i) { allcontainers[i]->AddRealComp("xold"); allcontainers[i]->AddRealComp("yold"); -- cgit v1.2.3 From deea0e1b3b96ac6f2ffc9a206f8f07f229c216ba Mon Sep 17 00:00:00 2001 From: Andrew Myers Date: Mon, 29 Apr 2019 16:02:24 -0700 Subject: fix typo --- Source/Particles/MultiParticleContainer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Particles/MultiParticleContainer.cpp') diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp index 42a8bcbfb..a4df1f83a 100644 --- a/Source/Particles/MultiParticleContainer.cpp +++ b/Source/Particles/MultiParticleContainer.cpp @@ -33,7 +33,7 @@ MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core) if (WarpX::do_boosted_frame_diagnostic && WarpX::do_boosted_frame_particles) { - for (int i = 0; i < nspecies + nlaser; ++i) + for (int i = 0; i < nspecies + nlasers; ++i) { allcontainers[i]->AddRealComp("xold"); allcontainers[i]->AddRealComp("yold"); -- cgit v1.2.3 From f22d6cb818b24d51941062ee7ddf182b5c5fd465 Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Fri, 3 May 2019 16:34:31 -0700 Subject: first implementation for laser continuous injection --- Source/Evolve/WarpXEvolveEM.cpp | 3 + Source/Laser/LaserParticleContainer.H | 5 +- Source/Laser/LaserParticleContainer.cpp | 103 ++++++++++++++++++++++++++-- Source/Particles/MultiParticleContainer.H | 5 ++ Source/Particles/MultiParticleContainer.cpp | 14 ++++ Source/Particles/WarpXParticleContainer.H | 11 ++- Source/Particles/WarpXParticleContainer.cpp | 9 +++ Source/WarpX.H | 2 +- 8 files changed, 143 insertions(+), 9 deletions(-) (limited to 'Source/Particles/MultiParticleContainer.cpp') diff --git a/Source/Evolve/WarpXEvolveEM.cpp b/Source/Evolve/WarpXEvolveEM.cpp index e98561be1..8ce39683f 100644 --- a/Source/Evolve/WarpXEvolveEM.cpp +++ b/Source/Evolve/WarpXEvolveEM.cpp @@ -88,6 +88,9 @@ WarpX::EvolveEM (int numsteps) UpdateAuxilaryData(); } +// mypc->ContinuousInjection(dt[0], geom[0].ProbLo(), geom[0].ProbHi()); + mypc->ContinuousInjection(dt[0], geom[0].ProbDomain()); + if (do_subcycling == 0 || finest_level == 0) { OneStep_nosub(cur_time); } else if (do_subcycling == 1 && finest_level == 1) { diff --git a/Source/Laser/LaserParticleContainer.H b/Source/Laser/LaserParticleContainer.H index 5dd94d0c7..82162fea3 100644 --- a/Source/Laser/LaserParticleContainer.H +++ b/Source/Laser/LaserParticleContainer.H @@ -84,11 +84,14 @@ private: std::string field_function; // laser particle domain - amrex::RealBox prob_domain; + amrex::RealBox laser_prob_domain; + + amrex::Real z_antenna_th; void ComputeSpacing (int lev, amrex::Real& Sx, amrex::Real& Sy) const; void ComputeWeightMobility (amrex::Real Sx, amrex::Real Sy); void InitData (int lev); + void ContinuousInjection(amrex::Real dt, const amrex::RealBox& prob_domain) override; }; #endif diff --git a/Source/Laser/LaserParticleContainer.cpp b/Source/Laser/LaserParticleContainer.cpp index 2b56c3cfd..b7c893169 100644 --- a/Source/Laser/LaserParticleContainer.cpp +++ b/Source/Laser/LaserParticleContainer.cpp @@ -49,6 +49,7 @@ LaserParticleContainer::LaserParticleContainer (AmrCore* amr_core, int ispecies, pp.query("pusher_algo", pusher_algo); pp.get("wavelength", wavelength); pp.get("e_max", e_max); + pp.query("do_continuous_injection", do_continuous_injection); if ( profile == laser_t::Gaussian ) { // Parse the properties of the Gaussian profile @@ -148,14 +149,87 @@ LaserParticleContainer::LaserParticleContainer (AmrCore* amr_core, int ispecies, u_Y = {0., 1., 0.}; #endif - prob_domain = Geometry::ProbDomain(); + laser_prob_domain = Geometry::ProbDomain(); { Vector lo, hi; if (pp.queryarr("prob_lo", lo)) { - prob_domain.setLo(lo); + laser_prob_domain.setLo(lo); } if (pp.queryarr("prob_hi", hi)) { - prob_domain.setHi(hi); + laser_prob_domain.setHi(hi); + } + } + + if (do_continuous_injection){ + z_antenna_th = position[2]; + Print()<<"z_antenna_th "<prob_hi_z ){ + done_injecting = 0; + Print()<<"z_antenna_th>prob_lo_z && z_antenna_th1 ){ + AMREX_ALWAYS_ASSERT_WITH_MESSAGE( + (WarpX::boost_direction[0]-0)*(WarpX::boost_direction[0]-0) + + (WarpX::boost_direction[1]-0)*(WarpX::boost_direction[1]-0) + + (WarpX::boost_direction[2]-1)*(WarpX::boost_direction[2]-1) < 1.e-12, + "do_continous_injection for laser particle only works if " + + "warpx.boost_direction = z. TODO: all directions."); + } + } +} + +void +LaserParticleContainer::ContinuousInjection (Real dt, const RealBox& prob_domain) +{ + if (WarpX::gamma_boost>1){ + z_antenna_th -= PhysConst::c * WarpX::beta_boost * dt; + } + Print()<<"LaserParticleContainer::ContinuousInjection"<prob_lo_z && z_antenna_thprob_lo_z && z_antenna_thprob_lo_z && z_antenna_th0){ + Print()<<"particle_z.dataPtr() "< 1) { // Convert time from the boosted to the lab-frame @@ -338,8 +425,10 @@ LaserParticleContainer::Evolve (int lev, Cuda::ManagedDeviceVector plane_Xp, plane_Yp, amplitude_E; + Print()<<"before for loop "<& parts) const; + + void ContinuousInjection(amrex::Real dt, + const amrex::RealBox& prob_domain) const; +// amrex::Vector prob_lo, +// amrex::Vector prob_hi) const; // // Parameters for the Cherenkov corrector in the FDTD solver. diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp index a4df1f83a..6c0bd7ca9 100644 --- a/Source/Particles/MultiParticleContainer.cpp +++ b/Source/Particles/MultiParticleContainer.cpp @@ -414,3 +414,17 @@ MultiParticleContainer } } } + +void +MultiParticleContainer::ContinuousInjection(Real dt, const RealBox& prob_domain) const +{ +// Print()<<"prob_lo "<do_continuous_injection) + { + pc->ContinuousInjection(dt, prob_domain); + } + } +}; diff --git a/Source/Particles/WarpXParticleContainer.H b/Source/Particles/WarpXParticleContainer.H index 275554cd8..ec87aedb6 100644 --- a/Source/Particles/WarpXParticleContainer.H +++ b/Source/Particles/WarpXParticleContainer.H @@ -183,7 +183,12 @@ public: int thread_num, int lev, amrex::Real dt ); - + + virtual void ContinuousInjection(amrex::Real dt, + const amrex::RealBox& prob_domain) {} +// amrex::Vector prob_lo, +// amrex::Vector prob_hi) {} + /// /// This returns the total charge for all the particles in this ParticleContainer. /// This is needed when solving Poisson's equation with periodic boundary conditions. @@ -248,6 +253,9 @@ protected: static int do_not_push; + int do_continuous_injection = 0; + int done_injecting = 1; + amrex::Vector local_rho; amrex::Vector local_jx; amrex::Vector local_jy; @@ -258,6 +266,7 @@ protected: private: virtual void particlePostLocate(ParticleType& p, const amrex::ParticleLocData& pld, const int lev) override; + }; #endif diff --git a/Source/Particles/WarpXParticleContainer.cpp b/Source/Particles/WarpXParticleContainer.cpp index 2edd3c636..45f0793f0 100644 --- a/Source/Particles/WarpXParticleContainer.cpp +++ b/Source/Particles/WarpXParticleContainer.cpp @@ -178,6 +178,12 @@ WarpXParticleContainer::AddNParticles (int lev, BL_ASSERT(nattr == 1); const Real* weight = attr; + Print()<< "in WarpXParticleContainer::AddNParticles"<prob_hi_z ){ done_injecting = 0; - Print()<<"z_antenna_th>prob_lo_z && z_antenna_th1){ z_antenna_th -= PhysConst::c * WarpX::beta_boost * dt; } - Print()<<"LaserParticleContainer::ContinuousInjection"<prob_lo_z && z_antenna_thprob_lo_z && z_antenna_thprob_lo_z && z_antenna_th0){ - Print()<<"particle_z.dataPtr() "< 1) { // Convert time from the boosted to the lab-frame @@ -425,10 +387,8 @@ LaserParticleContainer::Evolve (int lev, Cuda::ManagedDeviceVector plane_Xp, plane_Yp, amplitude_E; - Print()<<"before for loop "< prob_lo, -// amrex::Vector prob_hi) const; // // Parameters for the Cherenkov corrector in the FDTD solver. diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp index 6c0bd7ca9..2539359f9 100644 --- a/Source/Particles/MultiParticleContainer.cpp +++ b/Source/Particles/MultiParticleContainer.cpp @@ -418,8 +418,6 @@ MultiParticleContainer void MultiParticleContainer::ContinuousInjection(Real dt, const RealBox& prob_domain) const { -// Print()<<"prob_lo "<do_continuous_injection) @@ -427,4 +425,4 @@ MultiParticleContainer::ContinuousInjection(Real dt, const RealBox& prob_domain) pc->ContinuousInjection(dt, prob_domain); } } -}; +} diff --git a/Source/Particles/WarpXParticleContainer.cpp b/Source/Particles/WarpXParticleContainer.cpp index 45f0793f0..2edd3c636 100644 --- a/Source/Particles/WarpXParticleContainer.cpp +++ b/Source/Particles/WarpXParticleContainer.cpp @@ -178,12 +178,6 @@ WarpXParticleContainer::AddNParticles (int lev, BL_ASSERT(nattr == 1); const Real* weight = attr; - Print()<< "in WarpXParticleContainer::AddNParticles"< prob_lo, -// amrex::Vector prob_hi) {} /// /// This returns the total charge for all the particles in this ParticleContainer. @@ -253,6 +258,10 @@ protected: static int do_not_push; + // Whether to allow particles outside of the simulation domain to be + // initialized when they enter the domain. + // This is currently required because continuous injection does not + // support all features allowed by direct injection. int do_continuous_injection = 0; int done_injecting = 1; -- cgit v1.2.3 From 38b802c0ba0d47fd179a2b384e8867248de078e9 Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Tue, 7 May 2019 08:35:22 -0700 Subject: consistent continuous injection for PhysicalParticle and LaserParticle --- Source/Evolve/WarpXEvolveEM.cpp | 2 +- Source/Laser/LaserParticleContainer.H | 1 + Source/Laser/LaserParticleContainer.cpp | 6 +++++- Source/Particles/MultiParticleContainer.cpp | 4 +++- Source/Particles/PhysicalParticleContainer.H | 7 +++++-- Source/Particles/PhysicalParticleContainer.cpp | 19 ++++++++++++++++--- Source/Particles/WarpXParticleContainer.H | 2 +- Source/Utils/WarpXMovingWindow.cpp | 6 ++++++ Source/WarpX.cpp | 13 ++++++++----- 9 files changed, 46 insertions(+), 14 deletions(-) (limited to 'Source/Particles/MultiParticleContainer.cpp') diff --git a/Source/Evolve/WarpXEvolveEM.cpp b/Source/Evolve/WarpXEvolveEM.cpp index 4a3ea092d..7fe47d261 100644 --- a/Source/Evolve/WarpXEvolveEM.cpp +++ b/Source/Evolve/WarpXEvolveEM.cpp @@ -90,7 +90,7 @@ WarpX::EvolveEM (int numsteps) // Performs continuous injection of all WarpXParticleContainer // in mypc. - mypc->ContinuousInjection(dt[0], geom[0].ProbDomain()); + // mypc->ContinuousInjection(dt[0], geom[0].ProbDomain()); if (do_subcycling == 0 || finest_level == 0) { OneStep_nosub(cur_time); diff --git a/Source/Laser/LaserParticleContainer.H b/Source/Laser/LaserParticleContainer.H index 2e40ca5be..4c7de4c81 100644 --- a/Source/Laser/LaserParticleContainer.H +++ b/Source/Laser/LaserParticleContainer.H @@ -88,6 +88,7 @@ private: // Theoretical position of the antenna. Used if do_continuous_injection=1. // Track the position of the antenna until it enters the simulation domain. amrex::Real z_antenna_th; + int done_injecting=1; void ComputeSpacing (int lev, amrex::Real& Sx, amrex::Real& Sy) const; void ComputeWeightMobility (amrex::Real Sx, amrex::Real Sy); diff --git a/Source/Laser/LaserParticleContainer.cpp b/Source/Laser/LaserParticleContainer.cpp index d28bd75e5..569d99c97 100644 --- a/Source/Laser/LaserParticleContainer.cpp +++ b/Source/Laser/LaserParticleContainer.cpp @@ -205,6 +205,8 @@ LaserParticleContainer::LaserParticleContainer (AmrCore* amr_core, int ispecies, void LaserParticleContainer::ContinuousInjection (Real dt, const RealBox& prob_domain) { + Print()<<" --- In LaserParticleContainer::ContinuousInjection"<1){ z_antenna_th -= PhysConst::c * WarpX::beta_boost * dt; @@ -222,7 +224,9 @@ LaserParticleContainer::ContinuousInjection (Real dt, const RealBox& prob_domain // Get domain boundaries in the z direction const Real prob_lo_z = prob_domain.lo()[AMREX_SPACEDIM-1]; const Real prob_hi_z = prob_domain.hi()[AMREX_SPACEDIM-1]; - if ( z_antenna_th>prob_lo_z && z_antenna_th=prob_lo_z && z_antenna_thdo_continuous_injection "<do_continuous_injection<do_continuous_injection) { + Print()<<"i "<do_continuous_injection "<do_continuous_injection<ContinuousInjection(dt, prob_domain); } } diff --git a/Source/Particles/PhysicalParticleContainer.H b/Source/Particles/PhysicalParticleContainer.H index 362683879..253aa58cd 100644 --- a/Source/Particles/PhysicalParticleContainer.H +++ b/Source/Particles/PhysicalParticleContainer.H @@ -101,8 +101,9 @@ public: const amrex::Real t_lab, const amrex::Real dt, DiagnosticParticles& diagnostic_particles) final; - bool injected = false; - + // bool injected = false; + // int do_continuous_injection = false; + protected: std::string species_name; @@ -122,6 +123,8 @@ protected: int GetRefineFac(const amrex::Real x, const amrex::Real y, const amrex::Real z); std::unique_ptr m_refined_injection_mask = nullptr; + void ContinuousInjection(amrex::Real dt, const amrex::RealBox& prob_domain) override; + }; #endif diff --git a/Source/Particles/PhysicalParticleContainer.cpp b/Source/Particles/PhysicalParticleContainer.cpp index 17e6d98d9..c28aacd28 100644 --- a/Source/Particles/PhysicalParticleContainer.cpp +++ b/Source/Particles/PhysicalParticleContainer.cpp @@ -24,7 +24,8 @@ NumParticlesToAdd(const Box& overlap_box, const RealBox& overlap_realbox, for (IntVect iv = overlap_box.smallEnd(); iv <= overlap_box.bigEnd(); overlap_box.next(iv)) { int fac; - if (injected) { + // if (injected) { + if (do_continuous_injection) { #if ( AMREX_SPACEDIM == 3 ) Real x = overlap_corner[0] + (iv[0] + 0.5)*dx[0]; Real y = overlap_corner[1] + (iv[1] + 0.5)*dx[1]; @@ -81,6 +82,7 @@ PhysicalParticleContainer::PhysicalParticleContainer (AmrCore* amr_core, int isp pp.query("do_backward_propagation", do_backward_propagation); pp.query("do_splitting", do_splitting); pp.query("split_type", split_type); + pp.query("do_continuous_injection", do_continuous_injection); } PhysicalParticleContainer::PhysicalParticleContainer (AmrCore* amr_core) @@ -361,7 +363,9 @@ PhysicalParticleContainer::AddPlasmaCPU (int lev, RealBox part_realbox) for (IntVect iv = overlap_box.smallEnd(); iv <= overlap_box.bigEnd(); overlap_box.next(iv)) { int fac; - if (injected) { + // if (injected) { + if (do_continuous_injection) { + Print()<<"in AddPlasmaCPU if do_continuous_injection"< local_rho; amrex::Vector local_jx; diff --git a/Source/Utils/WarpXMovingWindow.cpp b/Source/Utils/WarpXMovingWindow.cpp index 05e171f22..5b84a1eb0 100644 --- a/Source/Utils/WarpXMovingWindow.cpp +++ b/Source/Utils/WarpXMovingWindow.cpp @@ -163,13 +163,19 @@ WarpX::MoveWindow (bool move_j) particleBox.setHi( dir, current_injection_position ); } // Perform the injection of new particles in particleBox + // Performs continuous injection of all WarpXParticleContainer + // in mypc. + if (particleBox.ok() and (current_injection_position != new_injection_position)){ + mypc->ContinuousInjection(dt[0], particleBox); + /* for (int i = 0; i < num_injected_species; ++i) { int ispecies = injected_plasma_species[i]; WarpXParticleContainer& pc = mypc->GetParticleContainer(ispecies); auto& ppc = dynamic_cast(pc); ppc.AddPlasma(lev, particleBox); } + */ // Update the injection position current_injection_position = new_injection_position; } diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp index 47ead98df..645e92161 100644 --- a/Source/WarpX.cpp +++ b/Source/WarpX.cpp @@ -146,14 +146,17 @@ WarpX::WarpX () // Particle Container mypc = std::unique_ptr (new MultiParticleContainer(this)); + /* if (do_plasma_injection) { for (int i = 0; i < num_injected_species; ++i) { int ispecies = injected_plasma_species[i]; WarpXParticleContainer& pc = mypc->GetParticleContainer(ispecies); auto& ppc = dynamic_cast(pc); - ppc.injected = true; + // ppc.injected = true; + ppc.do_continuous_injection = 1; } } + */ Efield_aux.resize(nlevs_max); Bfield_aux.resize(nlevs_max); @@ -302,10 +305,10 @@ WarpX::ReadParameters () pp.query("do_plasma_injection", do_plasma_injection); if (do_plasma_injection) { - pp.get("num_injected_species", num_injected_species); - injected_plasma_species.resize(num_injected_species); - pp.getarr("injected_plasma_species", injected_plasma_species, - 0, num_injected_species); + // pp.get("num_injected_species", num_injected_species); + // injected_plasma_species.resize(num_injected_species); + // pp.getarr("injected_plasma_species", injected_plasma_species, + // 0, num_injected_species); if (moving_window_v >= 0){ // Inject particles continuously from the right end of the box current_injection_position = geom[0].ProbHi(moving_window_dir); -- cgit v1.2.3 From 6bdafd570c25fde71d2ce93ecea6fbd803f8cf2c Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Tue, 7 May 2019 09:32:47 -0700 Subject: laser and plasma cont injection combined and working with MW and boost in z --- Source/Laser/LaserParticleContainer.H | 1 + Source/Laser/LaserParticleContainer.cpp | 46 ++++++++++++++++++++++++++--- Source/Particles/MultiParticleContainer.H | 4 ++- Source/Particles/MultiParticleContainer.cpp | 24 +++++++++++++++ Source/Particles/WarpXParticleContainer.H | 1 + Source/Utils/WarpXMovingWindow.cpp | 4 ++- 6 files changed, 74 insertions(+), 6 deletions(-) (limited to 'Source/Particles/MultiParticleContainer.cpp') diff --git a/Source/Laser/LaserParticleContainer.H b/Source/Laser/LaserParticleContainer.H index 4c7de4c81..bb36f4795 100644 --- a/Source/Laser/LaserParticleContainer.H +++ b/Source/Laser/LaserParticleContainer.H @@ -96,6 +96,7 @@ private: // Inject the laser antenna during the simulation, if it started // outside of the simulation domain and enters it. void ContinuousInjection(amrex::Real dt, const amrex::RealBox& prob_domain) override; + void UpdateContinuousInjectionPosition(amrex::Real dt) override; }; #endif diff --git a/Source/Laser/LaserParticleContainer.cpp b/Source/Laser/LaserParticleContainer.cpp index 569d99c97..8499455de 100644 --- a/Source/Laser/LaserParticleContainer.cpp +++ b/Source/Laser/LaserParticleContainer.cpp @@ -207,10 +207,6 @@ LaserParticleContainer::ContinuousInjection (Real dt, const RealBox& prob_domain { Print()<<" --- In LaserParticleContainer::ContinuousInjection"<1){ - z_antenna_th -= PhysConst::c * WarpX::beta_boost * dt; - } // If laser antenna particles have not been injected yet, // check if they should be injected at this iteration. If // so, inject them and set done_injecting to 0 (false). @@ -239,6 +235,48 @@ LaserParticleContainer::ContinuousInjection (Real dt, const RealBox& prob_domain } } +void +LaserParticleContainer::UpdateContinuousInjectionPosition(Real dt) +{ + int dir = WarpX::moving_window_dir; + // update position of the antenna (outside of the box) + // Continuously inject plasma in new cells (by default only on level 0) + if (do_continuous_injection and (WarpX::gamma_boost > 1)){ + // In boosted-frame simulations, the plasma has moved since the last + // call to this function, and injection position needs to be updated + z_antenna_th -= WarpX::beta_boost * +#if ( AMREX_SPACEDIM == 3 ) + WarpX::boost_direction[dir] * PhysConst::c * dt; +#elif ( AMREX_SPACEDIM == 2 ) + // In 2D, dir=0 corresponds to x and dir=1 corresponds to z + // This needs to be converted in order to index `boost_direction` + // which has 3 components, for both 2D and 3D simulations. + WarpX::boost_direction[2*dir] * PhysConst::c * dt; +#endif + } + + /* + if (WarpX::do_plasma_injection and (WarpX::gamma_boost > 1){ + z_antenna_th -= PhysConst::c * WarpX::beta_boost * dt; + } + */ +} + + + + + + + + + + + + + + + + void LaserParticleContainer::InitData () { diff --git a/Source/Particles/MultiParticleContainer.H b/Source/Particles/MultiParticleContainer.H index c6bc6d768..f48daf9bb 100644 --- a/Source/Particles/MultiParticleContainer.H +++ b/Source/Particles/MultiParticleContainer.H @@ -172,7 +172,9 @@ public: void ContinuousInjection(amrex::Real dt, const amrex::RealBox& prob_domain) const; - + + void UpdateContinuousInjectionPosition(amrex::Real dt) const; + // // Parameters for the Cherenkov corrector in the FDTD solver. // Both stencils are calculated ar runtime. diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp index 1ce0c5390..9810a168f 100644 --- a/Source/Particles/MultiParticleContainer.cpp +++ b/Source/Particles/MultiParticleContainer.cpp @@ -434,3 +434,27 @@ MultiParticleContainer::ContinuousInjection(Real dt, const RealBox& prob_domain) } } } + +void +MultiParticleContainer::UpdateContinuousInjectionPosition(Real dt) const +{ + for (int i=0; ido_continuous_injection "<do_continuous_injection<do_continuous_injection) + { + Print()<<"i "<do_continuous_injection "<do_continuous_injection<UpdateContinuousInjectionPosition(dt); + } + } + /* + for (int i=nspecies; i(pc); + // auto& pc = allcontainers[i]; + // auto& lpc = dynamic_cast(pc); + lpc.UpdateContinuousInjectionPosition(dt); + } + */ +} diff --git a/Source/Particles/WarpXParticleContainer.H b/Source/Particles/WarpXParticleContainer.H index 62f3570ad..51238907d 100644 --- a/Source/Particles/WarpXParticleContainer.H +++ b/Source/Particles/WarpXParticleContainer.H @@ -193,6 +193,7 @@ public: // RigidInjectedParticleContainer: not implemented. virtual void ContinuousInjection(amrex::Real dt, const amrex::RealBox& prob_domain) {} + virtual void UpdateContinuousInjectionPosition(amrex::Real dt) {} /// /// This returns the total charge for all the particles in this ParticleContainer. diff --git a/Source/Utils/WarpXMovingWindow.cpp b/Source/Utils/WarpXMovingWindow.cpp index 5b84a1eb0..2ba1d2f59 100644 --- a/Source/Utils/WarpXMovingWindow.cpp +++ b/Source/Utils/WarpXMovingWindow.cpp @@ -33,8 +33,10 @@ WarpX::MoveWindow (bool move_j) // and of the plasma injection moving_window_x += moving_window_v * dt[0]; int dir = moving_window_dir; - UpdatePlasmaInjectionPosition( dt[0] ); + UpdatePlasmaInjectionPosition( dt[0] ); + mypc->UpdateContinuousInjectionPosition( dt[0] ); + // compute the number of cells to shift on the base level Real new_lo[AMREX_SPACEDIM]; Real new_hi[AMREX_SPACEDIM]; -- cgit v1.2.3 From ddb2585a55edcedd0ca613f4288f34d71edda8b2 Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Tue, 7 May 2019 11:48:48 -0700 Subject: continuous injection working + comments --- Source/Evolve/WarpXEvolveEM.cpp | 4 - Source/Laser/LaserParticleContainer.H | 8 +- Source/Laser/LaserParticleContainer.cpp | 134 ++++++++++--------------- Source/Particles/MultiParticleContainer.H | 8 +- Source/Particles/MultiParticleContainer.cpp | 32 ++---- Source/Particles/PhysicalParticleContainer.H | 6 +- Source/Particles/PhysicalParticleContainer.cpp | 13 ++- Source/Particles/WarpXParticleContainer.H | 7 +- Source/Utils/WarpXMovingWindow.cpp | 29 +++--- Source/WarpX.cpp | 12 --- 10 files changed, 98 insertions(+), 155 deletions(-) (limited to 'Source/Particles/MultiParticleContainer.cpp') diff --git a/Source/Evolve/WarpXEvolveEM.cpp b/Source/Evolve/WarpXEvolveEM.cpp index 7fe47d261..e98561be1 100644 --- a/Source/Evolve/WarpXEvolveEM.cpp +++ b/Source/Evolve/WarpXEvolveEM.cpp @@ -88,10 +88,6 @@ WarpX::EvolveEM (int numsteps) UpdateAuxilaryData(); } - // Performs continuous injection of all WarpXParticleContainer - // in mypc. - // mypc->ContinuousInjection(dt[0], geom[0].ProbDomain()); - if (do_subcycling == 0 || finest_level == 0) { OneStep_nosub(cur_time); } else if (do_subcycling == 1 && finest_level == 1) { diff --git a/Source/Laser/LaserParticleContainer.H b/Source/Laser/LaserParticleContainer.H index bb36f4795..ccd48f3b5 100644 --- a/Source/Laser/LaserParticleContainer.H +++ b/Source/Laser/LaserParticleContainer.H @@ -84,10 +84,11 @@ private: std::string field_function; // laser particle domain - amrex::RealBox laser_prob_domain; + amrex::RealBox laser_injection_box; // Theoretical position of the antenna. Used if do_continuous_injection=1. // Track the position of the antenna until it enters the simulation domain. - amrex::Real z_antenna_th; + amrex::Vector updated_position; + // Avoid injecting the antenna several times. int done_injecting=1; void ComputeSpacing (int lev, amrex::Real& Sx, amrex::Real& Sy) const; @@ -95,7 +96,8 @@ private: void InitData (int lev); // Inject the laser antenna during the simulation, if it started // outside of the simulation domain and enters it. - void ContinuousInjection(amrex::Real dt, const amrex::RealBox& prob_domain) override; + void ContinuousInjection(const amrex::RealBox& injection_box) override; + // Update position of the antenna void UpdateContinuousInjectionPosition(amrex::Real dt) override; }; diff --git a/Source/Laser/LaserParticleContainer.cpp b/Source/Laser/LaserParticleContainer.cpp index 8499455de..a7fe9042d 100644 --- a/Source/Laser/LaserParticleContainer.cpp +++ b/Source/Laser/LaserParticleContainer.cpp @@ -149,42 +149,42 @@ LaserParticleContainer::LaserParticleContainer (AmrCore* amr_core, int ispecies, u_Y = {0., 1., 0.}; #endif - laser_prob_domain = Geometry::ProbDomain(); + laser_injection_box= Geometry::ProbDomain(); { Vector lo, hi; if (pp.queryarr("prob_lo", lo)) { - laser_prob_domain.setLo(lo); + laser_injection_box.setLo(lo); } if (pp.queryarr("prob_hi", hi)) { - laser_prob_domain.setHi(hi); + laser_injection_box.setHi(hi); } } if (do_continuous_injection){ // If laser antenna initially outside of the box, store its theoretical // position in z_antenna_th, and set done_injecting to 0. - z_antenna_th = position[2]; - const Real prob_lo_z = laser_prob_domain.lo()[AMREX_SPACEDIM-1]; - const Real prob_hi_z = laser_prob_domain.hi()[AMREX_SPACEDIM-1]; - if ( z_antenna_thprob_hi_z ){ + updated_position = position; + // Convert updated position to Real* to use RealBox.contains() +#if (AMREX_SPACEDIM == 3) + const Real* p_pos = updated_position.dataPtr(); +#else + const Real p_pos[2] = {updated_position[0], updated_position[2]}; +#endif + if ( not laser_injection_box.contains(p_pos) ){ done_injecting = 0; } - // Sanity checks: do_continuous_injection can be used only if the - // laser, the moving window and the boost are all in z direction. + + // Sanity checks + std::Vector windir(3, 0.0); +#if (AMREX_SPACEDIM==2) + windir[2*dir] = 1.0; +#else + windir[dir] = 1.0; +#endif AMREX_ALWAYS_ASSERT_WITH_MESSAGE( - (nvec[0]-0)*(nvec[0]-0) + - (nvec[1]-0)*(nvec[1]-0) + - (nvec[2]-1)*(nvec[2]-1) < 1.e-12, - "do_continous_injection for laser particle only works if " + - "laser.direction = 0 0 1 (laser along z). TODO: all directions."); - AMREX_ALWAYS_ASSERT_WITH_MESSAGE( - WarpX::moving_window_dir == AMREX_SPACEDIM-1, - "do_continous_injection for laser particle only works if " + - "moving window along z. TODO: all directions."); - AMREX_ALWAYS_ASSERT_WITH_MESSAGE( - maxLevel() == 0, - "do_continous_injection for laser particle only works if " + - "max level = 0."); + (nvec[0]-windir[0]) + (nvec[1]-windor[1]) + (nvec[2]-windor[2]) + < 1.e-12, "do_continous_injection for laser particle only works" + + " if moving window direction and laser propagation direction are the same"); if ( WarpX::gamma_boost>1 ){ AMREX_ALWAYS_ASSERT_WITH_MESSAGE( (WarpX::boost_direction[0]-0)*(WarpX::boost_direction[0]-0) + @@ -197,86 +197,60 @@ LaserParticleContainer::LaserParticleContainer (AmrCore* amr_core, int ispecies, } /* \brief Check if laser particles enter the box, and inject if necessary. - * \param dt: time step (assume no MR for now) - * \param prob_domain: a RealBox that contains current simulation boundaries. - * This function checks if the laser antenna should be injected at this - * iteration. If so, it injects it and set done_injecting to 1. + * \param injection_box: a RealBox where particles should be injected. */ void -LaserParticleContainer::ContinuousInjection (Real dt, const RealBox& prob_domain) +LaserParticleContainer::ContinuousInjection (const RealBox& injection_box) { - Print()<<" --- In LaserParticleContainer::ContinuousInjection"<=prob_lo_z && z_antenna_th 1)){ - // In boosted-frame simulations, the plasma has moved since the last + // In boosted-frame simulations, the antenna has moved since the last // call to this function, and injection position needs to be updated - z_antenna_th -= WarpX::beta_boost * #if ( AMREX_SPACEDIM == 3 ) + updated_position[dir] -= WarpX::beta_boost * WarpX::boost_direction[dir] * PhysConst::c * dt; #elif ( AMREX_SPACEDIM == 2 ) - // In 2D, dir=0 corresponds to x and dir=1 corresponds to z - // This needs to be converted in order to index `boost_direction` - // which has 3 components, for both 2D and 3D simulations. + // In 2D, dir=0 corresponds to x and dir=1 corresponds to z + // This needs to be converted in order to index `boost_direction` + // which has 3 components, for both 2D and 3D simulations. + updated_position[2*dir] -= WarpX::beta_boost * WarpX::boost_direction[2*dir] * PhysConst::c * dt; #endif } - - /* - if (WarpX::do_plasma_injection and (WarpX::gamma_boost > 1){ - z_antenna_th -= PhysConst::c * WarpX::beta_boost * dt; - } - */ } - - - - - - - - - - - - - - - void LaserParticleContainer::InitData () { @@ -294,9 +268,9 @@ LaserParticleContainer::InitData (int lev) // LaserParticleContainer::position contains the initial position of the // laser antenna. In the boosted frame, the antenna is moving. - // Update its position. + // Update its position with updated_position. if (do_continuous_injection){ - position[2] = z_antenna_th; + position = updated_position; } auto Transform = [&](int i, int j) -> Vector{ @@ -334,8 +308,8 @@ LaserParticleContainer::InitData (int lev) plane_hi[1] = std::max(plane_hi[1], j); }; - const Real* prob_lo = laser_prob_domain.lo(); - const Real* prob_hi = laser_prob_domain.hi(); + const Real* prob_lo = laser_injection_box.lo(); + const Real* prob_hi = laser_injection_box.hi(); #if (AMREX_SPACEDIM == 3) compute_min_max(prob_lo[0], prob_lo[1], prob_lo[2]); compute_min_max(prob_hi[0], prob_lo[1], prob_lo[2]); @@ -396,7 +370,7 @@ LaserParticleContainer::InitData (int lev) #else const Real x[2] = {pos[0], pos[2]}; #endif - if (laser_prob_domain.contains(x)) + if (laser_injection_box.contains(x)) { for (int k = 0; k<2; ++k) { particle_x.push_back(pos[0]); diff --git a/Source/Particles/MultiParticleContainer.H b/Source/Particles/MultiParticleContainer.H index f48daf9bb..49a79231c 100644 --- a/Source/Particles/MultiParticleContainer.H +++ b/Source/Particles/MultiParticleContainer.H @@ -170,9 +170,11 @@ public: const amrex::Real t_boost, const amrex::Real t_lab, const amrex::Real dt, amrex::Vector& parts) const; - void ContinuousInjection(amrex::Real dt, - const amrex::RealBox& prob_domain) const; - + // Inject particles during the simulation (for particles entering the + // simulation domain after some iterations, due to flowing plasma and/or + // moving window). + void ContinuousInjection(const amrex::RealBox& injection_box) const; + // Update injection position for continuously-injected species. void UpdateContinuousInjectionPosition(amrex::Real dt) const; // diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp index 9810a168f..a5f695c69 100644 --- a/Source/Particles/MultiParticleContainer.cpp +++ b/Source/Particles/MultiParticleContainer.cpp @@ -416,45 +416,33 @@ MultiParticleContainer } /* \brief Continuous injection for particles initially outside of the domain. - * \param dt: timestep (so far, this only works without MR) - * \param prob_domain: current boundaries of the full domain. + * \param injection_box: Domain where new particles should be injected. * Loop over all WarpXParticleContainer in MultiParticleContainer and * calls virtual function ContinuousInjection. */ void -MultiParticleContainer::ContinuousInjection(Real dt, const RealBox& prob_domain) const +MultiParticleContainer::ContinuousInjection(const RealBox& injection_box) const { for (int i=0; ido_continuous_injection "<do_continuous_injection<do_continuous_injection) - { - Print()<<"i "<do_continuous_injection "<do_continuous_injection<ContinuousInjection(dt, prob_domain); + if (pc->do_continuous_injection){ + pc->ContinuousInjection(injection_box); } } } +/* \brief Update position of continuous injection parameters. + * \param dt: simulation time step (level 0) + * All classes inherited from WarpXParticleContainer do not have + * a position to update (PhysicalParticleContainer does not do anything). + */ void MultiParticleContainer::UpdateContinuousInjectionPosition(Real dt) const { for (int i=0; ido_continuous_injection "<do_continuous_injection<do_continuous_injection) - { - Print()<<"i "<do_continuous_injection "<do_continuous_injection<do_continuous_injection){ pc->UpdateContinuousInjectionPosition(dt); } } - /* - for (int i=nspecies; i(pc); - // auto& pc = allcontainers[i]; - // auto& lpc = dynamic_cast(pc); - lpc.UpdateContinuousInjectionPosition(dt); - } - */ } diff --git a/Source/Particles/PhysicalParticleContainer.H b/Source/Particles/PhysicalParticleContainer.H index 253aa58cd..4f365768b 100644 --- a/Source/Particles/PhysicalParticleContainer.H +++ b/Source/Particles/PhysicalParticleContainer.H @@ -101,9 +101,6 @@ public: const amrex::Real t_lab, const amrex::Real dt, DiagnosticParticles& diagnostic_particles) final; - // bool injected = false; - // int do_continuous_injection = false; - protected: std::string species_name; @@ -123,7 +120,8 @@ protected: int GetRefineFac(const amrex::Real x, const amrex::Real y, const amrex::Real z); std::unique_ptr m_refined_injection_mask = nullptr; - void ContinuousInjection(amrex::Real dt, const amrex::RealBox& prob_domain) override; + // Inject particles during the whole simulation + void ContinuousInjection(const amrex::RealBox& injection_box) override; }; diff --git a/Source/Particles/PhysicalParticleContainer.cpp b/Source/Particles/PhysicalParticleContainer.cpp index c28aacd28..2fa39d87d 100644 --- a/Source/Particles/PhysicalParticleContainer.cpp +++ b/Source/Particles/PhysicalParticleContainer.cpp @@ -24,7 +24,6 @@ NumParticlesToAdd(const Box& overlap_box, const RealBox& overlap_realbox, for (IntVect iv = overlap_box.smallEnd(); iv <= overlap_box.bigEnd(); overlap_box.next(iv)) { int fac; - // if (injected) { if (do_continuous_injection) { #if ( AMREX_SPACEDIM == 3 ) Real x = overlap_corner[0] + (iv[0] + 0.5)*dx[0]; @@ -363,9 +362,7 @@ PhysicalParticleContainer::AddPlasmaCPU (int lev, RealBox part_realbox) for (IntVect iv = overlap_box.smallEnd(); iv <= overlap_box.bigEnd(); overlap_box.next(iv)) { int fac; - // if (injected) { if (do_continuous_injection) { - Print()<<"in AddPlasmaCPU if do_continuous_injection"< local_rho; amrex::Vector local_jx; diff --git a/Source/Utils/WarpXMovingWindow.cpp b/Source/Utils/WarpXMovingWindow.cpp index 2ba1d2f59..38bde5e92 100644 --- a/Source/Utils/WarpXMovingWindow.cpp +++ b/Source/Utils/WarpXMovingWindow.cpp @@ -34,9 +34,16 @@ WarpX::MoveWindow (bool move_j) moving_window_x += moving_window_v * dt[0]; int dir = moving_window_dir; + // Update warpx.current_injection_position + // PhysicalParticleContainer uses this injection position UpdatePlasmaInjectionPosition( dt[0] ); - mypc->UpdateContinuousInjectionPosition( dt[0] ); - + if (WarpX::do_plasma_injection){ + // Update injection position for WarpXParticleContainer in mypc. + // Nothing to do for PhysicalParticleContainers + // For LaserParticleContainer, need to update the antenna position. + mypc->UpdateContinuousInjectionPosition( dt[0] ); + } + // compute the number of cells to shift on the base level Real new_lo[AMREX_SPACEDIM]; Real new_hi[AMREX_SPACEDIM]; @@ -164,21 +171,11 @@ WarpX::MoveWindow (bool move_j) particleBox.setLo( dir, new_injection_position ); particleBox.setHi( dir, current_injection_position ); } - // Perform the injection of new particles in particleBox - // Performs continuous injection of all WarpXParticleContainer - // in mypc. - + if (particleBox.ok() and (current_injection_position != new_injection_position)){ - mypc->ContinuousInjection(dt[0], particleBox); - /* - for (int i = 0; i < num_injected_species; ++i) { - int ispecies = injected_plasma_species[i]; - WarpXParticleContainer& pc = mypc->GetParticleContainer(ispecies); - auto& ppc = dynamic_cast(pc); - ppc.AddPlasma(lev, particleBox); - } - */ - // Update the injection position + // Performs continuous injection of all WarpXParticleContainer + // in mypc. + mypc->ContinuousInjection(particleBox); current_injection_position = new_injection_position; } } diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp index 645e92161..bea91f1ba 100644 --- a/Source/WarpX.cpp +++ b/Source/WarpX.cpp @@ -146,18 +146,6 @@ WarpX::WarpX () // Particle Container mypc = std::unique_ptr (new MultiParticleContainer(this)); - /* - if (do_plasma_injection) { - for (int i = 0; i < num_injected_species; ++i) { - int ispecies = injected_plasma_species[i]; - WarpXParticleContainer& pc = mypc->GetParticleContainer(ispecies); - auto& ppc = dynamic_cast(pc); - // ppc.injected = true; - ppc.do_continuous_injection = 1; - } - } - */ - Efield_aux.resize(nlevs_max); Bfield_aux.resize(nlevs_max); -- cgit v1.2.3 From 2ddaf2f8270247b847041da886adefb4f96714c1 Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Tue, 7 May 2019 12:56:03 -0700 Subject: remove do_plasma_injection and cleaning --- Source/Laser/LaserParticleContainer.cpp | 5 +++-- Source/Particles/MultiParticleContainer.H | 1 + Source/Particles/MultiParticleContainer.cpp | 13 +++++++++++++ Source/Utils/WarpXMovingWindow.cpp | 6 +++--- Source/WarpX.H | 3 ++- Source/WarpX.cpp | 25 ++++++++++--------------- Tools/Visualization.ipynb | 10 +++++----- 7 files changed, 37 insertions(+), 26 deletions(-) (limited to 'Source/Particles/MultiParticleContainer.cpp') diff --git a/Source/Laser/LaserParticleContainer.cpp b/Source/Laser/LaserParticleContainer.cpp index a7fe9042d..3bbd7a039 100644 --- a/Source/Laser/LaserParticleContainer.cpp +++ b/Source/Laser/LaserParticleContainer.cpp @@ -175,14 +175,15 @@ LaserParticleContainer::LaserParticleContainer (AmrCore* amr_core, int ispecies, } // Sanity checks - std::Vector windir(3, 0.0); + int dir = WarpX::moving_window_dir; + std::vector windir(3, 0.0); #if (AMREX_SPACEDIM==2) windir[2*dir] = 1.0; #else windir[dir] = 1.0; #endif AMREX_ALWAYS_ASSERT_WITH_MESSAGE( - (nvec[0]-windir[0]) + (nvec[1]-windor[1]) + (nvec[2]-windor[2]) + (nvec[0]-windir[0]) + (nvec[1]-windir[1]) + (nvec[2]-windir[2]) < 1.e-12, "do_continous_injection for laser particle only works" + " if moving window direction and laser propagation direction are the same"); if ( WarpX::gamma_boost>1 ){ diff --git a/Source/Particles/MultiParticleContainer.H b/Source/Particles/MultiParticleContainer.H index 49a79231c..0c5e49c04 100644 --- a/Source/Particles/MultiParticleContainer.H +++ b/Source/Particles/MultiParticleContainer.H @@ -176,6 +176,7 @@ public: void ContinuousInjection(const amrex::RealBox& injection_box) const; // Update injection position for continuously-injected species. void UpdateContinuousInjectionPosition(amrex::Real dt) const; + int doContinuousInjection() const; // // Parameters for the Cherenkov corrector in the FDTD solver. diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp index a5f695c69..440906348 100644 --- a/Source/Particles/MultiParticleContainer.cpp +++ b/Source/Particles/MultiParticleContainer.cpp @@ -446,3 +446,16 @@ MultiParticleContainer::UpdateContinuousInjectionPosition(Real dt) const } } } + +int +MultiParticleContainer::doContinuousInjection() const +{ + int warpx_do_continuous_injection = 0; + for (int i=0; ido_continuous_injection){ + warpx_do_continuous_injection = 1; + } + } + return warpx_do_continuous_injection; +} diff --git a/Source/Utils/WarpXMovingWindow.cpp b/Source/Utils/WarpXMovingWindow.cpp index 38bde5e92..18d89951d 100644 --- a/Source/Utils/WarpXMovingWindow.cpp +++ b/Source/Utils/WarpXMovingWindow.cpp @@ -9,7 +9,7 @@ WarpX::UpdatePlasmaInjectionPosition (Real dt) { int dir = moving_window_dir; // Continuously inject plasma in new cells (by default only on level 0) - if (WarpX::do_plasma_injection and (WarpX::gamma_boost > 1)){ + if (WarpX::warpx_do_continuous_injection and (WarpX::gamma_boost > 1)){ // In boosted-frame simulations, the plasma has moved since the last // call to this function, and injection position needs to be updated current_injection_position -= WarpX::beta_boost * @@ -37,7 +37,7 @@ WarpX::MoveWindow (bool move_j) // Update warpx.current_injection_position // PhysicalParticleContainer uses this injection position UpdatePlasmaInjectionPosition( dt[0] ); - if (WarpX::do_plasma_injection){ + if (WarpX::warpx_do_continuous_injection){ // Update injection position for WarpXParticleContainer in mypc. // Nothing to do for PhysicalParticleContainers // For LaserParticleContainer, need to update the antenna position. @@ -143,7 +143,7 @@ WarpX::MoveWindow (bool move_j) } // Continuously inject plasma in new cells (by default only on level 0) - if (WarpX::do_plasma_injection) { + if (WarpX::warpx_do_continuous_injection) { const int lev = 0; diff --git a/Source/WarpX.H b/Source/WarpX.H index 9e9776117..710b2a7e7 100644 --- a/Source/WarpX.H +++ b/Source/WarpX.H @@ -476,7 +476,8 @@ private: amrex::Real current_injection_position = 0; // Plasma injection parameters - int do_plasma_injection = 0; + // int do_plasma_injection = 0; + int warpx_do_continuous_injection = 0; int num_injected_species = -1; amrex::Vector injected_plasma_species; diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp index bea91f1ba..a3a24897a 100644 --- a/Source/WarpX.cpp +++ b/Source/WarpX.cpp @@ -145,6 +145,16 @@ WarpX::WarpX () // Particle Container mypc = std::unique_ptr (new MultiParticleContainer(this)); + warpx_do_continuous_injection = mypc->doContinuousInjection(); + if (warpx_do_continuous_injection){ + if (moving_window_v >= 0){ + // Inject particles continuously from the right end of the box + current_injection_position = geom[0].ProbHi(moving_window_dir); + } else { + // Inject particles continuously from the left end of the box + current_injection_position = geom[0].ProbLo(moving_window_dir); + } + } Efield_aux.resize(nlevs_max); Bfield_aux.resize(nlevs_max); @@ -291,21 +301,6 @@ WarpX::ReadParameters () moving_window_v *= PhysConst::c; } - pp.query("do_plasma_injection", do_plasma_injection); - if (do_plasma_injection) { - // pp.get("num_injected_species", num_injected_species); - // injected_plasma_species.resize(num_injected_species); - // pp.getarr("injected_plasma_species", injected_plasma_species, - // 0, num_injected_species); - if (moving_window_v >= 0){ - // Inject particles continuously from the right end of the box - current_injection_position = geom[0].ProbHi(moving_window_dir); - } else { - // Inject particles continuously from the left end of the box - current_injection_position = geom[0].ProbLo(moving_window_dir); - } - } - pp.query("do_boosted_frame_diagnostic", do_boosted_frame_diagnostic); if (do_boosted_frame_diagnostic) { diff --git a/Tools/Visualization.ipynb b/Tools/Visualization.ipynb index f5946a3de..5ac03f931 100644 --- a/Tools/Visualization.ipynb +++ b/Tools/Visualization.ipynb @@ -991,21 +991,21 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.14" + "pygments_lexer": "ipython3", + "version": "3.7.1" }, "widgets": { "state": { -- cgit v1.2.3 From 6bca0956123895d7641bf710d69aff04419470af Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Wed, 8 May 2019 17:28:47 -0700 Subject: further cleaning and fix bug when using MR --- Source/Filter/NCIGodfreyFilter.cpp | 1 - Source/Initialization/WarpXInitData.cpp | 2 -- Source/Particles/MultiParticleContainer.H | 11 ---------- Source/Particles/MultiParticleContainer.cpp | 2 -- Source/Particles/PhysicalParticleContainer.cpp | 29 ++++++++++++-------------- Source/WarpX.cpp | 2 +- 6 files changed, 14 insertions(+), 33 deletions(-) (limited to 'Source/Particles/MultiParticleContainer.cpp') diff --git a/Source/Filter/NCIGodfreyFilter.cpp b/Source/Filter/NCIGodfreyFilter.cpp index 34fca7604..28073725a 100644 --- a/Source/Filter/NCIGodfreyFilter.cpp +++ b/Source/Filter/NCIGodfreyFilter.cpp @@ -55,7 +55,6 @@ void NCIGodfreyFilter::ComputeStencils(){ Real weight_right = cdtodz - index/tab_length; Real prestencil[4]; for(int i=0; ifdtd_nci_stencilz_ex.resize(max_level+1); - mypc->fdtd_nci_stencilz_by.resize(max_level+1); for (int lev = 0; lev <= max_level; ++lev) { const Geometry& gm = Geom(lev); diff --git a/Source/Particles/MultiParticleContainer.H b/Source/Particles/MultiParticleContainer.H index 0c5e49c04..cc9dc1f59 100644 --- a/Source/Particles/MultiParticleContainer.H +++ b/Source/Particles/MultiParticleContainer.H @@ -178,17 +178,6 @@ public: void UpdateContinuousInjectionPosition(amrex::Real dt) const; int doContinuousInjection() const; - // - // Parameters for the Cherenkov corrector in the FDTD solver. - // Both stencils are calculated ar runtime. - // - // Number of coefficients for the stencil of the NCI corrector. - // The stencil is applied in the z direction only. - static constexpr int nstencilz_fdtd_nci_corr=5; - - amrex::Vector > fdtd_nci_stencilz_ex; - amrex::Vector > fdtd_nci_stencilz_by; - std::vector GetSpeciesNames() const { return species_names; } PhysicalParticleContainer& GetPCtmp () { return *pc_tmp; } diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp index 440906348..983530569 100644 --- a/Source/Particles/MultiParticleContainer.cpp +++ b/Source/Particles/MultiParticleContainer.cpp @@ -8,8 +8,6 @@ using namespace amrex; -constexpr int MultiParticleContainer::nstencilz_fdtd_nci_corr; - MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core) { ReadParameters(); diff --git a/Source/Particles/PhysicalParticleContainer.cpp b/Source/Particles/PhysicalParticleContainer.cpp index 1e0d68800..d98957c28 100644 --- a/Source/Particles/PhysicalParticleContainer.cpp +++ b/Source/Particles/PhysicalParticleContainer.cpp @@ -1102,9 +1102,6 @@ PhysicalParticleContainer::Evolve (int lev, const std::array& dx = WarpX::CellSize(lev); const std::array& cdx = WarpX::CellSize(std::max(lev-1,0)); - const auto& mypc = WarpX::GetInstance().GetPartContainer(); - const int nstencilz_fdtd_nci_corr = mypc.nstencilz_fdtd_nci_corr; - // Get instances of NCI Godfrey filters const auto& nci_godfrey_filter_exeybz = WarpX::GetInstance().nci_godfrey_filter_exeybz; const auto& nci_godfrey_filter_bxbyez = WarpX::GetInstance().nci_godfrey_filter_bxbyez; @@ -1181,38 +1178,38 @@ PhysicalParticleContainer::Evolve (int lev, // Safeguard for GPU exeli = filtered_Ex.elixir(); // Apply filter on Ex, result stored in filtered_Ex - nci_godfrey_filter_exeybz[lev]->ApplyStencil(filtered_Ex, Ex[pti], tbox); + nci_godfrey_filter_exeybz[lev]->ApplyStencil(filtered_Ex, Ex[pti], filtered_Ex.box()); // Update exfab reference exfab = &filtered_Ex; // Filter Ez filtered_Ez.resize(amrex::convert(tbox,WarpX::Ez_nodal_flag)); ezeli = filtered_Ez.elixir(); - nci_godfrey_filter_bxbyez[lev]->ApplyStencil(filtered_Ez, Ez[pti], tbox); + nci_godfrey_filter_bxbyez[lev]->ApplyStencil(filtered_Ez, Ez[pti], filtered_Ez.box()); ezfab = &filtered_Ez; // Filter By filtered_By.resize(amrex::convert(tbox,WarpX::By_nodal_flag)); byeli = filtered_By.elixir(); - nci_godfrey_filter_bxbyez[lev]->ApplyStencil(filtered_By, By[pti], tbox); + nci_godfrey_filter_bxbyez[lev]->ApplyStencil(filtered_By, By[pti], filtered_By.box()); byfab = &filtered_By; #if (AMREX_SPACEDIM == 3) // Filter Ey filtered_Ey.resize(amrex::convert(tbox,WarpX::Ey_nodal_flag)); eyeli = filtered_Ey.elixir(); - nci_godfrey_filter_exeybz[lev]->ApplyStencil(filtered_Ey, Ey[pti], tbox); + nci_godfrey_filter_exeybz[lev]->ApplyStencil(filtered_Ey, Ey[pti], filtered_Ey.box()); eyfab = &filtered_Ey; // Filter Bx filtered_Bx.resize(amrex::convert(tbox,WarpX::Bx_nodal_flag)); bxeli = filtered_Bx.elixir(); - nci_godfrey_filter_bxbyez[lev]->ApplyStencil(filtered_Bx, Bx[pti], tbox); + nci_godfrey_filter_bxbyez[lev]->ApplyStencil(filtered_Bx, Bx[pti], filtered_Bx.box()); bxfab = &filtered_Bx; // Filter Bz filtered_Bz.resize(amrex::convert(tbox,WarpX::Bz_nodal_flag)); bzeli = filtered_Bz.elixir(); - nci_godfrey_filter_exeybz[lev]->ApplyStencil(filtered_Bz, Bz[pti], tbox); + nci_godfrey_filter_exeybz[lev]->ApplyStencil(filtered_Bz, Bz[pti], filtered_Bz.box()); bzfab = &filtered_Bz; #endif } @@ -1388,44 +1385,44 @@ PhysicalParticleContainer::Evolve (int lev, static_cast(WarpX::noy), static_cast(WarpX::noz)}); #endif - + // Filter Ex (both 2D and 3D) filtered_Ex.resize(amrex::convert(tbox,WarpX::Ex_nodal_flag)); // Safeguard for GPU exeli = filtered_Ex.elixir(); // Apply filter on Ex, result stored in filtered_Ex - nci_godfrey_filter_exeybz[lev-1]->ApplyStencil(filtered_Ex, (*cEx)[pti], tbox); + nci_godfrey_filter_exeybz[lev-1]->ApplyStencil(filtered_Ex, (*cEx)[pti], filtered_Ex.box()); // Update exfab reference cexfab = &filtered_Ex; // Filter Ez filtered_Ez.resize(amrex::convert(tbox,WarpX::Ez_nodal_flag)); ezeli = filtered_Ez.elixir(); - nci_godfrey_filter_bxbyez[lev-1]->ApplyStencil(filtered_Ez, (*cEz)[pti], tbox); + nci_godfrey_filter_bxbyez[lev-1]->ApplyStencil(filtered_Ez, (*cEz)[pti], filtered_Ez.box()); cezfab = &filtered_Ez; // Filter By filtered_By.resize(amrex::convert(tbox,WarpX::By_nodal_flag)); byeli = filtered_By.elixir(); - nci_godfrey_filter_bxbyez[lev-1]->ApplyStencil(filtered_By, (*cBy)[pti], tbox); + nci_godfrey_filter_bxbyez[lev-1]->ApplyStencil(filtered_By, (*cBy)[pti], filtered_By.box()); cbyfab = &filtered_By; #if (AMREX_SPACEDIM == 3) // Filter Ey filtered_Ey.resize(amrex::convert(tbox,WarpX::Ey_nodal_flag)); eyeli = filtered_Ey.elixir(); - nci_godfrey_filter_exeybz[lev-1]->ApplyStencil(filtered_Ey, (*cEy)[pti], tbox); + nci_godfrey_filter_exeybz[lev-1]->ApplyStencil(filtered_Ey, (*cEy)[pti], filtered_Ey.box()); ceyfab = &filtered_Ey; // Filter Bx filtered_Bx.resize(amrex::convert(tbox,WarpX::Bx_nodal_flag)); bxeli = filtered_Bx.elixir(); - nci_godfrey_filter_bxbyez[lev-1]->ApplyStencil(filtered_Bx, (*cBx)[pti], tbox); + nci_godfrey_filter_bxbyez[lev-1]->ApplyStencil(filtered_Bx, (*cBx)[pti], filtered_Bx.box()); cbxfab = &filtered_Bx; // Filter Bz filtered_Bz.resize(amrex::convert(tbox,WarpX::Bz_nodal_flag)); bzeli = filtered_Bz.elixir(); - nci_godfrey_filter_exeybz[lev-1]->ApplyStencil(filtered_Bz, (*cBz)[pti], tbox); + nci_godfrey_filter_exeybz[lev-1]->ApplyStencil(filtered_Bz, (*cBz)[pti], filtered_Bz.box()); cbzfab = &filtered_Bz; #endif } diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp index 5f63e2ad6..b24058a0e 100644 --- a/Source/WarpX.cpp +++ b/Source/WarpX.cpp @@ -651,7 +651,7 @@ WarpX::AllocLevelData (int lev, const BoxArray& ba, const DistributionMapping& d int ngz_nonci = (ngz_tmp % 2) ? ngz_tmp+1 : ngz_tmp; // Always even number int ngz; if (WarpX::use_fdtd_nci_corr) { - int ng = ngz_tmp + (mypc->nstencilz_fdtd_nci_corr-1); + int ng = ngz_tmp + 4; ngz = (ng % 2) ? ng+1 : ng; } else { ngz = ngz_nonci; -- cgit v1.2.3 From 271eb52eafffdefb8dfc3bb43ee521094fbd5a74 Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Fri, 10 May 2019 17:49:29 -0700 Subject: lab diags is a species argument. add comments --- Source/Diagnostics/BoostedFrameDiagnostic.H | 4 +++ Source/Diagnostics/BoostedFrameDiagnostic.cpp | 25 ++++++++------- Source/Particles/MultiParticleContainer.H | 5 +++ Source/Particles/MultiParticleContainer.cpp | 36 ++++++++++++++++++++-- Source/Particles/PhysicalParticleContainer.cpp | 15 +++++---- .../Particles/RigidInjectedParticleContainer.cpp | 2 +- Source/Particles/WarpXParticleContainer.H | 8 +++++ Source/Particles/WarpXParticleContainer.cpp | 6 ++-- Source/WarpX.cpp | 8 +++-- 9 files changed, 84 insertions(+), 25 deletions(-) (limited to 'Source/Particles/MultiParticleContainer.cpp') diff --git a/Source/Diagnostics/BoostedFrameDiagnostic.H b/Source/Diagnostics/BoostedFrameDiagnostic.H index e35d307a6..ef4bd2ec1 100644 --- a/Source/Diagnostics/BoostedFrameDiagnostic.H +++ b/Source/Diagnostics/BoostedFrameDiagnostic.H @@ -75,6 +75,10 @@ class BoostedFrameDiagnostic { int boost_direction_; amrex::Vector > data_buffer_; + // particles_buffer_ is current blind to refinement level. + // particles_buffer_[i][j] is a WarpXParticleContainer::DiagnosticParticleData where + // - i is the back-transformed snapshot number + // - j is the species number amrex::Vector > particles_buffer_; int num_buffer_ = 256; int max_box_size_ = 256; diff --git a/Source/Diagnostics/BoostedFrameDiagnostic.cpp b/Source/Diagnostics/BoostedFrameDiagnostic.cpp index 13972075d..5d85fc8f8 100644 --- a/Source/Diagnostics/BoostedFrameDiagnostic.cpp +++ b/Source/Diagnostics/BoostedFrameDiagnostic.cpp @@ -540,13 +540,14 @@ void BoostedFrameDiagnostic::Flush(const Geometry& geom) if (WarpX::do_boosted_frame_particles) { for (int j = 0; j < mypc.nSpecies(); ++j) { + std::string species_name = species_names[mypc.map_species_lab_diags[j]]; #ifdef WARPX_USE_HDF5 writeParticleDataHDF5(particles_buffer_[i][j], snapshots_[i].file_name, - species_names[j]); + species_name); #else std::stringstream part_ss; - part_ss << snapshots_[i].file_name + "/" + species_names[j] + "/"; + part_ss << snapshots_[i].file_name + "/" + species_name + "/"; writeParticleData(particles_buffer_[i][j], part_ss.str(), i_lab); #endif } @@ -600,7 +601,7 @@ writeLabFrameData(const MultiFab* cell_centered_data, DistributionMapping buff_dm(buff_ba); data_buffer_[i].reset( new MultiFab(buff_ba, buff_dm, ncomp, 0) ); } - if (WarpX::do_boosted_frame_particles) particles_buffer_[i].resize(mypc.nSpecies()); + if (WarpX::do_boosted_frame_particles) particles_buffer_[i].resize(mypc.nspecies_lab_frame_diags); } if (WarpX::do_boosted_frame_fields) { @@ -666,14 +667,15 @@ writeLabFrameData(const MultiFab* cell_centered_data, } if (WarpX::do_boosted_frame_particles) { - for (int j = 0; j < mypc.nSpecies(); ++j) { + for (int j = 0; j < mypc.nspecies_lab_frame_diags; ++j) { + const std::string species_name = species_names[mypc.map_species_lab_diags[j]]; #ifdef WARPX_USE_HDF5 writeParticleDataHDF5(particles_buffer_[i][j], snapshots_[i].file_name, - species_names[j]); + species_name); #else std::stringstream part_ss; - part_ss << snapshots_[i].file_name + "/" + species_names[j] + "/"; + part_ss << snapshots_[i].file_name + "/" + species_name + "/"; writeParticleData(particles_buffer_[i][j], part_ss.str(), i_lab); #endif } @@ -855,16 +857,16 @@ LabSnapShot(Real t_lab_in, Real t_boost, Real zmin_lab_in, ParallelDescriptor::Barrier(); - if (WarpX::do_boosted_frame_particles) - { + if (WarpX::do_boosted_frame_particles){ auto & mypc = WarpX::GetInstance().GetPartContainer(); const std::vector species_names = mypc.GetSpeciesNames(); for (int j = 0; j < mypc.nSpecies(); ++j) { - output_create_species_group(file_name, species_names[j]); + std::string species_name = species_names[mypc.map_species_lab_diags[j]]; + output_create_species_group(file_name, species_name); for (int k = 0; k < static_cast(particle_field_names.size()); ++k) { - std::string field_path = species_names[j] + "/" + particle_field_names[k]; + std::string field_path = species_name + "/" + particle_field_names[k]; output_create_particle_field(file_name, field_path); } } @@ -888,7 +890,8 @@ LabSnapShot(Real t_lab_in, Real t_boost, Real zmin_lab_in, const std::string particles_prefix = "particle"; for(int i = 0; i < nspecies; ++i) { - const std::string fullpath = file_name + "/" + species_names[i]; + std::string species_name = species_names[mypc.map_species_lab_diags[i]]; + const std::string fullpath = file_name + "/" + species_name; if (!UtilCreateDirectory(fullpath, 0755)) CreateDirectoryFailed(fullpath); } diff --git a/Source/Particles/MultiParticleContainer.H b/Source/Particles/MultiParticleContainer.H index 9291e0358..5a79443d0 100644 --- a/Source/Particles/MultiParticleContainer.H +++ b/Source/Particles/MultiParticleContainer.H @@ -153,6 +153,8 @@ public: void SetParticleBoxArray (int lev, amrex::BoxArray& new_ba); void SetParticleDistributionMap (int lev, amrex::DistributionMapping& new_dm); + void setSpeciesLabFrameDiags() const; + int nSpecies() const {return nspecies;} int nSpeciesDepositOnMainGrid () const { @@ -184,6 +186,9 @@ public: // Number of coefficients for the stencil of the NCI corrector. // The stencil is applied in the z direction only. static constexpr int nstencilz_fdtd_nci_corr=5; + int nspecies_lab_frame_diags = 0; + std::vector map_species_lab_diags; + int do_boosted_frame_diags = 0; amrex::Vector > fdtd_nci_stencilz_ex; amrex::Vector > fdtd_nci_stencilz_by; diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp index 440906348..bde8d244e 100644 --- a/Source/Particles/MultiParticleContainer.cpp +++ b/Source/Particles/MultiParticleContainer.cpp @@ -31,7 +31,21 @@ MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core) pc_tmp.reset(new PhysicalParticleContainer(amr_core)); - if (WarpX::do_boosted_frame_diagnostic && WarpX::do_boosted_frame_particles) + // Compute the number of species for which mab frame data is dumped + // nspecies_lab_frame_diags, and map their ID to MultiParticleContainer + // particle IDs in map_species_lab_diags. + map_species_lab_diags.resize(nspecies); + nspecies_lab_frame_diags = 0; + for (int i=0; ido_boosted_frame_diags){ + map_species_lab_diags[nspecies_lab_frame_diags] = i; + nspecies_lab_frame_diags += 1; + do_boosted_frame_diags = 1; + } + } + + if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) { for (int i = 0; i < nspecies + nlasers; ++i) { @@ -376,13 +390,24 @@ MultiParticleContainer BL_PROFILE("MultiParticleContainer::GetLabFrameData"); + // Loop over particle species for (int i = 0; i < nspecies; ++i){ WarpXParticleContainer* pc = allcontainers[i].get(); WarpXParticleContainer::DiagnosticParticles diagnostic_particles; pc->GetParticleSlice(direction, z_old, z_new, t_boost, t_lab, dt, diagnostic_particles); - + // Here, diagnostic_particles[lev][index] is a WarpXParticleContainer::DiagnosticParticleData + // where "lev" is the AMR level and "index" is a [grid index][tile index] pair. + + // Loop over AMR levels for (int lev = 0; lev <= pc->finestLevel(); ++lev){ + // Loop over [grid index][tile index] pairs + // and Fills parts[species number i] with particle data from all grids and + // tiles in diagnostic_particles. parts contains particles from all + // AMR levels indistinctly. for (auto it = diagnostic_particles[lev].begin(); it != diagnostic_particles[lev].end(); ++it){ + // it->first is the [grid index][tile index] key + // it->second is the corresponding + // WarpXParticleContainer::DiagnosticParticleData value parts[i].GetRealData(DiagIdx::w).insert( parts[i].GetRealData(DiagIdx::w ).end(), it->second.GetRealData(DiagIdx::w ).begin(), it->second.GetRealData(DiagIdx::w ).end()); @@ -459,3 +484,10 @@ MultiParticleContainer::doContinuousInjection() const } return warpx_do_continuous_injection; } + +// Set number of species for which lab frame data is dumped +// and maps their ID to MultiParticleContainer IDs. +//void +//MultiParticleContainer::setSpeciesLabFrameDiags() const +//{ +//} diff --git a/Source/Particles/PhysicalParticleContainer.cpp b/Source/Particles/PhysicalParticleContainer.cpp index b3c598c22..d99cc9c66 100644 --- a/Source/Particles/PhysicalParticleContainer.cpp +++ b/Source/Particles/PhysicalParticleContainer.cpp @@ -82,6 +82,9 @@ PhysicalParticleContainer::PhysicalParticleContainer (AmrCore* amr_core, int isp pp.query("do_splitting", do_splitting); pp.query("split_type", split_type); pp.query("do_continuous_injection", do_continuous_injection); + // Whether to plot back-transformed (lab-frame) diagnostics + // for this species. + pp.query("do_boosted_frame_diags", do_boosted_frame_diags); pp.query("plot_species", plot_species); int do_user_plot_vars; @@ -90,14 +93,14 @@ PhysicalParticleContainer::PhysicalParticleContainer (AmrCore* amr_core, int isp // By default, all particle variables are dumped to plotfiles, // including {x,y,z,ux,uy,uz}old variables when running in a // boosted frame - if (WarpX::do_boosted_frame_diagnostic && WarpX::do_boosted_frame_particles){ + if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags){ plot_flags.resize(PIdx::nattribs + 6, 1); } else { plot_flags.resize(PIdx::nattribs, 1); } } else { // Set plot_flag to 0 for all attribs - if (WarpX::do_boosted_frame_diagnostic && WarpX::do_boosted_frame_particles){ + if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags){ plot_flags.resize(PIdx::nattribs + 6, 0); } else { plot_flags.resize(PIdx::nattribs, 0); @@ -216,7 +219,7 @@ PhysicalParticleContainer::AddGaussianBeam(Real x_m, Real y_m, Real z_m, attribs[PIdx::uz] = u[2]; attribs[PIdx::w ] = weight; - if (WarpX::do_boosted_frame_diagnostic && WarpX::do_boosted_frame_particles) + if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) { auto& particle_tile = DefineAndReturnParticleTile(0, 0, 0); particle_tile.push_back_real(particle_comps["xold"], x); @@ -500,7 +503,7 @@ PhysicalParticleContainer::AddPlasmaCPU (int lev, RealBox part_realbox) attribs[PIdx::uy] = u[1]; attribs[PIdx::uz] = u[2]; - if (WarpX::do_boosted_frame_diagnostic && WarpX::do_boosted_frame_particles) + if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) { auto& particle_tile = DefineAndReturnParticleTile(lev, grid_id, tile_id); particle_tile.push_back_real(particle_comps["xold"], x); @@ -742,7 +745,7 @@ PhysicalParticleContainer::AddPlasmaGPU (int lev, RealBox part_realbox) attribs[PIdx::uz] = u[2]; // note - this will be slow on the GPU, need to revisit - if (WarpX::do_boosted_frame_diagnostic && WarpX::do_boosted_frame_particles) + if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) { auto& particle_tile = DefineAndReturnParticleTile(lev, grid_id, tile_id); particle_tile.push_back_real(particle_comps["xold"], x); @@ -1715,7 +1718,7 @@ PhysicalParticleContainer::PushPX(WarpXParIter& pti, auto& Bzp = attribs[PIdx::Bz]; const long np = pti.numParticles(); - if (WarpX::do_boosted_frame_diagnostic && WarpX::do_boosted_frame_particles) + if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) { auto& xpold = pti.GetAttribs(particle_comps["xold"]); auto& ypold = pti.GetAttribs(particle_comps["yold"]); diff --git a/Source/Particles/RigidInjectedParticleContainer.cpp b/Source/Particles/RigidInjectedParticleContainer.cpp index a5acca281..fd1b2dfb5 100644 --- a/Source/Particles/RigidInjectedParticleContainer.cpp +++ b/Source/Particles/RigidInjectedParticleContainer.cpp @@ -225,7 +225,7 @@ RigidInjectedParticleContainer::PushPX(WarpXParIter& pti, auto& Bzp = attribs[PIdx::Bz]; const long np = pti.numParticles(); - if (WarpX::do_boosted_frame_diagnostic && WarpX::do_boosted_frame_particles) + if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) { auto& xpold = pti.GetAttribs(particle_comps["xold"]); auto& ypold = pti.GetAttribs(particle_comps["yold"]); diff --git a/Source/Particles/WarpXParticleContainer.H b/Source/Particles/WarpXParticleContainer.H index 51dc5ec05..600061e8d 100644 --- a/Source/Particles/WarpXParticleContainer.H +++ b/Source/Particles/WarpXParticleContainer.H @@ -85,7 +85,13 @@ class WarpXParticleContainer public: friend MultiParticleContainer; + // amrex::StructOfArrays with DiagIdx::nattribs amrex::Real components + // for the particle data and 0 int components. using DiagnosticParticleData = amrex::StructOfArrays; + // DiagnosticParticles is a vector, with one element per MR level. + // DiagnosticParticles[lev] is typically a key-value pair where the key is + // a pair [grid_index, tile_index], and the value is the corresponding + // DiagnosticParticleData (see above) on this tile. using DiagnosticParticles = amrex::Vector, DiagnosticParticleData> >; WarpXParticleContainer (amrex::AmrCore* amr_core, int ispecies); @@ -265,6 +271,8 @@ protected: // support all features allowed by direct injection. int do_continuous_injection = 0; + int do_boosted_frame_diags = 0; + amrex::Vector local_rho; amrex::Vector local_jx; amrex::Vector local_jy; diff --git a/Source/Particles/WarpXParticleContainer.cpp b/Source/Particles/WarpXParticleContainer.cpp index 1abbd747d..0cf5c10b4 100644 --- a/Source/Particles/WarpXParticleContainer.cpp +++ b/Source/Particles/WarpXParticleContainer.cpp @@ -78,7 +78,7 @@ WarpXParticleContainer::WarpXParticleContainer (AmrCore* amr_core, int ispecies) particle_comps["theta"] = PIdx::theta; #endif - if (WarpX::do_boosted_frame_diagnostic && WarpX::do_boosted_frame_particles) + if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) { particle_comps["xold"] = PIdx::nattribs; particle_comps["yold"] = PIdx::nattribs+1; @@ -231,7 +231,7 @@ WarpXParticleContainer::AddNParticles (int lev, p.pos(1) = z[i]; #endif - if (WarpX::do_boosted_frame_diagnostic && WarpX::do_boosted_frame_particles) + if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) { auto& particle_tile = DefineAndReturnParticleTile(0, 0, 0); particle_tile.push_back_real(particle_comps["xold"], x[i]); @@ -249,7 +249,7 @@ WarpXParticleContainer::AddNParticles (int lev, particle_tile.push_back_real(PIdx::uy, vy + ibegin, vy + iend); particle_tile.push_back_real(PIdx::uz, vz + ibegin, vz + iend); - if (WarpX::do_boosted_frame_diagnostic && WarpX::do_boosted_frame_particles) + if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) { auto& particle_tile = DefineAndReturnParticleTile(0, 0, 0); particle_tile.push_back_real(particle_comps["uxold"], vx + ibegin, vx + iend); diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp index eb84af2c7..c863e9a4c 100644 --- a/Source/WarpX.cpp +++ b/Source/WarpX.cpp @@ -56,9 +56,12 @@ int WarpX::num_mirrors = 0; int WarpX::sort_int = -1; -bool WarpX::do_boosted_frame_diagnostic = false; int WarpX::num_snapshots_lab = std::numeric_limits::lowest(); Real WarpX::dt_snapshots_lab = std::numeric_limits::lowest(); +// bool WarpX::do_boosted_frame_diagnostic = false; +// bool WarpX::do_boosted_frame_fields = true; +// bool WarpX::do_boosted_frame_particles = true; +bool WarpX::do_boosted_frame_diagnostic = false; bool WarpX::do_boosted_frame_fields = true; bool WarpX::do_boosted_frame_particles = true; @@ -117,7 +120,7 @@ WarpX::ResetInstance () { delete m_instance; m_instance = nullptr; -} +} WarpX::WarpX () { @@ -157,6 +160,7 @@ WarpX::WarpX () current_injection_position = geom[0].ProbLo(moving_window_dir); } } + do_boosted_frame_particles = mypc->do_boosted_frame_diags; Efield_aux.resize(nlevs_max); Bfield_aux.resize(nlevs_max); -- cgit v1.2.3 From 5ebe5c35e5b6cac0428173291ece3e431954037f Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Sat, 11 May 2019 08:01:00 -0700 Subject: some debugging --- Source/Diagnostics/BoostedFrameDiagnostic.cpp | 44 ++++++++++++++++++++++----- Source/Particles/MultiParticleContainer.cpp | 13 ++++++-- Source/Particles/WarpXParticleContainer.H | 2 +- 3 files changed, 47 insertions(+), 12 deletions(-) (limited to 'Source/Particles/MultiParticleContainer.cpp') diff --git a/Source/Diagnostics/BoostedFrameDiagnostic.cpp b/Source/Diagnostics/BoostedFrameDiagnostic.cpp index 5d85fc8f8..ad33b68d8 100644 --- a/Source/Diagnostics/BoostedFrameDiagnostic.cpp +++ b/Source/Diagnostics/BoostedFrameDiagnostic.cpp @@ -497,6 +497,8 @@ BoostedFrameDiagnostic(Real zmin_lab, Real zmax_lab, Real v_window_lab, void BoostedFrameDiagnostic::Flush(const Geometry& geom) { BL_PROFILE("BoostedFrameDiagnostic::Flush"); + + std::cout<<"in Flush"\n; VisMF::Header::Version current_version = VisMF::GetHeaderVersion(); VisMF::SetHeaderVersion(amrex::VisMF::Header::NoFabHeader_v1); @@ -539,8 +541,10 @@ void BoostedFrameDiagnostic::Flush(const Geometry& geom) } if (WarpX::do_boosted_frame_particles) { - for (int j = 0; j < mypc.nSpecies(); ++j) { - std::string species_name = species_names[mypc.map_species_lab_diags[j]]; + // for (int j = 0; j < mypc.nSpecies(); ++j) { + for (int j = 0; j < mypc.nspecies_lab_frame_diags; ++j) { + int js = mypc.map_species_lab_diags[j]; + std::string species_name = species_names[js]; #ifdef WARPX_USE_HDF5 writeParticleDataHDF5(particles_buffer_[i][j], snapshots_[i].file_name, @@ -576,8 +580,12 @@ writeLabFrameData(const MultiFab* cell_centered_data, const Real zhi_boost = domain_z_boost.hi(boost_direction_); const std::vector species_names = mypc.GetSpeciesNames(); + + Print()<<"in BoostedFrameDiagnostic::writeLabFrameData 1\n"; for (int i = 0; i < N_snapshots_; ++i) { + std::cout<<"in BoostedFrameDiagnostic::writeLabFrameData 2\n"; + const Real old_z_boost = snapshots_[i].current_z_boost; snapshots_[i].updateCurrentZPositions(t_boost, inv_gamma_boost_, @@ -589,6 +597,7 @@ writeLabFrameData(const MultiFab* cell_centered_data, (snapshots_[i].current_z_lab > snapshots_[i].zmax_lab) ) continue; int i_lab = (snapshots_[i].current_z_lab - snapshots_[i].zmin_lab) / dz_lab_; + std::cout<<"in BoostedFrameDiagnostic::writeLabFrameData 3\n"; if (buff_counter_[i] == 0) { if (WarpX::do_boosted_frame_fields) { @@ -603,6 +612,7 @@ writeLabFrameData(const MultiFab* cell_centered_data, } if (WarpX::do_boosted_frame_particles) particles_buffer_[i].resize(mypc.nspecies_lab_frame_diags); } + std::cout<<"in BoostedFrameDiagnostic::writeLabFrameData 4\n"; if (WarpX::do_boosted_frame_fields) { const int ncomp = cell_centered_data->nComp(); @@ -642,11 +652,15 @@ writeLabFrameData(const MultiFab* cell_centered_data, &ncomp, &i_boost, &i_lab); } } - + std::cout<<"in BoostedFrameDiagnostic::writeLabFrameData 5\n"; if (WarpX::do_boosted_frame_particles) { + std::cout<<"in BoostedFrameDiagnostic::writeLabFrameData 6\n"; + mypc.GetLabFrameData(snapshots_[i].file_name, i_lab, boost_direction_, old_z_boost, snapshots_[i].current_z_boost, t_boost, snapshots_[i].t_lab, dt, particles_buffer_[i]); + std::cout<<"in BoostedFrameDiagnostic::writeLabFrameData 7\n"; + } @@ -667,7 +681,11 @@ writeLabFrameData(const MultiFab* cell_centered_data, } if (WarpX::do_boosted_frame_particles) { + std::cout<<"in BoostedFrameDiagnostic::writeLabFrameData 8\n"; + for (int j = 0; j < mypc.nspecies_lab_frame_diags; ++j) { + std::cout<<"in BoostedFrameDiagnostic::writeLabFrameData 9\n"; + const std::string species_name = species_names[mypc.map_species_lab_diags[j]]; #ifdef WARPX_USE_HDF5 writeParticleDataHDF5(particles_buffer_[i][j], @@ -675,9 +693,14 @@ writeLabFrameData(const MultiFab* cell_centered_data, species_name); #else std::stringstream part_ss; + std::cout<<"in BoostedFrameDiagnostic::writeLabFrameData 10\n"; + part_ss << snapshots_[i].file_name + "/" + species_name + "/"; + std::cout<<"in BoostedFrameDiagnostic::writeLabFrameData 11\n"; + writeParticleData(particles_buffer_[i][j], part_ss.str(), i_lab); #endif + std::cout<<"in BoostedFrameDiagnostic::writeLabFrameData 12\n"; } particles_buffer_[i].clear(); } @@ -860,9 +883,12 @@ LabSnapShot(Real t_lab_in, Real t_boost, Real zmin_lab_in, if (WarpX::do_boosted_frame_particles){ auto & mypc = WarpX::GetInstance().GetPartContainer(); const std::vector species_names = mypc.GetSpeciesNames(); - for (int j = 0; j < mypc.nSpecies(); ++j) + // for (int j = 0; j < mypc.nSpecies(); ++j) + for (int j = 0; j < mypc.nspecies_lab_frame_diags; ++j) { - std::string species_name = species_names[mypc.map_species_lab_diags[j]]; + int js = mypc.map_species_lab_diags[j]; + std::cout<<"js "<(particle_field_names.size()); ++k) { @@ -886,11 +912,13 @@ LabSnapShot(Real t_lab_in, Real t_boost, Real zmin_lab_in, auto & mypc = WarpX::GetInstance().GetPartContainer(); const std::vector species_names = mypc.GetSpeciesNames(); - int nspecies = mypc.nSpecies(); +// int nspecies = mypc.nSpecies(); const std::string particles_prefix = "particle"; - for(int i = 0; i < nspecies; ++i) { - std::string species_name = species_names[mypc.map_species_lab_diags[i]]; +// for(int i = 0; i < nspecies; ++i) { + for(int i = 0; i < mypc.nspecies_lab_frame_diags; ++i) { + int is = mypc.map_species_lab_diags[i]; + std::string species_name = species_names[is]; const std::string fullpath = file_name + "/" + species_name; if (!UtilCreateDirectory(fullpath, 0755)) CreateDirectoryFailed(fullpath); diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp index bde8d244e..4726cb4cf 100644 --- a/Source/Particles/MultiParticleContainer.cpp +++ b/Source/Particles/MultiParticleContainer.cpp @@ -40,8 +40,8 @@ MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core) auto& pc = allcontainers[i]; if (pc->do_boosted_frame_diags){ map_species_lab_diags[nspecies_lab_frame_diags] = i; - nspecies_lab_frame_diags += 1; do_boosted_frame_diags = 1; + nspecies_lab_frame_diags += 1; } } @@ -389,12 +389,16 @@ MultiParticleContainer { BL_PROFILE("MultiParticleContainer::GetLabFrameData"); + std::cout<<"GetLabFrameData 1\n"; // Loop over particle species - for (int i = 0; i < nspecies; ++i){ - WarpXParticleContainer* pc = allcontainers[i].get(); + for (int i = 0; i < nspecies_lab_frame_diags; ++i){ + int isp = map_species_lab_diags[i]; +std::cout<<"GetLabFrameData 2\n"; + WarpXParticleContainer* pc = allcontainers[isp].get(); WarpXParticleContainer::DiagnosticParticles diagnostic_particles; pc->GetParticleSlice(direction, z_old, z_new, t_boost, t_lab, dt, diagnostic_particles); +std::cout<<"GetLabFrameData 3\n"; // Here, diagnostic_particles[lev][index] is a WarpXParticleContainer::DiagnosticParticleData // where "lev" is the AMR level and "index" is a [grid index][tile index] pair. @@ -404,13 +408,16 @@ MultiParticleContainer // and Fills parts[species number i] with particle data from all grids and // tiles in diagnostic_particles. parts contains particles from all // AMR levels indistinctly. +std::cout<<"GetLabFrameData 4\n"; for (auto it = diagnostic_particles[lev].begin(); it != diagnostic_particles[lev].end(); ++it){ // it->first is the [grid index][tile index] key // it->second is the corresponding // WarpXParticleContainer::DiagnosticParticleData value +std::cout<<"GetLabFrameData 5\n"; parts[i].GetRealData(DiagIdx::w).insert( parts[i].GetRealData(DiagIdx::w ).end(), it->second.GetRealData(DiagIdx::w ).begin(), it->second.GetRealData(DiagIdx::w ).end()); +std::cout<<"GetLabFrameData 6\n"; parts[i].GetRealData(DiagIdx::x).insert( parts[i].GetRealData(DiagIdx::x ).end(), it->second.GetRealData(DiagIdx::x ).begin(), diff --git a/Source/Particles/WarpXParticleContainer.H b/Source/Particles/WarpXParticleContainer.H index 600061e8d..d1e25f3ad 100644 --- a/Source/Particles/WarpXParticleContainer.H +++ b/Source/Particles/WarpXParticleContainer.H @@ -271,7 +271,7 @@ protected: // support all features allowed by direct injection. int do_continuous_injection = 0; - int do_boosted_frame_diags = 0; + int do_boosted_frame_diags = 1; amrex::Vector local_rho; amrex::Vector local_jx; -- cgit v1.2.3 From 71cdf5ca0bfe5a239382cdfb56df1d2d9e68c65f Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Sun, 12 May 2019 06:54:06 -0700 Subject: debugging --- Source/Diagnostics/BoostedFrameDiagnostic.cpp | 17 ++++++++++++----- Source/Evolve/WarpXEvolveEM.cpp | 4 ++++ Source/Particles/MultiParticleContainer.cpp | 1 + Source/Particles/PhysicalParticleContainer.cpp | 2 ++ 4 files changed, 19 insertions(+), 5 deletions(-) (limited to 'Source/Particles/MultiParticleContainer.cpp') diff --git a/Source/Diagnostics/BoostedFrameDiagnostic.cpp b/Source/Diagnostics/BoostedFrameDiagnostic.cpp index ad33b68d8..934610b9e 100644 --- a/Source/Diagnostics/BoostedFrameDiagnostic.cpp +++ b/Source/Diagnostics/BoostedFrameDiagnostic.cpp @@ -498,7 +498,7 @@ void BoostedFrameDiagnostic::Flush(const Geometry& geom) { BL_PROFILE("BoostedFrameDiagnostic::Flush"); - std::cout<<"in Flush"\n; + std::cout<<"in Flush\n"; VisMF::Header::Version current_version = VisMF::GetHeaderVersion(); VisMF::SetHeaderVersion(amrex::VisMF::Header::NoFabHeader_v1); @@ -546,6 +546,7 @@ void BoostedFrameDiagnostic::Flush(const Geometry& geom) int js = mypc.map_species_lab_diags[j]; std::string species_name = species_names[js]; #ifdef WARPX_USE_HDF5 + std::cout<<"particles_buffer_ j "< zhi_boost) or (snapshots_[i].current_z_lab < snapshots_[i].zmin_lab) or (snapshots_[i].current_z_lab > snapshots_[i].zmax_lab) ) continue; + std::cout<<"toto 3\n"; int i_lab = (snapshots_[i].current_z_lab - snapshots_[i].zmin_lab) / dz_lab_; std::cout<<"in BoostedFrameDiagnostic::writeLabFrameData 3\n"; @@ -656,9 +661,9 @@ writeLabFrameData(const MultiFab* cell_centered_data, if (WarpX::do_boosted_frame_particles) { std::cout<<"in BoostedFrameDiagnostic::writeLabFrameData 6\n"; - mypc.GetLabFrameData(snapshots_[i].file_name, i_lab, boost_direction_, - old_z_boost, snapshots_[i].current_z_boost, - t_boost, snapshots_[i].t_lab, dt, particles_buffer_[i]); + //mypc.GetLabFrameData(snapshots_[i].file_name, i_lab, boost_direction_, + // old_z_boost, snapshots_[i].current_z_boost, + // t_boost, snapshots_[i].t_lab, dt, particles_buffer_[i]); std::cout<<"in BoostedFrameDiagnostic::writeLabFrameData 7\n"; } @@ -688,6 +693,7 @@ writeLabFrameData(const MultiFab* cell_centered_data, const std::string species_name = species_names[mypc.map_species_lab_diags[j]]; #ifdef WARPX_USE_HDF5 + std::cout<<"particles_buffer_ j "<writeLabFrameData"<writeLabFrameData(cell_centered_data.get(), *mypc, geom[0], cur_time, dt[0]); + std::cout<<"after myBFD->writeLabFrameData"<Flush"<Flush(geom[0]); + std::cout<<"after myBFD->Flush"<GetParticleSlice(direction, z_old, z_new, t_boost, t_lab, dt, diagnostic_particles); std::cout<<"GetLabFrameData 3\n"; diff --git a/Source/Particles/PhysicalParticleContainer.cpp b/Source/Particles/PhysicalParticleContainer.cpp index d99cc9c66..c4d4abfd6 100644 --- a/Source/Particles/PhysicalParticleContainer.cpp +++ b/Source/Particles/PhysicalParticleContainer.cpp @@ -1863,6 +1863,8 @@ void PhysicalParticleContainer::GetParticleSlice(const int direction, const Real // Note the the slice should always move in the negative boost direction. AMREX_ALWAYS_ASSERT(z_new < z_old); + AMREX_ALWAYS_ASSERT(do_boosted_frame_diags == 1); + const int nlevs = std::max(0, finestLevel()+1); // we figure out a box for coarse-grained rejection. If the RealBox corresponding to a -- cgit v1.2.3 From c952dbe2e3d9a2c7bab2774e8036e0e9ff72e0ed Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Sun, 12 May 2019 07:58:38 -0700 Subject: only selected species BFD-dumped, but all old attribs initialized --- Source/Diagnostics/BoostedFrameDiagnostic.cpp | 30 ++++---------------------- Source/Particles/MultiParticleContainer.cpp | 19 ++++++++++------ Source/Particles/PhysicalParticleContainer.cpp | 9 +++++--- Source/Particles/WarpXParticleContainer.cpp | 9 +++++--- Source/WarpX.cpp | 2 +- 5 files changed, 29 insertions(+), 40 deletions(-) (limited to 'Source/Particles/MultiParticleContainer.cpp') diff --git a/Source/Diagnostics/BoostedFrameDiagnostic.cpp b/Source/Diagnostics/BoostedFrameDiagnostic.cpp index 934610b9e..7a44bc66a 100644 --- a/Source/Diagnostics/BoostedFrameDiagnostic.cpp +++ b/Source/Diagnostics/BoostedFrameDiagnostic.cpp @@ -582,27 +582,19 @@ writeLabFrameData(const MultiFab* cell_centered_data, const std::vector species_names = mypc.GetSpeciesNames(); - Print()<<"in BoostedFrameDiagnostic::writeLabFrameData 1\n"; - for (int i = 0; i < N_snapshots_; ++i) { - std::cout<<"in BoostedFrameDiagnostic::writeLabFrameData 2\n"; - std::cout<<"i "< zhi_boost) or (snapshots_[i].current_z_lab < snapshots_[i].zmin_lab) or (snapshots_[i].current_z_lab > snapshots_[i].zmax_lab) ) continue; - std::cout<<"toto 3\n"; int i_lab = (snapshots_[i].current_z_lab - snapshots_[i].zmin_lab) / dz_lab_; - std::cout<<"in BoostedFrameDiagnostic::writeLabFrameData 3\n"; if (buff_counter_[i] == 0) { if (WarpX::do_boosted_frame_fields) { @@ -617,7 +609,6 @@ writeLabFrameData(const MultiFab* cell_centered_data, } if (WarpX::do_boosted_frame_particles) particles_buffer_[i].resize(mypc.nspecies_lab_frame_diags); } - std::cout<<"in BoostedFrameDiagnostic::writeLabFrameData 4\n"; if (WarpX::do_boosted_frame_fields) { const int ncomp = cell_centered_data->nComp(); @@ -657,14 +648,11 @@ writeLabFrameData(const MultiFab* cell_centered_data, &ncomp, &i_boost, &i_lab); } } - std::cout<<"in BoostedFrameDiagnostic::writeLabFrameData 5\n"; if (WarpX::do_boosted_frame_particles) { - std::cout<<"in BoostedFrameDiagnostic::writeLabFrameData 6\n"; - //mypc.GetLabFrameData(snapshots_[i].file_name, i_lab, boost_direction_, - // old_z_boost, snapshots_[i].current_z_boost, - // t_boost, snapshots_[i].t_lab, dt, particles_buffer_[i]); - std::cout<<"in BoostedFrameDiagnostic::writeLabFrameData 7\n"; + mypc.GetLabFrameData(snapshots_[i].file_name, i_lab, boost_direction_, + old_z_boost, snapshots_[i].current_z_boost, + t_boost, snapshots_[i].t_lab, dt, particles_buffer_[i]); } @@ -686,28 +674,21 @@ writeLabFrameData(const MultiFab* cell_centered_data, } if (WarpX::do_boosted_frame_particles) { - std::cout<<"in BoostedFrameDiagnostic::writeLabFrameData 8\n"; for (int j = 0; j < mypc.nspecies_lab_frame_diags; ++j) { - std::cout<<"in BoostedFrameDiagnostic::writeLabFrameData 9\n"; const std::string species_name = species_names[mypc.map_species_lab_diags[j]]; #ifdef WARPX_USE_HDF5 - std::cout<<"particles_buffer_ j "<(particle_field_names.size()); ++k) @@ -919,10 +899,8 @@ LabSnapShot(Real t_lab_in, Real t_boost, Real zmin_lab_in, auto & mypc = WarpX::GetInstance().GetPartContainer(); const std::vector species_names = mypc.GetSpeciesNames(); -// int nspecies = mypc.nSpecies(); const std::string particles_prefix = "particle"; -// for(int i = 0; i < nspecies; ++i) { for(int i = 0; i < mypc.nspecies_lab_frame_diags; ++i) { int is = mypc.map_species_lab_diags[i]; std::string species_name = species_names[is]; diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp index 841c41835..337005dc3 100644 --- a/Source/Particles/MultiParticleContainer.cpp +++ b/Source/Particles/MultiParticleContainer.cpp @@ -55,7 +55,19 @@ MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core) allcontainers[i]->AddRealComp("uxold"); allcontainers[i]->AddRealComp("uyold"); allcontainers[i]->AddRealComp("uzold"); + } + /* + for (int i = 0; i < nspecies_lab_frame_diags; ++i) + { + int is = map_species_lab_diags[i]; + allcontainers[is]->AddRealComp("xold"); + allcontainers[is]->AddRealComp("yold"); + allcontainers[is]->AddRealComp("zold"); + allcontainers[is]->AddRealComp("uxold"); + allcontainers[is]->AddRealComp("uyold"); + allcontainers[is]->AddRealComp("uzold"); } + */ pc_tmp->AddRealComp("xold"); pc_tmp->AddRealComp("yold"); pc_tmp->AddRealComp("zold"); @@ -389,17 +401,13 @@ MultiParticleContainer { BL_PROFILE("MultiParticleContainer::GetLabFrameData"); - std::cout<<"GetLabFrameData 1\n"; // Loop over particle species for (int i = 0; i < nspecies_lab_frame_diags; ++i){ int isp = map_species_lab_diags[i]; -std::cout<<"GetLabFrameData 2\n"; WarpXParticleContainer* pc = allcontainers[isp].get(); - std::cout<<"getparticleslice "<< isp<GetParticleSlice(direction, z_old, z_new, t_boost, t_lab, dt, diagnostic_particles); -std::cout<<"GetLabFrameData 3\n"; // Here, diagnostic_particles[lev][index] is a WarpXParticleContainer::DiagnosticParticleData // where "lev" is the AMR level and "index" is a [grid index][tile index] pair. @@ -409,16 +417,13 @@ std::cout<<"GetLabFrameData 3\n"; // and Fills parts[species number i] with particle data from all grids and // tiles in diagnostic_particles. parts contains particles from all // AMR levels indistinctly. -std::cout<<"GetLabFrameData 4\n"; for (auto it = diagnostic_particles[lev].begin(); it != diagnostic_particles[lev].end(); ++it){ // it->first is the [grid index][tile index] key // it->second is the corresponding // WarpXParticleContainer::DiagnosticParticleData value -std::cout<<"GetLabFrameData 5\n"; parts[i].GetRealData(DiagIdx::w).insert( parts[i].GetRealData(DiagIdx::w ).end(), it->second.GetRealData(DiagIdx::w ).begin(), it->second.GetRealData(DiagIdx::w ).end()); -std::cout<<"GetLabFrameData 6\n"; parts[i].GetRealData(DiagIdx::x).insert( parts[i].GetRealData(DiagIdx::x ).end(), it->second.GetRealData(DiagIdx::x ).begin(), diff --git a/Source/Particles/PhysicalParticleContainer.cpp b/Source/Particles/PhysicalParticleContainer.cpp index c4d4abfd6..a3f555bd0 100644 --- a/Source/Particles/PhysicalParticleContainer.cpp +++ b/Source/Particles/PhysicalParticleContainer.cpp @@ -219,7 +219,8 @@ PhysicalParticleContainer::AddGaussianBeam(Real x_m, Real y_m, Real z_m, attribs[PIdx::uz] = u[2]; attribs[PIdx::w ] = weight; - if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) + // if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) + if (WarpX::do_boosted_frame_diagnostic) { auto& particle_tile = DefineAndReturnParticleTile(0, 0, 0); particle_tile.push_back_real(particle_comps["xold"], x); @@ -503,7 +504,8 @@ PhysicalParticleContainer::AddPlasmaCPU (int lev, RealBox part_realbox) attribs[PIdx::uy] = u[1]; attribs[PIdx::uz] = u[2]; - if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) + // if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) + if (WarpX::do_boosted_frame_diagnostic) { auto& particle_tile = DefineAndReturnParticleTile(lev, grid_id, tile_id); particle_tile.push_back_real(particle_comps["xold"], x); @@ -745,7 +747,8 @@ PhysicalParticleContainer::AddPlasmaGPU (int lev, RealBox part_realbox) attribs[PIdx::uz] = u[2]; // note - this will be slow on the GPU, need to revisit - if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) + // if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) + if (WarpX::do_boosted_frame_diagnostic) { auto& particle_tile = DefineAndReturnParticleTile(lev, grid_id, tile_id); particle_tile.push_back_real(particle_comps["xold"], x); diff --git a/Source/Particles/WarpXParticleContainer.cpp b/Source/Particles/WarpXParticleContainer.cpp index 0cf5c10b4..9bee0031a 100644 --- a/Source/Particles/WarpXParticleContainer.cpp +++ b/Source/Particles/WarpXParticleContainer.cpp @@ -78,7 +78,8 @@ WarpXParticleContainer::WarpXParticleContainer (AmrCore* amr_core, int ispecies) particle_comps["theta"] = PIdx::theta; #endif - if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) + // if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) + if (WarpX::do_boosted_frame_diagnostic) { particle_comps["xold"] = PIdx::nattribs; particle_comps["yold"] = PIdx::nattribs+1; @@ -231,7 +232,8 @@ WarpXParticleContainer::AddNParticles (int lev, p.pos(1) = z[i]; #endif - if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) + // if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) + if (WarpX::do_boosted_frame_diagnostic) { auto& particle_tile = DefineAndReturnParticleTile(0, 0, 0); particle_tile.push_back_real(particle_comps["xold"], x[i]); @@ -249,7 +251,8 @@ WarpXParticleContainer::AddNParticles (int lev, particle_tile.push_back_real(PIdx::uy, vy + ibegin, vy + iend); particle_tile.push_back_real(PIdx::uz, vz + ibegin, vz + iend); - if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) + // if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) + if (WarpX::do_boosted_frame_diagnostic) { auto& particle_tile = DefineAndReturnParticleTile(0, 0, 0); particle_tile.push_back_real(particle_comps["uxold"], vx + ibegin, vx + iend); diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp index c863e9a4c..7c026e105 100644 --- a/Source/WarpX.cpp +++ b/Source/WarpX.cpp @@ -329,7 +329,7 @@ WarpX::ReadParameters () pp.get("gamma_boost", gamma_boost); pp.query("do_boosted_frame_fields", do_boosted_frame_fields); - pp.query("do_boosted_frame_particles", do_boosted_frame_particles); + // pp.query("do_boosted_frame_particles", do_boosted_frame_particles); AMREX_ALWAYS_ASSERT_WITH_MESSAGE(do_moving_window, -- cgit v1.2.3 From 9a26a71845fde091c7840772bef1b23dbc46d6ac Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Sun, 12 May 2019 10:17:28 -0700 Subject: old attribs not allocated if species not BFD --- Source/Diagnostics/BoostedFrameDiagnostic.cpp | 22 ++++++++++------------ Source/Evolve/WarpXEvolveEM.cpp | 2 -- Source/Laser/LaserParticleContainer.cpp | 5 +++-- Source/Particles/MultiParticleContainer.H | 11 ++++++++--- Source/Particles/MultiParticleContainer.cpp | 7 +++++-- Source/Particles/PhysicalParticleContainer.cpp | 12 +++++------- Source/Particles/WarpXParticleContainer.H | 1 - Source/Particles/WarpXParticleContainer.cpp | 19 +++++++++++++------ Source/WarpX.cpp | 2 +- 9 files changed, 45 insertions(+), 36 deletions(-) (limited to 'Source/Particles/MultiParticleContainer.cpp') diff --git a/Source/Diagnostics/BoostedFrameDiagnostic.cpp b/Source/Diagnostics/BoostedFrameDiagnostic.cpp index 7a44bc66a..413730f91 100644 --- a/Source/Diagnostics/BoostedFrameDiagnostic.cpp +++ b/Source/Diagnostics/BoostedFrameDiagnostic.cpp @@ -497,8 +497,6 @@ BoostedFrameDiagnostic(Real zmin_lab, Real zmax_lab, Real v_window_lab, void BoostedFrameDiagnostic::Flush(const Geometry& geom) { BL_PROFILE("BoostedFrameDiagnostic::Flush"); - - std::cout<<"in Flush\n"; VisMF::Header::Version current_version = VisMF::GetHeaderVersion(); VisMF::SetHeaderVersion(amrex::VisMF::Header::NoFabHeader_v1); @@ -542,11 +540,10 @@ void BoostedFrameDiagnostic::Flush(const Geometry& geom) if (WarpX::do_boosted_frame_particles) { // for (int j = 0; j < mypc.nSpecies(); ++j) { - for (int j = 0; j < mypc.nspecies_lab_frame_diags; ++j) { - int js = mypc.map_species_lab_diags[j]; + for (int j = 0; j < mypc.nSpeciesLabFrameDiags(); ++j) { + int js = mypc.mapSpeciesLabDiags(j); std::string species_name = species_names[js]; #ifdef WARPX_USE_HDF5 - std::cout<<"particles_buffer_ j "<(particle_field_names.size()); ++k) { std::string field_path = species_name + "/" + particle_field_names[k]; @@ -872,9 +870,9 @@ LabSnapShot(Real t_lab_in, Real t_boost, Real zmin_lab_in, auto & mypc = WarpX::GetInstance().GetPartContainer(); const std::vector species_names = mypc.GetSpeciesNames(); // for (int j = 0; j < mypc.nSpecies(); ++j) - for (int j = 0; j < mypc.nspecies_lab_frame_diags; ++j) + for (int j = 0; j < mypc.nSpeciesLabFrameDiags(); ++j) { - int js = mypc.map_species_lab_diags[j]; + int js = mypc.mapSpeciesLabDiags(j); std::string species_name = species_names[js]; output_create_species_group(file_name, species_name); for (int k = 0; k < static_cast(particle_field_names.size()); ++k) @@ -901,8 +899,8 @@ LabSnapShot(Real t_lab_in, Real t_boost, Real zmin_lab_in, const std::vector species_names = mypc.GetSpeciesNames(); const std::string particles_prefix = "particle"; - for(int i = 0; i < mypc.nspecies_lab_frame_diags; ++i) { - int is = mypc.map_species_lab_diags[i]; + for(int i = 0; i < mypc.nSpeciesLabFrameDiags(); ++i) { + int is = mypc.mapSpeciesLabDiags(i); std::string species_name = species_names[is]; const std::string fullpath = file_name + "/" + species_name; if (!UtilCreateDirectory(fullpath, 0755)) diff --git a/Source/Evolve/WarpXEvolveEM.cpp b/Source/Evolve/WarpXEvolveEM.cpp index 5f6760f22..d88f178df 100644 --- a/Source/Evolve/WarpXEvolveEM.cpp +++ b/Source/Evolve/WarpXEvolveEM.cpp @@ -173,9 +173,7 @@ WarpX::EvolveEM (int numsteps) if (WarpX::do_boosted_frame_fields) { cell_centered_data = GetCellCenteredData(); } - std::cout<<"before myBFD->writeLabFrameData"<writeLabFrameData(cell_centered_data.get(), *mypc, geom[0], cur_time, dt[0]); - std::cout<<"after myBFD->writeLabFrameData"<::max(); - - ParmParse pp(laser_name); + do_boosted_frame_diags = 0; + + ParmParse pp(laser_name); // Parse the type of laser profile and set the corresponding flag `profile` std::string laser_type_s; diff --git a/Source/Particles/MultiParticleContainer.H b/Source/Particles/MultiParticleContainer.H index 5a79443d0..217f727b0 100644 --- a/Source/Particles/MultiParticleContainer.H +++ b/Source/Particles/MultiParticleContainer.H @@ -157,6 +157,10 @@ public: int nSpecies() const {return nspecies;} + int nSpeciesLabFrameDiags() const {return nspecies_lab_frame_diags;} + int mapSpeciesLabDiags(int i) const {return map_species_lab_diags[i];} + int doBoostedFrameDiags() const {return do_boosted_frame_diags;} + int nSpeciesDepositOnMainGrid () const { int r = 0; for (int i : deposit_on_main_grid) { @@ -186,9 +190,6 @@ public: // Number of coefficients for the stencil of the NCI corrector. // The stencil is applied in the z direction only. static constexpr int nstencilz_fdtd_nci_corr=5; - int nspecies_lab_frame_diags = 0; - std::vector map_species_lab_diags; - int do_boosted_frame_diags = 0; amrex::Vector > fdtd_nci_stencilz_ex; amrex::Vector > fdtd_nci_stencilz_by; @@ -219,6 +220,10 @@ private: void ReadParameters (); + int nspecies_lab_frame_diags = 0; + std::vector map_species_lab_diags; + int do_boosted_frame_diags = 0; + // runtime parameters int nlasers = 0; int nspecies = 1; // physical particles only. nspecies+nlasers == allcontainers.size(). diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp index 337005dc3..508f3f606 100644 --- a/Source/Particles/MultiParticleContainer.cpp +++ b/Source/Particles/MultiParticleContainer.cpp @@ -47,6 +47,8 @@ MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core) if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) { + //maxoldattribs + /* for (int i = 0; i < nspecies + nlasers; ++i) { allcontainers[i]->AddRealComp("xold"); @@ -56,7 +58,7 @@ MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core) allcontainers[i]->AddRealComp("uyold"); allcontainers[i]->AddRealComp("uzold"); } - /* + */ for (int i = 0; i < nspecies_lab_frame_diags; ++i) { int is = map_species_lab_diags[i]; @@ -67,13 +69,14 @@ MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core) allcontainers[is]->AddRealComp("uyold"); allcontainers[is]->AddRealComp("uzold"); } - */ + /* pc_tmp->AddRealComp("xold"); pc_tmp->AddRealComp("yold"); pc_tmp->AddRealComp("zold"); pc_tmp->AddRealComp("uxold"); pc_tmp->AddRealComp("uyold"); pc_tmp->AddRealComp("uzold"); + */ } } diff --git a/Source/Particles/PhysicalParticleContainer.cpp b/Source/Particles/PhysicalParticleContainer.cpp index a3f555bd0..dd167ba41 100644 --- a/Source/Particles/PhysicalParticleContainer.cpp +++ b/Source/Particles/PhysicalParticleContainer.cpp @@ -219,8 +219,7 @@ PhysicalParticleContainer::AddGaussianBeam(Real x_m, Real y_m, Real z_m, attribs[PIdx::uz] = u[2]; attribs[PIdx::w ] = weight; - // if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) - if (WarpX::do_boosted_frame_diagnostic) + if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) { auto& particle_tile = DefineAndReturnParticleTile(0, 0, 0); particle_tile.push_back_real(particle_comps["xold"], x); @@ -504,8 +503,7 @@ PhysicalParticleContainer::AddPlasmaCPU (int lev, RealBox part_realbox) attribs[PIdx::uy] = u[1]; attribs[PIdx::uz] = u[2]; - // if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) - if (WarpX::do_boosted_frame_diagnostic) + if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) { auto& particle_tile = DefineAndReturnParticleTile(lev, grid_id, tile_id); particle_tile.push_back_real(particle_comps["xold"], x); @@ -747,8 +745,7 @@ PhysicalParticleContainer::AddPlasmaGPU (int lev, RealBox part_realbox) attribs[PIdx::uz] = u[2]; // note - this will be slow on the GPU, need to revisit - // if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) - if (WarpX::do_boosted_frame_diagnostic) + if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) { auto& particle_tile = DefineAndReturnParticleTile(lev, grid_id, tile_id); particle_tile.push_back_real(particle_comps["xold"], x); @@ -838,8 +835,9 @@ FieldGatherES (const amrex::Vector, const auto& particles = pti.GetArrayOfStructs(); int nstride = particles.dataShape().first; const long np = pti.numParticles(); - + std::cout<<"start 1 GetAttribs\n"; auto& attribs = pti.GetAttribs(); + std::cout<<"end 2 GetAttribs\n"; auto& Exp = attribs[PIdx::Ex]; auto& Eyp = attribs[PIdx::Ey]; #if AMREX_SPACEDIM == 3 diff --git a/Source/Particles/WarpXParticleContainer.H b/Source/Particles/WarpXParticleContainer.H index d1e25f3ad..6968f2a61 100644 --- a/Source/Particles/WarpXParticleContainer.H +++ b/Source/Particles/WarpXParticleContainer.H @@ -59,7 +59,6 @@ public: const amrex::Cuda::ManagedDeviceVector& y, const amrex::Cuda::ManagedDeviceVector& z); #endif - const std::array& GetAttribs () const { return GetStructOfArrays().GetRealData(); } diff --git a/Source/Particles/WarpXParticleContainer.cpp b/Source/Particles/WarpXParticleContainer.cpp index 9bee0031a..66f0dfb5c 100644 --- a/Source/Particles/WarpXParticleContainer.cpp +++ b/Source/Particles/WarpXParticleContainer.cpp @@ -6,6 +6,8 @@ #include #include #include +#include +#include using namespace amrex; @@ -22,7 +24,9 @@ WarpXParIter::GetPosition (Cuda::ManagedDeviceVector& x, Cuda::ManagedDevi { amrex::ParIter<0,0,PIdx::nattribs>::GetPosition(x, z); #ifdef WARPX_RZ + std::cout<<"start 2 GetAttribs()\n"; const auto& attribs = GetAttribs(); + std::cout<<"stop 2 GetAttribs()\n"; const auto& theta = attribs[PIdx::theta]; y.resize(x.size()); for (unsigned int i=0 ; i < x.size() ; i++) { @@ -39,7 +43,9 @@ void WarpXParIter::SetPosition (const Cuda::ManagedDeviceVector& x, const Cuda::ManagedDeviceVector& y, const Cuda::ManagedDeviceVector& z) { #ifdef WARPX_RZ + std::cout<<"start 3 GetAttribs()\n"; auto& attribs = GetAttribs(); + std::cout<<"stop 3 GetAttribs()\n"; auto& theta = attribs[PIdx::theta]; Cuda::DeviceVector r(x.size()); for (unsigned int i=0 ; i < x.size() ; i++) { @@ -78,8 +84,7 @@ WarpXParticleContainer::WarpXParticleContainer (AmrCore* amr_core, int ispecies) particle_comps["theta"] = PIdx::theta; #endif - // if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) - if (WarpX::do_boosted_frame_diagnostic) + if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) { particle_comps["xold"] = PIdx::nattribs; particle_comps["yold"] = PIdx::nattribs+1; @@ -232,8 +237,7 @@ WarpXParticleContainer::AddNParticles (int lev, p.pos(1) = z[i]; #endif - // if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) - if (WarpX::do_boosted_frame_diagnostic) + if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) { auto& particle_tile = DefineAndReturnParticleTile(0, 0, 0); particle_tile.push_back_real(particle_comps["xold"], x[i]); @@ -251,8 +255,7 @@ WarpXParticleContainer::AddNParticles (int lev, particle_tile.push_back_real(PIdx::uy, vy + ibegin, vy + iend); particle_tile.push_back_real(PIdx::uz, vz + ibegin, vz + iend); - // if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) - if (WarpX::do_boosted_frame_diagnostic) + if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) { auto& particle_tile = DefineAndReturnParticleTile(0, 0, 0); particle_tile.push_back_real(particle_comps["uxold"], vx + ibegin, vx + iend); @@ -998,7 +1001,9 @@ WarpXParticleContainer::PushXES (Real dt) int nstride = particles.dataShape().first; const long np = pti.numParticles(); + std::cout<<"start 4 GetAttribs()\n"; auto& attribs = pti.GetAttribs(); + std::cout<<"stop 4 GetAttribs()\n"; auto& uxp = attribs[PIdx::ux]; auto& uyp = attribs[PIdx::uy]; auto& uzp = attribs[PIdx::uz]; @@ -1047,7 +1052,9 @@ WarpXParticleContainer::PushX (int lev, Real dt) // - positions are stored as an array of struct, in `ParticleType` ParticleType * AMREX_RESTRICT pstructs = &(pti.GetArrayOfStructs()[0]); // - momenta are stored as a struct of array, in `attribs` + std::cout<<"start 5 GetAttribs()\n"; auto& attribs = pti.GetAttribs(); + std::cout<<"stop 5 GetAttribs()\n"; Real* AMREX_RESTRICT ux = attribs[PIdx::ux].dataPtr(); Real* AMREX_RESTRICT uy = attribs[PIdx::uy].dataPtr(); Real* AMREX_RESTRICT uz = attribs[PIdx::uz].dataPtr(); diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp index 7c026e105..e4c54cc05 100644 --- a/Source/WarpX.cpp +++ b/Source/WarpX.cpp @@ -160,7 +160,7 @@ WarpX::WarpX () current_injection_position = geom[0].ProbLo(moving_window_dir); } } - do_boosted_frame_particles = mypc->do_boosted_frame_diags; + do_boosted_frame_particles = mypc->doBoostedFrameDiags(); Efield_aux.resize(nlevs_max); Bfield_aux.resize(nlevs_max); -- cgit v1.2.3 From 449c1254dfd126b7b2b6291b05177cb22ed38f5c Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Sun, 12 May 2019 10:35:02 -0700 Subject: cleaning (remove print statements etc.) --- Source/Diagnostics/BoostedFrameDiagnostic.cpp | 5 +---- Source/Evolve/WarpXEvolveEM.cpp | 2 -- Source/Particles/MultiParticleContainer.H | 2 -- Source/Particles/MultiParticleContainer.cpp | 21 --------------------- Source/Particles/PhysicalParticleContainer.cpp | 2 -- Source/Particles/WarpXParticleContainer.cpp | 10 ---------- Source/WarpX.cpp | 7 +------ 7 files changed, 2 insertions(+), 47 deletions(-) (limited to 'Source/Particles/MultiParticleContainer.cpp') diff --git a/Source/Diagnostics/BoostedFrameDiagnostic.cpp b/Source/Diagnostics/BoostedFrameDiagnostic.cpp index 413730f91..49038b9e2 100644 --- a/Source/Diagnostics/BoostedFrameDiagnostic.cpp +++ b/Source/Diagnostics/BoostedFrameDiagnostic.cpp @@ -539,7 +539,6 @@ void BoostedFrameDiagnostic::Flush(const Geometry& geom) } if (WarpX::do_boosted_frame_particles) { - // for (int j = 0; j < mypc.nSpecies(); ++j) { for (int j = 0; j < mypc.nSpeciesLabFrameDiags(); ++j) { int js = mypc.mapSpeciesLabDiags(j); std::string species_name = species_names[js]; @@ -645,8 +644,8 @@ writeLabFrameData(const MultiFab* cell_centered_data, &ncomp, &i_boost, &i_lab); } } - if (WarpX::do_boosted_frame_particles) { + if (WarpX::do_boosted_frame_particles) { mypc.GetLabFrameData(snapshots_[i].file_name, i_lab, boost_direction_, old_z_boost, snapshots_[i].current_z_boost, t_boost, snapshots_[i].t_lab, dt, particles_buffer_[i]); @@ -732,7 +731,6 @@ writeParticleDataHDF5(const WarpXParticleContainer::DiagnosticParticleData& pdat ParallelDescriptor::ReduceLongMax(old_np); // Write data here - Print()<<"particle_field_names.size()"<(particle_field_names.size()); ++k) { std::string field_path = species_name + "/" + particle_field_names[k]; @@ -869,7 +867,6 @@ LabSnapShot(Real t_lab_in, Real t_boost, Real zmin_lab_in, if (WarpX::do_boosted_frame_particles){ auto & mypc = WarpX::GetInstance().GetPartContainer(); const std::vector species_names = mypc.GetSpeciesNames(); - // for (int j = 0; j < mypc.nSpecies(); ++j) for (int j = 0; j < mypc.nSpeciesLabFrameDiags(); ++j) { int js = mypc.mapSpeciesLabDiags(j); diff --git a/Source/Evolve/WarpXEvolveEM.cpp b/Source/Evolve/WarpXEvolveEM.cpp index d88f178df..dab58f95b 100644 --- a/Source/Evolve/WarpXEvolveEM.cpp +++ b/Source/Evolve/WarpXEvolveEM.cpp @@ -247,9 +247,7 @@ WarpX::EvolveEM (int numsteps) } if (do_boosted_frame_diagnostic) { - std::cout<<"before myBFD->Flush"<Flush(geom[0]); - std::cout<<"after myBFD->Flush"<AddRealComp("xold"); - allcontainers[i]->AddRealComp("yold"); - allcontainers[i]->AddRealComp("zold"); - allcontainers[i]->AddRealComp("uxold"); - allcontainers[i]->AddRealComp("uyold"); - allcontainers[i]->AddRealComp("uzold"); - } - */ for (int i = 0; i < nspecies_lab_frame_diags; ++i) { int is = map_species_lab_diags[i]; @@ -69,14 +57,12 @@ MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core) allcontainers[is]->AddRealComp("uyold"); allcontainers[is]->AddRealComp("uzold"); } - /* pc_tmp->AddRealComp("xold"); pc_tmp->AddRealComp("yold"); pc_tmp->AddRealComp("zold"); pc_tmp->AddRealComp("uxold"); pc_tmp->AddRealComp("uyold"); pc_tmp->AddRealComp("uzold"); - */ } } @@ -500,10 +486,3 @@ MultiParticleContainer::doContinuousInjection() const } return warpx_do_continuous_injection; } - -// Set number of species for which lab frame data is dumped -// and maps their ID to MultiParticleContainer IDs. -//void -//MultiParticleContainer::setSpeciesLabFrameDiags() const -//{ -//} diff --git a/Source/Particles/PhysicalParticleContainer.cpp b/Source/Particles/PhysicalParticleContainer.cpp index dd167ba41..37c136a3d 100644 --- a/Source/Particles/PhysicalParticleContainer.cpp +++ b/Source/Particles/PhysicalParticleContainer.cpp @@ -835,9 +835,7 @@ FieldGatherES (const amrex::Vector, const auto& particles = pti.GetArrayOfStructs(); int nstride = particles.dataShape().first; const long np = pti.numParticles(); - std::cout<<"start 1 GetAttribs\n"; auto& attribs = pti.GetAttribs(); - std::cout<<"end 2 GetAttribs\n"; auto& Exp = attribs[PIdx::Ex]; auto& Eyp = attribs[PIdx::Ey]; #if AMREX_SPACEDIM == 3 diff --git a/Source/Particles/WarpXParticleContainer.cpp b/Source/Particles/WarpXParticleContainer.cpp index 66f0dfb5c..0cf5c10b4 100644 --- a/Source/Particles/WarpXParticleContainer.cpp +++ b/Source/Particles/WarpXParticleContainer.cpp @@ -6,8 +6,6 @@ #include #include #include -#include -#include using namespace amrex; @@ -24,9 +22,7 @@ WarpXParIter::GetPosition (Cuda::ManagedDeviceVector& x, Cuda::ManagedDevi { amrex::ParIter<0,0,PIdx::nattribs>::GetPosition(x, z); #ifdef WARPX_RZ - std::cout<<"start 2 GetAttribs()\n"; const auto& attribs = GetAttribs(); - std::cout<<"stop 2 GetAttribs()\n"; const auto& theta = attribs[PIdx::theta]; y.resize(x.size()); for (unsigned int i=0 ; i < x.size() ; i++) { @@ -43,9 +39,7 @@ void WarpXParIter::SetPosition (const Cuda::ManagedDeviceVector& x, const Cuda::ManagedDeviceVector& y, const Cuda::ManagedDeviceVector& z) { #ifdef WARPX_RZ - std::cout<<"start 3 GetAttribs()\n"; auto& attribs = GetAttribs(); - std::cout<<"stop 3 GetAttribs()\n"; auto& theta = attribs[PIdx::theta]; Cuda::DeviceVector r(x.size()); for (unsigned int i=0 ; i < x.size() ; i++) { @@ -1001,9 +995,7 @@ WarpXParticleContainer::PushXES (Real dt) int nstride = particles.dataShape().first; const long np = pti.numParticles(); - std::cout<<"start 4 GetAttribs()\n"; auto& attribs = pti.GetAttribs(); - std::cout<<"stop 4 GetAttribs()\n"; auto& uxp = attribs[PIdx::ux]; auto& uyp = attribs[PIdx::uy]; auto& uzp = attribs[PIdx::uz]; @@ -1052,9 +1044,7 @@ WarpXParticleContainer::PushX (int lev, Real dt) // - positions are stored as an array of struct, in `ParticleType` ParticleType * AMREX_RESTRICT pstructs = &(pti.GetArrayOfStructs()[0]); // - momenta are stored as a struct of array, in `attribs` - std::cout<<"start 5 GetAttribs()\n"; auto& attribs = pti.GetAttribs(); - std::cout<<"stop 5 GetAttribs()\n"; Real* AMREX_RESTRICT ux = attribs[PIdx::ux].dataPtr(); Real* AMREX_RESTRICT uy = attribs[PIdx::uy].dataPtr(); Real* AMREX_RESTRICT uz = attribs[PIdx::uz].dataPtr(); diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp index e4c54cc05..6b1edaccd 100644 --- a/Source/WarpX.cpp +++ b/Source/WarpX.cpp @@ -56,12 +56,9 @@ int WarpX::num_mirrors = 0; int WarpX::sort_int = -1; +bool WarpX::do_boosted_frame_diagnostic = false; int WarpX::num_snapshots_lab = std::numeric_limits::lowest(); Real WarpX::dt_snapshots_lab = std::numeric_limits::lowest(); -// bool WarpX::do_boosted_frame_diagnostic = false; -// bool WarpX::do_boosted_frame_fields = true; -// bool WarpX::do_boosted_frame_particles = true; -bool WarpX::do_boosted_frame_diagnostic = false; bool WarpX::do_boosted_frame_fields = true; bool WarpX::do_boosted_frame_particles = true; @@ -329,8 +326,6 @@ WarpX::ReadParameters () pp.get("gamma_boost", gamma_boost); 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."); -- cgit v1.2.3 From c69763f866d06bc6d065421fed5d40176eecaffe Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Mon, 13 May 2019 08:20:11 -0700 Subject: more consistent names: BFD everywhere --- Source/Diagnostics/BoostedFrameDiagnostic.cpp | 18 +++++++++--------- Source/Particles/MultiParticleContainer.H | 8 ++++---- Source/Particles/MultiParticleContainer.cpp | 18 +++++++++--------- 3 files changed, 22 insertions(+), 22 deletions(-) (limited to 'Source/Particles/MultiParticleContainer.cpp') diff --git a/Source/Diagnostics/BoostedFrameDiagnostic.cpp b/Source/Diagnostics/BoostedFrameDiagnostic.cpp index 49038b9e2..affe28cb5 100644 --- a/Source/Diagnostics/BoostedFrameDiagnostic.cpp +++ b/Source/Diagnostics/BoostedFrameDiagnostic.cpp @@ -539,8 +539,8 @@ void BoostedFrameDiagnostic::Flush(const Geometry& geom) } if (WarpX::do_boosted_frame_particles) { - for (int j = 0; j < mypc.nSpeciesLabFrameDiags(); ++j) { - int js = mypc.mapSpeciesLabDiags(j); + for (int j = 0; j < mypc.nSpeciesBoostedFrameDiags(); ++j) { + int js = mypc.mapSpeciesBoostedFrameDiags(j); std::string species_name = species_names[js]; #ifdef WARPX_USE_HDF5 writeParticleDataHDF5(particles_buffer_[i][j], @@ -603,7 +603,7 @@ writeLabFrameData(const MultiFab* cell_centered_data, DistributionMapping buff_dm(buff_ba); data_buffer_[i].reset( new MultiFab(buff_ba, buff_dm, ncomp, 0) ); } - if (WarpX::do_boosted_frame_particles) particles_buffer_[i].resize(mypc.nSpeciesLabFrameDiags()); + if (WarpX::do_boosted_frame_particles) particles_buffer_[i].resize(mypc.nSpeciesBoostedFrameDiags()); } if (WarpX::do_boosted_frame_fields) { @@ -671,9 +671,9 @@ writeLabFrameData(const MultiFab* cell_centered_data, if (WarpX::do_boosted_frame_particles) { - for (int j = 0; j < mypc.nSpeciesLabFrameDiags(); ++j) { + for (int j = 0; j < mypc.nSpeciesBoostedFrameDiags(); ++j) { - const std::string species_name = species_names[mypc.mapSpeciesLabDiags(j)]; + const std::string species_name = species_names[mypc.mapSpeciesBoostedFrameDiags(j)]; #ifdef WARPX_USE_HDF5 writeParticleDataHDF5(particles_buffer_[i][j], snapshots_[i].file_name, @@ -867,9 +867,9 @@ LabSnapShot(Real t_lab_in, Real t_boost, Real zmin_lab_in, if (WarpX::do_boosted_frame_particles){ auto & mypc = WarpX::GetInstance().GetPartContainer(); const std::vector species_names = mypc.GetSpeciesNames(); - for (int j = 0; j < mypc.nSpeciesLabFrameDiags(); ++j) + for (int j = 0; j < mypc.nSpeciesBoostedFrameDiags(); ++j) { - int js = mypc.mapSpeciesLabDiags(j); + int js = mypc.mapSpeciesBoostedFrameDiags(j); std::string species_name = species_names[js]; output_create_species_group(file_name, species_name); for (int k = 0; k < static_cast(particle_field_names.size()); ++k) @@ -896,8 +896,8 @@ LabSnapShot(Real t_lab_in, Real t_boost, Real zmin_lab_in, const std::vector species_names = mypc.GetSpeciesNames(); const std::string particles_prefix = "particle"; - for(int i = 0; i < mypc.nSpeciesLabFrameDiags(); ++i) { - int is = mypc.mapSpeciesLabDiags(i); + for(int i = 0; i < mypc.nSpeciesBoostedFrameDiags(); ++i) { + int is = mypc.mapSpeciesBoostedFrameDiags(i); std::string species_name = species_names[is]; const std::string fullpath = file_name + "/" + species_name; if (!UtilCreateDirectory(fullpath, 0755)) diff --git a/Source/Particles/MultiParticleContainer.H b/Source/Particles/MultiParticleContainer.H index e88879127..6b511b9cb 100644 --- a/Source/Particles/MultiParticleContainer.H +++ b/Source/Particles/MultiParticleContainer.H @@ -155,8 +155,8 @@ public: int nSpecies() const {return nspecies;} - int nSpeciesLabFrameDiags() const {return nspecies_lab_frame_diags;} - int mapSpeciesLabDiags(int i) const {return map_species_lab_diags[i];} + int nSpeciesBoostedFrameDiags() const {return nspecies_boosted_frame_diags;} + int mapSpeciesBoostedFrameDiags(int i) const {return map_species_boosted_frame_diags[i];} int doBoostedFrameDiags() const {return do_boosted_frame_diags;} int nSpeciesDepositOnMainGrid () const { @@ -218,8 +218,8 @@ private: void ReadParameters (); - int nspecies_lab_frame_diags = 0; - std::vector map_species_lab_diags; + int nspecies_boosted_frame_diags = 0; + std::vector map_species_boosted_frame_diags; int do_boosted_frame_diags = 0; // runtime parameters diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp index ea87e2d5b..6d618c096 100644 --- a/Source/Particles/MultiParticleContainer.cpp +++ b/Source/Particles/MultiParticleContainer.cpp @@ -31,25 +31,25 @@ MultiParticleContainer::MultiParticleContainer (AmrCore* amr_core) pc_tmp.reset(new PhysicalParticleContainer(amr_core)); - // Compute the number of species for which mab frame data is dumped + // Compute the number of species for which lab-frame data is dumped // nspecies_lab_frame_diags, and map their ID to MultiParticleContainer // particle IDs in map_species_lab_diags. - map_species_lab_diags.resize(nspecies); - nspecies_lab_frame_diags = 0; + map_species_boosted_frame_diags.resize(nspecies); + nspecies_boosted_frame_diags = 0; for (int i=0; ido_boosted_frame_diags){ - map_species_lab_diags[nspecies_lab_frame_diags] = i; + map_species_boosted_frame_diags[nspecies_boosted_frame_diags] = i; do_boosted_frame_diags = 1; - nspecies_lab_frame_diags += 1; + nspecies_boosted_frame_diags += 1; } } if (WarpX::do_boosted_frame_diagnostic && do_boosted_frame_diags) { - for (int i = 0; i < nspecies_lab_frame_diags; ++i) + for (int i = 0; i < nspecies_boosted_frame_diags; ++i) { - int is = map_species_lab_diags[i]; + int is = map_species_boosted_frame_diags[i]; allcontainers[is]->AddRealComp("xold"); allcontainers[is]->AddRealComp("yold"); allcontainers[is]->AddRealComp("zold"); @@ -392,8 +392,8 @@ MultiParticleContainer BL_PROFILE("MultiParticleContainer::GetLabFrameData"); // Loop over particle species - for (int i = 0; i < nspecies_lab_frame_diags; ++i){ - int isp = map_species_lab_diags[i]; + for (int i = 0; i < nspecies_boosted_frame_diags; ++i){ + int isp = map_species_boosted_frame_diags[i]; WarpXParticleContainer* pc = allcontainers[isp].get(); WarpXParticleContainer::DiagnosticParticles diagnostic_particles; pc->GetParticleSlice(direction, z_old, z_new, t_boost, t_lab, dt, diagnostic_particles); -- cgit v1.2.3