aboutsummaryrefslogtreecommitdiff
path: root/Source/Python/WarpXWrappers.cpp
diff options
context:
space:
mode:
authorGravatar Remi Lehe <remi.lehe@normalesup.org> 2019-12-20 06:00:47 -0800
committerGravatar GitHub <noreply@github.com> 2019-12-20 06:00:47 -0800
commit3bafba4f532c06df8eac1f896415aba9be47f98c (patch)
tree150ed3abf4a54959b6ae4266ac54b09f52359a3b /Source/Python/WarpXWrappers.cpp
parent000a6b27ff59f3ef9c97f0e5324433e20f06b7a9 (diff)
parentf225e540585be9fdde0f0520215f5f01a5efe38d (diff)
downloadWarpX-3bafba4f532c06df8eac1f896415aba9be47f98c.tar.gz
WarpX-3bafba4f532c06df8eac1f896415aba9be47f98c.tar.zst
WarpX-3bafba4f532c06df8eac1f896415aba9be47f98c.zip
Merge pull request #568 from dpgrote/pml_python
Adds Python wrapper of PML fields
Diffstat (limited to 'Source/Python/WarpXWrappers.cpp')
-rw-r--r--Source/Python/WarpXWrappers.cpp181
1 files changed, 74 insertions, 107 deletions
diff --git a/Source/Python/WarpXWrappers.cpp b/Source/Python/WarpXWrappers.cpp
index 3074b1990..54dfe1955 100644
--- a/Source/Python/WarpXWrappers.cpp
+++ b/Source/Python/WarpXWrappers.cpp
@@ -208,113 +208,80 @@ extern "C"
return myspc.TotalNumberOfParticles();
}
- amrex::Real** warpx_getEfield(int lev, int direction,
- int *return_size, int *ncomps, int *ngrow, int **shapes) {
- auto & mf = WarpX::GetInstance().getEfield(lev, direction);
- return getMultiFabPointers(mf, return_size, ncomps, ngrow, shapes);
- }
-
- int* warpx_getEfieldLoVects(int lev, int direction,
- int *return_size, int *ngrow) {
- auto & mf = WarpX::GetInstance().getEfield(lev, direction);
- return getMultiFabLoVects(mf, return_size, ngrow);
- }
-
- amrex::Real** warpx_getEfieldCP(int lev, int direction,
- int *return_size, int *ncomps, int *ngrow, int **shapes) {
- auto & mf = WarpX::GetInstance().getEfield_cp(lev, direction);
- return getMultiFabPointers(mf, return_size, ncomps, ngrow, shapes);
- }
-
- int* warpx_getEfieldCPLoVects(int lev, int direction,
- int *return_size, int *ngrow) {
- auto & mf = WarpX::GetInstance().getEfield_cp(lev, direction);
- return getMultiFabLoVects(mf, return_size, ngrow);
- }
-
- amrex::Real** warpx_getEfieldFP(int lev, int direction,
- int *return_size, int *ncomps, int *ngrow, int **shapes) {
- auto & mf = WarpX::GetInstance().getEfield_fp(lev, direction);
- return getMultiFabPointers(mf, return_size, ncomps, ngrow, shapes);
- }
-
- int* warpx_getEfieldFPLoVects(int lev, int direction,
- int *return_size, int *ngrow) {
- auto & mf = WarpX::GetInstance().getEfield_fp(lev, direction);
- return getMultiFabLoVects(mf, return_size, ngrow);
- }
-
- amrex::Real** warpx_getBfield(int lev, int direction,
- int *return_size, int *ncomps, int *ngrow, int **shapes) {
- auto & mf = WarpX::GetInstance().getBfield(lev, direction);
- return getMultiFabPointers(mf, return_size, ncomps, ngrow, shapes);
- }
-
- int* warpx_getBfieldLoVects(int lev, int direction,
- int *return_size, int *ngrow) {
- auto & mf = WarpX::GetInstance().getBfield(lev, direction);
- return getMultiFabLoVects(mf, return_size, ngrow);
- }
-
- amrex::Real** warpx_getBfieldCP(int lev, int direction,
- int *return_size, int *ncomps, int *ngrow, int **shapes) {
- auto & mf = WarpX::GetInstance().getBfield_cp(lev, direction);
- return getMultiFabPointers(mf, return_size, ncomps, ngrow, shapes);
- }
-
- int* warpx_getBfieldCPLoVects(int lev, int direction,
- int *return_size, int *ngrow) {
- auto & mf = WarpX::GetInstance().getBfield_cp(lev, direction);
- return getMultiFabLoVects(mf, return_size, ngrow);
- }
-
- amrex::Real** warpx_getBfieldFP(int lev, int direction,
- int *return_size, int *ncomps, int *ngrow, int **shapes) {
- auto & mf = WarpX::GetInstance().getBfield_fp(lev, direction);
- return getMultiFabPointers(mf, return_size, ncomps, ngrow, shapes);
- }
-
- int* warpx_getBfieldFPLoVects(int lev, int direction,
- int *return_size, int *ngrow) {
- auto & mf = WarpX::GetInstance().getBfield_fp(lev, direction);
- return getMultiFabLoVects(mf, return_size, ngrow);
- }
-
- amrex::Real** warpx_getCurrentDensity(int lev, int direction,
- int *return_size, int *ncomps, int *ngrow, int **shapes) {
- auto & mf = WarpX::GetInstance().getcurrent(lev, direction);
- return getMultiFabPointers(mf, return_size, ncomps, ngrow, shapes);
- }
-
- int* warpx_getCurrentDensityLoVects(int lev, int direction,
- int *return_size, int *ngrow) {
- auto & mf = WarpX::GetInstance().getcurrent(lev, direction);
- return getMultiFabLoVects(mf, return_size, ngrow);
- }
-
- amrex::Real** warpx_getCurrentDensityCP(int lev, int direction,
- int *return_size, int *ncomps, int *ngrow, int **shapes) {
- auto & mf = WarpX::GetInstance().getcurrent_cp(lev, direction);
- return getMultiFabPointers(mf, return_size, ncomps, ngrow, shapes);
- }
-
- int* warpx_getCurrentDensityCPLoVects(int lev, int direction,
- int *return_size, int *ngrow) {
- auto & mf = WarpX::GetInstance().getcurrent_cp(lev, direction);
- return getMultiFabLoVects(mf, return_size, ngrow);
- }
-
- amrex::Real** warpx_getCurrentDensityFP(int lev, int direction,
- int *return_size, int *ncomps, int *ngrow, int **shapes) {
- auto & mf = WarpX::GetInstance().getcurrent_fp(lev, direction);
- return getMultiFabPointers(mf, return_size, ncomps, ngrow, shapes);
- }
-
- int* warpx_getCurrentDensityFPLoVects(int lev, int direction,
- int *return_size, int *ngrow) {
- auto & mf = WarpX::GetInstance().getcurrent_fp(lev, direction);
- return getMultiFabLoVects(mf, return_size, ngrow);
- }
+#define WARPX_GET_FIELD(FIELD, GETTER) \
+ amrex::Real** FIELD(int lev, int direction, \
+ int *return_size, int *ncomps, int *ngrow, int **shapes) { \
+ auto & mf = GETTER(lev, direction); \
+ return getMultiFabPointers(mf, return_size, ncomps, ngrow, shapes); \
+ }
+
+#define WARPX_GET_LOVECTS(FIELD, GETTER) \
+ int* FIELD(int lev, int direction, \
+ int *return_size, int *ngrow) { \
+ auto & mf = GETTER(lev, direction); \
+ return getMultiFabLoVects(mf, return_size, ngrow); \
+ }
+
+ WARPX_GET_FIELD(warpx_getEfield, WarpX::GetInstance().getEfield);
+ WARPX_GET_FIELD(warpx_getEfieldCP, WarpX::GetInstance().getEfield_cp);
+ WARPX_GET_FIELD(warpx_getEfieldFP, WarpX::GetInstance().getEfield_fp);
+
+ WARPX_GET_FIELD(warpx_getBfield, WarpX::GetInstance().getBfield);
+ WARPX_GET_FIELD(warpx_getBfieldCP, WarpX::GetInstance().getBfield_cp);
+ WARPX_GET_FIELD(warpx_getBfieldFP, WarpX::GetInstance().getBfield_fp);
+
+ WARPX_GET_FIELD(warpx_getCurrentDensity, WarpX::GetInstance().getcurrent);
+ WARPX_GET_FIELD(warpx_getCurrentDensityCP, WarpX::GetInstance().getcurrent_cp);
+ WARPX_GET_FIELD(warpx_getCurrentDensityFP, WarpX::GetInstance().getcurrent_fp);
+
+ WARPX_GET_LOVECTS(warpx_getEfieldLoVects, WarpX::GetInstance().getEfield);
+ WARPX_GET_LOVECTS(warpx_getEfieldCPLoVects, WarpX::GetInstance().getEfield_cp);
+ WARPX_GET_LOVECTS(warpx_getEfieldFPLoVects, WarpX::GetInstance().getEfield_fp);
+
+ WARPX_GET_LOVECTS(warpx_getBfieldLoVects, WarpX::GetInstance().getBfield);
+ WARPX_GET_LOVECTS(warpx_getBfieldCPLoVects, WarpX::GetInstance().getBfield_cp);
+ WARPX_GET_LOVECTS(warpx_getBfieldFPLoVects, WarpX::GetInstance().getBfield_fp);
+
+ WARPX_GET_LOVECTS(warpx_getCurrentDensityLoVects, WarpX::GetInstance().getcurrent);
+ WARPX_GET_LOVECTS(warpx_getCurrentDensityCPLoVects, WarpX::GetInstance().getcurrent_cp);
+ WARPX_GET_LOVECTS(warpx_getCurrentDensityFPLoVects, WarpX::GetInstance().getcurrent_fp);
+
+#define WARPX_GET_FIELD_PML(FIELD, GETTER) \
+ amrex::Real** FIELD(int lev, int direction, \
+ int *return_size, int *ncomps, int *ngrow, int **shapes) { \
+ auto * pml = WarpX::GetInstance().GetPML(lev); \
+ if (pml) { \
+ auto & mf = *(pml->GETTER()[direction]); \
+ return getMultiFabPointers(mf, return_size, ncomps, ngrow, shapes); \
+ } else { \
+ return nullptr; \
+ } \
+ }
+
+#define WARPX_GET_LOVECTS_PML(FIELD, GETTER) \
+ int* FIELD(int lev, int direction, \
+ int *return_size, int *ngrow) { \
+ auto * pml = WarpX::GetInstance().GetPML(lev); \
+ if (pml) { \
+ auto & mf = *(pml->GETTER()[direction]); \
+ return getMultiFabLoVects(mf, return_size, ngrow); \
+ } else { \
+ return nullptr; \
+ } \
+ }
+
+ WARPX_GET_FIELD_PML(warpx_getEfieldCP_PML, GetE_cp);
+ WARPX_GET_FIELD_PML(warpx_getEfieldFP_PML, GetE_fp);
+ WARPX_GET_FIELD_PML(warpx_getBfieldCP_PML, GetB_cp);
+ WARPX_GET_FIELD_PML(warpx_getBfieldFP_PML, GetB_fp);
+ WARPX_GET_FIELD_PML(warpx_getCurrentDensityCP_PML, Getj_cp);
+ WARPX_GET_FIELD_PML(warpx_getCurrentDensityFP_PML, Getj_fp);
+ WARPX_GET_LOVECTS_PML(warpx_getEfieldCPLoVects_PML, GetE_cp);
+ WARPX_GET_LOVECTS_PML(warpx_getEfieldFPLoVects_PML, GetE_fp);
+ WARPX_GET_LOVECTS_PML(warpx_getBfieldCPLoVects_PML, GetB_cp);
+ WARPX_GET_LOVECTS_PML(warpx_getBfieldFPLoVects_PML, GetB_fp);
+ WARPX_GET_LOVECTS_PML(warpx_getCurrentDensityCPLoVects_PML, Getj_cp);
+ WARPX_GET_LOVECTS_PML(warpx_getCurrentDensityFPLoVects_PML, Getj_fp);
amrex::ParticleReal** warpx_getParticleStructs(int speciesnumber, int lev,
int* num_tiles, int** particles_per_tile) {