Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
103 commits
Select commit Hold shift + click to select a range
d4df7fc
First Draft:
Stefannn Jun 26, 2015
34f4cc4
Setup.py
Stefannn Jun 26, 2015
b9a19e7
FD_Staircase_SquareGrid
Stefannn Jun 26, 2015
1dc1e27
First debugged version:
Stefannn Jul 1, 2015
1a57844
Added 1D uniform mesh
aoeftiger Jul 2, 2015
d1856f1
Changed wrongly named interface names from rho to mesh_charges.
aoeftiger Jul 2, 2015
4077d04
add distances hook in meshing
aoeftiger Jul 2, 2015
607c5ff
Changed gradient
Stefannn Jul 2, 2015
26a8092
Giannis FD-Poisson solvers are working
Stefannn Jul 2, 2015
00b0c2d
Gianni PyPIC M2P / P2m
Stefannn Jul 2, 2015
1fe5597
Test 000_round_chamber
Stefannn Jul 2, 2015
2631499
Itest 006_timing_solve
Stefannn Jul 2, 2015
39eaafe
FFT open boundary:
Stefannn Jul 2, 2015
6e54964
Fix ex, ey = ey, ex
Stefannn Jul 7, 2015
c981ab5
Typo fix 003
Stefannn Jul 7, 2015
4ae46eb
Rewrote/Cleaned Up tests
Stefannn Jul 8, 2015
580bc48
Incorporate FFT open boundary in timings
Stefannn Jul 8, 2015
a821488
Fix gradient:
Stefannn Jul 8, 2015
5ce6730
FFT PEC new interface
Stefannn Jul 8, 2015
5effc6f
Fix Typo:
Stefannn Jul 10, 2015
30fef48
Draft of bw_compatibility_102:
Stefannn Jul 10, 2015
fafb75a
there is no libs in FD_solver.py -- check your python paths!
aoeftiger Jul 13, 2015
a67225c
Relative paths missing in gradient and pypic
aoeftiger Jul 13, 2015
a6f6c92
one time forgot to rename mesh_density to mesh_count
aoeftiger Jul 13, 2015
b64b4c0
Backwards compatibility of tests/scripts
Stefannn Jul 14, 2015
9c2b812
Merge branch 'new_pypic_gpu_and_cpu' of https://github.com/PyCOMPLETE…
Stefannn Jul 14, 2015
346012f
Remove dead code:
Stefannn Jul 15, 2015
ccf07ad
First draft of GPU FFT open boundary solver
Stefannn Jul 15, 2015
b7e218c
FFT GPU 3D first tests work
Stefannn Jul 17, 2015
12b85fb
Numpy 3d fft debug version
Stefannn Jul 21, 2015
a62191f
Flag for IGF/standard green
Stefannn Jul 23, 2015
ca36f36
3d fft works
Stefannn Jul 27, 2015
17e50c7
Clean 3D FFT IGF GPU version
Stefannn Jul 27, 2015
03b4731
Renamed to ...3D
Stefannn Jul 27, 2015
45eee5a
IGF: Volume elem
Stefannn Jul 28, 2015
dd28bc7
Added sorted_particles_to_mesh functionality to PyPIC.
aoeftiger Jul 28, 2015
c4df147
2D GPU FFT (not working)
Stefannn Jul 29, 2015
b7bd0e3
Merge branch 'new_pypic_gpu_and_cpu' of https://github.com/PyCOMPLETE…
Stefannn Jul 29, 2015
22133b6
2D p2m kernels for sorted particles
Stefannn Jul 30, 2015
30595b9
2D and 3D FFT work, unified inteface
Stefannn Jul 30, 2015
f660960
dimensionality dependent function dispatch
Stefannn Jul 30, 2015
8c161f0
Dynamically set src/dst in poisson_solve
Stefannn Jul 31, 2015
d328b87
Mesh.shape returns (nz,ny,nz)
Stefannn Jul 31, 2015
190f76e
Subfolder itest
Stefannn Jul 31, 2015
8ab5094
Add reversed shape tuple shape_r in mesh
aoeftiger Jul 31, 2015
9ab8e55
mesh.shape_r replacement
Stefannn Jul 31, 2015
be8b127
Mesh_charges->rho, always use shaped arrays
Stefannn Jul 31, 2015
b483b2c
Fixed typos in sorted_particles_to_mesh. Works now!
aoeftiger Aug 1, 2015
8854caf
Added interactive test to validate GPU sorted algorithms vs. atomicAdd.
aoeftiger Aug 1, 2015
c3409ba
No significant change. Commented out node location functionality in m…
aoeftiger Aug 2, 2015
9765b56
Remove reverse(mesh.shape)
Stefannn Aug 3, 2015
7e1bc70
Merge branch 'new_pypic_gpu_and_cpu' of https://github.com/PyCOMPLETE…
Stefannn Aug 3, 2015
258e29b
Bw-compatibility
Stefannn Aug 3, 2015
47bb041
Version used in timing!
Stefannn Aug 4, 2015
73b7c1f
.pickle gitignore
Stefannn Aug 4, 2015
80a1eab
Nicer Plots
Stefannn Aug 5, 2015
6c6f9b9
Fixed FD_solver shape issue
Stefannn Aug 10, 2015
6e38c30
Fix 006 Itest
Stefannn Aug 11, 2015
2fe1249
Fix Ex<->Ey issue in FortranPic
Stefannn Aug 11, 2015
a3eace6
Add ext_boundary option to FFT solvers
Stefannn Aug 11, 2015
62b0c7c
Fix backwards_compatibility field/ rho issue
Stefannn Aug 12, 2015
e406f58
Fixed int_field_for_border
Stefannn Aug 12, 2015
c5a9980
Fix Staircase_Squaregrid
Stefannn Aug 13, 2015
8a5a68d
Backwards compatibility 1.0.2
Stefannn Aug 14, 2015
4a9f463
Setup.py fix
Stefannn Aug 14, 2015
400c34b
Backwards-compatibility 1.0.3
Stefannn Aug 17, 2015
21f0688
Remove hardcoded block/grids in kernel calls
Stefannn Aug 19, 2015
78e6602
Arbitrary mesh sizes
Stefannn Aug 21, 2015
928bb19
added Makefile
aoeftiger Oct 8, 2015
7fe798a
Try/except around library import
Oct 9, 2015
2d6ab6f
Merge branch 'new_pypic_gpu_and_cpu' of https://github.com/PyCOMPLETE…
Oct 9, 2015
a3e76d8
2.5D solver
Stefannn Oct 22, 2015
5175fac
Flag: Save memory vs Fast 2.5D solver
Stefannn Oct 22, 2015
2d42243
Fix: mesh.volume_elem*dz in poisson_solve
Stefannn Oct 23, 2015
2107cae
Merge branch 'master' into new_pypic_gpu_and_cpu
Stefannn Jan 11, 2016
16daa20
Move skcuda import into try clause:
Stefannn Jan 11, 2016
9f5f7d7
Merge pull request #1 from PyCOMPLETE/new_pypic_gpu_and_cpu
aoeftiger Jan 11, 2016
cd2bea9
Added version management a la PyHEADTAIL
aoeftiger Jan 18, 2016
d2ae15d
update Makefile to include clean
aoeftiger Jan 19, 2016
5839af0
Meshing: signature of __init__ for each mesh now
aoeftiger Feb 5, 2016
9c11adc
Reordered blocks in pypic.py without changes of code.
aoeftiger Feb 5, 2016
883efda
whitespaces in meshing
aoeftiger Feb 5, 2016
0c46e2f
Bugfix: remove pypic.is_25D and
aoeftiger Feb 13, 2016
7cbe761
Do not keep mesh_weights and mesh_indices in memory.
aoeftiger Feb 18, 2016
5b68525
Remove & Update tests
Stefannn Feb 19, 2016
f303b9e
pypic.py: typo for mesh_charges in sorted_particles_to_mesh,
aoeftiger May 13, 2016
4337354
attempt to solve __rmul__ problem when mesh.distances are GPUarrays
aoeftiger Jun 10, 2016
6cc2498
Major changes:
aoeftiger Jun 10, 2016
d91ca77
Added function in poissonsolver FFT variant to setup for new mesh
aoeftiger Jun 10, 2016
7fe4918
Fixed bug in mesh grid in setup_mesh in 3D FFT solver.
aoeftiger Jun 20, 2016
68158d1
meshing: added RectMesh25D to account for PyHEADTAIL's SliceSet.
aoeftiger Aug 8, 2016
1483c39
Add 'GPU/' from commit '68158d1bd46afbc1362c7923a66181ffc3d594e6'
aoeftiger Jan 13, 2017
21114f1
GPU: use prepared call for p2m method kernel
aoeftiger Feb 2, 2017
855a700
prepared_call on p2m kernel: arguments need .gpudata
aoeftiger Feb 2, 2017
ae54ac9
Remove dynamic versioning
aoeftiger Feb 16, 2017
23b1c58
Comments and descriptions changed
aoeftiger Feb 16, 2017
72da069
Adding example for GPU PyPIC
aoeftiger Feb 16, 2017
4c997aa
Need (at least empty) __init__.py for top-level connection
aoeftiger Feb 17, 2017
75b31e8
remove #todos from meshing
aoeftiger Feb 21, 2017
ba92680
PyPIC GPU Example ipynb: improved meshing functions
aoeftiger Feb 21, 2017
4781d94
GPU: Moved meshing.py into submodule
aoeftiger Mar 14, 2017
04621b9
GPU: extended timings in GPU PyPIC example
aoeftiger Mar 14, 2017
2c5bb4e
Bump version number to 2.2
aoeftiger Mar 14, 2017
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Bassetti_Erskine.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
# This file is part of the code:
#
#
# PyPIC Version 2.1.0
# PyPIC Version 2.2.0
#
#
# Author and contact: Giovanni IADAROLA
Expand Down
2 changes: 1 addition & 1 deletion FFT_OpenBoundary.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
# This file is part of the code:
#
#
# PyPIC Version 2.1.0
# PyPIC Version 2.2.0
#
#
# Author and contact: Giovanni IADAROLA
Expand Down
2 changes: 1 addition & 1 deletion FFT_OpenBoundary_SquareGrid.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
# This file is part of the code:
#
#
# PyPIC Version 2.1.0
# PyPIC Version 2.2.0
#
#
# Author and contact: Giovanni IADAROLA
Expand Down
2 changes: 1 addition & 1 deletion FFT_PEC_Boundary_SquareGrid.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
# This file is part of the code:
#
#
# PyPIC Version 2.1.0
# PyPIC Version 2.2.0
#
#
# Author and contact: Giovanni IADAROLA
Expand Down
2 changes: 1 addition & 1 deletion FiniteDifferences_ShortleyWeller_SquareGrid.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
# This file is part of the code:
#
#
# PyPIC Version 2.1.0
# PyPIC Version 2.2.0
#
#
# Author and contact: Giovanni IADAROLA
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
# This file is part of the code:
#
#
# PyPIC Version 2.1.0
# PyPIC Version 2.2.0
#
#
# Author and contact: Giovanni IADAROLA
Expand Down
2 changes: 1 addition & 1 deletion FiniteDifferences_Staircase_SquareGrid.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
# This file is part of the code:
#
#
# PyPIC Version 2.1.0
# PyPIC Version 2.2.0
#
#
# Author and contact: Giovanni IADAROLA
Expand Down
10 changes: 10 additions & 0 deletions GPU/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
*.pickle
*.so
*.pyc
.project
.pydevproject
*.png
norepository_*
PyPIC.egg-info
build
.ipynb_checkpoints/
5 changes: 5 additions & 0 deletions GPU/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
all:
python setup.py build_ext

