aboutsummaryrefslogtreecommitdiff
path: root/Source/Utils
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
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 '')
-rw-r--r--Source/Utils/CMakeLists.txt1
-rw-r--r--Source/Utils/Make.package1
-rw-r--r--Source/Utils/RelativeCellPosition.H31
-rw-r--r--Source/Utils/RelativeCellPosition.cpp29
4 files changed, 62 insertions, 0 deletions
diff --git a/Source/Utils/CMakeLists.txt b/Source/Utils/CMakeLists.txt
index bd500e4e5..ce785cc33 100644
--- a/Source/Utils/CMakeLists.txt
+++ b/Source/Utils/CMakeLists.txt
@@ -4,6 +4,7 @@ target_sources(WarpX
CoarsenMR.cpp
Interpolate.cpp
IntervalsParser.cpp
+ RelativeCellPosition.cpp
WarpXAlgorithmSelection.cpp
WarpXMovingWindow.cpp
WarpXTagging.cpp
diff --git a/Source/Utils/Make.package b/Source/Utils/Make.package
index 8abad53fd..08b9aa3a9 100644
--- a/Source/Utils/Make.package
+++ b/Source/Utils/Make.package
@@ -6,5 +6,6 @@ CEXE_sources += CoarsenIO.cpp
CEXE_sources += CoarsenMR.cpp
CEXE_sources += Interpolate.cpp
CEXE_sources += IntervalsParser.cpp
+CEXE_sources += RelativeCellPosition.cpp
VPATH_LOCATIONS += $(WARPX_HOME)/Source/Utils
diff --git a/Source/Utils/RelativeCellPosition.H b/Source/Utils/RelativeCellPosition.H
new file mode 100644
index 000000000..15ec06707
--- /dev/null
+++ b/Source/Utils/RelativeCellPosition.H
@@ -0,0 +1,31 @@
+/* Copyright 2020 Axel Huebl
+ *
+ * This file is part of WarpX.
+ *
+ * License: BSD-3-Clause-LBNL
+ */
+#ifndef WARPX_RELATIVE_CELL_POSITION_H_
+#define WARPX_RELATIVE_CELL_POSITION_H_
+
+#include "WarpX.H"
+
+#include <AMReX_MultiFab.H>
+
+#include <vector>
+
+
+namespace utils
+{
+ /** Get the Relative Cell Position of Values in an MultiFab
+ *
+ * Translate the IndexType of a given MultiFab into a position relative to
+ * the lower corner of a cell.
+ *
+ * @param[in] mf the amrex::MultiFab to get relative cell positions for
+ * @return relative position to the lower corner, scaled to cell size [0.0:1.0)
+ */
+ std::vector< double >
+ getRelativeCellPosition (amrex::MultiFab const& mf);
+}
+
+#endif // WARPX_RELATIVE_CELL_POSITION_H_
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;
+}