aboutsummaryrefslogtreecommitdiff
path: root/Python/pywarpx/picmi.py
diff options
context:
space:
mode:
Diffstat (limited to 'Python/pywarpx/picmi.py')
-rw-r--r--Python/pywarpx/picmi.py26
1 files changed, 24 insertions, 2 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):