clean:
rm -r build dist PyPIC.egg-info *.so *.pyc
Empty file added GPU/__init__.py
Empty file.
235 changes: 235 additions & 0 deletions GPU/backwards_compatibility_1_03.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,235 @@
'''
Module providing backwards compatibility with PyPIC 1.0.3
How to: Add 'from backwards_compatibility_1_02 import *' to the beginning
of your old scripts
Main idea: 1) Wrap the new classes with the old interface
2) Create new modules (via imp) with the same names as the old ones
3) Add them to sys.modules
@author Stefan Hegglin
@date 12.07.2015
'''


# provide a way to use modules from the parent directory
import sys
sys.path.append('../')
import imp
from scipy.constants import e, epsilon_0
import numpy as np
from pypic import PyPIC_Fortran_M2P_P2M
from meshing import RectMesh2D
from poisson_solver import FD_solver as FD
from poisson_solver import FFT_solver as FFT




class _Proxy_v103(object):
'''
Base Class providing the interface of PyPIC 1.0.3 solvers while
internally using the newer version
'''
def __init__(self, poissonsolver):
'''
Set up all members which are available in the old PyPIC classes
'''
mesh = RectMesh2D(poissonsolver.bias_x,
poissonsolver.bias_y,
poissonsolver.Dh, poissonsolver.Dh,
poissonsolver.Nxg,
poissonsolver.Nyg)
if getattr(poissonsolver, 'gradient', None) != None:
pypic = PyPIC_Fortran_M2P_P2M(mesh, poissonsolver,
poissonsolver.gradient)
else:
pypic = PyPIC_Fortran_M2P_P2M(mesh, poissonsolver)
self.pypic = pypic
self.Dh = poissonsolver.Dh
self.xg = poissonsolver.xg
self.yg = poissonsolver.yg
self.bias_x = poissonsolver.bias_x
self.bias_y = poissonsolver.bias_y
self.Nxg = poissonsolver.Nxg
self.Nyg = poissonsolver.Nyg

