diff --git a/regtest/basic/rt77/DERIV_A.reference b/regtest/basic/rt77/DERIV_A.reference
index 3d59243a02c930fa6172557c299c4eb44f122058..7b65dabad368787e6fdc66ebe2bcad8ffce3b9df 100644
--- a/regtest/basic/rt77/DERIV_A.reference
+++ b/regtest/basic/rt77/DERIV_A.reference
@@ -2,7 +2,7 @@
  0.000000 0   37.9
  0.000000 1   23.2
  0.000000 2    7.0
- 0.000000 3    6.7
+ 0.000000 3    6.6
  0.000000 4    9.9
  0.000000 5    0.8
  0.000000 6    0.6
@@ -11,7 +11,7 @@
  0.000000 9   -1.5
  0.000000 10    1.2
  0.000000 11    1.5
- 0.000000 12   -1.9
+ 0.000000 12   -2.0
  0.000000 13    3.7
  0.000000 14   -2.8
  0.000000 15  -12.3
@@ -20,7 +20,7 @@
  0.000000 18  -13.7
  0.000000 19   16.2
  0.000000 20   -5.1
- 0.000000 21   -9.9
+ 0.000000 21  -10.0
  0.000000 22   -4.4
  0.000000 23   -1.1
  0.000000 24  -13.3
@@ -110,7 +110,7 @@
  0.000000 108   23.3
  0.000000 109  -27.9
  0.000000 110    5.4
- 0.000000 111   22.3
+ 0.000000 111   22.4
  0.000000 112  -33.6
  0.000000 113   13.8
  0.000000 114    3.5
@@ -170,7 +170,7 @@
  0.000000 168    9.8
  0.000000 169   40.4
  0.000000 170   -3.2
- 0.000000 171  -15.2
+ 0.000000 171  -15.1
  0.000000 172    1.2
  0.000000 173   17.8
  0.000000 174  -25.1
@@ -183,7 +183,7 @@
  0.000000 181   -4.2
  0.000000 182   22.3
  0.000000 183   -4.2
- 0.000000 184  212.6
+ 0.000000 184  212.7
  0.000000 185   17.6
  0.000000 186   22.3
  0.000000 187   17.6
@@ -285,7 +285,7 @@
  0.004000 94   -1.7
  0.004000 95   -3.6
  0.004000 96   -7.7
- 0.004000 97   -2.9
+ 0.004000 97   -3.0
  0.004000 98   -5.6
  0.004000 99   -7.3
  0.004000 100   -5.4
@@ -376,10 +376,10 @@
  0.004000 185   19.0
  0.004000 186    9.6
  0.004000 187   19.0
- 0.004000 188  169.9
+ 0.004000 188  170.0
  0.008000 0   37.5
  0.008000 1   26.8
- 0.008000 2   19.5
+ 0.008000 2   19.6
  0.008000 3   11.6
  0.008000 4   15.9
  0.008000 5   -4.5
@@ -402,7 +402,7 @@
  0.008000 22   -7.6
  0.008000 23   -0.9
  0.008000 24  -20.0
- 0.008000 25   -7.8
+ 0.008000 25   -7.7
  0.008000 26   28.8
  0.008000 27    2.2
  0.008000 28    5.5
@@ -520,7 +520,7 @@
  0.008000 140  -16.2
  0.008000 141   30.2
  0.008000 142    8.3
- 0.008000 143   -2.3
+ 0.008000 143   -2.2
  0.008000 144   -3.9
  0.008000 145    2.7
  0.008000 146    3.0
@@ -557,15 +557,15 @@
  0.008000 177  -11.2
  0.008000 178   -0.1
  0.008000 179   32.7
- 0.008000 180  164.5
+ 0.008000 180  164.6
  0.008000 181   -6.2
  0.008000 182   15.3
  0.008000 183   -6.2
- 0.008000 184  206.4
- 0.008000 185   13.8
+ 0.008000 184  206.5
+ 0.008000 185   13.9
  0.008000 186   15.3
- 0.008000 187   13.8
- 0.008000 188  172.8
+ 0.008000 187   13.9
+ 0.008000 188  172.9
  0.012000 0   33.2
  0.012000 1   31.0
  0.012000 2   27.8
@@ -604,7 +604,7 @@
  0.012000 35   -3.0
  0.012000 36  -11.2
  0.012000 37   15.7
- 0.012000 38  -25.5
+ 0.012000 38  -25.6
  0.012000 39  -23.1
  0.012000 40   36.9
  0.012000 41   23.3
@@ -636,8 +636,8 @@
  0.012000 67   -6.3
  0.012000 68  -35.1
  0.012000 69    6.0
- 0.012000 70  -26.7
- 0.012000 71  -45.5
+ 0.012000 70  -26.8
+ 0.012000 71  -45.6
  0.012000 72   -7.5
  0.012000 73  -11.3
  0.012000 74  -13.9
@@ -714,7 +714,7 @@
  0.012000 145  -10.2
  0.012000 146    3.5
  0.012000 147   12.2
- 0.012000 148  -11.5
+ 0.012000 148  -11.4
  0.012000 149    5.9
  0.012000 150   26.4
  0.012000 151  -12.7
@@ -745,16 +745,16 @@
  0.012000 176   20.9
  0.012000 177   -8.7
  0.012000 178   -4.1
- 0.012000 179   39.2
+ 0.012000 179   39.3
  0.012000 180  155.5
  0.012000 181  -15.7
  0.012000 182   16.4
  0.012000 183  -15.7
- 0.012000 184  185.0
+ 0.012000 184  185.1
  0.012000 185   26.7
  0.012000 186   16.4
  0.012000 187   26.7
- 0.012000 188  178.3
+ 0.012000 188  178.4
  0.016000 0   26.5
  0.016000 1   28.9
  0.016000 2    5.9
@@ -779,7 +779,7 @@
  0.016000 21   -7.4
  0.016000 22   -6.1
  0.016000 23    1.1
- 0.016000 24  -11.4
+ 0.016000 24  -11.5
  0.016000 25   -1.8
  0.016000 26   24.8
  0.016000 27    3.3
@@ -881,7 +881,7 @@
  0.016000 123   10.5
  0.016000 124   32.0
  0.016000 125  -21.1
- 0.016000 126   -3.4
+ 0.016000 126   -3.3
  0.016000 127  -17.6
  0.016000 128  -20.4
  0.016000 129   10.6
@@ -905,9 +905,9 @@
  0.016000 147   16.8
  0.016000 148  -12.5
  0.016000 149   21.6
- 0.016000 150   28.1
+ 0.016000 150   28.2
  0.016000 151  -11.0
- 0.016000 152   23.2
+ 0.016000 152   23.3
  0.016000 153   -8.7
  0.016000 154    3.1
  0.016000 155   11.5
@@ -924,7 +924,7 @@
  0.016000 166   27.5
  0.016000 167   -1.2
  0.016000 168    5.5
- 0.016000 169   45.8
+ 0.016000 169   45.9
  0.016000 170   -7.0
  0.016000 171  -13.3
  0.016000 172   -0.1
@@ -939,11 +939,11 @@
  0.016000 181   -6.6
  0.016000 182   10.3
  0.016000 183   -6.6
- 0.016000 184  183.4
+ 0.016000 184  183.5
  0.016000 185   23.4
  0.016000 186   10.3
  0.016000 187   23.4
- 0.016000 188  175.1
+ 0.016000 188  175.2
  0.020000 0   28.6
  0.020000 1   31.2
  0.020000 2   33.5
@@ -998,8 +998,8 @@
  0.020000 51   10.7
  0.020000 52   16.1
  0.020000 53  -16.9
- 0.020000 54  -15.8
- 0.020000 55   25.1
+ 0.020000 54  -15.9
+ 0.020000 55   25.0
  0.020000 56   -2.6
  0.020000 57   -9.4
  0.020000 58    5.6
@@ -1024,7 +1024,7 @@
  0.020000 77   -8.1
  0.020000 78   -8.0
  0.020000 79  -12.1
- 0.020000 80    5.6
+ 0.020000 80    5.5
  0.020000 81  -11.2
  0.020000 82   -9.6
  0.020000 83    7.9
@@ -1070,7 +1070,7 @@
  0.020000 123   19.0
  0.020000 124   22.2
  0.020000 125  -12.6
- 0.020000 126   13.6
+ 0.020000 126   13.7
  0.020000 127  -15.7
  0.020000 128  -38.0
  0.020000 129   11.2
@@ -1116,7 +1116,7 @@
  0.020000 169   43.0
  0.020000 170   -6.6
  0.020000 171  -11.7
- 0.020000 172    4.2
+ 0.020000 172    4.3
  0.020000 173   15.0
  0.020000 174  -19.3
  0.020000 175   -3.1
diff --git a/regtest/basic/rt77/DERIV_N.reference b/regtest/basic/rt77/DERIV_N.reference
index e0ed91e9a506b576bb2f85bc3b8449bffcb101f4..a2fcda2760e70ed36304e644e86223de7310df89 100644
--- a/regtest/basic/rt77/DERIV_N.reference
+++ b/regtest/basic/rt77/DERIV_N.reference
@@ -2,7 +2,7 @@
  0.000000 0   37.9
  0.000000 1   23.2
  0.000000 2    7.0
- 0.000000 3    6.7
+ 0.000000 3    6.6
  0.000000 4    9.9
  0.000000 5    0.8
  0.000000 6    0.6
@@ -11,7 +11,7 @@
  0.000000 9   -1.5
  0.000000 10    1.2
  0.000000 11    1.5
- 0.000000 12   -1.9
+ 0.000000 12   -2.0
  0.000000 13    3.7
  0.000000 14   -2.8
  0.000000 15  -12.3
@@ -20,7 +20,7 @@
  0.000000 18  -13.7
  0.000000 19   16.2
  0.000000 20   -5.1
- 0.000000 21   -9.9
+ 0.000000 21  -10.0
  0.000000 22   -4.4
  0.000000 23   -1.1
  0.000000 24  -13.3
@@ -110,7 +110,7 @@
  0.000000 108   23.3
  0.000000 109  -27.9
  0.000000 110    5.4
- 0.000000 111   22.3
+ 0.000000 111   22.4
  0.000000 112  -33.6
  0.000000 113   13.8
  0.000000 114    3.5
@@ -170,7 +170,7 @@
  0.000000 168    9.8
  0.000000 169   40.4
  0.000000 170   -3.2
- 0.000000 171  -15.2
+ 0.000000 171  -15.1
  0.000000 172    1.2
  0.000000 173   17.8
  0.000000 174  -25.1
@@ -183,7 +183,7 @@
  0.000000 181   -4.2
  0.000000 182   22.3
  0.000000 183   -4.2
- 0.000000 184  212.6
+ 0.000000 184  212.7
  0.000000 185   17.6
  0.000000 186   22.3
  0.000000 187   17.6
@@ -285,7 +285,7 @@
  0.004000 94   -1.7
  0.004000 95   -3.6
  0.004000 96   -7.7
- 0.004000 97   -2.9
+ 0.004000 97   -3.0
  0.004000 98   -5.6
  0.004000 99   -7.3
  0.004000 100   -5.4
@@ -376,10 +376,10 @@
  0.004000 185   19.0
  0.004000 186    9.6
  0.004000 187   19.0
- 0.004000 188  169.9
+ 0.004000 188  170.0
  0.008000 0   37.5
  0.008000 1   26.8
- 0.008000 2   19.5
+ 0.008000 2   19.6
  0.008000 3   11.6
  0.008000 4   15.9
  0.008000 5   -4.5
@@ -402,7 +402,7 @@
  0.008000 22   -7.6
  0.008000 23   -0.9
  0.008000 24  -20.0
- 0.008000 25   -7.8
+ 0.008000 25   -7.7
  0.008000 26   28.8
  0.008000 27    2.2
  0.008000 28    5.5
@@ -520,7 +520,7 @@
  0.008000 140  -16.2
  0.008000 141   30.2
  0.008000 142    8.3
- 0.008000 143   -2.3
+ 0.008000 143   -2.2
  0.008000 144   -3.9
  0.008000 145    2.7
  0.008000 146    3.0
@@ -557,15 +557,15 @@
  0.008000 177  -11.2
  0.008000 178   -0.1
  0.008000 179   32.7
- 0.008000 180  164.5
+ 0.008000 180  164.6
  0.008000 181   -6.2
  0.008000 182   15.3
  0.008000 183   -6.2
- 0.008000 184  206.4
- 0.008000 185   13.8
+ 0.008000 184  206.5
+ 0.008000 185   13.9
  0.008000 186   15.3
- 0.008000 187   13.8
- 0.008000 188  172.8
+ 0.008000 187   13.9
+ 0.008000 188  172.9
  0.012000 0   33.2
  0.012000 1   31.0
  0.012000 2   27.8
@@ -604,7 +604,7 @@
  0.012000 35   -3.0
  0.012000 36  -11.2
  0.012000 37   15.7
- 0.012000 38  -25.5
+ 0.012000 38  -25.6
  0.012000 39  -23.1
  0.012000 40   36.9
  0.012000 41   23.3
@@ -636,8 +636,8 @@
  0.012000 67   -6.3
  0.012000 68  -35.1
  0.012000 69    6.0
- 0.012000 70  -26.7
- 0.012000 71  -45.5
+ 0.012000 70  -26.8
+ 0.012000 71  -45.6
  0.012000 72   -7.5
  0.012000 73  -11.3
  0.012000 74  -13.9
@@ -714,7 +714,7 @@
  0.012000 145  -10.2
  0.012000 146    3.5
  0.012000 147   12.2
- 0.012000 148  -11.5
+ 0.012000 148  -11.4
  0.012000 149    5.9
  0.012000 150   26.4
  0.012000 151  -12.7
@@ -745,16 +745,16 @@
  0.012000 176   20.9
  0.012000 177   -8.7
  0.012000 178   -4.1
- 0.012000 179   39.2
+ 0.012000 179   39.3
  0.012000 180  155.5
  0.012000 181  -15.7
  0.012000 182   16.4
  0.012000 183  -15.7
- 0.012000 184  185.0
+ 0.012000 184  185.1
  0.012000 185   26.7
  0.012000 186   16.4
  0.012000 187   26.7
- 0.012000 188  178.3
+ 0.012000 188  178.4
  0.016000 0   26.5
  0.016000 1   28.9
  0.016000 2    5.9
@@ -779,7 +779,7 @@
  0.016000 21   -7.4
  0.016000 22   -6.1
  0.016000 23    1.1
- 0.016000 24  -11.4
+ 0.016000 24  -11.5
  0.016000 25   -1.8
  0.016000 26   24.8
  0.016000 27    3.3
@@ -881,7 +881,7 @@
  0.016000 123   10.5
  0.016000 124   32.0
  0.016000 125  -21.1
- 0.016000 126   -3.4
+ 0.016000 126   -3.3
  0.016000 127  -17.6
  0.016000 128  -20.4
  0.016000 129   10.6
@@ -905,9 +905,9 @@
  0.016000 147   16.8
  0.016000 148  -12.5
  0.016000 149   21.6
- 0.016000 150   28.1
+ 0.016000 150   28.2
  0.016000 151  -11.0
- 0.016000 152   23.2
+ 0.016000 152   23.3
  0.016000 153   -8.7
  0.016000 154    3.1
  0.016000 155   11.5
@@ -924,7 +924,7 @@
  0.016000 166   27.5
  0.016000 167   -1.2
  0.016000 168    5.5
- 0.016000 169   45.8
+ 0.016000 169   45.9
  0.016000 170   -7.0
  0.016000 171  -13.3
  0.016000 172   -0.1
@@ -939,11 +939,11 @@
  0.016000 181   -6.6
  0.016000 182   10.3
  0.016000 183   -6.6
- 0.016000 184  183.4
+ 0.016000 184  183.5
  0.016000 185   23.4
  0.016000 186   10.3
  0.016000 187   23.4
- 0.016000 188  175.1
+ 0.016000 188  175.2
  0.020000 0   28.6
  0.020000 1   31.2
  0.020000 2   33.5
@@ -998,8 +998,8 @@
  0.020000 51   10.7
  0.020000 52   16.1
  0.020000 53  -16.9
- 0.020000 54  -15.8
- 0.020000 55   25.1
+ 0.020000 54  -15.9
+ 0.020000 55   25.0
  0.020000 56   -2.6
  0.020000 57   -9.4
  0.020000 58    5.6
@@ -1024,7 +1024,7 @@
  0.020000 77   -8.1
  0.020000 78   -8.0
  0.020000 79  -12.1
- 0.020000 80    5.6
+ 0.020000 80    5.5
  0.020000 81  -11.2
  0.020000 82   -9.6
  0.020000 83    7.9
@@ -1070,7 +1070,7 @@
  0.020000 123   19.0
  0.020000 124   22.2
  0.020000 125  -12.6
- 0.020000 126   13.6
+ 0.020000 126   13.7
  0.020000 127  -15.7
  0.020000 128  -38.0
  0.020000 129   11.2
@@ -1116,7 +1116,7 @@
  0.020000 169   43.0
  0.020000 170   -6.6
  0.020000 171  -11.7
- 0.020000 172    4.2
+ 0.020000 172    4.3
  0.020000 173   15.0
  0.020000 174  -19.3
  0.020000 175   -3.1
diff --git a/regtest/basic/rt77/SOLV.reference b/regtest/basic/rt77/SOLV.reference
index f8772b2946d801db128e520319bf35004ccd24a0..42b52eaf1bd84371f33154c997908055be8bb1ff 100644
--- a/regtest/basic/rt77/SOLV.reference
+++ b/regtest/basic/rt77/SOLV.reference
@@ -1,7 +1,7 @@
 #! FIELDS time solva
- 0.000000 -412.031669
- 0.004000 -423.996579
- 0.008000 -423.242726
- 0.012000 -432.084461
- 0.016000 -430.550584
- 0.020000 -437.886350
+ 0.000000 -412.021877
+ 0.004000 -423.988445
+ 0.008000 -423.233137
+ 0.012000 -432.075767
+ 0.016000 -430.542565
+ 0.020000 -437.877927
diff --git a/regtest/basic/rt77/config b/regtest/basic/rt77/config
index 76cf7ed9d58777fdb5a8d45bd109acbea4503cea..3585e26de657882fd32e1b48a22c7200c9dcce94 100644
--- a/regtest/basic/rt77/config
+++ b/regtest/basic/rt77/config
@@ -1,3 +1,3 @@
-#type=driver
+type=driver
 # this is to test a different name
-#arg="--plumed plumed.dat --trajectory-stride 2 --timestep 0.002 --mf_xtc trajectory.xtc --dump-forces forces"
+arg="--plumed plumed.dat --trajectory-stride 2 --timestep 0.002 --mf_xtc trajectory.xtc --dump-forces forces --dump-forces-fmt=%.3f"
diff --git a/regtest/basic/rt77/forces.reference b/regtest/basic/rt77/forces.reference
index 7dbee3875eeba6710e62503ad9573c700f7cd6c6..e5ea174992f3727d678115482fcf571f6fe06eed 100644
--- a/regtest/basic/rt77/forces.reference
+++ b/regtest/basic/rt77/forces.reference
@@ -1,678 +1,678 @@
 111
