diff options
author | 2019-04-29 13:56:04 -0700 | |
---|---|---|
committer | 2019-04-29 13:56:04 -0700 | |
commit | 68f260b3eb72178ebf9c2f4135af43d0dc687d2b (patch) | |
tree | 1cfd15b87373f1dade99f777908fa2b2eef16f8d /Python | |
parent | c2b4a4e35febef5b6adc7d050a146ac1588cc4d7 (diff) | |
download | WarpX-68f260b3eb72178ebf9c2f4135af43d0dc687d2b.tar.gz WarpX-68f260b3eb72178ebf9c2f4135af43d0dc687d2b.tar.zst WarpX-68f260b3eb72178ebf9c2f4135af43d0dc687d2b.zip |
Implemented multiple antennas in picmi
Diffstat (limited to 'Python')
-rw-r--r-- | Python/pywarpx/Laser.py | 3 | ||||
-rw-r--r-- | Python/pywarpx/Lasers.py | 14 | ||||
-rw-r--r-- | Python/pywarpx/WarpX.py | 7 | ||||
-rw-r--r-- | Python/pywarpx/__init__.py | 2 | ||||
-rw-r--r-- | Python/pywarpx/picmi.py | 32 |
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): |