self.rho = np.zeros((self.Nxg, self.Nyg))
self.phi = np.zeros((self.Nxg, self.Nyg))
self.efx = np.zeros((self.Nxg, self.Nyg))
self.efy = np.zeros((self.Nxg, self.Nyg))
self.xn = getattr(poissonsolver, 'xn', None)
self.yn = getattr(poissonsolver, 'yn', None)

def scatter_and_solve(self, x_mp, y_mp, nel_mp, charge=-e):
''' Calls scatter and solve '''
self.scatter(x_mp, y_mp, nel_mp, charge)
self.solve()

def scatter(self, x_mp, y_mp, nel_mp, charge=-e):
''' Difficulties: not all entires in nel_mp are the same, however our
solver can only handle the same charge for all mp.
Solution: Call p2m seperately for all particles with different nel_mp
and add the charge densities
'''
if len(x_mp) > 0:
nel_mp_uniques = np.unique(nel_mp)
mesh_charges = self.rho.T*0
for n_mp in nel_mp_uniques:
idx = np.where(np.isclose(n_mp, nel_mp))[0]
charge_ = charge * n_mp
mesh_charges += self.pypic.particles_to_mesh(x_mp[idx],
y_mp[idx],
charge=charge_)
self.rho = mesh_charges.T / self.pypic.mesh.volume_elem
else:
self.rho *= 0

