diff options
author | 2021-09-22 08:40:10 -0700 | |
---|---|---|
committer | 2021-09-22 08:40:10 -0700 | |
commit | 0f4b2e9fd02bf7b94bf533b310e6947f88d8aba5 (patch) | |
tree | e4ea227fecbdbc723e350eb1d38873e9015cf0ce /Python/pywarpx/fields.py | |
parent | 39f32c01c580a149ef9f6df39c6bdb0825e59ee3 (diff) | |
download | WarpX-0f4b2e9fd02bf7b94bf533b310e6947f88d8aba5.tar.gz WarpX-0f4b2e9fd02bf7b94bf533b310e6947f88d8aba5.tar.zst WarpX-0f4b2e9fd02bf7b94bf533b310e6947f88d8aba5.zip |
External Poisson solver: wrappers to copy the full domain rho and phi between C++ and Python (#2285)
* added missing parts to allow an external Poisson solver to be used instead of the MLMG solver
* added rho and phi wrappers to fields.py
* added an example of using an external Poisson solver
* need to run PICMI test on 2 processors same as non-PICMI version in order to compare plotfiles
* changes requested during PR review
* pass dictionary to eval statement when calculating boundary potential
Diffstat (limited to 'Python/pywarpx/fields.py')
-rw-r--r-- | Python/pywarpx/fields.py | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/Python/pywarpx/fields.py b/Python/pywarpx/fields.py index f7131f326..4afd42bf8 100644 --- a/Python/pywarpx/fields.py +++ b/Python/pywarpx/fields.py @@ -441,7 +441,7 @@ class _MultiFABWrapper(object): """Sets slices of a decomposed 2D array. """ ix = index[0] - iz = index[2] + iz = index[1] lovects, ngrow = self._getlovects() hivects, ngrow = self._gethivects() @@ -461,7 +461,7 @@ class _MultiFABWrapper(object): ic = None nx = hivects[0,:].max() - ngrow[0] - nz = hivects[2,:].max() - ngrow[1] + nz = hivects[1,:].max() - ngrow[1] # --- Add extra dimensions so that the input has the same number of # --- dimensions as array. @@ -480,7 +480,7 @@ class _MultiFABWrapper(object): ixstop = ix + 1 if isinstance(iz, slice): izstart = max(iz.start or -ngrow[1], -ngrow[1]) - izstop = min(iz.stop or nz + 1 + ngrow[1], nz + self.overlaps[2] + ngrow[1]) + izstop = min(iz.stop or nz + 1 + ngrow[1], nz + self.overlaps[1] + ngrow[1]) else: izstart = iz izstop = iz + 1 @@ -490,13 +490,13 @@ class _MultiFABWrapper(object): # --- The ix1, 2 etc are relative to global indexing ix1 = max(ixstart, lovects[0,i]) ix2 = min(ixstop, lovects[0,i] + fields[i].shape[0]) - iz1 = max(izstart, lovects[2,i]) - iz2 = min(izstop, lovects[2,i] + fields[i].shape[2]) + iz1 = max(izstart, lovects[1,i]) + iz2 = min(izstop, lovects[1,i] + fields[i].shape[1]) if ix1 < ix2 and iz1 < iz2: sss = (slice(ix1 - lovects[0,i], ix2 - lovects[0,i]), - slice(iz1 - lovects[2,i], iz2 - lovects[2,i])) + slice(iz1 - lovects[1,i], iz2 - lovects[1,i])) if ic is not None: sss = tuple(list(sss) + [ic]) @@ -720,6 +720,14 @@ def RhoFPWrapper(level=0, include_ghosts=False): get_fabs=_libwarpx.get_mesh_charge_density_fp, get_nodal_flag=_libwarpx.get_Rho_nodal_flag, level=level, include_ghosts=include_ghosts) + +def PhiFPWrapper(level=0, include_ghosts=False): + return _MultiFABWrapper(direction=None, + get_lovects=_libwarpx.get_mesh_phi_fp_lovects, + get_fabs=_libwarpx.get_mesh_phi_fp, + get_nodal_flag=_libwarpx.get_Phi_nodal_flag, + 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, |