aboutsummaryrefslogtreecommitdiff
path: root/Python/pywarpx
diff options
context:
space:
mode:
authorGravatar Roelof Groenewald <40245517+roelof-groenewald@users.noreply.github.com> 2021-07-26 10:05:51 -0700
committerGravatar GitHub <noreply@github.com> 2021-07-26 10:05:51 -0700
commitab6b0842589db90600067673ac74ec966fe8a698 (patch)
treedfd6d095b2567d76ce185d790373ee640d26c3a0 /Python/pywarpx
parent7ac9b24d923e7d7b62f8db10819ba000c4431b55 (diff)
downloadWarpX-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.py15
-rw-r--r--Python/pywarpx/WarpX.py5
-rw-r--r--Python/pywarpx/__init__.py1
-rw-r--r--Python/pywarpx/picmi.py41
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()