def solve(self, rho=None, flag_verbose=False):
if rho == None:
rho = self.rho.T
else:
rho = rho.T
phi = self.pypic.poisson_solve(rho)
self.phi = phi.reshape((self.Nyg, self.Nxg)).T
mesh_e_fields = self.pypic.get_electric_fields(phi)
self.efx = mesh_e_fields[0].reshape(self.Nyg, self.Nxg).T
self.efy = mesh_e_fields[1].reshape(self.Nyg, self.Nxg).T
self.rho = rho.T

def gather(self, x_mp, y_mp):
if len(x_mp) > 0:
mesh_e_fields = [self.efx.T, self.efy.T]
mesh_e_fields_and_mp_coords = zip(list(mesh_e_fields),[x_mp, y_mp])
E = self.pypic.field_to_particles(*mesh_e_fields_and_mp_coords)
Ex_sc_n = E[0]
Ey_sc_n = E[1]
else:
Ex_sc_n = 0.
Ey_sc_n = 0.
return Ex_sc_n, Ey_sc_n

class _PyPIC_Scatter_Gather(_Proxy_v103):
''' Wrapper which can be used in the PyHEADTAIL TransverseEfield_map
The initializer has to take xg, yg
Internally Dh, x_aper and y_aper get computed and a FFT poissonsolver
is instantiated (which takes care of the mesh/.. creation
'''
def __init__(self, xg, yg):
Dh = xg[1]-xg[0]
x_aper = max(xg) - 5.*Dh
y_aper = max(yg) - 4.*Dh
poissonsolver = FFT.FFT_OpenBoundary_SquareGrid(x_aper, y_aper, Dh,
fftlib='pyfftw',
ext_boundary=True)
super(_PyPIC_Scatter_Gather, self).__init__(poissonsolver)


