diff options
author | 2021-07-26 10:05:51 -0700 | |
---|---|---|
committer | 2021-07-26 10:05:51 -0700 | |
commit | ab6b0842589db90600067673ac74ec966fe8a698 (patch) | |
tree | dfd6d095b2567d76ce185d790373ee640d26c3a0 /Python/pywarpx | |
parent | 7ac9b24d923e7d7b62f8db10819ba000c4431b55 (diff) | |
download | WarpX-ab6b0842589db90600067673ac74ec966fe8a698.tar.gz WarpX-ab6b0842589db90600067673ac74ec966fe8a698.tar.zst WarpX-ab6b0842589db90600067673ac74ec966fe8a698.zip |
PICMI inputs for MCC (#2098)
* added functionality to picmi.py to initialize MCC collisions from python runscripts
* bug fix and copyright declaration change
* add Boltzmann's constant to picmi.py
* added test for picmi MCC setup
* set diagnostic output name for test and cleaned up analysis.py
* fixed style issue with EOL white space after merge
Diffstat (limited to 'Python/pywarpx')
-rw-r--r-- | Python/pywarpx/Collisions.py | 15 | ||||
-rw-r--r-- | Python/pywarpx/WarpX.py | 5 | ||||
-rw-r--r-- | Python/pywarpx/__init__.py | 1 | ||||
-rw-r--r-- | Python/pywarpx/picmi.py | 41 |
4 files changed, 62 insertions, 0 deletions
diff --git a/Python/pywarpx/Collisions.py b/Python/pywarpx/Collisions.py new file mode 100644 index 000000000..9ad7f9e14 --- /dev/null +++ b/Python/pywarpx/Collisions.py @@ -0,0 +1,15 @@ +# Copyright 2021 Modern Electron +# +# This file is part of WarpX. +# +# License: BSD-3-Clause-LBNL + +from .Bucket import Bucket + +collisions = Bucket('collisions') +collisions_list = [] + +def newcollision(name): + result = Bucket(name) + collisions_list.append(result) + return result diff --git a/Python/pywarpx/WarpX.py b/Python/pywarpx/WarpX.py index 73106cf62..6014eec6c 100644 --- a/Python/pywarpx/WarpX.py +++ b/Python/pywarpx/WarpX.py @@ -16,6 +16,7 @@ from .Interpolation import interpolation from .Lasers import lasers, lasers_list from . import Particles from .Particles import particles, particles_list +from .Collisions import collisions, collisions_list from .PSATD import psatd from .Diagnostics import diagnostics @@ -54,6 +55,10 @@ class WarpX(Bucket): for particle in particles_list: argv += particle.attrlist() + argv += collisions.attrlist() + for collision in collisions_list: + argv += collision.attrlist() + argv += lasers.attrlist() for laser in lasers_list: argv += laser.attrlist() diff --git a/Python/pywarpx/__init__.py b/Python/pywarpx/__init__.py index 918c300b2..7c10d4947 100644 --- a/Python/pywarpx/__init__.py +++ b/Python/pywarpx/__init__.py @@ -13,6 +13,7 @@ from .Algo import algo from .Langmuirwave import langmuirwave from .Interpolation import interpolation from .Particles import particles, electrons, positrons, protons, newspecies +from .Collisions import collisions from .PSATD import psatd from .Lasers import lasers from .Diagnostics import diagnostics diff --git a/Python/pywarpx/picmi.py b/Python/pywarpx/picmi.py index 570416aaf..f4d7a34ed 100644 --- a/Python/pywarpx/picmi.py +++ b/Python/pywarpx/picmi.py @@ -32,6 +32,7 @@ class constants: m_e = 9.1093837015e-31 m_p = 1.67262192369e-27 hbar = 1.054571817e-34 + kb = 1.380649e-23 picmistandard.register_constants(constants) @@ -715,6 +716,39 @@ class Mirror(picmistandard.PICMI_Mirror): pywarpx.warpx.mirror_z_npoints.append(self.number_of_cells) +class MCCCollisions(picmistandard.base._ClassWithInit): + """Custom class to handle setup of MCC collisions in WarpX. If collision + initialization is added to picmistandard this can be changed to inherit + that functionality.""" + + def __init__(self, name, species, background_density, + background_temperature, scattering_processes, + background_mass=None, **kw): + self.name = name + self.species = species + self.background_density = background_density + self.background_temperature = background_temperature + self.background_mass = background_mass + self.scattering_processes = scattering_processes + + self.handle_init(kw) + + def initialize_inputs(self): + collision = pywarpx.Collisions.newcollision(self.name) + collision.type = 'background_mcc' + collision.species = self.species.name + collision.background_density = self.background_density + collision.background_temperature = self.background_temperature + collision.background_mass = self.background_mass + + collision.scattering_processes = self.scattering_processes.keys() + for process, kw in self.scattering_processes.items(): + for key, val in kw.items(): + if key == 'species': + val = val.name + collision.add_new_attr(process+'_'+key, val) + + class EmbeddedBoundary(picmistandard.base._ClassWithInit): """Custom class to handle set up of embedded boundaries in WarpX. If embedded boundary initialization is added to picmistandard this can be @@ -751,6 +785,7 @@ class Simulation(picmistandard.PICMI_Simulation): self.use_fdtd_nci_corr = kw.pop('warpx_use_fdtd_nci_corr', None) self.amr_check_input = kw.pop('warpx_amr_check_input', None) + self.collisions = kw.pop('warpx_collisions', None) self.embedded_boundary = kw.pop('warpx_embedded_boundary', None) self.inputs_initialized = False @@ -813,6 +848,12 @@ class Simulation(picmistandard.PICMI_Simulation): self.injection_plane_positions[i], self.injection_plane_normal_vectors[i]) + if self.collisions is not None: + pywarpx.collisions.collision_names = [] + for collision in self.collisions: + pywarpx.collisions.collision_names.append(collision.name) + collision.initialize_inputs() + if self.embedded_boundary is not None: self.embedded_boundary.initialize_inputs() |