diff options
author | 2020-12-02 14:57:28 -0800 | |
---|---|---|
committer | 2020-12-02 14:57:28 -0800 | |
commit | 7fe38c8d13d9a511ab8f2c1243a4c58ca393c813 (patch) | |
tree | 306e64ca69c22077a5fdc9ff698c833431dfd1e1 /Source/Python | |
parent | 16c404ec6918e8264b1def78e0ba3969d96cafad (diff) | |
download | WarpX-7fe38c8d13d9a511ab8f2c1243a4c58ca393c813.tar.gz WarpX-7fe38c8d13d9a511ab8f2c1243a4c58ca393c813.tar.zst WarpX-7fe38c8d13d9a511ab8f2c1243a4c58ca393c813.zip |
Fix python wrapper (#1532)
* Fixes to the Python interface for accessing field and particle data
* In Python wrapper, cleaned up how ngrow is handled
Diffstat (limited to 'Source/Python')
-rw-r--r-- | Source/Python/WarpXWrappers.cpp | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/Source/Python/WarpXWrappers.cpp b/Source/Python/WarpXWrappers.cpp index ac0f60449..cc42f8cd7 100644 --- a/Source/Python/WarpXWrappers.cpp +++ b/Source/Python/WarpXWrappers.cpp @@ -19,12 +19,15 @@ namespace { - amrex::Real** getMultiFabPointers(const amrex::MultiFab& mf, int *num_boxes, int *ncomps, int *ngrow, int **shapes) + amrex::Real** getMultiFabPointers(const amrex::MultiFab& mf, int *num_boxes, int *ncomps, int **ngrowvect, int **shapes) { *ncomps = mf.nComp(); - *ngrow = mf.nGrow(); *num_boxes = mf.local_size(); int shapesize = AMREX_SPACEDIM; + *ngrowvect = static_cast<int*>(malloc(sizeof(int)*shapesize)); + for (int j = 0; j < AMREX_SPACEDIM; ++j) { + (*ngrowvect)[j] = mf.nGrow(j); + } if (mf.nComp() > 1) shapesize += 1; *shapes = static_cast<int*>(malloc(sizeof(int)*shapesize * (*num_boxes))); auto data = @@ -43,9 +46,13 @@ namespace } return data; } - int* getMultiFabLoVects(const amrex::MultiFab& mf, int *num_boxes, int *ngrow) + int* getMultiFabLoVects(const amrex::MultiFab& mf, int *num_boxes, int **ngrowvect) { - *ngrow = mf.nGrow(); + int shapesize = AMREX_SPACEDIM; + *ngrowvect = static_cast<int*>(malloc(sizeof(int)*shapesize)); + for (int j = 0; j < AMREX_SPACEDIM; ++j) { + (*ngrowvect)[j] = mf.nGrow(j); + } *num_boxes = mf.local_size(); int *loVects = (int*) malloc((*num_boxes)*AMREX_SPACEDIM * sizeof(int)); @@ -246,16 +253,16 @@ extern "C" #define WARPX_GET_FIELD(FIELD, GETTER) \ amrex::Real** FIELD(int lev, int direction, \ - int *return_size, int *ncomps, int *ngrow, int **shapes) { \ + int *return_size, int *ncomps, int **ngrowvect, int **shapes) { \ auto & mf = GETTER(lev, direction); \ - return getMultiFabPointers(mf, return_size, ncomps, ngrow, shapes); \ + return getMultiFabPointers(mf, return_size, ncomps, ngrowvect, shapes); \ } #define WARPX_GET_LOVECTS(FIELD, GETTER) \ int* FIELD(int lev, int direction, \ - int *return_size, int *ngrow) { \ + int *return_size, int **ngrowvect) { \ auto & mf = GETTER(lev, direction); \ - return getMultiFabLoVects(mf, return_size, ngrow); \ + return getMultiFabLoVects(mf, return_size, ngrowvect); \ } WARPX_GET_FIELD(warpx_getEfield, WarpX::GetInstance().getEfield) @@ -295,16 +302,16 @@ extern "C" #define WARPX_GET_SCALAR(SCALAR, GETTER) \ amrex::Real** SCALAR(int lev, \ - int *return_size, int *ncomps, int *ngrow, int **shapes) { \ + int *return_size, int *ncomps, int **ngrowvect, int **shapes) { \ auto & mf = GETTER(lev); \ - return getMultiFabPointers(mf, return_size, ncomps, ngrow, shapes); \ + return getMultiFabPointers(mf, return_size, ncomps, ngrowvect, shapes); \ } #define WARPX_GET_LOVECTS_SCALAR(SCALAR, GETTER) \ int* SCALAR(int lev, \ - int *return_size, int *ngrow) { \ + int *return_size, int **ngrowvect) { \ auto & mf = GETTER(lev); \ - return getMultiFabLoVects(mf, return_size, ngrow); \ + return getMultiFabLoVects(mf, return_size, ngrowvect); \ } WARPX_GET_SCALAR(warpx_getChargeDensityCP, WarpX::GetInstance().getrho_cp) @@ -315,11 +322,11 @@ extern "C" #define WARPX_GET_FIELD_PML(FIELD, GETTER) \ amrex::Real** FIELD(int lev, int direction, \ - int *return_size, int *ncomps, int *ngrow, int **shapes) { \ + int *return_size, int *ncomps, int **ngrowvect, int **shapes) { \ auto * pml = WarpX::GetInstance().GetPML(lev); \ if (pml) { \ auto & mf = *(pml->GETTER()[direction]); \ - return getMultiFabPointers(mf, return_size, ncomps, ngrow, shapes); \ + return getMultiFabPointers(mf, return_size, ncomps, ngrowvect, shapes); \ } else { \ return nullptr; \ } \ @@ -327,11 +334,11 @@ extern "C" #define WARPX_GET_LOVECTS_PML(FIELD, GETTER) \ int* FIELD(int lev, int direction, \ - int *return_size, int *ngrow) { \ + int *return_size, int **ngrowvect) { \ auto * pml = WarpX::GetInstance().GetPML(lev); \ if (pml) { \ auto & mf = *(pml->GETTER()[direction]); \ - return getMultiFabLoVects(mf, return_size, ngrow); \ + return getMultiFabLoVects(mf, return_size, ngrowvect); \ } else { \ return nullptr; \ } \ |