class _FiniteDifferences_Staircase_SquareGrid(_Proxy_v103):
'''
Wrapper for the FiniteDifferences_Staircase_SquareGrid class v1.0.3
Provides the same functionality and interface
'''
def __init__(self, chamb, Dh, sparse_solver='scipy_slu'):
poissonsolver = FD.FiniteDifferences_Staircase_SquareGrid(
chamb=chamb, Dh=Dh, sparse_solver=sparse_solver,
ext_boundary=True)
super(_FiniteDifferences_Staircase_SquareGrid,
self).__init__(poissonsolver)


class _FiniteDifferences_ShortleyWeller_SquareGrid(_Proxy_v103):
'''
Wrapper for the FiniteDifferences_ShortleyWeller_SquareGrid class v1.0.3
Provides the same functionality and interface
'''
def __init__(self, chamb, Dh, sparse_solver='scipy_slu'):
poissonsolver = FD.FiniteDifferences_ShortleyWeller_SquareGrid(
chamb=chamb, Dh=Dh, sparse_solver=sparse_solver,
ext_boundary=True)
super(_FiniteDifferences_ShortleyWeller_SquareGrid,
self).__init__(poissonsolver)


class _FiniteDifferences_ShortleyWeller_SquareGrid_extrapolation(_Proxy_v103):
'''
Wrapper for the FiniteDifferences_ShortleyWeller_SquareGrid_extrapolation
class v1.0.3
Provides the same functionality and interface
'''
def __init__(self, chamb, Dh, sparse_solver='scipy_slu'):
poissonsolver = FD.FiniteDifferences_ShortleyWeller_SquareGrid_extrapolation(
chamb=chamb, Dh=Dh, sparse_solver=sparse_solver)
super(_FiniteDifferences_ShortleyWeller_SquareGrid_extrapolation,
self).__init__(poissonsolver)


class _FFT_OpenBoundary_SquareGrid(_Proxy_v103):
'''
Wrapper for the FFT_OpenBoundary_SquareGrid class v1.0.3
Provides the same functionality and interface
'''
def __init__(self, x_aper, y_aper, Dh, fftlib='pyfftw'):
poissonsolver = FFT.FFT_OpenBoundary_SquareGrid(x_aper=x_aper,
y_aper=y_aper,
Dh=Dh,
fftlib=fftlib,
ext_boundary=True)
super(_FFT_OpenBoundary_SquareGrid, self).__init__(poissonsolver)
self.fgreen = poissonsolver.fgreen
self.fgreentr = poissonsolver.fgreentr
self.nx = len(self.xg)
self.ny = len(self.yg)
self.fft2 = poissonsolver.fft2

class _FFT_PEC_Boundary_SquareGrid(_Proxy_v103):
'''
Wrapper for the FFT_PEC_Boundary_SquareGrid class v1.0.3
Provides the same functionality and interface
'''
def __init__(self, x_aper, y_aper, Dh, fftlib='pyfftw'):
poissonsolver = FFT.FFT_PEC_Boundary_SquareGrid(x_aper=x_aper,
y_aper=y_aper,
Dh=Dh,
fftlib=fftlib,
ext_boundary=True)
super(_FFT_PEC_Boundary_SquareGrid, self).__init__(poissonsolver)

''' @author Stefan... '''
# this is where the magic happens: create new modules
PyPIC_Scatter_Gather = imp.new_module('PyPIC_Scatter_Gather')
FFT_OpenBoundary_SquareGrid = imp.new_module('FFT_OpenBoundary_SquareGrid')
FFT_PEC_Boundary_SquareGrid = imp.new_module('FFT_PEC_Boundary_SquareGrid')
FiniteDifferences_ShortleyWeller_SquareGrid = imp.new_module('FiniteDifferences_Shortleyweller_SquareGrid')
FiniteDifferences_ShortleyWeller_SquareGrid_extrapolation = imp.new_module('FiniteDifferences_Shortleyweller_SquareGrid_extrapolation')
FiniteDifferences_Staircase_SquareGrid = imp.new_module('FiniteDifferences_Staircase_SquareGrid')

