aboutsummaryrefslogtreecommitdiff
path: root/Source/Utils/RelativeCellPosition.cpp
diff options
context:
space:
mode:
authorGravatar Axel Huebl <axel.huebl@plasma.ninja> 2020-09-08 09:53:02 -0700
committerGravatar GitHub <noreply@github.com> 2020-09-08 09:53:02 -0700
commitd3deb238aee2fca44a099ec45c08dc265223ca52 (patch)
tree6813c6f0a47f4282b9d0c7aca94925cbd633db05 /Source/Utils/RelativeCellPosition.cpp
parentb452f85552c7fe07289f8e1033b7a8b631744eb5 (diff)
downloadWarpX-d3deb238aee2fca44a099ec45c08dc265223ca52.tar.gz
WarpX-d3deb238aee2fca44a099ec45c08dc265223ca52.tar.zst
WarpX-d3deb238aee2fca44a099ec45c08dc265223ca52.zip
openPMD: Generalize Mesh Position (#1296)
This adds a small utility that returns the relative in-cell position of values on each cell depending on an `amrex::MultiFab`'s `Box`'s `IndexType`. This does not change the output of openPMD yet, since we spatially and temporally center fields before output, but makes the routines more general overall for future use.
Diffstat (limited to 'Source/Utils/RelativeCellPosition.cpp')
-rw-r--r--Source/Utils/RelativeCellPosition.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/Source/Utils/RelativeCellPosition.cpp b/Source/Utils/RelativeCellPosition.cpp
new file mode 100644
index 000000000..58c35fa52
--- /dev/null
+++ b/Source/Utils/RelativeCellPosition.cpp
@@ -0,0 +1,29 @@
+/* Copyright 2020 Axel Huebl
+ *
+ * This file is part of WarpX.
+ *
+ * License: BSD-3-Clause-LBNL
+ */
+#include "RelativeCellPosition.H"
+
+#include <AMReX_IndexType.H>
+
+
+std::vector< double >
+utils::getRelativeCellPosition(amrex::MultiFab const& mf)
+{
+ amrex::IndexType const idx_type = mf.ixType();
+
+ std::vector< double > relative_position(AMREX_SPACEDIM, 0.0);
+
+ // amrex::CellIndex::CELL means: 0.5 from lower corner for that index/direction
+ // amrex::CellIndex::NODE means: at corner for that index/direction
+ // WarpX::do_nodal means: all indices/directions on CellIndex::NODE
+ for (int d = 0; d < AMREX_SPACEDIM; d++)
+ {
+ if (idx_type.cellCentered(d))
+ relative_position.at(d) = 0.5;
+ }
+
+ return relative_position;
+}