--182.979226 -212.606423 -181.170831
-X -37.892009 -23.177254 -6.996948
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -6.650461 -9.945286 -0.819789
-X 0.000000 0.000000 0.000000
-X -0.636235 -10.259742 13.619073
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 1.547005 -1.204864 -1.535179
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 1.948448 -3.697189 2.770607
-X 12.290244 -18.992972 21.512340
-X 13.665089 -16.190172 5.074262
-X 9.949816 4.375184 1.113593
-X 13.335985 -0.416637 -23.443941
-X -0.579049 -8.639075 -13.117741
-X 0.000000 0.000000 0.000000
-X 1.820158 -7.616860 0.438561
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 12.430808 6.488505 1.554943
-X 9.309149 -18.362037 17.187453
-X 25.582918 -25.622991 -18.279500
-X 0.000000 0.000000 0.000000
-X 13.186976 0.053054 -9.076590
-X 0.000000 0.000000 0.000000
-X 33.041211 19.813826 -6.392141
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 6.654622 9.090229 8.333290
-X 9.694142 -10.648414 -5.362670
-X 26.719785 -19.304220 14.333294
-X 0.000000 0.000000 0.000000
-X 12.910710 -9.348740 21.341827
-X 0.000000 0.000000 0.000000
-X 2.279608 1.170995 42.552796
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -10.151578 8.341853 20.596796
-X -34.944806 -1.833520 36.714011
-X -17.353785 12.435082 38.573857
-X 0.000000 0.000000 0.000000
-X -0.492193 17.962447 5.346810
-X 0.000000 0.000000 0.000000
-X 4.670480 29.904026 -0.232269
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 8.044709 13.862774 -6.393420
-X 8.899042 9.810270 -5.657980
-X 0.000000 0.000000 0.000000
-X 3.704132 14.085377 -34.580899
-X 0.000000 0.000000 0.000000
-X 2.689505 2.187736 -6.681770
-X 15.946266 3.210268 10.442403
-X 0.000000 0.000000 0.000000
-X 7.964838 2.468905 7.811632
-X 0.000000 0.000000 0.000000
-X 4.084378 3.607401 6.771029
-X 0.000000 0.000000 0.000000
-X 4.685712 8.454928 11.726839
-X 0.000000 0.000000 0.000000
-X 1.873605 5.348489 -0.121260
-X -11.976337 14.676762 -13.912967
-X -23.284662 27.936892 -5.403337
-X -22.348757 33.595763 -13.765528
-X 0.000000 0.000000 0.000000
-X -3.478827 7.649790 -9.896120
-X 0.000000 0.000000 0.000000
-X 13.226171 11.731799 -41.058646
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -9.792697 -8.810320 -2.936201
-X -8.001756 -34.514106 12.519234
-X 11.481752 21.713570 17.434118
-X 0.000000 0.000000 0.000000
-X -5.374567 6.717420 18.982298
-X 0.000000 0.000000 0.000000
-X -31.441878 0.411368 28.470570
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -18.025861 -8.785660 2.764609
-X -30.101396 -28.813547 5.643501
-X -30.820121 -4.490271 -1.432521
-X 0.000000 0.000000 0.000000
-X -11.300966 4.764869 -2.216309
-X 0.000000 0.000000 0.000000
-X -12.654778 10.974953 -24.862634
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -30.825044 18.905850 -33.972537
-X 0.000000 0.000000 0.000000
-X -0.864465 2.037114 -1.968492
-X 29.126008 0.672375 -7.921787
-X -15.075149 -2.968676 3.794054
-X 0.000000 0.000000 0.000000
-X 4.013739 0.465042 -2.496473
-X 0.000000 0.000000 0.000000
-X 3.978272 -26.482495 0.147463
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -9.798652 -40.365188 3.249235
-X 0.000000 0.000000 0.000000
-X 15.150432 -1.225288 -17.769998
-X 25.072212 4.486690 -22.355959
-X 12.888104 2.303918 -40.158893
+-183.029 -212.689 -181.218
+X -37.893 -23.185 -7.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -6.650 -9.947 -0.819
+X 0.000 0.000 0.000
+X -0.635 -10.265 13.619
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 1.549 -1.209 -1.535
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 1.953 -3.702 2.775
+X 12.292 -18.995 21.514
+X 13.668 -16.195 5.076
+X 9.951 4.370 1.114
+X 13.338 -0.425 -23.444
+X -0.578 -8.647 -13.118
+X 0.000 0.000 0.000
+X 1.822 -7.618 0.440
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 12.432 6.488 1.556
+X 9.310 -18.362 17.188
+X 25.585 -25.623 -18.279
+X 0.000 0.000 0.000
+X 13.187 0.053 -9.076
+X 0.000 0.000 0.000
+X 33.044 19.815 -6.390
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 6.656 9.091 8.336
+X 9.694 -10.648 -5.363
+X 26.725 -19.297 14.342
+X 0.000 0.000 0.000
+X 12.911 -9.347 21.343
+X 0.000 0.000 0.000
+X 2.283 1.175 42.558
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -10.150 8.344 20.600
+X -34.945 -1.831 36.717
+X -17.351 12.446 38.582
+X 0.000 0.000 0.000
+X -0.492 17.964 5.348
+X 0.000 0.000 0.000
+X 4.671 29.907 -0.230
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 8.046 13.867 -6.391
+X 8.902 9.815 -5.656
+X 0.000 0.000 0.000
+X 3.717 14.100 -34.576
+X 0.000 0.000 0.000
+X 2.691 2.189 -6.681
+X 15.949 3.212 10.444
+X 0.000 0.000 0.000
+X 7.967 2.471 7.813
+X 0.000 0.000 0.000
+X 4.087 3.610 6.773
+X 0.000 0.000 0.000
+X 4.687 8.458 11.728
+X 0.000 0.000 0.000
+X 1.875 5.350 -0.120
+X -11.976 14.681 -13.911
+X -23.286 27.944 -5.401
+X -22.351 33.602 -13.766
+X 0.000 0.000 0.000
+X -3.479 7.650 -9.896
+X 0.000 0.000 0.000
+X 13.227 11.731 -41.058
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -9.793 -8.810 -2.936
+X -8.003 -34.512 12.519
+X 11.476 21.711 17.432
+X 0.000 0.000 0.000
+X -5.375 6.717 18.982
+X 0.000 0.000 0.000
+X -31.445 0.409 28.471
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -18.027 -8.787 2.764
+X -30.108 -28.817 5.640
+X -30.825 -4.492 -1.435
+X 0.000 0.000 0.000
+X -11.302 4.764 -2.217
+X 0.000 0.000 0.000
+X -12.655 10.975 -24.863
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -30.844 18.909 -33.987
+X 0.000 0.000 0.000
+X -0.866 2.035 -1.969
+X 29.124 0.673 -7.924
+X -15.081 -2.971 3.788
+X 0.000 0.000 0.000
+X 4.013 0.464 -2.497
+X 0.000 0.000 0.000
+X 3.977 -26.486 0.144
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -9.803 -40.377 3.241
+X 0.000 0.000 0.000
+X 15.149 -1.229 -17.776
+X 25.070 4.486 -22.362
+X 12.885 2.299 -40.168
 111
--174.256062 -195.563813 -169.940918
-X -33.504346 -26.233800 -27.227489
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -4.314534 -12.076230 -2.274340
-X 0.000000 0.000000 0.000000
-X -2.727529 -7.983268 15.249016
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -1.117747 6.330929 8.583964
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 1.365582 -2.796798 3.357541
-X 6.120685 -6.641892 11.382234
-X 15.654054 -26.340828 11.306222
-X 8.545879 6.533114 0.997753
-X 17.574233 3.647650 -21.841270
-X 5.202009 -4.291813 -16.921654
-X 0.000000 0.000000 0.000000
-X 10.156041 -14.655119 -15.497448
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 6.561069 10.417970 1.631879
-X 8.561524 -12.226748 26.757840
-X 20.629329 7.135733 -19.453332
-X 0.000000 0.000000 0.000000
-X 14.097752 6.145450 -4.997924
-X 0.000000 0.000000 0.000000
-X 19.609784 2.079830 -17.011506
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 1.770734 5.625515 6.817856
-X -11.566663 -26.552770 -1.522341
-X 27.461957 -26.801754 -0.463889
-X 0.000000 0.000000 0.000000
-X 13.577953 -12.272856 18.032644
-X 0.000000 0.000000 0.000000
-X 7.864679 -2.066881 42.102580
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -6.270680 8.472488 20.982345
-X -29.793745 -3.368488 40.383954
-X -2.588743 8.013577 39.692087
-X 0.000000 0.000000 0.000000
-X 3.317423 16.109281 8.528994
-X 0.000000 0.000000 0.000000
-X 8.724985 27.160699 8.763503
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 7.262980 12.288725 -3.964714
-X 11.106178 9.907501 -6.628001
-X 0.000000 0.000000 0.000000
-X -6.877203 13.603962 -29.880109
-X 0.000000 0.000000 0.000000
-X -0.633870 1.339468 -6.317343
-X 18.847103 1.770807 3.196040
-X 0.000000 0.000000 0.000000
-X 9.441636 1.745876 3.566231
-X 0.000000 0.000000 0.000000
-X 7.659355 2.948511 5.633266
-X 0.000000 0.000000 0.000000
-X 7.315555 5.429270 8.920824
-X 0.000000 0.000000 0.000000
-X -0.930850 3.715067 -0.598850
-X -10.558920 16.800048 -9.434578
-X -24.826667 29.689266 0.312091
-X -15.883566 30.279351 -29.306943
-X 0.000000 0.000000 0.000000
-X 5.981868 4.647672 -6.983190
-X 0.000000 0.000000 0.000000
-X 11.393275 17.535489 -16.079123
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -11.151856 -2.635464 0.105159
-X -7.869187 -20.776997 15.303469
-X -0.339845 22.195714 24.919057
-X 0.000000 0.000000 0.000000
-X -13.028278 0.737222 13.273708
-X 0.000000 0.000000 0.000000
-X -36.576726 4.881029 22.243066
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -18.295063 -9.850668 0.716730
-X -23.677700 -24.247430 10.114527
-X -37.870436 -5.745949 2.346552
-X 0.000000 0.000000 0.000000
-X -0.856220 3.902109 -0.552110
-X 0.000000 0.000000 0.000000
-X -9.655214 13.799722 -26.750404
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -27.075109 23.719230 -35.972690
-X 0.000000 0.000000 0.000000
-X 8.702826 -5.754756 -10.299929
-X 21.673205 -4.212133 -14.189610
-X -15.752409 1.891349 -0.169177
-X 0.000000 0.000000 0.000000
-X 1.018474 -7.449247 4.691944
-X 0.000000 0.000000 0.000000
-X 1.377341 -27.712043 7.199104
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -1.326184 -32.025603 13.305915
-X 0.000000 0.000000 0.000000
-X 12.983084 -3.903718 -16.308295
-X 22.112924 1.417079 -21.150340
-X 11.397814 -3.293454 -38.621497
+-174.301 -195.642 -169.970
+X -33.499 -26.248 -27.231
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -4.312 -12.082 -2.275
+X 0.000 0.000 0.000
+X -2.725 -7.987 15.249
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -1.112 6.325 8.587
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 1.366 -2.797 3.359
+X 6.121 -6.642 11.382
+X 15.655 -26.343 11.306
+X 8.548 6.530 0.997
+X 17.583 3.636 -21.844
+X 5.205 -4.303 -16.924
+X 0.000 0.000 0.000
+X 10.156 -14.655 -15.497
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 6.562 10.418 1.632
+X 8.562 -12.227 26.758
+X 20.629 7.136 -19.453
+X 0.000 0.000 0.000
+X 14.099 6.145 -4.997
+X 0.000 0.000 0.000
+X 19.613 2.079 -17.010
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 1.771 5.626 6.818
+X -11.567 -26.552 -1.522
+X 27.463 -26.800 -0.461
+X 0.000 0.000 0.000
+X 13.579 -12.273 18.033
+X 0.000 0.000 0.000
+X 7.867 -2.063 42.109
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -6.271 8.474 20.983
+X -29.796 -3.364 40.386
+X -2.590 8.023 39.697
+X 0.000 0.000 0.000
+X 3.318 16.111 8.530
+X 0.000 0.000 0.000
+X 8.726 27.166 8.768
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 7.266 12.293 -3.961
+X 11.107 9.909 -6.627
+X 0.000 0.000 0.000
+X -6.872 13.610 -29.878
+X 0.000 0.000 0.000
+X -0.631 1.342 -6.316
+X 18.848 1.772 3.197
+X 0.000 0.000 0.000
+X 9.444 1.748 3.567
+X 0.000 0.000 0.000
+X 7.661 2.950 5.634
+X 0.000 0.000 0.000
+X 7.317 5.432 8.922
+X 0.000 0.000 0.000
+X -0.929 3.718 -0.597
+X -10.559 16.801 -9.434
+X -24.827 29.696 0.315
+X -15.886 30.286 -29.306
+X 0.000 0.000 0.000
+X 5.981 4.649 -6.983
+X 0.000 0.000 0.000
+X 11.392 17.539 -16.079
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -11.153 -2.634 0.105
+X -7.870 -20.777 15.303
+X -0.346 22.199 24.919
+X 0.000 0.000 0.000
+X -13.030 0.738 13.274
+X 0.000 0.000 0.000
+X -36.578 4.882 22.243
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -18.296 -9.851 0.717
+X -23.682 -24.248 10.114
+X -37.874 -5.746 2.345
+X 0.000 0.000 0.000
+X -0.857 3.903 -0.552
+X 0.000 0.000 0.000
+X -9.657 13.801 -26.751
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -27.089 23.718 -35.982
+X 0.000 0.000 0.000
+X 8.702 -5.755 -10.300
+X 21.670 -4.212 -14.192
+X -15.758 1.890 -0.175
+X 0.000 0.000 0.000
+X 1.018 -7.449 4.692
+X 0.000 0.000 0.000
+X 1.376 -27.715 7.197
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -1.329 -32.034 13.301
+X 0.000 0.000 0.000
+X 12.983 -3.904 -16.308
+X 22.111 1.413 -21.155
+X 11.395 -3.297 -38.628
 111
--164.527952 -206.434842 -172.833505
-X -37.534154 -26.785619 -19.547008
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -11.611986 -15.875575 4.491049
-X 0.000000 0.000000 0.000000
-X -0.521388 -8.320521 12.708227
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 8.283429 -9.989709 8.945569
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 2.085727 -3.110769 2.556615
-X 9.162966 -8.820691 11.279380
-X 11.241194 -12.212646 4.090138
-X 8.750186 7.592764 0.910127
-X 20.011387 7.753323 -28.757436
-X -2.201210 -5.519824 -14.516602
-X 0.000000 0.000000 0.000000
-X -2.271415 -13.007333 -17.523745
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 9.218407 9.147281 2.623133
-X 15.195341 -10.804514 29.532142
-X 28.201616 -23.158584 -18.384165
-X 0.000000 0.000000 0.000000
-X 15.557386 4.635436 -1.039121
-X 0.000000 0.000000 0.000000
-X 30.375622 22.638552 -7.966115
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 1.574487 6.689598 11.046222
-X -6.462903 -20.389040 4.230769
-X 17.841447 -24.026569 30.612153
-X 0.000000 0.000000 0.000000
-X 1.658728 -7.156685 18.336271
-X 0.000000 0.000000 0.000000
-X 10.413165 -7.101434 17.446510
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -7.391865 9.371711 19.029627
-X -23.721194 0.565392 34.785842
-X -8.504187 14.858985 44.503508
-X 0.000000 0.000000 0.000000
-X 10.061955 13.611728 13.935863
-X 0.000000 0.000000 0.000000
-X 9.994206 27.939901 1.995467
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 8.530923 11.176129 -6.349697
-X 12.094517 8.870964 -8.043372
-X 0.000000 0.000000 0.000000
-X -1.982289 11.082629 -34.057237
-X 0.000000 0.000000 0.000000
-X 0.619661 0.601925 -6.477627
-X 17.495725 2.970150 4.966100
-X 0.000000 0.000000 0.000000
-X 8.606214 2.468262 4.232981
-X 0.000000 0.000000 0.000000
-X 6.785422 3.603972 5.421210
-X 0.000000 0.000000 0.000000
-X 6.986252 7.201491 8.643865
-X 0.000000 0.000000 0.000000
-X -0.405328 3.603040 -1.511838
-X -10.478136 14.751197 -11.228231
-X -30.959634 32.653394 -9.157682
-X -23.928184 33.627767 -2.067480
-X 0.000000 0.000000 0.000000
-X 2.915464 6.473733 -5.602269
-X 0.000000 0.000000 0.000000
-X 3.081722 15.404371 -41.946503
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -10.149331 -6.816143 -4.475689
-X -13.211928 -22.398149 -3.804120
-X -1.240842 15.558496 20.069654
-X 0.000000 0.000000 0.000000
-X -8.848812 -3.139093 13.338599
-X 0.000000 0.000000 0.000000
-X -28.737894 -7.259964 27.855809
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -15.936469 -10.524873 3.336133
-X -22.008511 -24.274327 16.229775
-X -30.203681 -8.317821 2.251530
-X 0.000000 0.000000 0.000000
-X 3.889472 -2.726224 -2.963217
-X 0.000000 0.000000 0.000000
-X -13.598857 15.361075 -25.678823
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -29.108428 22.784196 -30.158485
-X 0.000000 0.000000 0.000000
-X 0.254995 3.787006 -2.895697
-X 26.522855 6.526610 -12.429941
-X -19.327772 11.009931 4.217602
-X 0.000000 0.000000 0.000000
-X 6.134851 1.952852 -11.630927
-X 0.000000 0.000000 0.000000
-X 3.695987 -28.928636 2.620441
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -5.682896 -46.122235 11.557807
-X 0.000000 0.000000 0.000000
-X 14.196900 -2.595167 -16.924644
-X 23.363245 3.018741 -19.952255
-X 11.227843 0.089542 -32.710193
+-164.572 -206.513 -172.888
+X -37.531 -26.802 -19.550
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -11.612 -15.878 4.491
+X 0.000 0.000 0.000
+X -0.518 -8.326 12.709
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 8.287 -9.993 8.947
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 2.088 -3.113 2.558
+X 9.163 -8.821 11.280
+X 11.242 -12.215 4.090
+X 8.751 7.592 0.910
+X 20.013 7.745 -28.760
+X -2.199 -5.529 -14.517
+X 0.000 0.000 0.000
+X -2.269 -13.008 -17.522
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 9.219 9.147 2.624
+X 15.197 -10.805 29.534
+X 28.205 -23.159 -18.382
+X 0.000 0.000 0.000
+X 15.558 4.635 -1.039
+X 0.000 0.000 0.000
+X 30.378 22.640 -7.963
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 1.577 6.690 11.050
+X -6.463 -20.388 4.231
+X 17.845 -24.023 30.620
+X 0.000 0.000 0.000
+X 1.660 -7.155 18.340
+X 0.000 0.000 0.000
+X 10.414 -7.099 17.449
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -7.391 9.375 19.034
+X -23.721 0.573 34.796
+X -8.502 14.868 44.513
+X 0.000 0.000 0.000
+X 10.062 13.613 13.937
+X 0.000 0.000 0.000
+X 9.995 27.942 1.997
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 8.534 11.181 -6.347
+X 12.095 8.874 -8.042
+X 0.000 0.000 0.000
+X -1.975 11.090 -34.054
+X 0.000 0.000 0.000
+X 0.622 0.605 -6.476
+X 17.498 2.973 4.968
+X 0.000 0.000 0.000
+X 8.608 2.471 4.234
+X 0.000 0.000 0.000
+X 6.787 3.606 5.422
+X 0.000 0.000 0.000
+X 6.987 7.204 8.645
+X 0.000 0.000 0.000
+X -0.404 3.605 -1.511
+X -10.478 14.754 -11.227
+X -30.961 32.660 -9.155
+X -23.929 33.631 -2.067
+X 0.000 0.000 0.000
+X 2.915 6.476 -5.602
+X 0.000 0.000 0.000
+X 3.081 15.409 -41.947
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -10.149 -6.816 -4.476
+X -13.213 -22.397 -3.804
+X -1.245 15.560 20.069
+X 0.000 0.000 0.000
+X -8.849 -3.139 13.339
+X 0.000 0.000 0.000
+X -28.738 -7.261 27.856
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -15.937 -10.525 3.336
+X -22.014 -24.276 16.228
+X -30.207 -8.317 2.250
+X 0.000 0.000 0.000
+X 3.889 -2.726 -2.963
+X 0.000 0.000 0.000
+X -13.602 15.361 -25.682
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -29.131 22.786 -30.178
+X 0.000 0.000 0.000
+X 0.255 3.787 -2.895
+X 26.520 6.525 -12.432
+X -19.333 11.005 4.213
+X 0.000 0.000 0.000
+X 6.135 1.952 -11.633
+X 0.000 0.000 0.000
+X 3.695 -28.931 2.618
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -5.685 -46.130 11.552
+X 0.000 0.000 0.000
+X 14.196 -2.599 -16.930
+X 23.361 3.012 -19.964
+X 11.224 0.085 -32.719
 111
