aboutsummaryrefslogtreecommitdiff
path: root/Python
diff options
context:
space:
mode:
Diffstat (limited to 'Python')
-rw-r--r--Python/pywarpx/picmi.py26
-rw-r--r--Python/setup.py2
2 files changed, 25 insertions, 3 deletions
diff --git a/Python/pywarpx/picmi.py b/Python/pywarpx/picmi.py
index a85cc3784..0d6eebf63 100644
--- a/Python/pywarpx/picmi.py
+++ b/Python/pywarpx/picmi.py
@@ -340,11 +340,11 @@ class DensityDistributionBase(object):
species.injection_style = "nuniformpercell"
species.num_particles_per_cell_each_dim = layout.n_macroparticle_per_cell
elif isinstance(layout, PseudoRandomLayout):
- assert (layout.n_macroparticles_per_cell is not None), Exception('WarpX only supports n_macroparticles_per_cell for the PseudoRandomLayout with UniformDistribution')
+ assert (layout.n_macroparticles_per_cell is not None), Exception('WarpX only supports n_macroparticles_per_cell for the PseudoRandomLayout with this distribution')
species.injection_style = "nrandompercell"
species.num_particles_per_cell = layout.n_macroparticles_per_cell
else:
- raise Exception('WarpX does not support the specified layout for UniformDistribution')
+ raise Exception('WarpX does not support the specified layout for this distribution')
species.xmin = self.lower_bound[0]
species.xmax = self.upper_bound[0]
@@ -385,6 +385,28 @@ class DensityDistributionBase(object):
species.__setattr__(f'momentum_function_u{sdir}(x,y,z)', f'({expression})/{constants.c}')
+class UniformFluxDistribution(picmistandard.PICMI_UniformFluxDistribution, DensityDistributionBase):
+ def initialize_inputs(self, species_number, layout, species, density_scale):
+
+ self.fill_in = False
+ self.set_mangle_dict()
+ self.set_species_attributes(species, layout)
+
+ species.profile = "constant"
+ species.density = self.flux
+ if density_scale is not None:
+ species.density *= density_scale
+ species.flux_normal_axis = self.flux_normal_axis
+ species.surface_flux_pos = self.surface_flux_position
+ species.flux_direction = self.flux_direction
+
+ # --- Use specific attributes for flux injection
+ species.injection_style = "nfluxpercell"
+ assert (isinstance(layout, PseudoRandomLayout)), Exception('UniformFluxDistribution only supports the PseudoRandomLayout in WarpX')
+ if species.momentum_distribution_type == "gaussian":
+ species.momentum_distribution_type = "gaussianflux"
+
+
class UniformDistribution(picmistandard.PICMI_UniformDistribution, DensityDistributionBase):
def initialize_inputs(self, species_number, layout, species, density_scale):
diff --git a/Python/setup.py b/Python/setup.py
index 03ddd6844..57fca38ad 100644
--- a/Python/setup.py
+++ b/Python/setup.py
@@ -59,7 +59,7 @@ setup(name = 'pywarpx',
package_dir = {'pywarpx': 'pywarpx'},
description = """Wrapper of WarpX""",
package_data = package_data,
- install_requires = ['numpy', 'picmistandard==0.0.20', 'periodictable'],
+ install_requires = ['numpy', 'picmistandard==0.0.22', 'periodictable'],
python_requires = '>=3.7',
zip_safe=False
)