blob: f58d4f111e05c3a10e45ea8394706c0c2970f0bb (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
from .Bucket import Bucket
from .Constants import constants
from .Amr import amr
from .Geometry import geometry
from .Algo import algo
from .Langmuirwave import langmuirwave
from .Interpolation import interpolation
from .Laser import laser
from . import Particles
from .Particles import particles, particles_list
class WarpX(Bucket):
"""
A Python wrapper for the WarpX C++ class
"""
def create_argv_list(self):
argv = []
argv += warpx.attrlist()
argv += constants.attrlist()
argv += amr.attrlist()
argv += geometry.attrlist()
argv += algo.attrlist()
argv += langmuirwave.attrlist()
argv += interpolation.attrlist()
argv += particles.attrlist()
argv += laser.attrlist()
# --- Search through species_names and add any predefined particle objects in the list.
particles_list_names = [p.instancename for p in particles_list]
for pstring in particles.species_names.split(' '):
if pstring in particles_list_names:
# --- The species is already included in particles_list
continue
elif hasattr(Particles, pstring):
# --- Add the predefined species to particles_list
particles_list.append(getattr(Particles, pstring))
particles_list_names.append(pstring)
else:
raise Exception('Species %s listed in species_names not defined'%pstring)
for particle in particles_list:
argv += particle.attrlist()
return argv
def init(self):
from . import wx
argv = ['warpx'] + self.create_argv_list()
wx.initialize(argv)
def evolve(self, nsteps=-1):
from . import wx
wx.evolve(nsteps)
def finalize(self, finalize_mpi=1):
from . import wx
wx.finalize(finalize_mpi)
def getProbLo(self, direction):
from . import wx
return wx.libwarpx.warpx_getProbLo(direction)
def getProbHi(self, direction):
from . import wx
return wx.libwarpx.warpx_getProbHi(direction)
def write_inputs(self, filename='inputs', **kw):
argv = self.create_argv_list()
with open(filename, 'w') as ff:
for k, v in kw.items():
ff.write('{0} = {1}\n'.format(k, v))
for arg in argv:
ff.write('{0}\n'.format(arg))
warpx = WarpX('warpx')
|