--155.486574 -185.016799 -178.299361
-X -33.208197 -31.005024 -27.833254
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -4.445834 -10.924917 -4.466508
-X 0.000000 0.000000 0.000000
-X -1.190201 -9.839435 11.014879
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 3.811801 -2.160491 -4.643740
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 2.402049 -3.459509 2.585533
-X 13.489412 -16.904386 24.890832
-X 14.489540 -13.107213 5.904693
-X 7.085242 8.733960 2.837273
-X 11.846997 8.185744 -22.887407
-X -4.221024 2.141852 -13.720755
-X 0.000000 0.000000 0.000000
-X 3.189706 3.785274 -9.277039
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 7.744130 7.264699 2.951183
-X 11.169570 -15.657431 25.548263
-X 23.138912 -36.896897 -23.298045
-X 0.000000 0.000000 0.000000
-X 8.000531 1.690682 -13.378695
-X 0.000000 0.000000 0.000000
-X 18.654359 23.747976 -18.710064
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 2.902355 5.399620 7.068442
-X -2.833843 -23.946693 6.503233
-X 23.080040 -21.706362 6.584308
-X 0.000000 0.000000 0.000000
-X 14.116624 -13.735685 12.038978
-X 0.000000 0.000000 0.000000
-X 13.154639 -9.621715 35.243420
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -5.030208 7.974230 19.903060
-X -24.140409 6.333336 35.135711
-X -6.027759 26.746930 45.543056
-X 0.000000 0.000000 0.000000
-X 7.452592 11.309850 13.935187
-X 0.000000 0.000000 0.000000
-X 7.272470 10.762730 9.888983
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 8.343700 12.167359 -4.853096
-X 13.006879 10.806248 -9.567419
-X 0.000000 0.000000 0.000000
-X -4.676385 7.584930 -26.974468
-X 0.000000 0.000000 0.000000
-X 1.605284 1.520115 -2.547379
-X 17.270149 8.181233 1.018524
-X 0.000000 0.000000 0.000000
-X 6.312351 3.817072 1.655516
-X 0.000000 0.000000 0.000000
-X 6.695476 5.176022 4.321064
-X 0.000000 0.000000 0.000000
-X 6.167370 6.738455 5.469285
-X 0.000000 0.000000 0.000000
-X -0.515620 1.887052 -0.173736
-X -11.627695 12.643619 -8.372198
-X -33.460673 32.596560 -7.048305
-X -27.396292 26.021699 12.594854
-X 0.000000 0.000000 0.000000
-X 4.469087 2.651141 -3.547248
-X 0.000000 0.000000 0.000000
-X 12.237227 12.419363 -40.837238
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -8.817862 -3.612856 -3.174225
-X -10.374017 -23.261314 9.176221
-X -18.061632 12.598391 26.500259
-X 0.000000 0.000000 0.000000
-X -10.235892 0.502784 12.168414
-X 0.000000 0.000000 0.000000
-X -10.841919 9.859624 13.984902
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -17.160874 -8.700736 1.331150
-X -22.020781 -24.156327 15.055428
-X -32.067996 3.992555 -8.819552
-X 0.000000 0.000000 0.000000
-X -8.839152 10.154997 -3.471448
-X 0.000000 0.000000 0.000000
-X -12.204848 11.450684 -5.898855
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -26.370570 12.678617 -25.032342
-X 0.000000 0.000000 0.000000
-X 8.294781 -3.583308 -9.932368
-X 22.042803 1.496259 -6.757654
-X -5.921160 4.373903 -8.398567
-X 0.000000 0.000000 0.000000
-X 3.218643 -8.620453 1.836413
-X 0.000000 0.000000 0.000000
-X 4.960585 -27.507594 1.463555
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 1.177018 -38.853355 7.800113
-X 0.000000 0.000000 0.000000
-X 2.767143 0.181954 -8.168247
-X 21.433827 7.601145 -20.918163
-X 8.687552 4.083037 -39.244719
+-155.531 -185.082 -178.353
+X -33.206 -31.014 -27.838
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -4.445 -10.927 -4.467
+X 0.000 0.000 0.000
+X -1.188 -9.842 11.015
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 3.815 -2.164 -4.644
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 2.404 -3.462 2.587
+X 13.490 -16.906 24.891
+X 14.490 -13.109 5.905
+X 7.085 8.730 2.837
+X 11.849 8.178 -22.890
+X -4.220 2.137 -13.721
+X 0.000 0.000 0.000
+X 3.191 3.785 -9.276
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 7.745 7.265 2.952
+X 11.173 -15.658 25.553
+X 23.141 -36.897 -23.297
+X 0.000 0.000 0.000
+X 8.001 1.691 -13.378
+X 0.000 0.000 0.000
+X 18.656 23.748 -18.709
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 2.904 5.400 7.070
+X -2.834 -23.947 6.503
+X 23.083 -21.703 6.590
+X 0.000 0.000 0.000
+X 14.118 -13.733 12.044
+X 0.000 0.000 0.000
+X 13.158 -9.620 35.248
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -5.029 7.976 19.906
+X -24.140 6.337 35.140
+X -6.023 26.758 45.556
+X 0.000 0.000 0.000
+X 7.454 11.313 13.939
+X 0.000 0.000 0.000
+X 7.273 10.764 9.890
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 8.346 12.171 -4.850
+X 13.009 10.808 -9.566
+X 0.000 0.000 0.000
+X -4.667 7.602 -26.966
+X 0.000 0.000 0.000
+X 1.607 1.522 -2.547
+X 17.272 8.184 1.019
+X 0.000 0.000 0.000
+X 6.315 3.819 1.656
+X 0.000 0.000 0.000
+X 6.696 5.177 4.321
+X 0.000 0.000 0.000
+X 6.168 6.739 5.470
+X 0.000 0.000 0.000
+X -0.514 1.889 -0.173
+X -11.628 12.645 -8.371
+X -33.461 32.601 -7.045
+X -27.398 26.026 12.596
+X 0.000 0.000 0.000
+X 4.468 2.653 -3.547
+X 0.000 0.000 0.000
+X 12.238 12.418 -40.837
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -8.818 -3.613 -3.174
+X -10.377 -23.261 9.176
+X -18.064 12.599 26.500
+X 0.000 0.000 0.000
+X -10.236 0.503 12.168
+X 0.000 0.000 0.000
+X -10.843 9.860 13.985
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -17.161 -8.701 1.331
+X -22.026 -24.158 15.053
+X -32.072 3.993 -8.822
+X 0.000 0.000 0.000
+X -8.840 10.155 -3.472
+X 0.000 0.000 0.000
+X -12.212 11.449 -5.905
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -26.385 12.680 -25.041
+X 0.000 0.000 0.000
+X 8.295 -3.583 -9.932
+X 22.041 1.496 -6.759
+X -5.928 4.367 -8.409
+X 0.000 0.000 0.000
+X 3.217 -8.623 1.833
+X 0.000 0.000 0.000
+X 4.959 -27.510 1.461
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 1.173 -38.863 7.792
+X 0.000 0.000 0.000
+X 2.765 0.179 -8.172
+X 21.432 7.598 -20.925
+X 8.684 4.082 -39.252
 111
--167.864691 -183.420981 -175.111925
-X -26.514737 -28.898968 -5.890645
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -5.066786 -11.229359 -2.048302
-X 0.000000 0.000000 0.000000
-X -9.774656 -7.761050 -1.041403
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 6.966381 -9.151327 9.579158
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 2.105971 -3.109016 2.613626
-X 6.368086 -7.973308 11.280436
-X 13.791306 -12.997601 7.448179
-X 7.439369 6.102924 -1.079201
-X 11.449802 1.799144 -24.843477
-X -3.254151 6.787738 -15.005880
-X 0.000000 0.000000 0.000000
-X -0.651889 5.920146 -12.334992
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 4.221502 -2.687306 -2.115527
-X 16.629335 -5.387541 29.274005
-X 25.406501 -14.718108 -23.505693
-X 0.000000 0.000000 0.000000
-X 18.230752 -0.690244 -14.971665
-X 0.000000 0.000000 0.000000
-X 17.972682 0.557362 -16.241302
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 6.045695 4.281746 7.448332
-X 5.029588 -26.876605 3.613153
-X 23.252558 -19.909532 30.215048
-X 0.000000 0.000000 0.000000
-X 5.975795 -9.602586 17.530833
-X 0.000000 0.000000 0.000000
-X 14.204537 -10.547244 12.796383
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -3.852607 7.522540 21.818316
-X -15.304248 1.662375 34.187837
-X 5.569210 15.667463 50.237512
-X 0.000000 0.000000 0.000000
-X 0.229597 15.767390 7.978655
-X 0.000000 0.000000 0.000000
-X 5.138069 28.593839 4.745415
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 5.355367 12.810511 -5.208235
-X 9.263512 12.402982 -8.236822
-X 0.000000 0.000000 0.000000
-X -9.755459 7.258145 -27.826835
-X 0.000000 0.000000 0.000000
-X -1.166827 -0.204289 -6.006544
-X 17.983874 6.717612 1.039449
-X 0.000000 0.000000 0.000000
-X 8.887704 4.107167 2.294878
-X 0.000000 0.000000 0.000000
-X 6.968766 4.700751 4.010899
-X 0.000000 0.000000 0.000000
-X 7.004773 7.178561 7.693724
-X 0.000000 0.000000 0.000000
-X -0.924812 2.455219 -0.507807
-X -13.629355 13.987387 -7.597899
-X -26.169612 25.930827 4.990167
-X -28.909004 31.822325 -3.766790
-X 0.000000 0.000000 0.000000
-X 8.641581 12.638205 -10.927720
-X 0.000000 0.000000 0.000000
-X 11.699971 6.215825 -41.613934
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -9.679714 -5.477643 -0.734960
-X -10.458103 -32.026282 21.134359
-X 3.351939 17.567883 20.423853
-X 0.000000 0.000000 0.000000
-X -10.645643 0.758358 13.405630
-X 0.000000 0.000000 0.000000
-X -36.931403 5.996180 23.579941
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -17.176737 -8.317004 2.772726
-X -19.941382 -27.166587 16.032036
-X -32.200139 1.065964 6.794568
-X 0.000000 0.000000 0.000000
-X -9.973362 9.680150 -2.787491
-X 0.000000 0.000000 0.000000
-X -16.818780 12.541809 -21.581813
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -28.142993 10.968023 -23.243204
-X 0.000000 0.000000 0.000000
-X 8.698768 -3.070246 -11.523421
-X 18.491743 0.389685 -14.597376
-X -12.252350 5.275869 -0.283120
-X 0.000000 0.000000 0.000000
-X 4.846356 2.021979 -2.396307
-X 0.000000 0.000000 0.000000
-X 3.932450 -27.520868 1.179422
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -5.546528 -45.847850 7.009674
-X 0.000000 0.000000 0.000000
-X 13.335684 0.131501 -16.606684
-X 19.909228 7.071158 -20.286867
-X 10.342826 4.813819 -38.316295
+-167.909 -183.489 -175.151
+X -26.512 -28.911 -5.895
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -5.066 -11.233 -2.050
+X 0.000 0.000 0.000
+X -9.772 -7.766 -1.042
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 6.970 -9.158 9.579
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 2.109 -3.113 2.615
+X 6.369 -7.975 11.281
+X 13.792 -12.999 7.448
+X 7.440 6.101 -1.079
+X 11.452 1.793 -24.846
+X -3.252 6.783 -15.005
+X 0.000 0.000 0.000
+X -0.652 5.921 -12.335
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 4.223 -2.688 -2.115
+X 16.632 -5.388 29.275
+X 25.409 -14.719 -23.504
+X 0.000 0.000 0.000
+X 18.231 -0.690 -14.971
+X 0.000 0.000 0.000
+X 17.973 0.557 -16.241
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 6.047 4.282 7.449
+X 5.029 -26.875 3.613
+X 23.256 -19.908 30.220
+X 0.000 0.000 0.000
+X 5.977 -9.601 17.534
+X 0.000 0.000 0.000
+X 14.205 -10.545 12.799
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -3.852 7.525 21.821
+X -15.303 1.669 34.196
+X 5.571 15.676 50.244
+X 0.000 0.000 0.000
+X 0.231 15.769 7.981
+X 0.000 0.000 0.000
+X 5.139 28.596 4.747
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 5.357 12.813 -5.207
+X 9.266 12.406 -8.235
+X 0.000 0.000 0.000
+X -9.751 7.266 -27.825
+X 0.000 0.000 0.000
+X -1.165 -0.203 -6.006
+X 17.987 6.722 1.041
+X 0.000 0.000 0.000
+X 8.891 4.110 2.295
+X 0.000 0.000 0.000
+X 6.971 4.702 4.011
+X 0.000 0.000 0.000
+X 7.006 7.180 7.694
+X 0.000 0.000 0.000
+X -0.923 2.458 -0.507
+X -13.630 13.989 -7.597
+X -26.170 25.937 4.994
+X -28.911 31.830 -3.766
+X 0.000 0.000 0.000
+X 8.642 12.638 -10.928
+X 0.000 0.000 0.000
+X 11.700 6.216 -41.614
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -9.680 -5.478 -0.735
+X -10.462 -32.025 21.134
+X 3.347 17.568 20.423
+X 0.000 0.000 0.000
+X -10.646 0.758 13.406
+X 0.000 0.000 0.000
+X -36.933 5.998 23.581
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -17.177 -8.317 2.773
+X -19.944 -27.169 16.032
+X -32.204 1.066 6.793
+X 0.000 0.000 0.000
+X -9.973 9.680 -2.787
+X 0.000 0.000 0.000
+X -16.822 12.542 -21.585
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -28.162 10.970 -23.254
+X 0.000 0.000 0.000
+X 8.699 -3.071 -11.523
+X 18.489 0.388 -14.599
+X -12.255 5.273 -0.288
+X 0.000 0.000 0.000
+X 4.846 2.021 -2.397
+X 0.000 0.000 0.000
+X 3.930 -27.525 1.175
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -5.550 -45.856 7.003
+X 0.000 0.000 0.000
+X 13.335 0.131 -16.608
+X 19.907 7.069 -20.293
+X 10.341 4.811 -38.321
 111
--156.150881 -180.461255 -167.487032
-X -28.628169 -31.162937 -33.534068
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -1.673980 -11.155051 -5.401182
-X 0.000000 0.000000 0.000000
-X 3.335169 -12.005544 7.760949
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -5.611372 -2.133102 6.856419
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 2.536318 -3.304387 2.597451
-X 7.620436 -10.048723 13.367485
-X 26.926472 -14.936871 9.455118
-X 3.219414 7.279800 3.630297
-X 12.891644 5.026763 -22.747715
-X -19.246978 -2.604237 -5.687921
-X 0.000000 0.000000 0.000000
-X -9.980076 2.340333 -7.625906
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 6.668701 7.676501 2.391965
-X 16.716506 -4.333320 29.475261
-X 17.082865 -16.631875 -21.068407
-X 0.000000 0.000000 0.000000
-X 14.628375 -3.180550 -17.511490
-X 0.000000 0.000000 0.000000
-X 13.542293 -0.384943 -18.161714
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 6.694825 5.910347 6.023406
-X -10.708714 -16.145658 16.898899
-X 15.848057 -25.050187 2.603932
-X 0.000000 0.000000 0.000000
-X 9.403603 -5.552411 14.890088
-X 0.000000 0.000000 0.000000
-X 26.906679 1.131438 31.798615
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.447788 9.874252 17.161955
-X -14.069913 3.892039 32.592242
-X 1.691497 19.519114 35.985303
-X 0.000000 0.000000 0.000000
-X 0.831892 12.953691 5.594299
-X 0.000000 0.000000 0.000000
-X 7.265631 9.555630 8.075465
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 8.045864 12.125943 -5.550327
-X 11.231740 9.625051 -7.892080
-X 0.000000 0.000000 0.000000
-X -8.207681 6.954677 -28.020579
-X 0.000000 0.000000 0.000000
-X -0.939254 1.030726 -3.740295
-X 18.066428 4.240996 1.533811
-X 0.000000 0.000000 0.000000
-X 9.168141 2.394559 2.826452
-X 0.000000 0.000000 0.000000
-X 8.092210 2.546568 5.155582
-X 0.000000 0.000000 0.000000
-X 8.282706 4.747689 6.045340
-X 0.000000 0.000000 0.000000
-X -0.400449 2.783153 -0.970281
-X -12.330178 13.659726 -6.607399
-X -24.686439 26.553259 3.084632
-X -20.203440 29.491321 -14.140010
-X 0.000000 0.000000 0.000000
-X -4.622895 -1.615353 -3.350799
-X 0.000000 0.000000 0.000000
-X 13.633896 19.340503 -12.248471
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -10.848598 -4.955416 -0.670130
-X -18.953917 -22.161485 12.599897
-X -13.646843 15.706642 37.998139
-X 0.000000 0.000000 0.000000
-X -11.154046 -2.909309 12.798307
-X 0.000000 0.000000 0.000000
-X -12.516504 6.978481 16.475280
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -15.818856 -10.878971 0.087233
-X -21.755132 -25.581453 8.470734
-X -32.496397 -6.847317 1.517997
-X 0.000000 0.000000 0.000000
-X -3.286812 -1.144513 -6.789091
-X 0.000000 0.000000 0.000000
-X -13.826341 16.599228 -21.077802
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -33.426191 25.260288 -28.100567
-X 0.000000 0.000000 0.000000
-X 10.980735 1.424741 -12.506667
-X 37.173736 3.778489 -13.819734
-X -11.711733 24.397608 -3.672688
-X 0.000000 0.000000 0.000000
-X 2.460666 -5.737435 -6.977978
-X 0.000000 0.000000 0.000000
-X -1.661353 -27.620057 6.191415
-X 0.000000 0.000000 0.000000
-X 0.000000 0.000000 0.000000
-X -0.188406 -43.009226 6.635462
-X 0.000000 0.000000 0.000000
-X 11.678040 -4.246630 -14.972058
-X 19.269634 3.149055 -19.537478
-X 10.258705 -2.611650 -26.196593
+-156.195 -180.526 -167.536
+X -28.626 -31.171 -33.536
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -1.674 -11.157 -5.402
+X 0.000 0.000 0.000
+X 3.338 -12.009 7.763
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -5.608 -2.138 6.859
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 2.537 -3.305 2.598
+X 7.622 -10.050 13.369
+X 26.928 -14.938 9.456
+X 3.220 7.278 3.629
+X 12.895 5.020 -22.749
+X -19.246 -2.617 -5.688
+X 0.000 0.000 0.000
+X -9.980 2.341 -7.626
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 6.670 7.676 2.393
+X 16.718 -4.334 29.477
+X 17.083 -16.632 -21.068
+X 0.000 0.000 0.000
+X 14.630 -3.181 -17.511
+X 0.000 0.000 0.000
+X 13.542 -0.385 -18.162
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 6.697 5.910 6.025
+X -10.709 -16.146 16.899
+X 15.851 -25.050 2.609
+X 0.000 0.000 0.000
+X 9.405 -5.551 14.893
+X 0.000 0.000 0.000
+X 26.910 1.131 31.801
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.450 9.877 17.167
+X -14.069 3.896 32.598
+X 1.695 19.525 35.994
+X 0.000 0.000 0.000
+X 0.832 12.956 5.596
+X 0.000 0.000 0.000
+X 7.268 9.560 8.079
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 8.049 12.131 -5.547
+X 11.233 9.631 -7.891
+X 0.000 0.000 0.000
+X -8.201 6.964 -28.017
+X 0.000 0.000 0.000
+X -0.937 1.033 -3.739
+X 18.070 4.243 1.535
+X 0.000 0.000 0.000
+X 9.169 2.395 2.827
+X 0.000 0.000 0.000
+X 8.094 2.547 5.156
+X 0.000 0.000 0.000
+X 8.284 4.749 6.047
+X 0.000 0.000 0.000
+X -0.398 2.785 -0.969
+X -12.330 13.661 -6.607
+X -24.687 26.558 3.087
+X -20.204 29.496 -14.137
+X 0.000 0.000 0.000
+X -4.623 -1.615 -3.351
+X 0.000 0.000 0.000
+X 13.634 19.342 -12.248
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -10.849 -4.956 -0.670
+X -18.955 -22.161 12.600
+X -13.653 15.707 37.998
+X 0.000 0.000 0.000
+X -11.154 -2.910 12.798
+X 0.000 0.000 0.000
+X -12.519 6.980 16.476
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -15.819 -10.879 0.088
+X -21.763 -25.583 8.468
+X -32.502 -6.848 1.515
+X 0.000 0.000 0.000
+X -3.288 -1.145 -6.790
+X 0.000 0.000 0.000
+X -13.831 16.602 -21.081
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -33.441 25.262 -28.112
+X 0.000 0.000 0.000
+X 10.981 1.424 -12.507
+X 37.172 3.777 -13.821
+X -11.717 24.395 -3.681
+X 0.000 0.000 0.000
+X 2.460 -5.738 -6.979
+X 0.000 0.000 0.000
+X -1.662 -27.623 6.189
+X 0.000 0.000 0.000
+X 0.000 0.000 0.000
+X -0.195 -43.016 6.627
+X 0.000 0.000 0.000
+X 11.676 -4.250 -14.978
+X 19.267 3.148 -19.546
+X 10.258 -2.614 -26.202
diff --git a/src/colvar/Implicit.cpp b/src/colvar/Implicit.cpp
index 47bd7ea4740ae0336ef59e92dcda40f4bc9927f2..5f3dc191b45f53180f27e3ca59271ca60ff0dabb 100644
--- a/src/colvar/Implicit.cpp
+++ b/src/colvar/Implicit.cpp
@@ -21,7 +21,6 @@
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
 
 /* This class was originally written by Thomas Loehr */