# bind the classes to the correct names inside the modules
PyPIC_Scatter_Gather.PyPIC_Scatter_Gather = _PyPIC_Scatter_Gather
FFT_OpenBoundary_SquareGrid.FFT_OpenBoundary_SquareGrid = _FFT_OpenBoundary_SquareGrid
FFT_PEC_Boundary_SquareGrid.FFT_PEC_Boundary_SquareGrid = _FFT_PEC_Boundary_SquareGrid
FiniteDifferences_ShortleyWeller_SquareGrid.FiniteDifferences_ShortleyWeller_SquareGrid = _FiniteDifferences_ShortleyWeller_SquareGrid
FiniteDifferences_ShortleyWeller_SquareGrid_extrapolation.FiniteDifferences_ShortleyWeller_SquareGrid = _FiniteDifferences_ShortleyWeller_SquareGrid_extrapolation
FiniteDifferences_Staircase_SquareGrid.FiniteDifferences_Staircase_SquareGrid = _FiniteDifferences_Staircase_SquareGrid

# add the modules to sys.modules to make statements like
# 'from FFT_PEC_Boundary_SquareGrid import FFT_PEC_Boundary_Squaregrid' valid
sys.modules['PyPIC_Scatter_Gather'] = PyPIC_Scatter_Gather
sys.modules['FFT_OpenBoundary_SquareGrid'] = FFT_OpenBoundary_SquareGrid
sys.modules['FFT_PEC_Boundary_SquareGrid'] = FFT_PEC_Boundary_SquareGrid
sys.modules['FiniteDifferences_ShortleyWeller_SquareGrid'] = FiniteDifferences_ShortleyWeller_SquareGrid
sys.modules['FiniteDifferences_ShortleyWeller_SquareGrid_extrapolation'] = FiniteDifferences_ShortleyWeller_SquareGrid_extrapolation
sys.modules['FiniteDifferences_Staircase_SquareGrid'] = FiniteDifferences_Staircase_SquareGrid

# add to sys.modules to make import PyPIC.[solver] statements possible
current_module = __import__(__name__)
setattr(current_module,'FiniteDifferences_Staircase_SquareGrid', FiniteDifferences_Staircase_SquareGrid)
setattr(current_module,'FiniteDifferences_ShortleyWeller_SquareGrid', FiniteDifferences_ShortleyWeller_SquareGrid)
setattr(current_module,'FiniteDifferences_ShortleyWeller_SquareGrid_extrapolation', FiniteDifferences_ShortleyWeller_SquareGrid_extrapolation)
setattr(current_module,'FFT_OpenBoundary_SquareGrid', FFT_OpenBoundary_SquareGrid)
setattr(current_module,'FFT_PEC_Boundary_SquareGrid', FFT_PEC_Boundary_SquareGrid)
setattr(current_module,'PyPIC_Scatter_Gather' , PyPIC_Scatter_Gather )
sys.modules['PyPIC.FiniteDifferences_Staircase_SquareGrid'] = FiniteDifferences_Staircase_SquareGrid
sys.modules['PyPIC.FiniteDifferences_ShortleyWeller_SquareGrid'] = FiniteDifferences_ShortleyWeller_SquareGrid
sys.modules['PyPIC.FiniteDifferences_ShortleyWeller_SquareGrid_extrapolation'] = FiniteDifferences_ShortleyWeller_SquareGrid_extrapolation
sys.modules['PyPIC.FFT_OpenBoundary_SquareGrid'] = FFT_OpenBoundary_SquareGrid
sys.modules['PyPIC.FFT_PEC_Boundary_SquareGrid'] = FFT_PEC_Boundary_SquareGrid
sys.modules['PyPIC.PyPIC_Scatter_Gather'] = PyPIC_Scatter_Gather
Loading