From d3e705e80911e56452b4e88a7b767dd1c535c09f Mon Sep 17 00:00:00 2001
From: Achim Gsell <achim.gsell@psi.ch>
Date: Wed, 22 Jul 2020 17:52:46 +0200
Subject: [PATCH] bugfix in reading fieldmaps in H5hut format

- used index scheme was C but FORTRAN must be used!
---
 src/Classic/Fields/FM3DH5Block.cpp              | 16 ++++++++--------
 src/Classic/Fields/FM3DH5BlockBase.h            | 11 +++++++++--
 src/Classic/Fields/FM3DH5Block_nonscale.cpp     |  4 +++-
 src/Classic/Fields/FM3DMagnetoStaticH5Block.cpp |  4 +++-
 4 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/src/Classic/Fields/FM3DH5Block.cpp b/src/Classic/Fields/FM3DH5Block.cpp
index 173f59581..640d24c8e 100644
--- a/src/Classic/Fields/FM3DH5Block.cpp
+++ b/src/Classic/Fields/FM3DH5Block.cpp
@@ -65,7 +65,9 @@ void FM3DH5Block::readMap (
         &(FieldstrengthHz_m[0]));
 
     closeFile ();
-    INFOMSG (level3 << typeset_msg("fieldmap '" + Filename_m  + "' read", "info")
+    INFOMSG (level3
+             << typeset_msg("3d dynamic fieldmap '"
+                            + Filename_m  + "' (H5hut format) read", "info")
              << endl);
 }
 
@@ -81,8 +83,9 @@ void FM3DH5Block::freeMap (
     FieldstrengthHy_m.clear ();
     FieldstrengthHz_m.clear ();
 
-    INFOMSG(level3 << typeset_msg("freed fieldmap '" + Filename_m + "'", "info")
-            << endl);
+    INFOMSG (level3
+             << typeset_msg ("freed fieldmap '" + Filename_m + "'", "info")
+             << endl);
 }
 
 bool FM3DH5Block::getFieldstrength (
@@ -93,11 +96,8 @@ bool FM3DH5Block::getFieldstrength (
     if (!isInside(R)) {
         return true;
     }
-    E += interpolateTrilinearly (
-        FieldstrengthEx_m, FieldstrengthEy_m, FieldstrengthEz_m, R);
-    B += interpolateTrilinearly (
-        FieldstrengthHx_m, FieldstrengthHy_m, FieldstrengthHz_m, R);
-
+    E += interpolateTrilinearly (FieldstrengthEx_m, FieldstrengthEy_m, FieldstrengthEz_m, R);
+    B += interpolateTrilinearly (FieldstrengthHx_m, FieldstrengthHy_m, FieldstrengthHz_m, R);
     return false;
 }
 
diff --git a/src/Classic/Fields/FM3DH5BlockBase.h b/src/Classic/Fields/FM3DH5BlockBase.h
index d641c2e7f..7402b2ce4 100644
--- a/src/Classic/Fields/FM3DH5BlockBase.h
+++ b/src/Classic/Fields/FM3DH5BlockBase.h
@@ -137,13 +137,20 @@ protected:
         {}
     };
 
+    /*
+      The 3-dimensional fieldmaps are stored in a 1-dimensional arrays.
+      Please note that the FORTRAN indexing scheme is used in H5hut!
+
+      This functions maps the 3-dimensional index (i, j, k) to the
+      corresponding index in the 1-dimensional array.
+     */
     unsigned long getIndex (
         unsigned int i,
         unsigned int j,
         unsigned int k
         ) const {
-        unsigned long result = i + j * num_gridpx_m;
-        result = k + result * num_gridpz_m;
+        unsigned long result = j + k * num_gridpy_m;
+        result = i + result * num_gridpx_m;
         
         return result;
     }
diff --git a/src/Classic/Fields/FM3DH5Block_nonscale.cpp b/src/Classic/Fields/FM3DH5Block_nonscale.cpp
index 5fbf2dd5b..bbfed45e6 100644
--- a/src/Classic/Fields/FM3DH5Block_nonscale.cpp
+++ b/src/Classic/Fields/FM3DH5Block_nonscale.cpp
@@ -77,7 +77,9 @@ void FM3DH5Block_nonscale::readMap (
         FieldstrengthHy_m[i] *= 1.0e6 * Physics::mu_0 ;
         FieldstrengthHz_m[i] *= 1.0e6 * Physics::mu_0 ;
     }
-    INFOMSG (level3 << typeset_msg("fieldmap '" + Filename_m  + "' read", "info")
+    INFOMSG (level3
+             << typeset_msg("3d dynamic (non-scaled) fieldmap '"
+                            + Filename_m  + "' (H5hut format) read", "info")
              << endl);
 }
 
diff --git a/src/Classic/Fields/FM3DMagnetoStaticH5Block.cpp b/src/Classic/Fields/FM3DMagnetoStaticH5Block.cpp
index 49baa4e43..a73c4a944 100644
--- a/src/Classic/Fields/FM3DMagnetoStaticH5Block.cpp
+++ b/src/Classic/Fields/FM3DMagnetoStaticH5Block.cpp
@@ -67,7 +67,9 @@ void FM3DMagnetoStaticH5Block::readMap (
         &(FieldstrengthBz_m[0]));
 
     closeFile ();
-    INFOMSG (level3 << typeset_msg("fieldmap '" + Filename_m  + "' read", "info")
+    INFOMSG (level3
+             << typeset_msg("3d magneto static fieldmap '"
+                            + Filename_m  + "' (H5hut format) read", "info")
              << endl);
 }
 void FM3DMagnetoStaticH5Block::freeMap (
-- 
GitLab