-#ifdef ENABLEC11 
 
 #include "Colvar.h"
 #include "ActionRegister.h"
@@ -29,26 +28,17 @@
 #include "core/PlumedMain.h"
 #include "core/SetupMolInfo.h"
 #include "tools/OpenMP.h"
-
-// These are only required when using the vectorized version
-#include "emmintrin.h"
-#include "immintrin.h"
+#include <initializer_list>
 
 #define INV_PI_SQRT_PI 0.179587122
 #define KCAL_TO_KJ 4.184
 #define ANG_TO_NM 0.1
 #define ANG3_TO_NM3 0.001
-#define INNER_LOOP_STRIDE 4
-
-// WARNING: Here be dragons!
-// Uncomment the next line for SIMD version, which is about 1.25 times faster
-// clang will choke on this, gcc requires -mveclibabi=svml, icpc should work just fine
-// #define AVXNLLOOP
 
 using namespace std;
 
 namespace PLMD {
-    namespace colvar {
+namespace colvar {
 
 //+PLUMEDOC COLVAR IMPLICIT
 /*
@@ -88,1322 +78,1120 @@ PRINT ARG=solv FILE=SOLV
 */
 //+ENDPLUMEDOC
 
-        class Implicit : public Colvar {
-            private:
-                bool pbc;
-                bool tcorr;
-                double buffer;
-                unsigned stride;
-                unsigned nl_update;
-                vector<vector<unsigned> > nl;
-                vector<vector<double> > parameter;
-                map<string, map<string, string> > typemap;
-                map<string, vector<double> > valuemap;
-                void setupTypeMap();
-
-            public:
-                static void registerKeywords(Keywords& keys);
-                explicit Implicit(const ActionOptions&);
-                virtual void calculate();
-                void update_neighb();
-                void setupConstants(const vector<AtomNumber> &atoms, vector<vector<double> > &parameter);
-        };
-
-        PLUMED_REGISTER_ACTION(Implicit,"IMPLICIT")
-
-        void Implicit::registerKeywords(Keywords& keys) {
-            Colvar::registerKeywords(keys);
-            componentsAreNotOptional(keys);
-            useCustomisableComponents(keys);
-            keys.add("atoms", "ATOMS", "The atoms to be included in the calculation, e.g. the whole protein.");
-            keys.add("compulsory", "NL_BUFFER", "The buffer to the intrinsic cutoff used when calculating pairwise interactions.");
-            keys.add("compulsory", "NL_STRIDE", "The frequency with which the neighbourlist is updated.");
-            keys.addFlag("TEMP_CORRECTION", false, "Correct free energy of solvation constants for temperatures different from 298.15 K");
-        }
-
-        Implicit::Implicit(const ActionOptions&ao):
-            PLUMED_COLVAR_INIT(ao),
-            pbc(true),
-            tcorr(false),
-            buffer(0.1),
-            stride(10),
-            nl_update(0)
-        {
-            vector<AtomNumber> atoms;
-            parseAtomList("ATOMS", atoms);
-            const unsigned size = atoms.size();
-
-            parseFlag("TEMP_CORRECTION", tcorr);
-            parse("NL_BUFFER", buffer);
-            parse("NL_STRIDE", stride);
-
-            bool nopbc = !pbc;
-            parseFlag("NOPBC", nopbc);
-            pbc = !nopbc;
-
-            checkRead();
-
-            log << "  Bibliography " << plumed.cite("Bottaro S, Lindorff-Larsen K, Best R, J. Chem. Theory Comput. 9, 5641 (2013)")
-                                     << plumed.cite("Lazaridis T, Karplus M, Proteins Struct. Funct. Genet. 35, 133 (1999)"); log << "\n";
-
-
-            nl.resize(size);
-            parameter.resize(size);
-            setupConstants(atoms, parameter);
-
-            addValueWithDerivatives();
-            setNotPeriodic();
-            requestAtoms(atoms);
-        }
-
-        void Implicit::update_neighb() {
-            const double lower_c2 = 0.24 * 0.24; // this is the cut-off for bonded atoms
-            const unsigned size = getNumberOfAtoms();
-            const unsigned nt = OpenMP::getGoodNumThreads(nl);
-            #pragma omp parallel num_threads(nt)
-            {
-                #pragma omp for
-                for (unsigned i=0; i<size; ++i) {
-                    const Vector posi = getPosition(i);
-
-                    // Clear old values, reserve space for new indices
-                    nl[i].clear();
-                    nl[i].reserve(100);
-
-                    // Loop through neighboring atoms, add the ones below cutoff
-                    for (unsigned j=i+1; j<size; ++j) {
-                        const double d2 = delta(posi, getPosition(j)).modulo2();
-                        if (d2 < lower_c2 && j < i+14) {
-                            // crude approximation for i-i+1/2 interactions,
-                            // we want to exclude atoms separated by less than three bonds
-                            continue;
-                        }
+class Implicit : public Colvar {
+    private:
+        bool pbc;
+        double buffer;
+        double delta_g_ref;
+        unsigned stride;
+        unsigned nl_update;
+        vector<vector<unsigned> > nl;
+        vector<vector<bool> > nlexpo;
+        vector<vector<double> > parameter;
+        void setupConstants(const vector<AtomNumber> &atoms, vector<vector<double> > &parameter, bool tcorr);
+        map<string, map<string, string> > setupTypeMap();
+        map<string, vector<double> > setupValueMap();
+        void update_neighb();
+
+    public:
+        static void registerKeywords(Keywords& keys);
+        explicit Implicit(const ActionOptions&);
+        virtual void calculate();
+};
+
+PLUMED_REGISTER_ACTION(Implicit,"IMPLICIT")
+
+void Implicit::registerKeywords(Keywords& keys) {
+    Colvar::registerKeywords(keys);
+    componentsAreNotOptional(keys);
+    useCustomisableComponents(keys);
+    keys.add("atoms", "ATOMS", "The atoms to be included in the calculation, e.g. the whole protein.");
+    keys.add("compulsory", "NL_BUFFER", "The buffer to the intrinsic cutoff used when calculating pairwise interactions.");
+    keys.add("compulsory", "NL_STRIDE", "The frequency with which the neighbourlist is updated.");
+    keys.addFlag("TEMP_CORRECTION", false, "Correct free energy of solvation constants for temperatures different from 298.15 K");
+}
 
-                        double mlambda = parameter[i][5];
-                        if (parameter[j][5] > mlambda) {
-                            // We choose the maximum lambda value and use a more conservative cutoff
-                            mlambda = parameter[j][5];
-                        }
+Implicit::Implicit(const ActionOptions&ao):
+    PLUMED_COLVAR_INIT(ao),
+    pbc(true),
+    buffer(0.1),
+    delta_g_ref(0.),
+    stride(10),
+    nl_update(0)
+{
+    vector<AtomNumber> atoms;
+    parseAtomList("ATOMS", atoms);
+    const unsigned size = atoms.size();
+    bool tcorr = false;
+    parseFlag("TEMP_CORRECTION", tcorr);
+    parse("NL_BUFFER", buffer);
+    parse("NL_STRIDE", stride);
+
+    bool nopbc = !pbc;
+    parseFlag("NOPBC", nopbc);
+    pbc = !nopbc;
+
+    checkRead();
+
+    log << "  Bibliography " << plumed.cite("Bottaro S, Lindorff-Larsen K, Best R, J. Chem. Theory Comput. 9, 5641 (2013)")
+                             << plumed.cite("Lazaridis T, Karplus M, Proteins Struct. Funct. Genet. 35, 133 (1999)"); log << "\n";
+
+
+    nl.resize(size);
+    nlexpo.resize(size);
+    parameter.resize(size, vector<double>(4, 0));
+    setupConstants(atoms, parameter, tcorr);
+
+    addValueWithDerivatives();
+    setNotPeriodic();
+    requestAtoms(atoms);
+}
 
-                        double c2 = (3. * mlambda + buffer) * (3. * mlambda + buffer);
-                        if (d2 < c2 ) {
-                            nl[i].push_back(j);
-                        }
-                    }
-                }
+void Implicit::update_neighb() {
+    const double lower_c2 = 0.24 * 0.24; // this is the cut-off for bonded atoms
+    const unsigned size = getNumberOfAtoms();
+    for (unsigned i=0; i<size; ++i) {
+        nl[i].clear();
+        nlexpo[i].clear();
+        const Vector posi = getPosition(i);
+        // Loop through neighboring atoms, add the ones below cutoff
+        for (unsigned j=i+1; j<size; ++j) {
+            const double d2 = delta(posi, getPosition(j)).modulo2();
+            if (d2 < lower_c2 && j < i+14) {
+                // crude approximation for i-i+1/2 interactions,
+                // we want to exclude atoms separated by less than three bonds
+                continue;
+            }
+            // We choose the maximum lambda value and use a more conservative cutoff
+            double mlambda = 1./parameter[i][2];
+            if (1./parameter[j][2] > mlambda) mlambda = 1./parameter[j][2];
+            const double c2 = (4. * mlambda + buffer) * (4. * mlambda + buffer);
+            if (d2 < c2 ) {
+               nl[i].push_back(j);
+               if(parameter[i][2] == parameter[j][2] && parameter[i][3] == parameter[j][3]) {
+                  nlexpo[i].push_back(true);
+               } else nlexpo[i].push_back(false);
             }
         }
+    }
+}
 
-#ifdef AVXNLLOOP
-        void Implicit::calculate() {
-            if (pbc) makeWhole();
-            if (getExchangeStep()) nl_update = 0;
-            if (nl_update == 0) update_neighb();
-
-            const unsigned size = getNumberOfAtoms();
-            vector<Vector> fedensity_deriv(size);
-            double bias = 0.0;
-
-            // Define constants (4 64bit doubles in one 256bit (AVX) register)
-            const __m256d m_INV_PI_SQRT_PI = _mm256_set1_pd(INV_PI_SQRT_PI);
-            const __m256d m_ones           = _mm256_set1_pd(1.0);
-            const __m256d m_zero           = _mm256_set1_pd(0.0);
-
-            // Main loop over all non-hydrogen atoms
-            for (unsigned i = 0; i < size; ++i) {
-                const Vector posi = getPosition(i);
-                const double delta_g_ref = parameter[i][1];
-
-                // Get the inner loop size from the neighbourlist
-                const unsigned inner_size = nl[i].size();
-
-                // size modulo 4 gives us the size of the remainder
-                const unsigned inner_remainder = inner_size % INNER_LOOP_STRIDE;
-
-                // Set free-energy density accumulator to 0
-                __m256d m_fedensity = _mm256_set1_pd(0.0);
-
-                // Main vectorized loop, we handle 4 values at once
-                for (unsigned i_nl = 0; i_nl < (inner_size - inner_remainder); i_nl += INNER_LOOP_STRIDE) {
-                    const unsigned j0 = nl[i][i_nl + 0];
-                    const unsigned j1 = nl[i][i_nl + 1];
-                    const unsigned j2 = nl[i][i_nl + 2];
-                    const unsigned j3 = nl[i][i_nl + 3];
-
-                    // Calculate distance vector between atom i and j
-                    const Vector dist0 = delta(posi, getPosition(j0));
-                    const Vector dist1 = delta(posi, getPosition(j1));
-                    const Vector dist2 = delta(posi, getPosition(j2));
-                    const Vector dist3 = delta(posi, getPosition(j3));
-
-                    // Calculate distance between atom i and j
-                    const __m256d m_rij               = _mm256_set_pd(dist3.modulo(),
-                                                                      dist2.modulo(),
-                                                                      dist1.modulo(),
-                                                                      dist0.modulo());
-                    // 1 / r_ij
-                    const __m256d m_inv_rij           = _mm256_div_pd(m_ones, m_rij);
-                    // 1 / r_ij^2
-                    const __m256d m_inv_rij2          = _mm256_mul_pd(m_inv_rij, m_inv_rij);
-
-                    // i-j interaction
-                    {
-                        // R_i
-                        const __m256d m_vdwr          = _mm256_set1_pd(parameter[i][6]);
-                        const __m256d m_lambda        = _mm256_set1_pd(parameter[i][5]);
-                        // 1 / lambda
-                        const __m256d m_inv_lambda    = _mm256_div_pd(m_ones, m_lambda);
-                        // 1 / lambda^2
-                        const __m256d m_inv_lambda2   = _mm256_mul_pd(m_inv_lambda, m_inv_lambda);
-                        // Delta G^free
-                        const __m256d m_delta_g_free  = _mm256_set1_pd(parameter[i][2]);
-                        // V_j
-                        const __m256d m_vdw_volume    = _mm256_set_pd(parameter[j3][0],
-                                                                      parameter[j2][0],
-                                                                      parameter[j1][0],
-                                                                      parameter[j0][0]);
-
-                        // r_ij - R_i
-                        const __m256d m_rij_vdwr_diff = _mm256_sub_pd(m_rij, m_vdwr);
-
-                        // exp(-(r_ij - R_i)^2 / lambda^2)
-                              __m256d m_exponent      = _mm256_mul_pd(m_rij_vdwr_diff, m_rij_vdwr_diff);
-                                      m_exponent      = _mm256_mul_pd(m_inv_lambda2, m_exponent);
-                        // _mm256_exp_pd requires SVML
-                        const __m256d m_expo          = _mm256_exp_pd(_mm256_sub_pd(m_zero, m_exponent));
-
-                        // Delta G^free * V_j * expo / (lambda * r_ij^2 * pi * sqrt(pi))
-                        const __m256d m_fact_a        = _mm256_mul_pd(m_delta_g_free, m_vdw_volume);
-                        const __m256d m_fact_b        = _mm256_mul_pd(m_expo, m_INV_PI_SQRT_PI);
-                        const __m256d m_fact          = _mm256_mul_pd(_mm256_mul_pd(m_fact_a, m_fact_b),
-                                                                      _mm256_mul_pd(m_inv_rij2, m_inv_lambda));
-
-                        // (1 / r_ij + (r_ij - R_i) / lambda^2) * 1 / r_ij * fact
-                              __m256d m_deriv         = _mm256_add_pd(m_inv_rij, _mm256_mul_pd(m_rij_vdwr_diff, m_inv_lambda2));
-                                      m_deriv         = _mm256_mul_pd(_mm256_mul_pd(m_inv_rij, m_fact), m_deriv);
-
-                        // Sum up bias and derivatives
-                        m_fedensity = _mm256_add_pd(m_fedensity, m_fact);
-                        fedensity_deriv[i]  += m_deriv[0] * dist0;
-                        fedensity_deriv[i]  += m_deriv[1] * dist1;
-                        fedensity_deriv[i]  += m_deriv[2] * dist2;
-                        fedensity_deriv[i]  += m_deriv[3] * dist3;
-                        fedensity_deriv[j0] -= m_deriv[0] * dist0;
-                        fedensity_deriv[j1] -= m_deriv[1] * dist1;
-                        fedensity_deriv[j2] -= m_deriv[2] * dist2;
-                        fedensity_deriv[j3] -= m_deriv[3] * dist3;
-                    }
-
-                    // j-i interaction
-                    {
-                        const __m256d m_vdwr              = _mm256_set_pd(parameter[j3][6],
-                                                                          parameter[j2][6],
-                                                                          parameter[j1][6],
-                                                                          parameter[j0][6]);
-                        const __m256d m_lambda            = _mm256_set_pd(parameter[j3][5],
-                                                                          parameter[j2][5],
-                                                                          parameter[j1][5],
-                                                                          parameter[j0][5]);
-                        const __m256d m_inv_lambda        = _mm256_div_pd(m_ones, m_lambda);
-                        const __m256d m_inv_lambda2       = _mm256_mul_pd(m_inv_lambda, m_inv_lambda);
-                        const __m256d m_delta_g_free      = _mm256_set_pd(parameter[j3][2],
-                                                                          parameter[j2][2],
-                                                                          parameter[j1][2],
-                                                                          parameter[j0][2]);
-                        const __m256d m_vdw_volume        = _mm256_set1_pd(parameter[i][0]);
-
-                        const __m256d m_rij_vdwr_diff = _mm256_sub_pd(m_rij, m_vdwr);
-                              __m256d m_exponent      = _mm256_mul_pd(m_rij_vdwr_diff, m_rij_vdwr_diff);
-                                      m_exponent      = _mm256_mul_pd(m_inv_lambda2, m_exponent);
-                        const __m256d m_expo          = _mm256_exp_pd(_mm256_sub_pd(m_zero, m_exponent));
-
-                        const __m256d m_fact_a        = _mm256_mul_pd(m_delta_g_free, m_vdw_volume);
-                        const __m256d m_fact_b        = _mm256_mul_pd(m_expo, m_INV_PI_SQRT_PI);
-                        const __m256d m_fact          = _mm256_mul_pd(_mm256_mul_pd(m_fact_a, m_fact_b),
-                                                                      _mm256_mul_pd(m_inv_rij2, m_inv_lambda));
-
-                              __m256d m_deriv         = _mm256_add_pd(m_inv_rij, _mm256_mul_pd(m_rij_vdwr_diff, m_inv_lambda2));
-                                      m_deriv         = _mm256_mul_pd(_mm256_mul_pd(m_inv_rij, m_fact), m_deriv);
+void Implicit::calculate() {
+    if(pbc) makeWhole();
+    if(getExchangeStep()) nl_update = 0;
+    if (nl_update == 0) {
+        update_neighb();
+    }
 
-                        m_fedensity = _mm256_add_pd(m_fedensity, m_fact);
-                        fedensity_deriv[i]  += m_deriv[0] * dist0;
-                        fedensity_deriv[i]  += m_deriv[1] * dist1;
-                        fedensity_deriv[i]  += m_deriv[2] * dist2;
-                        fedensity_deriv[i]  += m_deriv[3] * dist3;
-                        fedensity_deriv[j0] -= m_deriv[0] * dist0;
-                        fedensity_deriv[j1] -= m_deriv[1] * dist1;
-                        fedensity_deriv[j2] -= m_deriv[2] * dist2;
-                        fedensity_deriv[j3] -= m_deriv[3] * dist3;
-                    }
+    const unsigned size=getNumberOfAtoms();
+    double bias = 0.0;
+    Tensor deriv_box;
+    unsigned nt=OpenMP::getNumThreads();
+    const unsigned nn=nl.size();
+    if(nt*10>nn) nt=nn/10;
+    if(nt==0)nt=1;
+    #pragma omp parallel num_threads(nt)
+    {
+        vector<Vector> deriv_omp(size);
+        #pragma omp for reduction(+:bias)
+        for (unsigned i=0; i<size; ++i) {
+            const Vector posi = getPosition(i);
+            double fedensity = 0.0;
+            Vector deriv_i;
+            const double vdw_volume_i   = parameter[i][0];
+            const double delta_g_free_i = parameter[i][1];
+            const double inv_lambda_i   = parameter[i][2];
+            const double vdw_radius_i   = parameter[i][3];
+
+            // The pairwise interactions are unsymmetric, but we can get away with calculating the distance only once
+            for (unsigned i_nl=0; i_nl<nl[i].size(); ++i_nl) {
+                const unsigned j = nl[i][i_nl];
+                const double vdw_volume_j   = parameter[j][0];
+                const double delta_g_free_j = parameter[j][1];
+                const double inv_lambda_j   = parameter[j][2];
+                const double vdw_radius_j   = parameter[j][3];
+
+                const Vector dist     = delta(posi, getPosition(j));
+                const double rij      = dist.modulo();
+                const double inv_rij  = 1.0 / rij;
+                const double inv_rij2 = inv_rij * inv_rij;
+                const double fact_ij  = inv_rij2 * delta_g_free_i * vdw_volume_j * INV_PI_SQRT_PI* inv_lambda_i;
+                const double fact_ji  = inv_rij2 * delta_g_free_j * vdw_volume_i * INV_PI_SQRT_PI* inv_lambda_j;
+                double deriv = 0.;
+
+                // in this case we can calculate a single exponential
+                if(!nlexpo[i][i_nl]) {
+                  // i-j interaction
+                  if(inv_rij > 0.25*inv_lambda_i)
+                  {
+                    const double inv_lambda2_i = inv_lambda_i * inv_lambda_i;
+                    const double rij_vdwr_diff = rij - vdw_radius_i;
+                    const double expo = exp(-inv_lambda2_i * rij_vdwr_diff * rij_vdwr_diff);
+                    const double fact = expo * fact_ij;
+                    fedensity += fact;
+                    deriv     += inv_rij * fact * (inv_rij + rij_vdwr_diff * inv_lambda2_i);
+                  }
+
+                  // j-i interaction
+                  if(inv_rij > 0.25*inv_lambda_j)
+                  {
+                    const double inv_lambda2_j = inv_lambda_j * inv_lambda_j;
+                    const double rij_vdwr_diff = rij - vdw_radius_j;
+                    const double expo = exp(-inv_lambda2_j * rij_vdwr_diff * rij_vdwr_diff);
+                    const double fact = expo * fact_ji;
+                    fedensity += fact;
+                    deriv     += inv_rij * fact * (inv_rij + rij_vdwr_diff * inv_lambda2_j);
+                  }
+                } else {
+                  // i-j interaction
+                  if(inv_rij > 0.25*inv_lambda_i)
+                  {
+                    const double inv_lambda2 = inv_lambda_i * inv_lambda_i;
+                    const double rij_vdwr_diff = rij - vdw_radius_i;
+                    const double expo = exp(-inv_lambda2 * rij_vdwr_diff * rij_vdwr_diff);
+                    const double fact = expo*(fact_ij + fact_ji);
+                    fedensity += fact;
+                    deriv     += inv_rij * fact * (inv_rij + rij_vdwr_diff * inv_lambda2);
+                  }
                 }
 
-                // Sum up 4 elements of vector
-                double fedensity = m_fedensity[0] + m_fedensity[1] + m_fedensity[2] + m_fedensity[3];
-
-                // Remainder loop, like the generic version, but max 3 iterations
-                for (unsigned i_nl = (inner_size - inner_remainder); i_nl < inner_size; ++i_nl) {
-                    const unsigned j = nl[i][i_nl];
-                    const Vector dist = delta(posi, getPosition(j));
-                    const double rij = dist.modulo();
-                    const double inv_rij = 1.0 / rij;
-                    const double inv_rij2 = inv_rij * inv_rij;
-
-                    // i-j interaction
-                    if(rij < 3.*parameter[i][5])
-                    {
-                        const double delta_g_free = parameter[i][2];
-                        const double lambda = parameter[i][5];
-                        const double vdw_radius = parameter[i][6];
-                        const double inv_lambda = 1.0 / lambda;
-                        const double inv_lambda2 = inv_lambda * inv_lambda;
-                        const double vdw_volume = parameter[j][0];
-
-                        const double rij_vdwr_diff = rij - vdw_radius;
-                        const double expo = exp(-inv_lambda2 * rij_vdwr_diff * rij_vdwr_diff);
-                        const double fact = delta_g_free * vdw_volume * expo * INV_PI_SQRT_PI * inv_rij2 * inv_lambda;
-                        const double deriv = inv_rij * fact * (inv_rij + rij_vdwr_diff * inv_lambda2);
-
-                        fedensity += fact;
-                        fedensity_deriv[i] += deriv * dist;
-                        fedensity_deriv[j] -= deriv * dist;
-                    }
+                const Vector dd = deriv*dist;
+                deriv_i      += dd;
+                deriv_omp[j] -= dd;
+            }
+            deriv_omp[i] += deriv_i; 
+            bias += - 0.5 * fedensity;
+        }
+        #pragma omp critical
+        for(unsigned i=0;i<size;i++) {
+          setAtomsDerivatives(i, -deriv_omp[i]);
+          deriv_box += Tensor(getPosition(i), -deriv_omp[i]);
+        }
+    }
 
-                    // j-i interaction
-                    if(rij < 3.*parameter[j][5])
-                    {
-                        const double delta_g_free = parameter[j][2];
-                        const double lambda = parameter[j][5];
-                        const double vdw_radius = parameter[j][6];
-                        const double inv_lambda = 1.0 / lambda;
-                        const double inv_lambda2 = inv_lambda * inv_lambda;
-                        const double vdw_volume = parameter[i][0];
+    setBoxDerivatives(-deriv_box);
+    setValue(delta_g_ref + bias);
 
-                        const double rij_vdwr_diff = rij - vdw_radius;
-                        const double expo = exp(-inv_lambda2 * rij_vdwr_diff * rij_vdwr_diff);
-                        const double fact = delta_g_free * vdw_volume * expo * INV_PI_SQRT_PI * inv_rij2 * inv_lambda;
-                        const double deriv = inv_rij * fact * (inv_rij + rij_vdwr_diff * inv_lambda2);
+    // Keep track of the neighbourlist updates
+    ++nl_update;
+    if (nl_update == stride) {
+        nl_update = 0;
+    }
+}
 
-                        fedensity += fact;
-                        fedensity_deriv[i] += deriv * dist;
-                        fedensity_deriv[j] -= deriv * dist;
-                    }
+void Implicit::setupConstants(const vector<AtomNumber> &atoms, vector<vector<double> > &parameter, bool tcorr) {
+    vector<vector<double> > parameter_temp;
+    parameter_temp.resize(atoms.size());
+    map<string, vector<double> > valuemap;
+    map<string, map<string, string> > typemap;
+    valuemap = setupValueMap();
+    typemap  = setupTypeMap();
+    vector<SetupMolInfo*> moldat = plumed.getActionSet().select<SetupMolInfo*>();
+    if (moldat.size() == 1) {
+        log << "  MOLINFO DATA found, using proper atom names\n";
+        for(unsigned i=0; i<atoms.size(); ++i) {
+
+            // Get atom and residue names
+            string Aname = moldat[0]->getAtomName(atoms[i]);
+            string Rname = moldat[0]->getResidueName(atoms[i]);
+            string Atype = typemap[Rname][Aname];
+
+            // Check for terminal COOH or COO- (different atomtypes & parameters!)
+            if (moldat[0]->getAtomName(atoms[i]) == "OT1") {
+                // We create a temporary AtomNumber object to access future atoms
+                unsigned ai = atoms[i].index();
+                AtomNumber tmp_an;
+                tmp_an.setIndex(ai + 2);
+                if (moldat[0]->getAtomName(tmp_an) == "HT2") {
+                    // COOH
+                    Atype = "OB";
+                } else {
+                    // COO-
+                    Atype = "OC";
                 }
-                bias += delta_g_ref - 0.5 * fedensity;
             }
-
-            Tensor deriv_box;
-            for (unsigned i=0; i<size; ++i) {
-                setAtomsDerivatives(i, -fedensity_deriv[i]);
-                deriv_box += Tensor(getPosition(i), -fedensity_deriv[i]);
+            if (moldat[0]->getAtomName(atoms[i]) == "OT2") {
+                unsigned ai = atoms[i].index();
+                AtomNumber tmp_an;
+                tmp_an.setIndex(ai + 1);
+                if (moldat[0]->getAtomName(tmp_an) == "HT2") {
+                    // COOH
+                    Atype = "OH1";
+                } else {
+                    // COO-
+                    Atype = "OC";
+                }
             }
-            setBoxDerivatives(-deriv_box);
-            setValue(bias);
 
-            // Keep track of the neighbourlist updates
-            ++nl_update;
-            if (nl_update == stride) {
-                nl_update = 0;
-            }
-        }
+            // Check for H-atoms
+            char type;
+            char first = Aname.at(0);
 
-#else
-        void Implicit::calculate() {
-            if(pbc) makeWhole();
-            if(getExchangeStep()) nl_update = 0;
-            if (nl_update == 0) {
-                update_neighb();
+            // GOLDEN RULE: type is first letter, if not a number
+            if (!isdigit(first)){
+                type = first;
+                // otherwise is the second
+            } else {
+                type = Aname.at(1);
             }
 
-            const unsigned size=getNumberOfAtoms();
-            vector<Vector> fedensity_deriv(size);
-            double bias = 0.0;
-
-            const unsigned nt = OpenMP::getGoodNumThreads(nl);
-            #pragma omp parallel num_threads(nt)
-            {
-                #pragma omp for reduction(+:bias)
-                for (unsigned i=0; i<size; ++i) {
-                    const Vector posi = getPosition(i);
-                    const double delta_g_ref = parameter[i][1];
-                    double fedensity = 0.0;
-
-                    // The pairwise interactions are unsymmetric, but we can get away with calculating the distance only once
-                    for (unsigned i_nl=0; i_nl<nl[i].size(); ++i_nl) {
-                        const unsigned j = nl[i][i_nl];
-                        const Vector dist = delta(posi, getPosition(j));
-                        const double rij = dist.modulo();
-                        const double inv_rij = 1.0 / rij;
-                        const double inv_rij2 = inv_rij * inv_rij;
-
-                        // i-j interaction
-                        if(rij < 3.*parameter[i][5])
-                        {
-                            const double delta_g_free = parameter[i][2];
-                            const double lambda = parameter[i][5];
-                            const double vdw_radius = parameter[i][6];
-                            const double inv_lambda = 1.0 / lambda;
-                            const double inv_lambda2 = inv_lambda * inv_lambda;
-                            const double vdw_volume = parameter[j][0];
-
-                            const double rij_vdwr_diff = rij - vdw_radius;
-                            const double expo = exp(-inv_lambda2 * rij_vdwr_diff * rij_vdwr_diff);
-                            const double fact = delta_g_free * vdw_volume * expo * INV_PI_SQRT_PI * inv_rij2 * inv_lambda;
-                            const double deriv = inv_rij * fact * (inv_rij + rij_vdwr_diff * inv_lambda2);
-
-                            // This is needed for correct box derivs
-                            #pragma omp critical(deriv)
-                            {
-                                fedensity += fact;
-                                fedensity_deriv[i] += deriv * dist;
-                                fedensity_deriv[j] -= deriv * dist;
-                            }
-                        }
-
-                        // j-i interaction
-                        if(rij < 3.*parameter[j][5])
-                        {
-                            const double delta_g_free = parameter[j][2];
-                            const double lambda = parameter[j][5];
-                            const double vdw_radius = parameter[j][6];
-                            const double inv_lambda = 1.0 / lambda;
-                            const double inv_lambda2 = inv_lambda * inv_lambda;
-                            const double vdw_volume = parameter[i][0];
-
-                            const double rij_vdwr_diff = rij - vdw_radius;
-                            const double expo = exp(-inv_lambda2 * rij_vdwr_diff * rij_vdwr_diff);
-                            const double fact = delta_g_free * vdw_volume * expo * INV_PI_SQRT_PI * inv_rij2 * inv_lambda;
-                            const double deriv = inv_rij * fact * (inv_rij + rij_vdwr_diff * inv_lambda2);
-
-                            #pragma omp critical(deriv)
-                            {
-                                fedensity += fact;
-                                fedensity_deriv[i] += deriv * dist;
-                                fedensity_deriv[j] -= deriv * dist;
-                            }
-                        }
-                    }
-                    bias += delta_g_ref - 0.5 * fedensity;
-                }
+            if (type == 'H') {
+                error("EEF1-SB does not allow the use of hydrogen atoms!\n");
             }
 
-            Tensor deriv_box;
-            const unsigned ntd = OpenMP::getGoodNumThreads(fedensity_deriv);
-            {
-                for (unsigned i=0; i<size; ++i) {
-                    setAtomsDerivatives(i, -fedensity_deriv[i]);
-                    deriv_box += Tensor(getPosition(i), -fedensity_deriv[i]);
-                }
+            // Lookup atomtype in table or throw exception if its not there
+            try {
+                parameter_temp[i] = valuemap.at(Atype);
+            } catch (exception &e) {
+                log << "Type: " << Atype << "  Name: " << Aname << "  Residue: " << Rname << "\n";
+                error("Invalid atom type!\n");
             }
 
-            setBoxDerivatives(-deriv_box);
-            setValue(bias);
-
-            // Keep track of the neighbourlist updates
-            ++nl_update;
-            if (nl_update == stride) {
-                nl_update = 0;
+            // Temperature correction
+            if (tcorr && parameter[i][1] > 0.0) {
+                const double t0 = 298.15;
+                const double delta_g_ref_t0 = parameter_temp[i][1];
+                const double delta_h_ref_t0 = parameter_temp[i][3];
+                const double delta_cp = parameter_temp[i][4];
+                const double delta_s_ref_t0 = (delta_h_ref_t0 - delta_g_ref_t0) / t0;
+                const double t = plumed.getAtoms().getKbT() / plumed.getAtoms().getKBoltzmann();
+                parameter_temp[i][1] -= delta_s_ref_t0 * (t - t0) - delta_cp * t * std::log(t / t0) + delta_cp * (t - t0);
+                parameter_temp[i][2] *= parameter_temp[i][1] / delta_g_ref_t0;
             }
+            parameter[i][0] = parameter_temp[i][0]; 
+            parameter[i][1] = parameter_temp[i][2]; 
+            parameter[i][2] = parameter_temp[i][5]; 
+            parameter[i][3] = parameter_temp[i][6]; 
         }
-#endif
-
-        void Implicit::setupConstants(const vector<AtomNumber> &atoms, vector<vector<double> > &parameter) {
-            setupTypeMap();
-            vector<SetupMolInfo*> moldat = plumed.getActionSet().select<SetupMolInfo*>();
-            if (moldat.size() == 1) {
-                log << "  MOLINFO DATA found, using proper atom names\n";
-                for(unsigned i=0; i<atoms.size(); ++i) {
-
-                    // Get atom and residue names
-                    string Aname = moldat[0]->getAtomName(atoms[i]);
-                    string Rname = moldat[0]->getResidueName(atoms[i]);
-                    string Atype = typemap[Rname][Aname];
-
-                    // Check for terminal COOH or COO- (different atomtypes & parameters!)
-                    if (moldat[0]->getAtomName(atoms[i]) == "OT1") {
-                        // We create a temporary AtomNumber object to access future atoms
-                        unsigned ai = atoms[i].index();
-                        AtomNumber tmp_an;
-                        tmp_an.setIndex(ai + 2);
-                        if (moldat[0]->getAtomName(tmp_an) == "HT2") {
-                            // COOH
-                            Atype = "OB";
-                        } else {
-                            // COO-
-                            Atype = "OC";
-                        }
-                    }
-                    if (moldat[0]->getAtomName(atoms[i]) == "OT2") {
-                        unsigned ai = atoms[i].index();
-                        AtomNumber tmp_an;
-                        tmp_an.setIndex(ai + 1);
-                        if (moldat[0]->getAtomName(tmp_an) == "HT2") {
-                            // COOH
-                            Atype = "OH1";
-                        } else {
-                            // COO-
-                            Atype = "OC";
-                        }
-                    }
-
-                    // Check for H-atoms
-                    char type;
-                    char first = Aname.at(0);
-
-                    // GOLDEN RULE: type is first letter, if not a number
-                    if (!isdigit(first)){
-                        type = first;
-                        // otherwise is the second
-                    } else {
-                        type = Aname.at(1);
-                    }
-
-                    if (type == 'H') {
-                        error("EEF1-SB does not allow the use of hydrogen atoms!\n");
-                    }
-
-                    // Lookup atomtype in table or throw exception if its not there
-                    try {
-                        parameter[i] = valuemap.at(Atype);
-                    } catch (exception &e) {
-                        log << "Type: " << Atype << "  Name: " << Aname << "  Residue: " << Rname << "\n";
-                        error("Invalid atom type!\n");
-                    }
+    } else {
+        error("MOLINFO DATA not found\n");
+    }
+    for(unsigned i=0; i<atoms.size(); ++i) delta_g_ref += parameter_temp[i][1];
+}
 
-                    // Temperature correction
-                    if (tcorr && parameter[i][1] > 0.0) {
-                        const double t0 = 298.15;
-                        const double delta_g_ref_t0 = parameter[i][1];
-                        const double delta_h_ref_t0 = parameter[i][3];
-                        const double delta_cp = parameter[i][4];
-                        const double delta_s_ref_t0 = (delta_h_ref_t0 - delta_g_ref_t0) / t0;
-                        const double t = plumed.getAtoms().getKbT() / plumed.getAtoms().getKBoltzmann();
-                        parameter[i][1] -= delta_s_ref_t0 * (t - t0) - delta_cp * t * std::log(t / t0) + delta_cp * (t - t0);
-                        parameter[i][2] *= parameter[i][1] / delta_g_ref_t0;
-                    }
+map<string, map<string, string> > Implicit::setupTypeMap()  {
+    map<string, map<string, string> > typemap;
+    typemap = {
+        {"ALA", {
+                    {"N",   "NH1"},
+                    {"HN",  "H"  },
+                    {"CA",  "CT1"},
+                    {"HA",  "HB1"},
+                    {"CB",  "CT3"},
+                    {"HB1", "HA3"},
+                    {"HB2", "HA3"},
+                    {"HB3", "HA3"},
+                    {"C",   "C"  },
+                    {"O",   "O"  }
+                }
+        },
+        {"ARG", {
+                    {"N",    "NH1"},
+                    {"HN",   "H"  },
+                    {"CA",   "CT1"},
+                    {"HA",   "HB1"},
+                    {"CB",   "CT2"},
+                    {"HB1",  "HA2"},
+                    {"HB2",  "HA2"},
+                    {"CG",   "CT2"},
+                    {"HG1",  "HA2"},
+                    {"HG2",  "HA2"},
+                    {"CD",   "CT2"},
+                    {"HD1",  "HA2"},
+                    {"HD2",  "HA2"},
+                    {"NE",   "NC2"},
+                    {"HE",   "HC" },
+                    {"CZ",   "C"  },
+                    {"NH1",  "NC2"},
+                    {"HH11", "HC" },
+                    {"HH12", "HC" },
+                    {"NH2",  "NC2"},
+                    {"HH21", "HC" },
+                    {"HH22", "HC" },
+                    {"C",    "C"  },
+                    {"O",    "O"  }
+                }
+        },
+        {"ASN", {
+                    {"N",    "NH1"},
+                    {"HN",   "H"  },
+                    {"CA",   "CT1"},
+                    {"HA",   "HB1"},
+                    {"CB",   "CT2"},
+                    {"HB1",  "HA2"},
+                    {"HB2",  "HA2"},
+                    {"CG",   "CC" },
+                    {"OD1",  "O"  },
+                    {"ND2",  "NH2"},
+                    {"HD21", "H"  },
+                    {"HD22", "H"  },
+                    {"C",    "C"  },
+                    {"O",    "O"  }
+                }
+        },
+        {"ASPP", {
+                     {"N",   "NH1"},
+                     {"HN",  "H"  },
+                     {"CA",  "CT1"},
+                     {"HA",  "HB1"},
+                     {"CB",  "CT2"},
+                     {"HB1", "HA2"},
+                     {"HB2", "HA2"},
+                     {"CG",  "CD" },
+                     {"OD1", "OB" },
+                     {"OD2", "OH1"},
+                     {"HD2", "H"  },
+                     {"C",   "C"  },
+                     {"O",   "O"  }
+                 }
+        },
+        {"ASP", {
+                    {"N",   "NH1"},
+                    {"HN",  "H"  },
+                    {"CA",  "CT1"},
+                    {"HA",  "HB1"},
+                    {"CB",  "CT2"},
+                    {"HB1", "HA2"},
+                    {"HB2", "HA2"},
+                    {"CG",  "CC" },
+                    {"OD1", "OC" },
+                    {"OD2", "OC" },
+                    {"C",   "C"  },
+                    {"O",   "O"  }
+                }
+        },
+        {"CYS", {
+                    {"N",   "NH1"},
+                    {"HN",  "H"  },
+                    {"CA",  "CT1"},
+                    {"HA",  "HB1"},
+                    {"CB",  "CT2"},
+                    {"HB1", "HA2"},
+                    {"HB2", "HA2"},
+                    {"SG",  "S"  },
+                    {"HG1", "HS" },
+                    {"C",   "C"  },
+                    {"O",   "O"  }
+                }
+        },
+        {"GLN", {
+                    {"N",    "NH1" },
+                    {"HN",   "H"   },
+                    {"CA",   "CT1" },
+                    {"HA",   "HB1" },
+                    {"CB",   "CT2" },
+                    {"HB1",  "HA2" },
+                    {"HB2",  "HA2" },
+                    {"CG",   "CT2" },
+                    {"HG1",  "HA2" },
+                    {"HG2",  "HA2" },
+                    {"CD",   "CC"  },
+                    {"OE1",  "O"   },
+                    {"NE2",  "NH2" },
+                    {"HE21", "H"   },
+                    {"HE22", "H"   },
+                    {"C",    "C"   },
+                    {"O",    "O"   }
+                }
+        },
+        {"GLUP", {
+                     {"N",   "NH1"},
+                     {"HN",  "H"  },
+                     {"CA",  "CT1"},
+                     {"HA",  "HB1"},
+                     {"CB",  "CT2"},
+                     {"HB1", "HA2"},
+                     {"HB2", "HA2"},
+                     {"CG",  "CT2"},
+                     {"HG1", "HA2"},
+                     {"HG2", "HA2"},
+                     {"CD",  "CD" },
+                     {"OE1", "OB" },
+                     {"OE2", "OH1"},
+                     {"HE2", "H"  },
+                     {"C",   "C"  },
+                     {"O",   "O"  }
+                 }
+        },
+        {"GLU", {
+                    {"N",   "NH1"},
+                    {"HN",  "H"  },
+                    {"CA",  "CT1"},
+                    {"HA",  "HB1"},
+                    {"CB",  "CT2"},
+                    {"HB1", "HA2"},
+                    {"HB2", "HA2"},
+                    {"CG",  "CT2"},
+                    {"HG1", "HA2"},
+                    {"HG2", "HA2"},
+                    {"CD",  "CC" },
+                    {"OE1", "OC" },
+                    {"OE2", "OC" },
+                    {"C",   "C"  },
+                    {"O",   "O"  }
+                }
+        },
+        {"GLY", {
+                    {"N",   "NH1"},
+                    {"HN",  "H"  },
+                    {"CA",  "CT2"},
+                    {"HA1", "HB2"},
+                    {"HA2", "HB2"},
+                    {"C",   "C"  },
+                    {"O",   "O"  }
+                }
+        },
+        {"HSD", {
+                    {"N",   "NH1"},
+                    {"HN",  "H"  },
+                    {"CA",  "CT1"},
+                    {"HA",  "HB1"},
+                    {"CB",  "CT2"},
+                    {"HB1", "HA2"},
+                    {"HB2", "HA2"},
+                    {"ND1", "NR1"},
+                    {"HD1", "H"  },
+                    {"CG",  "CPH1"},
+                    {"CE1", "CPH2"},
+                    {"HE1", "HR1"},
+                    {"NE2", "NR2"},
+                    {"CD2", "CPH1"},
+                    {"HD2", "HR3"},
+                    {"C",   "C"  },
+                    {"O",   "O"  }
+                }
+        },
+        {"HIS", {
+                    {"N",   "NH1"},
+                    {"HN",  "H"  },
+                    {"CA",  "CT1"},
+                    {"HA",  "HB1"},
+                    {"CB",  "CT2"},
+                    {"HB1", "HA2"},
+                    {"HB2", "HA2"},
+                    {"ND1", "NR2"},
+                    {"CG",  "CPH1"},
+                    {"CE1", "CPH2"},
+                    {"HE1", "HR1"},
+                    {"NE2", "NR1"},
+                    {"HE2", "H"  },
+                    {"CD2", "CPH1"},
+                    {"HD2", "HR3"},
+                    {"C",   "C"  },
+                    {"O",   "O"  }
+                }
+        },
+        {"HSE", {
+                    {"N",   "NH1"},
+                    {"HN",  "H"  },
+                    {"CA",  "CT1"},
+                    {"HA",  "HB1"},
+                    {"CB",  "CT2"},
+                    {"HB1", "HA2"},
+                    {"HB2", "HA2"},
+                    {"ND1", "NR2"},
+                    {"CG",  "CPH1"},
+                    {"CE1", "CPH2"},
+                    {"HE1", "HR1"},
+                    {"NE2", "NR1"},
+                    {"HE2", "H"  },
+                    {"CD2", "CPH1"},
+                    {"HD2", "HR3"},
+                    {"C",   "C"  },
+                    {"O",   "O"  }
+                }
+        },
+        {"HSP", {
+                    {"N",   "NH1"},
+                    {"HN",  "H"  },
+                    {"CA",  "CT1"},
+                    {"HA",  "HB1"},
+                    {"CB",  "CT2"},
+                    {"HB1", "HA2"},
+                    {"HB2", "HA2"},
+                    {"CD2", "CPH1"},
+                    {"HD2", "HR1"},
+                    {"CG",  "CPH1"},
+                    {"NE2", "NR3"},
+                    {"HE2", "H"  },
+                    {"ND1", "NR3"},
+                    {"HD1", "H"  },
+                    {"CE1", "CPH2"},
+                    {"HE1", "HR2"},
+                    {"C",   "C"  },
+                    {"O",   "O"  }
+                }
+        },
+        {"ILE", {
+                    {"N",    "NH1"},
+                    {"HN",   "H"  },
+                    {"CA",   "CT1"},
+                    {"HA",   "HB1"},
+                    {"CB",   "CT1"},
+                    {"HB",   "HA1"},
+                    {"CG2",  "CT3"},
+                    {"HG21", "HA3"},
+                    {"HG22", "HA3"},
+                    {"HG23", "HA3"},
+                    {"CG1",  "CT2"},
+                    {"HG11", "HA2"},
+                    {"HG12", "HA2"},
+                    {"CD",   "CT3"},
+                    {"HD1",  "HA3"},
+                    {"HD2",  "HA3"},
+                    {"HD3",  "HA3"},
+                    {"C",    "C"  },
+                    {"O",    "O"  }
+                }
+        },
+        {"LEU", {
+                    {"N",    "NH1"},
+                    {"HN",   "H"  },
+                    {"CA",   "CT1"},
+                    {"HA",   "HB1"},
+                    {"CB",   "CT2"},
+                    {"HB1",  "HA2"},
+                    {"HB2",  "HA2"},
+                    {"CG",   "CT1"},
+                    {"HG",   "HA1"},
+                    {"CD1",  "CT3"},
+                    {"HD11", "HA3"},
+                    {"HD12", "HA3"},
+                    {"HD13", "HA3"},
+                    {"CD2",  "CT3"},
+                    {"HD21", "HA3"},
+                    {"HD22", "HA3"},
+                    {"HD23", "HA3"},
+                    {"C",    "C"  },
+                    {"O",    "O"  }
+                }
+        },
+        {"LYS", {
+                    {"N",   "NH1"},
+                    {"HN",  "H"  },
+                    {"CA",  "CT1"},
+                    {"HA",  "HB1"},
+                    {"CB",  "CT2"},
+                    {"HB1", "HA2"},
+                    {"HB2", "HA2"},
+                    {"CG",  "CT2"},
+                    {"HG1", "HA2"},
+                    {"HG2", "HA2"},
+                    {"CD",  "CT2"},
+                    {"HD1", "HA2"},
+                    {"HD2", "HA2"},
+                    {"CE",  "CT2"},
+                    {"HE1", "HA2"},
+                    {"HE2", "HA2"},
+                    {"NZ",  "NH3"},
+                    {"HZ1", "HC" },
+                    {"HZ2", "HC" },
+                    {"HZ3", "HC" },
+                    {"C",   "C"  },
+                    {"O",   "O"  }
+                }
+        },
+        {"MET", {
+                    {"N",   "NH1"},
+                    {"HN",  "H"  },
+                    {"CA",  "CT1"},
+                    {"HA",  "HB1"},
+                    {"CB",  "CT2"},
+                    {"HB1", "HA2"},
+                    {"HB2", "HA2"},
+                    {"CG",  "CT2"},
+                    {"HG1", "HA2"},
+                    {"HG2", "HA2"},
+                    {"SD",  "S"  },
+                    {"CE",  "CT3"},
+                    {"HE1", "HA3"},
+                    {"HE2", "HA3"},
+                    {"HE3", "HA3"},
+                    {"C",   "C"  },
+                    {"O",   "O"  }
+                }
+        },
+        {"PHE", {
+                    {"N",   "NH1"},
+                    {"HN",  "H"  },
+                    {"CA",  "CT1"},
+                    {"HA",  "HB1"},
+                    {"CB",  "CT2"},
+                    {"HB1", "HA2"},
+                    {"HB2", "HA2"},
+                    {"CG",  "CA" },
+                    {"CD1", "CA" },
+                    {"HD1", "HP" },
+                    {"CE1", "CA" },
+                    {"HE1", "HP" },
+                    {"CZ",  "CA" },
+                    {"HZ",  "HP" },
+                    {"CD2", "CA" },
+                    {"HD2", "HP" },
+                    {"CE2", "CA" },
+                    {"HE2", "HP" },
+                    {"C",   "C"  },
+                    {"O",   "O"  }
+                }
+        },
+        {"PRO", {
+                    {"N",   "N"  },
+                    {"CD",  "CP3"},
+                    {"HD1", "HA2"},
+                    {"HD2", "HA2"},
+                    {"CA",  "CP1"},
+                    {"HA",  "HB1"},
+                    {"CB",  "CP2"},
+                    {"HB1", "HA2"},
+                    {"HB2", "HA2"},
+                    {"CG",  "CP2"},
+                    {"HG1", "HA2"},
+                    {"HG2", "HA2"},
+                    {"C",   "C"  },
+                    {"O",   "O"  }
+                }
+        },
+        {"SER", {
+                    {"N",   "NH1"},
+                    {"HN",  "H"  },
+                    {"CA",  "CT1"},
+                    {"HA",  "HB1"},
+                    {"CB",  "CT2"},
+                    {"HB1", "HA2"},
+                    {"HB2", "HA2"},
+                    {"OG",  "OH1"},
+                    {"HG1", "H"  },
+                    {"C",   "C"  },
+                    {"O",   "O"  }
+                }
+        },
+        {"THR", {
+                    {"N",    "NH1"},
+                    {"HN",   "H"  },
+                    {"CA",   "CT1"},
+                    {"HA",   "HB1"},
+                    {"CB",   "CT1"},
+                    {"HB",   "HA1"},
+                    {"OG1",  "OH1"},
+                    {"HG1",  "H"  },
+                    {"CG2",  "CT3"},
+                    {"HG21", "HA3"},
+                    {"HG22", "HA3"},
+                    {"HG23", "HA3"},
+                    {"C",    "C"  },
+                    {"O",    "O"  }
+                }
+        },
+        {"TRP", {
+                    {"N",   "NH1"},
+                    {"HN",  "H"  },
+                    {"CA",  "CT1"},
+                    {"HA",  "HB1"},
+                    {"CB",  "CT2"},
+                    {"HB1", "HA2"},
+                    {"HB2", "HA2"},
+                    {"CG",  "CY" },
+                    {"CD1", "CA" },
+                    {"HD1", "HP" },
+                    {"NE1", "NY" },
+                    {"HE1", "H"  },
+                    {"CE2", "CPT"},
+                    {"CD2", "CPT"},
+                    {"CE3", "CAI"},
+                    {"HE3", "HP" },
+                    {"CZ3", "CA" },
+                    {"HZ3", "HP" },
+                    {"CZ2", "CAI"},
+                    {"HZ2", "HP" },
+                    {"CH2", "CA" },
+                    {"HH2", "HP" },
+                    {"C",   "C"  },
+                    {"O",   "O"  }
+                }
+        },
+        {"TYR", {
+                    {"N",   "NH1"},
+                    {"HN",  "H"  },
+                    {"CA",  "CT1"},
+                    {"HA",  "HB1"},
+                    {"CB",  "CT2"},
+                    {"HB1", "HA2"},
+                    {"HB2", "HA2"},
+                    {"CG",  "CA" },
+                    {"CD1", "CA" },
+                    {"HD1", "HP" },
+                    {"CE1", "CA" },
+                    {"HE1", "HP" },
+                    {"CZ",  "CA" },
+                    {"OH",  "OH1"},
+                    {"HH",  "H"  },
+                    {"CD2", "CA" },
+                    {"HD2", "HP" },
+                    {"CE2", "CA" },
+                    {"HE2", "HP" },
+                    {"C",   "C"  },
+                    {"O",   "O"  }
+                }
+        },
+        {"VAL", {
+                    {"N",    "NH1"},
+                    {"HN",   "H"  },
+                    {"CA",   "CT1"},
+                    {"HA",   "HB1"},
+                    {"CB",   "CT1"},
+                    {"HB",   "HA1"},
+                    {"CG1",  "CT3"},
+                    {"HG11", "HA3"},
+                    {"HG12", "HA3"},
+                    {"HG13", "HA3"},
+                    {"CG2",  "CT3"},
+                    {"HG21", "HA3"},
+                    {"HG22", "HA3"},
+                    {"HG23", "HA3"},
+                    {"C",    "C"  },
+                    {"O",    "O"  }
                 }
-            } else {
-                error("MOLINFO DATA not found\n");
-            }
         }
+    };
+    return typemap;
+}
 
-        void Implicit::setupTypeMap() {
-            typemap = {
-                {"ALA", {
-                            {"N",   "NH1"},
-                            {"HN",  "H"  },
-                            {"CA",  "CT1"},
-                            {"HA",  "HB1"},
-                            {"CB",  "CT3"},
-                            {"HB1", "HA3"},
-                            {"HB2", "HA3"},
-                            {"HB3", "HA3"},
-                            {"C",   "C"  },
-                            {"O",   "O"  }
-                        }
-                },
-                {"ARG", {
-                            {"N",    "NH1"},
-                            {"HN",   "H"  },
-                            {"CA",   "CT1"},
-                            {"HA",   "HB1"},
-                            {"CB",   "CT2"},
-                            {"HB1",  "HA2"},
-                            {"HB2",  "HA2"},
-                            {"CG",   "CT2"},
-                            {"HG1",  "HA2"},
-                            {"HG2",  "HA2"},
-                            {"CD",   "CT2"},
-                            {"HD1",  "HA2"},
-                            {"HD2",  "HA2"},
-                            {"NE",   "NC2"},
-                            {"HE",   "HC" },
-                            {"CZ",   "C"  },
-                            {"NH1",  "NC2"},
-                            {"HH11", "HC" },
-                            {"HH12", "HC" },
-                            {"NH2",  "NC2"},
-                            {"HH21", "HC" },
-                            {"HH22", "HC" },
-                            {"C",    "C"  },
-                            {"O",    "O"  }
-                        }
-                },
-                {"ASN", {
-                            {"N",    "NH1"},
-                            {"HN",   "H"  },
-                            {"CA",   "CT1"},
-                            {"HA",   "HB1"},
-                            {"CB",   "CT2"},
-                            {"HB1",  "HA2"},
-                            {"HB2",  "HA2"},
-                            {"CG",   "CC" },
-                            {"OD1",  "O"  },
-                            {"ND2",  "NH2"},
-                            {"HD21", "H"  },
-                            {"HD22", "H"  },
-                            {"C",    "C"  },
-                            {"O",    "O"  }
-                        }
-                },
-                {"ASPP", {
-                             {"N",   "NH1"},
-                             {"HN",  "H"  },
-                             {"CA",  "CT1"},
-                             {"HA",  "HB1"},
-                             {"CB",  "CT2"},
-                             {"HB1", "HA2"},
-                             {"HB2", "HA2"},
-                             {"CG",  "CD" },
-                             {"OD1", "OB" },
-                             {"OD2", "OH1"},
-                             {"HD2", "H"  },
-                             {"C",   "C"  },
-                             {"O",   "O"  }
-                         }
-                },
-                {"ASP", {
-                            {"N",   "NH1"},
-                            {"HN",  "H"  },
-                            {"CA",  "CT1"},
-                            {"HA",  "HB1"},
-                            {"CB",  "CT2"},
-                            {"HB1", "HA2"},
-                            {"HB2", "HA2"},
-                            {"CG",  "CC" },
-                            {"OD1", "OC" },
-                            {"OD2", "OC" },
-                            {"C",   "C"  },
-                            {"O",   "O"  }
-                        }
-                },
-                {"CYS", {
-                            {"N",   "NH1"},
-                            {"HN",  "H"  },
-                            {"CA",  "CT1"},
-                            {"HA",  "HB1"},
-                            {"CB",  "CT2"},
-                            {"HB1", "HA2"},
-                            {"HB2", "HA2"},
-                            {"SG",  "S"  },
-                            {"HG1", "HS" },
-                            {"C",   "C"  },
-                            {"O",   "O"  }
-                        }
-                },
-                {"GLN", {
-                            {"N",    "NH1" },
-                            {"HN",   "H"   },
-                            {"CA",   "CT1" },
-                            {"HA",   "HB1" },
-                            {"CB",   "CT2" },
-                            {"HB1",  "HA2" },
-                            {"HB2",  "HA2" },
-                            {"CG",   "CT2" },
-                            {"HG1",  "HA2" },
-                            {"HG2",  "HA2" },
-                            {"CD",   "CC"  },
-                            {"OE1",  "O"   },
-                            {"NE2",  "NH2" },
-                            {"HE21", "H"   },
-                            {"HE22", "H"   },
-                            {"C",    "C"   },
-                            {"O",    "O"   }
-                        }
-                },
-                {"GLUP", {
-                             {"N",   "NH1"},
-                             {"HN",  "H"  },
-                             {"CA",  "CT1"},
-                             {"HA",  "HB1"},
-                             {"CB",  "CT2"},
-                             {"HB1", "HA2"},
-                             {"HB2", "HA2"},
-                             {"CG",  "CT2"},
-                             {"HG1", "HA2"},
-                             {"HG2", "HA2"},
-                             {"CD",  "CD" },
-                             {"OE1", "OB" },
-                             {"OE2", "OH1"},
-                             {"HE2", "H"  },
-                             {"C",   "C"  },
-                             {"O",   "O"  }
-                         }
-                },
-                {"GLU", {
-                            {"N",   "NH1"},
-                            {"HN",  "H"  },
-                            {"CA",  "CT1"},
-                            {"HA",  "HB1"},
-                            {"CB",  "CT2"},
-                            {"HB1", "HA2"},
-                            {"HB2", "HA2"},
-                            {"CG",  "CT2"},
-                            {"HG1", "HA2"},
-                            {"HG2", "HA2"},
-                            {"CD",  "CC" },
-                            {"OE1", "OC" },
-                            {"OE2", "OC" },
-                            {"C",   "C"  },
-                            {"O",   "O"  }
-                        }
-                },
-                {"GLY", {
-                            {"N",   "NH1"},
-                            {"HN",  "H"  },
-                            {"CA",  "CT2"},
-                            {"HA1", "HB2"},
-                            {"HA2", "HB2"},
-                            {"C",   "C"  },
-                            {"O",   "O"  }
-                        }
-                },
-                {"HSD", {
-                            {"N",   "NH1"},
-                            {"HN",  "H"  },
-                            {"CA",  "CT1"},
-                            {"HA",  "HB1"},
-                            {"CB",  "CT2"},
-                            {"HB1", "HA2"},
-                            {"HB2", "HA2"},
-                            {"ND1", "NR1"},
-                            {"HD1", "H"  },
-                            {"CG",  "CPH1"},
-                            {"CE1", "CPH2"},
-                            {"HE1", "HR1"},
-                            {"NE2", "NR2"},
-                            {"CD2", "CPH1"},
-                            {"HD2", "HR3"},
-                            {"C",   "C"  },
-                            {"O",   "O"  }
-                        }
-                },
-                {"HIS", {
-                            {"N",   "NH1"},
-                            {"HN",  "H"  },
-                            {"CA",  "CT1"},
-                            {"HA",  "HB1"},
-                            {"CB",  "CT2"},
-                            {"HB1", "HA2"},
-                            {"HB2", "HA2"},
-                            {"ND1", "NR2"},
-                            {"CG",  "CPH1"},
-                            {"CE1", "CPH2"},
-                            {"HE1", "HR1"},
-                            {"NE2", "NR1"},
-                            {"HE2", "H"  },
-                            {"CD2", "CPH1"},
-                            {"HD2", "HR3"},
-                            {"C",   "C"  },
-                            {"O",   "O"  }
-                        }
-                },
-                {"HSE", {
-                            {"N",   "NH1"},
-                            {"HN",  "H"  },
-                            {"CA",  "CT1"},
-                            {"HA",  "HB1"},
-                            {"CB",  "CT2"},
-                            {"HB1", "HA2"},
-                            {"HB2", "HA2"},
-                            {"ND1", "NR2"},
-                            {"CG",  "CPH1"},
-                            {"CE1", "CPH2"},
-                            {"HE1", "HR1"},
-                            {"NE2", "NR1"},
-                            {"HE2", "H"  },
-                            {"CD2", "CPH1"},
-                            {"HD2", "HR3"},
-                            {"C",   "C"  },
-                            {"O",   "O"  }
-                        }
-                },
-                {"HSP", {
-                            {"N",   "NH1"},
-                            {"HN",  "H"  },
-                            {"CA",  "CT1"},
-                            {"HA",  "HB1"},
-                            {"CB",  "CT2"},
-                            {"HB1", "HA2"},
-                            {"HB2", "HA2"},
-                            {"CD2", "CPH1"},
-                            {"HD2", "HR1"},
-                            {"CG",  "CPH1"},
-                            {"NE2", "NR3"},
-                            {"HE2", "H"  },
-                            {"ND1", "NR3"},
-                            {"HD1", "H"  },
-                            {"CE1", "CPH2"},
-                            {"HE1", "HR2"},
-                            {"C",   "C"  },
-                            {"O",   "O"  }
-                        }
-                },
-                {"ILE", {
-                            {"N",    "NH1"},
-                            {"HN",   "H"  },
-                            {"CA",   "CT1"},
-                            {"HA",   "HB1"},
-                            {"CB",   "CT1"},
-                            {"HB",   "HA1"},
-                            {"CG2",  "CT3"},
-                            {"HG21", "HA3"},
-                            {"HG22", "HA3"},
-                            {"HG23", "HA3"},
-                            {"CG1",  "CT2"},
-                            {"HG11", "HA2"},
-                            {"HG12", "HA2"},
-                            {"CD",   "CT3"},
-                            {"HD1",  "HA3"},
-                            {"HD2",  "HA3"},
-                            {"HD3",  "HA3"},
-                            {"C",    "C"  },
-                            {"O",    "O"  }
-                        }
-                },
-                {"LEU", {
-                            {"N",    "NH1"},
-                            {"HN",   "H"  },
-                            {"CA",   "CT1"},
-                            {"HA",   "HB1"},
-                            {"CB",   "CT2"},
-                            {"HB1",  "HA2"},
-                            {"HB2",  "HA2"},
-                            {"CG",   "CT1"},
-                            {"HG",   "HA1"},
-                            {"CD1",  "CT3"},
-                            {"HD11", "HA3"},
-                            {"HD12", "HA3"},
-                            {"HD13", "HA3"},
-                            {"CD2",  "CT3"},
-                            {"HD21", "HA3"},
-                            {"HD22", "HA3"},
-                            {"HD23", "HA3"},
-                            {"C",    "C"  },
-                            {"O",    "O"  }
-                        }
-                },
-                {"LYS", {
-                            {"N",   "NH1"},
-                            {"HN",  "H"  },
-                            {"CA",  "CT1"},
-                            {"HA",  "HB1"},
-                            {"CB",  "CT2"},
-                            {"HB1", "HA2"},
-                            {"HB2", "HA2"},
-                            {"CG",  "CT2"},
-                            {"HG1", "HA2"},
-                            {"HG2", "HA2"},
-                            {"CD",  "CT2"},
-                            {"HD1", "HA2"},
-                            {"HD2", "HA2"},
-                            {"CE",  "CT2"},
-                            {"HE1", "HA2"},
-                            {"HE2", "HA2"},
-                            {"NZ",  "NH3"},
-                            {"HZ1", "HC" },
-                            {"HZ2", "HC" },
-                            {"HZ3", "HC" },
-                            {"C",   "C"  },
-                            {"O",   "O"  }
-                        }
-                },
-                {"MET", {
-                            {"N",   "NH1"},
-                            {"HN",  "H"  },
-                            {"CA",  "CT1"},
-                            {"HA",  "HB1"},
-                            {"CB",  "CT2"},
-                            {"HB1", "HA2"},
-                            {"HB2", "HA2"},
-                            {"CG",  "CT2"},
-                            {"HG1", "HA2"},
-                            {"HG2", "HA2"},
-                            {"SD",  "S"  },
-                            {"CE",  "CT3"},
-                            {"HE1", "HA3"},
-                            {"HE2", "HA3"},
-                            {"HE3", "HA3"},
-                            {"C",   "C"  },
-                            {"O",   "O"  }
-                        }
-                },
-                {"PHE", {
-                            {"N",   "NH1"},
-                            {"HN",  "H"  },
-                            {"CA",  "CT1"},
-                            {"HA",  "HB1"},
-                            {"CB",  "CT2"},
-                            {"HB1", "HA2"},
-                            {"HB2", "HA2"},
-                            {"CG",  "CA" },
-                            {"CD1", "CA" },
-                            {"HD1", "HP" },
-                            {"CE1", "CA" },
-                            {"HE1", "HP" },
-                            {"CZ",  "CA" },
-                            {"HZ",  "HP" },
-                            {"CD2", "CA" },
-                            {"HD2", "HP" },
-                            {"CE2", "CA" },
-                            {"HE2", "HP" },
-                            {"C",   "C"  },
-                            {"O",   "O"  }
-                        }
-                },
-                {"PRO", {
-                            {"N",   "N"  },
-                            {"CD",  "CP3"},
-                            {"HD1", "HA2"},
-                            {"HD2", "HA2"},
-                            {"CA",  "CP1"},
-                            {"HA",  "HB1"},
-                            {"CB",  "CP2"},
-                            {"HB1", "HA2"},
-                            {"HB2", "HA2"},
-                            {"CG",  "CP2"},
-                            {"HG1", "HA2"},
-                            {"HG2", "HA2"},
-                            {"C",   "C"  },
-                            {"O",   "O"  }
-                        }
-                },
-                {"SER", {
-                            {"N",   "NH1"},
-                            {"HN",  "H"  },
-                            {"CA",  "CT1"},
-                            {"HA",  "HB1"},
-                            {"CB",  "CT2"},
-                            {"HB1", "HA2"},
-                            {"HB2", "HA2"},
-                            {"OG",  "OH1"},
-                            {"HG1", "H"  },
-                            {"C",   "C"  },
-                            {"O",   "O"  }
-                        }
-                },
-                {"THR", {
-                            {"N",    "NH1"},
-                            {"HN",   "H"  },
-                            {"CA",   "CT1"},
-                            {"HA",   "HB1"},
-                            {"CB",   "CT1"},
-                            {"HB",   "HA1"},
-                            {"OG1",  "OH1"},
-                            {"HG1",  "H"  },
-                            {"CG2",  "CT3"},
-                            {"HG21", "HA3"},
-                            {"HG22", "HA3"},
-                            {"HG23", "HA3"},
-                            {"C",    "C"  },
-                            {"O",    "O"  }
-                        }
-                },
-                {"TRP", {
-                            {"N",   "NH1"},
-                            {"HN",  "H"  },
-                            {"CA",  "CT1"},
-                            {"HA",  "HB1"},
-                            {"CB",  "CT2"},
-                            {"HB1", "HA2"},
-                            {"HB2", "HA2"},
-                            {"CG",  "CY" },
-                            {"CD1", "CA" },
-                            {"HD1", "HP" },
-                            {"NE1", "NY" },
-                            {"HE1", "H"  },
-                            {"CE2", "CPT"},
-                            {"CD2", "CPT"},
-                            {"CE3", "CAI"},
-                            {"HE3", "HP" },
-                            {"CZ3", "CA" },
-                            {"HZ3", "HP" },
-                            {"CZ2", "CAI"},
-                            {"HZ2", "HP" },
-                            {"CH2", "CA" },
-                            {"HH2", "HP" },
-                            {"C",   "C"  },
-                            {"O",   "O"  }
-                        }
-                },
-                {"TYR", {
-                            {"N",   "NH1"},
-                            {"HN",  "H"  },
-                            {"CA",  "CT1"},
-                            {"HA",  "HB1"},
-                            {"CB",  "CT2"},
-                            {"HB1", "HA2"},
-                            {"HB2", "HA2"},
-                            {"CG",  "CA" },
-                            {"CD1", "CA" },
-                            {"HD1", "HP" },
-                            {"CE1", "CA" },
-                            {"HE1", "HP" },
-                            {"CZ",  "CA" },
-                            {"OH",  "OH1"},
-                            {"HH",  "H"  },
-                            {"CD2", "CA" },
-                            {"HD2", "HP" },
-                            {"CE2", "CA" },
-                            {"HE2", "HP" },
-                            {"C",   "C"  },
-                            {"O",   "O"  }
-                        }
-                },
-                {"VAL", {
-                            {"N",    "NH1"},
-                            {"HN",   "H"  },
-                            {"CA",   "CT1"},
-                            {"HA",   "HB1"},
-                            {"CB",   "CT1"},
-                            {"HB",   "HA1"},
-                            {"CG1",  "CT3"},
-                            {"HG11", "HA3"},
-                            {"HG12", "HA3"},
-                            {"HG13", "HA3"},
-                            {"CG2",  "CT3"},
-                            {"HG21", "HA3"},
-                            {"HG22", "HA3"},
-                            {"HG23", "HA3"},
-                            {"C",    "C"  },
-                            {"O",    "O"  }
-                        }
+map<string, vector<double> > Implicit::setupValueMap() {
+    // Volume ∆Gref ∆Gfree ∆H ∆Cp λ vdw_radius
+    map<string, vector<double> > valuemap;
+    valuemap = {
+        {"C", {
+                  ANG3_TO_NM3 * 14.720,
+                  KCAL_TO_KJ * 0.000,
+                  KCAL_TO_KJ * 0.000,
+                  KCAL_TO_KJ * 0.000,
+                  KCAL_TO_KJ * 0.0,
+                  1. / (ANG_TO_NM * 3.5),
+                  0.20,
+              }
+        },
+        {"CD", {
+                   ANG3_TO_NM3 * 14.720,
+                   KCAL_TO_KJ * 0.000,
+                   KCAL_TO_KJ * 0.000,
+                   KCAL_TO_KJ * 0.000,
+                   KCAL_TO_KJ * 0.0,
+                   1. / (ANG_TO_NM * 3.5),
+                   0.20,
+               }
+        },
+        {"CT1", {
+                    ANG3_TO_NM3 * 11.507,
+                    KCAL_TO_KJ * -0.187,
+                    KCAL_TO_KJ * -0.187,
+                    KCAL_TO_KJ * 0.876,
+                    KCAL_TO_KJ * 0.0,
+                    1. / (ANG_TO_NM * 3.5),
+                    0.20,
                 }
-            };
-
-            // Volume ∆Gref ∆Gfree ∆H ∆Cp λ vdw_radius
-            valuemap = {
-                {"C", {
-                          ANG3_TO_NM3 * 14.720,
-                          KCAL_TO_KJ * 0.000,
-                          KCAL_TO_KJ * 0.000,
-                          KCAL_TO_KJ * 0.000,
-                          KCAL_TO_KJ * 0.0,
-                          ANG_TO_NM * 3.5,
-                          0.20,
-                      }
-                },
-                {"CD", {
-                           ANG3_TO_NM3 * 14.720,
-                           KCAL_TO_KJ * 0.000,
-                           KCAL_TO_KJ * 0.000,
-                           KCAL_TO_KJ * 0.000,
-                           KCAL_TO_KJ * 0.0,
-                           ANG_TO_NM * 3.5,
-                           0.20,
-                       }
-                },
-                {"CT1", {
-                            ANG3_TO_NM3 * 11.507,
-                            KCAL_TO_KJ * -0.187,
-                            KCAL_TO_KJ * -0.187,
-                            KCAL_TO_KJ * 0.876,
-                            KCAL_TO_KJ * 0.0,
-                            ANG_TO_NM * 3.5,
-                            0.20,
-                        }
-                },
-                {"CT2", {
-                            ANG3_TO_NM3 * 18.850,
-                            KCAL_TO_KJ * 0.372,
-                            KCAL_TO_KJ * 0.372,
-                            KCAL_TO_KJ * -0.610,
-                            KCAL_TO_KJ * 18.6,
-                            ANG_TO_NM * 3.5,
-                            0.20,
-                        }
-                },
-                {"CT2A", {
-                             ANG3_TO_NM3 * 18.666,
-                             KCAL_TO_KJ * 0.372,
-                             KCAL_TO_KJ * 0.372,
-                             KCAL_TO_KJ * -0.610,
-                             KCAL_TO_KJ * 18.6,
-                             ANG_TO_NM * 3.5,
-                             0.20,
-                         }
-                },
-                {"CT3", {
-                            ANG3_TO_NM3 * 27.941,
-                            KCAL_TO_KJ * 1.089,
-                            KCAL_TO_KJ * 1.089,
-                            KCAL_TO_KJ * -1.779,
-                            KCAL_TO_KJ * 35.6,
-                            ANG_TO_NM * 3.5,
-                            0.204,
-                        }
-                },
-                {"CPH1", {
-                             ANG3_TO_NM3 * 5.275,
-                             KCAL_TO_KJ * 0.057,
-                             KCAL_TO_KJ * 0.080,
-                             KCAL_TO_KJ * -0.973,
-                             KCAL_TO_KJ * 6.9,
-                             ANG_TO_NM * 3.5,
-                             0.18,
-                         }
-                },
-                {"CPH2", {
-                             ANG3_TO_NM3 * 11.796,
-                             KCAL_TO_KJ * 0.057,
-                             KCAL_TO_KJ * 0.080,
-                             KCAL_TO_KJ * -0.973,
-                             KCAL_TO_KJ * 6.9,
-                             ANG_TO_NM * 3.5,
-                             0.18,
-                         }
-                },
-                {"CPT", {
-                            ANG3_TO_NM3 * 4.669,
-                            KCAL_TO_KJ * -0.890,
-                            KCAL_TO_KJ * -0.890,
-                            KCAL_TO_KJ * 2.220,
-                            KCAL_TO_KJ * 6.9,
-                            ANG_TO_NM * 3.5,
-                            0.186,
-                        }
-                },
-                {"CY", {
-                           ANG3_TO_NM3 * 10.507,
-                           KCAL_TO_KJ * -0.890,
-                           KCAL_TO_KJ * -0.890,
-                           KCAL_TO_KJ * 2.220,
-                           KCAL_TO_KJ * 6.9,
-                           ANG_TO_NM * 3.5,
-                           0.199,
-                       }
-                },
-                {"CP1", {
-                            ANG3_TO_NM3 * 25.458,
-                            KCAL_TO_KJ * -0.187,
-                            KCAL_TO_KJ * -0.187,
-                            KCAL_TO_KJ * 0.876,
-                            KCAL_TO_KJ * 0.0,
-                            ANG_TO_NM * 3.5,
-                            0.227,
-                        }
-                },
-                {"CP2", {
-                            ANG3_TO_NM3 * 19.880,
-                            KCAL_TO_KJ * 0.372,
-                            KCAL_TO_KJ * 0.372,
-                            KCAL_TO_KJ * -0.610,
-                            KCAL_TO_KJ * 18.6,
-                            ANG_TO_NM * 3.5,
-                            0.217,
-                        }
-                },
-                {"CP3", {
-                            ANG3_TO_NM3 * 26.731,
-                            KCAL_TO_KJ * 0.372,
-                            KCAL_TO_KJ * 0.372,
-                            KCAL_TO_KJ * -0.610,
-                            KCAL_TO_KJ * 18.6,
-                            ANG_TO_NM * 3.5,
-                            0.217,
-                        }
-                },
-                {"CC", {
-                           ANG3_TO_NM3 * 16.539,
-                           KCAL_TO_KJ * 0.000,
-                           KCAL_TO_KJ * 0.000,
-                           KCAL_TO_KJ * 0.000,
-                           KCAL_TO_KJ * 0.0,
-                           ANG_TO_NM * 3.5,
-                           0.20,
-                       }
-                },
-                {"CAI", {
-                            ANG3_TO_NM3 * 18.249,
-                            KCAL_TO_KJ * 0.057,
-                            KCAL_TO_KJ * 0.057,
-                            KCAL_TO_KJ * -0.973,
-                            KCAL_TO_KJ * 6.9,
-                            ANG_TO_NM * 3.5,
-                            0.199,
-                        }
-                },
-                {"CA", {
-                           ANG3_TO_NM3 * 18.249,
-                           KCAL_TO_KJ * 0.057,
-                           KCAL_TO_KJ * 0.057,
-                           KCAL_TO_KJ * -0.973,
-                           KCAL_TO_KJ * 6.9,
-                           ANG_TO_NM * 3.5,
-                           0.199,
-                       }
-                },
-                {"N", {
-                          ANG3_TO_NM3 * 0.000,
-                          KCAL_TO_KJ * -1.000,
-                          KCAL_TO_KJ * -1.000,
-                          KCAL_TO_KJ * -1.250,
-                          KCAL_TO_KJ * 8.8,
-                          ANG_TO_NM * 3.5,
-                          0.185,
-                      }
-                },
-                {"NR1", {
-                            ANG3_TO_NM3 * 15.273,
-                            KCAL_TO_KJ * -5.950,
-                            KCAL_TO_KJ * -5.950,
-                            KCAL_TO_KJ * -9.059,
-                            KCAL_TO_KJ * -8.8,
-                            ANG_TO_NM * 3.5,
-                            0.185,
-                        }
-                },
-                {"NR2", {
-                            ANG3_TO_NM3 * 15.111,
-                            KCAL_TO_KJ * -3.820,
-                            KCAL_TO_KJ * -3.820,
-                            KCAL_TO_KJ * -4.654,
-                            KCAL_TO_KJ * -8.8,
-                            ANG_TO_NM * 3.5,
-                            0.185,
-                        }
-                },
-                {"NR3", {
-                            ANG3_TO_NM3 * 15.071,
-                            KCAL_TO_KJ * -5.950,
-                            KCAL_TO_KJ * -5.950,
-                            KCAL_TO_KJ * -9.059,
-                            KCAL_TO_KJ * -8.8,
-                            ANG_TO_NM * 3.5,
-                            0.185,
-                        }
-                },
-                {"NH1", {
-                            ANG3_TO_NM3 * 10.197,
-                            KCAL_TO_KJ * -5.950,
-                            KCAL_TO_KJ * -5.950,
-                            KCAL_TO_KJ * -9.059,
-                            KCAL_TO_KJ * -8.8,
-                            ANG_TO_NM * 3.5,
-                            0.185,
-                        }
-                },
-                {"NH2", {
-                            ANG3_TO_NM3 * 18.182,
-                            KCAL_TO_KJ * -5.950,
-                            KCAL_TO_KJ * -5.950,
-                            KCAL_TO_KJ * -9.059,
-                            KCAL_TO_KJ * -8.8,
-                            ANG_TO_NM * 3.5,
-                            0.185,
-                        }
-                },
-                {"NH3", {
-                            ANG3_TO_NM3 * 18.817,
-                            KCAL_TO_KJ * -20.000,
-                            KCAL_TO_KJ * -20.000,
-                            KCAL_TO_KJ * -25.000,
-                            KCAL_TO_KJ * -18.0,
-                            ANG_TO_NM * 6.0,
-                            0.185,
-                        }
-                },
-                {"NC2", {
-                            ANG3_TO_NM3 * 18.215,
-                            KCAL_TO_KJ * -10.000,
-                            KCAL_TO_KJ * -10.000,
-                            KCAL_TO_KJ * -12.000,
-                            KCAL_TO_KJ * -7.0,
-                            ANG_TO_NM * 6.0,
-                            0.185,
-                        }
-                },
-                {"NY", {
-                           ANG3_TO_NM3 * 12.001,
-                           KCAL_TO_KJ * -5.950,
-                           KCAL_TO_KJ * -5.950,
-                           KCAL_TO_KJ * -9.059,
-                           KCAL_TO_KJ * -8.8,
-                           ANG_TO_NM * 3.5,
-                           0.185,
-                       }
-                },
-                {"NP", {
-                           ANG3_TO_NM3 * 4.993,
-                           KCAL_TO_KJ * -20.000,
-                           KCAL_TO_KJ * -20.000,
-                           KCAL_TO_KJ * -25.000,
-                           KCAL_TO_KJ * -18.0,
-                           ANG_TO_NM * 6.0,
-                           0.185,
-                       }
-                },
-                {"O", {
-                          ANG3_TO_NM3 * 11.772,
-                          KCAL_TO_KJ * -5.330,
-                          KCAL_TO_KJ * -5.330,
-                          KCAL_TO_KJ * -5.787,
-                          KCAL_TO_KJ * -8.8,
-                          ANG_TO_NM * 3.5,
-                          0.170,
-                      }
-                },
-                {"OB", {
-                           ANG3_TO_NM3 * 11.694,
-                           KCAL_TO_KJ * -5.330,
-                           KCAL_TO_KJ * -5.330,
-                           KCAL_TO_KJ * -5.787,
-                           KCAL_TO_KJ * -8.8,
-                           ANG_TO_NM * 3.5,
-                           0.170,
-                       }
-                },
-                {"OC", {
-                           ANG3_TO_NM3 * 12.003,
-                           KCAL_TO_KJ * -10.000,
-                           KCAL_TO_KJ * -10.000,
-                           KCAL_TO_KJ * -12.000,
-                           KCAL_TO_KJ * -9.4,
-                           ANG_TO_NM * 6.0,
-                           0.170,
-                       }
-                },
-                {"OH1", {
-                            ANG3_TO_NM3 * 15.528,
-                            KCAL_TO_KJ * -5.920,
-                            KCAL_TO_KJ * -5.920,
-                            KCAL_TO_KJ * -9.264,
-                            KCAL_TO_KJ * -11.2,
-                            ANG_TO_NM * 3.5,
-                            0.177,
-                        }
-                },
-                {"OS", {
-                           ANG3_TO_NM3 * 6.774,
-                           KCAL_TO_KJ * -2.900,
-                           KCAL_TO_KJ * -2.900,
-                           KCAL_TO_KJ * -3.150,
-                           KCAL_TO_KJ * -4.8,
-                           ANG_TO_NM * 3.5,
-                           0.177,
-                       }
-                },
-                {"S", {
-                          ANG3_TO_NM3 * 20.703,
-                          KCAL_TO_KJ * -3.240,
-                          KCAL_TO_KJ * -3.240,
-                          KCAL_TO_KJ * -4.475,
-                          KCAL_TO_KJ * -39.9,
-                          ANG_TO_NM * 3.5,
-                          0.20,
-                      }
-                },
-                {"SM", {
-                           ANG3_TO_NM3 * 21.306,
-                           KCAL_TO_KJ * -3.240,
-                           KCAL_TO_KJ * -3.240,
-                           KCAL_TO_KJ * -4.475,
-                           KCAL_TO_KJ * -39.9,
-                           ANG_TO_NM * 3.5,
-                           0.197,
-                       }
+        },
+        {"CT2", {
+                    ANG3_TO_NM3 * 18.850,
+                    KCAL_TO_KJ * 0.372,
+                    KCAL_TO_KJ * 0.372,
+                    KCAL_TO_KJ * -0.610,
+                    KCAL_TO_KJ * 18.6,
+                    1. / (ANG_TO_NM * 3.5),
+                    0.20,
                 }
-            };
+        },
+        {"CT2A", {
+                     ANG3_TO_NM3 * 18.666,
+                     KCAL_TO_KJ * 0.372,
+                     KCAL_TO_KJ * 0.372,
+                     KCAL_TO_KJ * -0.610,
+                     KCAL_TO_KJ * 18.6,
+                     1. / (ANG_TO_NM * 3.5),
+                     0.20,
+                 }
+        },
+        {"CT3", {
+                    ANG3_TO_NM3 * 27.941,
+                    KCAL_TO_KJ * 1.089,
+                    KCAL_TO_KJ * 1.089,
+                    KCAL_TO_KJ * -1.779,
+                    KCAL_TO_KJ * 35.6,
+                    1. / (ANG_TO_NM * 3.5),
+                    0.204,
+                }
+        },
+        {"CPH1", {
+                     ANG3_TO_NM3 * 5.275,
+                     KCAL_TO_KJ * 0.057,
+                     KCAL_TO_KJ * 0.080,
+                     KCAL_TO_KJ * -0.973,
+                     KCAL_TO_KJ * 6.9,
+                     1. / (ANG_TO_NM * 3.5),
+                     0.18,
+                 }
+        },
+        {"CPH2", {
+                     ANG3_TO_NM3 * 11.796,
+                     KCAL_TO_KJ * 0.057,
+                     KCAL_TO_KJ * 0.080,
+                     KCAL_TO_KJ * -0.973,
+                     KCAL_TO_KJ * 6.9,
+                     1. / (ANG_TO_NM * 3.5),
+                     0.18,
+                 }
+        },
+        {"CPT", {
+                    ANG3_TO_NM3 * 4.669,
+                    KCAL_TO_KJ * -0.890,
+                    KCAL_TO_KJ * -0.890,
+                    KCAL_TO_KJ * 2.220,
+                    KCAL_TO_KJ * 6.9,
+                    1. / (ANG_TO_NM * 3.5),
+                    0.186,
+                }
+        },
+        {"CY", {
+                   ANG3_TO_NM3 * 10.507,
+                   KCAL_TO_KJ * -0.890,
+                   KCAL_TO_KJ * -0.890,
+                   KCAL_TO_KJ * 2.220,
+                   KCAL_TO_KJ * 6.9,
+                   1. / (ANG_TO_NM * 3.5),
+                   0.199,
+               }
+        },
+        {"CP1", {
+                    ANG3_TO_NM3 * 25.458,
+                    KCAL_TO_KJ * -0.187,
+                    KCAL_TO_KJ * -0.187,
+                    KCAL_TO_KJ * 0.876,
+                    KCAL_TO_KJ * 0.0,
+                    1. / (ANG_TO_NM * 3.5),
+                    0.227,
+                }
+        },
+        {"CP2", {
+                    ANG3_TO_NM3 * 19.880,
+                    KCAL_TO_KJ * 0.372,
+                    KCAL_TO_KJ * 0.372,
+                    KCAL_TO_KJ * -0.610,
+                    KCAL_TO_KJ * 18.6,
+                    1. / (ANG_TO_NM * 3.5),
+                    0.217,
+                }
+        },
+        {"CP3", {
+                    ANG3_TO_NM3 * 26.731,
+                    KCAL_TO_KJ * 0.372,
+                    KCAL_TO_KJ * 0.372,
+                    KCAL_TO_KJ * -0.610,
+                    KCAL_TO_KJ * 18.6,
+                    1. / (ANG_TO_NM * 3.5),
+                    0.217,
+                }
+        },
+        {"CC", {
+                   ANG3_TO_NM3 * 16.539,
+                   KCAL_TO_KJ * 0.000,
+                   KCAL_TO_KJ * 0.000,
+                   KCAL_TO_KJ * 0.000,
+                   KCAL_TO_KJ * 0.0,
+                   1. / (ANG_TO_NM * 3.5),
+                   0.20,
+               }
+        },
+        {"CAI", {
+                    ANG3_TO_NM3 * 18.249,
+                    KCAL_TO_KJ * 0.057,
+                    KCAL_TO_KJ * 0.057,
+                    KCAL_TO_KJ * -0.973,
+                    KCAL_TO_KJ * 6.9,
+                    1. / (ANG_TO_NM * 3.5),
+                    0.199,
+                }
+        },
+        {"CA", {
+                   ANG3_TO_NM3 * 18.249,
+                   KCAL_TO_KJ * 0.057,
+                   KCAL_TO_KJ * 0.057,
+                   KCAL_TO_KJ * -0.973,
+                   KCAL_TO_KJ * 6.9,
+                   1. / (ANG_TO_NM * 3.5),
+                   0.199,
+               }
+        },
+        {"N", {
+                  ANG3_TO_NM3 * 0.000,
+                  KCAL_TO_KJ * -1.000,
+                  KCAL_TO_KJ * -1.000,
+                  KCAL_TO_KJ * -1.250,
+                  KCAL_TO_KJ * 8.8,
+                  1. / (ANG_TO_NM * 3.5),
+                  0.185,
+              }
+        },
+        {"NR1", {
+                    ANG3_TO_NM3 * 15.273,
+                    KCAL_TO_KJ * -5.950,
+                    KCAL_TO_KJ * -5.950,
+                    KCAL_TO_KJ * -9.059,
+                    KCAL_TO_KJ * -8.8,
+                    1. / (ANG_TO_NM * 3.5),
+                    0.185,
+                }
+        },
+        {"NR2", {
+                    ANG3_TO_NM3 * 15.111,
+                    KCAL_TO_KJ * -3.820,
+                    KCAL_TO_KJ * -3.820,
+                    KCAL_TO_KJ * -4.654,
+                    KCAL_TO_KJ * -8.8,
+                    1. / (ANG_TO_NM * 3.5),
+                    0.185,
+                }
+        },
+        {"NR3", {
+                    ANG3_TO_NM3 * 15.071,
+                    KCAL_TO_KJ * -5.950,
+                    KCAL_TO_KJ * -5.950,
+                    KCAL_TO_KJ * -9.059,
+                    KCAL_TO_KJ * -8.8,
+                    1. / (ANG_TO_NM * 3.5),
+                    0.185,
+                }
+        },
+        {"NH1", {
+                    ANG3_TO_NM3 * 10.197,
+                    KCAL_TO_KJ * -5.950,
+                    KCAL_TO_KJ * -5.950,
+                    KCAL_TO_KJ * -9.059,
+                    KCAL_TO_KJ * -8.8,
+                    1. / (ANG_TO_NM * 3.5),
+                    0.185,
+                }
+        },
+        {"NH2", {
+                    ANG3_TO_NM3 * 18.182,
+                    KCAL_TO_KJ * -5.950,
+                    KCAL_TO_KJ * -5.950,
+                    KCAL_TO_KJ * -9.059,
+                    KCAL_TO_KJ * -8.8,
+                    1. / (ANG_TO_NM * 3.5),
+                    0.185,
+                }
+        },
+        {"NH3", {
+                    ANG3_TO_NM3 * 18.817,
+                    KCAL_TO_KJ * -20.000,
+                    KCAL_TO_KJ * -20.000,
+                    KCAL_TO_KJ * -25.000,
+                    KCAL_TO_KJ * -18.0,
+                    1. / (ANG_TO_NM * 6.0),
+                    0.185,
+                }
+        },
+        {"NC2", {
+                    ANG3_TO_NM3 * 18.215,
+                    KCAL_TO_KJ * -10.000,
+                    KCAL_TO_KJ * -10.000,
+                    KCAL_TO_KJ * -12.000,
+                    KCAL_TO_KJ * -7.0,
+                    1. / (ANG_TO_NM * 6.0),
+                    0.185,
+                }
+        },
+        {"NY", {
+                   ANG3_TO_NM3 * 12.001,
+                   KCAL_TO_KJ * -5.950,
+                   KCAL_TO_KJ * -5.950,
+                   KCAL_TO_KJ * -9.059,
+                   KCAL_TO_KJ * -8.8,
+                   1. / (ANG_TO_NM * 3.5),
+                   0.185,
+               }
+        },
+        {"NP", {
+                   ANG3_TO_NM3 * 4.993,
+                   KCAL_TO_KJ * -20.000,
+                   KCAL_TO_KJ * -20.000,
+                   KCAL_TO_KJ * -25.000,
+                   KCAL_TO_KJ * -18.0,
+                   1. / (ANG_TO_NM * 6.0),
+                   0.185,
+               }
+        },
+        {"O", {
+                  ANG3_TO_NM3 * 11.772,
+                  KCAL_TO_KJ * -5.330,
+                  KCAL_TO_KJ * -5.330,
+                  KCAL_TO_KJ * -5.787,
+                  KCAL_TO_KJ * -8.8,
+                  1. / (ANG_TO_NM * 3.5),
+                  0.170,
+              }
+        },
+        {"OB", {
+                   ANG3_TO_NM3 * 11.694,
+                   KCAL_TO_KJ * -5.330,
+                   KCAL_TO_KJ * -5.330,
+                   KCAL_TO_KJ * -5.787,
+                   KCAL_TO_KJ * -8.8,
+                   1. / (ANG_TO_NM * 3.5),
+                   0.170,
+               }
+        },
+        {"OC", {
+                   ANG3_TO_NM3 * 12.003,
+                   KCAL_TO_KJ * -10.000,
+                   KCAL_TO_KJ * -10.000,
+                   KCAL_TO_KJ * -12.000,
+                   KCAL_TO_KJ * -9.4,
+                   1. / (ANG_TO_NM * 6.0),
+                   0.170,
+               }
+        },
+        {"OH1", {
+                    ANG3_TO_NM3 * 15.528,
+                    KCAL_TO_KJ * -5.920,
+                    KCAL_TO_KJ * -5.920,
+                    KCAL_TO_KJ * -9.264,
+                    KCAL_TO_KJ * -11.2,
+                    1. / (ANG_TO_NM * 3.5),
+                    0.177,
+                }
+        },
+        {"OS", {
+                   ANG3_TO_NM3 * 6.774,
+                   KCAL_TO_KJ * -2.900,
+                   KCAL_TO_KJ * -2.900,
+                   KCAL_TO_KJ * -3.150,
+                   KCAL_TO_KJ * -4.8,
+                   1. / (ANG_TO_NM * 3.5),
+                   0.177,
+               }
+        },
+        {"S", {
+                  ANG3_TO_NM3 * 20.703,
+                  KCAL_TO_KJ * -3.240,
+                  KCAL_TO_KJ * -3.240,
+                  KCAL_TO_KJ * -4.475,
+                  KCAL_TO_KJ * -39.9,
+                  1. / (ANG_TO_NM * 3.5),
+                  0.20,
+              }
+        },
+        {"SM", {
+                   ANG3_TO_NM3 * 21.306,
+                   KCAL_TO_KJ * -3.240,
+                   KCAL_TO_KJ * -3.240,
+                   KCAL_TO_KJ * -4.475,
+                   KCAL_TO_KJ * -39.9,
+                   1. / (ANG_TO_NM * 3.5),
+                   0.197,
+               }
         }
+    };
+    return valuemap;
+}
     }
 }
-#endif
diff --git a/src/gridtools/GridVessel.cpp b/src/gridtools/GridVessel.cpp
index a6f413cfbe9ad0d0b0aee3061bd7a1d9c14b3601..dca93e434e57e9b5feb6d8c7db90e7ab7d43d7e5 100644
--- a/src/gridtools/GridVessel.cpp
+++ b/src/gridtools/GridVessel.cpp
@@ -164,6 +164,7 @@ void GridVessel::getIndices( const std::vector<double>& point, std::vector<unsig
   for(unsigned i=0;i<dimension;++i){
       indices[i]=std::floor( (point[i] - min[i])/dx[i] );
       if( pbc[i] ) indices[i]=indices[i]%nbin[i];
+      else if( indices[i]>nbin[i] ) plumed_merror("point is outside grid range");
   }
 }