From d467faaf1fd0ceca9753f09334338686c412e495 Mon Sep 17 00:00:00 2001 From: David Grote Date: Mon, 16 Mar 2020 19:18:19 -0700 Subject: Added Python wrapper of charge density arrays (#783) --- Python/pywarpx/fields.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'Python/pywarpx/fields.py') diff --git a/Python/pywarpx/fields.py b/Python/pywarpx/fields.py index 916e3c887..69aa25185 100644 --- a/Python/pywarpx/fields.py +++ b/Python/pywarpx/fields.py @@ -28,7 +28,7 @@ class _MultiFABWrapper(object): """Wrapper around field arrays at level 0 This provides a convenient way to query and set fields that are broken up into FABs. The indexing is based on global indices. - - direction: component to access, one of the values (0, 1, 2) + - direction: component to access, one of the values (0, 1, 2) or None - overlaps: is one along the axes where the grid boundaries overlap the neighboring grid - get_lovects: routine that returns the list of lo vectors - get_fabs: routine that returns the list of FABs @@ -48,7 +48,10 @@ class _MultiFABWrapper(object): self.overlaps = self.overlaps[::2] def _getlovects(self): - lovects = self.get_lovects(self.level, self.direction, self.include_ghosts) + if self.direction is None: + lovects = self.get_lovects(self.level, self.include_ghosts) + else: + lovects = self.get_lovects(self.level, self.direction, self.include_ghosts) self.nghosts = -lovects.min() return lovects @@ -63,7 +66,10 @@ class _MultiFABWrapper(object): return hivects def _getfields(self): - return self.get_fabs(self.level, self.direction, self.include_ghosts) + if self.direction is None: + return self.get_fabs(self.level, self.include_ghosts) + else: + return self.get_fabs(self.level, self.direction, self.include_ghosts) def __len__(self): return lend(self._getlovects()) @@ -575,6 +581,13 @@ def JzCPWrapper(level=1, include_ghosts=False): get_fabs=_libwarpx.get_mesh_current_density_cp, level=level, include_ghosts=include_ghosts) +def RhoCPWrapper(level=1, include_ghosts=False): + assert level>0, Exception('Coarse patch only available on levels > 0') + return _MultiFABWrapper(direction=None, overlaps=[1,1,0], + get_lovects=_libwarpx.get_mesh_charge_density_cp_lovects, + get_fabs=_libwarpx.get_mesh_charge_density_cp, + level=level, include_ghosts=include_ghosts) + def ExFPWrapper(level=0, include_ghosts=False): return _MultiFABWrapper(direction=0, overlaps=[0,1,1], get_lovects=_libwarpx.get_mesh_electric_field_fp_lovects, @@ -628,6 +641,12 @@ def JzFPWrapper(level=0, include_ghosts=False): get_lovects=_libwarpx.get_mesh_current_density_fp_lovects, get_fabs=_libwarpx.get_mesh_current_density_fp, level=level, include_ghosts=include_ghosts) + +def RhoFPWrapper(level=0, include_ghosts=False): + return _MultiFABWrapper(direction=None, overlaps=[1,1,1], + get_lovects=_libwarpx.get_mesh_charge_density_fp_lovects, + get_fabs=_libwarpx.get_mesh_charge_density_fp, + level=level, include_ghosts=include_ghosts) def ExCPPMLWrapper(level=1, include_ghosts=False): assert level>0, Exception('Coarse patch only available on levels > 0') return _MultiFABWrapper(direction=0, overlaps=[0,1,1], -- cgit v1.2.3