aboutsummaryrefslogtreecommitdiff
path: root/Python/pywarpx
diff options
context:
space:
mode:
authorGravatar Dave Grote <grote1@llnl.gov> 2019-04-29 13:56:04 -0700
committerGravatar Dave Grote <grote1@llnl.gov> 2019-04-29 13:56:04 -0700
commit68f260b3eb72178ebf9c2f4135af43d0dc687d2b (patch)
tree1cfd15b87373f1dade99f777908fa2b2eef16f8d /Python/pywarpx
parentc2b4a4e35febef5b6adc7d050a146ac1588cc4d7 (diff)
downloadWarpX-68f260b3eb72178ebf9c2f4135af43d0dc687d2b.tar.gz
WarpX-68f260b3eb72178ebf9c2f4135af43d0dc687d2b.tar.zst
WarpX-68f260b3eb72178ebf9c2f4135af43d0dc687d2b.zip
Implemented multiple antennas in picmi
Diffstat (limited to 'Python/pywarpx')
-rw-r--r--Python/pywarpx/Laser.py3
-rw-r--r--Python/pywarpx/Lasers.py14
-rw-r--r--Python/pywarpx/WarpX.py7
-rw-r--r--Python/pywarpx/__init__.py2
-rw-r--r--Python/pywarpx/picmi.py32
5 files changed, 38 insertions, 20 deletions
diff --git a/Python/pywarpx/Laser.py b/Python/pywarpx/Laser.py
deleted file mode 100644
index 0af1e7f90..000000000
--- a/Python/pywarpx/Laser.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from .Bucket import Bucket
-
-laser = Bucket('laser')
diff --git a/Python/pywarpx/Lasers.py b/Python/pywarpx/Lasers.py
new file mode 100644
index 000000000..ba7303d35
--- /dev/null
+++ b/Python/pywarpx/Lasers.py
@@ -0,0 +1,14 @@
+from .Bucket import Bucket
+
+lasers = Bucket('lasers', nlasers=0, names=None)
+lasers_list = []
+
+def newlaser(name):
+ result = Bucket(name)
+ lasers_list.append(result)
+ lasers.nlasers += 1
+ if lasers.names is None:
+ lasers.names = name
+ else:
+ lasers.names += ' ' + name
+ return result
diff --git a/Python/pywarpx/WarpX.py b/Python/pywarpx/WarpX.py
index 4e4e41187..5f7477e58 100644
--- a/Python/pywarpx/WarpX.py
+++ b/Python/pywarpx/WarpX.py
@@ -5,7 +5,7 @@ from .Geometry import geometry
from .Algo import algo
from .Langmuirwave import langmuirwave
from .Interpolation import interpolation
-from .Laser import laser
+from .Lasers import lasers, lasers_list
from . import Particles
from .Particles import particles, particles_list
@@ -25,7 +25,7 @@ class WarpX(Bucket):
argv += langmuirwave.attrlist()
argv += interpolation.attrlist()
argv += particles.attrlist()
- argv += laser.attrlist()
+ argv += lasers.attrlist()
# --- Search through species_names and add any predefined particle objects in the list.
particles_list_names = [p.instancename for p in particles_list]
@@ -43,6 +43,9 @@ class WarpX(Bucket):
for particle in particles_list:
argv += particle.attrlist()
+ for laser in lasers_list:
+ argv += laser.attrlist()
+
return argv
def init(self):
diff --git a/Python/pywarpx/__init__.py b/Python/pywarpx/__init__.py
index 0f0d7fb58..ef335e029 100644
--- a/Python/pywarpx/__init__.py
+++ b/Python/pywarpx/__init__.py
@@ -6,4 +6,4 @@ from .Algo import algo
from .Langmuirwave import langmuirwave
from .Interpolation import interpolation
from .Particles import particles, electrons, positrons, protons, newspecies
-from .Laser import laser
+from .Lasers import lasers
diff --git a/Python/pywarpx/picmi.py b/Python/pywarpx/picmi.py
index 6adf4b039..a5d9fba87 100644
--- a/Python/pywarpx/picmi.py
+++ b/Python/pywarpx/picmi.py
@@ -406,24 +406,28 @@ class ElectrostaticSolver(picmistandard.PICMI_ElectrostaticSolver):
class GaussianLaser(picmistandard.PICMI_GaussianLaser):
def initialize_inputs(self):
- pywarpx.warpx.use_laser = 1
- pywarpx.laser.profile = "Gaussian"
- pywarpx.laser.wavelength = self.wavelength # The wavelength of the laser (in meters)
- pywarpx.laser.e_max = self.E0 # Maximum amplitude of the laser field (in V/m)
- pywarpx.laser.polarization = [np.cos(self.polarization_angle), np.sin(self.polarization_angle), 0.] # The main polarization vector
- pywarpx.laser.profile_waist = self.waist # The waist of the laser (in meters)
- pywarpx.laser.profile_duration = self.duration # The duration of the laser (in seconds)
- pywarpx.laser.zeta = self.zeta
- pywarpx.laser.beta = self.beta
- pywarpx.laser.phi2 = self.phi2
+ self.laser_number = pywarpx.lasers.nlasers + 1
+ self.name = 'laser{}'.format(self.laser_number)
+
+ self.laser = pywarpx.Lasers.newlaser(self.name)
+
+ self.laser.profile = "Gaussian"
+ self.laser.wavelength = self.wavelength # The wavelength of the laser (in meters)
+ self.laser.e_max = self.E0 # Maximum amplitude of the laser field (in V/m)
+ self.laser.polarization = [np.cos(self.polarization_angle), np.sin(self.polarization_angle), 0.] # The main polarization vector
+ self.laser.profile_waist = self.waist # The waist of the laser (in meters)
+ self.laser.profile_duration = self.duration # The duration of the laser (in seconds)
+ self.laser.zeta = self.zeta
+ self.laser.beta = self.beta
+ self.laser.phi2 = self.phi2
class LaserAntenna(picmistandard.PICMI_LaserAntenna):
def initialize_inputs(self, laser):
- pywarpx.laser.position = self.position # This point is on the laser plane
- pywarpx.laser.direction = self.normal_vector # The plane normal direction
- pywarpx.laser.profile_focal_distance = laser.focal_position[2] - self.position[2] # Focal distance from the antenna (in meters)
- pywarpx.laser.profile_t_peak = (self.position[2] - laser.centroid_position[2])/c # The time at which the laser reaches its peak (in seconds)
+ laser.laser.position = self.position # This point is on the laser plane
+ laser.laser.direction = self.normal_vector # The plane normal direction
+ laser.laser.profile_focal_distance = laser.focal_position[2] - self.position[2] # Focal distance from the antenna (in meters)
+ laser.laser.profile_t_peak = (self.position[2] - laser.centroid_position[2])/c # The time at which the laser reaches its peak (in seconds)
class Simulation(picmistandard.PICMI_Simulation):