diff --git a/src/blas/blas.cpp b/src/blas/blas.cpp
index 97d1be8e9fdcf8d8d4a5d72b1a048976db71f498..28d86ae2ce966b3f94c2f1a16ef6da1ccb760b32 100644
--- a/src/blas/blas.cpp
+++ b/src/blas/blas.cpp
@@ -21,7 +21,7 @@ better idea to use the full reference implementation.
 Erik Lindahl, 2008-10-07.
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
 #if ! defined (__PLUMED_HAS_EXTERNAL_BLAS)
-#include <math.h>
+#include <cmath>
 #include "blas.h"
 
 namespace PLMD{
@@ -51,7 +51,7 @@ PLUMED_BLAS_F77_FUNC(dasum,DASUM)(int *n__,
         i__1 = nincx;
         i__2 = incx;
         for (i__ = 1; i__2 < 0 ? i__ >= i__1 : i__ <= i__1; i__ += i__2) {
-            dtemp += fabs(dx[i__]);
+            dtemp += std::abs(dx[i__]);
         }
         return dtemp;
     }
@@ -60,7 +60,7 @@ PLUMED_BLAS_F77_FUNC(dasum,DASUM)(int *n__,
     if (m != 0) {
         i__2 = m;
         for (i__ = 1; i__ <= i__2; ++i__) {
-            dtemp += fabs(dx[i__]);
+            dtemp += std::abs(dx[i__]);
         }
         if (n < 6) {
             return dtemp;
@@ -69,9 +69,9 @@ PLUMED_BLAS_F77_FUNC(dasum,DASUM)(int *n__,
     mp1 = m + 1;
     i__2 = n;
     for (i__ = mp1; i__ <= i__2; i__ += 6) {
-        dtemp = dtemp + fabs(dx[i__]) + fabs(dx[i__ + 1]) + 
-        fabs(dx[i__ + 2]) + fabs(dx[i__+ 3]) + fabs(dx[i__ + 4]) +
-        fabs(dx[i__ + 5]);
+        dtemp = dtemp + std::abs(dx[i__]) + std::abs(dx[i__ + 1]) + 
+        std::abs(dx[i__ + 2]) + std::abs(dx[i__+ 3]) + std::abs(dx[i__ + 4]) +
+        std::abs(dx[i__ + 5]);
     }
     return dtemp;
 }
@@ -240,8 +240,8 @@ PLUMED_BLAS_F77_FUNC(ddot,DDOT)(int *n_arg,
  
 }
 }
-#include <ctype.h>
-#include <math.h>
+#include <cctype>
+#include <cmath>
 
 #include "real.h"
 
@@ -264,11 +264,10 @@ PLUMED_BLAS_F77_FUNC(dgemm,DGEMM)(const char *transa,
                       double *c,
                       int *ldc__)
 {
-  const char tra=toupper(*transa);
-  const char trb=toupper(*transb);
+  const char tra=std::toupper(*transa);
+  const char trb=std::toupper(*transb);
   double temp;
   int i,j,l;
-  int nrowa,ncola,nrowb;
 
   int m = *m__;
   int n = *n__;
@@ -280,24 +279,11 @@ PLUMED_BLAS_F77_FUNC(dgemm,DGEMM)(const char *transa,
   double alpha = *alpha__;
   double beta  = *beta__;
   
-  if(tra=='N') {
-    nrowa = m;
-    ncola = k;
-  } else {
-    nrowa = k;
-    ncola = m;
-  }
-
-  if(trb=='N') 
-    nrowb = k;
-   else 
-    nrowb = n;
-  
-  if(m==0 || n==0 || (( fabs(alpha)<PLUMED_GMX_DOUBLE_MIN || k==0) && fabs(beta-1.0)<PLUMED_GMX_DOUBLE_EPS))
+  if(m==0 || n==0 || (( std::abs(alpha)<PLUMED_GMX_DOUBLE_MIN || k==0) && std::abs(beta-1.0)<PLUMED_GMX_DOUBLE_EPS))
     return;
 
-  if(fabs(alpha)<PLUMED_GMX_DOUBLE_MIN) {
-    if(fabs(beta)<PLUMED_GMX_DOUBLE_MIN) {
+  if(std::abs(alpha)<PLUMED_GMX_DOUBLE_MIN) {
+    if(std::abs(beta)<PLUMED_GMX_DOUBLE_MIN) {
       for(j=0;j<n;j++)
 	for(i=0;i<m;i++)
 	  c[j*(ldc)+i] = 0.0;
@@ -314,15 +300,15 @@ PLUMED_BLAS_F77_FUNC(dgemm,DGEMM)(const char *transa,
     if(tra=='N') {
       
       for(j=0;j<n;j++) {
-	if(fabs(beta)<PLUMED_GMX_DOUBLE_MIN) {
+	if(std::abs(beta)<PLUMED_GMX_DOUBLE_MIN) {
 	  for(i=0;i<m;i++)
 	    c[j*(ldc)+i] = 0.0;
-	} else if(fabs(beta-1.0)>PLUMED_GMX_DOUBLE_EPS) {
+	} else if(std::abs(beta-1.0)>PLUMED_GMX_DOUBLE_EPS) {
 	  for(i=0;i<m;i++)
 	    c[j*(ldc)+i] *= beta;
 	} 
 	for(l=0;l<k;l++) {
-	  if( fabs(b[ j*(ldb) + l ])>PLUMED_GMX_DOUBLE_MIN) {
+	  if( std::abs(b[ j*(ldb) + l ])>PLUMED_GMX_DOUBLE_MIN) {
 	    temp = alpha * b[ j*(ldb) + l ];
 	    for(i=0;i<m;i++)
 	      c[j*(ldc)+i] += temp * a[l*(lda)+i]; 
@@ -336,7 +322,7 @@ PLUMED_BLAS_F77_FUNC(dgemm,DGEMM)(const char *transa,
 	  temp = 0.0;
 	  for(l=0;l<k;l++) 
 	    temp += a[i*(lda)+l] * b[j*(ldb)+l];
-	  if(fabs(beta)<PLUMED_GMX_DOUBLE_MIN)
+	  if(std::abs(beta)<PLUMED_GMX_DOUBLE_MIN)
 	    c[j*(ldc)+i] = alpha * temp;
 	  else
 	    c[j*(ldc)+i] = alpha * temp + beta * c[j*(ldc)+i];
@@ -350,15 +336,15 @@ PLUMED_BLAS_F77_FUNC(dgemm,DGEMM)(const char *transa,
       /* transpose B, but not A */
 
       for(j=0;j<n;j++) {
-	if(fabs(beta)<PLUMED_GMX_DOUBLE_MIN) {
+	if(std::abs(beta)<PLUMED_GMX_DOUBLE_MIN) {
 	  for(i=0;i<m;i++)
 	    c[j*(ldc)+i] = 0.0;
-	} else if(fabs(beta-1.0)>PLUMED_GMX_DOUBLE_EPS) {
+	} else if(std::abs(beta-1.0)>PLUMED_GMX_DOUBLE_EPS) {
 	  for(i=0;i<m;i++)
 	    c[j*(ldc)+i] *= beta;
 	} 
 	for(l=0;l<k;l++) {
-	  if( fabs(b[ l*(ldb) + j ])>PLUMED_GMX_DOUBLE_MIN) {
+	  if( std::abs(b[ l*(ldb) + j ])>PLUMED_GMX_DOUBLE_MIN) {
 	    temp = alpha * b[ l*(ldb) + j ];
 	    for(i=0;i<m;i++)
 	      c[j*(ldc)+i] += temp * a[l*(lda)+i]; 
@@ -373,7 +359,7 @@ PLUMED_BLAS_F77_FUNC(dgemm,DGEMM)(const char *transa,
 	  temp = 0.0;
 	  for(l=0;l<k;l++) 
 	    temp += a[i*(lda)+l] * b[l*(ldb)+j];
-	  if(fabs(beta)<PLUMED_GMX_DOUBLE_MIN)
+	  if(std::abs(beta)<PLUMED_GMX_DOUBLE_MIN)
 	    c[j*(ldc)+i] = alpha * temp;
 	  else
 	    c[j*(ldc)+i] = alpha * temp + beta * c[j*(ldc)+i];
@@ -384,8 +370,8 @@ PLUMED_BLAS_F77_FUNC(dgemm,DGEMM)(const char *transa,
 }
 }
 }
-#include <math.h>
-#include <ctype.h>
+#include <cctype>
+#include <cmath>
 
 #include "real.h"
 
@@ -406,7 +392,7 @@ PLUMED_BLAS_F77_FUNC(dgemv,DGEMV)(const char *trans,
        double *y,
        int *incy__)
 {
-  const char ch=toupper(*trans);
+  const char ch=std::toupper(*trans);
   int lenx,leny,kx,ky;
   int i,j,jx,jy,ix,iy;
   double temp;
@@ -419,7 +405,7 @@ PLUMED_BLAS_F77_FUNC(dgemv,DGEMV)(const char *trans,
   int incy = *incy__;
   int lda = *lda__;
   
-  if(n<=0 || m<=0 || (fabs(alpha)<PLUMED_GMX_DOUBLE_MIN && fabs(beta-1.0)<PLUMED_GMX_DOUBLE_EPS))
+  if(n<=0 || m<=0 || (std::abs(alpha)<PLUMED_GMX_DOUBLE_MIN && std::abs(beta-1.0)<PLUMED_GMX_DOUBLE_EPS))
     return;
 
   if(ch=='N') {
@@ -440,9 +426,9 @@ PLUMED_BLAS_F77_FUNC(dgemv,DGEMV)(const char *trans,
   else
     ky = 1 - (leny -1)*(incy);
  
-  if(fabs(beta-1.0)>PLUMED_GMX_DOUBLE_EPS) {
+  if(std::abs(beta-1.0)>PLUMED_GMX_DOUBLE_EPS) {
     if(incy==1) {
-      if(fabs(beta)<PLUMED_GMX_DOUBLE_MIN)
+      if(std::abs(beta)<PLUMED_GMX_DOUBLE_MIN)
 	for(i=0;i<leny;i++)
 	  y[i] = 0.0;
       else
@@ -451,7 +437,7 @@ PLUMED_BLAS_F77_FUNC(dgemv,DGEMV)(const char *trans,
     } else {
       /* non-unit incr. */
       iy = ky;
-      if(fabs(beta)<PLUMED_GMX_DOUBLE_MIN) 
+      if(std::abs(beta)<PLUMED_GMX_DOUBLE_MIN) 
 	for(i=0;i<leny;i++,iy+=incy)
 	  y[iy] = 0.0;
       else
@@ -460,14 +446,14 @@ PLUMED_BLAS_F77_FUNC(dgemv,DGEMV)(const char *trans,
     }
   }
   
-  if(fabs(alpha)<PLUMED_GMX_DOUBLE_MIN)
+  if(std::abs(alpha)<PLUMED_GMX_DOUBLE_MIN)
     return;
   
   if(ch=='N') {
     jx = kx;
     if(incy==1) {
       for(j=1;j<=n;j++,jx+=incx) 
-	if(fabs(x[jx-1])>PLUMED_GMX_DOUBLE_MIN) {
+	if(std::abs(x[jx-1])>PLUMED_GMX_DOUBLE_MIN) {
 	  temp = alpha * x[jx-1];
 	  for(i=1;i<=m;i++)
 	    y[i-1] += temp * a[(j-1)*(lda)+(i-1)];
@@ -475,7 +461,7 @@ PLUMED_BLAS_F77_FUNC(dgemv,DGEMV)(const char *trans,
     } else {
       /* non-unit y incr. */
       for(j=1;j<=n;j++,jx+=incx) 
-	if(fabs(x[jx-1])>PLUMED_GMX_DOUBLE_MIN) {
+	if(std::abs(x[jx-1])>PLUMED_GMX_DOUBLE_MIN) {
 	  temp = alpha * x[jx-1];
 	  iy = ky;
 	  for(i=1;i<=m;i++,iy+=incy)
@@ -507,7 +493,7 @@ PLUMED_BLAS_F77_FUNC(dgemv,DGEMV)(const char *trans,
    
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "real.h"
 
@@ -538,7 +524,7 @@ PLUMED_BLAS_F77_FUNC(dger,DGER)(int *m__,
     int lda = *lda__;
     double alpha = *alpha__;
     
-    if(m<=0 || n<=0 || fabs(alpha)<PLUMED_GMX_DOUBLE_MIN)
+    if(m<=0 || n<=0 || std::abs(alpha)<PLUMED_GMX_DOUBLE_MIN)
         return;
     
     if(incy>0)
@@ -548,7 +534,7 @@ PLUMED_BLAS_F77_FUNC(dger,DGER)(int *m__,
     
     if(incx==1) {
         for(j=0;j<n;j++,jy+=incy)
-            if(fabs(y[jy])>PLUMED_GMX_DOUBLE_MIN) {
+            if(std::abs(y[jy])>PLUMED_GMX_DOUBLE_MIN) {
                 temp = alpha * y[jy];
                 for(i=0;i<m;i++)
                     a[j*(lda)+i] += temp*x[i];
@@ -561,7 +547,7 @@ PLUMED_BLAS_F77_FUNC(dger,DGER)(int *m__,
             kx = incx * (1 - m);
         
         for(j=0;j<n;j++,jy+=incy) {
-            if(fabs(y[jy])>PLUMED_GMX_DOUBLE_MIN) {
+            if(std::abs(y[jy])>PLUMED_GMX_DOUBLE_MIN) {
                 temp = alpha * y[jy];
                 ix = kx;
                 for(i=0;i<m;i++,ix+=incx)
@@ -573,7 +559,7 @@ PLUMED_BLAS_F77_FUNC(dger,DGER)(int *m__,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "real.h"
 #include "blas.h"
@@ -607,7 +593,7 @@ PLUMED_BLAS_F77_FUNC(dnrm2,DNRM2)(int  *     n__,
     max_ix = 1+(n-1)*(incx);
     for(ix=1;ix<=max_ix;ix+=incx) {
         t = x[ix-1];
-        if(fabs(t)>PLUMED_GMX_DOUBLE_MIN) {
+        if(std::abs(t)>PLUMED_GMX_DOUBLE_MIN) {
             absxi = (t>=0) ? t : (-t);
             if(scale<absxi) {
                 t = scale/absxi;
@@ -620,7 +606,7 @@ PLUMED_BLAS_F77_FUNC(dnrm2,DNRM2)(int  *     n__,
             }
         }
     }
-    return scale*sqrt(ssq);
+    return scale*std::sqrt(ssq);
     
 }
 
@@ -783,8 +769,8 @@ PLUMED_BLAS_F77_FUNC(dswap,DSWAP)(int *n__,
  
 }
 }
-#include <ctype.h>
-#include <math.h>
+#include <cctype>
+#include <cmath>
 
 #include "real.h"
 #include "blas.h"
@@ -803,7 +789,7 @@ PLUMED_BLAS_F77_FUNC(dsymv,DSYMV)(const char *uplo,
        double *y,
        int *incy__)
 {
-    const char ch=toupper(*uplo);
+    const char ch=std::toupper(*uplo);
     int kx,ky,i,j,ix,iy,jx,jy;
     double temp1,temp2;
     
@@ -827,9 +813,9 @@ PLUMED_BLAS_F77_FUNC(dsymv,DSYMV)(const char *uplo,
     else
         ky = 1 - (n -1)*(incy);
     
-    if(fabs(beta-1.0)>PLUMED_GMX_DOUBLE_EPS) {
+    if(std::abs(beta-1.0)>PLUMED_GMX_DOUBLE_EPS) {
         if(incy==1) {
-            if(fabs(beta)<PLUMED_GMX_DOUBLE_MIN) 
+            if(std::abs(beta)<PLUMED_GMX_DOUBLE_MIN) 
                 for(i=1;i<=n;i++)
                     y[i-1] = 0.0;
             else
@@ -838,7 +824,7 @@ PLUMED_BLAS_F77_FUNC(dsymv,DSYMV)(const char *uplo,
         } else {
             /* non-unit incr. */
             iy = ky;
-            if(fabs(beta)<PLUMED_GMX_DOUBLE_MIN) 
+            if(std::abs(beta)<PLUMED_GMX_DOUBLE_MIN) 
                 for(i=1;i<=n;i++) {
                     y[iy-1] = 0.0;
                     iy += incy;
@@ -851,7 +837,7 @@ PLUMED_BLAS_F77_FUNC(dsymv,DSYMV)(const char *uplo,
         }
     }
         
-        if(fabs(alpha)<PLUMED_GMX_DOUBLE_MIN) 
+        if(std::abs(alpha)<PLUMED_GMX_DOUBLE_MIN) 
             return;
         
         if(ch=='U') {
@@ -924,8 +910,8 @@ PLUMED_BLAS_F77_FUNC(dsymv,DSYMV)(const char *uplo,
 }    
 }
 }
-#include <ctype.h>
-#include <math.h>
+#include <cctype>
+#include <cmath>
 
 #include "real.h"
 
@@ -946,7 +932,7 @@ PLUMED_BLAS_F77_FUNC(dsyr2,DSYR2)(const char *    uplo,
 {
     int kx,ky,ix,iy,jx,jy,j,i;
     double temp1,temp2;
-    const char ch=toupper(*uplo);
+    const char ch=std::toupper(*uplo);
     
     int n = *n__;
     int lda = *lda__;
@@ -955,7 +941,7 @@ PLUMED_BLAS_F77_FUNC(dsyr2,DSYR2)(const char *    uplo,
     float alpha = *alpha__;
     
     
-    if(n<=0 || fabs(alpha)<PLUMED_GMX_DOUBLE_MIN || incx==0 || incy==0 ||
+    if(n<=0 || std::abs(alpha)<PLUMED_GMX_DOUBLE_MIN || incx==0 || incy==0 ||
        (ch != 'U' && ch != 'L'))
         return;
     
@@ -981,7 +967,7 @@ PLUMED_BLAS_F77_FUNC(dsyr2,DSYR2)(const char *    uplo,
         if(incx==1 && incy==1) {
             /* Unit increments for both x and y */
             for(j=1;j<=n;j++) {
-                if( fabs(x[j-1])>PLUMED_GMX_DOUBLE_MIN  || fabs(y[j-1])>PLUMED_GMX_DOUBLE_MIN ) {
+                if( std::abs(x[j-1])>PLUMED_GMX_DOUBLE_MIN  || std::abs(y[j-1])>PLUMED_GMX_DOUBLE_MIN ) {
                     temp1 = alpha * y[j-1];
                     temp2 = alpha * x[j-1];
                     for(i=1;i<=j;i++)
@@ -993,7 +979,7 @@ PLUMED_BLAS_F77_FUNC(dsyr2,DSYR2)(const char *    uplo,
             /* non-unit increments */
             for(j=1;j<=n;j++) {
                 
-                if( fabs(x[jx-1])>PLUMED_GMX_DOUBLE_MIN || fabs(y[jy-1])>PLUMED_GMX_DOUBLE_MIN ) {
+                if( std::abs(x[jx-1])>PLUMED_GMX_DOUBLE_MIN || std::abs(y[jy-1])>PLUMED_GMX_DOUBLE_MIN ) {
                     temp1 = alpha * y[jy-1];
                     temp2 = alpha * x[jx-1];
                     ix = kx;
@@ -1013,7 +999,7 @@ PLUMED_BLAS_F77_FUNC(dsyr2,DSYR2)(const char *    uplo,
         if(incx==1 && incy==1) {
             /* Unit increments for both x and y */
             for(j=1;j<=n;j++) {
-                if( fabs(x[j-1])>PLUMED_GMX_DOUBLE_MIN  || fabs(y[j-1])>PLUMED_GMX_DOUBLE_MIN ) {
+                if( std::abs(x[j-1])>PLUMED_GMX_DOUBLE_MIN  || std::abs(y[j-1])>PLUMED_GMX_DOUBLE_MIN ) {
                     temp1 = alpha * y[j-1];
                     temp2 = alpha * x[j-1];
                     for(i=j;i<=n;i++)
@@ -1025,7 +1011,7 @@ PLUMED_BLAS_F77_FUNC(dsyr2,DSYR2)(const char *    uplo,
             /* non-unit increments */
             for(j=1;j<=n;j++) {
                 
-                if( fabs(x[jx-1])>PLUMED_GMX_DOUBLE_MIN || fabs(y[jy-1])>PLUMED_GMX_DOUBLE_MIN ) {
+                if( std::abs(x[jx-1])>PLUMED_GMX_DOUBLE_MIN || std::abs(y[jy-1])>PLUMED_GMX_DOUBLE_MIN ) {
                     temp1 = alpha * y[jy-1];
                     temp2 = alpha * x[jx-1];
                     ix = jx;
@@ -1046,9 +1032,8 @@ PLUMED_BLAS_F77_FUNC(dsyr2,DSYR2)(const char *    uplo,
 }
 }
 }
-#include <math.h>
-#include <ctype.h>
-
+#include <cctype>
+#include <cmath>
 
 #include "real.h"
 #include "blas.h"
@@ -1070,7 +1055,6 @@ PLUMED_BLAS_F77_FUNC(dsyr2k,DSYR2K)(const char *uplo,
 	int *ldc__)
 {
   char ch1,ch2;
-  int nrowa;
   int i,j,l;
   double temp1,temp2;
 
@@ -1084,20 +1068,15 @@ PLUMED_BLAS_F77_FUNC(dsyr2k,DSYR2K)(const char *uplo,
   double alpha = *alpha__;
   double beta  = *beta__;
   
-  ch1 = toupper(*uplo);
-  ch2 = toupper(*trans);
-
-  if(ch2 == 'N')
-    nrowa = n;
-  else
-    nrowa = k;
+  ch1 = std::toupper(*uplo);
+  ch2 = std::toupper(*trans);
 
-  if(n==0 || ( ( fabs(alpha)<PLUMED_GMX_DOUBLE_MIN || k==0 ) && fabs(beta-1.0)<PLUMED_GMX_DOUBLE_EPS))
+  if(n==0 || ( ( std::abs(alpha)<PLUMED_GMX_DOUBLE_MIN || k==0 ) && std::abs(beta-1.0)<PLUMED_GMX_DOUBLE_EPS))
     return;
 
-  if(fabs(alpha)<PLUMED_GMX_DOUBLE_MIN ) {
+  if(std::abs(alpha)<PLUMED_GMX_DOUBLE_MIN ) {
     if(ch1=='U') {
-      if(fabs(beta)<PLUMED_GMX_DOUBLE_MIN) 
+      if(std::abs(beta)<PLUMED_GMX_DOUBLE_MIN) 
 	for(j=1;j<=n;j++) 
 	  for(i=1;i<=j;i++)
 	    c[(j-1)*(ldc)+(i-1)] = 0.0;
@@ -1107,7 +1086,7 @@ PLUMED_BLAS_F77_FUNC(dsyr2k,DSYR2K)(const char *uplo,
 	    c[(j-1)*(ldc)+(i-1)] *= beta;
     } else {
       /* lower */
-      if(fabs(beta)<PLUMED_GMX_DOUBLE_MIN) 
+      if(std::abs(beta)<PLUMED_GMX_DOUBLE_MIN) 
 	for(j=1;j<=n;j++) 
 	  for(i=j;i<=n;i++)
 	    c[(j-1)*(ldc)+(i-1)] = 0.0;
@@ -1122,15 +1101,15 @@ PLUMED_BLAS_F77_FUNC(dsyr2k,DSYR2K)(const char *uplo,
   if(ch2=='N') {
     if(ch1=='U') {
       for(j=1;j<=n;j++) {
-	if(fabs(beta)<PLUMED_GMX_DOUBLE_MIN)
+	if(std::abs(beta)<PLUMED_GMX_DOUBLE_MIN)
 	  for(i=1;i<=j;i++)
 	     c[(j-1)*(ldc)+(i-1)] = 0.0;
-	else if(fabs(beta-1.0)>PLUMED_GMX_DOUBLE_EPS)
+	else if(std::abs(beta-1.0)>PLUMED_GMX_DOUBLE_EPS)
 	  for(i=1;i<=j;i++)
 	    c[(j-1)*(ldc)+(i-1)] *= beta;
 	for(l=1;l<=k;l++) {
-	  if( fabs(a[(l-1)*(lda)+(j-1)])>PLUMED_GMX_DOUBLE_MIN ||
-	      fabs(b[(l-1)*(ldb)+(j-1)])>PLUMED_GMX_DOUBLE_MIN) {
+	  if( std::abs(a[(l-1)*(lda)+(j-1)])>PLUMED_GMX_DOUBLE_MIN ||
+	      std::abs(b[(l-1)*(ldb)+(j-1)])>PLUMED_GMX_DOUBLE_MIN) {
 	    temp1 = alpha * b[(l-1)*(ldb)+(j-1)];
 	    temp2 = alpha * a[(l-1)*(lda)+(j-1)];
 	    for(i=1;i<=j;i++)
@@ -1143,15 +1122,15 @@ PLUMED_BLAS_F77_FUNC(dsyr2k,DSYR2K)(const char *uplo,
     } else {
       /* lower */
       for(j=1;j<=n;j++) {
-	if(fabs(beta)<PLUMED_GMX_DOUBLE_MIN)
+	if(std::abs(beta)<PLUMED_GMX_DOUBLE_MIN)
 	  for(i=j;i<=n;i++)
 	    c[(j-1)*(ldc)+(i-1)] = 0.0;
-	else if(fabs(beta-1.0)>PLUMED_GMX_DOUBLE_EPS)
+	else if(std::abs(beta-1.0)>PLUMED_GMX_DOUBLE_EPS)
 	  for(i=j;i<=n;i++)
 	    c[(j-1)*(ldc)+(i-1)] *= beta;
 	for(l=1;l<=k;l++) {
-	  if( fabs(a[(l-1)*(lda)+(j-1)])>PLUMED_GMX_DOUBLE_MIN ||
-	      fabs(b[(l-1)*(ldb)+(j-1)])>PLUMED_GMX_DOUBLE_MIN) {
+	  if( std::abs(a[(l-1)*(lda)+(j-1)])>PLUMED_GMX_DOUBLE_MIN ||
+	      std::abs(b[(l-1)*(ldb)+(j-1)])>PLUMED_GMX_DOUBLE_MIN) {
 	    temp1 = alpha * b[(l-1)*(ldb)+(j-1)];
 	    temp2 = alpha * a[(l-1)*(lda)+(j-1)];
 	    for(i=j;i<=n;i++)
@@ -1173,7 +1152,7 @@ PLUMED_BLAS_F77_FUNC(dsyr2k,DSYR2K)(const char *uplo,
 	     temp1 += a[(i-1)*(lda)+(l-1)] * b[(j-1)*(ldb)+(l-1)];
 	     temp2 += b[(i-1)*(ldb)+(l-1)] * a[(j-1)*(lda)+(l-1)];
 	  }
-	  if(fabs(beta)<PLUMED_GMX_DOUBLE_MIN)
+	  if(std::abs(beta)<PLUMED_GMX_DOUBLE_MIN)
 	    c[(j-1)*(ldc)+(i-1)] = alpha * (temp1 + temp2);
 	  else
 	    c[(j-1)*(ldc)+(i-1)] = beta * c[(j-1)*(ldc)+(i-1)] +
@@ -1189,7 +1168,7 @@ PLUMED_BLAS_F77_FUNC(dsyr2k,DSYR2K)(const char *uplo,
 	     temp1 += a[(i-1)*(lda)+(l-1)] * b[(j-1)*(ldb)+(l-1)];
 	     temp2 += b[(i-1)*(ldb)+(l-1)] * a[(j-1)*(lda)+(l-1)];
 	  }
-	  if(fabs(beta)<PLUMED_GMX_DOUBLE_MIN)
+	  if(std::abs(beta)<PLUMED_GMX_DOUBLE_MIN)
 	    c[(j-1)*(ldc)+(i-1)] = alpha * (temp1 + temp2);
 	  else
 	    c[(j-1)*(ldc)+(i-1)] = beta * c[(j-1)*(ldc)+(i-1)] +
@@ -1201,7 +1180,7 @@ PLUMED_BLAS_F77_FUNC(dsyr2k,DSYR2K)(const char *uplo,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "real.h"
 
@@ -1231,10 +1210,9 @@ PLUMED_BLAS_F77_FUNC(dtrmm,DTRMM)(const char *side,
     double alpha = *alpha__;
     
     /* Local variables */
-    int i__, j, k, info;
+    int i__, j, k;
     double temp;
     int lside;
-    int nrowa;
     int upper;
     int nounit;
     a_dim1 = lda;
@@ -1246,20 +1224,14 @@ PLUMED_BLAS_F77_FUNC(dtrmm,DTRMM)(const char *side,
 
     /* Function Body */
     lside = (*side=='L' || *side=='l');
-    if (lside) {
-	nrowa = m;
-    } else {
-	nrowa = n;
-    }
+
     nounit = (*diag=='N' || *diag=='n');
     upper = (*uplo=='U' || *uplo=='u');
 
-    info = 0;
-
     if (n == 0) {
 	return;
     }
-    if (fabs(alpha)<PLUMED_GMX_DOUBLE_MIN) {
+    if (std::abs(alpha)<PLUMED_GMX_DOUBLE_MIN) {
 	i__1 = n;
 	for (j = 1; j <= i__1; ++j) {
 	    i__2 = m;
@@ -1276,7 +1248,7 @@ PLUMED_BLAS_F77_FUNC(dtrmm,DTRMM)(const char *side,
 		for (j = 1; j <= i__1; ++j) {
 		    i__2 = m;
 		    for (k = 1; k <= i__2; ++k) {
-			if (fabs(b[k + j * b_dim1])>PLUMED_GMX_DOUBLE_MIN) {
+			if (std::abs(b[k + j * b_dim1])>PLUMED_GMX_DOUBLE_MIN) {
 			    temp = alpha * b[k + j * b_dim1];
 			    i__3 = k - 1;
 			    for (i__ = 1; i__ <= i__3; ++i__) {
@@ -1293,7 +1265,7 @@ PLUMED_BLAS_F77_FUNC(dtrmm,DTRMM)(const char *side,
 		i__1 = n;
 		for (j = 1; j <= i__1; ++j) {
 		    for (k = m; k >= 1; --k) {
-			if (fabs(b[k + j * b_dim1])>PLUMED_GMX_DOUBLE_MIN) {
+			if (std::abs(b[k + j * b_dim1])>PLUMED_GMX_DOUBLE_MIN) {
 			    temp = alpha * b[k + j * b_dim1];
 			    b[k + j * b_dim1] = temp;
 			    if (nounit) {
@@ -1358,7 +1330,7 @@ PLUMED_BLAS_F77_FUNC(dtrmm,DTRMM)(const char *side,
 		    }
 		    i__1 = j - 1;
 		    for (k = 1; k <= i__1; ++k) {
-			if (fabs(a[k + j * a_dim1])>PLUMED_GMX_DOUBLE_MIN) {
+			if (std::abs(a[k + j * a_dim1])>PLUMED_GMX_DOUBLE_MIN) {
 			    temp = alpha * a[k + j * a_dim1];
 			    i__2 = m;
 			    for (i__ = 1; i__ <= i__2; ++i__) {
@@ -1381,7 +1353,7 @@ PLUMED_BLAS_F77_FUNC(dtrmm,DTRMM)(const char *side,
 		    }
 		    i__2 = n;
 		    for (k = j + 1; k <= i__2; ++k) {
-			if (fabs(a[k + j * a_dim1])>PLUMED_GMX_DOUBLE_MIN) {
+			if (std::abs(a[k + j * a_dim1])>PLUMED_GMX_DOUBLE_MIN) {
 			    temp = alpha * a[k + j * a_dim1];
 			    i__3 = m;
 			    for (i__ = 1; i__ <= i__3; ++i__) {
@@ -1399,7 +1371,7 @@ PLUMED_BLAS_F77_FUNC(dtrmm,DTRMM)(const char *side,
 		for (k = 1; k <= i__1; ++k) {
 		    i__2 = k - 1;
 		    for (j = 1; j <= i__2; ++j) {
-			if (fabs(a[j + k * a_dim1])>PLUMED_GMX_DOUBLE_MIN) {
+			if (std::abs(a[j + k * a_dim1])>PLUMED_GMX_DOUBLE_MIN) {
 			    temp = alpha * a[j + k * a_dim1];
 			    i__3 = m;
 			    for (i__ = 1; i__ <= i__3; ++i__) {
@@ -1412,7 +1384,7 @@ PLUMED_BLAS_F77_FUNC(dtrmm,DTRMM)(const char *side,
 		    if (nounit) {
 			temp *= a[k + k * a_dim1];
 		    }
-		    if (fabs(temp-1.0)>PLUMED_GMX_DOUBLE_EPS) {
+		    if (std::abs(temp-1.0)>PLUMED_GMX_DOUBLE_EPS) {
 			i__2 = m;
 			for (i__ = 1; i__ <= i__2; ++i__) {
 			    b[i__ + k * b_dim1] = temp * b[i__ + k * b_dim1];
@@ -1423,7 +1395,7 @@ PLUMED_BLAS_F77_FUNC(dtrmm,DTRMM)(const char *side,
 		for (k = n; k >= 1; --k) {
 		    i__1 = n;
 		    for (j = k + 1; j <= i__1; ++j) {
-			if (fabs(a[j + k * a_dim1])>PLUMED_GMX_DOUBLE_MIN) {
+			if (std::abs(a[j + k * a_dim1])>PLUMED_GMX_DOUBLE_MIN) {
 			    temp = alpha * a[j + k * a_dim1];
 			    i__2 = m;
 			    for (i__ = 1; i__ <= i__2; ++i__) {
@@ -1436,7 +1408,7 @@ PLUMED_BLAS_F77_FUNC(dtrmm,DTRMM)(const char *side,
 		    if (nounit) {
 			temp *= a[k + k * a_dim1];
 		    }
-		    if (fabs(temp-1.0)>PLUMED_GMX_DOUBLE_EPS) {
+		    if (std::abs(temp-1.0)>PLUMED_GMX_DOUBLE_EPS) {
 			i__1 = m;
 			for (i__ = 1; i__ <= i__1; ++i__) {
 			    b[i__ + k * b_dim1] = temp * b[i__ + k * b_dim1];
@@ -1454,7 +1426,7 @@ PLUMED_BLAS_F77_FUNC(dtrmm,DTRMM)(const char *side,
 
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "real.h"
 #include "blas.h"
@@ -1473,7 +1445,7 @@ PLUMED_BLAS_F77_FUNC(dtrmv,DTRMV)(const char *uplo,
 {
     int a_dim1, a_offset, i__1, i__2;
 
-    int i__, j, ix, jx, kx, info;
+    int i__, j, ix, jx, kx;
     double temp;
     int nounit;
     
@@ -1486,8 +1458,6 @@ PLUMED_BLAS_F77_FUNC(dtrmv,DTRMV)(const char *uplo,
     a -= a_offset;
     --x;
 
-    info = 0;
-
     if (n == 0) {
 	return;
     }
@@ -1506,7 +1476,7 @@ PLUMED_BLAS_F77_FUNC(dtrmv,DTRMV)(const char *uplo,
 	    if (incx == 1) {
 		i__1 = n;
 		for (j = 1; j <= i__1; ++j) {
-		    if (fabs(x[j])>PLUMED_GMX_DOUBLE_MIN) {
+		    if (std::abs(x[j])>PLUMED_GMX_DOUBLE_MIN) {
 			temp = x[j];
 			i__2 = j - 1;
 			for (i__ = 1; i__ <= i__2; ++i__) {
@@ -1521,7 +1491,7 @@ PLUMED_BLAS_F77_FUNC(dtrmv,DTRMV)(const char *uplo,
 		jx = kx;
 		i__1 = n;
 		for (j = 1; j <= i__1; ++j) {
-		    if (fabs(x[jx])>PLUMED_GMX_DOUBLE_MIN) {
+		    if (std::abs(x[jx])>PLUMED_GMX_DOUBLE_MIN) {
 			temp = x[jx];
 			ix = kx;
 			i__2 = j - 1;
@@ -1539,7 +1509,7 @@ PLUMED_BLAS_F77_FUNC(dtrmv,DTRMV)(const char *uplo,
 	} else {
 	    if (incx == 1) {
 		for (j = n; j >= 1; --j) {
-		    if (fabs(x[j])>PLUMED_GMX_DOUBLE_MIN) {
+		    if (std::abs(x[j])>PLUMED_GMX_DOUBLE_MIN) {
 			temp = x[j];
 			i__1 = j + 1;
 			for (i__ = n; i__ >= i__1; --i__) {
@@ -1554,7 +1524,7 @@ PLUMED_BLAS_F77_FUNC(dtrmv,DTRMV)(const char *uplo,
 		kx += (n - 1) * incx;
 		jx = kx;
 		for (j = n; j >= 1; --j) {
-		    if (fabs(x[jx])>PLUMED_GMX_DOUBLE_MIN) {
+		    if (std::abs(x[jx])>PLUMED_GMX_DOUBLE_MIN) {
 			temp = x[jx];
 			ix = kx;
 			i__1 = j + 1;
@@ -1642,8 +1612,8 @@ PLUMED_BLAS_F77_FUNC(dtrmv,DTRMV)(const char *uplo,
 
 }
 }
-#include <ctype.h>
-#include <math.h>
+#include <cctype>
+#include <cmath>
 
 #include "real.h"
 #include "blas.h"
@@ -1663,10 +1633,10 @@ PLUMED_BLAS_F77_FUNC(dtrsm,DTRSM)(const char * side,
        double *b,
        int *  ldb__)
 {
-  const char xside  = toupper(*side);
-  const char xuplo  = toupper(*uplo);
-  const char xtrans = toupper(*transa);
-  const char xdiag  = toupper(*diag);
+  const char xside  = std::toupper(*side);
+  const char xuplo  = std::toupper(*uplo);
+  const char xtrans = std::toupper(*transa);
+  const char xdiag  = std::toupper(*diag);
   int i,j,k;
   double temp;
 
@@ -1680,7 +1650,7 @@ PLUMED_BLAS_F77_FUNC(dtrsm,DTRSM)(const char * side,
   if(n<=0)
     return;
   
-  if(fabs(alpha)<PLUMED_GMX_DOUBLE_MIN) { 
+  if(std::abs(alpha)<PLUMED_GMX_DOUBLE_MIN) { 
     for(j=0;j<n;j++)
       for(i=0;i<m;i++)
 	b[j*(ldb)+i] = 0.0;
@@ -1694,12 +1664,12 @@ PLUMED_BLAS_F77_FUNC(dtrsm,DTRSM)(const char * side,
       if(xuplo=='U') {
 	/* upper */
 	for(j=0;j<n;j++) {
-	  if(fabs(alpha-1.0)>PLUMED_GMX_DOUBLE_EPS) {
+	  if(std::abs(alpha-1.0)>PLUMED_GMX_DOUBLE_EPS) {
 	    for(i=0;i<m;i++)
 	      b[j*(ldb)+i] *= alpha;
 	  }
 	  for(k=m-1;k>=0;k--) {
-	    if(fabs(b[j*(ldb)+k])>PLUMED_GMX_DOUBLE_MIN) {
+	    if(std::abs(b[j*(ldb)+k])>PLUMED_GMX_DOUBLE_MIN) {
 	      if(xdiag=='N')
 		b[j*(ldb)+k] /= a[k*(lda)+k];
 	      for(i=0;i<k;i++)
@@ -1710,11 +1680,11 @@ PLUMED_BLAS_F77_FUNC(dtrsm,DTRSM)(const char * side,
       } else {
 	/* lower */
 	for(j=0;j<n;j++) {
-	  if(fabs(alpha-1.0)>PLUMED_GMX_DOUBLE_EPS)
+	  if(std::abs(alpha-1.0)>PLUMED_GMX_DOUBLE_EPS)
 	    for(i=0;i<m;i++)
 	      b[j*(ldb)+i] *= alpha;
 	  for(k=0;k<m;k++) {
-	    if(fabs(b[j*(ldb)+k])>PLUMED_GMX_DOUBLE_MIN) {
+	    if(std::abs(b[j*(ldb)+k])>PLUMED_GMX_DOUBLE_MIN) {
 	      if(xdiag=='N')
 		b[j*(ldb)+k] /= a[k*(lda)+k];
 	      for(i=k+1;i<m;i++)
@@ -1758,11 +1728,11 @@ PLUMED_BLAS_F77_FUNC(dtrsm,DTRSM)(const char * side,
       if(xuplo=='U') {
 	/* upper */
 	for(j=0;j<n;j++) {
-	  if(fabs(alpha-1.0)>PLUMED_GMX_DOUBLE_EPS)
+	  if(std::abs(alpha-1.0)>PLUMED_GMX_DOUBLE_EPS)
 	    for(i=0;i<m;i++)
 	      b[j*(ldb)+i] *= alpha;
 	  for(k=0;k<j;k++) {
-	    if(fabs(a[j*(lda)+k])>PLUMED_GMX_DOUBLE_MIN) {
+	    if(std::abs(a[j*(lda)+k])>PLUMED_GMX_DOUBLE_MIN) {
 	      for(i=0;i<m;i++)
 		b[j*(ldb)+i] -= a[j*(lda)+k]*b[k*(ldb)+i];
 	    }
@@ -1776,11 +1746,11 @@ PLUMED_BLAS_F77_FUNC(dtrsm,DTRSM)(const char * side,
       } else {
 	/* lower */
 	for(j=n-1;j>=0;j--) {
-	  if(fabs(alpha)>PLUMED_GMX_DOUBLE_MIN)
+	  if(std::abs(alpha)>PLUMED_GMX_DOUBLE_MIN)
 	    for(i=0;i<m;i++)
 	      b[j*(ldb)+i] *= alpha;
 	  for(k=j+1;k<n;k++) {
-	    if(fabs(a[j*(lda)+k])>PLUMED_GMX_DOUBLE_MIN) {
+	    if(std::abs(a[j*(lda)+k])>PLUMED_GMX_DOUBLE_MIN) {
 	      for(i=0;i<m;i++)
 		b[j*(ldb)+i] -= a[j*(lda)+k]*b[k*(ldb)+i];
 	    }
@@ -1803,13 +1773,13 @@ PLUMED_BLAS_F77_FUNC(dtrsm,DTRSM)(const char * side,
 	      b[k*(ldb)+i] *= temp;
 	  }
 	  for(j=0;j<k;j++) {
-	    if(fabs(a[k*(lda)+j])>PLUMED_GMX_DOUBLE_MIN) {
+	    if(std::abs(a[k*(lda)+j])>PLUMED_GMX_DOUBLE_MIN) {
 	      temp = a[k*(lda)+j];
 	      for(i=0;i<m;i++)
 		b[j*(ldb)+i] -= temp * b[k*(ldb)+i];
 	    }
 	  }
-	  if(fabs(alpha-1.0)>PLUMED_GMX_DOUBLE_EPS)
+	  if(std::abs(alpha-1.0)>PLUMED_GMX_DOUBLE_EPS)
 	    for(i=0;i<m;i++)
 	      b[k*(ldb)+i] *= alpha;
 	}
@@ -1822,13 +1792,13 @@ PLUMED_BLAS_F77_FUNC(dtrsm,DTRSM)(const char * side,
 	      b[k*(ldb)+i] *= temp;
 	  }
 	  for(j=k+1;j<n;j++) {
-	    if(fabs(a[k*(lda)+j])>PLUMED_GMX_DOUBLE_MIN) {
+	    if(std::abs(a[k*(lda)+j])>PLUMED_GMX_DOUBLE_MIN) {
 	      temp = a[k*(lda)+j];
 	      for(i=0;i<m;i++)
 		b[j*(ldb)+i] -= temp * b[k*(ldb)+i];
 	    }
 	  }
-	  if(fabs(alpha-1.0)>PLUMED_GMX_DOUBLE_EPS)
+	  if(std::abs(alpha-1.0)>PLUMED_GMX_DOUBLE_EPS)
 	    for(i=0;i<m;i++)
 	      b[k*(ldb)+i] *= alpha;
 	}
@@ -1838,7 +1808,7 @@ PLUMED_BLAS_F77_FUNC(dtrsm,DTRSM)(const char * side,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "blas.h"
 
 namespace PLMD{
@@ -1860,12 +1830,12 @@ PLUMED_BLAS_F77_FUNC(idamax,IDAMAX)(int *n__,
   if(n==1)
     return 1;
 
-  dmax = fabs(dx[0]);
+  dmax = std::abs(dx[0]);
   idxmax = 1;
 
   if(incx==1) {
     for(i=1;i<n;i++) {
-      tmp = fabs(dx[i]);
+      tmp = std::abs(dx[i]);
       if(tmp>dmax) {
 	dmax = tmp;
 	idxmax = i+1;
@@ -1875,7 +1845,7 @@ PLUMED_BLAS_F77_FUNC(idamax,IDAMAX)(int *n__,
     /* Non-unit increments */
     ix = incx; /* this is really 0 + an increment */
     for(i=1;i<n;i++,ix+=incx) {
-      tmp = fabs(dx[ix]);
+      tmp = std::abs(dx[ix]);
       if(tmp>dmax) {
 	dmax = tmp;
 	idxmax = ix+1;
@@ -1886,7 +1856,7 @@ PLUMED_BLAS_F77_FUNC(idamax,IDAMAX)(int *n__,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "blas.h"
 
 namespace PLMD{
@@ -1908,12 +1878,12 @@ PLUMED_BLAS_F77_FUNC(isamax,ISAMAX)(int *n__,
   if(n==1)
     return 1;
 
-  dmax = fabs(dx[0]);
+  dmax = std::abs(dx[0]);
   idxmax = 1;
 
   if(incx==1) {
     for(i=1;i<n;i++) {
-      tmp = fabs(dx[i]);
+      tmp = std::abs(dx[i]);
       if(tmp>dmax) {
 	dmax = tmp;
 	idxmax = i+1;
@@ -1923,7 +1893,7 @@ PLUMED_BLAS_F77_FUNC(isamax,ISAMAX)(int *n__,
     /* Non-unit increments */
     ix = incx; /* this is really 0 + an increment */
     for(i=1;i<n;i++,ix+=incx) {
-      tmp = fabs(dx[ix]);
+      tmp = std::abs(dx[ix]);
       if(tmp>dmax) {
 	dmax = tmp;
 	idxmax = ix+1;
@@ -1934,7 +1904,7 @@ PLUMED_BLAS_F77_FUNC(isamax,ISAMAX)(int *n__,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "blas.h"
 
 namespace PLMD{
@@ -1965,7 +1935,7 @@ PLUMED_BLAS_F77_FUNC(sasum,SASUM)(int *n__,
         i__1 = nincx;
         i__2 = incx;
         for (i__ = 1; i__2 < 0 ? i__ >= i__1 : i__ <= i__1; i__ += i__2) {
-            dtemp += fabs(dx[i__]);
+            dtemp += std::abs(dx[i__]);
         }
         return dtemp;
     }
@@ -1974,7 +1944,7 @@ PLUMED_BLAS_F77_FUNC(sasum,SASUM)(int *n__,
     if (m != 0) {
         i__2 = m;
         for (i__ = 1; i__ <= i__2; ++i__) {
-            dtemp += fabs(dx[i__]);
+            dtemp += std::abs(dx[i__]);
         }
         if (n < 6) {
             return dtemp;
@@ -1983,9 +1953,9 @@ PLUMED_BLAS_F77_FUNC(sasum,SASUM)(int *n__,
     mp1 = m + 1;
     i__2 = n;
     for (i__ = mp1; i__ <= i__2; i__ += 6) {
-        dtemp = dtemp + fabs(dx[i__]) + fabs(dx[i__ + 1]) + 
-        fabs(dx[i__ + 2]) + fabs(dx[i__+ 3]) + fabs(dx[i__ + 4]) +
-        fabs(dx[i__ + 5]);
+        dtemp = dtemp + std::abs(dx[i__]) + std::abs(dx[i__ + 1]) + 
+        std::abs(dx[i__ + 2]) + std::abs(dx[i__+ 3]) + std::abs(dx[i__ + 4]) +
+        std::abs(dx[i__ + 5]);
     }
     return dtemp;
 }
@@ -2155,8 +2125,8 @@ PLUMED_BLAS_F77_FUNC(sdot,SDOT)(int *n_arg,
 
 }
 }
-#include <ctype.h>
-#include <math.h>
+#include <cctype>
+#include <cmath>
 
 #include "real.h"
 #include "blas.h"
@@ -2178,11 +2148,10 @@ PLUMED_BLAS_F77_FUNC(sgemm,SGEMM)(const char *transa,
        float *c,
        int *ldc__)
 {
-  const char tra=toupper(*transa);
-  const char trb=toupper(*transb);
+  const char tra=std::toupper(*transa);
+  const char trb=std::toupper(*transb);
   float temp;
   int i,j,l;
-  int nrowa,ncola,nrowb;
 
   int m   = *m__;
   int n   = *n__;
@@ -2194,24 +2163,11 @@ PLUMED_BLAS_F77_FUNC(sgemm,SGEMM)(const char *transa,
   float alpha = *alpha__;
   float beta  = *beta__;
   
-  if(tra=='N') {
-    nrowa = m;
-    ncola = k;
-  } else {
-    nrowa = k;
-    ncola = m;
-  }
-
-  if(trb=='N') 
-    nrowb = k;
-   else 
-    nrowb = n;
-  
-  if(m==0 || n==0 || (( fabs(alpha)<PLUMED_GMX_FLOAT_MIN || k==0) && fabs(beta-1.0)<PLUMED_GMX_FLOAT_EPS))
+  if(m==0 || n==0 || (( std::abs(alpha)<PLUMED_GMX_FLOAT_MIN || k==0) && std::abs(beta-1.0)<PLUMED_GMX_FLOAT_EPS))
     return;
 
-  if(fabs(alpha)<PLUMED_GMX_FLOAT_MIN) {
-    if(fabs(beta)<PLUMED_GMX_FLOAT_MIN) {
+  if(std::abs(alpha)<PLUMED_GMX_FLOAT_MIN) {
+    if(std::abs(beta)<PLUMED_GMX_FLOAT_MIN) {
       for(j=0;j<n;j++)
 	for(i=0;i<m;i++)
 	  c[j*(ldc)+i] = 0.0;
@@ -2228,15 +2184,15 @@ PLUMED_BLAS_F77_FUNC(sgemm,SGEMM)(const char *transa,
     if(tra=='N') {
       
       for(j=0;j<n;j++) {
-	if(fabs(beta)<PLUMED_GMX_FLOAT_MIN) {
+	if(std::abs(beta)<PLUMED_GMX_FLOAT_MIN) {
 	  for(i=0;i<m;i++)
 	    c[j*(ldc)+i] = 0.0;
-	} else if(fabs(beta-1.0)>PLUMED_GMX_FLOAT_EPS) {
+	} else if(std::abs(beta-1.0)>PLUMED_GMX_FLOAT_EPS) {
 	  for(i=0;i<m;i++)
 	    c[j*(ldc)+i] *= beta;
 	} 
 	for(l=0;l<k;l++) {
-	  if( fabs(b[ j*(ldb) + l ])>PLUMED_GMX_FLOAT_MIN) {
+	  if( std::abs(b[ j*(ldb) + l ])>PLUMED_GMX_FLOAT_MIN) {
 	    temp = alpha * b[ j*(ldb) + l ];
 	    for(i=0;i<m;i++)
 	      c[j*(ldc)+i] += temp * a[l*(lda)+i]; 
@@ -2250,7 +2206,7 @@ PLUMED_BLAS_F77_FUNC(sgemm,SGEMM)(const char *transa,
 	  temp = 0.0;
 	  for(l=0;l<k;l++) 
 	    temp += a[i*(lda)+l] * b[j*(ldb)+l];
-	  if(fabs(beta)<PLUMED_GMX_FLOAT_MIN)
+	  if(std::abs(beta)<PLUMED_GMX_FLOAT_MIN)
 	    c[j*(ldc)+i] = alpha * temp;
 	  else
 	    c[j*(ldc)+i] = alpha * temp + beta * c[j*(ldc)+i];
@@ -2264,15 +2220,15 @@ PLUMED_BLAS_F77_FUNC(sgemm,SGEMM)(const char *transa,
       /* transpose B, but not A */
 
       for(j=0;j<n;j++) {
-	if(fabs(beta)<PLUMED_GMX_FLOAT_MIN) {
+	if(std::abs(beta)<PLUMED_GMX_FLOAT_MIN) {
 	  for(i=0;i<m;i++)
 	    c[j*(ldc)+i] = 0.0;
-	} else if(fabs(beta-1.0)>PLUMED_GMX_FLOAT_EPS) {
+	} else if(std::abs(beta-1.0)>PLUMED_GMX_FLOAT_EPS) {
 	  for(i=0;i<m;i++)
 	    c[j*(ldc)+i] *= beta;
 	} 
 	for(l=0;l<k;l++) {
-	  if( fabs(b[ l*(ldb) + j ])>PLUMED_GMX_FLOAT_MIN) {
+	  if( std::abs(b[ l*(ldb) + j ])>PLUMED_GMX_FLOAT_MIN) {
 	    temp = alpha * b[ l*(ldb) + j ];
 	    for(i=0;i<m;i++)
 	      c[j*(ldc)+i] += temp * a[l*(lda)+i]; 
@@ -2287,7 +2243,7 @@ PLUMED_BLAS_F77_FUNC(sgemm,SGEMM)(const char *transa,
 	  temp = 0.0;
 	  for(l=0;l<k;l++) 
 	    temp += a[i*(lda)+l] * b[l*(ldb)+j];
-	  if(fabs(beta)<PLUMED_GMX_FLOAT_MIN)
+	  if(std::abs(beta)<PLUMED_GMX_FLOAT_MIN)
 	    c[j*(ldc)+i] = alpha * temp;
 	  else
 	    c[j*(ldc)+i] = alpha * temp + beta * c[j*(ldc)+i];
@@ -2298,8 +2254,8 @@ PLUMED_BLAS_F77_FUNC(sgemm,SGEMM)(const char *transa,
 }
 }
 }
-#include <ctype.h>
-#include <math.h>
+#include <cctype>
+#include <cmath>
 
 #include "real.h"
 #include "blas.h"
@@ -2319,7 +2275,7 @@ PLUMED_BLAS_F77_FUNC(sgemv,SGEMV)(const char *trans,
                       float *y,
                       int *incy__)
 {
-  const char ch=toupper(*trans);
+  const char ch=std::toupper(*trans);
   int lenx,leny,kx,ky;
   int i,j,jx,jy,ix,iy;
   float temp;
@@ -2332,7 +2288,7 @@ PLUMED_BLAS_F77_FUNC(sgemv,SGEMV)(const char *trans,
   int incy = *incy__;
   int lda = *lda__;
   
-  if(n<=0 || m<=0 || (fabs(alpha)<PLUMED_GMX_FLOAT_MIN && fabs(beta-1.0)<PLUMED_GMX_FLOAT_EPS))
+  if(n<=0 || m<=0 || (std::abs(alpha)<PLUMED_GMX_FLOAT_MIN && std::abs(beta-1.0)<PLUMED_GMX_FLOAT_EPS))
     return;
 
   if(ch=='N') {
@@ -2353,9 +2309,9 @@ PLUMED_BLAS_F77_FUNC(sgemv,SGEMV)(const char *trans,
   else
     ky = 1 - (leny -1)*(incy);
  
-  if(fabs(beta-1.0)>PLUMED_GMX_FLOAT_EPS) {
+  if(std::abs(beta-1.0)>PLUMED_GMX_FLOAT_EPS) {
     if(incy==1) {
-      if(fabs(beta)<PLUMED_GMX_FLOAT_MIN)
+      if(std::abs(beta)<PLUMED_GMX_FLOAT_MIN)
 	for(i=0;i<leny;i++)
 	  y[i] = 0.0;
       else
@@ -2364,7 +2320,7 @@ PLUMED_BLAS_F77_FUNC(sgemv,SGEMV)(const char *trans,
     } else {
       /* non-unit incr. */
       iy = ky;
-      if(fabs(beta)<PLUMED_GMX_FLOAT_MIN) 
+      if(std::abs(beta)<PLUMED_GMX_FLOAT_MIN) 
 	for(i=0;i<leny;i++,iy+=incy)
 	  y[iy] = 0.0;
       else
@@ -2373,14 +2329,14 @@ PLUMED_BLAS_F77_FUNC(sgemv,SGEMV)(const char *trans,
     }
   }
   
-  if(fabs(alpha)<PLUMED_GMX_FLOAT_MIN)
+  if(std::abs(alpha)<PLUMED_GMX_FLOAT_MIN)
     return;
   
   if(ch=='N') {
     jx = kx;
     if(incy==1) {
       for(j=1;j<=n;j++,jx+=incx) 
-	if( fabs(x[jx-1])>PLUMED_GMX_FLOAT_MIN) {
+	if( std::abs(x[jx-1])>PLUMED_GMX_FLOAT_MIN) {
 	  temp = alpha * x[jx-1];
 	  for(i=1;i<=m;i++)
 	    y[i-1] += temp * a[(j-1)*(lda)+(i-1)];
@@ -2388,7 +2344,7 @@ PLUMED_BLAS_F77_FUNC(sgemv,SGEMV)(const char *trans,
     } else {
       /* non-unit y incr. */
       for(j=1;j<=n;j++,jx+=incx) 
-	if( fabs(x[jx-1])>PLUMED_GMX_FLOAT_MIN) {
+	if( std::abs(x[jx-1])>PLUMED_GMX_FLOAT_MIN) {
 	  temp = alpha * x[jx-1];
 	  iy = ky;
 	  for(i=1;i<=m;i++,iy+=incy)
@@ -2420,7 +2376,7 @@ PLUMED_BLAS_F77_FUNC(sgemv,SGEMV)(const char *trans,
    
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "real.h"
 #include "blas.h"
@@ -2449,7 +2405,7 @@ PLUMED_BLAS_F77_FUNC(sger,SGER)(int *m__,
     int lda = *lda__;
     float alpha = *alpha__;
     
-    if(m<=0 || n<=0 || fabs(alpha)<PLUMED_GMX_FLOAT_MIN)
+    if(m<=0 || n<=0 || std::abs(alpha)<PLUMED_GMX_FLOAT_MIN)
         return;
     
     if(incy>0)
@@ -2459,7 +2415,7 @@ PLUMED_BLAS_F77_FUNC(sger,SGER)(int *m__,
     
     if(incx==1) {
         for(j=0;j<n;j++,jy+=incy)
-            if(fabs(y[jy])>PLUMED_GMX_FLOAT_MIN) {
+            if(std::abs(y[jy])>PLUMED_GMX_FLOAT_MIN) {
                 temp = alpha * y[jy];
                 for(i=0;i<m;i++)
                     a[j*(lda)+i] += temp*x[i];
@@ -2472,7 +2428,7 @@ PLUMED_BLAS_F77_FUNC(sger,SGER)(int *m__,
             kx = incx * (1 - m);
         
         for(j=0;j<n;j++,jy+=incy) {
-            if(fabs(y[jy])>PLUMED_GMX_FLOAT_MIN) {
+            if(std::abs(y[jy])>PLUMED_GMX_FLOAT_MIN) {
                 temp = alpha * y[jy];
                 ix = kx;
                 for(i=0;i<m;i++,ix+=incx)
@@ -2484,7 +2440,7 @@ PLUMED_BLAS_F77_FUNC(sger,SGER)(int *m__,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 
 
 #include "real.h"
@@ -2519,7 +2475,7 @@ PLUMED_BLAS_F77_FUNC(snrm2,SNRM2)(int  *     n__,
     max_ix = 1+(n-1)*(incx);
     for(ix=1;ix<=max_ix;ix+=incx) {
         t = x[ix-1];
-        if(fabs(t)>PLUMED_GMX_FLOAT_MIN) {
+        if(std::abs(t)>PLUMED_GMX_FLOAT_MIN) {
             absxi = (t>=0) ? t : (-t);
             if(scale<absxi) {
                 t = scale/absxi;
@@ -2532,7 +2488,7 @@ PLUMED_BLAS_F77_FUNC(snrm2,SNRM2)(int  *     n__,
             }
         }
     }
-    return scale*sqrt(ssq);
+    return scale*std::sqrt(ssq);
     
 }
 
@@ -2695,8 +2651,8 @@ PLUMED_BLAS_F77_FUNC(sswap,SSWAP)(int *n__,
  
 }
 }
-#include <math.h>
-#include <ctype.h>
+#include <cctype>
+#include <cmath>
 
 #include "real.h"
 #include "blas.h"
@@ -2715,7 +2671,7 @@ PLUMED_BLAS_F77_FUNC(ssymv,SSYMV)(const char *uplo,
                       float *y,
                       int *incy__)
 {
-    const char ch=toupper(*uplo);
+    const char ch=std::toupper(*uplo);
     int kx,ky,i,j,ix,iy,jx,jy;
     float temp1,temp2;
     
@@ -2739,9 +2695,9 @@ PLUMED_BLAS_F77_FUNC(ssymv,SSYMV)(const char *uplo,
     else
         ky = 1 - (n -1)*(incy);
     
-    if(fabs(beta-1.0)>PLUMED_GMX_FLOAT_EPS) {
+    if(std::abs(beta-1.0)>PLUMED_GMX_FLOAT_EPS) {
         if(incy==1) {
-            if(fabs(beta)<PLUMED_GMX_FLOAT_MIN) 
+            if(std::abs(beta)<PLUMED_GMX_FLOAT_MIN) 
                 for(i=1;i<=n;i++)
                     y[i-1] = 0.0;
             else
@@ -2750,7 +2706,7 @@ PLUMED_BLAS_F77_FUNC(ssymv,SSYMV)(const char *uplo,
         } else {
             /* non-unit incr. */
             iy = ky;
-            if(fabs(beta)<PLUMED_GMX_FLOAT_MIN) 
+            if(std::abs(beta)<PLUMED_GMX_FLOAT_MIN) 
                 for(i=1;i<=n;i++) {
                     y[iy-1] = 0.0;
                     iy += incy;
@@ -2763,7 +2719,7 @@ PLUMED_BLAS_F77_FUNC(ssymv,SSYMV)(const char *uplo,
         }
     }
         
-        if(fabs(alpha)<PLUMED_GMX_FLOAT_MIN) 
+        if(std::abs(alpha)<PLUMED_GMX_FLOAT_MIN) 
             return;
         
         if(ch=='U') {
@@ -2836,8 +2792,8 @@ PLUMED_BLAS_F77_FUNC(ssymv,SSYMV)(const char *uplo,
 }    
 }
 }
-#include <ctype.h>
-#include <math.h>
+#include <cctype>
+#include <cmath>
 
 #include "real.h"
 #include "blas.h"
@@ -2857,7 +2813,7 @@ PLUMED_BLAS_F77_FUNC(ssyr2,SSYR2)(const char *    uplo,
 {
     int kx,ky,ix,iy,jx,jy,j,i;
     float temp1,temp2;
-    const char ch=toupper(*uplo);
+    const char ch=std::toupper(*uplo);
     
     int n = *n__;
     int lda = *lda__;
@@ -2865,7 +2821,7 @@ PLUMED_BLAS_F77_FUNC(ssyr2,SSYR2)(const char *    uplo,
     int incy = *incy__;
     float alpha = *alpha__;
     
-    if(n<=0 || fabs(alpha)<PLUMED_GMX_FLOAT_MIN || incx==0 || incy==0 ||
+    if(n<=0 || std::abs(alpha)<PLUMED_GMX_FLOAT_MIN || incx==0 || incy==0 ||
        (ch != 'U' && ch != 'L'))
         return;
     
@@ -2891,7 +2847,7 @@ PLUMED_BLAS_F77_FUNC(ssyr2,SSYR2)(const char *    uplo,
         if(incx==1 && incy==1) {
             /* Unit increments for both x and y */
             for(j=1;j<=n;j++) {
-                if( fabs(x[j-1])>PLUMED_GMX_FLOAT_MIN  || fabs(y[j-1])>PLUMED_GMX_FLOAT_MIN ) {
+                if( std::abs(x[j-1])>PLUMED_GMX_FLOAT_MIN  || std::abs(y[j-1])>PLUMED_GMX_FLOAT_MIN ) {
                     temp1 = alpha * y[j-1];
                     temp2 = alpha * x[j-1];
                     for(i=1;i<=j;i++)
@@ -2903,7 +2859,7 @@ PLUMED_BLAS_F77_FUNC(ssyr2,SSYR2)(const char *    uplo,
             /* non-unit increments */
             for(j=1;j<=n;j++) {
                 
-                if( fabs(x[jx-1])>PLUMED_GMX_FLOAT_MIN || fabs(y[jy-1])>PLUMED_GMX_FLOAT_MIN ) {
+                if( std::abs(x[jx-1])>PLUMED_GMX_FLOAT_MIN || std::abs(y[jy-1])>PLUMED_GMX_FLOAT_MIN ) {
                     temp1 = alpha * y[jy-1];
                     temp2 = alpha * x[jx-1];
                     ix = kx;
@@ -2923,7 +2879,7 @@ PLUMED_BLAS_F77_FUNC(ssyr2,SSYR2)(const char *    uplo,
         if(incx==1 && incy==1) {
             /* Unit increments for both x and y */
             for(j=1;j<=n;j++) {
-                if( fabs(x[j-1])>PLUMED_GMX_FLOAT_MIN  || fabs(y[j-1])>PLUMED_GMX_FLOAT_MIN ) {
+                if( std::abs(x[j-1])>PLUMED_GMX_FLOAT_MIN  || std::abs(y[j-1])>PLUMED_GMX_FLOAT_MIN ) {
                     temp1 = alpha * y[j-1];
                     temp2 = alpha * x[j-1];
                     for(i=j;i<=n;i++)
@@ -2935,7 +2891,7 @@ PLUMED_BLAS_F77_FUNC(ssyr2,SSYR2)(const char *    uplo,
             /* non-unit increments */
             for(j=1;j<=n;j++) {
                 
-                if( fabs(x[jx-1])>PLUMED_GMX_FLOAT_MIN || fabs(y[jy-1])>PLUMED_GMX_FLOAT_MIN ) {
+                if( std::abs(x[jx-1])>PLUMED_GMX_FLOAT_MIN || std::abs(y[jy-1])>PLUMED_GMX_FLOAT_MIN ) {
                     temp1 = alpha * y[jy-1];
                     temp2 = alpha * x[jx-1];
                     ix = jx;
@@ -2956,8 +2912,8 @@ PLUMED_BLAS_F77_FUNC(ssyr2,SSYR2)(const char *    uplo,
 }
 }
 }
-#include <ctype.h>
-#include <math.h>
+#include <cctype>
+#include <cmath>
 
 #include "real.h"
 #include "blas.h"
@@ -2979,7 +2935,6 @@ PLUMED_BLAS_F77_FUNC(ssyr2k,SSYR2K)(const char *uplo,
                         int *ldc__)
 {
   char ch1,ch2;
-  int nrowa;
   int i,j,l;
   float temp1,temp2;
 
@@ -2992,20 +2947,15 @@ PLUMED_BLAS_F77_FUNC(ssyr2k,SSYR2K)(const char *uplo,
   float alpha = *alpha__;
   float beta  = *beta__;
   
-  ch1 = toupper(*uplo);
-  ch2 = toupper(*trans);
-
-  if(ch2 == 'N')
-    nrowa = n;
-  else
-    nrowa = k;
+  ch1 = std::toupper(*uplo);
+  ch2 = std::toupper(*trans);
 
-  if(n==0 || ( ( fabs(alpha)<PLUMED_GMX_FLOAT_MIN || k==0 ) && fabs(beta-1.0)<PLUMED_GMX_FLOAT_EPS))
+  if(n==0 || ( ( std::abs(alpha)<PLUMED_GMX_FLOAT_MIN || k==0 ) && std::abs(beta-1.0)<PLUMED_GMX_FLOAT_EPS))
     return;
 
-  if(fabs(alpha)<PLUMED_GMX_FLOAT_MIN) {
+  if(std::abs(alpha)<PLUMED_GMX_FLOAT_MIN) {
     if(ch1=='U') {
-      if(fabs(beta)<PLUMED_GMX_FLOAT_MIN) 
+      if(std::abs(beta)<PLUMED_GMX_FLOAT_MIN) 
 	for(j=1;j<=n;j++) 
 	  for(i=1;i<=j;i++)
 	    c[(j-1)*(ldc)+(i-1)] = 0.0;
@@ -3015,7 +2965,7 @@ PLUMED_BLAS_F77_FUNC(ssyr2k,SSYR2K)(const char *uplo,
 	    c[(j-1)*(ldc)+(i-1)] *= beta;
     } else {
       /* lower */
-      if(fabs(beta)<PLUMED_GMX_FLOAT_MIN) 
+      if(std::abs(beta)<PLUMED_GMX_FLOAT_MIN) 
 	for(j=1;j<=n;j++) 
 	  for(i=j;i<=n;i++)
 	    c[(j-1)*(ldc)+(i-1)] = 0.0;
@@ -3030,15 +2980,15 @@ PLUMED_BLAS_F77_FUNC(ssyr2k,SSYR2K)(const char *uplo,
   if(ch2=='N') {
     if(ch1=='U') {
       for(j=1;j<=n;j++) {
-	if(fabs(beta)<PLUMED_GMX_FLOAT_MIN)
+	if(std::abs(beta)<PLUMED_GMX_FLOAT_MIN)
 	  for(i=1;i<=j;i++)
 	     c[(j-1)*(ldc)+(i-1)] = 0.0;
-	else if(fabs(beta-1.0)>PLUMED_GMX_FLOAT_EPS)
+	else if(std::abs(beta-1.0)>PLUMED_GMX_FLOAT_EPS)
 	  for(i=1;i<=j;i++)
 	    c[(j-1)*(ldc)+(i-1)] *= beta;
 	for(l=1;l<=k;l++) {
-	  if( fabs(a[(l-1)*(lda)+(j-1)])>PLUMED_GMX_FLOAT_MIN ||
-	      fabs(b[(l-1)*(ldb)+(j-1)])>PLUMED_GMX_FLOAT_MIN) {
+	  if( std::abs(a[(l-1)*(lda)+(j-1)])>PLUMED_GMX_FLOAT_MIN ||
+	      std::abs(b[(l-1)*(ldb)+(j-1)])>PLUMED_GMX_FLOAT_MIN) {
 	    temp1 = alpha * b[(l-1)*(ldb)+(j-1)];
 	    temp2 = alpha * a[(l-1)*(lda)+(j-1)];
 	    for(i=1;i<=j;i++)
@@ -3051,15 +3001,15 @@ PLUMED_BLAS_F77_FUNC(ssyr2k,SSYR2K)(const char *uplo,
     } else {
       /* lower */
       for(j=1;j<=n;j++) {
-	if(fabs(beta)<PLUMED_GMX_FLOAT_MIN)
+	if(std::abs(beta)<PLUMED_GMX_FLOAT_MIN)
 	  for(i=j;i<=n;i++)
 	    c[(j-1)*(ldc)+(i-1)] = 0.0;
-	else if(fabs(beta-1.0)>PLUMED_GMX_FLOAT_EPS)
+	else if(std::abs(beta-1.0)>PLUMED_GMX_FLOAT_EPS)
 	  for(i=j;i<=n;i++)
 	    c[(j-1)*(ldc)+(i-1)] *= beta;
 	for(l=1;l<=k;l++) {
-	  if( fabs(a[(l-1)*(lda)+(j-1)])>PLUMED_GMX_FLOAT_MIN ||
-	      fabs(b[(l-1)*(ldb)+(j-1)])>PLUMED_GMX_FLOAT_MIN) {
+	  if( std::abs(a[(l-1)*(lda)+(j-1)])>PLUMED_GMX_FLOAT_MIN ||
+	      std::abs(b[(l-1)*(ldb)+(j-1)])>PLUMED_GMX_FLOAT_MIN) {
 	    temp1 = alpha * b[(l-1)*(ldb)+(j-1)];
 	    temp2 = alpha * a[(l-1)*(lda)+(j-1)];
 	    for(i=j;i<=n;i++)
@@ -3081,7 +3031,7 @@ PLUMED_BLAS_F77_FUNC(ssyr2k,SSYR2K)(const char *uplo,
 	     temp1 += a[(i-1)*(lda)+(l-1)] * b[(j-1)*(ldb)+(l-1)];
 	     temp2 += b[(i-1)*(ldb)+(l-1)] * a[(j-1)*(lda)+(l-1)];
 	  }
-	  if(fabs(beta)<PLUMED_GMX_FLOAT_MIN)
+	  if(std::abs(beta)<PLUMED_GMX_FLOAT_MIN)
 	    c[(j-1)*(ldc)+(i-1)] = alpha * (temp1 + temp2);
 	  else
 	    c[(j-1)*(ldc)+(i-1)] = beta * c[(j-1)*(ldc)+(i-1)] +
@@ -3097,7 +3047,7 @@ PLUMED_BLAS_F77_FUNC(ssyr2k,SSYR2K)(const char *uplo,
 	     temp1 += a[(i-1)*(lda)+(l-1)] * b[(j-1)*(ldb)+(l-1)];
 	     temp2 += b[(i-1)*(ldb)+(l-1)] * a[(j-1)*(lda)+(l-1)];
 	  }
-	  if(fabs(beta)<PLUMED_GMX_FLOAT_MIN)
+	  if(std::abs(beta)<PLUMED_GMX_FLOAT_MIN)
 	    c[(j-1)*(ldc)+(i-1)] = alpha * (temp1 + temp2);
 	  else
 	    c[(j-1)*(ldc)+(i-1)] = beta * c[(j-1)*(ldc)+(i-1)] +
@@ -3109,7 +3059,7 @@ PLUMED_BLAS_F77_FUNC(ssyr2k,SSYR2K)(const char *uplo,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "real.h"
 #include "blas.h"
@@ -3138,10 +3088,9 @@ PLUMED_BLAS_F77_FUNC(strmm,STRMM)(const char *side,
     float alpha = *alpha__;
     
     /* Local variables */
-    int i__, j, k, info;
+    int i__, j, k;
     float temp;
     int lside;
-    int nrowa;
     int upper;
     int nounit;
     a_dim1 = lda;
@@ -3153,20 +3102,14 @@ PLUMED_BLAS_F77_FUNC(strmm,STRMM)(const char *side,
 
     /* Function Body */
     lside = (*side=='L' || *side=='l');
-    if (lside) {
-	nrowa = m;
-    } else {
-	nrowa = n;
-    }
+
     nounit = (*diag=='N' || *diag=='n');
     upper = (*uplo=='U' || *uplo=='u');
 
-    info = 0;
-
     if (n == 0) {
 	return;
     }
-    if (fabs(alpha)<PLUMED_GMX_FLOAT_MIN) {
+    if (std::abs(alpha)<PLUMED_GMX_FLOAT_MIN) {
 	i__1 = n;
 	for (j = 1; j <= i__1; ++j) {
 	    i__2 = m;
@@ -3183,7 +3126,7 @@ PLUMED_BLAS_F77_FUNC(strmm,STRMM)(const char *side,
 		for (j = 1; j <= i__1; ++j) {
 		    i__2 = m;
 		    for (k = 1; k <= i__2; ++k) {
-			if ( fabs(b[k + j * b_dim1])>PLUMED_GMX_FLOAT_MIN) {
+			if ( std::abs(b[k + j * b_dim1])>PLUMED_GMX_FLOAT_MIN) {
 			    temp = alpha * b[k + j * b_dim1];
 			    i__3 = k - 1;
 			    for (i__ = 1; i__ <= i__3; ++i__) {
@@ -3201,7 +3144,7 @@ PLUMED_BLAS_F77_FUNC(strmm,STRMM)(const char *side,
 		i__1 = n;
 		for (j = 1; j <= i__1; ++j) {
 		    for (k = m; k >= 1; --k) {
-			if (fabs(b[k + j * b_dim1])>PLUMED_GMX_FLOAT_MIN) {
+			if (std::abs(b[k + j * b_dim1])>PLUMED_GMX_FLOAT_MIN) {
 			    temp = alpha * b[k + j * b_dim1];
 			    b[k + j * b_dim1] = temp;
 			    if (nounit) {
@@ -3266,7 +3209,7 @@ PLUMED_BLAS_F77_FUNC(strmm,STRMM)(const char *side,
 		    }
 		    i__1 = j - 1;
 		    for (k = 1; k <= i__1; ++k) {
-			if ( fabs(a[k + j * a_dim1])>PLUMED_GMX_FLOAT_MIN) {
+			if ( std::abs(a[k + j * a_dim1])>PLUMED_GMX_FLOAT_MIN) {
 			    temp = alpha * a[k + j * a_dim1];
 			    i__2 = m;
 			    for (i__ = 1; i__ <= i__2; ++i__) {
@@ -3289,7 +3232,7 @@ PLUMED_BLAS_F77_FUNC(strmm,STRMM)(const char *side,
 		    }
 		    i__2 = n;
 		    for (k = j + 1; k <= i__2; ++k) {
-			if ( fabs(a[k + j * a_dim1])>PLUMED_GMX_FLOAT_MIN) {
+			if ( std::abs(a[k + j * a_dim1])>PLUMED_GMX_FLOAT_MIN) {
 			    temp = alpha * a[k + j * a_dim1];
 			    i__3 = m;
 			    for (i__ = 1; i__ <= i__3; ++i__) {
@@ -3307,7 +3250,7 @@ PLUMED_BLAS_F77_FUNC(strmm,STRMM)(const char *side,
 		for (k = 1; k <= i__1; ++k) {
 		    i__2 = k - 1;
 		    for (j = 1; j <= i__2; ++j) {
-			if ( fabs(a[j + k * a_dim1])>PLUMED_GMX_FLOAT_MIN ) {
+			if ( std::abs(a[j + k * a_dim1])>PLUMED_GMX_FLOAT_MIN ) {
 			    temp = alpha * a[j + k * a_dim1];
 			    i__3 = m;
 			    for (i__ = 1; i__ <= i__3; ++i__) {
@@ -3320,7 +3263,7 @@ PLUMED_BLAS_F77_FUNC(strmm,STRMM)(const char *side,
 		    if (nounit) {
 			temp *= a[k + k * a_dim1];
 		    }
-		    if ( fabs(temp-1.0)>PLUMED_GMX_FLOAT_EPS) {
+		    if ( std::abs(temp-1.0)>PLUMED_GMX_FLOAT_EPS) {
 			i__2 = m;
 			for (i__ = 1; i__ <= i__2; ++i__) {
 			    b[i__ + k * b_dim1] = temp * b[i__ + k * b_dim1];
@@ -3331,7 +3274,7 @@ PLUMED_BLAS_F77_FUNC(strmm,STRMM)(const char *side,
 		for (k = n; k >= 1; --k) {
 		    i__1 = n;
 		    for (j = k + 1; j <= i__1; ++j) {
-			if ( fabs(a[j + k * a_dim1])>PLUMED_GMX_FLOAT_MIN) {
+			if ( std::abs(a[j + k * a_dim1])>PLUMED_GMX_FLOAT_MIN) {
 			    temp = alpha * a[j + k * a_dim1];
 			    i__2 = m;
 			    for (i__ = 1; i__ <= i__2; ++i__) {
@@ -3344,7 +3287,7 @@ PLUMED_BLAS_F77_FUNC(strmm,STRMM)(const char *side,
 		    if (nounit) {
 			temp *= a[k + k * a_dim1];
 		    }
-		    if ( fabs(temp-1.0)>PLUMED_GMX_FLOAT_EPS) {
+		    if ( std::abs(temp-1.0)>PLUMED_GMX_FLOAT_EPS) {
 			i__1 = m;
 			for (i__ = 1; i__ <= i__1; ++i__) {
 			    b[i__ + k * b_dim1] = temp * b[i__ + k * b_dim1];
@@ -3362,7 +3305,7 @@ PLUMED_BLAS_F77_FUNC(strmm,STRMM)(const char *side,
 
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "real.h"
 #include "blas.h"
@@ -3381,7 +3324,7 @@ PLUMED_BLAS_F77_FUNC(strmv,STRMV)(const char *uplo,
 {
     int a_dim1, a_offset, i__1, i__2;
 
-    int i__, j, ix, jx, kx, info;
+    int i__, j, ix, jx, kx;
     float temp;
     int nounit;
     
@@ -3394,8 +3337,6 @@ PLUMED_BLAS_F77_FUNC(strmv,STRMV)(const char *uplo,
     a -= a_offset;
     --x;
 
-    info = 0;
-
     if (n == 0) {
 	return;
     }
@@ -3414,7 +3355,7 @@ PLUMED_BLAS_F77_FUNC(strmv,STRMV)(const char *uplo,
 	    if (incx == 1) {
 		i__1 = n;
 		for (j = 1; j <= i__1; ++j) {
-		    if (fabs(x[j])>PLUMED_GMX_FLOAT_MIN) {
+		    if (std::abs(x[j])>PLUMED_GMX_FLOAT_MIN) {
 			temp = x[j];
 			i__2 = j - 1;
 			for (i__ = 1; i__ <= i__2; ++i__) {
@@ -3429,7 +3370,7 @@ PLUMED_BLAS_F77_FUNC(strmv,STRMV)(const char *uplo,
 		jx = kx;
 		i__1 = n;
 		for (j = 1; j <= i__1; ++j) {
-		    if (fabs(x[jx])>PLUMED_GMX_FLOAT_MIN) {
+		    if (std::abs(x[jx])>PLUMED_GMX_FLOAT_MIN) {
 			temp = x[jx];
 			ix = kx;
 			i__2 = j - 1;
@@ -3447,7 +3388,7 @@ PLUMED_BLAS_F77_FUNC(strmv,STRMV)(const char *uplo,
 	} else {
 	    if (incx == 1) {
 		for (j = n; j >= 1; --j) {
-		    if (fabs(x[j])>PLUMED_GMX_FLOAT_MIN) {
+		    if (std::abs(x[j])>PLUMED_GMX_FLOAT_MIN) {
 			temp = x[j];
 			i__1 = j + 1;
 			for (i__ = n; i__ >= i__1; --i__) {
@@ -3462,7 +3403,7 @@ PLUMED_BLAS_F77_FUNC(strmv,STRMV)(const char *uplo,
 		kx += (n - 1) * incx;
 		jx = kx;
 		for (j = n; j >= 1; --j) {
-		    if (fabs(x[jx])>PLUMED_GMX_FLOAT_MIN) {
+		    if (std::abs(x[jx])>PLUMED_GMX_FLOAT_MIN) {
 			temp = x[jx];
 			ix = kx;
 			i__1 = j + 1;
@@ -3550,8 +3491,8 @@ PLUMED_BLAS_F77_FUNC(strmv,STRMV)(const char *uplo,
 
 }
 }
-#include <ctype.h>
-#include <math.h>
+#include <cctype>
+#include <cmath>
 
 #include "real.h"
 #include "blas.h"
@@ -3571,10 +3512,10 @@ PLUMED_BLAS_F77_FUNC(strsm,STRSM)(const char * side,
                       float *b,
                       int *  ldb__)
 {
-  const char xside  = toupper(*side);
-  const char xuplo  = toupper(*uplo);
-  const char xtrans = toupper(*transa);
-  const char xdiag  = toupper(*diag);
+  const char xside  = std::toupper(*side);
+  const char xuplo  = std::toupper(*uplo);
+  const char xtrans = std::toupper(*transa);
+  const char xdiag  = std::toupper(*diag);
   int i,j,k;
   float temp;
 
@@ -3588,7 +3529,7 @@ PLUMED_BLAS_F77_FUNC(strsm,STRSM)(const char * side,
     return;
 
   
-  if(fabs(alpha)<PLUMED_GMX_FLOAT_MIN) { 
+  if(std::abs(alpha)<PLUMED_GMX_FLOAT_MIN) { 
     for(j=0;j<n;j++)
       for(i=0;i<m;i++)
 	b[j*(ldb)+i] = 0.0;
@@ -3602,12 +3543,12 @@ PLUMED_BLAS_F77_FUNC(strsm,STRSM)(const char * side,
       if(xuplo=='U') {
 	/* upper */
 	for(j=0;j<n;j++) {
-	  if(fabs(alpha-1.0)>PLUMED_GMX_FLOAT_EPS) {
+	  if(std::abs(alpha-1.0)>PLUMED_GMX_FLOAT_EPS) {
 	    for(i=0;i<m;i++)
 	      b[j*(ldb)+i] *= alpha;
 	  }
 	  for(k=m-1;k>=0;k--) {
-	    if( fabs(b[j*(ldb)+k])>PLUMED_GMX_FLOAT_MIN) {
+	    if( std::abs(b[j*(ldb)+k])>PLUMED_GMX_FLOAT_MIN) {
 	      if(xdiag=='N')
 		b[j*(ldb)+k] /= a[k*(lda)+k];
 	      for(i=0;i<k;i++)
@@ -3618,11 +3559,11 @@ PLUMED_BLAS_F77_FUNC(strsm,STRSM)(const char * side,
       } else {
 	/* lower */
 	for(j=0;j<n;j++) {
-	  if(fabs(alpha-1.0)>PLUMED_GMX_FLOAT_EPS)
+	  if(std::abs(alpha-1.0)>PLUMED_GMX_FLOAT_EPS)
 	    for(i=0;i<m;i++)
 	      b[j*(ldb)+i] *= alpha;
 	  for(k=0;k<m;k++) {
-	    if( fabs(b[j*(ldb)+k])>PLUMED_GMX_FLOAT_MIN) {
+	    if( std::abs(b[j*(ldb)+k])>PLUMED_GMX_FLOAT_MIN) {
 	      if(xdiag=='N')
 		b[j*(ldb)+k] /= a[k*(lda)+k];
 	      for(i=k+1;i<m;i++)
@@ -3666,11 +3607,11 @@ PLUMED_BLAS_F77_FUNC(strsm,STRSM)(const char * side,
       if(xuplo=='U') {
 	/* upper */
 	for(j=0;j<n;j++) {
-	  if(fabs(alpha-1.0)>PLUMED_GMX_FLOAT_EPS)
+	  if(std::abs(alpha-1.0)>PLUMED_GMX_FLOAT_EPS)
 	    for(i=0;i<m;i++)
 	      b[j*(ldb)+i] *= alpha;
 	  for(k=0;k<j;k++) {
-	    if( fabs(a[j*(lda)+k])>PLUMED_GMX_FLOAT_MIN) {
+	    if( std::abs(a[j*(lda)+k])>PLUMED_GMX_FLOAT_MIN) {
 	      for(i=0;i<m;i++)
 		b[j*(ldb)+i] -= a[j*(lda)+k]*b[k*(ldb)+i];
 	    }
@@ -3684,11 +3625,11 @@ PLUMED_BLAS_F77_FUNC(strsm,STRSM)(const char * side,
       } else {
 	/* lower */
 	for(j=n-1;j>=0;j--) {
-	  if(fabs(alpha-1.0)>PLUMED_GMX_FLOAT_EPS)
+	  if(std::abs(alpha-1.0)>PLUMED_GMX_FLOAT_EPS)
 	    for(i=0;i<m;i++)
 	      b[j*(ldb)+i] *= alpha;
 	  for(k=j+1;k<n;k++) {
-	    if( fabs(a[j*(lda)+k])>PLUMED_GMX_FLOAT_MIN ) {
+	    if( std::abs(a[j*(lda)+k])>PLUMED_GMX_FLOAT_MIN ) {
 	      for(i=0;i<m;i++)
 		b[j*(ldb)+i] -= a[j*(lda)+k]*b[k*(ldb)+i];
 	    }
@@ -3711,13 +3652,13 @@ PLUMED_BLAS_F77_FUNC(strsm,STRSM)(const char * side,
 	      b[k*(ldb)+i] *= temp;
 	  }
 	  for(j=0;j<k;j++) {
-	    if( fabs(a[k*(lda)+j])>PLUMED_GMX_FLOAT_MIN) {
+	    if( std::abs(a[k*(lda)+j])>PLUMED_GMX_FLOAT_MIN) {
 	      temp = a[k*(lda)+j];
 	      for(i=0;i<m;i++)
 		b[j*(ldb)+i] -= temp * b[k*(ldb)+i];
 	    }
 	  }
-	  if(fabs(alpha-1.0)>PLUMED_GMX_FLOAT_EPS)
+	  if(std::abs(alpha-1.0)>PLUMED_GMX_FLOAT_EPS)
 	    for(i=0;i<m;i++)
 	      b[k*(ldb)+i] *= alpha;
 	}
@@ -3730,13 +3671,13 @@ PLUMED_BLAS_F77_FUNC(strsm,STRSM)(const char * side,
 	      b[k*(ldb)+i] *= temp;
 	  }
 	  for(j=k+1;j<n;j++) {
-	    if( fabs(a[k*(lda)+j])>PLUMED_GMX_FLOAT_MIN) {
+	    if( std::abs(a[k*(lda)+j])>PLUMED_GMX_FLOAT_MIN) {
 	      temp = a[k*(lda)+j];
 	      for(i=0;i<m;i++)
 		b[j*(ldb)+i] -= temp * b[k*(ldb)+i];
 	    }
 	  }
-	  if(fabs(alpha-1.0)>PLUMED_GMX_FLOAT_EPS)
+	  if(std::abs(alpha-1.0)>PLUMED_GMX_FLOAT_EPS)
 	    for(i=0;i<m;i++)
 	      b[k*(ldb)+i] *= alpha;
 	}
diff --git a/src/blas/import.sh b/src/blas/import.sh
index 1a3e3117fc5a5b755dabfd3ed24dd36a489a271c..2eb9d24e8f553e0b5ced86e1b42006645678aa92 100755
--- a/src/blas/import.sh
+++ b/src/blas/import.sh
@@ -85,7 +85,7 @@ EOF
 
 {
 echo "#if ! defined (__PLUMED_HAS_EXTERNAL_BLAS)"
-for file in "$GRO"/src/gromacs/linearalgebra/gmx_blas/*.c
+for file in "$GRO"/src/gromacs/linearalgebra/gmx_blas/*.cpp
 do
   cat "$file" |
   sed 's|"gromacs/utility/real.h"|"real.h"|' |
diff --git a/src/lapack/import.sh b/src/lapack/import.sh
index 183e9eb1dbf45dc8812fcda829716916902add8b..a6d7e0f4a57a8d985898ef268a4ba06be44f9289 100755
--- a/src/lapack/import.sh
+++ b/src/lapack/import.sh
@@ -83,7 +83,7 @@ EOF
 
 {
 echo "#if ! defined(__PLUMED_HAS_EXTERNAL_LAPACK)"
-for file in "$GRO"/src/gromacs/linearalgebra/gmx_lapack/*.c
+for file in "$GRO"/src/gromacs/linearalgebra/gmx_lapack/*.cpp
 do
   cat "$file" |
   sed 's|"gromacs/utility/real.h"|"real.h"|' |
diff --git a/src/lapack/lapack.cpp b/src/lapack/lapack.cpp
index 29cb86375bfb2df45d88cf87f4fe5027f4fb34ec..00f061bf4e3bd3ced8fef83550119064f0ac4ec5 100644
--- a/src/lapack/lapack.cpp
+++ b/src/lapack/lapack.cpp
@@ -22,8 +22,8 @@ better idea to use the full reference implementation.
 Erik Lindahl, 2008-10-07.
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
 #if ! defined(__PLUMED_HAS_EXTERNAL_LAPACK)
-#include <ctype.h>
-#include <math.h>
+#include <cctype>
+#include <cmath>
 #include "blas/blas.h"
 #include "lapack.h"
 #include "lapack_limits.h"
@@ -119,7 +119,7 @@ PLUMED_BLAS_F77_FUNC(dbdsdc,DBDSDC)(const char *uplo,
 	  u[u_dim1 + 1] = (d__[1]>0) ? 1.0 : -1.0;
 	  vt[vt_dim1 + 1] = 1.;
 	}
-	d__[1] = fabs(d__[1]);
+	d__[1] = std::abs(d__[1]);
 	return;
     }
     nm1 = *n - 1;
@@ -177,7 +177,7 @@ PLUMED_BLAS_F77_FUNC(dbdsdc,DBDSDC)(const char *uplo,
     }
 
     orgnrm = PLUMED_BLAS_F77_FUNC(dlanst,DLANST)("M", n, &d__[1], &e[1]);
-    if ( fabs(orgnrm)<PLUMED_GMX_DOUBLE_MIN) {
+    if ( std::abs(orgnrm)<PLUMED_GMX_DOUBLE_MIN) {
 	return;
     }
     PLUMED_BLAS_F77_FUNC(dlascl,DLASCL)("G", &c_0, &c_0, &orgnrm, &one, n, &c_1, &d__[1], n, &ierr);
@@ -185,8 +185,8 @@ PLUMED_BLAS_F77_FUNC(dbdsdc,DBDSDC)(const char *uplo,
 
     eps = PLUMED_GMX_DOUBLE_EPS;
 
-    mlvl = (int) (log((double) (*n) / (double) (smlsiz + 1)) / 
-	    log(2.)) + 1;
+    mlvl = (int) (std::log((double) (*n) / (double) (smlsiz + 1)) / 
+		  std::log(2.)) + 1;
     smlszp = smlsiz + 1;
 
     if (icompq == 1) {
@@ -208,7 +208,7 @@ PLUMED_BLAS_F77_FUNC(dbdsdc,DBDSDC)(const char *uplo,
 
     i__1 = *n;
     for (i__ = 1; i__ <= i__1; ++i__) {
-	if (fabs(d__[i__]) < eps) 
+	if (std::abs(d__[i__]) < eps) 
 	    d__[i__] = (d__[i__]>0) ? eps : -eps;
     }
 
@@ -217,10 +217,10 @@ PLUMED_BLAS_F77_FUNC(dbdsdc,DBDSDC)(const char *uplo,
 
     i__1 = nm1;
     for (i__ = 1; i__ <= i__1; ++i__) {
-	if (fabs(e[i__]) < eps || i__ == nm1) {
+	if (std::abs(e[i__]) < eps || i__ == nm1) {
 	    if (i__ < nm1) {
 		nsize = i__ - start + 1;
-	    } else if (fabs(e[i__]) >= eps) {
+	    } else if (std::abs(e[i__]) >= eps) {
 		nsize = *n - start + 1;
 	    } else {
 		nsize = i__ - start + 1;
@@ -231,7 +231,7 @@ PLUMED_BLAS_F77_FUNC(dbdsdc,DBDSDC)(const char *uplo,
 		    q[*n + (qstart - 1) * *n] = (d__[*n]>0) ? 1.0 : -1.0; 
 		    q[*n + (smlsiz + qstart - 1) * *n] = 1.;
 		}
-		d__[*n] = fabs(d__[*n]);
+		d__[*n] = std::abs(d__[*n]);
 	    }
 	    if (icompq == 2) {
 		PLUMED_BLAS_F77_FUNC(dlasd0,DLASD0)(&nsize, &sqre, &d__[start], &e[start], 
@@ -301,8 +301,8 @@ L40:
 }
 }
 }
-#include <ctype.h>
-#include <math.h>
+#include <cctype>
+#include <cmath>
 
 #include "blas/blas.h"
 #include "lapack.h"
@@ -330,7 +330,7 @@ PLUMED_BLAS_F77_FUNC(dbdsqr,DBDSQR)(const char *uplo,
                         double *work,
                         int *info)
 {
-    const char xuplo = toupper(*uplo);
+    const char xuplo = std::toupper(*uplo);
     int c_dim1, c_offset, u_dim1, u_offset, vt_dim1, vt_offset, i__1, 
 	    i__2;
     double r__1, r__2, r__3, r__4;
@@ -363,9 +363,8 @@ PLUMED_BLAS_F77_FUNC(dbdsqr,DBDSQR)(const char *uplo,
     double sminoa;
     double thresh;
     int rotate;
-    double sminlo, tolmul;
+    double tolmul;
     int itmp1,itmp2;
-    double ftmp;
     
     --d__;
     --e;
@@ -449,43 +448,43 @@ PLUMED_BLAS_F77_FUNC(dbdsqr,DBDSQR)(const char *uplo,
 	}
     }
 
-    r__3 = 100.f, r__4 = pow(PLUMED_GMX_DOUBLE_EPS,c_b15);
+    r__3 = 100.f, r__4 = std::pow(PLUMED_GMX_DOUBLE_EPS,c_b15);
     r__1 = 10.f, r__2 = (r__3<r__4) ? r__3 : r__4;
     tolmul = (r__1>r__2) ? r__1 : r__2;
     tol = tolmul * eps;
     smax = 0.f;
     i__1 = *n;
     for (i__ = 1; i__ <= i__1; ++i__) {
-	r__2 = smax, r__3 = (r__1 = d__[i__], fabs(r__1));
+	r__2 = smax, r__3 = (r__1 = d__[i__], std::abs(r__1));
 	smax = (r__2>r__3) ? r__2 : r__3;
     }
     i__1 = *n - 1;
     for (i__ = 1; i__ <= i__1; ++i__) {
-	r__2 = smax, r__3 = (r__1 = e[i__], fabs(r__1));
+	r__2 = smax, r__3 = (r__1 = e[i__], std::abs(r__1));
 	smax = (r__2>r__3) ? r__2 : r__3;
     }
     sminl = 0.f;
     if (tol >= 0.f) {
-	sminoa = fabs(d__[1]);
+	sminoa = std::abs(d__[1]);
 	if (sminoa == 0.f) {
 	    goto L50;
 	}
 	mu = sminoa;
 	i__1 = *n;
 	for (i__ = 2; i__ <= i__1; ++i__) {
-	    mu = (r__2 = d__[i__], fabs(r__2)) * (mu / (mu + (r__1 = e[i__ - 
-		    1], fabs(r__1))));
+	    mu = (r__2 = d__[i__], std::abs(r__2)) * (mu / (mu + (r__1 = e[i__ - 
+		    1], std::abs(r__1))));
 	    sminoa = (sminoa<mu) ? sminoa : mu;
 	    if (sminoa == 0.f) {
 		goto L50;
 	    }
 	}
 L50:
-	sminoa /= sqrt((double) (*n));
+	sminoa /=  std::sqrt((double) (*n));
 	r__1 = tol * sminoa, r__2 = *n * 6 * *n * unfl;
 	thresh = (r__1>r__2) ? r__1 : r__2;
     } else {
-	r__1 = fabs(tol) * smax, r__2 = *n * 6 * *n * unfl;
+	r__1 = std::abs(tol) * smax, r__2 = *n * 6 * *n * unfl;
 	thresh = (r__1>r__2) ? r__1 : r__2;
     }
     maxit = *n * 6 * *n;
@@ -503,16 +502,16 @@ L60:
 	goto L200;
     }
 
-    if (tol < 0.f && (r__1 = d__[m], fabs(r__1)) <= thresh) {
+    if (tol < 0.f && (r__1 = d__[m], std::abs(r__1)) <= thresh) {
 	d__[m] = 0.f;
     }
-    smax = (r__1 = d__[m], fabs(r__1));
+    smax = (r__1 = d__[m], std::abs(r__1));
     smin = smax;
     i__1 = m - 1;
     for (lll = 1; lll <= i__1; ++lll) {
 	ll = m - lll;
-	abss = (r__1 = d__[ll], fabs(r__1));
-	abse = (r__1 = e[ll], fabs(r__1));
+	abss = (r__1 = d__[ll], std::abs(r__1));
+	abse = (r__1 = e[ll], std::abs(r__1));
 	if (tol < 0.f && abss <= thresh) {
 	    d__[ll] = 0.f;
 	}
@@ -555,7 +554,7 @@ L90:
 	goto L60;
     }
     if (ll > oldm || m < oldll) {
-	if ((r__1 = d__[ll], fabs(r__1)) >= (r__2 = d__[m], fabs(r__2))) {
+	if ((r__1 = d__[ll], std::abs(r__1)) >= (r__2 = d__[m], std::abs(r__2))) {
 	    idir = 1;
 	} else {
 	    idir = 2;
@@ -563,44 +562,42 @@ L90:
     }
     if (idir == 1) {
 
-        if( (fabs(e[m-1]) <= fabs(tol) * fabs(d__[m])) ||
-            (tol<0.0 && fabs(e[m-1])<=thresh)) {
+        if( (std::abs(e[m-1]) <= std::abs(tol) * std::abs(d__[m])) ||
+            (tol<0.0 && std::abs(e[m-1])<=thresh)) {
 	    e[m - 1] = 0.f;
 	    goto L60;
 	}
 	if (tol >= 0.f) {
-	    mu = (r__1 = d__[ll], fabs(r__1));
+	    mu = (r__1 = d__[ll], std::abs(r__1));
 	    sminl = mu;
 	    i__1 = m - 1;
 	    for (lll = ll; lll <= i__1; ++lll) {
-		if ((r__1 = e[lll], fabs(r__1)) <= tol * mu) {
+		if ((r__1 = e[lll], std::abs(r__1)) <= tol * mu) {
 		    e[lll] = 0.f;
 		    goto L60;
 		}
-		sminlo = sminl;
-		mu = (r__2 = d__[lll + 1], fabs(r__2)) * (mu / (mu + (r__1 = 
-			e[lll], fabs(r__1))));
+		mu = (r__2 = d__[lll + 1], std::abs(r__2)) * (mu / (mu + (r__1 = 
+			e[lll], std::abs(r__1))));
 		sminl = (sminl<mu) ? sminl : mu;
 	    }
 	}
     } else {
-        if( (fabs(e[ll]) <= fabs(tol)*fabs(d__[ll])) ||
-            (tol<0.0 && fabs(e[ll])<=thresh)) {
+        if( (std::abs(e[ll]) <= std::abs(tol)*std::abs(d__[ll])) ||
+            (tol<0.0 && std::abs(e[ll])<=thresh)) {
 	    e[ll] = 0.f;
 	    goto L60;
 	}
 	if (tol >= 0.f) {
-	    mu = (r__1 = d__[m], fabs(r__1));
+	    mu = (r__1 = d__[m], std::abs(r__1));
 	    sminl = mu;
 	    i__1 = ll;
 	    for (lll = m - 1; lll >= i__1; --lll) {
-		if ((r__1 = e[lll], fabs(r__1)) <= tol * mu) {
+		if ((r__1 = e[lll], std::abs(r__1)) <= tol * mu) {
 		    e[lll] = 0.f;
 		    goto L60;
 		}
-		sminlo = sminl;
-		mu = (r__2 = d__[lll], fabs(r__2)) * (mu / (mu + (r__1 = e[
-			lll], fabs(r__1))));
+		mu = (r__2 = d__[lll], std::abs(r__2)) * (mu / (mu + (r__1 = e[
+			lll], std::abs(r__1))));
 		sminl = (sminl<mu) ? sminl : mu;
 	    }
 	}
@@ -613,10 +610,10 @@ L90:
 	shift = 0.f;
     } else {
 	if (idir == 1) {
-	    sll = (r__1 = d__[ll], fabs(r__1));
+	    sll = (r__1 = d__[ll], std::abs(r__1));
 	    PLUMED_BLAS_F77_FUNC(dlas2,DLAS2)(&d__[m - 1], &e[m - 1], &d__[m], &shift, &r__);
 	} else {
-	    sll = (r__1 = d__[m], fabs(r__1));
+	    sll = (r__1 = d__[m], std::abs(r__1));
 	    PLUMED_BLAS_F77_FUNC(dlas2,DLAS2)(&d__[ll], &e[ll], &d__[ll + 1], &shift, &r__);
 	}
 	if (sll > 0.f) {
@@ -664,7 +661,7 @@ L90:
 		PLUMED_BLAS_F77_FUNC(dlasr,DLASR)("L", "V", "F", &i__1, ncc, &work[nm12 + 1], &work[nm13 
 			+ 1], &c__[ll + c_dim1], ldc);
 	    }
-	    if ((r__1 = e[m - 1], fabs(r__1)) <= thresh) {
+	    if ((r__1 = e[m - 1], std::abs(r__1)) <= thresh) {
 		e[m - 1] = 0.f;
 	    }
 	} else {
@@ -703,14 +700,14 @@ L90:
 		PLUMED_BLAS_F77_FUNC(dlasr,DLASR)("L", "V", "B", &i__1, ncc, &work[1], &work[*n], &c__[
 			ll + c_dim1], ldc);
 	    }
-	    if ((r__1 = e[ll], fabs(r__1)) <= thresh) {
+	    if ((r__1 = e[ll], std::abs(r__1)) <= thresh) {
 		e[ll] = 0.f;
 	    }
 	}
     } else {
 
 	if (idir == 1) {
-	    f = ((r__1 = d__[ll], fabs(r__1)) - shift) * ( ((d__[ll] > 0) ? c_b49 : -c_b49) + shift / d__[ll]);
+	    f = ((r__1 = d__[ll], std::abs(r__1)) - shift) * ( ((d__[ll] > 0) ? c_b49 : -c_b49) + shift / d__[ll]);
 	    g = e[ll];
 	    i__1 = m - 1;
 	    for (i__ = ll; i__ <= i__1; ++i__) {
@@ -752,12 +749,12 @@ L90:
 		PLUMED_BLAS_F77_FUNC(dlasr,DLASR)("L", "V", "F", &i__1, ncc, &work[nm12 + 1], &work[nm13 
 			+ 1], &c__[ll + c_dim1], ldc);
 	    }
-	    if ((r__1 = e[m - 1], fabs(r__1)) <= thresh) {
+	    if ((r__1 = e[m - 1], std::abs(r__1)) <= thresh) {
 		e[m - 1] = 0.f;
 	    }
 	} else {
 
-	    f = ((r__1 = d__[m], fabs(r__1)) - shift) * ( ((d__[m] > 0) ? c_b49 : -c_b49) + shift / d__[m]);
+	    f = ((r__1 = d__[m], std::abs(r__1)) - shift) * ( ((d__[m] > 0) ? c_b49 : -c_b49) + shift / d__[m]);
 	    g = e[m - 1];
 	    i__1 = ll + 1;
 	    for (i__ = m; i__ >= i__1; --i__) {
@@ -784,7 +781,7 @@ L90:
 	    }
 	    e[ll] = f;
 
-	    if ((r__1 = e[ll], fabs(r__1)) <= thresh) {
+	    if ((r__1 = e[ll], std::abs(r__1)) <= thresh) {
 		e[ll] = 0.f;
 	    }
 	    if (*ncvt > 0) {
@@ -922,7 +919,6 @@ PLUMED_BLAS_F77_FUNC(dgebd2,DGEBD2)(int *m,
     for(i=0;i<*m;i++) {
       i1 = *n - i;
       i2 = ( (i+1) < (*n-1)) ? (i+1) : (*n-1);
-      i3 = 1;
       PLUMED_BLAS_F77_FUNC(dlarfg,DLARFG)(&i1,&(a[i*(*lda)+i]),&(a[i2*(*lda)+i]),lda,&(taup[i]));
       d[i] = a[i*(*lda)+i];
       a[i*(*lda)+i] = 1.0;
@@ -1145,7 +1141,7 @@ PLUMED_BLAS_F77_FUNC(dgelq2,DGELQ2)(int *m,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 #include "lapack_limits.h"
 
@@ -1392,7 +1388,7 @@ PLUMED_BLAS_F77_FUNC(dgeqrf,DGEQRF)(int *m,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "blas/blas.h"
@@ -1428,14 +1424,13 @@ PLUMED_BLAS_F77_FUNC(dgesdd,DGESDD)(const char *jobz,
     double anrm;
     int idum[1], ierr, itau;
     int minmn, wrkbl, itaup, itauq, mnthr;
-    int wntqa;
     int nwork;
-    int wntqn, wntqo, wntqs;
+    int wntqn;
     int bdspac;
     double bignum;
-    int minwrk, ldwrku, maxwrk, ldwkvt;
+    int ldwrku, maxwrk, ldwkvt;
     double smlnum,minval, safemin;
-    int wntqas, lquery;
+    int lquery;
     int c__0 = 0;
     int c__1 = 1;
     double zero = 0.0;
@@ -1458,13 +1453,8 @@ PLUMED_BLAS_F77_FUNC(dgesdd,DGESDD)(const char *jobz,
     *info = 0;
     minmn = (*m < *n) ? *m : *n;
     mnthr = (int) (minmn * 11. / 6.);
-    wntqa  = (*jobz=='a' || *jobz=='A');
-    wntqs  = (*jobz=='s' || *jobz=='S');
-    wntqas = wntqa || wntqs;
     wntqn = (*jobz=='o' || *jobz=='O');
-    wntqo = (*jobz=='n' || *jobz=='N');
 
-    minwrk = 1;
     maxwrk = 1;
     lquery = *lwork == -1;
 
@@ -1482,7 +1472,6 @@ PLUMED_BLAS_F77_FUNC(dgesdd,DGESDD)(const char *jobz,
 		    wrkbl = *n * 67;
 		    i__1 = wrkbl, i__2 = bdspac + *n;
 		    maxwrk = (i__1 > i__2) ? i__1 : i__2;
-		    minwrk = bdspac + *n;
 		} else {
 
 		    wrkbl = *n * 67;
@@ -1491,7 +1480,6 @@ PLUMED_BLAS_F77_FUNC(dgesdd,DGESDD)(const char *jobz,
 		    i__1 = wrkbl, i__2 = bdspac + *n * 3;
 		    wrkbl = (i__1 > i__2) ? i__1 : i__2;
 		    maxwrk = wrkbl + *n * *n;
-		    minwrk = bdspac + *n * *n + *n * 3;
 		}
 	    } else {
 
@@ -1499,11 +1487,9 @@ PLUMED_BLAS_F77_FUNC(dgesdd,DGESDD)(const char *jobz,
 		if (wntqn) {
 		    i__1 = wrkbl, i__2 = bdspac + *n * 3;
 		    maxwrk = (i__1 > i__2) ? i__1 : i__2;
-		    minwrk = *n * 3 + ((*m > bdspac) ? *m : bdspac);
 		} else {
 		    i__1 = maxwrk, i__2 = bdspac + *n * 3;
 		    maxwrk = (i__1 > i__2) ? i__1 : i__2;
-		    minwrk = *n * 3 + ((*m > bdspac) ? *m : bdspac);
 		}
 	    }
 	} else {
@@ -1519,7 +1505,6 @@ PLUMED_BLAS_F77_FUNC(dgesdd,DGESDD)(const char *jobz,
 		    wrkbl = *m * 67;
 		    i__1 = wrkbl, i__2 = bdspac + *m;
 		    maxwrk = (i__1 > i__2) ? i__1 : i__2;
-		    minwrk = bdspac + *m;
 		} else {
 
 		    wrkbl = *m * 67;
@@ -1529,18 +1514,15 @@ PLUMED_BLAS_F77_FUNC(dgesdd,DGESDD)(const char *jobz,
 		    i__1 = wrkbl, i__2 = bdspac + *m * 3;
 		    wrkbl = (i__1 > i__2) ? i__1 : i__2;
 		    maxwrk = wrkbl + *m * *m;
-		    minwrk = bdspac + *m * *m + *m * 3;
 		}
 	    } else {
 		wrkbl = *m * 3 + (*m + *n*32);
 		if (wntqn) {
 		    i__1 = wrkbl, i__2 = bdspac + *m * 3;
 		    maxwrk = (i__1 > i__2) ? i__1 : i__2;
-		    minwrk = *m * 3 + ((*m > bdspac) ? *m : bdspac);
 		} else {
 		    i__1 = wrkbl, i__2 = bdspac + *m * 3;
 		    maxwrk = (i__1 > i__2) ? i__1 : i__2;
-		    minwrk = *m * 3 + ((*m > bdspac) ? *m : bdspac);
 		}
 	    }
 	}
@@ -1563,7 +1545,7 @@ PLUMED_BLAS_F77_FUNC(dgesdd,DGESDD)(const char *jobz,
     eps = PLUMED_GMX_DOUBLE_EPS;
     minval = PLUMED_GMX_DOUBLE_MIN;
     safemin = minval / eps;
-    smlnum = sqrt(safemin) / eps;
+    smlnum =  std::sqrt(safemin) / eps;
 
 
     bignum = 1. / smlnum;
@@ -1829,7 +1811,7 @@ PLUMED_BLAS_F77_FUNC(dgesdd,DGESDD)(const char *jobz,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "blas/blas.h"
@@ -1849,10 +1831,9 @@ PLUMED_BLAS_F77_FUNC(dgetf2,DGETF2)(int *m,
 	int *info)
 {
   int j,jp,k,t1,t2,t3;
-  double one,minusone;
+  double minusone;
   double tmp;
 
-  one = 1.0;
   minusone = -1.0;
 
   if(*m<=0 || *n<=0)
@@ -1864,7 +1845,7 @@ PLUMED_BLAS_F77_FUNC(dgetf2,DGETF2)(int *m,
     t2 = 1;
     jp = j - 1 + PLUMED_BLAS_F77_FUNC(idamax,IDAMAX)(&t1,&(a[(j-1)*(*lda)+(j-1)]),&t2);
     ipiv[j-1] = jp;
-    if( fabs(a[(j-1)*(*lda)+(jp-1)])>PLUMED_GMX_DOUBLE_MIN ) {
+    if( std::abs(a[(j-1)*(*lda)+(jp-1)])>PLUMED_GMX_DOUBLE_MIN ) {
       if(jp != j)
 	PLUMED_BLAS_F77_FUNC(dswap,DSWAP)(n,&(a[ j-1 ]),lda,&(a[ jp-1 ]),lda);
       
@@ -2167,7 +2148,7 @@ PLUMED_BLAS_F77_FUNC(dgetrs,DGETRS)(const char *trans,
 } 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "blas/blas.h"
 #include "lapack.h"
 
@@ -2419,7 +2400,7 @@ PLUMED_BLAS_F77_FUNC(dlabrd,DLABRD)(int *m,
 
 }
 }
-#include<ctype.h>
+#include <cctype>
 #include "lapack.h"
 
 /* LAPACK */
@@ -2437,7 +2418,7 @@ PLUMED_BLAS_F77_FUNC(dlacpy,DLACPY)(const char *uplo,
 	int *ldb)
 {
   int i,j,minjm;
-  const char ch=toupper(*uplo);
+  const char ch=std::toupper(*uplo);
 
   if(ch=='U') {
     for(j=0;j<*n;j++) {
@@ -2459,7 +2440,7 @@ PLUMED_BLAS_F77_FUNC(dlacpy,DLACPY)(const char *uplo,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 
 
@@ -2480,10 +2461,10 @@ PLUMED_BLAS_F77_FUNC(dlae2,DLAE2)(double *a,
 
     sm = *a + *c__;
     df = *a - *c__;
-    adf = fabs(df);
+    adf = std::abs(df);
     tb = *b + *b;
-    ab = fabs(tb);
-    if (fabs(*a) > fabs(*c__)) {
+    ab = std::abs(tb);
+    if (std::abs(*a) > std::abs(*c__)) {
 	acmx = *a;
 	acmn = *c__;
     } else {
@@ -2492,13 +2473,13 @@ PLUMED_BLAS_F77_FUNC(dlae2,DLAE2)(double *a,
     }
     if (adf > ab) {
 	d__1 = ab / adf;
-	rt = adf * sqrt(d__1 * d__1 + 1.);
+	rt = adf *  std::sqrt(d__1 * d__1 + 1.);
     } else if (adf < ab) {
 	d__1 = adf / ab;
-	rt = ab * sqrt(d__1 * d__1 + 1.);
+	rt = ab *  std::sqrt(d__1 * d__1 + 1.);
     } else {
 
-	rt = ab * sqrt(2.);
+	rt = ab *  std::sqrt(2.);
     }
     if (sm < 0.) {
 	*rt1 = (sm - rt) * .5;
@@ -2517,7 +2498,7 @@ PLUMED_BLAS_F77_FUNC(dlae2,DLAE2)(double *a,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 
 #include "blas/blas.h"
@@ -2582,7 +2563,7 @@ PLUMED_BLAS_F77_FUNC(dlaebz,DLAEBZ)(int *ijob,
 	for (ji = 1; ji <= i__1; ++ji) {
 	    for (jp = 1; jp <= 2; ++jp) {
 		tmp1 = d__[1] - ab[ji + jp * ab_dim1];
-		if (fabs(tmp1) < *pivmin) {
+		if (std::abs(tmp1) < *pivmin) {
 		    tmp1 = -(*pivmin);
 		}
 		nab[ji + jp * nab_dim1] = 0;
@@ -2593,7 +2574,7 @@ PLUMED_BLAS_F77_FUNC(dlaebz,DLAEBZ)(int *ijob,
 		i__2 = *n;
 		for (j = 2; j <= i__2; ++j) {
 		    tmp1 = d__[j] - e2[j - 1] / tmp1 - ab[ji + jp * ab_dim1];
-		    if (fabs(tmp1) < *pivmin) {
+		    if (std::abs(tmp1) < *pivmin) {
 			tmp1 = -(*pivmin);
 		    }
 		    if (tmp1 <= 0.) {
@@ -2770,9 +2751,9 @@ PLUMED_BLAS_F77_FUNC(dlaebz,DLAEBZ)(int *ijob,
 	kfnew = kf;
 	i__2 = kl;
 	for (ji = kf; ji <= i__2; ++ji) {
-	    tmp1 = fabs(ab[ji + (ab_dim1 << 1)] - ab[ji + ab_dim1]);
-	    d__3 = fabs(ab[ji + (ab_dim1 << 1)]);
-	    d__4 = fabs(ab[ji + ab_dim1]);
+	    tmp1 = std::abs(ab[ji + (ab_dim1 << 1)] - ab[ji + ab_dim1]);
+	    d__3 = std::abs(ab[ji + (ab_dim1 << 1)]);
+	    d__4 = std::abs(ab[ji + ab_dim1]);
 	    tmp2 = (d__3>d__4) ? d__3 : d__4;
 	    d__1 = (*abstol>*pivmin) ? *abstol : *pivmin;
 	    d__2 = *reltol * tmp2;
@@ -2826,7 +2807,7 @@ PLUMED_BLAS_F77_FUNC(dlaebz,DLAEBZ)(int *ijob,
 
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "lapack.h"
 
@@ -2880,7 +2861,7 @@ PLUMED_BLAS_F77_FUNC(dlaed6,DLAED6)(int *kniter,
 	    a = c__ * (d__[1] + d__[2]) + z__[1] + z__[2];
 	    b = c__ * d__[1] * d__[2] + z__[1] * d__[2] + z__[2] * d__[1];
 	}
-        r__1 = fabs(a), r__2 = fabs(b), r__1 = ((r__1>r__2)? r__1:r__2), r__2 = fabs(c__);
+        r__1 = std::abs(a), r__2 = std::abs(b), r__1 = ((r__1>r__2)? r__1:r__2), r__2 = std::abs(c__);
         temp = (r__1>r__2) ? r__1 : r__2;
 	a /= temp;
 	b /= temp;
@@ -2888,15 +2869,15 @@ PLUMED_BLAS_F77_FUNC(dlaed6,DLAED6)(int *kniter,
 	if (c__ == 0.f) {
 	    *tau = b / a;
 	} else if (a <= 0.f) {
-	    *tau = (a - sqrt((r__1 = a * a - b * 4.f * c__, fabs(r__1)))) / (
+	    *tau = (a -  std::sqrt((r__1 = a * a - b * 4.f * c__, std::abs(r__1)))) / (
 		    c__ * 2.f);
 	} else {
-	    *tau = b * 2.f / (a + sqrt((r__1 = a * a - b * 4.f * c__, fabs(r__1))));
+	    *tau = b * 2.f / (a +  std::sqrt((r__1 = a * a - b * 4.f * c__, std::abs(r__1))));
 	}
 
 	temp = *rho + z__[1] / (d__[1] - *tau) + z__[2] / (d__[2] - *tau) + 
 		z__[3] / (d__[3] - *tau);
-	if (fabs(*finit) <= fabs(temp)) {
+	if (std::abs(*finit) <= std::abs(temp)) {
 	    *tau = 0.f;
 	}
     }
@@ -2904,19 +2885,19 @@ PLUMED_BLAS_F77_FUNC(dlaed6,DLAED6)(int *kniter,
     eps = PLUMED_GMX_DOUBLE_EPS;
     base = 2;
     safemin = PLUMED_GMX_DOUBLE_MIN*(1.0+PLUMED_GMX_DOUBLE_EPS);
-    i__1 = (int) (log(safemin) / log(base) / 3.f);
-    small1 = pow(base, i__1);
+    i__1 = static_cast<int>(std::log(safemin) / std::log(base) / 3.f);
+    small1 = std::pow(base, static_cast<double>(i__1));
     sminv1 = 1.f / small1;
     small2 = small1 * small1;
     sminv2 = sminv1 * sminv1;
 
     if (*orgati) {
-	r__3 = (r__1 = d__[2] - *tau, fabs(r__1)), r__4 = (r__2 = d__[3] - *
-		tau, fabs(r__2));
+	r__3 = (r__1 = d__[2] - *tau, std::abs(r__1)), r__4 = (r__2 = d__[3] - *
+		tau, std::abs(r__2));
         temp = (r__3<r__4) ? r__3 : r__4;
     } else {
-	r__3 = (r__1 = d__[1] - *tau, fabs(r__1)), r__4 = (r__2 = d__[2] - *
-		tau, fabs(r__2));
+	r__3 = (r__1 = d__[1] - *tau, std::abs(r__1)), r__4 = (r__2 = d__[2] - *
+		tau, std::abs(r__2));
 	temp = (r__3<r__4) ? r__3 : r__4;
     }
     scale = 0;
@@ -2959,7 +2940,7 @@ PLUMED_BLAS_F77_FUNC(dlaed6,DLAED6)(int *kniter,
     }
     f = *finit + *tau * fc;
 
-    if (fabs(f) <= 0.f) {
+    if (std::abs(f) <= 0.f) {
 	goto L60;
     }
     iter = niter + 1;
@@ -2974,7 +2955,7 @@ PLUMED_BLAS_F77_FUNC(dlaed6,DLAED6)(int *kniter,
 	a = (temp1 + temp2) * f - temp1 * temp2 * df;
 	b = temp1 * temp2 * f;
 	c__ = f - (temp1 + temp2) * df + temp1 * temp2 * ddf;
-	r__1 = fabs(a), r__2 = fabs(b), r__1 = ((r__1>r__2)? r__1:r__2), r__2 = fabs(c__);
+	r__1 = std::abs(a), r__2 = std::abs(b), r__1 = ((r__1>r__2)? r__1:r__2), r__2 = std::abs(c__);
 	temp = (r__1>r__2) ? r__1 : r__2;
 	a /= temp;
 	b /= temp;
@@ -2982,9 +2963,9 @@ PLUMED_BLAS_F77_FUNC(dlaed6,DLAED6)(int *kniter,
 	if (c__ == 0.f) {
 	    eta = b / a;
 	} else if (a <= 0.f) {
-	    eta = (a - sqrt((r__1 = a * a - b * 4.f * c__, fabs(r__1)))) / ( c__ * 2.f);
+	    eta = (a -  std::sqrt((r__1 = a * a - b * 4.f * c__, std::abs(r__1)))) / ( c__ * 2.f);
 	} else {
-	    eta = b * 2.f / (a + sqrt((r__1 = a * a - b * 4.f * c__, fabs( r__1))));
+	    eta = b * 2.f / (a +  std::sqrt((r__1 = a * a - b * 4.f * c__, std::abs( r__1))));
 	}
 	if (f * eta >= 0.f) {
 	    eta = -f / df;
@@ -3018,13 +2999,13 @@ PLUMED_BLAS_F77_FUNC(dlaed6,DLAED6)(int *kniter,
 	    temp3 = temp2 * temp;
 	    temp4 = temp1 / dscale[i__ - 1];
 	    fc += temp4;
-	    erretm += fabs(temp4);
+	    erretm += std::abs(temp4);
 	    df += temp2;
 	    ddf += temp3;
 	}
 	f = *finit + *tau * fc;
-	erretm = (fabs(*finit) + fabs(*tau) * erretm) * 8.f + fabs(*tau) * df;
-	if (fabs(f) <= eps * erretm) {
+	erretm = (std::abs(*finit) + std::abs(*tau) * erretm) * 8.f + std::abs(*tau) * df;
+	if (std::abs(f) <= eps * erretm) {
 	    goto L60;
 	}
     }
@@ -3039,7 +3020,7 @@ L60:
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "lapack.h"
@@ -3066,10 +3047,10 @@ PLUMED_BLAS_F77_FUNC(dlaev2,DLAEV2)(double *   a,
 
     sm = *a + *c__;
     df = *a - *c__;
-    adf = fabs(df);
+    adf = std::abs(df);
     tb = *b + *b;
-    ab = fabs(tb);
-    if (fabs(*a) > fabs(*c__)) {
+    ab = std::abs(tb);
+    if (std::abs(*a) > std::abs(*c__)) {
 	acmx = *a;
 	acmn = *c__;
     } else {
@@ -3078,13 +3059,13 @@ PLUMED_BLAS_F77_FUNC(dlaev2,DLAEV2)(double *   a,
     }
     if (adf > ab) {
 	d__1 = ab / adf;
-	rt = adf * sqrt(d__1 * d__1 + 1.);
+	rt = adf *  std::sqrt(d__1 * d__1 + 1.);
     } else if (adf < ab) {
 	d__1 = adf / ab;
-	rt = ab * sqrt(d__1 * d__1 + 1.);
+	rt = ab *  std::sqrt(d__1 * d__1 + 1.);
     } else {
 
-	rt = ab * sqrt(2.);
+	rt = ab *  std::sqrt(2.);
     }
     if (sm < 0.) {
 	*rt1 = (sm - rt) * .5;
@@ -3107,18 +3088,18 @@ PLUMED_BLAS_F77_FUNC(dlaev2,DLAEV2)(double *   a,
 	cs = df - rt;
 	sgn2 = -1;
     }
-    acs = fabs(cs);
+    acs = std::abs(cs);
     if (acs > ab) {
 	ct = -tb / cs;
-	*sn1 = 1. / sqrt(ct * ct + 1.);
+	*sn1 = 1. /  std::sqrt(ct * ct + 1.);
 	*cs1 = ct * *sn1;
     } else {
-	if (fabs(ab)<PLUMED_GMX_DOUBLE_MIN) {
+	if (std::abs(ab)<PLUMED_GMX_DOUBLE_MIN) {
 	    *cs1 = 1.;
 	    *sn1 = 0.;
 	} else {
 	    tn = -cs / tb;
-	    *cs1 = 1. / sqrt(tn * tn + 1.);
+	    *cs1 = 1. /  std::sqrt(tn * tn + 1.);
 	    *sn1 = tn * *cs1;
 	}
     }
@@ -3134,7 +3115,7 @@ PLUMED_BLAS_F77_FUNC(dlaev2,DLAEV2)(double *   a,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "lapack.h"
@@ -3171,7 +3152,6 @@ PLUMED_BLAS_F77_FUNC(dlagtf,DLAGTF)(int *n,
     *info = 0;
     if (*n < 0) {
 	*info = -1;
-	i__1 = -(*info);
 	return;
     }
 
@@ -3181,7 +3161,7 @@ PLUMED_BLAS_F77_FUNC(dlagtf,DLAGTF)(int *n,
     a[1] -= *lambda;
     in[*n] = 0;
     if (*n == 1) {
-	if (fabs(a[1])<PLUMED_GMX_DOUBLE_MIN) {
+	if (std::abs(a[1])<PLUMED_GMX_DOUBLE_MIN) {
 	    in[1] = 1;
 	}
 	return;
@@ -3190,20 +3170,20 @@ PLUMED_BLAS_F77_FUNC(dlagtf,DLAGTF)(int *n,
     eps = PLUMED_GMX_DOUBLE_EPS;
 
     tl = (*tol>eps) ? *tol : eps;
-    scale1 = fabs(a[1]) + fabs(b[1]);
+    scale1 = std::abs(a[1]) + std::abs(b[1]);
     i__1 = *n - 1;
     for (k = 1; k <= i__1; ++k) {
 	a[k + 1] -= *lambda;
-	scale2 = fabs(c__[k]) + fabs(a[k + 1]);
+	scale2 = std::abs(c__[k]) + std::abs(a[k + 1]);
 	if (k < *n - 1) {
-	    scale2 += fabs(b[k + 1]);
+	    scale2 += std::abs(b[k + 1]);
 	}
-	if (fabs(a[k])<PLUMED_GMX_DOUBLE_MIN) {
+	if (std::abs(a[k])<PLUMED_GMX_DOUBLE_MIN) {
 	    piv1 = 0.;
 	} else {
-	    piv1 = fabs(a[k]) / scale1;
+	    piv1 = std::abs(a[k]) / scale1;
 	}
-	if (fabs(c__[k])<PLUMED_GMX_DOUBLE_MIN) {
+	if (std::abs(c__[k])<PLUMED_GMX_DOUBLE_MIN) {
 	    in[k] = 0;
 	    piv2 = 0.;
 	    scale1 = scale2;
@@ -3211,7 +3191,7 @@ PLUMED_BLAS_F77_FUNC(dlagtf,DLAGTF)(int *n,
 		d__[k] = 0.;
 	    }
 	} else {
-	    piv2 = fabs(c__[k]) / scale2;
+	    piv2 = std::abs(c__[k]) / scale2;
 	    if (piv2 <= piv1) {
 		in[k] = 0;
 		scale1 = scale2;
@@ -3238,7 +3218,7 @@ PLUMED_BLAS_F77_FUNC(dlagtf,DLAGTF)(int *n,
 	    in[*n] = k;
 	}
     }
-    if (fabs(a[*n]) <= scale1 * tl && in[*n] == 0) {
+    if (std::abs(a[*n]) <= scale1 * tl && in[*n] == 0) {
 	in[*n] = *n;
     }
 
@@ -3250,7 +3230,7 @@ PLUMED_BLAS_F77_FUNC(dlagtf,DLAGTF)(int *n,
 }
 }
 #include <stdlib.h>
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "lapack.h"
@@ -3293,7 +3273,6 @@ PLUMED_BLAS_F77_FUNC(dlagts,DLAGTS)(int *job,
 	*info = -2;
     }
     if (*info != 0) {
-	i__1 = -(*info);
 	return;
     }
 
@@ -3308,26 +3287,26 @@ PLUMED_BLAS_F77_FUNC(dlagts,DLAGTS)(int *job,
 
     if (*job < 0) {
 	if (*tol <= 0.) {
-	    *tol = fabs(a[1]);
+	    *tol = std::abs(a[1]);
 	    if (*n > 1) {
 		d__1 = *tol;
-		d__2 = fabs(a[2]);
+		d__2 = std::abs(a[2]);
 		d__1 = (d__1>d__2) ? d__1 : d__2;
-		d__2 = fabs(b[1]);
+		d__2 = std::abs(b[1]);
 		*tol = (d__1>d__2) ? d__1 : d__2;
 	    }
 	    i__1 = *n;
 	    for (k = 3; k <= i__1; ++k) {
 	      d__4 = *tol;
-	      d__5 = fabs(a[k]);
+	      d__5 = std::abs(a[k]);
 	      d__4 = (d__4>d__5) ? d__4 : d__5;
-	      d__5 = fabs(b[k - 1]);
+	      d__5 = std::abs(b[k - 1]);
 	      d__4 = (d__4>d__5) ? d__4 : d__5;
-	      d__5 = fabs(d__[k - 2]);
+	      d__5 = std::abs(d__[k - 2]);
 	      *tol = (d__4>d__5) ? d__4 : d__5;
 	    }
 	    *tol *= eps;
-	    if (fabs(*tol)<PLUMED_GMX_DOUBLE_MIN) {
+	    if (std::abs(*tol)<PLUMED_GMX_DOUBLE_MIN) {
 		*tol = eps;
 	    }
 	}
@@ -3354,17 +3333,17 @@ PLUMED_BLAS_F77_FUNC(dlagts,DLAGTS)(int *job,
 		    temp = y[k];
 		}
 		ak = a[k];
-		absak = fabs(ak);
+		absak = std::abs(ak);
 		if (absak < 1.) {
 		    if (absak < sfmin) {
-			if (fabs(absak)<PLUMED_GMX_DOUBLE_MIN || fabs(temp) * sfmin > absak) {
+			if (std::abs(absak)<PLUMED_GMX_DOUBLE_MIN || std::abs(temp) * sfmin > absak) {
 			    *info = k;
 			    return;
 			} else {
 			    temp *= bignum;
 			    ak *= bignum;
 			}
-		    } else if (fabs(temp) > absak * bignum) {
+		    } else if (std::abs(temp) > absak * bignum) {
 			*info = k;
 			return;
 		    }
@@ -3386,10 +3365,10 @@ PLUMED_BLAS_F77_FUNC(dlagts,DLAGTS)(int *job,
 		if(ak<0)
 		  pert *= -1.0;
 L40:
-		absak = fabs(ak);
+		absak = std::abs(ak);
 		if (absak < 1.) {
 		    if (absak < sfmin) {
-			if (fabs(absak)<PLUMED_GMX_DOUBLE_MIN || fabs(temp) * sfmin > absak) {
+			if (std::abs(absak)<PLUMED_GMX_DOUBLE_MIN || std::abs(temp) * sfmin > absak) {
 			    ak += pert;
 			    pert *= 2;
 			    goto L40;
@@ -3397,7 +3376,7 @@ L40:
 			    temp *= bignum;
 			    ak *= bignum;
 			}
-		    } else if (fabs(temp) > absak * bignum) {
+		    } else if (std::abs(temp) > absak * bignum) {
 			ak += pert;
 			pert *= 2;
 			goto L40;
@@ -3419,17 +3398,17 @@ L40:
 		    temp = y[k];
 		}
 		ak = a[k];
-		absak = fabs(ak);
+		absak = std::abs(ak);
 		if (absak < 1.) {
 		    if (absak < sfmin) {
-			if (fabs(absak)<PLUMED_GMX_DOUBLE_MIN || fabs(temp) * sfmin > absak) {
+			if (std::abs(absak)<PLUMED_GMX_DOUBLE_MIN || std::abs(temp) * sfmin > absak) {
 			    *info = k;
 			    return;
 			} else {
 			    temp *= bignum;
 			    ak *= bignum;
 			}
-		    } else if (fabs(temp) > absak * bignum) {
+		    } else if (std::abs(temp) > absak * bignum) {
 			*info = k;
 			return;
 		    }
@@ -3453,10 +3432,10 @@ L40:
 		  pert *= -1.0;
 
 L70:
-		absak = fabs(ak);
+		absak = std::abs(ak);
 		if (absak < 1.) {
 		    if (absak < sfmin) {
-			if (fabs(absak)<PLUMED_GMX_DOUBLE_MIN || fabs(temp) * sfmin > absak) {
+			if (std::abs(absak)<PLUMED_GMX_DOUBLE_MIN || std::abs(temp) * sfmin > absak) {
 			    ak += pert;
 			    pert *= 2;
 			    goto L70;
@@ -3464,7 +3443,7 @@ L70:
 			    temp *= bignum;
 			    ak *= bignum;
 			}
-		    } else if (fabs(temp) > absak * bignum) {
+		    } else if (std::abs(temp) > absak * bignum) {
 			ak += pert;
 			pert *= 2;
 			goto L70;
@@ -3556,8 +3535,8 @@ PLUMED_BLAS_F77_FUNC(dlamrg,DLAMRG)(int *n1,
 }
 }
 }
-#include<math.h>
-#include<ctype.h>
+#include <cctype>
+#include <cmath>
 #include "lapack.h"
 
 
@@ -3573,7 +3552,7 @@ PLUMED_BLAS_F77_FUNC(dlange,DLANGE)(const char *norm,
 	int *lda,
 	double *work)
 {
-  const char ch=toupper(*norm);
+  const char ch=std::toupper(*norm);
   double dtemp,sum,max,val,scale;
   int i,j;
 
@@ -3582,7 +3561,7 @@ PLUMED_BLAS_F77_FUNC(dlange,DLANGE)(const char *norm,
     max = 0.0;
     for(j=0;j<*n;j++)
       for(i=0;i<*m;i++) {
-	dtemp = fabs(a[j*(*lda)+i]);
+	dtemp = std::abs(a[j*(*lda)+i]);
 	if(dtemp>max)
 	  max = dtemp;
       }
@@ -3595,7 +3574,7 @@ PLUMED_BLAS_F77_FUNC(dlange,DLANGE)(const char *norm,
     for(j=0;j<*n;j++) {
       sum = 0.0;
       for(i=0;i<*m;i++) 
-	sum += fabs(a[j*(*lda)+i]);
+	sum += std::abs(a[j*(*lda)+i]);
       if(sum>max)
 	max = sum;
     }
@@ -3607,7 +3586,7 @@ PLUMED_BLAS_F77_FUNC(dlange,DLANGE)(const char *norm,
       work[i] = 0.0;
     for(j=0;j<*n;j++)
       for(i=0;i<*m;i++)
-	work[i] += fabs(a[j*(*lda)+i]);
+	work[i] += std::abs(a[j*(*lda)+i]);
     max = 0;
     for(i=0;i<*m;i++)
       if(work[i]>max)
@@ -3622,7 +3601,7 @@ PLUMED_BLAS_F77_FUNC(dlange,DLANGE)(const char *norm,
     i = 1;
     for(j=0;j<*n;j++) 
       PLUMED_BLAS_F77_FUNC(dlassq,DLASSQ)(m,&(a[j*(*lda)+0]),&i,&scale,&sum);
-    val = scale*sqrt(sum);
+    val = scale* std::sqrt(sum);
     break;
 
   default:
@@ -3633,8 +3612,8 @@ PLUMED_BLAS_F77_FUNC(dlange,DLANGE)(const char *norm,
 }
 }
 }
-#include <math.h>
-#include <ctype.h>
+#include <cctype>
+#include <cmath>
 #include "lapack.h"
 
 
@@ -3648,7 +3627,7 @@ PLUMED_BLAS_F77_FUNC(dlanst,DLANST)(const char *norm,
 	double *d,
 	double *e)
 {
-  const char ch=toupper(*norm);
+  const char ch=std::toupper(*norm);
   double dtemp,max,val,scale,sum;
   int i,j;
 
@@ -3658,12 +3637,12 @@ PLUMED_BLAS_F77_FUNC(dlanst,DLANST)(const char *norm,
   
   switch(ch) {
   case 'M':
-    max = fabs(d[*n-1]);
+    max = std::abs(d[*n-1]);
       for(i=0;i<(*n-1);i++) {
-	dtemp = fabs(d[i]);
+	dtemp = std::abs(d[i]);
 	if(dtemp>max)
 	  max = dtemp;
-	dtemp = fabs(e[i]);
+	dtemp = std::abs(e[i]);
 	if(dtemp>max)
 	  max = dtemp;
       }
@@ -3675,14 +3654,14 @@ PLUMED_BLAS_F77_FUNC(dlanst,DLANST)(const char *norm,
   case 'I':
 
     if(*n==1)
-      val = fabs(d[0]);
+      val = std::abs(d[0]);
     else {
-      max = fabs(d[0]) + fabs(e[0]);
-      dtemp = fabs(e[*n-2]) + fabs(d[*n-1]);
+      max = std::abs(d[0]) + std::abs(e[0]);
+      dtemp = std::abs(e[*n-2]) + std::abs(d[*n-1]);
       if(dtemp>max)
 	max = dtemp;
       for(i=1;i<(*n-1);i++) {
-	dtemp = fabs(d[i]) + fabs(e[i]) + fabs(e[i-1]);
+	dtemp = std::abs(d[i]) + std::abs(e[i]) + std::abs(e[i-1]);
 	if(dtemp>max)
 	  max = dtemp;
       }
@@ -3701,7 +3680,7 @@ PLUMED_BLAS_F77_FUNC(dlanst,DLANST)(const char *norm,
       sum *= 2;
     }
     PLUMED_BLAS_F77_FUNC(dlassq,DLASSQ)(n,d,&j,&scale,&sum);
-    val = scale * sqrt(sum);
+    val = scale *  std::sqrt(sum);
     break;
     
   default:
@@ -3712,7 +3691,7 @@ PLUMED_BLAS_F77_FUNC(dlanst,DLANST)(const char *norm,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 
 
 #include "lapack.h"
@@ -3751,7 +3730,7 @@ PLUMED_BLAS_F77_FUNC(dlansy,DLANSY)(const char *norm, const char *uplo, int *n,
 		i__2 = j;
 		for (i__ = 1; i__ <= i__2; ++i__) {
 		  d__2 = value;
-		  d__3 = fabs(a[i__ + j * a_dim1]);
+		  d__3 = std::abs(a[i__ + j * a_dim1]);
 		  value = (d__2>d__3) ? d__2 : d__3;
 		}
 	    }
@@ -3761,7 +3740,7 @@ PLUMED_BLAS_F77_FUNC(dlansy,DLANSY)(const char *norm, const char *uplo, int *n,
 		i__2 = *n;
 		for (i__ = j; i__ <= i__2; ++i__) {
 		  d__2 = value;
-		  d__3 = fabs(a[i__ + j * a_dim1]);
+		  d__3 = std::abs(a[i__ + j * a_dim1]);
 		    value =  (d__2>d__3) ? d__2 : d__3;
 		}
 	    }
@@ -3775,11 +3754,11 @@ PLUMED_BLAS_F77_FUNC(dlansy,DLANSY)(const char *norm, const char *uplo, int *n,
 		sum = 0.;
 		i__2 = j - 1;
 		for (i__ = 1; i__ <= i__2; ++i__) {
-		    absa = fabs(a[i__ + j * a_dim1]);
+		    absa = std::abs(a[i__ + j * a_dim1]);
 		    sum += absa;
 		    work[i__] += absa;
 		}
-		work[j] = sum + fabs(a[j + j * a_dim1]);
+		work[j] = sum + std::abs(a[j + j * a_dim1]);
 	    }
 	    i__1 = *n;
 	    for (i__ = 1; i__ <= i__1; ++i__) {
@@ -3793,10 +3772,10 @@ PLUMED_BLAS_F77_FUNC(dlansy,DLANSY)(const char *norm, const char *uplo, int *n,
 	    }
 	    i__1 = *n;
 	    for (j = 1; j <= i__1; ++j) {
-		sum = work[j] + fabs(a[j + j * a_dim1]);
+		sum = work[j] + std::abs(a[j + j * a_dim1]);
 		i__2 = *n;
 		for (i__ = j + 1; i__ <= i__2; ++i__) {
-		    absa = fabs(a[i__ + j * a_dim1]);
+		    absa = std::abs(a[i__ + j * a_dim1]);
 		    sum += absa;
 		    work[i__] += absa;
 		}
@@ -3824,7 +3803,7 @@ PLUMED_BLAS_F77_FUNC(dlansy,DLANSY)(const char *norm, const char *uplo, int *n,
 	sum *= 2;
 	i__1 = *lda + 1;
 	PLUMED_BLAS_F77_FUNC(dlassq,DLASSQ)(n, &a[a_offset], &i__1, &scale, &sum);
-	value = scale * sqrt(sum);
+	value = scale *  std::sqrt(sum);
     }
 
     ret_val = value;
@@ -3834,7 +3813,7 @@ PLUMED_BLAS_F77_FUNC(dlansy,DLANSY)(const char *norm, const char *uplo, int *n,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 
 #include "real.h"
@@ -3849,8 +3828,8 @@ PLUMED_BLAS_F77_FUNC(dlapy2,DLAPY2)(double * x, double * y)
   double xabs,yabs;
   double w,z;
 
-  xabs = fabs(*x);
-  yabs = fabs(*y);
+  xabs = std::abs(*x);
+  yabs = std::abs(*y);
   
   if(xabs>yabs) {
     w = xabs;
@@ -3860,17 +3839,17 @@ PLUMED_BLAS_F77_FUNC(dlapy2,DLAPY2)(double * x, double * y)
     z = xabs;
   }
 
-  if( fabs(z)<PLUMED_GMX_DOUBLE_MIN) 
+  if( std::abs(z)<PLUMED_GMX_DOUBLE_MIN) 
     return w;
   else {
     z = z/w;
-    return w*sqrt(1.0+z*z);
+    return w* std::sqrt(1.0+z*z);
   }
 }
   
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "real.h"
 
@@ -3967,12 +3946,12 @@ L40:
 	s = work[inds + i__] - *sigma;
     }
 
-    if (! (s > 0. || s < 1.)) {
+    if (std::isnan(s)) {
 
 	sawnan = 1;
 	j = *b1 + 1;
 L60:
-	if (work[inds + j] > 0. || work[inds + j] < 1.) {
+    if (!std::isnan(work[inds + j])) {
 	    ++j;
 	    goto L60;
 	}
@@ -3982,7 +3961,7 @@ L60:
 	for (i__ = j + 1; i__ <= i__1; ++i__) {
 	    dplus = d__[i__] + s;
 	    work[i__] = ld[i__] / dplus;
-	    if (fabs(work[i__])<PLUMED_GMX_DOUBLE_MIN) {
+	    if (std::abs(work[i__])<PLUMED_GMX_DOUBLE_MIN) {
 		work[inds + i__] = lld[i__];
 	    } else {
 		work[inds + i__] = s * work[i__] * l[i__];
@@ -4000,12 +3979,12 @@ L60:
 	work[indp + i__ - 1] = work[indp + i__] * tmp - *sigma;
     }
     tmp = work[indp + r1 - 1];
-    if (! (tmp > 0. || tmp < 1.)) {
+    if (std::isnan(tmp)) {
 
 	sawnan = 1;
 	j = *bn - 3;
 L90:
-	if (work[indp + j] > 0. || work[indp + j] < 1.) {
+    if (!std::isnan(work[indp + j])) {
 	    --j;
 	    goto L90;
 	}
@@ -4015,7 +3994,7 @@ L90:
 	    dminus = lld[i__] + work[indp + i__];
 	    tmp = d__[i__] / dminus;
 	    work[indumn + i__] = l[i__] * tmp;
-	    if (fabs(tmp)<PLUMED_GMX_DOUBLE_MIN) {
+	    if (std::abs(tmp)<PLUMED_GMX_DOUBLE_MIN) {
 		work[indp + i__ - 1] = d__[i__] - *sigma;
 	    } else {
 		work[indp + i__ - 1] = work[indp + i__] * tmp - *sigma;
@@ -4024,17 +4003,17 @@ L90:
     }
 
     *mingma = work[inds + r1 - 1] + work[indp + r1 - 1];
-    if (fabs(*mingma)<PLUMED_GMX_DOUBLE_MIN) {
+    if (std::abs(*mingma)<PLUMED_GMX_DOUBLE_MIN) {
 	*mingma = eps * work[inds + r1 - 1];
     }
     *r__ = r1;
     i__1 = r2 - 1;
     for (i__ = r1; i__ <= i__1; ++i__) {
 	tmp = work[inds + i__] + work[indp + i__];
-	if (fabs(tmp)<PLUMED_GMX_DOUBLE_MIN) {
+	if (std::abs(tmp)<PLUMED_GMX_DOUBLE_MIN) {
 	    tmp = eps * work[inds + i__];
 	}
-	if (fabs(tmp) < fabs(*mingma)) {
+	if (std::abs(tmp) < std::abs(*mingma)) {
 	    *mingma = tmp;
 	    *r__ = i__ + 1;
 	}
@@ -4055,7 +4034,7 @@ L120:
 		z__[i__] = -(work[i__] * z__[i__ + 1]);
 		*ztz += z__[i__] * z__[i__];
 	    }
-	    if (fabs(z__[to]) <= eps && fabs(z__[to + 1]) <= eps) {
+	    if (std::abs(z__[to]) <= eps && std::abs(z__[to + 1]) <= eps) {
 		isuppz[1] = to + 2;
 	    } else {
 		from = to - 1;
@@ -4074,7 +4053,7 @@ L140:
 		z__[i__] = -(work[indumn + i__ - 1] * z__[i__ - 1]);
 		*ztz += z__[i__] * z__[i__];
 	    }
-	    if (fabs(z__[to]) <= eps && fabs(z__[to - 1]) <= eps) {
+	    if (std::abs(z__[to]) <= eps && std::abs(z__[to - 1]) <= eps) {
 		isuppz[2] = to - 2;
 	    } else {
 		from = to + 1;
@@ -4086,12 +4065,12 @@ L140:
     } else {
 	i__1 = *b1;
 	for (i__ = *r__ - 1; i__ >= i__1; --i__) {
-	    if (fabs(z__[i__ + 1])<PLUMED_GMX_DOUBLE_MIN) {
+	    if (std::abs(z__[i__ + 1])<PLUMED_GMX_DOUBLE_MIN) {
 		z__[i__] = -(ld[i__ + 1] / ld[i__]) * z__[i__ + 2];
 	    } else {
 		z__[i__] = -(work[i__] * z__[i__ + 1]);
 	    }
-	    if (fabs(z__[i__]) <= eps && fabs(z__[i__ + 1]) <= eps) {
+	    if (std::abs(z__[i__]) <= eps && std::abs(z__[i__ + 1]) <= eps) {
 		isuppz[1] = i__ + 2;
 		goto L170;
 	    }
@@ -4100,12 +4079,12 @@ L140:
 L170:
 	i__1 = *bn - 1;
 	for (i__ = *r__; i__ <= i__1; ++i__) {
-	    if (fabs(z__[i__])<PLUMED_GMX_DOUBLE_MIN) {
+	    if (std::abs(z__[i__])<PLUMED_GMX_DOUBLE_MIN) {
 		z__[i__ + 1] = -(ld[i__ - 1] / ld[i__]) * z__[i__ - 1];
 	    } else {
 		z__[i__ + 1] = -(work[indumn + i__] * z__[i__]);
 	    }
-	    if (fabs(z__[i__]) <= eps && fabs(z__[i__ + 1]) <= eps) {
+	    if (std::abs(z__[i__]) <= eps && std::abs(z__[i__ + 1]) <= eps) {
 		isuppz[2] = i__ - 1;
 		break;
 	    }
@@ -4120,8 +4099,8 @@ L170:
 
 }
 }
-#include <math.h>
-#include <ctype.h>
+#include <cctype>
+#include <cmath>
 
 #include "blas/blas.h"
 #include "lapack.h"
@@ -4143,7 +4122,7 @@ PLUMED_BLAS_F77_FUNC(dlarf,DLARF)(const char *side,
        int *ldc,
        double *work)
 {
-  const char ch=toupper(*side);
+  const char ch=std::toupper(*side);
   double one = 1.0;
   double zero = 0.0;
   double minustau = -(*tau);
@@ -4151,12 +4130,12 @@ PLUMED_BLAS_F77_FUNC(dlarf,DLARF)(const char *side,
 
 
   if(ch=='L') {
-    if(fabs(*tau)>PLUMED_GMX_DOUBLE_MIN) {
+    if(std::abs(*tau)>PLUMED_GMX_DOUBLE_MIN) {
       PLUMED_BLAS_F77_FUNC(dgemv,DGEMV)("T",m,n,&one,c,ldc,v,incv,&zero,work,&i1);
       PLUMED_BLAS_F77_FUNC(dger,DGER)(m,n,&minustau,v,incv,work,&i1,c,ldc);
     }
   } else {
-    if(fabs(*tau)>PLUMED_GMX_DOUBLE_MIN) {
+    if(std::abs(*tau)>PLUMED_GMX_DOUBLE_MIN) {
       PLUMED_BLAS_F77_FUNC(dgemv,DGEMV)("N",m,n,&one,c,ldc,v,incv,&zero,work,&i1);
       PLUMED_BLAS_F77_FUNC(dger,DGER)(m,n,&minustau,work,&i1,v,incv,c,ldc);
     }
@@ -4567,7 +4546,7 @@ PLUMED_BLAS_F77_FUNC(dlarfb,DLARFB)(const char *side,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "blas/blas.h"
@@ -4599,7 +4578,7 @@ PLUMED_BLAS_F77_FUNC(dlarfg,DLARFG)(int   *n,
 
   xnorm = PLUMED_BLAS_F77_FUNC(dnrm2,DNRM2)(&ti1,x,incx);
 
-  if(fabs(xnorm)<PLUMED_GMX_DOUBLE_MIN) {
+  if(std::abs(xnorm)<PLUMED_GMX_DOUBLE_MIN) {
     *tau = 0.0;
   } else {
 
@@ -4615,12 +4594,12 @@ PLUMED_BLAS_F77_FUNC(dlarfg,DLARFG)(int   *n,
     safmin = minval*(1.0+PLUMED_GMX_DOUBLE_EPS) / PLUMED_GMX_DOUBLE_EPS;
 
         
-    if(fabs(beta)<safmin) {
+    if(std::abs(beta)<safmin) {
 
       knt = 0;
       rsafmn = 1.0 / safmin;
       
-      while(fabs(beta)<safmin) {
+      while(std::abs(beta)<safmin) {
 	knt++;
 	ti1 = *n-1;
 	PLUMED_BLAS_F77_FUNC(dscal,DSCAL)(&ti1,&rsafmn,x,incx);
@@ -4660,7 +4639,7 @@ PLUMED_BLAS_F77_FUNC(dlarfg,DLARFG)(int   *n,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "blas/blas.h"
@@ -4706,7 +4685,7 @@ PLUMED_BLAS_F77_FUNC(dlarft,DLARFT)(const char *direct,
     if (*direct=='F' || *direct=='f') {
 	i__1 = *k;
 	for (i__ = 1; i__ <= i__1; ++i__) {
-	    if (fabs(tau[i__])<PLUMED_GMX_DOUBLE_MIN) {
+	    if (std::abs(tau[i__])<PLUMED_GMX_DOUBLE_MIN) {
 
 		i__2 = i__;
 		for (j = 1; j <= i__2; ++j) {
@@ -4744,7 +4723,7 @@ PLUMED_BLAS_F77_FUNC(dlarft,DLARFT)(const char *direct,
 	}
     } else {
 	for (i__ = *k; i__ >= 1; --i__) {
-	    if (fabs(tau[i__])<PLUMED_GMX_DOUBLE_MIN) {
+	    if (std::abs(tau[i__])<PLUMED_GMX_DOUBLE_MIN) {
 
 		i__1 = *k;
 		for (j = i__; j <= i__1; ++j) {
@@ -4794,7 +4773,7 @@ PLUMED_BLAS_F77_FUNC(dlarft,DLARFT)(const char *direct,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 
 #include "blas/blas.h"
@@ -4844,9 +4823,8 @@ PLUMED_BLAS_F77_FUNC(dlarnv,DLARNV)(int *idist,
 
 	    i__2 = il;
 	    for (i__ = 1; i__ <= i__2; ++i__) {
-		x[iv + i__ - 1] = sqrt(log(u[(i__ << 1) - 2]) * -2.) * 
-		  cos(u[(i__ << 1) - 1] * 
-		      (double)6.2831853071795864769252867663);
+                x[iv + i__ - 1] =  std::sqrt(std::log(u[(i__ << 1) - 2]) * -2.) * 
+		  std::cos(u[(i__ << 1) - 1] * (double)6.2831853071795864769252867663);
 	    }
 	}
     }
@@ -4855,7 +4833,7 @@ PLUMED_BLAS_F77_FUNC(dlarnv,DLARNV)(int *idist,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "real.h"
 
@@ -4892,9 +4870,9 @@ PLUMED_BLAS_F77_FUNC(dlarrbx,DLARRBX)(int *n,
     int i1, i2, ii, kk;
     double fac, gap, mid;
     int cnt;
-    double eps, tmp, left;
+    double tmp, left;
     int nint, prev, next, nleft;
-    double right, width, dplus, error;
+    double right, width, dplus;
     int nright, olnint;
     k = 0;
     right = 0.0;
@@ -4910,7 +4888,6 @@ PLUMED_BLAS_F77_FUNC(dlarrbx,DLARRBX)(int *n,
     --d__;
 
     *info = 0;
-    eps = PLUMED_GMX_DOUBLE_EPS;
     i__1 = *n << 1;
     for (i__ = 1; i__ <= i__1; ++i__) {
 	iwork[i__] = 0;
@@ -4920,16 +4897,6 @@ PLUMED_BLAS_F77_FUNC(dlarrbx,DLARRBX)(int *n,
     prev = 0;
     i__1 = *ilast;
     for (i__ = *ifirst; i__ <= i__1; ++i__) {
-	ii = i__ - *offset;
-	if (i__ == *ifirst) {
-	    gap = wgap[ii];
-	} else if (i__ == *ilast) {
-	    gap = wgap[ii - 1];
-	} else {
-	    d__1 = wgap[ii - 1], d__2 = wgap[ii];
-	    gap = (d__1<d__2) ? d__1 : d__2;
-	}
-	error = werr[ii];
 	k = i__ << 1;
 	iwork[k - 1] = 1;
 	i2 = i__;
@@ -4964,7 +4931,7 @@ L40:
 		if (dplus < 0.) {
 		    ++cnt;
 		}
-		if (! (s > 0. || s < 1.)) {
+        if (std::isnan(s)) {
 
 		    cnt = 0;
 		    s = -left;
@@ -4975,7 +4942,7 @@ L40:
 			    ++cnt;
 			}
 			tmp = lld[j] / dplus;
-			if (fabs(tmp)<PLUMED_GMX_DOUBLE_MIN) {
+			if (std::abs(tmp)<PLUMED_GMX_DOUBLE_MIN) {
 			    s = lld[j] - left;
 			} else {
 			    s = s * tmp - left;
@@ -5011,7 +4978,7 @@ L60:
 	    if (dplus < 0.) {
 		++cnt;
 	    }
-	    if (! (s > 0. || s < 1.)) {
+	    if (std::isnan(s)) {
 
 		cnt = 0;
 		s = -right;
@@ -5022,7 +4989,7 @@ L60:
 			++cnt;
 		    }
 		    tmp = lld[j] / dplus;
-		    if (fabs(tmp)<PLUMED_GMX_DOUBLE_MIN) {
+		    if (std::abs(tmp)<PLUMED_GMX_DOUBLE_MIN) {
 			s = lld[j] - right;
 		    } else {
 			s = s * tmp - right;
@@ -5076,8 +5043,8 @@ L80:
 	nright = iwork[k];
 	mid = (left + right) * .5;
 	width = right - mid;
-	d__1 = fabs(left);
-	d__2 = fabs(right);
+	d__1 = std::abs(left);
+	d__2 = std::abs(right);
 	tmp = (d__1>d__2) ? d__1 : d__2;
 
 	gap = 0.;
@@ -5128,7 +5095,7 @@ L80:
 	if (dplus < 0.) {
 	    ++cnt;
 	}
-	if (! (s > 0. || s < 1.)) {
+	if (std::isnan(s)) {
 	    cnt = 0;
 	    s = -mid;
 	    i__2 = *n - 1;
@@ -5138,7 +5105,7 @@ L80:
 		    ++cnt;
 		}
 		tmp = lld[j] / dplus;
-		if (fabs(tmp)<PLUMED_GMX_DOUBLE_MIN) {
+		if (std::abs(tmp)<PLUMED_GMX_DOUBLE_MIN) {
 		    s = lld[j] - mid;
 		} else {
 		    s = s * tmp - mid;
@@ -5198,8 +5165,8 @@ L80:
 } 
 }
 }
-#include <math.h>
-#include <ctype.h>
+#include <cctype>
+#include <cmath>
 
 #include "real.h"
 
@@ -5284,7 +5251,7 @@ PLUMED_BLAS_F77_FUNC(dlarrex,DLARREX)(const char *range,
     *nsplit = 1;
     i__1 = *n - 1;
     for (i__ = 1; i__ <= i__1; ++i__) {
-	if (fabs(e[i__]) <= *tol) {
+	if (std::abs(e[i__]) <= *tol) {
 	    isplit[*nsplit] = i__;
 	    ++(*nsplit);
 	}
@@ -5306,19 +5273,19 @@ PLUMED_BLAS_F77_FUNC(dlarrex,DLARREX)(const char *range,
 	}
 	in = iend - ibegin + 1;
 
-	gl = d__[ibegin] - fabs(e[ibegin]);
-	gu = d__[ibegin] + fabs(e[ibegin]);
+	gl = d__[ibegin] - std::abs(e[ibegin]);
+	gu = d__[ibegin] + std::abs(e[ibegin]);
 	gersch[(ibegin << 1) - 1] = gl;
 	gersch[ibegin * 2] = gu;
-	gersch[(iend << 1) - 1] = d__[iend] - fabs(e[iend - 1]);
-	gersch[iend * 2] = d__[iend] + fabs(e[iend - 1]);
+	gersch[(iend << 1) - 1] = d__[iend] - std::abs(e[iend - 1]);
+	gersch[iend * 2] = d__[iend] + std::abs(e[iend - 1]);
 	d__1 = gersch[(iend << 1) - 1];
 	gl = (d__1<gl) ? d__1 : gl;
 	d__1 = gersch[iend * 2];
 	gu = (d__1>gu) ? d__1 : gu;
 	i__2 = iend - 1;
 	for (i__ = ibegin + 1; i__ <= i__2; ++i__) {
-	    offd = fabs(e[i__ - 1]) + fabs(e[i__]);
+	    offd = std::abs(e[i__ - 1]) + std::abs(e[i__]);
 	    gersch[(i__ << 1) - 1] = d__[i__] - offd;
 	    d__1 = gersch[(i__ << 1) - 1];
 	    gl = (d__1<gl) ? d__1 : gl;
@@ -5326,7 +5293,7 @@ PLUMED_BLAS_F77_FUNC(dlarrex,DLARREX)(const char *range,
 	    d__1 = gersch[i__ * 2];
 	    gu = (d__1>gu) ? d__1 : gu;
 	}
-	d__1 = fabs(gl), d__2 = fabs(gu);
+	d__1 = std::abs(gl), d__2 = std::abs(gu);
 	nrm = (d__1>d__2) ? d__1 : d__2;
 
 	width = gu - gl;
@@ -5387,7 +5354,7 @@ L60:
 	}
 	for (i__ = in; i__ >= 1; --i__) {
 	    tmp = sgndef * work[i__];
-	    if (tmp < 0. || fabs(work[(in << 1) + i__])<PLUMED_GMX_DOUBLE_MIN || ! (tmp > 0. || tmp < 1.)) {
+        if (tmp < 0. || std::abs(work[(in << 1) + i__])<PLUMED_GMX_DOUBLE_MIN || std::isnan(tmp)) {
 		delta *= 2.;
 		goto L60;
 	    }
@@ -5442,7 +5409,7 @@ L100:
 
 	for (i__ = in; i__ >= 1; --i__) {
 	    tmp = sgndef * work[i__];
-	    if (tmp < 0. || fabs(work[(in << 1) + i__])<PLUMED_GMX_DOUBLE_MIN || ! (tmp > 0. || tmp < 1.)) {
+	    if (tmp < 0. || std::abs(work[(in << 1) + i__])<PLUMED_GMX_DOUBLE_MIN || std::isnan(tmp)) {
 		delta *= 2.;
 		goto L100;
 	    }
@@ -5453,7 +5420,7 @@ L100:
 	i__2 = in - 1;
 	PLUMED_BLAS_F77_FUNC(dcopy,DCOPY)(&i__2, &work[in + 1], &c__1, &e[ibegin], &c__1);
 	e[iend] = sigma;
-	tmp = (double) in * 4. * eps * (fabs(sigma) + fabs(tau));
+	tmp = (double) in * 4. * eps * (std::abs(sigma) + std::abs(tau));
 	i__2 = iend;
 	for (i__ = ibegin; i__ <= i__2; ++i__) {
 	    gersch[(i__ << 1) - 1] = gersch[(i__ << 1) - 1] - sigma - tmp;
@@ -5463,11 +5430,11 @@ L100:
 	j = ibegin;
 	i__2 = in - 1;
 	for (i__ = 1; i__ <= i__2; ++i__) {
-	    work[(i__ << 1) - 1] = fabs(d__[j]);
+	    work[(i__ << 1) - 1] = std::abs(d__[j]);
 	    work[i__ * 2] = e[j] * e[j] * work[(i__ << 1) - 1];
 	    ++j;
 	}
-	work[(in << 1) - 1] = fabs(d__[iend]);
+	work[(in << 1) - 1] = std::abs(d__[iend]);
 
 	PLUMED_BLAS_F77_FUNC(dlasq2,DLASQ2)(&in, &work[1], info);
 	if (*info != 0) {
@@ -5597,7 +5564,7 @@ L170:
 
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "real.h"
 
@@ -5647,17 +5614,17 @@ PLUMED_BLAS_F77_FUNC(dlarrfx,DLARRFX)(int *n,
 L10:
     s = -(*sigma);
     dplus[1] = d__[1] + s;
-    dmax1 = fabs(dplus[1]);
+    dmax1 = std::abs(dplus[1]);
     i__1 = *n - 1;
     for (i__ = 1; i__ <= i__1; ++i__) {
 	lplus[i__] = ld[i__] / dplus[i__];
 	s = s * lplus[i__] * l[i__] - *sigma;
 	dplus[i__ + 1] = d__[i__ + 1] + s;
-	d__2 = dmax1, d__3 = fabs(dplus[i__ + 1]);
+	d__2 = dmax1, d__3 = std::abs(dplus[i__ + 1]);
 	dmax1 = (d__2>d__3) ? d__2 : d__3;
     }
-    if (! (dmax1 > 0. || dmax1 < 1.)) {
-	*sigma -= fabs(*sigma) * delta;
+    if (std::isnan(dmax1)) {
+	*sigma -= std::abs(*sigma) * delta;
 	delta *= 2.;
 	goto L10;
     }
@@ -5667,17 +5634,17 @@ L10:
 L30:
     s = -tmp;
     work[1] = d__[1] + s;
-    dmax2 = fabs(work[1]);
+    dmax2 = std::abs(work[1]);
     i__1 = *n - 1;
     for (i__ = 1; i__ <= i__1; ++i__) {
 	work[*n + i__] = ld[i__] / work[i__];
 	s = s * work[*n + i__] * l[i__] - tmp;
 	work[i__ + 1] = d__[i__ + 1] + s;
-	d__2 = dmax2, d__3 = fabs(work[i__ + 1]);
+	d__2 = dmax2, d__3 = std::abs(work[i__ + 1]);
 	dmax2 = (d__2>d__3) ? d__2 : d__3;
     }
-    if (! (dmax2 > 0. || dmax2 < 1.)) {
-	tmp += fabs(tmp) * delta;
+    if (std::isnan(dmax2)) {
+	tmp += std::abs(tmp) * delta;
 	delta *= 2.;
 	goto L30;
     }
@@ -5692,7 +5659,7 @@ L30:
 }
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "real.h"
 
@@ -5830,11 +5797,11 @@ L171:
 	PLUMED_BLAS_F77_FUNC(dcopy,DCOPY)(&im, &w[wbegin], &c__1, &work[1], &c__1);
 	i__2 = im - 1;
 	for (i__ = 1; i__ <= i__2; ++i__) {
-	    work[inderr + i__] = eps * fabs(work[i__]);
+	    work[inderr + i__] = eps * std::abs(work[i__]);
 	    work[indgap + i__] = work[i__ + 1] - work[i__];
 	}
-	work[inderr + im] = eps * fabs(work[im]);
-	d__2 = fabs(work[im]);
+	work[inderr + im] = eps * std::abs(work[im]);
+	d__2 = std::abs(work[im]);
 	work[indgap + im] = (d__2>eps) ? d__2 : eps;
 	ndone = 0;
 
@@ -5895,11 +5862,11 @@ L40:
 		i__3 = oldlst;
 		for (j = oldfst; j <= i__3; ++j) {
 		    if (j == oldlst || work[indgap + j] >= 
-			reltol * fabs(work[j])) {
+			reltol * std::abs(work[j])) {
 			newlst = j;
 		    } else {
 
-			relgap = work[indgap + j] / fabs(work[j]);
+			relgap = work[indgap + j] / std::abs(work[j]);
 			if (j == newfrs) {
 			    minrgp = relgap;
 			} else {
@@ -5918,7 +5885,7 @@ L40:
 				z_dim1], &z__[ibegin + (newftt + 1) * z_dim1],
 				 &work[indwrk], info);
 			if (*info == 0) {
-			    tmp = eps * fabs(sigma);
+			    tmp = eps * std::abs(sigma);
 			    i__4 = newlst;
 			    for (k = newfrs; k <= i__4; ++k) {
 				work[k] -= sigma;
@@ -5932,10 +5899,7 @@ L40:
 			    iwork[k] = newlst;
 			} else {
 			    *info = 0;
-			    if (minrgp >= mgstol) {
-				nomgs = 0;
-			    } else {
-
+			    if (minrgp < mgstol) {
 				work[indwrk] = d__[ibegin];
 				i__4 = in - 1;
 				for (k = 1; k <= i__4; ++k) {
@@ -5979,8 +5943,8 @@ L90:
 				    &ztz, &mingma, &iwork[iindr + ktot], &
 				    isuppz[(ktot << 1) - 1], &work[indwrk]);
 			    tmp = 1. / ztz;
-			    nrminv = sqrt(tmp);
-			    resid = fabs(mingma) * nrminv;
+			    nrminv =  std::sqrt(tmp);
+			    resid = std::abs(mingma) * nrminv;
 			    rqcorr = mingma * tmp;
 			    if (k == in) {
 				gap = work[indgap + k - 1];
@@ -5992,8 +5956,8 @@ L90:
 				gap = (d__1<d__2) ? d__1 : d__2;
 			    }
 			    ++iter;
-			    if (resid > *tol * gap && fabs(rqcorr) > eps * 4. *
-				     fabs(lambda)) {
+			    if (resid > *tol * gap && std::abs(rqcorr) > eps * 4. *
+				     std::abs(lambda)) {
 				work[k] = lambda + rqcorr;
 				if (iter < 8) {
 				    goto L90;
@@ -6065,7 +6029,7 @@ L90:
 } 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 #include "lapack_limits.h"
 
@@ -6089,24 +6053,24 @@ PLUMED_BLAS_F77_FUNC(dlartg,DLARTG)(double *f,
   eps = PLUMED_GMX_DOUBLE_EPS;
   minval = PLUMED_GMX_DOUBLE_MIN;
   safemin = minval*(1.0+eps);
-  n = 0.5*log( safemin/eps ) / log(2);
-  safemin2 = pow(2,n);
+  n = static_cast<int>(0.5*std::log( safemin/eps ) / std::log(2.0));
+  safemin2 = std::pow(2.0,static_cast<double>(n));
 
   safemx2 = 1.0 / safemin2;
 
-  if(fabs(*g)<PLUMED_GMX_DOUBLE_MIN) {
+  if(std::abs(*g)<PLUMED_GMX_DOUBLE_MIN) {
     *cs = 1.0;
     *sn = 0.0;
     *r = *f;
-  } else if (fabs(*f)<PLUMED_GMX_DOUBLE_MIN) {
+  } else if (std::abs(*f)<PLUMED_GMX_DOUBLE_MIN) {
     *cs = 0.0;
     *sn = 1.0;
     *r = *g;
   } else {
     f1 = *f;
     g1 = *g;
-    f1a = fabs(f1);
-    g1a = fabs(g1);
+    f1a = std::abs(f1);
+    g1a = std::abs(g1);
     scale = (f1a > g1a) ? f1a : g1a;
     if(scale >= safemx2) {
       count = 0;
@@ -6114,11 +6078,11 @@ PLUMED_BLAS_F77_FUNC(dlartg,DLARTG)(double *f,
 	count++;
 	f1 *= safemin2;
 	g1 *= safemin2;
-	f1a = fabs(f1);
-	g1a = fabs(g1);
+	f1a = std::abs(f1);
+	g1a = std::abs(g1);
 	scale = (f1a > g1a) ? f1a : g1a;
       }
-      *r = sqrt(f1*f1 + g1*g1);
+      *r =  std::sqrt(f1*f1 + g1*g1);
       *cs = f1 / *r;
       *sn = g1 / *r;
       for(i=0;i<count;i++)
@@ -6129,21 +6093,21 @@ PLUMED_BLAS_F77_FUNC(dlartg,DLARTG)(double *f,
 	count++;
 	f1 *= safemx2;
 	g1 *= safemx2;
-	f1a = fabs(f1);
-	g1a = fabs(g1);
+	f1a = std::abs(f1);
+	g1a = std::abs(g1);
 	scale = (f1a > g1a) ? f1a : g1a;
       }
-      *r = sqrt(f1*f1 + g1*g1);
+      *r =  std::sqrt(f1*f1 + g1*g1);
       *cs = f1 / *r;
       *sn = g1 / *r;
       for(i=0;i<count;i++)
 	*r *= safemin2;
     } else {
-      *r = sqrt(f1*f1 + g1*g1);
+      *r =  std::sqrt(f1*f1 + g1*g1);
       *cs = f1 / *r;
       *sn = g1 / *r;
     }
-    if(fabs(*f)>fabs(*g) && *cs<0.0) {
+    if(std::abs(*f)>std::abs(*g) && *cs<0.0) {
       *cs *= -1.0;
       *sn *= -1.0;
       *r  *= -1.0;
@@ -6154,7 +6118,7 @@ PLUMED_BLAS_F77_FUNC(dlartg,DLARTG)(double *f,
       
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 
 #include "blas/blas.h"
@@ -6253,7 +6217,7 @@ PLUMED_BLAS_F77_FUNC(dlaruv,DLARUV)(int *iseed, int *n, double *x)
 } 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "lapack.h"
@@ -6269,25 +6233,25 @@ PLUMED_BLAS_F77_FUNC(dlas2,DLAS2)(double *f,
        double *ssmin,
        double *ssmax)
 {
-  double fa = fabs(*f);
-  double ga = fabs(*g);
-  double ha = fabs(*h);
+  double fa = std::abs(*f);
+  double ga = std::abs(*g);
+  double ha = std::abs(*h);
   double fhmin,fhmax,tmax,tmin,tmp1,tmp2;
   double as,at,au,c;
 
   fhmin = (fa<ha) ? fa : ha;
   fhmax = (fa>ha) ? fa : ha;
   
-  if(fabs(fhmin)<PLUMED_GMX_DOUBLE_MIN) {
+  if(std::abs(fhmin)<PLUMED_GMX_DOUBLE_MIN) {
     *ssmin = 0.0;
-    if(fabs(fhmax)<PLUMED_GMX_DOUBLE_MIN) 
+    if(std::abs(fhmax)<PLUMED_GMX_DOUBLE_MIN) 
       *ssmax = ga;
     else {
       tmax = (fhmax>ga) ? fhmax : ga;
       tmin = (fhmax<ga) ? fhmax : ga;
       tmp1 = tmin / tmax;
       tmp1 = tmp1 * tmp1;
-      *ssmax = tmax*sqrt(1.0 + tmp1);
+      *ssmax = tmax* std::sqrt(1.0 + tmp1);
     }
   } else {
     if(ga<fhmax) {
@@ -6295,12 +6259,12 @@ PLUMED_BLAS_F77_FUNC(dlas2,DLAS2)(double *f,
       at = (fhmax-fhmin) / fhmax;
       au = (ga/fhmax);
       au = au * au;
-      c = 2.0 / ( sqrt(as*as+au) + sqrt(at*at+au) );
+      c = 2.0 / (  std::sqrt(as*as+au) + std::sqrt(at*at+au) );
       *ssmin = fhmin * c;
       *ssmax = fhmax / c;
     } else {
       au = fhmax / ga;
-      if(fabs(au)<PLUMED_GMX_DOUBLE_MIN) {
+      if(std::abs(au)<PLUMED_GMX_DOUBLE_MIN) {
 	*ssmin = (fhmin*fhmax)/ga;
 	*ssmax = ga;
       } else {
@@ -6308,7 +6272,7 @@ PLUMED_BLAS_F77_FUNC(dlas2,DLAS2)(double *f,
 	at = (fhmax-fhmin)/fhmax;
 	tmp1 = as*au;
 	tmp2 = at*au;
-	c = 1.0 / ( sqrt(1.0+tmp1*tmp1) + sqrt(1.0+tmp2*tmp2));
+	c = 1.0 / (  std::sqrt(1.0+tmp1*tmp1) + std::sqrt(1.0+tmp2*tmp2));
 	*ssmin = (fhmin*c)*au;
 	*ssmin = *ssmin + *ssmin;
 	*ssmax = ga / (c+c);
@@ -6319,8 +6283,8 @@ PLUMED_BLAS_F77_FUNC(dlas2,DLAS2)(double *f,
 }
 }
 }
-#include <ctype.h>
-#include <math.h>
+#include <cctype>
+#include <cmath>
 #include "real.h"
 
 #include "lapack.h"
@@ -6343,7 +6307,7 @@ PLUMED_BLAS_F77_FUNC(dlascl,DLASCL)(const char *type,
                         int *lda,
                         int *info)
 {
-  const char ch=toupper(*type);
+  const char ch=std::toupper(*type);
   int i,j,k,l,k1,k2,k3,k4;
   int done=0;
   double minval,smlnum,bignum;
@@ -6364,11 +6328,11 @@ PLUMED_BLAS_F77_FUNC(dlascl,DLASCL)(const char *type,
     cfrom1 = cfromc * smlnum;
     cto1   = ctoc / bignum;
 
-    if(fabs(cfrom1)>fabs(ctoc) && fabs(ctoc)>PLUMED_GMX_DOUBLE_MIN) {
+    if(std::abs(cfrom1)>std::abs(ctoc) && std::abs(ctoc)>PLUMED_GMX_DOUBLE_MIN) {
       mul = smlnum;
       done = 0;
       cfromc = cfrom1;
-    } else if(fabs(cto1)>fabs(cfromc)) {
+    } else if(std::abs(cto1)>std::abs(cfromc)) {
       mul = bignum;
       done = 0;
       ctoc = cto1;
@@ -6522,7 +6486,6 @@ PLUMED_BLAS_F77_FUNC(dlasd0,DLASD0)(int *n,
 	*info = -9;
     }
     if (*info != 0) {
-	i__1 = -(*info);
 	return;
     }
 
@@ -6623,7 +6586,7 @@ PLUMED_BLAS_F77_FUNC(dlasd0,DLASD0)(int *n,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 
 #include "blas/blas.h"
@@ -6680,7 +6643,6 @@ PLUMED_BLAS_F77_FUNC(dlasd1,DLASD1)(int *nl,
 	*info = -3;
     }
     if (*info != 0) {
-	i__1 = -(*info);
 	return;
     }
 
@@ -6702,14 +6664,14 @@ PLUMED_BLAS_F77_FUNC(dlasd1,DLASD1)(int *nl,
     coltyp = idxc + n;
     idxp = coltyp + n;
 
-    d__1 = fabs(*alpha);
-    d__2 = fabs(*beta);
+    d__1 = std::abs(*alpha);
+    d__2 = std::abs(*beta);
     orgnrm = (d__1>d__2) ? d__1 : d__2;
     d__[*nl + 1] = 0.;
     i__1 = n;
     for (i__ = 1; i__ <= i__1; ++i__) {
-	if (fabs(d__[i__]) > orgnrm) {
-	    orgnrm = fabs(d__[i__]);
+	if (std::abs(d__[i__]) > orgnrm) {
+	    orgnrm = std::abs(d__[i__]);
 	}
     }
     PLUMED_BLAS_F77_FUNC(dlascl,DLASCL)("G", &c__0, &c__0, &orgnrm, &one, &n, &c__1, &d__[1], &n, info);
@@ -6739,7 +6701,7 @@ PLUMED_BLAS_F77_FUNC(dlasd1,DLASD1)(int *nl,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "blas/blas.h"
 #include "lapack.h"
 #include "lapack_limits.h"
@@ -6868,16 +6830,16 @@ PLUMED_BLAS_F77_FUNC(dlasd2,DLASD2)(int *nl,
     }
 
     eps = PLUMED_GMX_DOUBLE_EPS;
-    d__1 = fabs(*alpha), d__2 = fabs(*beta);
+    d__1 = std::abs(*alpha), d__2 = std::abs(*beta);
     tol = (d__1 > d__2) ? d__1 : d__2;
-    d__2 = fabs(d__[n]);
+    d__2 = std::abs(d__[n]);
     tol = eps * 8. * ((d__2 > tol) ? d__2 : tol);
 
     *k = 1;
     k2 = n + 1;
     i__1 = n;
     for (j = 2; j <= i__1; ++j) {
-	if (fabs(z__[j]) <= tol) {
+	if (std::abs(z__[j]) <= tol) {
 
 	    --k2;
 	    idxp[k2] = j;
@@ -6897,14 +6859,14 @@ L100:
     if (j > n) {
 	goto L110;
     }
-    if (fabs(z__[j]) <= tol) {
+    if (std::abs(z__[j]) <= tol) {
 
 	--k2;
 	idxp[k2] = j;
 	coltyp[j] = 4;
     } else {
 
-	if (fabs(d__[j] - d__[jprev]) <= tol) {
+	if (std::abs(d__[j] - d__[jprev]) <= tol) {
 
             s = z__[jprev];
 	    c__ = z__[j];
@@ -6988,7 +6950,7 @@ L120:
 
     dsigma[1] = 0.;
     hlftol = tol / 2.;
-    if (fabs(dsigma[2]) <= hlftol) {
+    if (std::abs(dsigma[2]) <= hlftol) {
 	dsigma[2] = hlftol;
     }
     if (m > n) {
@@ -7002,7 +6964,7 @@ L120:
 	    s = z__[m] / z__[1];
 	}
     } else {
-	if (fabs(z1) <= tol) {
+	if (std::abs(z1) <= tol) {
 	    z__[1] = tol;
 	} else {
 	    z__[1] = z1;
@@ -7053,7 +7015,7 @@ L120:
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "blas/blas.h"
 #include "lapack.h"
 
@@ -7097,10 +7059,6 @@ PLUMED_BLAS_F77_FUNC(dlasd3,DLASD3)(int *nl,
     int c__0 = 0;
     double zero = 0.0;
     double one = 1.0;
-    double *p1,*p2,t1,t2;
-
-    p1 = &t1;
-    p2 = &t2;
 
     --d__;
     q_dim1 = *ldq;
@@ -7140,7 +7098,7 @@ PLUMED_BLAS_F77_FUNC(dlasd3,DLASD3)(int *nl,
     nlp2 = *nl + 2;
 
     if (*k == 1) {
-	d__[1] = fabs(z__[1]);
+	d__[1] = std::abs(z__[1]);
 	PLUMED_BLAS_F77_FUNC(dcopy,DCOPY)(&m, &vt2[vt2_dim1 + 1], ldvt2, &vt[vt_dim1 + 1], ldvt);
 	if (z__[1] > 0.) {
 	    PLUMED_BLAS_F77_FUNC(dcopy,DCOPY)(&n, &u2[u2_dim1 + 1], &c__1, &u[u_dim1 + 1], &c__1);
@@ -7153,16 +7111,6 @@ PLUMED_BLAS_F77_FUNC(dlasd3,DLASD3)(int *nl,
 	return;
     }
 
-    i__1 = *k;
-    for (i__ = 1; i__ <= i__1; ++i__) {
-      t1 = dsigma[i__];
-      t2 = dsigma[i__];
-      /* force store and reload from memory */
-      t1 = (*p1) + (*p2) - dsigma[i__];
-
-      dsigma[i__] = t1;
-    }
-
     PLUMED_BLAS_F77_FUNC(dcopy,DCOPY)(k, &z__[1], &c__1, &q[q_offset], &c__1);
 
     rho = PLUMED_BLAS_F77_FUNC(dnrm2,DNRM2)(k, &z__[1], &c__1);
@@ -7193,7 +7141,7 @@ PLUMED_BLAS_F77_FUNC(dlasd3,DLASD3)(int *nl,
 	    z__[i__] *= u[i__ + j * u_dim1] * vt[i__ + j * vt_dim1] / (dsigma[
 		    i__] - dsigma[j + 1]) / (dsigma[i__] + dsigma[j + 1]);
 	}
-	d__2 = sqrt(fabs(z__[i__]));
+	d__2 =  std::sqrt(std::abs(z__[i__]));
 	z__[i__] = (q[i__ + q_dim1] > 0) ? d__2 : -d__2;
     }
 
@@ -7296,7 +7244,7 @@ L100:
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 #include "lapack_limits.h"
 
@@ -7349,7 +7297,7 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
     *info = 0;
     if (*n == 1) {
 
-	*sigma = sqrt(d__[1] * d__[1] + *rho * z__[1] * z__[1]);
+	*sigma =  std::sqrt(d__[1] * d__[1] + *rho * z__[1] * z__[1]);
 	delta[1] = 1.;
 	work[1] = 1.;
 	return;
@@ -7369,7 +7317,7 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 
 	temp = *rho / 2.;
 
-	temp1 = temp / (d__[*n] + sqrt(d__[*n] * d__[*n] + temp));
+	temp1 = temp / (d__[*n] +  std::sqrt(d__[*n] * d__[*n] + temp));
 	i__1 = *n;
 	for (j = 1; j <= i__1; ++j) {
 	    work[j] = d__[j] + d__[*n] + temp1;
@@ -7387,7 +7335,7 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 		n] / (delta[*n] * work[*n]);
 
 	if (w <= 0.) {
-	    temp1 = sqrt(d__[*n] * d__[*n] + *rho);
+	    temp1 =  std::sqrt(d__[*n] * d__[*n] + *rho);
 	    temp = z__[*n - 1] * z__[*n - 1] / ((d__[*n - 1] + temp1) * (d__[*
 		    n] - d__[*n - 1] + *rho / (d__[*n] + temp1))) + z__[*n] * 
 		    z__[*n] / *rho;
@@ -7400,9 +7348,9 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 			n];
 		b = z__[*n] * z__[*n] * delsq;
 		if (a < 0.) {
-		    tau = b * 2. / (sqrt(a * a + b * 4. * c__) - a);
+		    tau = b * 2. / ( std::sqrt(a * a + b * 4. * c__) - a);
 		} else {
-		    tau = (a + sqrt(a * a + b * 4. * c__)) / (c__ * 2.);
+		    tau = (a +  std::sqrt(a * a + b * 4. * c__)) / (c__ * 2.);
 		}
 	    }
 
@@ -7412,14 +7360,14 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 	    b = z__[*n] * z__[*n] * delsq;
 
 	    if (a < 0.) {
-		tau = b * 2. / (sqrt(a * a + b * 4. * c__) - a);
+		tau = b * 2. / ( std::sqrt(a * a + b * 4. * c__) - a);
 	    } else {
-		tau = (a + sqrt(a * a + b * 4. * c__)) / (c__ * 2.);
+		tau = (a +  std::sqrt(a * a + b * 4. * c__)) / (c__ * 2.);
 	    }
 
 	}
 
-	eta = tau / (d__[*n] + sqrt(d__[*n] * d__[*n] + tau));
+	eta = tau / (d__[*n] +  std::sqrt(d__[*n] * d__[*n] + tau));
 
 	*sigma = d__[*n] + eta;
 	i__1 = *n;
@@ -7438,17 +7386,17 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 	    dpsi += temp * temp;
 	    erretm += psi;
 	}
-	erretm = fabs(erretm);
+	erretm = std::abs(erretm);
 
 	temp = z__[*n] / (delta[*n] * work[*n]);
 	phi = z__[*n] * temp;
 	dphi = temp * temp;
-	erretm = (-phi - psi) * 8. + erretm - phi + rhoinv + fabs(tau) * (dpsi 
+	erretm = (-phi - psi) * 8. + erretm - phi + rhoinv + std::abs(tau) * (dpsi 
 		+ dphi);
 
 	w = rhoinv + phi + psi;
 
-	if (fabs(w) <= eps * erretm) {
+	if (std::abs(w) <= eps * erretm) {
 	    goto L240;
 	}
 
@@ -7459,14 +7407,14 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 	a = (dtnsq + dtnsq1) * w - dtnsq * dtnsq1 * (dpsi + dphi);
 	b = dtnsq * dtnsq1 * w;
 	if (c__ < 0.) {
-	    c__ = fabs(c__);
+	    c__ = std::abs(c__);
 	}
-	if ( fabs(c__)<PLUMED_GMX_DOUBLE_MIN) {
+	if ( std::abs(c__)<PLUMED_GMX_DOUBLE_MIN) {
 	    eta = *rho - *sigma * *sigma;
 	} else if (a >= 0.) {
-	    eta = (a + sqrt(fabs(a * a - b * 4. * c__))) / (c__  * 2.);
+	    eta = (a +  std::sqrt(std::abs(a * a - b * 4. * c__))) / (c__  * 2.);
 	} else {
-	  eta = b * 2. / (a - sqrt(fabs(a * a - b * 4. * c__)));
+	  eta = b * 2. / (a -  std::sqrt(std::abs(a * a - b * 4. * c__)));
 	}
 
 	if (w * eta > 0.) {
@@ -7478,7 +7426,7 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 	}
 
 	tau += eta;
-	eta /= *sigma + sqrt(eta + *sigma * *sigma);
+	eta /= *sigma +  std::sqrt(eta + *sigma * *sigma);
 	i__1 = *n;
 	for (j = 1; j <= i__1; ++j) {
 	    delta[j] -= eta;
@@ -7497,12 +7445,12 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 	    dpsi += temp * temp;
 	    erretm += psi;
 	}
-	erretm = fabs(erretm);
+	erretm = std::abs(erretm);
 
 	temp = z__[*n] / (work[*n] * delta[*n]);
 	phi = z__[*n] * temp;
 	dphi = temp * temp;
-	erretm = (-phi - psi) * 8. + erretm - phi + rhoinv + fabs(tau) * (dpsi 
+	erretm = (-phi - psi) * 8. + erretm - phi + rhoinv + std::abs(tau) * (dpsi 
 		+ dphi);
 
 	w = rhoinv + phi + psi;
@@ -7511,7 +7459,7 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 
 	for (niter = iter; niter <= 20; ++niter) {
 
-	    if (fabs(w) <= eps * erretm) {
+	    if (std::abs(w) <= eps * erretm) {
 		goto L240;
 	    }
 	    dtnsq1 = work[*n - 1] * delta[*n - 1];
@@ -7520,9 +7468,9 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 	    a = (dtnsq + dtnsq1) * w - dtnsq1 * dtnsq * (dpsi + dphi);
 	    b = dtnsq1 * dtnsq * w;
 	    if (a >= 0.) {
-		eta = (a + sqrt(fabs(a * a - b * 4. * c__))) / (c__ * 2.);
+		eta = (a +  std::sqrt(std::abs(a * a - b * 4. * c__))) / (c__ * 2.);
 	    } else {
-	      eta = b * 2. / (a - sqrt(fabs(a * a - b * 4. * c__)));
+	      eta = b * 2. / (a -  std::sqrt(std::abs(a * a - b * 4. * c__)));
 	    }
 
 	    if (w * eta > 0.) {
@@ -7534,7 +7482,7 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 	    }
 
 	    tau += eta;
-	    eta /= *sigma + sqrt(eta + *sigma * *sigma);
+	    eta /= *sigma +  std::sqrt(eta + *sigma * *sigma);
 	    i__1 = *n;
 	    for (j = 1; j <= i__1; ++j) {
 		delta[j] -= eta;
@@ -7553,12 +7501,12 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 		dpsi += temp * temp;
 		erretm += psi;
 	    }
-	    erretm = fabs(erretm);
+	    erretm = std::abs(erretm);
 
 	    temp = z__[*n] / (work[*n] * delta[*n]);
 	    phi = z__[*n] * temp;
 	    dphi = temp * temp;
-	    erretm = (-phi - psi) * 8. + erretm - phi + rhoinv + fabs(tau) * (
+	    erretm = (-phi - psi) * 8. + erretm - phi + rhoinv + std::abs(tau) * (
 		    dpsi + dphi);
 
 	    w = rhoinv + phi + psi;
@@ -7574,7 +7522,7 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 
 	delsq = (d__[ip1] - d__[*i__]) * (d__[ip1] + d__[*i__]);
 	delsq2 = delsq / 2.;
-	temp = delsq2 / (d__[*i__] + sqrt(d__[*i__] * d__[*i__] + delsq2));
+	temp = delsq2 / (d__[*i__] +  std::sqrt(d__[*i__] * d__[*i__] + delsq2));
 	i__1 = *n;
 	for (j = 1; j <= i__1; ++j) {
 	    work[j] = d__[j] + d__[*i__] + temp;
@@ -7604,11 +7552,11 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 	    a = c__ * delsq + z__[*i__] * z__[*i__] + z__[ip1] * z__[ip1];
 	    b = z__[*i__] * z__[*i__] * delsq;
 	    if (a > 0.) {
-		tau = b * 2. / (a + sqrt(fabs(a * a - b * 4. * c__)));
+		tau = b * 2. / (a +  std::sqrt(std::abs(a * a - b * 4. * c__)));
 	    } else {
-		tau = (a - sqrt(fabs(a * a - b * 4. * c__))) / (c__ * 2.);
+		tau = (a -  std::sqrt(std::abs(a * a - b * 4. * c__))) / (c__ * 2.);
 	    }
-	    eta = tau / (d__[*i__] + sqrt(d__[*i__] * d__[*i__] + tau));
+	    eta = tau / (d__[*i__] +  std::sqrt(d__[*i__] * d__[*i__] + tau));
 	} else {
 
 	    orgati = 0;
@@ -7617,11 +7565,11 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 	    a = c__ * delsq - z__[*i__] * z__[*i__] - z__[ip1] * z__[ip1];
 	    b = z__[ip1] * z__[ip1] * delsq;
 	    if (a < 0.) {
-		tau = b * 2. / (a - sqrt(fabs(a * a + b * 4. * c__)));
+		tau = b * 2. / (a -  std::sqrt(std::abs(a * a + b * 4. * c__)));
 	    } else {
-		tau = -(a + sqrt(fabs(a * a + b * 4. * c__))) /	(c__ * 2.);
+		tau = -(a +  std::sqrt(std::abs(a * a + b * 4. * c__))) /	(c__ * 2.);
 	    }
-	    eta = tau / (d__[ip1] + sqrt(fabs(d__[ip1] * d__[ip1] + tau)));
+	    eta = tau / (d__[ip1] +  std::sqrt(std::abs(d__[ip1] * d__[ip1] + tau)));
 	}
 
 	if (orgati) {
@@ -7654,7 +7602,7 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 	    dpsi += temp * temp;
 	    erretm += psi;
 	}
-	erretm = fabs(erretm);
+	erretm = std::abs(erretm);
 
 	dphi = 0.;
 	phi = 0.;
@@ -7686,10 +7634,10 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 	dw = dpsi + dphi + temp * temp;
 	temp = z__[ii] * temp;
 	w += temp;
-	erretm = (phi - psi) * 8. + erretm + rhoinv * 2. + fabs(temp) * 3. + 
-		fabs(tau) * dw;
+	erretm = (phi - psi) * 8. + erretm + rhoinv * 2. + std::abs(temp) * 3. + 
+		std::abs(tau) * dw;
 
-	if (fabs(w) <= eps * erretm) {
+	if (std::abs(w) <= eps * erretm) {
 	    goto L240;
 	}
 
@@ -7712,8 +7660,8 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 	    }
 	    a = (dtipsq + dtisq) * w - dtipsq * dtisq * dw;
 	    b = dtipsq * dtisq * w;
-	    if ( fabs(c__)<PLUMED_GMX_DOUBLE_MIN) {
-		if ( fabs(a)<PLUMED_GMX_DOUBLE_MIN) {
+	    if ( std::abs(c__)<PLUMED_GMX_DOUBLE_MIN) {
+		if ( std::abs(a)<PLUMED_GMX_DOUBLE_MIN) {
 		    if (orgati) {
 			a = z__[*i__] * z__[*i__] + dtipsq * dtipsq * (dpsi + 
 				dphi);
@@ -7724,9 +7672,9 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 		}
 		eta = b / a;
 	    } else if (a <= 0.) {
-		eta = (a - sqrt(fabs(a * a - b * 4. * c__))) / (c__ * 2.);
+		eta = (a -  std::sqrt(std::abs(a * a - b * 4. * c__))) / (c__ * 2.);
 	    } else {
-		eta = b * 2. / (a + sqrt(fabs(a * a - b * 4. * c__)));
+		eta = b * 2. / (a +  std::sqrt(std::abs(a * a - b * 4. * c__)));
 	    }
 	} else {
 
@@ -7785,7 +7733,7 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 	}
 
 	tau += eta;
-	eta /= *sigma + sqrt(*sigma * *sigma + eta);
+	eta /= *sigma +  std::sqrt(*sigma * *sigma + eta);
 
 	prew = w;
 
@@ -7806,7 +7754,7 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 	    dpsi += temp * temp;
 	    erretm += psi;
 	}
-	erretm = fabs(erretm);
+	erretm = std::abs(erretm);
 
 	dphi = 0.;
 	phi = 0.;
@@ -7822,8 +7770,8 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 	dw = dpsi + dphi + temp * temp;
 	temp = z__[ii] * temp;
 	w = rhoinv + phi + psi + temp;
-	erretm = (phi - psi) * 8. + erretm + rhoinv * 2. + fabs(temp) * 3. + 
-		fabs(tau) * dw;
+	erretm = (phi - psi) * 8. + erretm + rhoinv * 2. + std::abs(temp) * 3. + 
+		std::abs(tau) * dw;
 
 	if (w <= 0.) {
 	    sg2lb = (sg2lb > tau) ? sg2lb : tau;
@@ -7833,11 +7781,11 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 
 	swtch = 0;
 	if (orgati) {
-	    if (-w > fabs(prew) / 10.) {
+	    if (-w > std::abs(prew) / 10.) {
 		swtch = 1;
 	    }
 	} else {
-	    if (w > fabs(prew) / 10.) {
+	    if (w > std::abs(prew) / 10.) {
 		swtch = 1;
 	    }
 	}
@@ -7846,7 +7794,7 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 
 	for (niter = iter; niter <= 20; ++niter) {
 
-	    if (fabs(w) <= eps * erretm) {
+	    if (std::abs(w) <= eps * erretm) {
 		goto L240;
 	    }
 
@@ -7872,8 +7820,8 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 		}
 		a = (dtipsq + dtisq) * w - dtipsq * dtisq * dw;
 		b = dtipsq * dtisq * w;
-		if (fabs(c__)<PLUMED_GMX_DOUBLE_MIN) {
-		    if (fabs(a)<PLUMED_GMX_DOUBLE_MIN) {
+		if (std::abs(c__)<PLUMED_GMX_DOUBLE_MIN) {
+		    if (std::abs(a)<PLUMED_GMX_DOUBLE_MIN) {
 			if (! swtch) {
 			    if (orgati) {
 				a = z__[*i__] * z__[*i__] + dtipsq * dtipsq * 
@@ -7888,9 +7836,9 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 		    }
 		    eta = b / a;
 		} else if (a <= 0.) {
-		  eta = (a - sqrt(fabs(a * a - b * 4. * c__))) / (c__ * 2.);
+		  eta = (a -  std::sqrt(std::abs(a * a - b * 4. * c__))) / (c__ * 2.);
 		} else {
-		  eta = b * 2. / (a + sqrt(fabs(a * a - b * 4. * c__)));
+		  eta = b * 2. / (a +  std::sqrt(std::abs(a * a - b * 4. * c__)));
 		}
 	    } else {
 
@@ -7956,7 +7904,7 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 	    }
 
 	    tau += eta;
-	    eta /= *sigma + sqrt(*sigma * *sigma + eta);
+	    eta /= *sigma +  std::sqrt(*sigma * *sigma + eta);
 
 	    *sigma += eta;
 	    i__1 = *n;
@@ -7977,7 +7925,7 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 		dpsi += temp * temp;
 		erretm += psi;
 	    }
-	    erretm = fabs(erretm);
+	    erretm = std::abs(erretm);
 
 	    dphi = 0.;
 	    phi = 0.;
@@ -7993,9 +7941,9 @@ PLUMED_BLAS_F77_FUNC(dlasd4,DLASD4)(int *n,
 	    dw = dpsi + dphi + temp * temp;
 	    temp = z__[ii] * temp;
 	    w = rhoinv + phi + psi + temp;
-	    erretm = (phi - psi) * 8. + erretm + rhoinv * 2. + fabs(temp) * 3. 
-		    + fabs(tau) * dw;
-	    if (w * prew > 0. && fabs(w) > fabs(prew) / 10.) {
+	    erretm = (phi - psi) * 8. + erretm + rhoinv * 2. + std::abs(temp) * 3. 
+		    + std::abs(tau) * dw;
+	    if (w * prew > 0. && std::abs(w) > std::abs(prew) / 10.) {
 		swtch = ! swtch;
 	    }
 
@@ -8016,7 +7964,7 @@ L240:
 } 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 
 #include "blas/blas.h"
@@ -8048,9 +7996,9 @@ PLUMED_BLAS_F77_FUNC(dlasd5,DLASD5)(int *i__,
 	    b = delsq + *rho * (z__[1] * z__[1] + z__[2] * z__[2]);
 	    c__ = *rho * z__[1] * z__[1] * delsq;
 
-	    tau = c__ * 2. / (b + sqrt(fabs(b * b - c__ * 4.)));
+	    tau = c__ * 2. / (b +  std::sqrt(std::abs(b * b - c__ * 4.)));
 
-	    tau /= d__[1] + sqrt(d__[1] * d__[1] + tau);
+	    tau /= d__[1] +  std::sqrt(d__[1] * d__[1] + tau);
 	    *dsigma = d__[1] + tau;
 	    delta[1] = -tau;
 	    delta[2] = del - tau;
@@ -8061,12 +8009,12 @@ PLUMED_BLAS_F77_FUNC(dlasd5,DLASD5)(int *i__,
 	    c__ = *rho * z__[2] * z__[2] * delsq;
 
 	    if (b > 0.) {
-		tau = c__ * -2. / (b + sqrt(b * b + c__ * 4.));
+		tau = c__ * -2. / (b +  std::sqrt(b * b + c__ * 4.));
 	    } else {
-		tau = (b - sqrt(b * b + c__ * 4.)) / 2.;
+		tau = (b -  std::sqrt(b * b + c__ * 4.)) / 2.;
 	    }
 
-	    tau /= d__[2] + sqrt(fabs(d__[2] * d__[2] + tau));
+	    tau /= d__[2] +  std::sqrt(std::abs(d__[2] * d__[2] + tau));
 	    *dsigma = d__[2] + tau;
 	    delta[1] = -(del + tau);
 	    delta[2] = -tau;
@@ -8079,11 +8027,11 @@ PLUMED_BLAS_F77_FUNC(dlasd5,DLASD5)(int *i__,
 	c__ = *rho * z__[2] * z__[2] * delsq;
 
 	if (b > 0.) {
-	    tau = (b + sqrt(b * b + c__ * 4.)) / 2.;
+	    tau = (b +  std::sqrt(b * b + c__ * 4.)) / 2.;
 	} else {
-	    tau = c__ * 2. / (-b + sqrt(b * b + c__ * 4.));
+	    tau = c__ * 2. / (-b +  std::sqrt(b * b + c__ * 4.));
 	}
-	tau /= d__[2] + sqrt(d__[2] * d__[2] + tau);
+	tau /= d__[2] +  std::sqrt(d__[2] * d__[2] + tau);
 	*dsigma = d__[2] + tau;
 	delta[1] = -(del + tau);
 	delta[2] = -tau;
@@ -8095,7 +8043,7 @@ PLUMED_BLAS_F77_FUNC(dlasd5,DLASD5)(int *i__,
 } 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "blas/blas.h"
 #include "lapack.h"
 
@@ -8176,13 +8124,13 @@ PLUMED_BLAS_F77_FUNC(dlasd6,DLASD6)(int *icompq,
     idxc = idx + n;
     idxp = idxc + n;
 
-    d__1 = fabs(*alpha); 
-    d__2 = fabs(*beta);
+    d__1 = std::abs(*alpha); 
+    d__2 = std::abs(*beta);
     orgnrm = (d__1 > d__2) ? d__1 : d__2;
     d__[*nl + 1] = 0.;
     i__1 = n;
     for (i__ = 1; i__ <= i__1; ++i__) {
-      d__1 = fabs(d__[i__]);
+      d__1 = std::abs(d__[i__]);
 	if (d__1 > orgnrm)
 	    orgnrm = d__1;
     }
@@ -8217,7 +8165,7 @@ PLUMED_BLAS_F77_FUNC(dlasd6,DLASD6)(int *icompq,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "blas/blas.h"
@@ -8342,17 +8290,17 @@ PLUMED_BLAS_F77_FUNC(dlasd7,DLASD7)(int *icompq,
 
     eps = PLUMED_GMX_DOUBLE_EPS;
 
-    d__1 = fabs(*alpha);
-    d__2 = fabs(*beta);
+    d__1 = std::abs(*alpha);
+    d__2 = std::abs(*beta);
     tol = (d__1>d__2) ? d__1 : d__2;
-    d__2 = fabs(d__[n]);
+    d__2 = std::abs(d__[n]);
     tol = eps * 64. * ((d__2>tol) ? d__2 : tol);
 
     *k = 1;
     k2 = n + 1;
     i__1 = n;
     for (j = 2; j <= i__1; ++j) {
-	if (fabs(z__[j]) <= tol) {
+	if (std::abs(z__[j]) <= tol) {
 
 	    --k2;
 	    idxp[k2] = j;
@@ -8371,13 +8319,13 @@ L80:
     if (j > n) {
 	goto L90;
     }
-    if (fabs(z__[j]) <= tol) {
+    if (std::abs(z__[j]) <= tol) {
 
 	--k2;
 	idxp[k2] = j;
     } else {
 
-	if (fabs(d__[j] - d__[jprev]) <= tol) {
+	if (std::abs(d__[j] - d__[jprev]) <= tol) {
 
 	    *s = z__[jprev];
 	    *c__ = z__[j];
@@ -8449,7 +8397,7 @@ L100:
 
     dsigma[1] = 0.;
     hlftol = tol / 2.;
-    if (fabs(dsigma[2]) <= hlftol) {
+    if (std::abs(dsigma[2]) <= hlftol) {
 	dsigma[2] = hlftol;
     }
     if (m > n) {
@@ -8465,7 +8413,7 @@ L100:
 	PLUMED_BLAS_F77_FUNC(drot,DROT)(&c__1, &vf[m], &c__1, &vf[1], &c__1, c__, s);
 	PLUMED_BLAS_F77_FUNC(drot,DROT)(&c__1, &vl[m], &c__1, &vl[1], &c__1, c__, s);
     } else {
-	if (fabs(z1) <= tol) {
+	if (std::abs(z1) <= tol) {
 	    z__[1] = tol;
 	} else {
 	    z__[1] = z1;
@@ -8486,7 +8434,7 @@ L100:
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "blas/blas.h"
 #include "lapack.h"
 
@@ -8510,7 +8458,6 @@ PLUMED_BLAS_F77_FUNC(dlasd8,DLASD8)(int *icompq,
 {
     int difr_dim1, difr_offset, i__1, i__2;
     double d__2;
-    double *p1,*p2,t1,t2;
 
     int i__, j;
     double dj, rho;
@@ -8539,11 +8486,8 @@ PLUMED_BLAS_F77_FUNC(dlasd8,DLASD8)(int *icompq,
 
     *info = 0;
 
-    p1 = &t1;
-    p2 = &t2;
-
     if (*k == 1) {
-	d__[1] = fabs(z__[1]);
+	d__[1] = std::abs(z__[1]);
 	difl[1] = d__[1];
 	if (*icompq == 1) {
 	    difl[2] = 1.;
@@ -8552,14 +8496,6 @@ PLUMED_BLAS_F77_FUNC(dlasd8,DLASD8)(int *icompq,
 	return;
     }
 
-    i__1 = *k;
-    for (i__ = 1; i__ <= i__1; ++i__) {
-      t1 = dsigma[i__];
-      t2 = dsigma[i__];
-      /* force store and reload from memory */
-      d__2 = (*p1) + (*p2) - dsigma[i__];
-    }
-
     iwk1 = 1;
     iwk2 = iwk1 + *k;
     iwk3 = iwk2 + *k;
@@ -8599,7 +8535,7 @@ PLUMED_BLAS_F77_FUNC(dlasd8,DLASD8)(int *icompq,
 
     i__1 = *k;
     for (i__ = 1; i__ <= i__1; ++i__) {
-	d__2 = sqrt(fabs(work[iwk3i + i__]));
+	d__2 =  std::sqrt(std::abs(work[iwk3i + i__]));
 	z__[i__] = (z__[i__] > 0) ? d__2 : -d__2;
     }
 
@@ -8615,19 +8551,11 @@ PLUMED_BLAS_F77_FUNC(dlasd8,DLASD8)(int *icompq,
 	work[j] = -z__[j] / diflj / (dsigma[j] + dj);
 	i__2 = j - 1;
 	for (i__ = 1; i__ <= i__2; ++i__) {
-	  t1 = dsigma[i__];
-	  t2 = dsigj;
-	  /* force store and reload from memory */
-	  t1 = (*p1) + (*p2) - diflj;
-	  work[i__] = z__[i__] / t1 / ( dsigma[i__] + dj);
+        work[i__] = z__[i__] / (dsigma[i__] + dsigj - diflj) / ( dsigma[i__] + dj);
 	}
 	i__2 = *k;
 	for (i__ = j + 1; i__ <= i__2; ++i__) {
-	  t1 = dsigma[i__];
-	  t2 = dsigjp;
-	  /* force store and reload from memory */
-	  t1 = (*p1) + (*p2) - difrj;
-	    work[i__] = z__[i__] / t1 / (dsigma[i__] + dj);
+	    work[i__] = z__[i__] / (dsigma[i__] + dsigjp - difrj) / (dsigma[i__] + dj);
 	}
 	temp = PLUMED_BLAS_F77_FUNC(dnrm2,DNRM2)(k, &work[1], &c__1);
 	work[iwk2i + j] = PLUMED_BLAS_F77_FUNC(ddot,DDOT)(k, &work[1], &c__1, &vf[1], &c__1) / temp;
@@ -8852,7 +8780,6 @@ PLUMED_BLAS_F77_FUNC(dlasda,DLASDA)(int *icompq,
 	    lf = 1;
 	    ll = 1;
 	} else {
-	    i__1 = lvl - 1;
 	    lf = (1 << (lvl-1));
 	    ll = (lf << 1) - 1;
 	}
@@ -8863,7 +8790,6 @@ PLUMED_BLAS_F77_FUNC(dlasda,DLASDA)(int *icompq,
 	    nl = iwork[ndiml + im1];
 	    nr = iwork[ndimr + im1];
 	    nlf = ic - nl;
-	    nrf = ic + 1;
 	    if (i__ == ll) {
 		sqrei = *sqre;
 	    } else {
@@ -8906,7 +8832,7 @@ PLUMED_BLAS_F77_FUNC(dlasda,DLASDA)(int *icompq,
 
 }
 }
-#include <ctype.h>
+#include <cctype>
 
 #include "blas/blas.h"
 #include "lapack.h"
@@ -8934,7 +8860,7 @@ PLUMED_BLAS_F77_FUNC(dlasdq,DLASDQ)(const char *uplo,
                         double *work, 
                         int *info)
 {
-    const char xuplo=toupper(*uplo);
+    const char xuplo=std::toupper(*uplo);
     int c_dim1, c_offset, u_dim1, u_offset, vt_dim1, vt_offset, i__1, 
 	    i__2;
     int c__1 = 1;
@@ -9108,7 +9034,7 @@ PLUMED_BLAS_F77_FUNC(dlasdq,DLASDQ)(const char *uplo,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 
 #include "blas/blas.h"
@@ -9128,7 +9054,7 @@ PLUMED_BLAS_F77_FUNC(dlasdt,DLASDT)(int *n,
   double temp;
   int i,il,ir,llst,nlvl,ncrnt;
 
-  temp = log( ((double) maxn) / ((double)(*msub+1))) / log(2.0);
+  temp = std::log( ((double) maxn) / ((double)(*msub+1))) / std::log(2.0);
   
   *lvl = 1 + (int) temp;
 
@@ -9159,7 +9085,7 @@ PLUMED_BLAS_F77_FUNC(dlasdt,DLASDT)(int *n,
 }
 }
 }
-#include <ctype.h>
+#include <cctype>
 #include "lapack.h"
 
 
@@ -9177,7 +9103,7 @@ PLUMED_BLAS_F77_FUNC(dlaset,DLASET)(const char *uplo,
 	int *lda)
 {
   int i,j,k;
-  const char ch=toupper(*uplo);
+  const char ch=std::toupper(*uplo);
 
   if(ch=='U') {
     for(j=1;j<*n;j++) {
@@ -9204,7 +9130,7 @@ PLUMED_BLAS_F77_FUNC(dlaset,DLASET)(const char *uplo,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "blas/blas.h"
 #include "lapack.h"
 #include "lapack_limits.h"
@@ -9239,14 +9165,14 @@ PLUMED_BLAS_F77_FUNC(dlasq1,DLASQ1)(int *n,
   }
   
   for(i=0;i<*n-1;i++) {
-    d[i] = fabs(d[i]);
-    dtemp = fabs(e[i]);
+    d[i] = std::abs(d[i]);
+    dtemp = std::abs(e[i]);
     if(dtemp>sigmx)
       sigmx=dtemp;
   }
-  d[*n-1] = fabs(d[*n-1]);
+  d[*n-1] = std::abs(d[*n-1]);
   
-  if(fabs(sigmx)<PLUMED_GMX_DOUBLE_MIN) {
+  if(std::abs(sigmx)<PLUMED_GMX_DOUBLE_MIN) {
     PLUMED_BLAS_F77_FUNC(dlasrt,DLASRT)("D",n,d,&iinfo);
     return;
   }
@@ -9260,7 +9186,7 @@ PLUMED_BLAS_F77_FUNC(dlasq1,DLASQ1)(int *n,
    * Squaring input data makes scaling by a power of the
    * radix pointless.
    */
-  scale = sqrt(eps/safemin);
+  scale =  std::sqrt(eps/safemin);
   i = 1;
   j = 2;
   PLUMED_BLAS_F77_FUNC(dcopy,DCOPY)(n,d,&i,work,&j);
@@ -9284,14 +9210,14 @@ PLUMED_BLAS_F77_FUNC(dlasq1,DLASQ1)(int *n,
   k = 1;
   if(*info==0) {
     for(i=0;i<*n;i++)
-      d[i]=sqrt(work[i]);
+      d[i]= std::sqrt(work[i]);
     PLUMED_BLAS_F77_FUNC(dlascl,DLASCL)("G",&j,&j,&scale,&sigmx,n,&k,d,n,&iinfo);
   }
   return;
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 #include "lapack_limits.h"
 
@@ -9373,9 +9299,9 @@ PLUMED_BLAS_F77_FUNC(dlasq2,DLASQ2)(int *n,
 	    t = (z__[1] - z__[3] + z__[2]) * .5;
 	    s = z__[3] * (z__[2] / t);
 	    if (s <= t) {
-		s = z__[3] * (z__[2] / (t * (sqrt(s / t + 1.) + 1.)));
+		s = z__[3] * (z__[2] / (t * ( std::sqrt(s / t + 1.) + 1.)));
 	    } else {
-		s = z__[3] * (z__[2] / (t + sqrt(t) * sqrt(t + s)));
+		s = z__[3] * (z__[2] / (t +  std::sqrt(t) * std::sqrt(t + s)));
 	    }
 	    t = z__[1] + (s + z__[2]);
 	    z__[3] *= z__[1] / t;
@@ -9418,9 +9344,8 @@ PLUMED_BLAS_F77_FUNC(dlasq2,DLASQ2)(int *n,
     d__ += z__[(*n << 1) - 1];
     d__1 = qmax, d__2 = z__[(*n << 1) - 1];
     qmax = (d__1>d__2) ? d__1 : d__2;
-    zmax = (qmax>zmax) ? qmax : zmax;
 
-    if (fabs(e)<PLUMED_GMX_DOUBLE_MIN) {
+    if (std::abs(e)<PLUMED_GMX_DOUBLE_MIN) {
 	i__1 = *n;
 	for (k = 2; k <= i__1; ++k) {
 	    z__[k] = z__[(k << 1) - 1];
@@ -9432,7 +9357,7 @@ PLUMED_BLAS_F77_FUNC(dlasq2,DLASQ2)(int *n,
 
     trace = d__ + e;
 
-    if (fabs(trace)<PLUMED_GMX_DOUBLE_MIN) {
+    if (std::abs(trace)<PLUMED_GMX_DOUBLE_MIN) {
 	z__[(*n << 1) - 1] = 0.;
 	return;
     }
@@ -9445,13 +9370,13 @@ PLUMED_BLAS_F77_FUNC(dlasq2,DLASQ2)(int *n,
     if(neginf>=0.0)
       ieee = 0;
     negzro = one/(neginf+one);
-    if(fabs(negzro)>PLUMED_GMX_DOUBLE_MIN)
+    if(std::abs(negzro)>PLUMED_GMX_DOUBLE_MIN)
       ieee = 0;
     neginf = one/negzro;
     if(neginf>=0)
       ieee = 0;
     newzro = negzro + zero;
-    if(fabs(newzro-zero)>PLUMED_GMX_DOUBLE_MIN)
+    if(std::abs(newzro-zero)>PLUMED_GMX_DOUBLE_MIN)
       ieee = 0;
     posinf = one /newzro;
     if(posinf<=one)
@@ -9560,7 +9485,7 @@ PLUMED_BLAS_F77_FUNC(dlasq2,DLASQ2)(int *n,
 
 	emax = 0.;
 	if (n0 > i0) {
-	    emin = fabs(z__[(n0 << 2) - 5]);
+	    emin = std::abs(z__[(n0 << 2) - 5]);
 	} else {
 	    emin = 0.;
 	}
@@ -9622,7 +9547,7 @@ L100:
 	}
 
 
-	d__1 = 0., d__2 = qmin - sqrt(qmin) * 2. * sqrt(emax);
+	d__1 = 0., d__2 = qmin -  std::sqrt(qmin) * 2. * std::sqrt(emax);
 	dmin__ = -((d__1>d__2) ? d__1 : d__2);
 
 	nbig = (n0 - i0 + 1) * 30;
@@ -9710,7 +9635,7 @@ L170:
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "lapack.h"
@@ -9801,9 +9726,9 @@ L40:
 	t = (z__[nn - 7] - z__[nn - 3] + z__[nn - 5]) * .5;
 	s = z__[nn - 3] * (z__[nn - 5] / t);
 	if (s <= t) {
-	    s = z__[nn - 3] * (z__[nn - 5] / (t * (sqrt(s / t + 1.) + 1.)));
+	    s = z__[nn - 3] * (z__[nn - 5] / (t * ( std::sqrt(s / t + 1.) + 1.)));
 	} else {
-	    s = z__[nn - 3] * (z__[nn - 5] / (t + sqrt(t) * sqrt(t + s)));
+	    s = z__[nn - 3] * (z__[nn - 5] / (t +  std::sqrt(t) * std::sqrt(t + s)));
 	}
 	t = z__[nn - 7] + (s + z__[nn - 5]);
 	z__[nn - 3] *= z__[nn - 7] / t;
@@ -9875,7 +9800,7 @@ L70:
 	goto L90;
 
     } else if (*dmin__ < 0. && dmin1 > 0. && z__[4*(*n0 - 1) - *pp] < tol *
-	     (*sigma + dn1) && fabs(dn) < tol * *sigma) {
+	     (*sigma + dn1) && std::abs(dn) < tol * *sigma) {
 
 	z__[4*(*n0 - 1) - *pp + 2] = 0.;
 	*dmin__ = 0.;
@@ -9923,7 +9848,7 @@ L90:
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "lapack.h"
@@ -9967,15 +9892,15 @@ PLUMED_BLAS_F77_FUNC(dlasq4,DLASQ4)(int *i0,
     nn = (*n0 << 2) + *pp;
     if (*n0in == *n0) {
 
-	if ( fabs(*dmin__ - *dn)<PLUMED_GMX_DOUBLE_EPS*fabs(*dmin__ + *dn) ||
-         fabs(*dmin__ - *dn1)<PLUMED_GMX_DOUBLE_EPS*fabs(*dmin__ + *dn1)) {
+	if ( std::abs(*dmin__ - *dn)<PLUMED_GMX_DOUBLE_EPS*std::abs(*dmin__ + *dn) ||
+         std::abs(*dmin__ - *dn1)<PLUMED_GMX_DOUBLE_EPS*std::abs(*dmin__ + *dn1)) {
 
-	    b1 = sqrt(z__[nn - 3]) * sqrt(z__[nn - 5]);
-	    b2 = sqrt(z__[nn - 7]) * sqrt(z__[nn - 9]);
+	    b1 =  std::sqrt(z__[nn - 3]) * std::sqrt(z__[nn - 5]);
+	    b2 =  std::sqrt(z__[nn - 7]) * std::sqrt(z__[nn - 9]);
 	    a2 = z__[nn - 7] + z__[nn - 5];
 
-        if ( fabs(*dmin__ - *dn)<PLUMED_GMX_DOUBLE_EPS*fabs(*dmin__ + *dn) &&
-             fabs(*dmin1 - *dn1)<PLUMED_GMX_DOUBLE_EPS*fabs(*dmin1 + *dn1)) {
+        if ( std::abs(*dmin__ - *dn)<PLUMED_GMX_DOUBLE_EPS*std::abs(*dmin__ + *dn) &&
+             std::abs(*dmin1 - *dn1)<PLUMED_GMX_DOUBLE_EPS*std::abs(*dmin1 + *dn1)) {
 
             gap2 = *dmin2 - a2 - *dmin2 * .25;
 		if (gap2 > 0. && gap2 > b2) {
@@ -10005,7 +9930,7 @@ PLUMED_BLAS_F77_FUNC(dlasq4,DLASQ4)(int *i0,
 
 		*ttype = -4;
 		s = *dmin__ * .25;
-		if (fabs(*dmin__ - *dn)<PLUMED_GMX_DOUBLE_EPS*fabs(*dmin__ + *dn)) {
+		if (std::abs(*dmin__ - *dn)<PLUMED_GMX_DOUBLE_EPS*std::abs(*dmin__ + *dn)) {
 		    gam = *dn;
 		    a2 = 0.;
 		    if (z__[nn - 5] > z__[nn - 7]) {
@@ -10015,7 +9940,6 @@ PLUMED_BLAS_F77_FUNC(dlasq4,DLASQ4)(int *i0,
 		    np = nn - 9;
 		} else {
 		    np = nn - (*pp << 1);
-		    b2 = z__[np - 2];
 		    gam = *dn1;
 		    if (z__[np - 4] > z__[np - 2]) {
 			return;
@@ -10032,7 +9956,7 @@ PLUMED_BLAS_F77_FUNC(dlasq4,DLASQ4)(int *i0,
 		a2 += b2;
 		i__1 = (*i0 << 2) - 1 + *pp;
 		for (i4 = np; i4 >= i__1; i4 += -4) {
-		    if (fabs(b2)<PLUMED_GMX_DOUBLE_MIN) {
+		    if (std::abs(b2)<PLUMED_GMX_DOUBLE_MIN) {
 			goto L20;
 		    }
 		    b1 = b2;
@@ -10050,10 +9974,10 @@ L20:
 
 
 		if (a2 < .563) {
-		    s = gam * (1. - sqrt(a2)) / (a2 + 1.);
+		    s = gam * (1. -  std::sqrt(a2)) / (a2 + 1.);
 		}
 	    }
-	} else if (fabs(*dmin__ - *dn2)<PLUMED_GMX_DOUBLE_EPS*fabs(*dmin__ + *dn2)) {
+	} else if (std::abs(*dmin__ - *dn2)<PLUMED_GMX_DOUBLE_EPS*std::abs(*dmin__ + *dn2)) {
 
 	    *ttype = -5;
 	    s = *dmin__ * .25;
@@ -10073,7 +9997,7 @@ L20:
 		a2 += b2;
 		i__1 = (*i0 << 2) - 1 + *pp;
 		for (i4 = nn - 17; i4 >= i__1; i4 += -4) {
-		    if (fabs(b2)<PLUMED_GMX_DOUBLE_MIN) {
+		    if (std::abs(b2)<PLUMED_GMX_DOUBLE_MIN) {
 			goto L40;
 		    }
 		    b1 = b2;
@@ -10091,7 +10015,7 @@ L40:
 	    }
 
 	    if (a2 < .563) {
-		s = gam * (1. - sqrt(a2)) / (a2 + 1.);
+		s = gam * (1. -  std::sqrt(a2)) / (a2 + 1.);
 	    }
 	} else {
 
@@ -10108,8 +10032,8 @@ L40:
 
     } else if (*n0in == *n0 + 1) {
 
-        if ( fabs(*dmin1 - *dn1)<PLUMED_GMX_DOUBLE_EPS*fabs(*dmin1 + *dn1) &&
-             fabs(*dmin2 - *dn2)<PLUMED_GMX_DOUBLE_EPS*fabs(*dmin2 + *dn2)) {
+        if ( std::abs(*dmin1 - *dn1)<PLUMED_GMX_DOUBLE_EPS*std::abs(*dmin1 + *dn1) &&
+             std::abs(*dmin2 - *dn2)<PLUMED_GMX_DOUBLE_EPS*std::abs(*dmin2 + *dn2)) {
 
 	    *ttype = -7;
 	    s = *dmin1 * .333;
@@ -10118,7 +10042,7 @@ L40:
 	    }
 	    b1 = z__[nn - 5] / z__[nn - 7];
 	    b2 = b1;
-	    if (fabs(b2)<PLUMED_GMX_DOUBLE_MIN) {
+	    if (std::abs(b2)<PLUMED_GMX_DOUBLE_MIN) {
 		goto L60;
 	    }
 	    i__1 = (*i0 << 2) - 1 + *pp;
@@ -10134,7 +10058,7 @@ L40:
 		}
 	    }
 L60:
-	    b2 = sqrt(b2 * 1.05);
+	    b2 =  std::sqrt(b2 * 1.05);
 	    d__1 = b2;
 	    a2 = *dmin1 / (d__1 * d__1 + 1.);
 	    gap2 = *dmin2 * .5 - a2;
@@ -10149,7 +10073,7 @@ L60:
 	} else {
 
 	    s = *dmin1 * .25;
-	    if (fabs(*dmin1 - *dn1)<PLUMED_GMX_DOUBLE_EPS*fabs(*dmin1 + *dn1)) {
+	    if (std::abs(*dmin1 - *dn1)<PLUMED_GMX_DOUBLE_EPS*std::abs(*dmin1 + *dn1)) {
 		s = *dmin1 * .5;
 	    }
 	    *ttype = -9;
@@ -10157,7 +10081,7 @@ L60:
 
     } else if (*n0in == *n0 + 2) {
 
-	if (fabs(*dmin2 - *dn2)<PLUMED_GMX_DOUBLE_EPS*fabs(*dmin2 + *dn2) &&
+	if (std::abs(*dmin2 - *dn2)<PLUMED_GMX_DOUBLE_EPS*std::abs(*dmin2 + *dn2) &&
         z__[nn - 5] * 2. < z__[nn - 7]) {
 	    *ttype = -10;
 	    s = *dmin2 * .333;
@@ -10166,7 +10090,7 @@ L60:
 	    }
 	    b1 = z__[nn - 5] / z__[nn - 7];
 	    b2 = b1;
-	    if (fabs(b2)<PLUMED_GMX_DOUBLE_MIN) {
+	    if (std::abs(b2)<PLUMED_GMX_DOUBLE_MIN) {
 		goto L80;
 	    }
 	    i__1 = (*i0 << 2) - 1 + *pp;
@@ -10181,10 +10105,10 @@ L60:
 		}
 	    }
 L80:
-	    b2 = sqrt(b2 * 1.05);
+	    b2 =  std::sqrt(b2 * 1.05);
 	    d__1 = b2;
 	    a2 = *dmin2 / (d__1 * d__1 + 1.);
-	    gap2 = z__[nn - 7] + z__[nn - 9] - sqrt(z__[nn - 11]) * sqrt(z__[
+	    gap2 = z__[nn - 7] + z__[nn - 9] -  std::sqrt(z__[nn - 11]) * std::sqrt(z__[
 		    nn - 9]) - a2;
 	    if (gap2 > 0. && gap2 > b2 * a2) {
 		d__1 = s, d__2 = a2 * (1. - a2 * 1.01 * (b2 / gap2) * b2);
@@ -10211,7 +10135,7 @@ L80:
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 
 #include "blas/blas.h"
@@ -10371,7 +10295,7 @@ PLUMED_BLAS_F77_FUNC(dlasq5,DLASQ5)(int *i0,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 #include "lapack_limits.h"
 
@@ -10417,7 +10341,7 @@ PLUMED_BLAS_F77_FUNC(dlasq6,DLASQ6)(int *i0,
 	i__1 = 4*(*n0 - 3);
 	for (j4 = *i0*4; j4 <= i__1; j4 += 4) {
 	    z__[j4 - 2] = d__ + z__[j4 - 1];
-	    if (fabs(z__[j4 - 2])<PLUMED_GMX_DOUBLE_MIN) {
+	    if (std::abs(z__[j4 - 2])<PLUMED_GMX_DOUBLE_MIN) {
 		z__[j4] = 0.;
 		d__ = z__[j4 + 1];
 		*dmin__ = d__;
@@ -10441,7 +10365,7 @@ PLUMED_BLAS_F77_FUNC(dlasq6,DLASQ6)(int *i0,
 	i__1 = 4*(*n0 - 3);
 	for (j4 = *i0 << 2; j4 <= i__1; j4 += 4) {
 	    z__[j4 - 3] = d__ + z__[j4];
-	    if (fabs(z__[j4 - 3])<PLUMED_GMX_DOUBLE_MIN) {
+	    if (std::abs(z__[j4 - 3])<PLUMED_GMX_DOUBLE_MIN) {
 		z__[j4 - 1] = 0.;
 		d__ = z__[j4 + 2];
 		*dmin__ = d__;
@@ -10467,7 +10391,7 @@ PLUMED_BLAS_F77_FUNC(dlasq6,DLASQ6)(int *i0,
     j4 = 4*(*n0 - 2) - *pp;
     j4p2 = j4 + (*pp << 1) - 1;
     z__[j4 - 2] = *dnm2 + z__[j4p2];
-    if (fabs(z__[j4 - 2])<PLUMED_GMX_DOUBLE_MIN) {
+    if (std::abs(z__[j4 - 2])<PLUMED_GMX_DOUBLE_MIN) {
 	z__[j4] = 0.;
 	*dnm1 = z__[j4p2 + 2];
 	*dmin__ = *dnm1;
@@ -10488,7 +10412,7 @@ PLUMED_BLAS_F77_FUNC(dlasq6,DLASQ6)(int *i0,
     j4 += 4;
     j4p2 = j4 + (*pp << 1) - 1;
     z__[j4 - 2] = *dnm1 + z__[j4p2];
-    if (fabs(z__[j4 - 2])<PLUMED_GMX_DOUBLE_MIN) {
+    if (std::abs(z__[j4 - 2])<PLUMED_GMX_DOUBLE_MIN) {
 	z__[j4] = 0.;
 	*dn = z__[j4p2 + 2];
 	*dmin__ = *dn;
@@ -10513,7 +10437,7 @@ PLUMED_BLAS_F77_FUNC(dlasq6,DLASQ6)(int *i0,
 } 
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "real.h"
 #include "lapack.h"
@@ -10537,7 +10461,7 @@ PLUMED_BLAS_F77_FUNC(dlasr,DLASR)(const char *side,
     int a_dim1, a_offset, i__1, i__2;
 
     /* Local variables */
-    int i__, j, info;
+    int i__, j;
     double temp;
     double ctemp, stemp;
 
@@ -10548,7 +10472,6 @@ PLUMED_BLAS_F77_FUNC(dlasr,DLASR)(const char *side,
     a -= a_offset;
 
     /* Function Body */
-    info = 0;
 
     if (*m == 0 || *n == 0) {
 	return;
@@ -10561,7 +10484,7 @@ PLUMED_BLAS_F77_FUNC(dlasr,DLASR)(const char *side,
 		for (j = 1; j <= i__1; ++j) {
 		    ctemp = c__[j];
 		    stemp = s[j];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || fabs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || std::abs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
 			i__2 = *n;
 			for (i__ = 1; i__ <= i__2; ++i__) {
 			    temp = a[j + 1 + i__ * a_dim1];
@@ -10576,7 +10499,7 @@ PLUMED_BLAS_F77_FUNC(dlasr,DLASR)(const char *side,
 		for (j = *m - 1; j >= 1; --j) {
 		    ctemp = c__[j];
 		    stemp = s[j];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || fabs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || std::abs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
 			i__1 = *n;
 			for (i__ = 1; i__ <= i__1; ++i__) {
 			    temp = a[j + 1 + i__ * a_dim1];
@@ -10594,7 +10517,7 @@ PLUMED_BLAS_F77_FUNC(dlasr,DLASR)(const char *side,
 		for (j = 2; j <= i__1; ++j) {
 		    ctemp = c__[j - 1];
 		    stemp = s[j - 1];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || fabs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || std::abs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
 			i__2 = *n;
 			for (i__ = 1; i__ <= i__2; ++i__) {
 			    temp = a[j + i__ * a_dim1];
@@ -10609,7 +10532,7 @@ PLUMED_BLAS_F77_FUNC(dlasr,DLASR)(const char *side,
 		for (j = *m; j >= 2; --j) {
 		    ctemp = c__[j - 1];
 		    stemp = s[j - 1];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || fabs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || std::abs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
 			i__1 = *n;
 			for (i__ = 1; i__ <= i__1; ++i__) {
 			    temp = a[j + i__ * a_dim1];
@@ -10627,7 +10550,7 @@ PLUMED_BLAS_F77_FUNC(dlasr,DLASR)(const char *side,
 		for (j = 1; j <= i__1; ++j) {
 		    ctemp = c__[j];
 		    stemp = s[j];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || fabs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || std::abs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
 			i__2 = *n;
 			for (i__ = 1; i__ <= i__2; ++i__) {
 			    temp = a[j + i__ * a_dim1];
@@ -10642,7 +10565,7 @@ PLUMED_BLAS_F77_FUNC(dlasr,DLASR)(const char *side,
 		for (j = *m - 1; j >= 1; --j) {
 		    ctemp = c__[j];
 		    stemp = s[j];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || fabs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || std::abs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
 			i__1 = *n;
 			for (i__ = 1; i__ <= i__1; ++i__) {
 			    temp = a[j + i__ * a_dim1];
@@ -10663,7 +10586,7 @@ PLUMED_BLAS_F77_FUNC(dlasr,DLASR)(const char *side,
 		for (j = 1; j <= i__1; ++j) {
 		    ctemp = c__[j];
 		    stemp = s[j];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || fabs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || std::abs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
 			i__2 = *m;
 			for (i__ = 1; i__ <= i__2; ++i__) {
 			    temp = a[i__ + (j + 1) * a_dim1];
@@ -10678,7 +10601,7 @@ PLUMED_BLAS_F77_FUNC(dlasr,DLASR)(const char *side,
 		for (j = *n - 1; j >= 1; --j) {
 		    ctemp = c__[j];
 		    stemp = s[j];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || fabs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || std::abs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
 			i__1 = *m;
 			for (i__ = 1; i__ <= i__1; ++i__) {
 			    temp = a[i__ + (j + 1) * a_dim1];
@@ -10696,7 +10619,7 @@ PLUMED_BLAS_F77_FUNC(dlasr,DLASR)(const char *side,
 		for (j = 2; j <= i__1; ++j) {
 		    ctemp = c__[j - 1];
 		    stemp = s[j - 1];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || fabs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || std::abs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
 			i__2 = *m;
 			for (i__ = 1; i__ <= i__2; ++i__) {
 			    temp = a[i__ + j * a_dim1];
@@ -10711,7 +10634,7 @@ PLUMED_BLAS_F77_FUNC(dlasr,DLASR)(const char *side,
 		for (j = *n; j >= 2; --j) {
 		    ctemp = c__[j - 1];
 		    stemp = s[j - 1];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || fabs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || std::abs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
 			i__1 = *m;
 			for (i__ = 1; i__ <= i__1; ++i__) {
 			    temp = a[i__ + j * a_dim1];
@@ -10729,7 +10652,7 @@ PLUMED_BLAS_F77_FUNC(dlasr,DLASR)(const char *side,
 		for (j = 1; j <= i__1; ++j) {
 		    ctemp = c__[j];
 		    stemp = s[j];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || fabs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || std::abs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
 			i__2 = *m;
 			for (i__ = 1; i__ <= i__2; ++i__) {
 			    temp = a[i__ + j * a_dim1];
@@ -10744,7 +10667,7 @@ PLUMED_BLAS_F77_FUNC(dlasr,DLASR)(const char *side,
 		for (j = *n - 1; j >= 1; --j) {
 		    ctemp = c__[j];
 		    stemp = s[j];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || fabs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_DOUBLE_EPS || std::abs(stemp)>PLUMED_GMX_DOUBLE_MIN) {
 			i__1 = *m;
 			for (i__ = 1; i__ <= i__1; ++i__) {
 			    temp = a[i__ + j * a_dim1];
@@ -10805,7 +10728,6 @@ PLUMED_BLAS_F77_FUNC(dlasrt,DLASRT)(const char *id,
 	*info = -2;
     }
     if (*info != 0) {
-	i__1 = -(*info);
 	return;
     }
     if (*n <= 1) {
@@ -11006,8 +10928,7 @@ void PLUMED_BLAS_F77_FUNC(dlasrt2,DLASRT2)(const char *id,
 	*info = -2;
     }
     if (*info != 0) {
-	i__1 = -(*info);
-	return;
+        return;
     }
 
     if (*n <= 1) {
@@ -11175,7 +11096,7 @@ L110:
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 #include "lapack.h"
 
@@ -11195,8 +11116,8 @@ PLUMED_BLAS_F77_FUNC(dlassq,DLASSQ)(int *n,
 
   if(*n>0) {
     for(ix=0;ix<=(*n-1)*(*incx);ix+=*incx) {
-      if(fabs(x[ix])>PLUMED_GMX_DOUBLE_MIN) {
-	absxi = fabs(x[ix]);
+      if(std::abs(x[ix])>PLUMED_GMX_DOUBLE_MIN) {
+	absxi = std::abs(x[ix]);
 	if(*scale<absxi) {
 	  t = *scale/absxi;
 	  t = t*t;
@@ -11213,7 +11134,7 @@ PLUMED_BLAS_F77_FUNC(dlassq,DLASSQ)(int *n,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 #include "lapack_limits.h"
 
@@ -11245,9 +11166,9 @@ PLUMED_BLAS_F77_FUNC(dlasv2,DLASV2)(double *f,
     int gasmal;
 
     ft = *f;
-    fa = fabs(ft);
+    fa = std::abs(ft);
     ht = *h__;
-    ha = fabs(*h__);
+    ha = std::abs(*h__);
 
     pmax = 1;
     swap = ha > fa;
@@ -11262,8 +11183,8 @@ PLUMED_BLAS_F77_FUNC(dlasv2,DLASV2)(double *f,
 
     }
     gt = *g;
-    ga = fabs(gt);
-    if (fabs(ga)<PLUMED_GMX_DOUBLE_MIN) {
+    ga = std::abs(gt);
+    if (std::abs(ga)<PLUMED_GMX_DOUBLE_MIN) {
 
 	*ssmin = ha;
 	*ssmax = fa;
@@ -11293,7 +11214,7 @@ PLUMED_BLAS_F77_FUNC(dlasv2,DLASV2)(double *f,
 	if (gasmal) {
 
 	    d__ = fa - ha;
-	    if ( fabs( fa - d__ )<PLUMED_GMX_DOUBLE_EPS*fabs( fa + d__ )) {
+	    if ( std::abs( fa - d__ )<PLUMED_GMX_DOUBLE_EPS*std::abs( fa + d__ )) {
 		l = 1.;
 	    } else {
 		l = d__ / fa;
@@ -11304,28 +11225,28 @@ PLUMED_BLAS_F77_FUNC(dlasv2,DLASV2)(double *f,
 
 	    mm = m * m;
 	    tt = t * t;
-	    s = sqrt(tt + mm);
+	    s =  std::sqrt(tt + mm);
 
-	    if ( fabs(l)<PLUMED_GMX_DOUBLE_MIN) {
-		r__ = fabs(m);
+	    if ( std::abs(l)<PLUMED_GMX_DOUBLE_MIN) {
+		r__ = std::abs(m);
 	    } else {
-		r__ = sqrt(l * l + mm);
+		r__ =  std::sqrt(l * l + mm);
 	    }
 	    a = (s + r__) * .5;
 
 	    *ssmin = ha / a;
 	    *ssmax = fa * a;
-	    if ( fabs(mm)<PLUMED_GMX_DOUBLE_MIN) {
+	    if ( std::abs(mm)<PLUMED_GMX_DOUBLE_MIN) {
 
-		if (fabs(l)<PLUMED_GMX_DOUBLE_MIN) {
+		if (std::abs(l)<PLUMED_GMX_DOUBLE_MIN) {
 		    t = ( (ft>0) ? 2.0 : -2.0) * ( (gt>0) ? 1.0 : -1.0);
 		} else {
-		    t = gt / ( (ft>0) ? d__ : d__) + m / t;
+		    t = gt / ( (ft>0) ? d__ : -d__) + m / t;
 		}
 	    } else {
 		t = (m / (s + t) + m / (r__ + l)) * (a + 1.);
 	    }
-	    l = sqrt(t * t + 4.);
+	    l =  std::sqrt(t * t + 4.);
 	    crt = 2. / l;
 	    srt = t / l;
 	    clt = (crt + srt * m) / a;
@@ -11433,7 +11354,7 @@ PLUMED_BLAS_F77_FUNC(dlaswp,DLASWP)(int *n,
 }
 }
 }
-#include <ctype.h>
+#include <cctype>
 #include "blas/blas.h"
 #include "lapack.h"
 #include "lapack_limits.h"
@@ -11457,7 +11378,7 @@ PLUMED_BLAS_F77_FUNC(dlatrd,DLATRD)(const char *  uplo,
   int i,iw;
   int ti1,ti2,ti3;
   double one,zero,minusone,alpha;
-  const char ch=toupper(*uplo);
+  const char ch=std::toupper(*uplo);
 
   one=1.0;
   minusone=-1.0;
@@ -11597,7 +11518,7 @@ PLUMED_BLAS_F77_FUNC(dlatrd,DLATRD)(const char *  uplo,
   
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "blas/blas.h"
 #include "lapack.h"
@@ -12169,7 +12090,6 @@ PLUMED_BLAS_F77_FUNC(dorm2l,DORM2L)(const char *side,
 	nq = *n;
     }
     if (*info != 0) {
-	i__1 = -(*info);
 	return;
     }
 
@@ -12236,7 +12156,7 @@ PLUMED_BLAS_F77_FUNC(dorm2r,DORM2R)(const char *side,
 {
     int a_dim1, a_offset, c_dim1, c_offset, i__1, i__2;
 
-    int i__, i1, i2, i3, ic, jc, mi, ni, nq;
+    int i__, i1, i2, i3, ic, jc, mi, ni;
     double aii;
     int left;
     int notran;
@@ -12256,12 +12176,6 @@ PLUMED_BLAS_F77_FUNC(dorm2r,DORM2R)(const char *side,
 
     ic = jc = 0;
 
-    if (left) {
-	nq = *m;
-    } else {
-	nq = *n;
-    }
-
     if (*m <= 0 || *n <= 0 || *k <= 0) {
 	return;
     }
@@ -12444,7 +12358,7 @@ PLUMED_BLAS_F77_FUNC(dormbr,DORMBR)(const char *vect,
 
 }
 }
-#include <ctype.h>
+#include <cctype>
 #include "lapack.h"
 #include "real.h"
 
@@ -12466,8 +12380,8 @@ PLUMED_BLAS_F77_FUNC(dorml2,DORML2)(const char *side,
 	double *work,
     int *info)
 {
-  const char xside=toupper(*side);
-  const char xtrans=toupper(*trans);
+  const char xside=std::toupper(*side);
+  const char xtrans=std::toupper(*trans);
   int i,i1,i2,i3,ni,mi,ic,jc;
   double aii;
 
@@ -12581,7 +12495,6 @@ PLUMED_BLAS_F77_FUNC(dormlq,DORMLQ)(const char *side,
     work[1] = (double) lwkopt;
     
     if (*info != 0) {
-	i__1 = -(*info);
        	return;
     } else if (lquery) {
 	return;
@@ -12600,8 +12513,6 @@ PLUMED_BLAS_F77_FUNC(dormlq,DORMLQ)(const char *side,
 	    nb = *lwork / ldwork;
 	    nbmin = DORMLQ_MINBLOCKSIZE;
 	}
-    } else {
-	iws = nw;
     }
 
     if (nb < nbmin || nb >= *k) {
@@ -12719,7 +12630,6 @@ PLUMED_BLAS_F77_FUNC(dormql,DORMQL)(const char *side, const char *trans, int *m,
     work[1] = (double) lwkopt;
     
     if (*info != 0) {
-	i__1 = -(*info);
 	return;
     } else if (lquery) {
 	return;
@@ -12738,8 +12648,6 @@ PLUMED_BLAS_F77_FUNC(dormql,DORMQL)(const char *side, const char *trans, int *m,
 	    nb = *lwork / ldwork;
 	    nbmin = DORMQL_MINBLOCKSIZE;
 	}
-    } else {
-	iws = nw;
     }
 
     if (nb < nbmin || nb >= *k) {
@@ -12856,7 +12764,6 @@ PLUMED_BLAS_F77_FUNC(dormqr,DORMQR)(const char *side,
      work[1] = (double) lwkopt;
 
     if (*info != 0) {
-	i__1 = -(*info);
 	return;
     } else if (lquery) {
       return;
@@ -12875,8 +12782,6 @@ PLUMED_BLAS_F77_FUNC(dormqr,DORMQR)(const char *side,
 	    nb = *lwork / ldwork;
 	    nbmin = DORMQR_MINBLOCKSIZE;
 	}
-    } else {
-	iws = nw;
     }
 
     if (nb < nbmin || nb >= *k) {
@@ -13039,7 +12944,7 @@ PLUMED_BLAS_F77_FUNC(dormtr,DORMTR)(const char *side,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 #include "lapack_limits.h"
 
@@ -13147,7 +13052,6 @@ PLUMED_BLAS_F77_FUNC(dstebz,DSTEBZ)(const char *range,
     }
 
     if (*info != 0) {
-	i__1 = -(*info);
 	return;
     }
 
@@ -13192,7 +13096,7 @@ PLUMED_BLAS_F77_FUNC(dstebz,DSTEBZ)(const char *range,
 	d__1 = e[j - 1];
 	tmp1 = d__1 * d__1;
 	d__2 = ulp;
-	if (fabs(d__[j] * d__[j - 1]) * (d__2 * d__2) + safemn 
+	if (std::abs(d__[j] * d__[j - 1]) * (d__2 * d__2) + safemn 
 		> tmp1) {
 	    isplit[*nsplit] = j - 1;
 	    ++(*nsplit);
@@ -13213,7 +13117,7 @@ PLUMED_BLAS_F77_FUNC(dstebz,DSTEBZ)(const char *range,
 
 	i__1 = *n - 1;
 	for (j = 1; j <= i__1; ++j) {
-	    tmp2 = sqrt(work[j]);
+	    tmp2 =  std::sqrt(work[j]);
 	    d__1 = gu, d__2 = d__[j] + tmp1 + tmp2;
 	    gu = (d__1>d__2) ? d__1 : d__2;
 	    d__1 = gl, d__2 = d__[j] - tmp1 - tmp2;
@@ -13225,13 +13129,13 @@ PLUMED_BLAS_F77_FUNC(dstebz,DSTEBZ)(const char *range,
 	gu = (d__1>d__2) ? d__1 : d__2;
 	d__1 = gl, d__2 = d__[*n] - tmp1;
 	gl = (d__1<d__2) ? d__1 : d__2;
-	d__1 = fabs(gl);
-	d__2 = fabs(gu);
+	d__1 = std::abs(gl);
+	d__2 = std::abs(gu);
 	tnorm = (d__1>d__2) ? d__1 : d__2;
 	gl = gl - tnorm * 2. * ulp * *n - pivmin * 4.;
 	gu = gu + tnorm * 2. * ulp * *n + pivmin * 2.;
 
-	itmax = (int) ((log(tnorm + pivmin) - log(pivmin)) / log(2.)) + 2;
+	itmax = (int) ((std::log(tnorm + pivmin) - std::log(pivmin)) / std::log(2.)) + 2;
 	if (*abstol <= 0.) {
 	    atoli = ulp * tnorm;
 	} else {
@@ -13281,14 +13185,14 @@ PLUMED_BLAS_F77_FUNC(dstebz,DSTEBZ)(const char *range,
       /* avoid warnings for high gcc optimization */
       wlu = wul = 1.0;
 
-	d__3 = fabs(d__[1]) + fabs(e[1]);
-	d__4 = fabs(d__[*n]) + fabs(e[*n - 1]);
+	d__3 = std::abs(d__[1]) + std::abs(e[1]);
+	d__4 = std::abs(d__[*n]) + std::abs(e[*n - 1]);
 	tnorm = (d__3>d__4) ? d__3 : d__4;
 
 	i__1 = *n - 1;
 	for (j = 2; j <= i__1; ++j) {
 	    d__4 = tnorm;
-	    d__5 = fabs(d__[j]) + fabs(e[j - 1]) + fabs(e[j]);
+	    d__5 = std::abs(d__[j]) + std::abs(e[j - 1]) + std::abs(e[j]);
 	    tnorm = (d__4>d__5) ? d__4 : d__5;
 	}
 
@@ -13341,7 +13245,7 @@ PLUMED_BLAS_F77_FUNC(dstebz,DSTEBZ)(const char *range,
 
 	    i__2 = iend - 1;
 	    for (j = ibegin; j <= i__2; ++j) {
-		tmp2 = fabs(e[j]);
+		tmp2 = std::abs(e[j]);
 		d__1 = gu, d__2 = d__[j] + tmp1 + tmp2;
 		gu = (d__1>d__2) ? d__1 : d__2;
 		d__1 = gl, d__2 = d__[j] - tmp1 - tmp2;
@@ -13353,15 +13257,15 @@ PLUMED_BLAS_F77_FUNC(dstebz,DSTEBZ)(const char *range,
 	    gu = (d__1>d__2) ? d__1 : d__2;
 	    d__1 = gl, d__2 = d__[iend] - tmp1;
 	    gl = (d__1<d__2) ? d__1 : d__2;
-	    d__1 = fabs(gl);
-	    d__2 = fabs(gu);
+	    d__1 = std::abs(gl);
+	    d__2 = std::abs(gu);
 	    bnorm = (d__1>d__2) ? d__1 : d__2;
 	    gl = gl - bnorm * 2. * ulp * in - pivmin * 2.;
 	    gu = gu + bnorm * 2. * ulp * in + pivmin * 2.;
 
 	    if (*abstol <= 0.) {
-		d__1 = fabs(gl);
-		d__2 = fabs(gu);
+		d__1 = std::abs(gl);
+		d__2 = std::abs(gu);
 		atoli = ulp * ((d__1>d__2) ? d__1 : d__2);
 	    } else {
 		atoli = *abstol;
@@ -13390,7 +13294,7 @@ PLUMED_BLAS_F77_FUNC(dstebz,DSTEBZ)(const char *range,
 	    nwu += iwork[in + 1];
 	    iwoff = *m - iwork[1];
 
-	    itmax = (int) ((log(gu - gl + pivmin) - log(pivmin)) / log(2.)
+	    itmax = (int) ((std::log(gu - gl + pivmin) - std::log(pivmin)) / std::log(2.)
 		    ) + 2;
 	    PLUMED_BLAS_F77_FUNC(dlaebz,DLAEBZ)(&c__2, &itmax, &in, &in, &c__1, &nb, &atoli, &rtoli, &
 		    pivmin, &d__[ibegin], &e[ibegin], &work[ibegin], idumma, &
@@ -13524,7 +13428,7 @@ PLUMED_BLAS_F77_FUNC(dstebz,DSTEBZ)(const char *range,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "blas/blas.h"
 #include "lapack.h"
 #include "lapack_limits.h"
@@ -13658,8 +13562,8 @@ PLUMED_BLAS_F77_FUNC(dstegr,DSTEGR)(const char *jobz,
     eps = PLUMED_GMX_DOUBLE_EPS;
     smlnum = safmin / eps;
     bignum = 1. / smlnum;
-    rmin = sqrt(smlnum);
-    d__1 = sqrt(bignum), d__2 = 1. / sqrt(sqrt(safmin));
+    rmin =  std::sqrt(smlnum);
+    d__1 =  std::sqrt(bignum), d__2 = 1. / std::sqrt(sqrt(safmin));
     rmax = (d__1<d__2) ? d__1 : d__2;
     scale = 1.;
     tnrm = PLUMED_BLAS_F77_FUNC(dlanst,DLANST)("M", n, &d__[1], &e[1]);
@@ -13668,7 +13572,7 @@ PLUMED_BLAS_F77_FUNC(dstegr,DSTEGR)(const char *jobz,
     } else if (tnrm > rmax) {
 	scale = rmax / tnrm;
     }
-    if ( fabs(scale-1.0)>PLUMED_GMX_DOUBLE_EPS) {
+    if ( std::abs(scale-1.0)>PLUMED_GMX_DOUBLE_EPS) {
 	PLUMED_BLAS_F77_FUNC(dscal,DSCAL)(n, &scale, &d__[1], &c__1);
 	i__1 = *n - 1;
 	PLUMED_BLAS_F77_FUNC(dscal,DSCAL)(&i__1, &scale, &e[1], &c__1);
@@ -13710,7 +13614,7 @@ PLUMED_BLAS_F77_FUNC(dstegr,DSTEGR)(const char *jobz,
 	w[j] += e[iwork[iinspl + itmp - 1]];
     } 
 
-    if (fabs(scale-1.0)>PLUMED_GMX_DOUBLE_EPS) {
+    if (std::abs(scale-1.0)>PLUMED_GMX_DOUBLE_EPS) {
 	d__1 = 1. / scale;
 	PLUMED_BLAS_F77_FUNC(dscal,DSCAL)(m, &d__1, &w[1], &c__1);
     }
@@ -13750,7 +13654,7 @@ PLUMED_BLAS_F77_FUNC(dstegr,DSTEGR)(const char *jobz,
 } 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "blas/blas.h"
 #include "lapack.h"
 #include "lapack_limits.h"
@@ -13837,7 +13741,6 @@ PLUMED_BLAS_F77_FUNC(dstein,DSTEIN)(int *n,
     }
 
     if (*info != 0) {
-	i__1 = -(*info);
 	return;
     }
 
@@ -13876,19 +13779,19 @@ PLUMED_BLAS_F77_FUNC(dstein,DSTEIN)(int *n,
 	}
 	gpind = b1;
 
-	onenrm = fabs(d__[b1]) + fabs(e[b1]);
+	onenrm = std::abs(d__[b1]) + std::abs(e[b1]);
 	d__3 = onenrm;
-	d__4 = fabs(d__[bn]) + fabs(e[bn - 1]);
+	d__4 = std::abs(d__[bn]) + std::abs(e[bn - 1]);
 	onenrm = (d__3>d__4) ? d__3 : d__4;
 	i__2 = bn - 1;
 	for (i__ = b1 + 1; i__ <= i__2; ++i__) {
 	  d__4 = onenrm;
-	  d__5 = fabs(d__[i__]) + fabs(e[i__ - 1]) + fabs(e[i__]);
+	  d__5 = std::abs(d__[i__]) + std::abs(e[i__ - 1]) + std::abs(e[i__]);
 	    onenrm = (d__4>d__5) ? d__4 : d__5;
 	}
 	ortol = onenrm * .001;
 
-	dtpcrt = sqrt(.1 / blksiz);
+	dtpcrt =  std::sqrt(.1 / blksiz);
 
 	jblk = 0;
 	i__2 = *m;
@@ -13906,7 +13809,7 @@ PLUMED_BLAS_F77_FUNC(dstein,DSTEIN)(int *n,
 	    }
 
 	    if (jblk > 1) {
-		eps1 = fabs(eps * xj);
+		eps1 = std::abs(eps * xj);
 		pertol = eps1 * 10.;
 		sep = xj - xjm;
 		if (sep < pertol) {
@@ -13936,7 +13839,7 @@ L70:
 	    }
 
 	    d__2 = eps;
-	    d__3 = fabs(work[indrv4 + blksiz]);
+	    d__3 = std::abs(work[indrv4 + blksiz]);
 	    scl = blksiz * onenrm * ((d__2>d__3) ? d__2 : d__3) / PLUMED_BLAS_F77_FUNC(dasum,DASUM)(&blksiz, &work[
 		    indrv1 + 1], &c__1);
 	    PLUMED_BLAS_F77_FUNC(dscal,DSCAL)(&blksiz, &scl, &work[indrv1 + 1], &c__1);
@@ -13948,7 +13851,7 @@ L70:
 	    if (jblk == 1) {
 		goto L90;
 	    }
-	    if (fabs(xj - xjm) > ortol) {
+	    if (std::abs(xj - xjm) > ortol) {
 		gpind = j;
 	    }
 	    if (gpind != j) {
@@ -13963,7 +13866,7 @@ L70:
 
 L90:
 	    jmax = PLUMED_BLAS_F77_FUNC(idamax,IDAMAX)(&blksiz, &work[indrv1 + 1], &c__1);
-	    nrm = fabs(work[indrv1 + jmax]);
+	    nrm = std::abs(work[indrv1 + jmax]);
 
 	    if (nrm < dtpcrt) {
 		goto L70;
@@ -14007,7 +13910,7 @@ L120:
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "blas/blas.h"
@@ -14103,8 +14006,8 @@ PLUMED_BLAS_F77_FUNC(dsteqr,DSTEQR)(const char *    compz,
     safmin = minval*(1.0+PLUMED_GMX_DOUBLE_EPS);
 
     safmax = 1. / safmin;
-    ssfmax = sqrt(safmax) / 3.;
-    ssfmin = sqrt(safmin) / eps2;
+    ssfmax =  std::sqrt(safmax) / 3.;
+    ssfmin =  std::sqrt(safmin) / eps2;
 
     if (icompz == 2) {
 	PLUMED_BLAS_F77_FUNC(dlaset,DLASET)("Full", n, n, &c_b9, &c_b10, &z__[z_offset], ldz);
@@ -14126,11 +14029,11 @@ L10:
     if (l1 <= nm1) {
 	i__1 = nm1;
 	for (m = l1; m <= i__1; ++m) {
-	    tst = fabs(e[m]);
-	    if (fabs(tst)<PLUMED_GMX_DOUBLE_MIN) {
+	    tst = std::abs(e[m]);
+	    if (std::abs(tst)<PLUMED_GMX_DOUBLE_MIN) {
 		goto L30;
 	    }
-	    if (tst <= sqrt(fabs(d__[m])) * sqrt(fabs(d__[m + 1])) * eps) {
+	    if (tst <=  std::sqrt(std::abs(d__[m])) * std::sqrt(std::abs(d__[m + 1])) * eps) {
 		e[m] = 0.;
 		goto L30;
 	    }
@@ -14151,7 +14054,7 @@ L30:
     i__1 = lend - l + 1;
     anorm = PLUMED_BLAS_F77_FUNC(dlanst,DLANST)("I", &i__1, &d__[l], &e[l]);
     iscale = 0;
-    if (fabs(anorm)<PLUMED_GMX_DOUBLE_MIN) {
+    if (std::abs(anorm)<PLUMED_GMX_DOUBLE_MIN) {
 	goto L10;
     }
     if (anorm > ssfmax) {
@@ -14172,7 +14075,7 @@ L30:
 		info);
     }
 
-    if (fabs(d__[lend]) < fabs(d__[l])) {
+    if (std::abs(d__[lend]) < std::abs(d__[l])) {
 	lend = lsv;
 	l = lendsv;
     }
@@ -14184,9 +14087,9 @@ L40:
 	    lendm1 = lend - 1;
 	    i__1 = lendm1;
 	    for (m = l; m <= i__1; ++m) {
-  	        d__2 = fabs(e[m]);
+  	        d__2 = std::abs(e[m]);
 		tst = d__2 * d__2;
-		if (tst <= eps2 * fabs(d__[m]) * fabs(d__[m+ 1]) + safmin) {
+		if (tst <= eps2 * std::abs(d__[m]) * std::abs(d__[m+ 1]) + safmin) {
 		    goto L60;
 		}
 	    }
@@ -14283,9 +14186,9 @@ L90:
 	    lendp1 = lend + 1;
 	    i__1 = lendp1;
 	    for (m = l; m >= i__1; --m) {
-		d__2 = fabs(e[m - 1]);
+		d__2 = std::abs(e[m - 1]);
 		tst = d__2 * d__2;
-		if (tst <= eps2 * fabs(d__[m]) * fabs(d__[m- 1]) + safmin) {
+		if (tst <= eps2 * std::abs(d__[m]) * std::abs(d__[m- 1]) + safmin) {
 		    goto L110;
 		}
 	    }
@@ -14399,7 +14302,7 @@ L140:
     }
     i__1 = *n - 1;
     for (i__ = 1; i__ <= i__1; ++i__) {
-	if (fabs(e[i__])>PLUMED_GMX_DOUBLE_MIN) {
+	if (std::abs(e[i__])>PLUMED_GMX_DOUBLE_MIN) {
 	    ++(*info);
 	}
     }
@@ -14440,7 +14343,7 @@ L190:
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 #include "lapack_limits.h"
 
@@ -14498,8 +14401,8 @@ PLUMED_BLAS_F77_FUNC(dsterf,DSTERF)(int *n,
     d__1 = eps;
     eps2 = d__1 * d__1;
     safmax = 1. / safmin;
-    ssfmax = sqrt(safmax) / 3.;
-    ssfmin = sqrt(safmin) / eps2;
+    ssfmax =  std::sqrt(safmax) / 3.;
+    ssfmin =  std::sqrt(safmin) / eps2;
 
     nmaxit = *n * 30;
     sigma = 0.;
@@ -14517,8 +14420,8 @@ L10:
     }
     i__1 = *n - 1;
     for (m = l1; m <= i__1; ++m) {
-	if (fabs(e[m]) <= sqrt(fabs(d__[m])) * 
-		sqrt(fabs(d__[m + 1])) * eps) {
+	if (std::abs(e[m]) <=  std::sqrt(std::abs(d__[m])) * 
+		 std::sqrt(std::abs(d__[m + 1])) * eps) {
 	    e[m] = 0.;
 	    goto L30;
 	}
@@ -14562,7 +14465,7 @@ L30:
 	e[i__] = d__1 * d__1;
     }
 
-    if (fabs(d__[lend]) < fabs(d__[l])) {
+    if (std::abs(d__[lend]) < std::abs(d__[l])) {
 	lend = lsv;
 	l = lendsv;
     }
@@ -14573,7 +14476,7 @@ L50:
 	if (l != lend) {
 	    i__1 = lend - 1;
 	    for (m = l; m <= i__1; ++m) {
-		if (fabs(e[m]) <= eps2 * fabs(d__[m] * d__[m + 1])) {
+		if (std::abs(e[m]) <= eps2 * std::abs(d__[m] * d__[m + 1])) {
 		    goto L70;
 		}
 	    }
@@ -14589,7 +14492,7 @@ L70:
 	    goto L90;
 	}
 	if (m == l + 1) {
-	    rte = sqrt(e[l]);
+	    rte =  std::sqrt(e[l]);
 	    PLUMED_BLAS_F77_FUNC(dlae2,DLAE2)(&d__[l], &rte, &d__[l + 1], &rt1, &rt2);
 	    d__[l] = rt1;
 	    d__[l + 1] = rt2;
@@ -14606,7 +14509,7 @@ L70:
 	}
 	++jtot;
 
-	rte = sqrt(e[l]);
+	rte =  std::sqrt(e[l]);
 	sigma = (d__[l + 1] - p) / (rte * 2.);
 	r__ = PLUMED_BLAS_F77_FUNC(dlapy2,DLAPY2)(&sigma, &c_b32);
 	sigma = p - rte / (sigma + ( (sigma>0) ? r__ : -r__));
@@ -14630,7 +14533,7 @@ L70:
 	    alpha = d__[i__];
 	    gamma = c__ * (alpha - sigma) - s * oldgam;
 	    d__[i__ + 1] = oldgam + (alpha - gamma);
-	    if (fabs(c__)>PLUMED_GMX_DOUBLE_MIN) {
+	    if (std::abs(c__)>PLUMED_GMX_DOUBLE_MIN) {
 		p = gamma * gamma / c__;
 	    } else {
 		p = oldc * bb;
@@ -14655,7 +14558,7 @@ L90:
 L100:
 	i__1 = lend + 1;
 	for (m = l; m >= i__1; --m) {
-	    if (fabs(e[m - 1]) <= eps2 * fabs(d__[m] * d__[m - 1])) {
+	    if (std::abs(e[m - 1]) <= eps2 * std::abs(d__[m] * d__[m - 1])) {
 		goto L120;
 	    }
 	}
@@ -14671,7 +14574,7 @@ L120:
 	}
 
 	if (m == l - 1) {
-	    rte = sqrt(e[l - 1]);
+	    rte =  std::sqrt(e[l - 1]);
 	    PLUMED_BLAS_F77_FUNC(dlae2,DLAE2)(&d__[l], &rte, &d__[l - 1], &rt1, &rt2);
 	    d__[l] = rt1;
 	    d__[l - 1] = rt2;
@@ -14688,7 +14591,7 @@ L120:
 	}
 	++jtot;
 
-	rte = sqrt(e[l - 1]);
+	rte =  std::sqrt(e[l - 1]);
 	sigma = (d__[l - 1] - p) / (rte * 2.);
 	r__ = PLUMED_BLAS_F77_FUNC(dlapy2,DLAPY2)(&sigma, &c_b32);
 	sigma = p - rte / (sigma + ( (sigma>0) ? r__ : -r__));
@@ -14712,7 +14615,7 @@ L120:
 	    alpha = d__[i__ + 1];
 	    gamma = c__ * (alpha - sigma) - s * oldgam;
 	    d__[i__] = oldgam + (alpha - gamma);
-	    if (fabs(c__)>PLUMED_GMX_DOUBLE_MIN) {
+	    if (std::abs(c__)>PLUMED_GMX_DOUBLE_MIN) {
 		p = gamma * gamma / c__;
 	    } else {
 		p = oldc * bb;
@@ -14751,7 +14654,7 @@ L150:
     }
     i__1 = *n - 1;
     for (i__ = 1; i__ <= i__1; ++i__) {
-	if (fabs(e[i__])>PLUMED_GMX_DOUBLE_MIN) {
+	if (std::abs(e[i__])>PLUMED_GMX_DOUBLE_MIN) {
 	    ++(*info);
 	}
     }
@@ -14810,7 +14713,7 @@ PLUMED_BLAS_F77_FUNC(dstevr,DSTEVR)(const char *jobz,
 
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "real.h"
 
@@ -14836,7 +14739,7 @@ PLUMED_BLAS_F77_FUNC(dsyevr,DSYEVR)(const char *jobz, const char *range, const c
     /* Local variables */
     int c__1 = 1;
     int i__, j, nb, jj;
-    double eps, vll, vuu, tmp1;
+    double eps, tmp1;
     int indd, inde;
     double anrm;
     int imax;
@@ -14848,10 +14751,10 @@ PLUMED_BLAS_F77_FUNC(dsyevr,DSYEVR)(const char *jobz, const char *range, const c
     int lwmin;
     int lower, wantz;
     int alleig, indeig;
-    int iscale, ieeeok, indibl, indifl;
+    int iscale, indibl, indifl;
     int valeig;
     double safmin,minval;
-    double abstll, bignum;
+    double bignum;
     int indtau;
     int indwkn;
     int liwmin;
@@ -14859,10 +14762,6 @@ PLUMED_BLAS_F77_FUNC(dsyevr,DSYEVR)(const char *jobz, const char *range, const c
     double smlnum;
     int lwkopt;
     int lquery;
-    double posinf,neginf,negzro,newzro;
-    double fzero = 0.0;
-    double fone = 1.0;
-
     
     /* Parameter adjustments */
     a_dim1 = *lda;
@@ -14876,33 +14775,6 @@ PLUMED_BLAS_F77_FUNC(dsyevr,DSYEVR)(const char *jobz, const char *range, const c
     --work;
     --iwork;
 
-    /* Check for IEEE-compliant FP */
-    ieeeok = 1;
-    posinf = fone/fzero;
-    if(posinf<=1.0)
-      ieeeok = 0;
-    neginf = -fone/fzero;
-    if(neginf>=0.0)
-      ieeeok = 0;
-    negzro = fone/(neginf+fone);
-    if(negzro!=0)
-      ieeeok = 0;
-    neginf = fone/negzro;
-    if(neginf>=0)
-      ieeeok = 0;
-    newzro = negzro + fzero;
-    if(newzro!=fzero)
-      ieeeok = 0;
-    posinf = fone /newzro;
-    if(posinf<=fone)
-      ieeeok = 0;
-    neginf = neginf*posinf;
-    if(neginf>=fzero)
-      ieeeok = 0;
-    posinf = posinf*posinf;
-    if(posinf<=1.0)
-      ieeeok = 0;
-
     lower = (*uplo=='L' || *uplo=='l');
     wantz = (*jobz=='V' || *jobz=='v');
     alleig = (*range=='A' || *range=='a');
@@ -15000,15 +14872,12 @@ PLUMED_BLAS_F77_FUNC(dsyevr,DSYEVR)(const char *jobz, const char *range, const c
 
     smlnum = safmin / eps;
     bignum = 1. / smlnum;
-    rmin = sqrt(smlnum);
+    rmin =  std::sqrt(smlnum);
 
-    d__1 = sqrt(bignum), d__2 = 1. / sqrt(sqrt(safmin));
+    d__1 =  std::sqrt(bignum), d__2 = 1. / std::sqrt(sqrt(safmin));
     rmax = (d__1<d__2) ? d__1 : d__2;
 
     iscale = 0;
-    abstll = *abstol;
-    vll = *vl;
-    vuu = *vu;
     anrm = PLUMED_BLAS_F77_FUNC(dlansy,DLANSY)("M", uplo, n, &a[a_offset], lda, &work[1]);
     if (anrm > 0. && anrm < rmin) {
 	iscale = 1;
@@ -15031,13 +14900,6 @@ PLUMED_BLAS_F77_FUNC(dsyevr,DSYEVR)(const char *jobz, const char *range, const c
 
 	    }
 	}
-	if (*abstol > 0.) {
-	    abstll = *abstol * sigma;
-	}
-	if (valeig) {
-	    vll = *vl * sigma;
-	    vuu = *vu * sigma;
-	}
     }
 
     indtau = 1;
@@ -15111,8 +14973,8 @@ PLUMED_BLAS_F77_FUNC(dsyevr,DSYEVR)(const char *jobz, const char *range, const c
 }
 }
 }
-#include <ctype.h>
-#include <math.h>
+#include <cctype>
+#include <cmath>
 
 #include "real.h"
 
@@ -15136,7 +14998,7 @@ PLUMED_BLAS_F77_FUNC(dsytd2,DSYTD2)(const char *    uplo,
   double minusone,zero;
   double taui,alpha,tmp;
   int ti1,ti2,ti3,i;
-  const char ch=toupper(*uplo);
+  const char ch=std::toupper(*uplo);
 
   zero = 0.0;
   minusone = -1.0;
@@ -15150,7 +15012,7 @@ PLUMED_BLAS_F77_FUNC(dsytd2,DSYTD2)(const char *    uplo,
       ti1 = 1;
       PLUMED_BLAS_F77_FUNC(dlarfg,DLARFG)(&i,&(a[i*(*lda)+(i-1)]),&(a[i*(*lda)+0]),&ti1,&taui);
       e[i-1] = a[i*(*lda) + (i-1)];
-      if(fabs(taui)>PLUMED_GMX_DOUBLE_MIN) {
+      if(std::abs(taui)>PLUMED_GMX_DOUBLE_MIN) {
 	a[i*(*lda)+(i-1)] = 1.0;
       
 	ti1 = 1;
@@ -15184,7 +15046,7 @@ PLUMED_BLAS_F77_FUNC(dsytd2,DSYTD2)(const char *    uplo,
 
       e[i-1] = a[(i-1)*(*lda) + (i)];
 
-      if(fabs(taui)>PLUMED_GMX_DOUBLE_MIN) {
+      if(std::abs(taui)>PLUMED_GMX_DOUBLE_MIN) {
 	a[(i-1)*(*lda)+(i)] = 1.0;
       
 	ti1 = *n - i;
@@ -15281,7 +15143,6 @@ PLUMED_BLAS_F77_FUNC(dsytrd,DSYTRD)(const char *uplo, int *n, double *a, int *
     }
 
     nx = *n;
-    iws = 1;
     if (nb > 1 && nb < *n) {
 
 	nx = DSYTRD_CROSSOVER;
@@ -15448,7 +15309,7 @@ PLUMED_BLAS_F77_FUNC(dtrti2,DTRTI2)(const char *uplo,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "blas/blas.h"
 #include "lapack.h"
 #include "lapack_limits.h"
@@ -15495,7 +15356,7 @@ PLUMED_BLAS_F77_FUNC(dtrtri,DTRTRI)(const char *uplo,
     if (nounit) {
 	i__1 = *n;
 	for (*info = 1; *info <= i__1; ++(*info)) {
-	    if (fabs(a[*info + *info * a_dim1])<PLUMED_GMX_DOUBLE_MIN) {
+	    if (std::abs(a[*info + *info * a_dim1])<PLUMED_GMX_DOUBLE_MIN) {
 		return;
 	    }
 	}
@@ -15762,8 +15623,8 @@ L110:
 }
 }
 }
-#include <ctype.h>
-#include <math.h>
+#include <cctype>
+#include <cmath>
 #include "blas/blas.h"
 #include "lapack.h"
 #include "lapack_limits.h"
@@ -15859,7 +15720,7 @@ PLUMED_BLAS_F77_FUNC(sbdsdc,SBDSDC)(const char *uplo,
 	  u[u_dim1 + 1] = (d__[1]>0) ? 1.0 : -1.0;
 	  vt[vt_dim1 + 1] = 1.;
 	}
-	d__[1] = fabs(d__[1]);
+	d__[1] = std::abs(d__[1]);
 	return;
     }
     nm1 = *n - 1;
@@ -15917,7 +15778,7 @@ PLUMED_BLAS_F77_FUNC(sbdsdc,SBDSDC)(const char *uplo,
     }
 
     orgnrm = PLUMED_BLAS_F77_FUNC(slanst,SLANST)("M", n, &d__[1], &e[1]);
-    if ( fabs(orgnrm)<PLUMED_GMX_FLOAT_MIN) {
+    if ( std::abs(orgnrm)<PLUMED_GMX_FLOAT_MIN) {
 	return;
     }
     PLUMED_BLAS_F77_FUNC(slascl,SLASCL)("G", &c_0, &c_0, &orgnrm, &one, n, &c_1, &d__[1], n, &ierr);
@@ -15925,8 +15786,7 @@ PLUMED_BLAS_F77_FUNC(sbdsdc,SBDSDC)(const char *uplo,
 
     eps = PLUMED_GMX_FLOAT_EPS;
 
-    mlvl = (int) (log((float) (*n) / (float) (smlsiz + 1)) / 
-	    log(2.)) + 1;
+    mlvl = (int) (std::log((float) (*n) / (float) (smlsiz + 1)) / std::log(2.)) + 1;
     smlszp = smlsiz + 1;
 
     if (icompq == 1) {
@@ -15948,7 +15808,7 @@ PLUMED_BLAS_F77_FUNC(sbdsdc,SBDSDC)(const char *uplo,
 
     i__1 = *n;
     for (i__ = 1; i__ <= i__1; ++i__) {
-	if (fabs(d__[i__]) < eps) 
+	if (std::abs(d__[i__]) < eps) 
 	    d__[i__] = (d__[i__]>0) ? eps : -eps;
     }
 
@@ -15957,10 +15817,10 @@ PLUMED_BLAS_F77_FUNC(sbdsdc,SBDSDC)(const char *uplo,
 
     i__1 = nm1;
     for (i__ = 1; i__ <= i__1; ++i__) {
-	if (fabs(e[i__]) < eps || i__ == nm1) {
+	if (std::abs(e[i__]) < eps || i__ == nm1) {
 	    if (i__ < nm1) {
 		nsize = i__ - start + 1;
-	    } else if (fabs(e[i__]) >= eps) {
+	    } else if (std::abs(e[i__]) >= eps) {
 		nsize = *n - start + 1;
 	    } else {
 		nsize = i__ - start + 1;
@@ -15971,7 +15831,7 @@ PLUMED_BLAS_F77_FUNC(sbdsdc,SBDSDC)(const char *uplo,
 		    q[*n + (qstart - 1) * *n] = (d__[*n]>0) ? 1.0 : -1.0; 
 		    q[*n + (smlsiz + qstart - 1) * *n] = 1.;
 		}
-		d__[*n] = fabs(d__[*n]);
+		d__[*n] = std::abs(d__[*n]);
 	    }
 	    if (icompq == 2) {
 		PLUMED_BLAS_F77_FUNC(slasd0,SLASD0)(&nsize, &sqre, &d__[start], &e[start], 
@@ -16041,8 +15901,8 @@ L40:
 }
 }
 }
-#include <ctype.h>
-#include <math.h>
+#include <cctype>
+#include <cmath>
 
 #include "blas/blas.h"
 #include "lapack.h"
@@ -16070,7 +15930,7 @@ PLUMED_BLAS_F77_FUNC(sbdsqr,SBDSQR)(const char *uplo,
                         float *work,
                         int *info)
 {
-    const char xuplo = toupper(*uplo);
+    const char xuplo = std::toupper(*uplo);
     int c_dim1, c_offset, u_dim1, u_offset, vt_dim1, vt_offset, i__1, 
 	    i__2;
     float r__1, r__2, r__3, r__4;
@@ -16103,9 +15963,8 @@ PLUMED_BLAS_F77_FUNC(sbdsqr,SBDSQR)(const char *uplo,
     float sminoa;
     float thresh;
     int rotate;
-    float sminlo, tolmul;
+    float tolmul;
     int itmp1,itmp2;
-    float ftmp;
     
     --d__;
     --e;
@@ -16189,43 +16048,43 @@ PLUMED_BLAS_F77_FUNC(sbdsqr,SBDSQR)(const char *uplo,
 	}
     }
 
-    r__3 = 100.f, r__4 = pow(PLUMED_GMX_FLOAT_EPS,c_b15);
+    r__3 = 100.f, r__4 = std::pow(static_cast<float>(PLUMED_GMX_FLOAT_EPS),c_b15);
     r__1 = 10.f, r__2 = (r__3<r__4) ? r__3 : r__4;
     tolmul = (r__1>r__2) ? r__1 : r__2;
     tol = tolmul * eps;
     smax = 0.f;
     i__1 = *n;
     for (i__ = 1; i__ <= i__1; ++i__) {
-	r__2 = smax, r__3 = (r__1 = d__[i__], fabs(r__1));
+	r__2 = smax, r__3 = (r__1 = d__[i__], std::abs(r__1));
 	smax = (r__2>r__3) ? r__2 : r__3;
     }
     i__1 = *n - 1;
     for (i__ = 1; i__ <= i__1; ++i__) {
-	r__2 = smax, r__3 = (r__1 = e[i__], fabs(r__1));
+	r__2 = smax, r__3 = (r__1 = e[i__], std::abs(r__1));
 	smax = (r__2>r__3) ? r__2 : r__3;
     }
     sminl = 0.f;
     if (tol >= 0.f) {
-	sminoa = fabs(d__[1]);
+	sminoa = std::abs(d__[1]);
 	if (sminoa == 0.f) {
 	    goto L50;
 	}
 	mu = sminoa;
 	i__1 = *n;
 	for (i__ = 2; i__ <= i__1; ++i__) {
-	    mu = (r__2 = d__[i__], fabs(r__2)) * (mu / (mu + (r__1 = e[i__ - 
-		    1], fabs(r__1))));
+	    mu = (r__2 = d__[i__], std::abs(r__2)) * (mu / (mu + (r__1 = e[i__ - 
+		    1], std::abs(r__1))));
 	    sminoa = (sminoa<mu) ? sminoa : mu;
 	    if (sminoa == 0.f) {
 		goto L50;
 	    }
 	}
 L50:
-	sminoa /= sqrt((float) (*n));
+	sminoa /=  std::sqrt((float) (*n));
 	r__1 = tol * sminoa, r__2 = *n * 6 * *n * unfl;
 	thresh = (r__1>r__2) ? r__1 : r__2;
     } else {
-	r__1 = fabs(tol) * smax, r__2 = *n * 6 * *n * unfl;
+	r__1 = std::abs(tol) * smax, r__2 = *n * 6 * *n * unfl;
 	thresh = (r__1>r__2) ? r__1 : r__2;
     }
     maxit = *n * 6 * *n;
@@ -16243,16 +16102,16 @@ L60:
 	goto L200;
     }
 
-    if (tol < 0.f && (r__1 = d__[m], fabs(r__1)) <= thresh) {
+    if (tol < 0.f && (r__1 = d__[m], std::abs(r__1)) <= thresh) {
 	d__[m] = 0.f;
     }
-    smax = (r__1 = d__[m], fabs(r__1));
+    smax = (r__1 = d__[m], std::abs(r__1));
     smin = smax;
     i__1 = m - 1;
     for (lll = 1; lll <= i__1; ++lll) {
 	ll = m - lll;
-	abss = (r__1 = d__[ll], fabs(r__1));
-	abse = (r__1 = e[ll], fabs(r__1));
+	abss = (r__1 = d__[ll], std::abs(r__1));
+	abse = (r__1 = e[ll], std::abs(r__1));
 	if (tol < 0.f && abss <= thresh) {
 	    d__[ll] = 0.f;
 	}
@@ -16295,7 +16154,7 @@ L90:
 	goto L60;
     }
     if (ll > oldm || m < oldll) {
-	if ((r__1 = d__[ll], fabs(r__1)) >= (r__2 = d__[m], fabs(r__2))) {
+	if ((r__1 = d__[ll], std::abs(r__1)) >= (r__2 = d__[m], std::abs(r__2))) {
 	    idir = 1;
 	} else {
 	    idir = 2;
@@ -16303,44 +16162,42 @@ L90:
     }
     if (idir == 1) {
 
-        if( (fabs(e[m-1]) <= fabs(tol) * fabs(d__[m])) ||
-            (tol<0.0 && fabs(e[m-1])<=thresh)) {
+        if( (std::abs(e[m-1]) <= std::abs(tol) * std::abs(d__[m])) ||
+            (tol<0.0 && std::abs(e[m-1])<=thresh)) {
 	    e[m - 1] = 0.f;
 	    goto L60;
 	}
 	if (tol >= 0.f) {
-	    mu = (r__1 = d__[ll], fabs(r__1));
+	    mu = (r__1 = d__[ll], std::abs(r__1));
 	    sminl = mu;
 	    i__1 = m - 1;
 	    for (lll = ll; lll <= i__1; ++lll) {
-		if ((r__1 = e[lll], fabs(r__1)) <= tol * mu) {
+		if ((r__1 = e[lll], std::abs(r__1)) <= tol * mu) {
 		    e[lll] = 0.f;
 		    goto L60;
 		}
-		sminlo = sminl;
-		mu = (r__2 = d__[lll + 1], fabs(r__2)) * (mu / (mu + (r__1 = 
-			e[lll], fabs(r__1))));
+		mu = (r__2 = d__[lll + 1], std::abs(r__2)) * (mu / (mu + (r__1 = 
+			e[lll], std::abs(r__1))));
 		sminl = (sminl<mu) ? sminl : mu;
 	    }
 	}
     } else {
-        if( (fabs(e[ll]) <= fabs(tol)*fabs(d__[ll])) ||
-            (tol<0.0 && fabs(e[ll])<=thresh)) {
+        if( (std::abs(e[ll]) <= std::abs(tol)*std::abs(d__[ll])) ||
+            (tol<0.0 && std::abs(e[ll])<=thresh)) {
 	    e[ll] = 0.f;
 	    goto L60;
 	}
 	if (tol >= 0.f) {
-	    mu = (r__1 = d__[m], fabs(r__1));
+	    mu = (r__1 = d__[m], std::abs(r__1));
 	    sminl = mu;
 	    i__1 = ll;
 	    for (lll = m - 1; lll >= i__1; --lll) {
-		if ((r__1 = e[lll], fabs(r__1)) <= tol * mu) {
+		if ((r__1 = e[lll], std::abs(r__1)) <= tol * mu) {
 		    e[lll] = 0.f;
 		    goto L60;
 		}
-		sminlo = sminl;
-		mu = (r__2 = d__[lll], fabs(r__2)) * (mu / (mu + (r__1 = e[
-			lll], fabs(r__1))));
+		mu = (r__2 = d__[lll], std::abs(r__2)) * (mu / (mu + (r__1 = e[
+			lll], std::abs(r__1))));
 		sminl = (sminl<mu) ? sminl : mu;
 	    }
 	}
@@ -16353,10 +16210,10 @@ L90:
 	shift = 0.f;
     } else {
 	if (idir == 1) {
-	    sll = (r__1 = d__[ll], fabs(r__1));
+	    sll = (r__1 = d__[ll], std::abs(r__1));
 	    PLUMED_BLAS_F77_FUNC(slas2,SLAS2)(&d__[m - 1], &e[m - 1], &d__[m], &shift, &r__);
 	} else {
-	    sll = (r__1 = d__[m], fabs(r__1));
+	    sll = (r__1 = d__[m], std::abs(r__1));
 	    PLUMED_BLAS_F77_FUNC(slas2,SLAS2)(&d__[ll], &e[ll], &d__[ll + 1], &shift, &r__);
 	}
 	if (sll > 0.f) {
@@ -16404,7 +16261,7 @@ L90:
 		PLUMED_BLAS_F77_FUNC(slasr,SLASR)("L", "V", "F", &i__1, ncc, &work[nm12 + 1], &work[nm13 
 			+ 1], &c__[ll + c_dim1], ldc);
 	    }
-	    if ((r__1 = e[m - 1], fabs(r__1)) <= thresh) {
+	    if ((r__1 = e[m - 1], std::abs(r__1)) <= thresh) {
 		e[m - 1] = 0.f;
 	    }
 	} else {
@@ -16443,14 +16300,14 @@ L90:
 		PLUMED_BLAS_F77_FUNC(slasr,SLASR)("L", "V", "B", &i__1, ncc, &work[1], &work[*n], &c__[
 			ll + c_dim1], ldc);
 	    }
-	    if ((r__1 = e[ll], fabs(r__1)) <= thresh) {
+	    if ((r__1 = e[ll], std::abs(r__1)) <= thresh) {
 		e[ll] = 0.f;
 	    }
 	}
     } else {
 
 	if (idir == 1) {
-	    f = ((r__1 = d__[ll], fabs(r__1)) - shift) * ( ((d__[ll] > 0) ? c_b49 : -c_b49) + shift / d__[ll]);
+	    f = ((r__1 = d__[ll], std::abs(r__1)) - shift) * ( ((d__[ll] > 0) ? c_b49 : -c_b49) + shift / d__[ll]);
 	    g = e[ll];
 	    i__1 = m - 1;
 	    for (i__ = ll; i__ <= i__1; ++i__) {
@@ -16492,12 +16349,12 @@ L90:
 		PLUMED_BLAS_F77_FUNC(slasr,SLASR)("L", "V", "F", &i__1, ncc, &work[nm12 + 1], &work[nm13 
 			+ 1], &c__[ll + c_dim1], ldc);
 	    }
-	    if ((r__1 = e[m - 1], fabs(r__1)) <= thresh) {
+	    if ((r__1 = e[m - 1], std::abs(r__1)) <= thresh) {
 		e[m - 1] = 0.f;
 	    }
 	} else {
 
-	    f = ((r__1 = d__[m], fabs(r__1)) - shift) * ( ((d__[m] > 0) ? c_b49 : -c_b49) + shift / d__[m]);
+	    f = ((r__1 = d__[m], std::abs(r__1)) - shift) * ( ((d__[m] > 0) ? c_b49 : -c_b49) + shift / d__[m]);
 	    g = e[m - 1];
 	    i__1 = ll + 1;
 	    for (i__ = m; i__ >= i__1; --i__) {
@@ -16524,7 +16381,7 @@ L90:
 	    }
 	    e[ll] = f;
 
-	    if ((r__1 = e[ll], fabs(r__1)) <= thresh) {
+	    if ((r__1 = e[ll], std::abs(r__1)) <= thresh) {
 		e[ll] = 0.f;
 	    }
 	    if (*ncvt > 0) {
@@ -16663,7 +16520,6 @@ PLUMED_BLAS_F77_FUNC(sgebd2,SGEBD2)(int *m,
     for(i=0;i<*m;i++) {
       i1 = *n - i;
       i2 = ( (i+1) < (*n-1)) ? (i+1) : (*n-1);
-      i3 = 1;
       PLUMED_BLAS_F77_FUNC(slarfg,SLARFG)(&i1,&(a[i*(*lda)+i]),&(a[i2*(*lda)+i]),lda,&(taup[i]));
       d[i] = a[i*(*lda)+i];
       a[i*(*lda)+i] = 1.0;
@@ -16886,7 +16742,7 @@ PLUMED_BLAS_F77_FUNC(sgelq2,SGELQ2)(int *m,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 #include "lapack_limits.h"
 
@@ -17133,7 +16989,7 @@ PLUMED_BLAS_F77_FUNC(sgeqrf,SGEQRF)(int *m,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 
@@ -17169,14 +17025,13 @@ PLUMED_BLAS_F77_FUNC(sgesdd,SGESDD)(const char *jobz,
     float anrm;
     int idum[1], ierr, itau;
     int minmn, wrkbl, itaup, itauq, mnthr;
-    int wntqa;
     int nwork;
-    int wntqn, wntqo, wntqs;
+    int wntqn;
     int bdspac;
     float bignum;
-    int minwrk, ldwrku, maxwrk, ldwkvt;
+    int ldwrku, maxwrk, ldwkvt;
     float smlnum,minval, safemin;
-    int wntqas, lquery;
+    int lquery;
     int c__0 = 0;
     int c__1 = 1;
     float zero = 0.0;
@@ -17199,13 +17054,8 @@ PLUMED_BLAS_F77_FUNC(sgesdd,SGESDD)(const char *jobz,
     *info = 0;
     minmn = (*m < *n) ? *m : *n;
     mnthr = (int) (minmn * 11. / 6.);
-    wntqa  = (*jobz=='a' || *jobz=='A');
-    wntqs  = (*jobz=='s' || *jobz=='S');
-    wntqas = wntqa || wntqs;
     wntqn = (*jobz=='o' || *jobz=='O');
-    wntqo = (*jobz=='n' || *jobz=='N');
 
-    minwrk = 1;
     maxwrk = 1;
     lquery = *lwork == -1;
 
@@ -17223,7 +17073,6 @@ PLUMED_BLAS_F77_FUNC(sgesdd,SGESDD)(const char *jobz,
 		    wrkbl = *n * 67;
 		    i__1 = wrkbl, i__2 = bdspac + *n;
 		    maxwrk = (i__1 > i__2) ? i__1 : i__2;
-		    minwrk = bdspac + *n;
 		} else {
 
 		    wrkbl = *n * 67;
@@ -17232,7 +17081,6 @@ PLUMED_BLAS_F77_FUNC(sgesdd,SGESDD)(const char *jobz,
 		    i__1 = wrkbl, i__2 = bdspac + *n * 3;
 		    wrkbl = (i__1 > i__2) ? i__1 : i__2;
 		    maxwrk = wrkbl + *n * *n;
-		    minwrk = bdspac + *n * *n + *n * 3;
 		}
 	    } else {
 
@@ -17240,11 +17088,9 @@ PLUMED_BLAS_F77_FUNC(sgesdd,SGESDD)(const char *jobz,
 		if (wntqn) {
 		    i__1 = wrkbl, i__2 = bdspac + *n * 3;
 		    maxwrk = (i__1 > i__2) ? i__1 : i__2;
-		    minwrk = *n * 3 + ((*m > bdspac) ? *m : bdspac);
 		} else {
 		    i__1 = maxwrk, i__2 = bdspac + *n * 3;
 		    maxwrk = (i__1 > i__2) ? i__1 : i__2;
-		    minwrk = *n * 3 + ((*m > bdspac) ? *m : bdspac);
 		}
 	    }
 	} else {
@@ -17260,7 +17106,6 @@ PLUMED_BLAS_F77_FUNC(sgesdd,SGESDD)(const char *jobz,
 		    wrkbl = *m * 67;
 		    i__1 = wrkbl, i__2 = bdspac + *m;
 		    maxwrk = (i__1 > i__2) ? i__1 : i__2;
-		    minwrk = bdspac + *m;
 		} else {
 
 		    wrkbl = *m * 67;
@@ -17270,18 +17115,15 @@ PLUMED_BLAS_F77_FUNC(sgesdd,SGESDD)(const char *jobz,
 		    i__1 = wrkbl, i__2 = bdspac + *m * 3;
 		    wrkbl = (i__1 > i__2) ? i__1 : i__2;
 		    maxwrk = wrkbl + *m * *m;
-		    minwrk = bdspac + *m * *m + *m * 3;
 		}
 	    } else {
 		wrkbl = *m * 3 + (*m + *n*32);
 		if (wntqn) {
 		    i__1 = wrkbl, i__2 = bdspac + *m * 3;
 		    maxwrk = (i__1 > i__2) ? i__1 : i__2;
-		    minwrk = *m * 3 + ((*m > bdspac) ? *m : bdspac);
 		} else {
 		    i__1 = wrkbl, i__2 = bdspac + *m * 3;
 		    maxwrk = (i__1 > i__2) ? i__1 : i__2;
-		    minwrk = *m * 3 + ((*m > bdspac) ? *m : bdspac);
 		}
 	    }
 	}
@@ -17302,7 +17144,7 @@ PLUMED_BLAS_F77_FUNC(sgesdd,SGESDD)(const char *jobz,
     eps = PLUMED_GMX_FLOAT_EPS;
     minval = PLUMED_GMX_FLOAT_MIN;
     safemin = minval / eps;
-    smlnum = sqrt(safemin) / eps;
+    smlnum =  std::sqrt(safemin) / eps;
 
 
     bignum = 1. / smlnum;
@@ -17568,7 +17410,7 @@ PLUMED_BLAS_F77_FUNC(sgesdd,SGESDD)(const char *jobz,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "blas/blas.h"
@@ -17588,10 +17430,9 @@ PLUMED_BLAS_F77_FUNC(sgetf2,SGETF2)(int *m,
 	int *info)
 {
   int j,jp,k,t1,t2,t3;
-  float one,minusone;
+  float minusone;
   float tmp;
 
-  one = 1.0;
   minusone = -1.0;
 
   if(*m<=0 || *n<=0)
@@ -17603,7 +17444,7 @@ PLUMED_BLAS_F77_FUNC(sgetf2,SGETF2)(int *m,
     t2 = 1;
     jp = j - 1 + PLUMED_BLAS_F77_FUNC(isamax,ISAMAX)(&t1,&(a[(j-1)*(*lda)+(j-1)]),&t2);
     ipiv[j-1] = jp;
-    if( fabs(a[(j-1)*(*lda)+(jp-1)])>PLUMED_GMX_FLOAT_MIN ) {
+    if( std::abs(a[(j-1)*(*lda)+(jp-1)])>PLUMED_GMX_FLOAT_MIN ) {
       if(jp != j)
 	PLUMED_BLAS_F77_FUNC(sswap,SSWAP)(n,&(a[ j-1 ]),lda,&(a[ jp-1 ]),lda);
       
@@ -17906,7 +17747,7 @@ PLUMED_BLAS_F77_FUNC(sgetrs,SGETRS)(const char *trans,
 } 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "blas/blas.h"
 #include "lapack.h"
 
@@ -18158,7 +17999,7 @@ PLUMED_BLAS_F77_FUNC(slabrd,SLABRD)(int *m,
 
 }
 }
-#include<ctype.h>
+#include <cctype>
 #include "lapack.h"
 
 /* LAPACK */
@@ -18176,7 +18017,7 @@ PLUMED_BLAS_F77_FUNC(slacpy,SLACPY)(const char *uplo,
 	int *ldb)
 {
   int i,j,minjm;
-  const char ch=toupper(*uplo);
+  const char ch=std::toupper(*uplo);
 
   if(ch=='U') {
     for(j=0;j<*n;j++) {
@@ -18198,7 +18039,7 @@ PLUMED_BLAS_F77_FUNC(slacpy,SLACPY)(const char *uplo,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 
 
@@ -18219,10 +18060,10 @@ PLUMED_BLAS_F77_FUNC(slae2,SLAE2)(float *a,
 
     sm = *a + *c__;
     df = *a - *c__;
-    adf = fabs(df);
+    adf = std::abs(df);
     tb = *b + *b;
-    ab = fabs(tb);
-    if (fabs(*a) > fabs(*c__)) {
+    ab = std::abs(tb);
+    if (std::abs(*a) > std::abs(*c__)) {
 	acmx = *a;
 	acmn = *c__;
     } else {
@@ -18231,13 +18072,13 @@ PLUMED_BLAS_F77_FUNC(slae2,SLAE2)(float *a,
     }
     if (adf > ab) {
 	d__1 = ab / adf;
-	rt = adf * sqrt(d__1 * d__1 + 1.);
+	rt = adf *  std::sqrt(d__1 * d__1 + 1.);
     } else if (adf < ab) {
 	d__1 = adf / ab;
-	rt = ab * sqrt(d__1 * d__1 + 1.);
+	rt = ab *  std::sqrt(d__1 * d__1 + 1.);
     } else {
 
-	rt = ab * sqrt(2.);
+	rt = ab *  std::sqrt(2.);
     }
     if (sm < 0.) {
 	*rt1 = (sm - rt) * .5;
@@ -18256,7 +18097,7 @@ PLUMED_BLAS_F77_FUNC(slae2,SLAE2)(float *a,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 
 #include "blas/blas.h"
@@ -18321,7 +18162,7 @@ PLUMED_BLAS_F77_FUNC(slaebz,SLAEBZ)(int *ijob,
 	for (ji = 1; ji <= i__1; ++ji) {
 	    for (jp = 1; jp <= 2; ++jp) {
 		tmp1 = d__[1] - ab[ji + jp * ab_dim1];
-		if (fabs(tmp1) < *pivmin) {
+		if (std::abs(tmp1) < *pivmin) {
 		    tmp1 = -(*pivmin);
 		}
 		nab[ji + jp * nab_dim1] = 0;
@@ -18332,7 +18173,7 @@ PLUMED_BLAS_F77_FUNC(slaebz,SLAEBZ)(int *ijob,
 		i__2 = *n;
 		for (j = 2; j <= i__2; ++j) {
 		    tmp1 = d__[j] - e2[j - 1] / tmp1 - ab[ji + jp * ab_dim1];
-		    if (fabs(tmp1) < *pivmin) {
+		    if (std::abs(tmp1) < *pivmin) {
 			tmp1 = -(*pivmin);
 		    }
 		    if (tmp1 <= 0.) {
@@ -18509,9 +18350,9 @@ PLUMED_BLAS_F77_FUNC(slaebz,SLAEBZ)(int *ijob,
 	kfnew = kf;
 	i__2 = kl;
 	for (ji = kf; ji <= i__2; ++ji) {
-	    tmp1 = fabs(ab[ji + (ab_dim1 << 1)] - ab[ji + ab_dim1]);
-	    d__3 = fabs(ab[ji + (ab_dim1 << 1)]);
-	    d__4 = fabs(ab[ji + ab_dim1]);
+	    tmp1 = std::abs(ab[ji + (ab_dim1 << 1)] - ab[ji + ab_dim1]);
+	    d__3 = std::abs(ab[ji + (ab_dim1 << 1)]);
+	    d__4 = std::abs(ab[ji + ab_dim1]);
 	    tmp2 = (d__3>d__4) ? d__3 : d__4;
 	    d__1 = (*abstol>*pivmin) ? *abstol : *pivmin;
 	    d__2 = *reltol * tmp2;
@@ -18565,7 +18406,7 @@ PLUMED_BLAS_F77_FUNC(slaebz,SLAEBZ)(int *ijob,
 
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "lapack.h"
 
@@ -18619,7 +18460,7 @@ PLUMED_BLAS_F77_FUNC(slaed6,SLAED6)(int *kniter,
 	    a = c__ * (d__[1] + d__[2]) + z__[1] + z__[2];
 	    b = c__ * d__[1] * d__[2] + z__[1] * d__[2] + z__[2] * d__[1];
 	}
-        r__1 = fabs(a), r__2 = fabs(b), r__1 = ((r__1>r__2)? r__1:r__2), r__2 = fabs(c__);
+        r__1 = std::abs(a), r__2 = std::abs(b), r__1 = ((r__1>r__2)? r__1:r__2), r__2 = std::abs(c__);
         temp = (r__1>r__2) ? r__1 : r__2;
 	a /= temp;
 	b /= temp;
@@ -18627,15 +18468,15 @@ PLUMED_BLAS_F77_FUNC(slaed6,SLAED6)(int *kniter,
 	if (c__ == 0.f) {
 	    *tau = b / a;
 	} else if (a <= 0.f) {
-	    *tau = (a - sqrt((r__1 = a * a - b * 4.f * c__, fabs(r__1)))) / (
+	    *tau = (a -  std::sqrt((r__1 = a * a - b * 4.f * c__, std::abs(r__1)))) / (
 		    c__ * 2.f);
 	} else {
-	    *tau = b * 2.f / (a + sqrt((r__1 = a * a - b * 4.f * c__, fabs(r__1))));
+	    *tau = b * 2.f / (a +  std::sqrt((r__1 = a * a - b * 4.f * c__, std::abs(r__1))));
 	}
 
 	temp = *rho + z__[1] / (d__[1] - *tau) + z__[2] / (d__[2] - *tau) + 
 		z__[3] / (d__[3] - *tau);
-	if (fabs(*finit) <= fabs(temp)) {
+	if (std::abs(*finit) <= std::abs(temp)) {
 	    *tau = 0.f;
 	}
     }
@@ -18643,19 +18484,19 @@ PLUMED_BLAS_F77_FUNC(slaed6,SLAED6)(int *kniter,
     eps = PLUMED_GMX_FLOAT_EPS;
     base = 2;
     safemin = PLUMED_GMX_FLOAT_MIN*(1.0+PLUMED_GMX_FLOAT_EPS);
-    i__1 = (int) (log(safemin) / log(base) / 3.f);
-    small1 = pow(base, i__1);
+    i__1 = static_cast<int>(std::log(safemin) / std::log(base) / 3.f);
+    small1 = std::pow(base, static_cast<float>(i__1));
     sminv1 = 1.f / small1;
     small2 = small1 * small1;
     sminv2 = sminv1 * sminv1;
 
     if (*orgati) {
-	r__3 = (r__1 = d__[2] - *tau, fabs(r__1)), r__4 = (r__2 = d__[3] - *
-		tau, fabs(r__2));
+	r__3 = (r__1 = d__[2] - *tau, std::abs(r__1)), r__4 = (r__2 = d__[3] - *
+		tau, std::abs(r__2));
         temp = (r__3<r__4) ? r__3 : r__4;
     } else {
-	r__3 = (r__1 = d__[1] - *tau, fabs(r__1)), r__4 = (r__2 = d__[2] - *
-		tau, fabs(r__2));
+	r__3 = (r__1 = d__[1] - *tau, std::abs(r__1)), r__4 = (r__2 = d__[2] - *
+		tau, std::abs(r__2));
 	temp = (r__3<r__4) ? r__3 : r__4;
     }
     scale = 0;
@@ -18698,7 +18539,7 @@ PLUMED_BLAS_F77_FUNC(slaed6,SLAED6)(int *kniter,
     }
     f = *finit + *tau * fc;
 
-    if (fabs(f) <= 0.f) {
+    if (std::abs(f) <= 0.f) {
 	goto L60;
     }
     iter = niter + 1;
@@ -18713,7 +18554,7 @@ PLUMED_BLAS_F77_FUNC(slaed6,SLAED6)(int *kniter,
 	a = (temp1 + temp2) * f - temp1 * temp2 * df;
 	b = temp1 * temp2 * f;
 	c__ = f - (temp1 + temp2) * df + temp1 * temp2 * ddf;
-	r__1 = fabs(a), r__2 = fabs(b), r__1 = ((r__1>r__2)? r__1:r__2), r__2 = fabs(c__);
+	r__1 = std::abs(a), r__2 = std::abs(b), r__1 = ((r__1>r__2)? r__1:r__2), r__2 = std::abs(c__);
 	temp = (r__1>r__2) ? r__1 : r__2;
 	a /= temp;
 	b /= temp;
@@ -18721,9 +18562,9 @@ PLUMED_BLAS_F77_FUNC(slaed6,SLAED6)(int *kniter,
 	if (c__ == 0.f) {
 	    eta = b / a;
 	} else if (a <= 0.f) {
-	    eta = (a - sqrt((r__1 = a * a - b * 4.f * c__, fabs(r__1)))) / ( c__ * 2.f);
+	    eta = (a -  std::sqrt((r__1 = a * a - b * 4.f * c__, std::abs(r__1)))) / ( c__ * 2.f);
 	} else {
-	    eta = b * 2.f / (a + sqrt((r__1 = a * a - b * 4.f * c__, fabs( r__1))));
+	    eta = b * 2.f / (a +  std::sqrt((r__1 = a * a - b * 4.f * c__, std::abs( r__1))));
 	}
 	if (f * eta >= 0.f) {
 	    eta = -f / df;
@@ -18757,13 +18598,13 @@ PLUMED_BLAS_F77_FUNC(slaed6,SLAED6)(int *kniter,
 	    temp3 = temp2 * temp;
 	    temp4 = temp1 / dscale[i__ - 1];
 	    fc += temp4;
-	    erretm += fabs(temp4);
+	    erretm += std::abs(temp4);
 	    df += temp2;
 	    ddf += temp3;
 	}
 	f = *finit + *tau * fc;
-	erretm = (fabs(*finit) + fabs(*tau) * erretm) * 8.f + fabs(*tau) * df;
-	if (fabs(f) <= eps * erretm) {
+	erretm = (std::abs(*finit) + std::abs(*tau) * erretm) * 8.f + std::abs(*tau) * df;
+	if (std::abs(f) <= eps * erretm) {
 	    goto L60;
 	}
     }
@@ -18778,7 +18619,7 @@ L60:
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "lapack.h"
@@ -18805,10 +18646,10 @@ PLUMED_BLAS_F77_FUNC(slaev2,SLAEV2)(float *   a,
 
     sm = *a + *c__;
     df = *a - *c__;
-    adf = fabs(df);
+    adf = std::abs(df);
     tb = *b + *b;
-    ab = fabs(tb);
-    if (fabs(*a) > fabs(*c__)) {
+    ab = std::abs(tb);
+    if (std::abs(*a) > std::abs(*c__)) {
 	acmx = *a;
 	acmn = *c__;
     } else {
@@ -18817,13 +18658,13 @@ PLUMED_BLAS_F77_FUNC(slaev2,SLAEV2)(float *   a,
     }
     if (adf > ab) {
 	d__1 = ab / adf;
-	rt = adf * sqrt(d__1 * d__1 + 1.);
+	rt = adf *  std::sqrt(d__1 * d__1 + 1.);
     } else if (adf < ab) {
 	d__1 = adf / ab;
-	rt = ab * sqrt(d__1 * d__1 + 1.);
+	rt = ab *  std::sqrt(d__1 * d__1 + 1.);
     } else {
 
-	rt = ab * sqrt(2.);
+	rt = ab *  std::sqrt(2.);
     }
     if (sm < 0.) {
 	*rt1 = (sm - rt) * .5;
@@ -18846,18 +18687,18 @@ PLUMED_BLAS_F77_FUNC(slaev2,SLAEV2)(float *   a,
 	cs = df - rt;
 	sgn2 = -1;
     }
-    acs = fabs(cs);
+    acs = std::abs(cs);
     if (acs > ab) {
 	ct = -tb / cs;
-	*sn1 = 1. / sqrt(ct * ct + 1.);
+	*sn1 = 1. /  std::sqrt(ct * ct + 1.);
 	*cs1 = ct * *sn1;
     } else {
-	if (fabs(ab)<PLUMED_GMX_FLOAT_MIN) {
+	if (std::abs(ab)<PLUMED_GMX_FLOAT_MIN) {
 	    *cs1 = 1.;
 	    *sn1 = 0.;
 	} else {
 	    tn = -cs / tb;
-	    *cs1 = 1. / sqrt(tn * tn + 1.);
+	    *cs1 = 1. /  std::sqrt(tn * tn + 1.);
 	    *sn1 = tn * *cs1;
 	}
     }
@@ -18873,7 +18714,7 @@ PLUMED_BLAS_F77_FUNC(slaev2,SLAEV2)(float *   a,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "lapack.h"
@@ -18910,7 +18751,6 @@ PLUMED_BLAS_F77_FUNC(slagtf,SLAGTF)(int *n,
     *info = 0;
     if (*n < 0) {
 	*info = -1;
-	i__1 = -(*info);
 	return;
     }
 
@@ -18920,7 +18760,7 @@ PLUMED_BLAS_F77_FUNC(slagtf,SLAGTF)(int *n,
     a[1] -= *lambda;
     in[*n] = 0;
     if (*n == 1) {
-	if (fabs(a[1])<PLUMED_GMX_FLOAT_MIN) {
+	if (std::abs(a[1])<PLUMED_GMX_FLOAT_MIN) {
 	    in[1] = 1;
 	}
 	return;
@@ -18929,20 +18769,20 @@ PLUMED_BLAS_F77_FUNC(slagtf,SLAGTF)(int *n,
     eps = PLUMED_GMX_FLOAT_EPS;
 
     tl = (*tol>eps) ? *tol : eps;
-    scale1 = fabs(a[1]) + fabs(b[1]);
+    scale1 = std::abs(a[1]) + std::abs(b[1]);
     i__1 = *n - 1;
     for (k = 1; k <= i__1; ++k) {
 	a[k + 1] -= *lambda;
-	scale2 = fabs(c__[k]) + fabs(a[k + 1]);
+	scale2 = std::abs(c__[k]) + std::abs(a[k + 1]);
 	if (k < *n - 1) {
-	    scale2 += fabs(b[k + 1]);
+	    scale2 += std::abs(b[k + 1]);
 	}
-	if (fabs(a[k])<PLUMED_GMX_FLOAT_MIN) {
+	if (std::abs(a[k])<PLUMED_GMX_FLOAT_MIN) {
 	    piv1 = 0.;
 	} else {
-	    piv1 = fabs(a[k]) / scale1;
+	    piv1 = std::abs(a[k]) / scale1;
 	}
-	if (fabs(c__[k])<PLUMED_GMX_FLOAT_MIN) {
+	if (std::abs(c__[k])<PLUMED_GMX_FLOAT_MIN) {
 	    in[k] = 0;
 	    piv2 = 0.;
 	    scale1 = scale2;
@@ -18950,7 +18790,7 @@ PLUMED_BLAS_F77_FUNC(slagtf,SLAGTF)(int *n,
 		d__[k] = 0.;
 	    }
 	} else {
-	    piv2 = fabs(c__[k]) / scale2;
+	    piv2 = std::abs(c__[k]) / scale2;
 	    if (piv2 <= piv1) {
 		in[k] = 0;
 		scale1 = scale2;
@@ -18977,7 +18817,7 @@ PLUMED_BLAS_F77_FUNC(slagtf,SLAGTF)(int *n,
 	    in[*n] = k;
 	}
     }
-    if (fabs(a[*n]) <= scale1 * tl && in[*n] == 0) {
+    if (std::abs(a[*n]) <= scale1 * tl && in[*n] == 0) {
 	in[*n] = *n;
     }
 
@@ -18989,7 +18829,7 @@ PLUMED_BLAS_F77_FUNC(slagtf,SLAGTF)(int *n,
 }
 }
 #include <stdlib.h>
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "lapack.h"
@@ -19032,7 +18872,6 @@ PLUMED_BLAS_F77_FUNC(slagts,SLAGTS)(int *job,
 	*info = -2;
     }
     if (*info != 0) {
-	i__1 = -(*info);
 	return;
     }
 
@@ -19047,26 +18886,26 @@ PLUMED_BLAS_F77_FUNC(slagts,SLAGTS)(int *job,
 
     if (*job < 0) {
 	if (*tol <= 0.) {
-	    *tol = fabs(a[1]);
+	    *tol = std::abs(a[1]);
 	    if (*n > 1) {
 		d__1 = *tol;
-		d__2 = fabs(a[2]);
+		d__2 = std::abs(a[2]);
 		d__1 = (d__1>d__2) ? d__1 : d__2;
-		d__2 = fabs(b[1]);
+		d__2 = std::abs(b[1]);
 		*tol = (d__1>d__2) ? d__1 : d__2;
 	    }
 	    i__1 = *n;
 	    for (k = 3; k <= i__1; ++k) {
 	      d__4 = *tol;
-	      d__5 = fabs(a[k]);
+	      d__5 = std::abs(a[k]);
 	      d__4 = (d__4>d__5) ? d__4 : d__5;
-	      d__5 = fabs(b[k - 1]);
+	      d__5 = std::abs(b[k - 1]);
 	      d__4 = (d__4>d__5) ? d__4 : d__5;
-	      d__5 = fabs(d__[k - 2]);
+	      d__5 = std::abs(d__[k - 2]);
 	      *tol = (d__4>d__5) ? d__4 : d__5;
 	    }
 	    *tol *= eps;
-	    if (fabs(*tol)<PLUMED_GMX_FLOAT_MIN) {
+	    if (std::abs(*tol)<PLUMED_GMX_FLOAT_MIN) {
 		*tol = eps;
 	    }
 	}
@@ -19093,17 +18932,17 @@ PLUMED_BLAS_F77_FUNC(slagts,SLAGTS)(int *job,
 		    temp = y[k];
 		}
 		ak = a[k];
-		absak = fabs(ak);
+		absak = std::abs(ak);
 		if (absak < 1.) {
 		    if (absak < sfmin) {
-			if (fabs(absak)<PLUMED_GMX_FLOAT_MIN || fabs(temp) * sfmin > absak) {
+			if (std::abs(absak)<PLUMED_GMX_FLOAT_MIN || std::abs(temp) * sfmin > absak) {
 			    *info = k;
 			    return;
 			} else {
 			    temp *= bignum;
 			    ak *= bignum;
 			}
-		    } else if (fabs(temp) > absak * bignum) {
+		    } else if (std::abs(temp) > absak * bignum) {
 			*info = k;
 			return;
 		    }
@@ -19125,10 +18964,10 @@ PLUMED_BLAS_F77_FUNC(slagts,SLAGTS)(int *job,
 		if(ak<0)
 		  pert *= -1.0;
 L40:
-		absak = fabs(ak);
+		absak = std::abs(ak);
 		if (absak < 1.) {
 		    if (absak < sfmin) {
-			if (fabs(absak)<PLUMED_GMX_FLOAT_MIN || fabs(temp) * sfmin > absak) {
+			if (std::abs(absak)<PLUMED_GMX_FLOAT_MIN || std::abs(temp) * sfmin > absak) {
 			    ak += pert;
 			    pert *= 2;
 			    goto L40;
@@ -19136,7 +18975,7 @@ L40:
 			    temp *= bignum;
 			    ak *= bignum;
 			}
-		    } else if (fabs(temp) > absak * bignum) {
+		    } else if (std::abs(temp) > absak * bignum) {
 			ak += pert;
 			pert *= 2;
 			goto L40;
@@ -19158,17 +18997,17 @@ L40:
 		    temp = y[k];
 		}
 		ak = a[k];
-		absak = fabs(ak);
+		absak = std::abs(ak);
 		if (absak < 1.) {
 		    if (absak < sfmin) {
-			if (fabs(absak)<PLUMED_GMX_FLOAT_MIN || fabs(temp) * sfmin > absak) {
+			if (std::abs(absak)<PLUMED_GMX_FLOAT_MIN || std::abs(temp) * sfmin > absak) {
 			    *info = k;
 			    return;
 			} else {
 			    temp *= bignum;
 			    ak *= bignum;
 			}
-		    } else if (fabs(temp) > absak * bignum) {
+		    } else if (std::abs(temp) > absak * bignum) {
 			*info = k;
 			return;
 		    }
@@ -19192,10 +19031,10 @@ L40:
 		  pert *= -1.0;
 
 L70:
-		absak = fabs(ak);
+		absak = std::abs(ak);
 		if (absak < 1.) {
 		    if (absak < sfmin) {
-			if (fabs(absak)<PLUMED_GMX_FLOAT_MIN || fabs(temp) * sfmin > absak) {
+			if (std::abs(absak)<PLUMED_GMX_FLOAT_MIN || std::abs(temp) * sfmin > absak) {
 			    ak += pert;
 			    pert *= 2;
 			    goto L70;
@@ -19203,7 +19042,7 @@ L70:
 			    temp *= bignum;
 			    ak *= bignum;
 			}
-		    } else if (fabs(temp) > absak * bignum) {
+		    } else if (std::abs(temp) > absak * bignum) {
 			ak += pert;
 			pert *= 2;
 			goto L70;
@@ -19295,8 +19134,9 @@ PLUMED_BLAS_F77_FUNC(slamrg,SLAMRG)(int *n1,
 }
 }
 }
-#include<math.h>
-#include<ctype.h>
+#include <cctype>
+#include <cmath>
+
 #include "lapack.h"
 
 
@@ -19312,7 +19152,7 @@ PLUMED_BLAS_F77_FUNC(slange,SLANGE)(const char *norm,
 	int *lda,
 	float *work)
 {
-  const char ch=toupper(*norm);
+  const char ch=std::toupper(*norm);
   float dtemp,sum,max,val,scale;
   int i,j;
 
@@ -19321,7 +19161,7 @@ PLUMED_BLAS_F77_FUNC(slange,SLANGE)(const char *norm,
     max = 0.0;
     for(j=0;j<*n;j++)
       for(i=0;i<*m;i++) {
-	dtemp = fabs(a[j*(*lda)+i]);
+	dtemp = std::abs(a[j*(*lda)+i]);
 	if(dtemp>max)
 	  max = dtemp;
       }
@@ -19334,7 +19174,7 @@ PLUMED_BLAS_F77_FUNC(slange,SLANGE)(const char *norm,
     for(j=0;j<*n;j++) {
       sum = 0.0;
       for(i=0;i<*m;i++) 
-	sum += fabs(a[j*(*lda)+i]);
+	sum += std::abs(a[j*(*lda)+i]);
       if(sum>max)
 	max = sum;
     }
@@ -19346,7 +19186,7 @@ PLUMED_BLAS_F77_FUNC(slange,SLANGE)(const char *norm,
       work[i] = 0.0;
     for(j=0;j<*n;j++)
       for(i=0;i<*m;i++)
-	work[i] += fabs(a[j*(*lda)+i]);
+	work[i] += std::abs(a[j*(*lda)+i]);
     max = 0;
     for(i=0;i<*m;i++)
       if(work[i]>max)
@@ -19361,7 +19201,7 @@ PLUMED_BLAS_F77_FUNC(slange,SLANGE)(const char *norm,
     i = 1;
     for(j=0;j<*n;j++) 
       PLUMED_BLAS_F77_FUNC(slassq,SLASSQ)(m,&(a[j*(*lda)+0]),&i,&scale,&sum);
-    val = scale*sqrt(sum);
+    val = scale* std::sqrt(sum);
     break;
 
   default:
@@ -19372,8 +19212,9 @@ PLUMED_BLAS_F77_FUNC(slange,SLANGE)(const char *norm,
 }
 }
 }
-#include <math.h>
-#include <ctype.h>
+#include <cctype>
+#include <cmath>
+
 #include "lapack.h"
 
 
@@ -19387,7 +19228,7 @@ PLUMED_BLAS_F77_FUNC(slanst,SLANST)(const char *norm,
 	float *d,
 	float *e)
 {
-  const char ch=toupper(*norm);
+  const char ch=std::toupper(*norm);
   float dtemp,max,val,scale,sum;
   int i,j;
 
@@ -19397,12 +19238,12 @@ PLUMED_BLAS_F77_FUNC(slanst,SLANST)(const char *norm,
   
   switch(ch) {
   case 'M':
-    max = fabs(d[*n-1]);
+    max = std::abs(d[*n-1]);
       for(i=0;i<(*n-1);i++) {
-	dtemp = fabs(d[i]);
+	dtemp = std::abs(d[i]);
 	if(dtemp>max)
 	  max = dtemp;
-	dtemp = fabs(e[i]);
+	dtemp = std::abs(e[i]);
 	if(dtemp>max)
 	  max = dtemp;
       }
@@ -19414,14 +19255,14 @@ PLUMED_BLAS_F77_FUNC(slanst,SLANST)(const char *norm,
   case 'I':
 
     if(*n==1)
-      val = fabs(d[0]);
+      val = std::abs(d[0]);
     else {
-      max = fabs(d[0]) + fabs(e[0]);
-      dtemp = fabs(e[*n-2]) + fabs(d[*n-1]);
+      max = std::abs(d[0]) + std::abs(e[0]);
+      dtemp = std::abs(e[*n-2]) + std::abs(d[*n-1]);
       if(dtemp>max)
 	max = dtemp;
       for(i=1;i<(*n-1);i++) {
-	dtemp = fabs(d[i]) + fabs(e[i]) + fabs(e[i-1]);
+	dtemp = std::abs(d[i]) + std::abs(e[i]) + std::abs(e[i-1]);
 	if(dtemp>max)
 	  max = dtemp;
       }
@@ -19440,7 +19281,7 @@ PLUMED_BLAS_F77_FUNC(slanst,SLANST)(const char *norm,
       sum *= 2;
     }
     PLUMED_BLAS_F77_FUNC(slassq,SLASSQ)(n,d,&j,&scale,&sum);
-    val = scale * sqrt(sum);
+    val = scale *  std::sqrt(sum);
     break;
     
   default:
@@ -19451,7 +19292,7 @@ PLUMED_BLAS_F77_FUNC(slanst,SLANST)(const char *norm,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 
 
 #include "lapack.h"
@@ -19490,7 +19331,7 @@ PLUMED_BLAS_F77_FUNC(slansy,SLANSY)(const char *norm, const char *uplo, int *n,
 		i__2 = j;
 		for (i__ = 1; i__ <= i__2; ++i__) {
 		  d__2 = value;
-		  d__3 = fabs(a[i__ + j * a_dim1]);
+		  d__3 = std::abs(a[i__ + j * a_dim1]);
 		  value = (d__2>d__3) ? d__2 : d__3;
 		}
 	    }
@@ -19500,7 +19341,7 @@ PLUMED_BLAS_F77_FUNC(slansy,SLANSY)(const char *norm, const char *uplo, int *n,
 		i__2 = *n;
 		for (i__ = j; i__ <= i__2; ++i__) {
 		  d__2 = value;
-		  d__3 = fabs(a[i__ + j * a_dim1]);
+		  d__3 = std::abs(a[i__ + j * a_dim1]);
 		    value =  (d__2>d__3) ? d__2 : d__3;
 		}
 	    }
@@ -19514,11 +19355,11 @@ PLUMED_BLAS_F77_FUNC(slansy,SLANSY)(const char *norm, const char *uplo, int *n,
 		sum = 0.;
 		i__2 = j - 1;
 		for (i__ = 1; i__ <= i__2; ++i__) {
-		    absa = fabs(a[i__ + j * a_dim1]);
+		    absa = std::abs(a[i__ + j * a_dim1]);
 		    sum += absa;
 		    work[i__] += absa;
 		}
-		work[j] = sum + fabs(a[j + j * a_dim1]);
+		work[j] = sum + std::abs(a[j + j * a_dim1]);
 	    }
 	    i__1 = *n;
 	    for (i__ = 1; i__ <= i__1; ++i__) {
@@ -19532,10 +19373,10 @@ PLUMED_BLAS_F77_FUNC(slansy,SLANSY)(const char *norm, const char *uplo, int *n,
 	    }
 	    i__1 = *n;
 	    for (j = 1; j <= i__1; ++j) {
-		sum = work[j] + fabs(a[j + j * a_dim1]);
+		sum = work[j] + std::abs(a[j + j * a_dim1]);
 		i__2 = *n;
 		for (i__ = j + 1; i__ <= i__2; ++i__) {
-		    absa = fabs(a[i__ + j * a_dim1]);
+		    absa = std::abs(a[i__ + j * a_dim1]);
 		    sum += absa;
 		    work[i__] += absa;
 		}
@@ -19563,7 +19404,7 @@ PLUMED_BLAS_F77_FUNC(slansy,SLANSY)(const char *norm, const char *uplo, int *n,
 	sum *= 2;
 	i__1 = *lda + 1;
 	PLUMED_BLAS_F77_FUNC(slassq,SLASSQ)(n, &a[a_offset], &i__1, &scale, &sum);
-	value = scale * sqrt(sum);
+	value = scale *  std::sqrt(sum);
     }
 
     ret_val = value;
@@ -19573,7 +19414,7 @@ PLUMED_BLAS_F77_FUNC(slansy,SLANSY)(const char *norm, const char *uplo, int *n,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 
 #include "real.h"
@@ -19588,8 +19429,8 @@ PLUMED_BLAS_F77_FUNC(slapy2,SLAPY2)(float * x, float * y)
   float xabs,yabs;
   float w,z;
 
-  xabs = fabs(*x);
-  yabs = fabs(*y);
+  xabs = std::abs(*x);
+  yabs = std::abs(*y);
   
   if(xabs>yabs) {
     w = xabs;
@@ -19599,17 +19440,17 @@ PLUMED_BLAS_F77_FUNC(slapy2,SLAPY2)(float * x, float * y)
     z = xabs;
   }
 
-  if( fabs(z)<PLUMED_GMX_FLOAT_MIN) 
+  if( std::abs(z)<PLUMED_GMX_FLOAT_MIN) 
     return w;
   else {
     z = z/w;
-    return w*sqrt(1.0+z*z);
+    return w* std::sqrt(1.0+z*z);
   }
 }
   
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "real.h"
 
@@ -19706,12 +19547,12 @@ L40:
 	s = work[inds + i__] - *sigma;
     }
 
-    if (! (s > 0. || s < 1.)) {
+    if (std::isnan(s)) {
 
 	sawnan = 1;
 	j = *b1 + 1;
 L60:
-	if (work[inds + j] > 0. || work[inds + j] < 1.) {
+    if (!std::isnan(work[inds + j])) {
 	    ++j;
 	    goto L60;
 	}
@@ -19721,7 +19562,7 @@ L60:
 	for (i__ = j + 1; i__ <= i__1; ++i__) {
 	    dplus = d__[i__] + s;
 	    work[i__] = ld[i__] / dplus;
-	    if (fabs(work[i__])<PLUMED_GMX_FLOAT_MIN) {
+	    if (std::abs(work[i__])<PLUMED_GMX_FLOAT_MIN) {
 		work[inds + i__] = lld[i__];
 	    } else {
 		work[inds + i__] = s * work[i__] * l[i__];
@@ -19739,12 +19580,12 @@ L60:
 	work[indp + i__ - 1] = work[indp + i__] * tmp - *sigma;
     }
     tmp = work[indp + r1 - 1];
-    if (! (tmp > 0. || tmp < 1.)) {
+    if (std::isnan(tmp)) {
 
 	sawnan = 1;
 	j = *bn - 3;
 L90:
-	if (work[indp + j] > 0. || work[indp + j] < 1.) {
+    if (!std::isnan(work[indp + j])) {
 	    --j;
 	    goto L90;
 	}
@@ -19754,7 +19595,7 @@ L90:
 	    dminus = lld[i__] + work[indp + i__];
 	    tmp = d__[i__] / dminus;
 	    work[indumn + i__] = l[i__] * tmp;
-	    if (fabs(tmp)<PLUMED_GMX_FLOAT_MIN) {
+	    if (std::abs(tmp)<PLUMED_GMX_FLOAT_MIN) {
 		work[indp + i__ - 1] = d__[i__] - *sigma;
 	    } else {
 		work[indp + i__ - 1] = work[indp + i__] * tmp - *sigma;
@@ -19763,17 +19604,17 @@ L90:
     }
 
     *mingma = work[inds + r1 - 1] + work[indp + r1 - 1];
-    if (fabs(*mingma)<PLUMED_GMX_FLOAT_MIN) {
+    if (std::abs(*mingma)<PLUMED_GMX_FLOAT_MIN) {
 	*mingma = eps * work[inds + r1 - 1];
     }
     *r__ = r1;
     i__1 = r2 - 1;
     for (i__ = r1; i__ <= i__1; ++i__) {
 	tmp = work[inds + i__] + work[indp + i__];
-	if (fabs(tmp)<PLUMED_GMX_FLOAT_MIN) {
+	if (std::abs(tmp)<PLUMED_GMX_FLOAT_MIN) {
 	    tmp = eps * work[inds + i__];
 	}
-	if (fabs(tmp) < fabs(*mingma)) {
+	if (std::abs(tmp) < std::abs(*mingma)) {
 	    *mingma = tmp;
 	    *r__ = i__ + 1;
 	}
@@ -19794,7 +19635,7 @@ L120:
 		z__[i__] = -(work[i__] * z__[i__ + 1]);
 		*ztz += z__[i__] * z__[i__];
 	    }
-	    if (fabs(z__[to]) <= eps && fabs(z__[to + 1]) <= eps) {
+	    if (std::abs(z__[to]) <= eps && std::abs(z__[to + 1]) <= eps) {
 		isuppz[1] = to + 2;
 	    } else {
 		from = to - 1;
@@ -19813,7 +19654,7 @@ L140:
 		z__[i__] = -(work[indumn + i__ - 1] * z__[i__ - 1]);
 		*ztz += z__[i__] * z__[i__];
 	    }
-	    if (fabs(z__[to]) <= eps && fabs(z__[to - 1]) <= eps) {
+	    if (std::abs(z__[to]) <= eps && std::abs(z__[to - 1]) <= eps) {
 		isuppz[2] = to - 2;
 	    } else {
 		from = to + 1;
@@ -19825,12 +19666,12 @@ L140:
     } else {
 	i__1 = *b1;
 	for (i__ = *r__ - 1; i__ >= i__1; --i__) {
-	    if (fabs(z__[i__ + 1])<PLUMED_GMX_FLOAT_MIN) {
+	    if (std::abs(z__[i__ + 1])<PLUMED_GMX_FLOAT_MIN) {
 		z__[i__] = -(ld[i__ + 1] / ld[i__]) * z__[i__ + 2];
 	    } else {
 		z__[i__] = -(work[i__] * z__[i__ + 1]);
 	    }
-	    if (fabs(z__[i__]) <= eps && fabs(z__[i__ + 1]) <= eps) {
+	    if (std::abs(z__[i__]) <= eps && std::abs(z__[i__ + 1]) <= eps) {
 		isuppz[1] = i__ + 2;
 		goto L170;
 	    }
@@ -19839,12 +19680,12 @@ L140:
 L170:
 	i__1 = *bn - 1;
 	for (i__ = *r__; i__ <= i__1; ++i__) {
-	    if (fabs(z__[i__])<PLUMED_GMX_FLOAT_MIN) {
+	    if (std::abs(z__[i__])<PLUMED_GMX_FLOAT_MIN) {
 		z__[i__ + 1] = -(ld[i__ - 1] / ld[i__]) * z__[i__ - 1];
 	    } else {
 		z__[i__ + 1] = -(work[indumn + i__] * z__[i__]);
 	    }
-	    if (fabs(z__[i__]) <= eps && fabs(z__[i__ + 1]) <= eps) {
+	    if (std::abs(z__[i__]) <= eps && std::abs(z__[i__ + 1]) <= eps) {
 		isuppz[2] = i__ - 1;
 		break;
 	    }
@@ -19859,8 +19700,8 @@ L170:
 
 }
 }
-#include <math.h>
-#include <ctype.h>
+#include <cctype>
+#include <cmath>
 
 #include "blas/blas.h"
 #include "lapack.h"
@@ -19882,7 +19723,7 @@ PLUMED_BLAS_F77_FUNC(slarf,SLARF)(const char *side,
        int *ldc,
        float *work)
 {
-  const char ch=toupper(*side);
+  const char ch=std::toupper(*side);
   float one = 1.0;
   float zero = 0.0;
   float minustau = -(*tau);
@@ -19890,12 +19731,12 @@ PLUMED_BLAS_F77_FUNC(slarf,SLARF)(const char *side,
 
 
   if(ch=='L') {
-    if(fabs(*tau)>PLUMED_GMX_FLOAT_MIN) {
+    if(std::abs(*tau)>PLUMED_GMX_FLOAT_MIN) {
       PLUMED_BLAS_F77_FUNC(sgemv,SGEMV)("T",m,n,&one,c,ldc,v,incv,&zero,work,&i1);
       PLUMED_BLAS_F77_FUNC(sger,SGER)(m,n,&minustau,v,incv,work,&i1,c,ldc);
     }
   } else {
-    if(fabs(*tau)>PLUMED_GMX_FLOAT_MIN) {
+    if(std::abs(*tau)>PLUMED_GMX_FLOAT_MIN) {
       PLUMED_BLAS_F77_FUNC(sgemv,SGEMV)("N",m,n,&one,c,ldc,v,incv,&zero,work,&i1);
       PLUMED_BLAS_F77_FUNC(sger,SGER)(m,n,&minustau,work,&i1,v,incv,c,ldc);
     }
@@ -20306,7 +20147,7 @@ PLUMED_BLAS_F77_FUNC(slarfb,SLARFB)(const char *side,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "blas/blas.h"
@@ -20338,7 +20179,7 @@ PLUMED_BLAS_F77_FUNC(slarfg,SLARFG)(int   *n,
 
   xnorm = PLUMED_BLAS_F77_FUNC(snrm2,SNRM2)(&ti1,x,incx);
 
-  if(fabs(xnorm)<PLUMED_GMX_FLOAT_MIN) {
+  if(std::abs(xnorm)<PLUMED_GMX_FLOAT_MIN) {
     *tau = 0.0;
   } else {
 
@@ -20354,12 +20195,12 @@ PLUMED_BLAS_F77_FUNC(slarfg,SLARFG)(int   *n,
     safmin = minval*(1.0+PLUMED_GMX_FLOAT_EPS) / PLUMED_GMX_FLOAT_EPS;
 
         
-    if(fabs(beta)<safmin) {
+    if(std::abs(beta)<safmin) {
 
       knt = 0;
       rsafmn = 1.0 / safmin;
       
-      while(fabs(beta)<safmin) {
+      while(std::abs(beta)<safmin) {
 	knt++;
 	ti1 = *n-1;
 	PLUMED_BLAS_F77_FUNC(sscal,SSCAL)(&ti1,&rsafmn,x,incx);
@@ -20399,7 +20240,7 @@ PLUMED_BLAS_F77_FUNC(slarfg,SLARFG)(int   *n,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "blas/blas.h"
@@ -20445,7 +20286,7 @@ PLUMED_BLAS_F77_FUNC(slarft,SLARFT)(const char *direct,
     if (*direct=='F' || *direct=='f') {
 	i__1 = *k;
 	for (i__ = 1; i__ <= i__1; ++i__) {
-	    if (fabs(tau[i__])<PLUMED_GMX_FLOAT_MIN) {
+	    if (std::abs(tau[i__])<PLUMED_GMX_FLOAT_MIN) {
 
 		i__2 = i__;
 		for (j = 1; j <= i__2; ++j) {
@@ -20483,7 +20324,7 @@ PLUMED_BLAS_F77_FUNC(slarft,SLARFT)(const char *direct,
 	}
     } else {
 	for (i__ = *k; i__ >= 1; --i__) {
-	    if (fabs(tau[i__])<PLUMED_GMX_FLOAT_MIN) {
+	    if (std::abs(tau[i__])<PLUMED_GMX_FLOAT_MIN) {
 
 		i__1 = *k;
 		for (j = i__; j <= i__1; ++j) {
@@ -20533,7 +20374,7 @@ PLUMED_BLAS_F77_FUNC(slarft,SLARFT)(const char *direct,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 
 #include "blas/blas.h"
@@ -20583,9 +20424,8 @@ PLUMED_BLAS_F77_FUNC(slarnv,SLARNV)(int *idist,
 
 	    i__2 = il;
 	    for (i__ = 1; i__ <= i__2; ++i__) {
-		x[iv + i__ - 1] = sqrt(log(u[(i__ << 1) - 2]) * -2.) * 
-		  cos(u[(i__ << 1) - 1] * 
-		      (float)6.2831853071795864769252867663);
+                x[iv + i__ - 1] =  std::sqrt(std::log(u[(i__ << 1) - 2]) * -2.) * 
+		  std::cos(u[(i__ << 1) - 1] * (float)6.2831853071795864769252867663);
 	    }
 	}
     }
@@ -20594,7 +20434,7 @@ PLUMED_BLAS_F77_FUNC(slarnv,SLARNV)(int *idist,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "real.h"
 
@@ -20631,9 +20471,9 @@ PLUMED_BLAS_F77_FUNC(slarrbx,SLARRBX)(int *n,
     int i1, i2, ii, kk;
     float fac, gap, mid;
     int cnt;
-    float eps, tmp, left;
+    float tmp, left;
     int nint, prev, next, nleft;
-    float right, width, dplus, error;
+    float right, width, dplus;
     int nright, olnint;
     k = 0;
     right = 0.0;
@@ -20649,7 +20489,6 @@ PLUMED_BLAS_F77_FUNC(slarrbx,SLARRBX)(int *n,
     --d__;
 
     *info = 0;
-    eps = PLUMED_GMX_FLOAT_EPS;
     i__1 = *n << 1;
     for (i__ = 1; i__ <= i__1; ++i__) {
 	iwork[i__] = 0;
@@ -20659,16 +20498,6 @@ PLUMED_BLAS_F77_FUNC(slarrbx,SLARRBX)(int *n,
     prev = 0;
     i__1 = *ilast;
     for (i__ = *ifirst; i__ <= i__1; ++i__) {
-	ii = i__ - *offset;
-	if (i__ == *ifirst) {
-	    gap = wgap[ii];
-	} else if (i__ == *ilast) {
-	    gap = wgap[ii - 1];
-	} else {
-	    d__1 = wgap[ii - 1], d__2 = wgap[ii];
-	    gap = (d__1<d__2) ? d__1 : d__2;
-	}
-	error = werr[ii];
 	k = i__ << 1;
 	iwork[k - 1] = 1;
 	i2 = i__;
@@ -20703,7 +20532,7 @@ L40:
 		if (dplus < 0.) {
 		    ++cnt;
 		}
-		if (! (s > 0. || s < 1.)) {
+		if (std::isnan(s)) {
 
 		    cnt = 0;
 		    s = -left;
@@ -20714,7 +20543,7 @@ L40:
 			    ++cnt;
 			}
 			tmp = lld[j] / dplus;
-			if (fabs(tmp)<PLUMED_GMX_FLOAT_MIN) {
+			if (std::abs(tmp)<PLUMED_GMX_FLOAT_MIN) {
 			    s = lld[j] - left;
 			} else {
 			    s = s * tmp - left;
@@ -20750,7 +20579,7 @@ L60:
 	    if (dplus < 0.) {
 		++cnt;
 	    }
-	    if (! (s > 0. || s < 1.)) {
+	    if (std::isnan(s)) {
 
 		cnt = 0;
 		s = -right;
@@ -20761,7 +20590,7 @@ L60:
 			++cnt;
 		    }
 		    tmp = lld[j] / dplus;
-		    if (fabs(tmp)<PLUMED_GMX_FLOAT_MIN) {
+		    if (std::abs(tmp)<PLUMED_GMX_FLOAT_MIN) {
 			s = lld[j] - right;
 		    } else {
 			s = s * tmp - right;
@@ -20815,8 +20644,8 @@ L80:
 	nright = iwork[k];
 	mid = (left + right) * .5;
 	width = right - mid;
-	d__1 = fabs(left);
-	d__2 = fabs(right);
+	d__1 = std::abs(left);
+	d__2 = std::abs(right);
 	tmp = (d__1>d__2) ? d__1 : d__2;
 
 	gap = 0.;
@@ -20867,7 +20696,7 @@ L80:
 	if (dplus < 0.) {
 	    ++cnt;
 	}
-	if (! (s > 0. || s < 1.)) {
+	if (std::isnan(s)) {
 	    cnt = 0;
 	    s = -mid;
 	    i__2 = *n - 1;
@@ -20877,7 +20706,7 @@ L80:
 		    ++cnt;
 		}
 		tmp = lld[j] / dplus;
-		if (fabs(tmp)<PLUMED_GMX_FLOAT_MIN) {
+		if (std::abs(tmp)<PLUMED_GMX_FLOAT_MIN) {
 		    s = lld[j] - mid;
 		} else {
 		    s = s * tmp - mid;
@@ -20937,8 +20766,8 @@ L80:
 } 
 }
 }
-#include <math.h>
-#include <ctype.h>
+#include <cctype>
+#include <cmath>
 
 #include "real.h"
 
@@ -21023,7 +20852,7 @@ PLUMED_BLAS_F77_FUNC(slarrex,SLARREX)(const char *range,
     *nsplit = 1;
     i__1 = *n - 1;
     for (i__ = 1; i__ <= i__1; ++i__) {
-	if (fabs(e[i__]) <= *tol) {
+	if (std::abs(e[i__]) <= *tol) {
 	    isplit[*nsplit] = i__;
 	    ++(*nsplit);
 	}
@@ -21045,19 +20874,19 @@ PLUMED_BLAS_F77_FUNC(slarrex,SLARREX)(const char *range,
 	}
 	in = iend - ibegin + 1;
 
-	gl = d__[ibegin] - fabs(e[ibegin]);
-	gu = d__[ibegin] + fabs(e[ibegin]);
+	gl = d__[ibegin] - std::abs(e[ibegin]);
+	gu = d__[ibegin] + std::abs(e[ibegin]);
 	gersch[(ibegin << 1) - 1] = gl;
 	gersch[ibegin * 2] = gu;
-	gersch[(iend << 1) - 1] = d__[iend] - fabs(e[iend - 1]);
-	gersch[iend * 2] = d__[iend] + fabs(e[iend - 1]);
+	gersch[(iend << 1) - 1] = d__[iend] - std::abs(e[iend - 1]);
+	gersch[iend * 2] = d__[iend] + std::abs(e[iend - 1]);
 	d__1 = gersch[(iend << 1) - 1];
 	gl = (d__1<gl) ? d__1 : gl;
 	d__1 = gersch[iend * 2];
 	gu = (d__1>gu) ? d__1 : gu;
 	i__2 = iend - 1;
 	for (i__ = ibegin + 1; i__ <= i__2; ++i__) {
-	    offd = fabs(e[i__ - 1]) + fabs(e[i__]);
+	    offd = std::abs(e[i__ - 1]) + std::abs(e[i__]);
 	    gersch[(i__ << 1) - 1] = d__[i__] - offd;
 	    d__1 = gersch[(i__ << 1) - 1];
 	    gl = (d__1<gl) ? d__1 : gl;
@@ -21065,7 +20894,7 @@ PLUMED_BLAS_F77_FUNC(slarrex,SLARREX)(const char *range,
 	    d__1 = gersch[i__ * 2];
 	    gu = (d__1>gu) ? d__1 : gu;
 	}
-	d__1 = fabs(gl), d__2 = fabs(gu);
+	d__1 = std::abs(gl), d__2 = std::abs(gu);
 	nrm = (d__1>d__2) ? d__1 : d__2;
 
 	width = gu - gl;
@@ -21126,7 +20955,7 @@ L60:
 	}
 	for (i__ = in; i__ >= 1; --i__) {
 	    tmp = sgndef * work[i__];
-	    if (tmp < 0. || fabs(work[(in << 1) + i__])<PLUMED_GMX_FLOAT_MIN || ! (tmp > 0. || tmp < 1.)) {
+	    if (tmp < 0. || std::abs(work[(in << 1) + i__])<PLUMED_GMX_FLOAT_MIN || std::isnan(tmp)) {
 		delta *= 2.;
 		goto L60;
 	    }
@@ -21181,7 +21010,7 @@ L100:
 
 	for (i__ = in; i__ >= 1; --i__) {
 	    tmp = sgndef * work[i__];
-	    if (tmp < 0. || fabs(work[(in << 1) + i__])<PLUMED_GMX_FLOAT_MIN || ! (tmp > 0. || tmp < 1.)) {
+	    if (tmp < 0. || std::abs(work[(in << 1) + i__])<PLUMED_GMX_FLOAT_MIN || std::isnan(tmp)) {
 		delta *= 2.;
 		goto L100;
 	    }
@@ -21192,7 +21021,7 @@ L100:
 	i__2 = in - 1;
 	PLUMED_BLAS_F77_FUNC(scopy,SCOPY)(&i__2, &work[in + 1], &c__1, &e[ibegin], &c__1);
 	e[iend] = sigma;
-	tmp = (float) in * 4. * eps * (fabs(sigma) + fabs(tau));
+	tmp = (float) in * 4. * eps * (std::abs(sigma) + std::abs(tau));
 	i__2 = iend;
 	for (i__ = ibegin; i__ <= i__2; ++i__) {
 	    gersch[(i__ << 1) - 1] = gersch[(i__ << 1) - 1] - sigma - tmp;
@@ -21202,11 +21031,11 @@ L100:
 	j = ibegin;
 	i__2 = in - 1;
 	for (i__ = 1; i__ <= i__2; ++i__) {
-	    work[(i__ << 1) - 1] = fabs(d__[j]);
+	    work[(i__ << 1) - 1] = std::abs(d__[j]);
 	    work[i__ * 2] = e[j] * e[j] * work[(i__ << 1) - 1];
 	    ++j;
 	}
-	work[(in << 1) - 1] = fabs(d__[iend]);
+	work[(in << 1) - 1] = std::abs(d__[iend]);
 
 	PLUMED_BLAS_F77_FUNC(slasq2,SLASQ2)(&in, &work[1], info);
 	if (*info != 0) {
@@ -21336,7 +21165,7 @@ L170:
 
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "real.h"
 
@@ -21386,17 +21215,17 @@ PLUMED_BLAS_F77_FUNC(slarrfx,SLARRFX)(int *n,
 L10:
     s = -(*sigma);
     dplus[1] = d__[1] + s;
-    dmax1 = fabs(dplus[1]);
+    dmax1 = std::abs(dplus[1]);
     i__1 = *n - 1;
     for (i__ = 1; i__ <= i__1; ++i__) {
 	lplus[i__] = ld[i__] / dplus[i__];
 	s = s * lplus[i__] * l[i__] - *sigma;
 	dplus[i__ + 1] = d__[i__ + 1] + s;
-	d__2 = dmax1, d__3 = fabs(dplus[i__ + 1]);
+	d__2 = dmax1, d__3 = std::abs(dplus[i__ + 1]);
 	dmax1 = (d__2>d__3) ? d__2 : d__3;
     }
-    if (! (dmax1 > 0. || dmax1 < 1.)) {
-	*sigma -= fabs(*sigma) * delta;
+    if (std::isnan(dmax1)) {
+	*sigma -= std::abs(*sigma) * delta;
 	delta *= 2.;
 	goto L10;
     }
@@ -21406,17 +21235,17 @@ L10:
 L30:
     s = -tmp;
     work[1] = d__[1] + s;
-    dmax2 = fabs(work[1]);
+    dmax2 = std::abs(work[1]);
     i__1 = *n - 1;
     for (i__ = 1; i__ <= i__1; ++i__) {
 	work[*n + i__] = ld[i__] / work[i__];
 	s = s * work[*n + i__] * l[i__] - tmp;
 	work[i__ + 1] = d__[i__ + 1] + s;
-	d__2 = dmax2, d__3 = fabs(work[i__ + 1]);
+	d__2 = dmax2, d__3 = std::abs(work[i__ + 1]);
 	dmax2 = (d__2>d__3) ? d__2 : d__3;
     }
-    if (! (dmax2 > 0. || dmax2 < 1.)) {
-	tmp += fabs(tmp) * delta;
+    if (std::isnan(dmax2)) {
+	tmp += std::abs(tmp) * delta;
 	delta *= 2.;
 	goto L30;
     }
@@ -21431,7 +21260,7 @@ L30:
 }
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "real.h"
 
@@ -21569,11 +21398,11 @@ L171:
 	PLUMED_BLAS_F77_FUNC(scopy,SCOPY)(&im, &w[wbegin], &c__1, &work[1], &c__1);
 	i__2 = im - 1;
 	for (i__ = 1; i__ <= i__2; ++i__) {
-	    work[inderr + i__] = eps * fabs(work[i__]);
+	    work[inderr + i__] = eps * std::abs(work[i__]);
 	    work[indgap + i__] = work[i__ + 1] - work[i__];
 	}
-	work[inderr + im] = eps * fabs(work[im]);
-	d__2 = fabs(work[im]);
+	work[inderr + im] = eps * std::abs(work[im]);
+	d__2 = std::abs(work[im]);
 	work[indgap + im] = (d__2>eps) ? d__2 : eps;
 	ndone = 0;
 
@@ -21634,11 +21463,11 @@ L40:
 		i__3 = oldlst;
 		for (j = oldfst; j <= i__3; ++j) {
 		    if (j == oldlst || work[indgap + j] >= 
-			reltol * fabs(work[j])) {
+			reltol * std::abs(work[j])) {
 			newlst = j;
 		    } else {
 
-			relgap = work[indgap + j] / fabs(work[j]);
+			relgap = work[indgap + j] / std::abs(work[j]);
 			if (j == newfrs) {
 			    minrgp = relgap;
 			} else {
@@ -21657,7 +21486,7 @@ L40:
 				z_dim1], &z__[ibegin + (newftt + 1) * z_dim1],
 				 &work[indwrk], info);
 			if (*info == 0) {
-			    tmp = eps * fabs(sigma);
+			    tmp = eps * std::abs(sigma);
 			    i__4 = newlst;
 			    for (k = newfrs; k <= i__4; ++k) {
 				work[k] -= sigma;
@@ -21671,9 +21500,7 @@ L40:
 			    iwork[k] = newlst;
 			} else {
 			    *info = 0;
-			    if (minrgp >= mgstol) {
-				nomgs = 0;
-			    } else {
+			    if (minrgp < mgstol) {
 
 				work[indwrk] = d__[ibegin];
 				i__4 = in - 1;
@@ -21718,8 +21545,8 @@ L90:
 				    &ztz, &mingma, &iwork[iindr + ktot], &
 				    isuppz[(ktot << 1) - 1], &work[indwrk]);
 			    tmp = 1. / ztz;
-			    nrminv = sqrt(tmp);
-			    resid = fabs(mingma) * nrminv;
+			    nrminv =  std::sqrt(tmp);
+			    resid = std::abs(mingma) * nrminv;
 			    rqcorr = mingma * tmp;
 			    if (k == in) {
 				gap = work[indgap + k - 1];
@@ -21731,8 +21558,8 @@ L90:
 				gap = (d__1<d__2) ? d__1 : d__2;
 			    }
 			    ++iter;
-			    if (resid > *tol * gap && fabs(rqcorr) > eps * 4. *
-				     fabs(lambda)) {
+			    if (resid > *tol * gap && std::abs(rqcorr) > eps * 4. *
+				     std::abs(lambda)) {
 				work[k] = lambda + rqcorr;
 				if (iter < 8) {
 				    goto L90;
@@ -21804,7 +21631,7 @@ L90:
 } 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 #include "lapack_limits.h"
 
@@ -21828,24 +21655,24 @@ PLUMED_BLAS_F77_FUNC(slartg,SLARTG)(float *f,
   eps = PLUMED_GMX_FLOAT_EPS;
   minval = PLUMED_GMX_FLOAT_MIN;
   safemin = minval*(1.0+eps);
-  n = 0.5*log( safemin/eps ) / log(2);
-  safemin2 = pow(2,n);
+  n = static_cast<int>(0.5*std::log( safemin/eps ) / std::log(2.0));
+  safemin2 = std::pow(static_cast<float>(2.0),static_cast<float>(n));
 
   safemx2 = 1.0 / safemin2;
 
-  if(fabs(*g)<PLUMED_GMX_FLOAT_MIN) {
+  if(std::abs(*g)<PLUMED_GMX_FLOAT_MIN) {
     *cs = 1.0;
     *sn = 0.0;
     *r = *f;
-  } else if (fabs(*f)<PLUMED_GMX_FLOAT_MIN) {
+  } else if (std::abs(*f)<PLUMED_GMX_FLOAT_MIN) {
     *cs = 0.0;
     *sn = 1.0;
     *r = *g;
   } else {
     f1 = *f;
     g1 = *g;
-    f1a = fabs(f1);
-    g1a = fabs(g1);
+    f1a = std::abs(f1);
+    g1a = std::abs(g1);
     scale = (f1a > g1a) ? f1a : g1a;
     if(scale >= safemx2) {
       count = 0;
@@ -21853,11 +21680,11 @@ PLUMED_BLAS_F77_FUNC(slartg,SLARTG)(float *f,
 	count++;
 	f1 *= safemin2;
 	g1 *= safemin2;
-	f1a = fabs(f1);
-	g1a = fabs(g1);
+	f1a = std::abs(f1);
+	g1a = std::abs(g1);
 	scale = (f1a > g1a) ? f1a : g1a;
       }
-      *r = sqrt(f1*f1 + g1*g1);
+      *r =  std::sqrt(f1*f1 + g1*g1);
       *cs = f1 / *r;
       *sn = g1 / *r;
       for(i=0;i<count;i++)
@@ -21868,21 +21695,21 @@ PLUMED_BLAS_F77_FUNC(slartg,SLARTG)(float *f,
 	count++;
 	f1 *= safemx2;
 	g1 *= safemx2;
-	f1a = fabs(f1);
-	g1a = fabs(g1);
+	f1a = std::abs(f1);
+	g1a = std::abs(g1);
 	scale = (f1a > g1a) ? f1a : g1a;
       }
-      *r = sqrt(f1*f1 + g1*g1);
+      *r =  std::sqrt(f1*f1 + g1*g1);
       *cs = f1 / *r;
       *sn = g1 / *r;
       for(i=0;i<count;i++)
 	*r *= safemin2;
     } else {
-      *r = sqrt(f1*f1 + g1*g1);
+      *r =  std::sqrt(f1*f1 + g1*g1);
       *cs = f1 / *r;
       *sn = g1 / *r;
     }
-    if(fabs(*f)>fabs(*g) && *cs<0.0) {
+    if(std::abs(*f)>std::abs(*g) && *cs<0.0) {
       *cs *= -1.0;
       *sn *= -1.0;
       *r  *= -1.0;
@@ -21893,7 +21720,7 @@ PLUMED_BLAS_F77_FUNC(slartg,SLARTG)(float *f,
       
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 
 #include "blas/blas.h"
@@ -21992,7 +21819,7 @@ PLUMED_BLAS_F77_FUNC(slaruv,SLARUV)(int *iseed, int *n, float *x)
 } 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "lapack.h"
@@ -22008,25 +21835,25 @@ PLUMED_BLAS_F77_FUNC(slas2,SLAS2)(float *f,
        float *ssmin,
        float *ssmax)
 {
-  float fa = fabs(*f);
-  float ga = fabs(*g);
-  float ha = fabs(*h);
+  float fa = std::abs(*f);
+  float ga = std::abs(*g);
+  float ha = std::abs(*h);
   float fhmin,fhmax,tmax,tmin,tmp1,tmp2;
   float as,at,au,c;
 
   fhmin = (fa<ha) ? fa : ha;
   fhmax = (fa>ha) ? fa : ha;
   
-  if(fabs(fhmin)<PLUMED_GMX_FLOAT_MIN) {
+  if(std::abs(fhmin)<PLUMED_GMX_FLOAT_MIN) {
     *ssmin = 0.0;
-    if(fabs(fhmax)<PLUMED_GMX_FLOAT_MIN) 
+    if(std::abs(fhmax)<PLUMED_GMX_FLOAT_MIN) 
       *ssmax = ga;
     else {
       tmax = (fhmax>ga) ? fhmax : ga;
       tmin = (fhmax<ga) ? fhmax : ga;
       tmp1 = tmin / tmax;
       tmp1 = tmp1 * tmp1;
-      *ssmax = tmax*sqrt(1.0 + tmp1);
+      *ssmax = tmax* std::sqrt(1.0 + tmp1);
     }
   } else {
     if(ga<fhmax) {
@@ -22034,12 +21861,12 @@ PLUMED_BLAS_F77_FUNC(slas2,SLAS2)(float *f,
       at = (fhmax-fhmin) / fhmax;
       au = (ga/fhmax);
       au = au * au;
-      c = 2.0 / ( sqrt(as*as+au) + sqrt(at*at+au) );
+      c = 2.0 / (  std::sqrt(as*as+au) + std::sqrt(at*at+au) );
       *ssmin = fhmin * c;
       *ssmax = fhmax / c;
     } else {
       au = fhmax / ga;
-      if(fabs(au)<PLUMED_GMX_FLOAT_MIN) {
+      if(std::abs(au)<PLUMED_GMX_FLOAT_MIN) {
 	*ssmin = (fhmin*fhmax)/ga;
 	*ssmax = ga;
       } else {
@@ -22047,7 +21874,7 @@ PLUMED_BLAS_F77_FUNC(slas2,SLAS2)(float *f,
 	at = (fhmax-fhmin)/fhmax;
 	tmp1 = as*au;
 	tmp2 = at*au;
-	c = 1.0 / ( sqrt(1.0+tmp1*tmp1) + sqrt(1.0+tmp2*tmp2));
+	c = 1.0 / (  std::sqrt(1.0+tmp1*tmp1) + std::sqrt(1.0+tmp2*tmp2));
 	*ssmin = (fhmin*c)*au;
 	*ssmin = *ssmin + *ssmin;
 	*ssmax = ga / (c+c);
@@ -22058,8 +21885,8 @@ PLUMED_BLAS_F77_FUNC(slas2,SLAS2)(float *f,
 }
 }
 }
-#include <ctype.h>
-#include <math.h>
+#include <cctype>
+#include <cmath>
 #include "real.h"
 
 #include "lapack.h"
@@ -22082,7 +21909,7 @@ PLUMED_BLAS_F77_FUNC(slascl,SLASCL)(const char *type,
                         int *lda,
                         int *info)
 {
-  const char ch=toupper(*type);
+  const char ch=std::toupper(*type);
   int i,j,k,l,k1,k2,k3,k4;
   int done=0;
   float minval,smlnum,bignum;
@@ -22103,11 +21930,11 @@ PLUMED_BLAS_F77_FUNC(slascl,SLASCL)(const char *type,
     cfrom1 = cfromc * smlnum;
     cto1   = ctoc / bignum;
 
-    if(fabs(cfrom1)>fabs(ctoc) && fabs(ctoc)>PLUMED_GMX_FLOAT_MIN) {
+    if(std::abs(cfrom1)>std::abs(ctoc) && std::abs(ctoc)>PLUMED_GMX_FLOAT_MIN) {
       mul = smlnum;
       done = 0;
       cfromc = cfrom1;
-    } else if(fabs(cto1)>fabs(cfromc)) {
+    } else if(std::abs(cto1)>std::abs(cfromc)) {
       mul = bignum;
       done = 0;
       ctoc = cto1;
@@ -22261,7 +22088,6 @@ PLUMED_BLAS_F77_FUNC(slasd0,SLASD0)(int *n,
 	*info = -9;
     }
     if (*info != 0) {
-	i__1 = -(*info);
 	return;
     }
 
@@ -22362,7 +22188,7 @@ PLUMED_BLAS_F77_FUNC(slasd0,SLASD0)(int *n,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 
 #include "blas/blas.h"
@@ -22419,7 +22245,6 @@ PLUMED_BLAS_F77_FUNC(slasd1,SLASD1)(int *nl,
 	*info = -3;
     }
     if (*info != 0) {
-	i__1 = -(*info);
 	return;
     }
 
@@ -22441,14 +22266,14 @@ PLUMED_BLAS_F77_FUNC(slasd1,SLASD1)(int *nl,
     coltyp = idxc + n;
     idxp = coltyp + n;
 
-    d__1 = fabs(*alpha);
-    d__2 = fabs(*beta);
+    d__1 = std::abs(*alpha);
+    d__2 = std::abs(*beta);
     orgnrm = (d__1>d__2) ? d__1 : d__2;
     d__[*nl + 1] = 0.;
     i__1 = n;
     for (i__ = 1; i__ <= i__1; ++i__) {
-	if (fabs(d__[i__]) > orgnrm) {
-	    orgnrm = fabs(d__[i__]);
+	if (std::abs(d__[i__]) > orgnrm) {
+	    orgnrm = std::abs(d__[i__]);
 	}
     }
     PLUMED_BLAS_F77_FUNC(slascl,SLASCL)("G", &c__0, &c__0, &orgnrm, &one, &n, &c__1, &d__[1], &n, info);
@@ -22478,7 +22303,7 @@ PLUMED_BLAS_F77_FUNC(slasd1,SLASD1)(int *nl,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "blas/blas.h"
 #include "lapack.h"
 #include "lapack_limits.h"
@@ -22607,16 +22432,16 @@ PLUMED_BLAS_F77_FUNC(slasd2,SLASD2)(int *nl,
     }
 
     eps = PLUMED_GMX_FLOAT_EPS;
-    d__1 = fabs(*alpha), d__2 = fabs(*beta);
+    d__1 = std::abs(*alpha), d__2 = std::abs(*beta);
     tol = (d__1 > d__2) ? d__1 : d__2;
-    d__2 = fabs(d__[n]);
+    d__2 = std::abs(d__[n]);
     tol = eps * 8. * ((d__2 > tol) ? d__2 : tol);
 
     *k = 1;
     k2 = n + 1;
     i__1 = n;
     for (j = 2; j <= i__1; ++j) {
-	if (fabs(z__[j]) <= tol) {
+	if (std::abs(z__[j]) <= tol) {
 
 	    --k2;
 	    idxp[k2] = j;
@@ -22636,14 +22461,14 @@ L100:
     if (j > n) {
 	goto L110;
     }
-    if (fabs(z__[j]) <= tol) {
+    if (std::abs(z__[j]) <= tol) {
 
 	--k2;
 	idxp[k2] = j;
 	coltyp[j] = 4;
     } else {
 
-	if (fabs(d__[j] - d__[jprev]) <= tol) {
+	if (std::abs(d__[j] - d__[jprev]) <= tol) {
 
             s = z__[jprev];
 	    c__ = z__[j];
@@ -22727,7 +22552,7 @@ L120:
 
     dsigma[1] = 0.;
     hlftol = tol / 2.;
-    if (fabs(dsigma[2]) <= hlftol) {
+    if (std::abs(dsigma[2]) <= hlftol) {
 	dsigma[2] = hlftol;
     }
     if (m > n) {
@@ -22741,7 +22566,7 @@ L120:
 	    s = z__[m] / z__[1];
 	}
     } else {
-	if (fabs(z1) <= tol) {
+	if (std::abs(z1) <= tol) {
 	    z__[1] = tol;
 	} else {
 	    z__[1] = z1;
@@ -22792,7 +22617,7 @@ L120:
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "blas/blas.h"
 #include "lapack.h"
 
@@ -22836,10 +22661,6 @@ PLUMED_BLAS_F77_FUNC(slasd3,SLASD3)(int *nl,
     int c__0 = 0;
     float zero = 0.0;
     float one = 1.0;
-    float *p1,*p2,t1,t2;
-
-    p1 = &t1;
-    p2 = &t2;
 
     --d__;
     q_dim1 = *ldq;
@@ -22879,7 +22700,7 @@ PLUMED_BLAS_F77_FUNC(slasd3,SLASD3)(int *nl,
     nlp2 = *nl + 2;
 
     if (*k == 1) {
-	d__[1] = fabs(z__[1]);
+	d__[1] = std::abs(z__[1]);
 	PLUMED_BLAS_F77_FUNC(scopy,SCOPY)(&m, &vt2[vt2_dim1 + 1], ldvt2, &vt[vt_dim1 + 1], ldvt);
 	if (z__[1] > 0.) {
 	    PLUMED_BLAS_F77_FUNC(scopy,SCOPY)(&n, &u2[u2_dim1 + 1], &c__1, &u[u_dim1 + 1], &c__1);
@@ -22892,16 +22713,6 @@ PLUMED_BLAS_F77_FUNC(slasd3,SLASD3)(int *nl,
 	return;
     }
 
-    i__1 = *k;
-    for (i__ = 1; i__ <= i__1; ++i__) {
-      t1 = dsigma[i__];
-      t2 = dsigma[i__];
-      /* force store and reload from memory */
-      t1 = (*p1) + (*p2) - dsigma[i__];
-
-      dsigma[i__] = t1;
-    }
-
     PLUMED_BLAS_F77_FUNC(scopy,SCOPY)(k, &z__[1], &c__1, &q[q_offset], &c__1);
 
     rho = PLUMED_BLAS_F77_FUNC(snrm2,SNRM2)(k, &z__[1], &c__1);
@@ -22932,7 +22743,7 @@ PLUMED_BLAS_F77_FUNC(slasd3,SLASD3)(int *nl,
 	    z__[i__] *= u[i__ + j * u_dim1] * vt[i__ + j * vt_dim1] / (dsigma[
 		    i__] - dsigma[j + 1]) / (dsigma[i__] + dsigma[j + 1]);
 	}
-	d__2 = sqrt(fabs(z__[i__]));
+	d__2 =  std::sqrt(std::abs(z__[i__]));
 	z__[i__] = (q[i__ + q_dim1] > 0) ? d__2 : -d__2;
     }
 
@@ -23035,7 +22846,7 @@ L100:
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 #include "lapack_limits.h"
 
@@ -23088,7 +22899,7 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
     *info = 0;
     if (*n == 1) {
 
-	*sigma = sqrt(d__[1] * d__[1] + *rho * z__[1] * z__[1]);
+	*sigma =  std::sqrt(d__[1] * d__[1] + *rho * z__[1] * z__[1]);
 	delta[1] = 1.;
 	work[1] = 1.;
 	return;
@@ -23108,7 +22919,7 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 
 	temp = *rho / 2.;
 
-	temp1 = temp / (d__[*n] + sqrt(d__[*n] * d__[*n] + temp));
+	temp1 = temp / (d__[*n] +  std::sqrt(d__[*n] * d__[*n] + temp));
 	i__1 = *n;
 	for (j = 1; j <= i__1; ++j) {
 	    work[j] = d__[j] + d__[*n] + temp1;
@@ -23126,7 +22937,7 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 		n] / (delta[*n] * work[*n]);
 
 	if (w <= 0.) {
-	    temp1 = sqrt(d__[*n] * d__[*n] + *rho);
+	    temp1 =  std::sqrt(d__[*n] * d__[*n] + *rho);
 	    temp = z__[*n - 1] * z__[*n - 1] / ((d__[*n - 1] + temp1) * (d__[*
 		    n] - d__[*n - 1] + *rho / (d__[*n] + temp1))) + z__[*n] * 
 		    z__[*n] / *rho;
@@ -23139,9 +22950,9 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 			n];
 		b = z__[*n] * z__[*n] * delsq;
 		if (a < 0.) {
-		    tau = b * 2. / (sqrt(a * a + b * 4. * c__) - a);
+		    tau = b * 2. / ( std::sqrt(a * a + b * 4. * c__) - a);
 		} else {
-		    tau = (a + sqrt(a * a + b * 4. * c__)) / (c__ * 2.);
+		    tau = (a +  std::sqrt(a * a + b * 4. * c__)) / (c__ * 2.);
 		}
 	    }
 
@@ -23151,14 +22962,14 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 	    b = z__[*n] * z__[*n] * delsq;
 
 	    if (a < 0.) {
-		tau = b * 2. / (sqrt(a * a + b * 4. * c__) - a);
+		tau = b * 2. / ( std::sqrt(a * a + b * 4. * c__) - a);
 	    } else {
-		tau = (a + sqrt(a * a + b * 4. * c__)) / (c__ * 2.);
+		tau = (a +  std::sqrt(a * a + b * 4. * c__)) / (c__ * 2.);
 	    }
 
 	}
 
-	eta = tau / (d__[*n] + sqrt(d__[*n] * d__[*n] + tau));
+	eta = tau / (d__[*n] +  std::sqrt(d__[*n] * d__[*n] + tau));
 
 	*sigma = d__[*n] + eta;
 	i__1 = *n;
@@ -23177,17 +22988,17 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 	    dpsi += temp * temp;
 	    erretm += psi;
 	}
-	erretm = fabs(erretm);
+	erretm = std::abs(erretm);
 
 	temp = z__[*n] / (delta[*n] * work[*n]);
 	phi = z__[*n] * temp;
 	dphi = temp * temp;
-	erretm = (-phi - psi) * 8. + erretm - phi + rhoinv + fabs(tau) * (dpsi 
+	erretm = (-phi - psi) * 8. + erretm - phi + rhoinv + std::abs(tau) * (dpsi 
 		+ dphi);
 
 	w = rhoinv + phi + psi;
 
-	if (fabs(w) <= eps * erretm) {
+	if (std::abs(w) <= eps * erretm) {
 	    goto L240;
 	}
 
@@ -23198,14 +23009,14 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 	a = (dtnsq + dtnsq1) * w - dtnsq * dtnsq1 * (dpsi + dphi);
 	b = dtnsq * dtnsq1 * w;
 	if (c__ < 0.) {
-	    c__ = fabs(c__);
+	    c__ = std::abs(c__);
 	}
-	if ( fabs(c__)<PLUMED_GMX_FLOAT_MIN) {
+	if ( std::abs(c__)<PLUMED_GMX_FLOAT_MIN) {
 	    eta = *rho - *sigma * *sigma;
 	} else if (a >= 0.) {
-	    eta = (a + sqrt(fabs(a * a - b * 4. * c__))) / (c__  * 2.);
+	    eta = (a +  std::sqrt(std::abs(a * a - b * 4. * c__))) / (c__  * 2.);
 	} else {
-	  eta = b * 2. / (a - sqrt(fabs(a * a - b * 4. * c__)));
+	  eta = b * 2. / (a -  std::sqrt(std::abs(a * a - b * 4. * c__)));
 	}
 
 	if (w * eta > 0.) {
@@ -23217,7 +23028,7 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 	}
 
 	tau += eta;
-	eta /= *sigma + sqrt(eta + *sigma * *sigma);
+	eta /= *sigma +  std::sqrt(eta + *sigma * *sigma);
 	i__1 = *n;
 	for (j = 1; j <= i__1; ++j) {
 	    delta[j] -= eta;
@@ -23236,12 +23047,12 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 	    dpsi += temp * temp;
 	    erretm += psi;
 	}
-	erretm = fabs(erretm);
+	erretm = std::abs(erretm);
 
 	temp = z__[*n] / (work[*n] * delta[*n]);
 	phi = z__[*n] * temp;
 	dphi = temp * temp;
-	erretm = (-phi - psi) * 8. + erretm - phi + rhoinv + fabs(tau) * (dpsi 
+	erretm = (-phi - psi) * 8. + erretm - phi + rhoinv + std::abs(tau) * (dpsi 
 		+ dphi);
 
 	w = rhoinv + phi + psi;
@@ -23250,7 +23061,7 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 
 	for (niter = iter; niter <= 20; ++niter) {
 
-	    if (fabs(w) <= eps * erretm) {
+	    if (std::abs(w) <= eps * erretm) {
 		goto L240;
 	    }
 	    dtnsq1 = work[*n - 1] * delta[*n - 1];
@@ -23259,9 +23070,9 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 	    a = (dtnsq + dtnsq1) * w - dtnsq1 * dtnsq * (dpsi + dphi);
 	    b = dtnsq1 * dtnsq * w;
 	    if (a >= 0.) {
-		eta = (a + sqrt(fabs(a * a - b * 4. * c__))) / (c__ * 2.);
+		eta = (a +  std::sqrt(std::abs(a * a - b * 4. * c__))) / (c__ * 2.);
 	    } else {
-	      eta = b * 2. / (a - sqrt(fabs(a * a - b * 4. * c__)));
+	      eta = b * 2. / (a -  std::sqrt(std::abs(a * a - b * 4. * c__)));
 	    }
 
 	    if (w * eta > 0.) {
@@ -23273,7 +23084,7 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 	    }
 
 	    tau += eta;
-	    eta /= *sigma + sqrt(eta + *sigma * *sigma);
+	    eta /= *sigma +  std::sqrt(eta + *sigma * *sigma);
 	    i__1 = *n;
 	    for (j = 1; j <= i__1; ++j) {
 		delta[j] -= eta;
@@ -23292,12 +23103,12 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 		dpsi += temp * temp;
 		erretm += psi;
 	    }
-	    erretm = fabs(erretm);
+	    erretm = std::abs(erretm);
 
 	    temp = z__[*n] / (work[*n] * delta[*n]);
 	    phi = z__[*n] * temp;
 	    dphi = temp * temp;
-	    erretm = (-phi - psi) * 8. + erretm - phi + rhoinv + fabs(tau) * (
+	    erretm = (-phi - psi) * 8. + erretm - phi + rhoinv + std::abs(tau) * (
 		    dpsi + dphi);
 
 	    w = rhoinv + phi + psi;
@@ -23313,7 +23124,7 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 
 	delsq = (d__[ip1] - d__[*i__]) * (d__[ip1] + d__[*i__]);
 	delsq2 = delsq / 2.;
-	temp = delsq2 / (d__[*i__] + sqrt(d__[*i__] * d__[*i__] + delsq2));
+	temp = delsq2 / (d__[*i__] +  std::sqrt(d__[*i__] * d__[*i__] + delsq2));
 	i__1 = *n;
 	for (j = 1; j <= i__1; ++j) {
 	    work[j] = d__[j] + d__[*i__] + temp;
@@ -23343,11 +23154,11 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 	    a = c__ * delsq + z__[*i__] * z__[*i__] + z__[ip1] * z__[ip1];
 	    b = z__[*i__] * z__[*i__] * delsq;
 	    if (a > 0.) {
-		tau = b * 2. / (a + sqrt(fabs(a * a - b * 4. * c__)));
+		tau = b * 2. / (a +  std::sqrt(std::abs(a * a - b * 4. * c__)));
 	    } else {
-		tau = (a - sqrt(fabs(a * a - b * 4. * c__))) / (c__ * 2.);
+		tau = (a -  std::sqrt(std::abs(a * a - b * 4. * c__))) / (c__ * 2.);
 	    }
-	    eta = tau / (d__[*i__] + sqrt(d__[*i__] * d__[*i__] + tau));
+	    eta = tau / (d__[*i__] +  std::sqrt(d__[*i__] * d__[*i__] + tau));
 	} else {
 
 	    orgati = 0;
@@ -23356,11 +23167,11 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 	    a = c__ * delsq - z__[*i__] * z__[*i__] - z__[ip1] * z__[ip1];
 	    b = z__[ip1] * z__[ip1] * delsq;
 	    if (a < 0.) {
-		tau = b * 2. / (a - sqrt(fabs(a * a + b * 4. * c__)));
+		tau = b * 2. / (a -  std::sqrt(std::abs(a * a + b * 4. * c__)));
 	    } else {
-		tau = -(a + sqrt(fabs(a * a + b * 4. * c__))) /	(c__ * 2.);
+		tau = -(a +  std::sqrt(std::abs(a * a + b * 4. * c__))) /	(c__ * 2.);
 	    }
-	    eta = tau / (d__[ip1] + sqrt(fabs(d__[ip1] * d__[ip1] + tau)));
+	    eta = tau / (d__[ip1] +  std::sqrt(std::abs(d__[ip1] * d__[ip1] + tau)));
 	}
 
 	if (orgati) {
@@ -23393,7 +23204,7 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 	    dpsi += temp * temp;
 	    erretm += psi;
 	}
-	erretm = fabs(erretm);
+	erretm = std::abs(erretm);
 
 	dphi = 0.;
 	phi = 0.;
@@ -23425,10 +23236,10 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 	dw = dpsi + dphi + temp * temp;
 	temp = z__[ii] * temp;
 	w += temp;
-	erretm = (phi - psi) * 8. + erretm + rhoinv * 2. + fabs(temp) * 3. + 
-		fabs(tau) * dw;
+	erretm = (phi - psi) * 8. + erretm + rhoinv * 2. + std::abs(temp) * 3. + 
+		std::abs(tau) * dw;
 
-	if (fabs(w) <= eps * erretm) {
+	if (std::abs(w) <= eps * erretm) {
 	    goto L240;
 	}
 
@@ -23451,8 +23262,8 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 	    }
 	    a = (dtipsq + dtisq) * w - dtipsq * dtisq * dw;
 	    b = dtipsq * dtisq * w;
-	    if ( fabs(c__)<PLUMED_GMX_FLOAT_MIN) {
-		if ( fabs(a)<PLUMED_GMX_FLOAT_MIN) {
+	    if ( std::abs(c__)<PLUMED_GMX_FLOAT_MIN) {
+		if ( std::abs(a)<PLUMED_GMX_FLOAT_MIN) {
 		    if (orgati) {
 			a = z__[*i__] * z__[*i__] + dtipsq * dtipsq * (dpsi + 
 				dphi);
@@ -23463,9 +23274,9 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 		}
 		eta = b / a;
 	    } else if (a <= 0.) {
-		eta = (a - sqrt(fabs(a * a - b * 4. * c__))) / (c__ * 2.);
+		eta = (a -  std::sqrt(std::abs(a * a - b * 4. * c__))) / (c__ * 2.);
 	    } else {
-		eta = b * 2. / (a + sqrt(fabs(a * a - b * 4. * c__)));
+		eta = b * 2. / (a +  std::sqrt(std::abs(a * a - b * 4. * c__)));
 	    }
 	} else {
 
@@ -23524,7 +23335,7 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 	}
 
 	tau += eta;
-	eta /= *sigma + sqrt(*sigma * *sigma + eta);
+	eta /= *sigma +  std::sqrt(*sigma * *sigma + eta);
 
 	prew = w;
 
@@ -23545,7 +23356,7 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 	    dpsi += temp * temp;
 	    erretm += psi;
 	}
-	erretm = fabs(erretm);
+	erretm = std::abs(erretm);
 
 	dphi = 0.;
 	phi = 0.;
@@ -23561,8 +23372,8 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 	dw = dpsi + dphi + temp * temp;
 	temp = z__[ii] * temp;
 	w = rhoinv + phi + psi + temp;
-	erretm = (phi - psi) * 8. + erretm + rhoinv * 2. + fabs(temp) * 3. + 
-		fabs(tau) * dw;
+	erretm = (phi - psi) * 8. + erretm + rhoinv * 2. + std::abs(temp) * 3. + 
+		std::abs(tau) * dw;
 
 	if (w <= 0.) {
 	    sg2lb = (sg2lb > tau) ? sg2lb : tau;
@@ -23572,11 +23383,11 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 
 	swtch = 0;
 	if (orgati) {
-	    if (-w > fabs(prew) / 10.) {
+	    if (-w > std::abs(prew) / 10.) {
 		swtch = 1;
 	    }
 	} else {
-	    if (w > fabs(prew) / 10.) {
+	    if (w > std::abs(prew) / 10.) {
 		swtch = 1;
 	    }
 	}
@@ -23585,7 +23396,7 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 
 	for (niter = iter; niter <= 20; ++niter) {
 
-	    if (fabs(w) <= eps * erretm) {
+	    if (std::abs(w) <= eps * erretm) {
 		goto L240;
 	    }
 
@@ -23611,8 +23422,8 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 		}
 		a = (dtipsq + dtisq) * w - dtipsq * dtisq * dw;
 		b = dtipsq * dtisq * w;
-		if (fabs(c__)<PLUMED_GMX_FLOAT_MIN) {
-		    if (fabs(a)<PLUMED_GMX_FLOAT_MIN) {
+		if (std::abs(c__)<PLUMED_GMX_FLOAT_MIN) {
+		    if (std::abs(a)<PLUMED_GMX_FLOAT_MIN) {
 			if (! swtch) {
 			    if (orgati) {
 				a = z__[*i__] * z__[*i__] + dtipsq * dtipsq * 
@@ -23627,9 +23438,9 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 		    }
 		    eta = b / a;
 		} else if (a <= 0.) {
-		  eta = (a - sqrt(fabs(a * a - b * 4. * c__))) / (c__ * 2.);
+		  eta = (a -  std::sqrt(std::abs(a * a - b * 4. * c__))) / (c__ * 2.);
 		} else {
-		  eta = b * 2. / (a + sqrt(fabs(a * a - b * 4. * c__)));
+		  eta = b * 2. / (a +  std::sqrt(std::abs(a * a - b * 4. * c__)));
 		}
 	    } else {
 
@@ -23695,7 +23506,7 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 	    }
 
 	    tau += eta;
-	    eta /= *sigma + sqrt(*sigma * *sigma + eta);
+	    eta /= *sigma +  std::sqrt(*sigma * *sigma + eta);
 
 	    *sigma += eta;
 	    i__1 = *n;
@@ -23716,7 +23527,7 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 		dpsi += temp * temp;
 		erretm += psi;
 	    }
-	    erretm = fabs(erretm);
+	    erretm = std::abs(erretm);
 
 	    dphi = 0.;
 	    phi = 0.;
@@ -23732,9 +23543,9 @@ PLUMED_BLAS_F77_FUNC(slasd4,SLASD4)(int *n,
 	    dw = dpsi + dphi + temp * temp;
 	    temp = z__[ii] * temp;
 	    w = rhoinv + phi + psi + temp;
-	    erretm = (phi - psi) * 8. + erretm + rhoinv * 2. + fabs(temp) * 3. 
-		    + fabs(tau) * dw;
-	    if (w * prew > 0. && fabs(w) > fabs(prew) / 10.) {
+	    erretm = (phi - psi) * 8. + erretm + rhoinv * 2. + std::abs(temp) * 3. 
+		    + std::abs(tau) * dw;
+	    if (w * prew > 0. && std::abs(w) > std::abs(prew) / 10.) {
 		swtch = ! swtch;
 	    }
 
@@ -23755,7 +23566,7 @@ L240:
 } 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 
 #include "blas/blas.h"
@@ -23787,9 +23598,9 @@ PLUMED_BLAS_F77_FUNC(slasd5,SLASD5)(int *i__,
 	    b = delsq + *rho * (z__[1] * z__[1] + z__[2] * z__[2]);
 	    c__ = *rho * z__[1] * z__[1] * delsq;
 
-	    tau = c__ * 2. / (b + sqrt(fabs(b * b - c__ * 4.)));
+	    tau = c__ * 2. / (b +  std::sqrt(std::abs(b * b - c__ * 4.)));
 
-	    tau /= d__[1] + sqrt(d__[1] * d__[1] + tau);
+	    tau /= d__[1] +  std::sqrt(d__[1] * d__[1] + tau);
 	    *dsigma = d__[1] + tau;
 	    delta[1] = -tau;
 	    delta[2] = del - tau;
@@ -23800,12 +23611,12 @@ PLUMED_BLAS_F77_FUNC(slasd5,SLASD5)(int *i__,
 	    c__ = *rho * z__[2] * z__[2] * delsq;
 
 	    if (b > 0.) {
-		tau = c__ * -2. / (b + sqrt(b * b + c__ * 4.));
+		tau = c__ * -2. / (b +  std::sqrt(b * b + c__ * 4.));
 	    } else {
-		tau = (b - sqrt(b * b + c__ * 4.)) / 2.;
+		tau = (b -  std::sqrt(b * b + c__ * 4.)) / 2.;
 	    }
 
-	    tau /= d__[2] + sqrt(fabs(d__[2] * d__[2] + tau));
+	    tau /= d__[2] +  std::sqrt(std::abs(d__[2] * d__[2] + tau));
 	    *dsigma = d__[2] + tau;
 	    delta[1] = -(del + tau);
 	    delta[2] = -tau;
@@ -23818,11 +23629,11 @@ PLUMED_BLAS_F77_FUNC(slasd5,SLASD5)(int *i__,
 	c__ = *rho * z__[2] * z__[2] * delsq;
 
 	if (b > 0.) {
-	    tau = (b + sqrt(b * b + c__ * 4.)) / 2.;
+	    tau = (b +  std::sqrt(b * b + c__ * 4.)) / 2.;
 	} else {
-	    tau = c__ * 2. / (-b + sqrt(b * b + c__ * 4.));
+	    tau = c__ * 2. / (-b +  std::sqrt(b * b + c__ * 4.));
 	}
-	tau /= d__[2] + sqrt(d__[2] * d__[2] + tau);
+	tau /= d__[2] +  std::sqrt(d__[2] * d__[2] + tau);
 	*dsigma = d__[2] + tau;
 	delta[1] = -(del + tau);
 	delta[2] = -tau;
@@ -23834,7 +23645,7 @@ PLUMED_BLAS_F77_FUNC(slasd5,SLASD5)(int *i__,
 } 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "blas/blas.h"
 #include "lapack.h"
 
@@ -23915,13 +23726,13 @@ PLUMED_BLAS_F77_FUNC(slasd6,SLASD6)(int *icompq,
     idxc = idx + n;
     idxp = idxc + n;
 
-    d__1 = fabs(*alpha); 
-    d__2 = fabs(*beta);
+    d__1 = std::abs(*alpha); 
+    d__2 = std::abs(*beta);
     orgnrm = (d__1 > d__2) ? d__1 : d__2;
     d__[*nl + 1] = 0.;
     i__1 = n;
     for (i__ = 1; i__ <= i__1; ++i__) {
-      d__1 = fabs(d__[i__]);
+      d__1 = std::abs(d__[i__]);
 	if (d__1 > orgnrm)
 	    orgnrm = d__1;
     }
@@ -23956,7 +23767,7 @@ PLUMED_BLAS_F77_FUNC(slasd6,SLASD6)(int *icompq,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "blas/blas.h"
@@ -24081,17 +23892,17 @@ PLUMED_BLAS_F77_FUNC(slasd7,SLASD7)(int *icompq,
 
     eps = PLUMED_GMX_FLOAT_EPS;
 
-    d__1 = fabs(*alpha);
-    d__2 = fabs(*beta);
+    d__1 = std::abs(*alpha);
+    d__2 = std::abs(*beta);
     tol = (d__1>d__2) ? d__1 : d__2;
-    d__2 = fabs(d__[n]);
+    d__2 = std::abs(d__[n]);
     tol = eps * 64. * ((d__2>tol) ? d__2 : tol);
 
     *k = 1;
     k2 = n + 1;
     i__1 = n;
     for (j = 2; j <= i__1; ++j) {
-	if (fabs(z__[j]) <= tol) {
+	if (std::abs(z__[j]) <= tol) {
 
 	    --k2;
 	    idxp[k2] = j;
@@ -24110,13 +23921,13 @@ L80:
     if (j > n) {
 	goto L90;
     }
-    if (fabs(z__[j]) <= tol) {
+    if (std::abs(z__[j]) <= tol) {
 
 	--k2;
 	idxp[k2] = j;
     } else {
 
-	if (fabs(d__[j] - d__[jprev]) <= tol) {
+	if (std::abs(d__[j] - d__[jprev]) <= tol) {
 
 	    *s = z__[jprev];
 	    *c__ = z__[j];
@@ -24188,7 +23999,7 @@ L100:
 
     dsigma[1] = 0.;
     hlftol = tol / 2.;
-    if (fabs(dsigma[2]) <= hlftol) {
+    if (std::abs(dsigma[2]) <= hlftol) {
 	dsigma[2] = hlftol;
     }
     if (m > n) {
@@ -24204,7 +24015,7 @@ L100:
 	PLUMED_BLAS_F77_FUNC(srot,SROT)(&c__1, &vf[m], &c__1, &vf[1], &c__1, c__, s);
 	PLUMED_BLAS_F77_FUNC(srot,SROT)(&c__1, &vl[m], &c__1, &vl[1], &c__1, c__, s);
     } else {
-	if (fabs(z1) <= tol) {
+	if (std::abs(z1) <= tol) {
 	    z__[1] = tol;
 	} else {
 	    z__[1] = z1;
@@ -24225,7 +24036,7 @@ L100:
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "blas/blas.h"
 #include "lapack.h"
 
@@ -24249,7 +24060,6 @@ PLUMED_BLAS_F77_FUNC(slasd8,SLASD8)(int *icompq,
 {
     int difr_dim1, difr_offset, i__1, i__2;
     float d__2;
-    float *p1,*p2,t1,t2;
 
     int i__, j;
     float dj, rho;
@@ -24278,11 +24088,8 @@ PLUMED_BLAS_F77_FUNC(slasd8,SLASD8)(int *icompq,
 
     *info = 0;
 
-    p1 = &t1;
-    p2 = &t2;
-
     if (*k == 1) {
-	d__[1] = fabs(z__[1]);
+	d__[1] = std::abs(z__[1]);
 	difl[1] = d__[1];
 	if (*icompq == 1) {
 	    difl[2] = 1.;
@@ -24291,14 +24098,6 @@ PLUMED_BLAS_F77_FUNC(slasd8,SLASD8)(int *icompq,
 	return;
     }
 
-    i__1 = *k;
-    for (i__ = 1; i__ <= i__1; ++i__) {
-      t1 = dsigma[i__];
-      t2 = dsigma[i__];
-      /* force store and reload from memory */
-      d__2 = (*p1) + (*p2) - dsigma[i__];
-    }
-
     iwk1 = 1;
     iwk2 = iwk1 + *k;
     iwk3 = iwk2 + *k;
@@ -24338,7 +24137,7 @@ PLUMED_BLAS_F77_FUNC(slasd8,SLASD8)(int *icompq,
 
     i__1 = *k;
     for (i__ = 1; i__ <= i__1; ++i__) {
-	d__2 = sqrt(fabs(work[iwk3i + i__]));
+	d__2 =  std::sqrt(std::abs(work[iwk3i + i__]));
 	z__[i__] = (z__[i__] > 0) ? d__2 : -d__2;
     }
 
@@ -24354,19 +24153,11 @@ PLUMED_BLAS_F77_FUNC(slasd8,SLASD8)(int *icompq,
 	work[j] = -z__[j] / diflj / (dsigma[j] + dj);
 	i__2 = j - 1;
 	for (i__ = 1; i__ <= i__2; ++i__) {
-	  t1 = dsigma[i__];
-	  t2 = dsigj;
-	  /* force store and reload from memory */
-	  t1 = (*p1) + (*p2) - diflj;
-	  work[i__] = z__[i__] / t1 / ( dsigma[i__] + dj);
+	  work[i__] = z__[i__] / (dsigma[i__] + dsigj - diflj) / ( dsigma[i__] + dj);
 	}
 	i__2 = *k;
 	for (i__ = j + 1; i__ <= i__2; ++i__) {
-	  t1 = dsigma[i__];
-	  t2 = dsigjp;
-	  /* force store and reload from memory */
-	  t1 = (*p1) + (*p2) - difrj;
-	    work[i__] = z__[i__] / t1 / (dsigma[i__] + dj);
+	    work[i__] = z__[i__] / (dsigma[i__] + dsigjp - difrj) / (dsigma[i__] + dj);
 	}
 	temp = PLUMED_BLAS_F77_FUNC(snrm2,SNRM2)(k, &work[1], &c__1);
 	work[iwk2i + j] = PLUMED_BLAS_F77_FUNC(sdot,SDOT)(k, &work[1], &c__1, &vf[1], &c__1) / temp;
@@ -24591,7 +24382,6 @@ PLUMED_BLAS_F77_FUNC(slasda,SLASDA)(int *icompq,
 	    lf = 1;
 	    ll = 1;
 	} else {
-	    i__1 = lvl - 1;
 	    lf = (1 << (lvl-1));
 	    ll = (lf << 1) - 1;
 	}
@@ -24602,7 +24392,6 @@ PLUMED_BLAS_F77_FUNC(slasda,SLASDA)(int *icompq,
 	    nl = iwork[ndiml + im1];
 	    nr = iwork[ndimr + im1];
 	    nlf = ic - nl;
-	    nrf = ic + 1;
 	    if (i__ == ll) {
 		sqrei = *sqre;
 	    } else {
@@ -24645,7 +24434,7 @@ PLUMED_BLAS_F77_FUNC(slasda,SLASDA)(int *icompq,
 
 }
 }
-#include <ctype.h>
+#include <cctype>
 
 #include "blas/blas.h"
 #include "lapack.h"
@@ -24673,7 +24462,7 @@ PLUMED_BLAS_F77_FUNC(slasdq,SLASDQ)(const char *uplo,
                         float *work, 
                         int *info)
 {
-    const char xuplo=toupper(*uplo);
+    const char xuplo=std::toupper(*uplo);
     int c_dim1, c_offset, u_dim1, u_offset, vt_dim1, vt_offset, i__1, 
 	    i__2;
     int c__1 = 1;
@@ -24847,7 +24636,7 @@ PLUMED_BLAS_F77_FUNC(slasdq,SLASDQ)(const char *uplo,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 
 #include "blas/blas.h"
@@ -24867,7 +24656,7 @@ PLUMED_BLAS_F77_FUNC(slasdt,SLASDT)(int *n,
   float temp;
   int i,il,ir,llst,nlvl,ncrnt;
 
-  temp = log( ((float) maxn) / ((float)(*msub+1))) / log(2.0);
+  temp = std::log( ((float) maxn) / ((float)(*msub+1))) / std::log(2.0);
   
   *lvl = 1 + (int) temp;
 
@@ -24898,7 +24687,7 @@ PLUMED_BLAS_F77_FUNC(slasdt,SLASDT)(int *n,
 }
 }
 }
-#include <ctype.h>
+#include <cctype>
 #include "lapack.h"
 
 
@@ -24916,7 +24705,7 @@ PLUMED_BLAS_F77_FUNC(slaset,SLASET)(const char *uplo,
 	int *lda)
 {
   int i,j,k;
-  const char ch=toupper(*uplo);
+  const char ch=std::toupper(*uplo);
 
   if(ch=='U') {
     for(j=1;j<*n;j++) {
@@ -24943,7 +24732,7 @@ PLUMED_BLAS_F77_FUNC(slaset,SLASET)(const char *uplo,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "blas/blas.h"
 #include "lapack.h"
 #include "lapack_limits.h"
@@ -24978,14 +24767,14 @@ PLUMED_BLAS_F77_FUNC(slasq1,SLASQ1)(int *n,
   }
   
   for(i=0;i<*n-1;i++) {
-    d[i] = fabs(d[i]);
-    dtemp = fabs(e[i]);
+    d[i] = std::abs(d[i]);
+    dtemp = std::abs(e[i]);
     if(dtemp>sigmx)
       sigmx=dtemp;
   }
-  d[*n-1] = fabs(d[*n-1]);
+  d[*n-1] = std::abs(d[*n-1]);
   
-  if(fabs(sigmx)<PLUMED_GMX_FLOAT_MIN) {
+  if(std::abs(sigmx)<PLUMED_GMX_FLOAT_MIN) {
     PLUMED_BLAS_F77_FUNC(slasrt,SLASRT)("D",n,d,&iinfo);
     return;
   }
@@ -24999,7 +24788,7 @@ PLUMED_BLAS_F77_FUNC(slasq1,SLASQ1)(int *n,
    * Squaring input data makes scaling by a power of the
    * radix pointless.
    */
-  scale = sqrt(eps/safemin);
+  scale =  std::sqrt(eps/safemin);
   i = 1;
   j = 2;
   PLUMED_BLAS_F77_FUNC(scopy,SCOPY)(n,d,&i,work,&j);
@@ -25023,14 +24812,14 @@ PLUMED_BLAS_F77_FUNC(slasq1,SLASQ1)(int *n,
   k = 1;
   if(*info==0) {
     for(i=0;i<*n;i++)
-      d[i]=sqrt(work[i]);
+      d[i]= std::sqrt(work[i]);
     PLUMED_BLAS_F77_FUNC(slascl,SLASCL)("G",&j,&j,&scale,&sigmx,n,&k,d,n,&iinfo);
   }
   return;
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 #include "lapack_limits.h"
 
@@ -25112,9 +24901,9 @@ PLUMED_BLAS_F77_FUNC(slasq2,SLASQ2)(int *n,
 	    t = (z__[1] - z__[3] + z__[2]) * .5;
 	    s = z__[3] * (z__[2] / t);
 	    if (s <= t) {
-		s = z__[3] * (z__[2] / (t * (sqrt(s / t + 1.) + 1.)));
+		s = z__[3] * (z__[2] / (t * ( std::sqrt(s / t + 1.) + 1.)));
 	    } else {
-		s = z__[3] * (z__[2] / (t + sqrt(t) * sqrt(t + s)));
+		s = z__[3] * (z__[2] / (t +  std::sqrt(t) * std::sqrt(t + s)));
 	    }
 	    t = z__[1] + (s + z__[2]);
 	    z__[3] *= z__[1] / t;
@@ -25157,9 +24946,8 @@ PLUMED_BLAS_F77_FUNC(slasq2,SLASQ2)(int *n,
     d__ += z__[(*n << 1) - 1];
     d__1 = qmax, d__2 = z__[(*n << 1) - 1];
     qmax = (d__1>d__2) ? d__1 : d__2;
-    zmax = (qmax>zmax) ? qmax : zmax;
 
-    if (fabs(e)<PLUMED_GMX_FLOAT_MIN) {
+    if (std::abs(e)<PLUMED_GMX_FLOAT_MIN) {
 	i__1 = *n;
 	for (k = 2; k <= i__1; ++k) {
 	    z__[k] = z__[(k << 1) - 1];
@@ -25171,7 +24959,7 @@ PLUMED_BLAS_F77_FUNC(slasq2,SLASQ2)(int *n,
 
     trace = d__ + e;
 
-    if (fabs(trace)<PLUMED_GMX_FLOAT_MIN) {
+    if (std::abs(trace)<PLUMED_GMX_FLOAT_MIN) {
 	z__[(*n << 1) - 1] = 0.;
 	return;
     }
@@ -25184,13 +24972,13 @@ PLUMED_BLAS_F77_FUNC(slasq2,SLASQ2)(int *n,
     if(neginf>=0.0)
       ieee = 0;
     negzro = one/(neginf+one);
-    if(fabs(negzro)>PLUMED_GMX_FLOAT_MIN)
+    if(std::abs(negzro)>PLUMED_GMX_FLOAT_MIN)
       ieee = 0;
     neginf = one/negzro;
     if(neginf>=0)
       ieee = 0;
     newzro = negzro + zero;
-    if(fabs(newzro-zero)>PLUMED_GMX_FLOAT_MIN)
+    if(std::abs(newzro-zero)>PLUMED_GMX_FLOAT_MIN)
       ieee = 0;
     posinf = one /newzro;
     if(posinf<=one)
@@ -25299,7 +25087,7 @@ PLUMED_BLAS_F77_FUNC(slasq2,SLASQ2)(int *n,
 
 	emax = 0.;
 	if (n0 > i0) {
-	    emin = fabs(z__[(n0 << 2) - 5]);
+	    emin = std::abs(z__[(n0 << 2) - 5]);
 	} else {
 	    emin = 0.;
 	}
@@ -25361,7 +25149,7 @@ L100:
 	}
 
 
-	d__1 = 0., d__2 = qmin - sqrt(qmin) * 2. * sqrt(emax);
+	d__1 = 0., d__2 = qmin -  std::sqrt(qmin) * 2. * std::sqrt(emax);
 	dmin__ = -((d__1>d__2) ? d__1 : d__2);
 
 	nbig = (n0 - i0 + 1) * 30;
@@ -25449,7 +25237,7 @@ L170:
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "lapack.h"
@@ -25540,9 +25328,9 @@ L40:
 	t = (z__[nn - 7] - z__[nn - 3] + z__[nn - 5]) * .5;
 	s = z__[nn - 3] * (z__[nn - 5] / t);
 	if (s <= t) {
-	    s = z__[nn - 3] * (z__[nn - 5] / (t * (sqrt(s / t + 1.) + 1.)));
+	    s = z__[nn - 3] * (z__[nn - 5] / (t * ( std::sqrt(s / t + 1.) + 1.)));
 	} else {
-	    s = z__[nn - 3] * (z__[nn - 5] / (t + sqrt(t) * sqrt(t + s)));
+	    s = z__[nn - 3] * (z__[nn - 5] / (t +  std::sqrt(t) * std::sqrt(t + s)));
 	}
 	t = z__[nn - 7] + (s + z__[nn - 5]);
 	z__[nn - 3] *= z__[nn - 7] / t;
@@ -25614,7 +25402,7 @@ L70:
 	goto L90;
 
     } else if (*dmin__ < 0. && dmin1 > 0. && z__[4*(*n0 - 1) - *pp] < tol *
-	     (*sigma + dn1) && fabs(dn) < tol * *sigma) {
+	     (*sigma + dn1) && std::abs(dn) < tol * *sigma) {
 
 	z__[4*(*n0 - 1) - *pp + 2] = 0.;
 	*dmin__ = 0.;
@@ -25662,7 +25450,7 @@ L90:
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "lapack.h"
@@ -25706,15 +25494,15 @@ PLUMED_BLAS_F77_FUNC(slasq4,SLASQ4)(int *i0,
     nn = (*n0 << 2) + *pp;
     if (*n0in == *n0) {
 
-	if ( fabs(*dmin__ - *dn)<PLUMED_GMX_FLOAT_EPS*fabs(*dmin__ + *dn) ||
-         fabs(*dmin__ - *dn1)<PLUMED_GMX_FLOAT_EPS*fabs(*dmin__ + *dn1)) {
+	if ( std::abs(*dmin__ - *dn)<PLUMED_GMX_FLOAT_EPS*std::abs(*dmin__ + *dn) ||
+         std::abs(*dmin__ - *dn1)<PLUMED_GMX_FLOAT_EPS*std::abs(*dmin__ + *dn1)) {
 
-	    b1 = sqrt(z__[nn - 3]) * sqrt(z__[nn - 5]);
-	    b2 = sqrt(z__[nn - 7]) * sqrt(z__[nn - 9]);
+	    b1 =  std::sqrt(z__[nn - 3]) * std::sqrt(z__[nn - 5]);
+	    b2 =  std::sqrt(z__[nn - 7]) * std::sqrt(z__[nn - 9]);
 	    a2 = z__[nn - 7] + z__[nn - 5];
 
-        if ( fabs(*dmin__ - *dn)<PLUMED_GMX_FLOAT_EPS*fabs(*dmin__ + *dn) &&
-             fabs(*dmin1 - *dn1)<PLUMED_GMX_FLOAT_EPS*fabs(*dmin1 + *dn1)) {
+        if ( std::abs(*dmin__ - *dn)<PLUMED_GMX_FLOAT_EPS*std::abs(*dmin__ + *dn) &&
+             std::abs(*dmin1 - *dn1)<PLUMED_GMX_FLOAT_EPS*std::abs(*dmin1 + *dn1)) {
 
             gap2 = *dmin2 - a2 - *dmin2 * .25;
 		if (gap2 > 0. && gap2 > b2) {
@@ -25744,7 +25532,7 @@ PLUMED_BLAS_F77_FUNC(slasq4,SLASQ4)(int *i0,
 
 		*ttype = -4;
 		s = *dmin__ * .25;
-		if (fabs(*dmin__ - *dn)<PLUMED_GMX_FLOAT_EPS*fabs(*dmin__ + *dn)) {
+		if (std::abs(*dmin__ - *dn)<PLUMED_GMX_FLOAT_EPS*std::abs(*dmin__ + *dn)) {
 		    gam = *dn;
 		    a2 = 0.;
 		    if (z__[nn - 5] > z__[nn - 7]) {
@@ -25754,7 +25542,6 @@ PLUMED_BLAS_F77_FUNC(slasq4,SLASQ4)(int *i0,
 		    np = nn - 9;
 		} else {
 		    np = nn - (*pp << 1);
-		    b2 = z__[np - 2];
 		    gam = *dn1;
 		    if (z__[np - 4] > z__[np - 2]) {
 			return;
@@ -25771,7 +25558,7 @@ PLUMED_BLAS_F77_FUNC(slasq4,SLASQ4)(int *i0,
 		a2 += b2;
 		i__1 = (*i0 << 2) - 1 + *pp;
 		for (i4 = np; i4 >= i__1; i4 += -4) {
-		    if (fabs(b2)<PLUMED_GMX_FLOAT_MIN) {
+		    if (std::abs(b2)<PLUMED_GMX_FLOAT_MIN) {
 			goto L20;
 		    }
 		    b1 = b2;
@@ -25789,10 +25576,10 @@ L20:
 
 
 		if (a2 < .563) {
-		    s = gam * (1. - sqrt(a2)) / (a2 + 1.);
+		    s = gam * (1. -  std::sqrt(a2)) / (a2 + 1.);
 		}
 	    }
-	} else if (fabs(*dmin__ - *dn2)<PLUMED_GMX_FLOAT_EPS*fabs(*dmin__ + *dn2)) {
+	} else if (std::abs(*dmin__ - *dn2)<PLUMED_GMX_FLOAT_EPS*std::abs(*dmin__ + *dn2)) {
 
 	    *ttype = -5;
 	    s = *dmin__ * .25;
@@ -25812,7 +25599,7 @@ L20:
 		a2 += b2;
 		i__1 = (*i0 << 2) - 1 + *pp;
 		for (i4 = nn - 17; i4 >= i__1; i4 += -4) {
-		    if (fabs(b2)<PLUMED_GMX_FLOAT_MIN) {
+		    if (std::abs(b2)<PLUMED_GMX_FLOAT_MIN) {
 			goto L40;
 		    }
 		    b1 = b2;
@@ -25830,7 +25617,7 @@ L40:
 	    }
 
 	    if (a2 < .563) {
-		s = gam * (1. - sqrt(a2)) / (a2 + 1.);
+		s = gam * (1. -  std::sqrt(a2)) / (a2 + 1.);
 	    }
 	} else {
 
@@ -25847,8 +25634,8 @@ L40:
 
     } else if (*n0in == *n0 + 1) {
 
-        if ( fabs(*dmin1 - *dn1)<PLUMED_GMX_FLOAT_EPS*fabs(*dmin1 + *dn1) &&
-             fabs(*dmin2 - *dn2)<PLUMED_GMX_FLOAT_EPS*fabs(*dmin2 + *dn2)) {
+        if ( std::abs(*dmin1 - *dn1)<PLUMED_GMX_FLOAT_EPS*std::abs(*dmin1 + *dn1) &&
+             std::abs(*dmin2 - *dn2)<PLUMED_GMX_FLOAT_EPS*std::abs(*dmin2 + *dn2)) {
 
 	    *ttype = -7;
 	    s = *dmin1 * .333;
@@ -25857,7 +25644,7 @@ L40:
 	    }
 	    b1 = z__[nn - 5] / z__[nn - 7];
 	    b2 = b1;
-	    if (fabs(b2)<PLUMED_GMX_FLOAT_MIN) {
+	    if (std::abs(b2)<PLUMED_GMX_FLOAT_MIN) {
 		goto L60;
 	    }
 	    i__1 = (*i0 << 2) - 1 + *pp;
@@ -25873,7 +25660,7 @@ L40:
 		}
 	    }
 L60:
-	    b2 = sqrt(b2 * 1.05);
+	    b2 =  std::sqrt(b2 * 1.05);
 	    d__1 = b2;
 	    a2 = *dmin1 / (d__1 * d__1 + 1.);
 	    gap2 = *dmin2 * .5 - a2;
@@ -25888,7 +25675,7 @@ L60:
 	} else {
 
 	    s = *dmin1 * .25;
-	    if (fabs(*dmin1 - *dn1)<PLUMED_GMX_FLOAT_EPS*fabs(*dmin1 + *dn1)) {
+	    if (std::abs(*dmin1 - *dn1)<PLUMED_GMX_FLOAT_EPS*std::abs(*dmin1 + *dn1)) {
 		s = *dmin1 * .5;
 	    }
 	    *ttype = -9;
@@ -25896,7 +25683,7 @@ L60:
 
     } else if (*n0in == *n0 + 2) {
 
-	if (fabs(*dmin2 - *dn2)<PLUMED_GMX_FLOAT_EPS*fabs(*dmin2 + *dn2) &&
+	if (std::abs(*dmin2 - *dn2)<PLUMED_GMX_FLOAT_EPS*std::abs(*dmin2 + *dn2) &&
         z__[nn - 5] * 2. < z__[nn - 7]) {
 	    *ttype = -10;
 	    s = *dmin2 * .333;
@@ -25905,7 +25692,7 @@ L60:
 	    }
 	    b1 = z__[nn - 5] / z__[nn - 7];
 	    b2 = b1;
-	    if (fabs(b2)<PLUMED_GMX_FLOAT_MIN) {
+	    if (std::abs(b2)<PLUMED_GMX_FLOAT_MIN) {
 		goto L80;
 	    }
 	    i__1 = (*i0 << 2) - 1 + *pp;
@@ -25920,10 +25707,10 @@ L60:
 		}
 	    }
 L80:
-	    b2 = sqrt(b2 * 1.05);
+	    b2 =  std::sqrt(b2 * 1.05);
 	    d__1 = b2;
 	    a2 = *dmin2 / (d__1 * d__1 + 1.);
-	    gap2 = z__[nn - 7] + z__[nn - 9] - sqrt(z__[nn - 11]) * sqrt(z__[
+	    gap2 = z__[nn - 7] + z__[nn - 9] -  std::sqrt(z__[nn - 11]) * std::sqrt(z__[
 		    nn - 9]) - a2;
 	    if (gap2 > 0. && gap2 > b2 * a2) {
 		d__1 = s, d__2 = a2 * (1. - a2 * 1.01 * (b2 / gap2) * b2);
@@ -25950,7 +25737,7 @@ L80:
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 
 #include "blas/blas.h"
@@ -26110,7 +25897,7 @@ PLUMED_BLAS_F77_FUNC(slasq5,SLASQ5)(int *i0,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 #include "lapack_limits.h"
 
@@ -26156,7 +25943,7 @@ PLUMED_BLAS_F77_FUNC(slasq6,SLASQ6)(int *i0,
 	i__1 = 4*(*n0 - 3);
 	for (j4 = *i0*4; j4 <= i__1; j4 += 4) {
 	    z__[j4 - 2] = d__ + z__[j4 - 1];
-	    if (fabs(z__[j4 - 2])<PLUMED_GMX_FLOAT_MIN) {
+	    if (std::abs(z__[j4 - 2])<PLUMED_GMX_FLOAT_MIN) {
 		z__[j4] = 0.;
 		d__ = z__[j4 + 1];
 		*dmin__ = d__;
@@ -26180,7 +25967,7 @@ PLUMED_BLAS_F77_FUNC(slasq6,SLASQ6)(int *i0,
 	i__1 = 4*(*n0 - 3);
 	for (j4 = *i0 << 2; j4 <= i__1; j4 += 4) {
 	    z__[j4 - 3] = d__ + z__[j4];
-	    if (fabs(z__[j4 - 3])<PLUMED_GMX_FLOAT_MIN) {
+	    if (std::abs(z__[j4 - 3])<PLUMED_GMX_FLOAT_MIN) {
 		z__[j4 - 1] = 0.;
 		d__ = z__[j4 + 2];
 		*dmin__ = d__;
@@ -26206,7 +25993,7 @@ PLUMED_BLAS_F77_FUNC(slasq6,SLASQ6)(int *i0,
     j4 = 4*(*n0 - 2) - *pp;
     j4p2 = j4 + (*pp << 1) - 1;
     z__[j4 - 2] = *dnm2 + z__[j4p2];
-    if (fabs(z__[j4 - 2])<PLUMED_GMX_FLOAT_MIN) {
+    if (std::abs(z__[j4 - 2])<PLUMED_GMX_FLOAT_MIN) {
 	z__[j4] = 0.;
 	*dnm1 = z__[j4p2 + 2];
 	*dmin__ = *dnm1;
@@ -26227,7 +26014,7 @@ PLUMED_BLAS_F77_FUNC(slasq6,SLASQ6)(int *i0,
     j4 += 4;
     j4p2 = j4 + (*pp << 1) - 1;
     z__[j4 - 2] = *dnm1 + z__[j4p2];
-    if (fabs(z__[j4 - 2])<PLUMED_GMX_FLOAT_MIN) {
+    if (std::abs(z__[j4 - 2])<PLUMED_GMX_FLOAT_MIN) {
 	z__[j4] = 0.;
 	*dn = z__[j4p2 + 2];
 	*dmin__ = *dn;
@@ -26252,7 +26039,7 @@ PLUMED_BLAS_F77_FUNC(slasq6,SLASQ6)(int *i0,
 } 
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "real.h"
 #include "lapack.h"
@@ -26276,7 +26063,7 @@ PLUMED_BLAS_F77_FUNC(slasr,SLASR)(const char *side,
     int a_dim1, a_offset, i__1, i__2;
 
     /* Local variables */
-    int i__, j, info;
+    int i__, j;
     float temp;
     float ctemp, stemp;
 
@@ -26287,7 +26074,6 @@ PLUMED_BLAS_F77_FUNC(slasr,SLASR)(const char *side,
     a -= a_offset;
 
     /* Function Body */
-    info = 0;
 
     if (*m == 0 || *n == 0) {
 	return;
@@ -26300,7 +26086,7 @@ PLUMED_BLAS_F77_FUNC(slasr,SLASR)(const char *side,
 		for (j = 1; j <= i__1; ++j) {
 		    ctemp = c__[j];
 		    stemp = s[j];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || fabs(stemp)>PLUMED_GMX_FLOAT_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || std::abs(stemp)>PLUMED_GMX_FLOAT_MIN) {
 			i__2 = *n;
 			for (i__ = 1; i__ <= i__2; ++i__) {
 			    temp = a[j + 1 + i__ * a_dim1];
@@ -26315,7 +26101,7 @@ PLUMED_BLAS_F77_FUNC(slasr,SLASR)(const char *side,
 		for (j = *m - 1; j >= 1; --j) {
 		    ctemp = c__[j];
 		    stemp = s[j];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || fabs(stemp)>PLUMED_GMX_FLOAT_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || std::abs(stemp)>PLUMED_GMX_FLOAT_MIN) {
 			i__1 = *n;
 			for (i__ = 1; i__ <= i__1; ++i__) {
 			    temp = a[j + 1 + i__ * a_dim1];
@@ -26333,7 +26119,7 @@ PLUMED_BLAS_F77_FUNC(slasr,SLASR)(const char *side,
 		for (j = 2; j <= i__1; ++j) {
 		    ctemp = c__[j - 1];
 		    stemp = s[j - 1];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || fabs(stemp)>PLUMED_GMX_FLOAT_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || std::abs(stemp)>PLUMED_GMX_FLOAT_MIN) {
 			i__2 = *n;
 			for (i__ = 1; i__ <= i__2; ++i__) {
 			    temp = a[j + i__ * a_dim1];
@@ -26348,7 +26134,7 @@ PLUMED_BLAS_F77_FUNC(slasr,SLASR)(const char *side,
 		for (j = *m; j >= 2; --j) {
 		    ctemp = c__[j - 1];
 		    stemp = s[j - 1];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || fabs(stemp)>PLUMED_GMX_FLOAT_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || std::abs(stemp)>PLUMED_GMX_FLOAT_MIN) {
 			i__1 = *n;
 			for (i__ = 1; i__ <= i__1; ++i__) {
 			    temp = a[j + i__ * a_dim1];
@@ -26366,7 +26152,7 @@ PLUMED_BLAS_F77_FUNC(slasr,SLASR)(const char *side,
 		for (j = 1; j <= i__1; ++j) {
 		    ctemp = c__[j];
 		    stemp = s[j];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || fabs(stemp)>PLUMED_GMX_FLOAT_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || std::abs(stemp)>PLUMED_GMX_FLOAT_MIN) {
 			i__2 = *n;
 			for (i__ = 1; i__ <= i__2; ++i__) {
 			    temp = a[j + i__ * a_dim1];
@@ -26381,7 +26167,7 @@ PLUMED_BLAS_F77_FUNC(slasr,SLASR)(const char *side,
 		for (j = *m - 1; j >= 1; --j) {
 		    ctemp = c__[j];
 		    stemp = s[j];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || fabs(stemp)>PLUMED_GMX_FLOAT_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || std::abs(stemp)>PLUMED_GMX_FLOAT_MIN) {
 			i__1 = *n;
 			for (i__ = 1; i__ <= i__1; ++i__) {
 			    temp = a[j + i__ * a_dim1];
@@ -26402,7 +26188,7 @@ PLUMED_BLAS_F77_FUNC(slasr,SLASR)(const char *side,
 		for (j = 1; j <= i__1; ++j) {
 		    ctemp = c__[j];
 		    stemp = s[j];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || fabs(stemp)>PLUMED_GMX_FLOAT_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || std::abs(stemp)>PLUMED_GMX_FLOAT_MIN) {
 			i__2 = *m;
 			for (i__ = 1; i__ <= i__2; ++i__) {
 			    temp = a[i__ + (j + 1) * a_dim1];
@@ -26417,7 +26203,7 @@ PLUMED_BLAS_F77_FUNC(slasr,SLASR)(const char *side,
 		for (j = *n - 1; j >= 1; --j) {
 		    ctemp = c__[j];
 		    stemp = s[j];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || fabs(stemp)>PLUMED_GMX_FLOAT_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || std::abs(stemp)>PLUMED_GMX_FLOAT_MIN) {
 			i__1 = *m;
 			for (i__ = 1; i__ <= i__1; ++i__) {
 			    temp = a[i__ + (j + 1) * a_dim1];
@@ -26435,7 +26221,7 @@ PLUMED_BLAS_F77_FUNC(slasr,SLASR)(const char *side,
 		for (j = 2; j <= i__1; ++j) {
 		    ctemp = c__[j - 1];
 		    stemp = s[j - 1];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || fabs(stemp)>PLUMED_GMX_FLOAT_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || std::abs(stemp)>PLUMED_GMX_FLOAT_MIN) {
 			i__2 = *m;
 			for (i__ = 1; i__ <= i__2; ++i__) {
 			    temp = a[i__ + j * a_dim1];
@@ -26450,7 +26236,7 @@ PLUMED_BLAS_F77_FUNC(slasr,SLASR)(const char *side,
 		for (j = *n; j >= 2; --j) {
 		    ctemp = c__[j - 1];
 		    stemp = s[j - 1];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || fabs(stemp)>PLUMED_GMX_FLOAT_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || std::abs(stemp)>PLUMED_GMX_FLOAT_MIN) {
 			i__1 = *m;
 			for (i__ = 1; i__ <= i__1; ++i__) {
 			    temp = a[i__ + j * a_dim1];
@@ -26468,7 +26254,7 @@ PLUMED_BLAS_F77_FUNC(slasr,SLASR)(const char *side,
 		for (j = 1; j <= i__1; ++j) {
 		    ctemp = c__[j];
 		    stemp = s[j];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || fabs(stemp)>PLUMED_GMX_FLOAT_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || std::abs(stemp)>PLUMED_GMX_FLOAT_MIN) {
 			i__2 = *m;
 			for (i__ = 1; i__ <= i__2; ++i__) {
 			    temp = a[i__ + j * a_dim1];
@@ -26483,7 +26269,7 @@ PLUMED_BLAS_F77_FUNC(slasr,SLASR)(const char *side,
 		for (j = *n - 1; j >= 1; --j) {
 		    ctemp = c__[j];
 		    stemp = s[j];
-		    if (fabs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || fabs(stemp)>PLUMED_GMX_FLOAT_MIN) {
+		    if (std::abs(ctemp-1.0)>PLUMED_GMX_FLOAT_EPS || std::abs(stemp)>PLUMED_GMX_FLOAT_MIN) {
 			i__1 = *m;
 			for (i__ = 1; i__ <= i__1; ++i__) {
 			    temp = a[i__ + j * a_dim1];
@@ -26544,7 +26330,6 @@ PLUMED_BLAS_F77_FUNC(slasrt,SLASRT)(const char *id,
 	*info = -2;
     }
     if (*info != 0) {
-	i__1 = -(*info);
 	return;
     }
     if (*n <= 1) {
@@ -26745,7 +26530,6 @@ void PLUMED_BLAS_F77_FUNC(slasrt2,SLASRT2)(const char *id,
 	*info = -2;
     }
     if (*info != 0) {
-	i__1 = -(*info);
 	return;
     }
 
@@ -26914,7 +26698,7 @@ L110:
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 #include "lapack.h"
 
@@ -26934,8 +26718,8 @@ PLUMED_BLAS_F77_FUNC(slassq,SLASSQ)(int *n,
 
   if(*n>0) {
     for(ix=0;ix<=(*n-1)*(*incx);ix+=*incx) {
-      if(fabs(x[ix])>PLUMED_GMX_FLOAT_MIN) {
-	absxi = fabs(x[ix]);
+      if(std::abs(x[ix])>PLUMED_GMX_FLOAT_MIN) {
+	absxi = std::abs(x[ix]);
 	if(*scale<absxi) {
 	  t = *scale/absxi;
 	  t = t*t;
@@ -26952,7 +26736,7 @@ PLUMED_BLAS_F77_FUNC(slassq,SLASSQ)(int *n,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 #include "lapack_limits.h"
 
@@ -26984,9 +26768,9 @@ PLUMED_BLAS_F77_FUNC(slasv2,SLASV2)(float *f,
     int gasmal;
 
     ft = *f;
-    fa = fabs(ft);
+    fa = std::abs(ft);
     ht = *h__;
-    ha = fabs(*h__);
+    ha = std::abs(*h__);
 
     pmax = 1;
     swap = ha > fa;
@@ -27001,8 +26785,8 @@ PLUMED_BLAS_F77_FUNC(slasv2,SLASV2)(float *f,
 
     }
     gt = *g;
-    ga = fabs(gt);
-    if (fabs(ga)<PLUMED_GMX_FLOAT_MIN) {
+    ga = std::abs(gt);
+    if (std::abs(ga)<PLUMED_GMX_FLOAT_MIN) {
 
 	*ssmin = ha;
 	*ssmax = fa;
@@ -27032,7 +26816,7 @@ PLUMED_BLAS_F77_FUNC(slasv2,SLASV2)(float *f,
 	if (gasmal) {
 
 	    d__ = fa - ha;
-	    if ( fabs( fa - d__ )<PLUMED_GMX_FLOAT_EPS*fabs( fa + d__ )) {
+	    if ( std::abs( fa - d__ )<PLUMED_GMX_FLOAT_EPS*std::abs( fa + d__ )) {
 		l = 1.;
 	    } else {
 		l = d__ / fa;
@@ -27043,28 +26827,28 @@ PLUMED_BLAS_F77_FUNC(slasv2,SLASV2)(float *f,
 
 	    mm = m * m;
 	    tt = t * t;
-	    s = sqrt(tt + mm);
+	    s =  std::sqrt(tt + mm);
 
-	    if ( fabs(l)<PLUMED_GMX_FLOAT_MIN) {
-		r__ = fabs(m);
+	    if ( std::abs(l)<PLUMED_GMX_FLOAT_MIN) {
+		r__ = std::abs(m);
 	    } else {
-		r__ = sqrt(l * l + mm);
+		r__ =  std::sqrt(l * l + mm);
 	    }
 	    a = (s + r__) * .5;
 
 	    *ssmin = ha / a;
 	    *ssmax = fa * a;
-	    if ( fabs(mm)<PLUMED_GMX_FLOAT_MIN) {
+	    if ( std::abs(mm)<PLUMED_GMX_FLOAT_MIN) {
 
-		if (fabs(l)<PLUMED_GMX_FLOAT_MIN) {
+		if (std::abs(l)<PLUMED_GMX_FLOAT_MIN) {
 		    t = ( (ft>0) ? 2.0 : -2.0) * ( (gt>0) ? 1.0 : -1.0);
 		} else {
-		    t = gt / ( (ft>0) ? d__ : d__) + m / t;
+		    t = gt / ( (ft>0) ? d__ : -d__) + m / t;
 		}
 	    } else {
 		t = (m / (s + t) + m / (r__ + l)) * (a + 1.);
 	    }
-	    l = sqrt(t * t + 4.);
+	    l =  std::sqrt(t * t + 4.);
 	    crt = 2. / l;
 	    srt = t / l;
 	    clt = (crt + srt * m) / a;
@@ -27172,7 +26956,7 @@ PLUMED_BLAS_F77_FUNC(slaswp,SLASWP)(int *n,
 }
 }
 }
-#include <ctype.h>
+#include <cctype>
 #include "blas/blas.h"
 #include "lapack.h"
 #include "lapack_limits.h"
@@ -27196,7 +26980,7 @@ PLUMED_BLAS_F77_FUNC(slatrd,SLATRD)(const char *  uplo,
   int i,iw;
   int ti1,ti2,ti3;
   float one,zero,minusone,alpha;
-  const char ch=toupper(*uplo);
+  const char ch=std::toupper(*uplo);
 
   one=1.0;
   minusone=-1.0;
@@ -27336,7 +27120,7 @@ PLUMED_BLAS_F77_FUNC(slatrd,SLATRD)(const char *  uplo,
   
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "blas/blas.h"
 #include "lapack.h"
@@ -27908,7 +27692,6 @@ PLUMED_BLAS_F77_FUNC(sorm2l,SORM2L)(const char *side,
 	nq = *n;
     }
     if (*info != 0) {
-	i__1 = -(*info);
 	return;
     }
 
@@ -27975,7 +27758,7 @@ PLUMED_BLAS_F77_FUNC(sorm2r,SORM2R)(const char *side,
 {
     int a_dim1, a_offset, c_dim1, c_offset, i__1, i__2;
 
-    int i__, i1, i2, i3, ic, jc, mi, ni, nq;
+    int i__, i1, i2, i3, ic, jc, mi, ni;
     float aii;
     int left;
     int notran;
@@ -27995,12 +27778,6 @@ PLUMED_BLAS_F77_FUNC(sorm2r,SORM2R)(const char *side,
 
     ic = jc = 0;
 
-    if (left) {
-	nq = *m;
-    } else {
-	nq = *n;
-    }
-
     if (*m <= 0 || *n <= 0 || *k <= 0) {
 	return;
     }
@@ -28183,7 +27960,7 @@ PLUMED_BLAS_F77_FUNC(sormbr,SORMBR)(const char *vect,
 
 }
 }
-#include <ctype.h>
+#include <cctype>
 #include "real.h"
 #include "lapack.h"
 
@@ -28205,8 +27982,8 @@ PLUMED_BLAS_F77_FUNC(sorml2,SORML2)(const char *side,
                         float *work,
                         int *info)
 {
-  const char xside=toupper(*side);
-  const char xtrans=toupper(*trans);
+  const char xside=std::toupper(*side);
+  const char xtrans=std::toupper(*trans);
   int i,i1,i2,i3,ni,mi,ic,jc;
   float aii;
 
@@ -28320,7 +28097,6 @@ PLUMED_BLAS_F77_FUNC(sormlq,SORMLQ)(const char *side,
     work[1] = (float) lwkopt;
     
     if (*info != 0) {
-	i__1 = -(*info);
        	return;
     } else if (lquery) {
 	return;
@@ -28339,8 +28115,6 @@ PLUMED_BLAS_F77_FUNC(sormlq,SORMLQ)(const char *side,
 	    nb = *lwork / ldwork;
 	    nbmin = DORMLQ_MINBLOCKSIZE;
 	}
-    } else {
-	iws = nw;
     }
 
     if (nb < nbmin || nb >= *k) {
@@ -28458,8 +28232,7 @@ PLUMED_BLAS_F77_FUNC(sormql,SORMQL)(const char *side, const char *trans, int *m,
     work[1] = (float) lwkopt;
     
     if (*info != 0) {
-	i__1 = -(*info);
-	return;
+        return;
     } else if (lquery) {
 	return;
     }
@@ -28477,8 +28250,6 @@ PLUMED_BLAS_F77_FUNC(sormql,SORMQL)(const char *side, const char *trans, int *m,
 	    nb = *lwork / ldwork;
 	    nbmin = DORMQL_MINBLOCKSIZE;
 	}
-    } else {
-	iws = nw;
     }
 
     if (nb < nbmin || nb >= *k) {
@@ -28595,7 +28366,6 @@ PLUMED_BLAS_F77_FUNC(sormqr,SORMQR)(const char *side,
      work[1] = (float) lwkopt;
 
     if (*info != 0) {
-	i__1 = -(*info);
 	return;
     } else if (lquery) {
       return;
@@ -28614,8 +28384,6 @@ PLUMED_BLAS_F77_FUNC(sormqr,SORMQR)(const char *side,
 	    nb = *lwork / ldwork;
 	    nbmin = DORMQR_MINBLOCKSIZE;
 	}
-    } else {
-	iws = nw;
     }
 
     if (nb < nbmin || nb >= *k) {
@@ -28778,7 +28546,7 @@ PLUMED_BLAS_F77_FUNC(sormtr,SORMTR)(const char *side,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 #include "lapack_limits.h"
 
@@ -28886,7 +28654,6 @@ PLUMED_BLAS_F77_FUNC(sstebz,SSTEBZ)(const char *range,
     }
 
     if (*info != 0) {
-	i__1 = -(*info);
 	return;
     }
 
@@ -28931,7 +28698,7 @@ PLUMED_BLAS_F77_FUNC(sstebz,SSTEBZ)(const char *range,
 	d__1 = e[j - 1];
 	tmp1 = d__1 * d__1;
 	d__2 = ulp;
-	if (fabs(d__[j] * d__[j - 1]) * (d__2 * d__2) + safemn 
+	if (std::abs(d__[j] * d__[j - 1]) * (d__2 * d__2) + safemn 
 		> tmp1) {
 	    isplit[*nsplit] = j - 1;
 	    ++(*nsplit);
@@ -28952,7 +28719,7 @@ PLUMED_BLAS_F77_FUNC(sstebz,SSTEBZ)(const char *range,
 
 	i__1 = *n - 1;
 	for (j = 1; j <= i__1; ++j) {
-	    tmp2 = sqrt(work[j]);
+	    tmp2 =  std::sqrt(work[j]);
 	    d__1 = gu, d__2 = d__[j] + tmp1 + tmp2;
 	    gu = (d__1>d__2) ? d__1 : d__2;
 	    d__1 = gl, d__2 = d__[j] - tmp1 - tmp2;
@@ -28964,13 +28731,13 @@ PLUMED_BLAS_F77_FUNC(sstebz,SSTEBZ)(const char *range,
 	gu = (d__1>d__2) ? d__1 : d__2;
 	d__1 = gl, d__2 = d__[*n] - tmp1;
 	gl = (d__1<d__2) ? d__1 : d__2;
-	d__1 = fabs(gl);
-	d__2 = fabs(gu);
+	d__1 = std::abs(gl);
+	d__2 = std::abs(gu);
 	tnorm = (d__1>d__2) ? d__1 : d__2;
 	gl = gl - tnorm * 2. * ulp * *n - pivmin * 4.;
 	gu = gu + tnorm * 2. * ulp * *n + pivmin * 2.;
 
-	itmax = (int) ((log(tnorm + pivmin) - log(pivmin)) / log(2.)) + 2;
+	itmax = (int) ((std::log(tnorm + pivmin) - std::log(pivmin)) / std::log(2.)) + 2;
 	if (*abstol <= 0.) {
 	    atoli = ulp * tnorm;
 	} else {
@@ -29020,14 +28787,14 @@ PLUMED_BLAS_F77_FUNC(sstebz,SSTEBZ)(const char *range,
       /* avoid warnings for high gcc optimization */
       wlu = wul = 1.0;
 
-	d__3 = fabs(d__[1]) + fabs(e[1]);
-	d__4 = fabs(d__[*n]) + fabs(e[*n - 1]);
+	d__3 = std::abs(d__[1]) + std::abs(e[1]);
+	d__4 = std::abs(d__[*n]) + std::abs(e[*n - 1]);
 	tnorm = (d__3>d__4) ? d__3 : d__4;
 
 	i__1 = *n - 1;
 	for (j = 2; j <= i__1; ++j) {
 	    d__4 = tnorm;
-	    d__5 = fabs(d__[j]) + fabs(e[j - 1]) + fabs(e[j]);
+	    d__5 = std::abs(d__[j]) + std::abs(e[j - 1]) + std::abs(e[j]);
 	    tnorm = (d__4>d__5) ? d__4 : d__5;
 	}
 
@@ -29080,7 +28847,7 @@ PLUMED_BLAS_F77_FUNC(sstebz,SSTEBZ)(const char *range,
 
 	    i__2 = iend - 1;
 	    for (j = ibegin; j <= i__2; ++j) {
-		tmp2 = fabs(e[j]);
+		tmp2 = std::abs(e[j]);
 		d__1 = gu, d__2 = d__[j] + tmp1 + tmp2;
 		gu = (d__1>d__2) ? d__1 : d__2;
 		d__1 = gl, d__2 = d__[j] - tmp1 - tmp2;
@@ -29092,15 +28859,15 @@ PLUMED_BLAS_F77_FUNC(sstebz,SSTEBZ)(const char *range,
 	    gu = (d__1>d__2) ? d__1 : d__2;
 	    d__1 = gl, d__2 = d__[iend] - tmp1;
 	    gl = (d__1<d__2) ? d__1 : d__2;
-	    d__1 = fabs(gl);
-	    d__2 = fabs(gu);
+	    d__1 = std::abs(gl);
+	    d__2 = std::abs(gu);
 	    bnorm = (d__1>d__2) ? d__1 : d__2;
 	    gl = gl - bnorm * 2. * ulp * in - pivmin * 2.;
 	    gu = gu + bnorm * 2. * ulp * in + pivmin * 2.;
 
 	    if (*abstol <= 0.) {
-		d__1 = fabs(gl);
-		d__2 = fabs(gu);
+		d__1 = std::abs(gl);
+		d__2 = std::abs(gu);
 		atoli = ulp * ((d__1>d__2) ? d__1 : d__2);
 	    } else {
 		atoli = *abstol;
@@ -29263,7 +29030,7 @@ PLUMED_BLAS_F77_FUNC(sstebz,SSTEBZ)(const char *range,
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "blas/blas.h"
 #include "lapack.h"
 #include "lapack_limits.h"
@@ -29397,8 +29164,8 @@ PLUMED_BLAS_F77_FUNC(sstegr,SSTEGR)(const char *jobz,
     eps = PLUMED_GMX_FLOAT_EPS;
     smlnum = safmin / eps;
     bignum = 1. / smlnum;
-    rmin = sqrt(smlnum);
-    d__1 = sqrt(bignum), d__2 = 1. / sqrt(sqrt(safmin));
+    rmin =  std::sqrt(smlnum);
+    d__1 =  std::sqrt(bignum), d__2 = 1. / std::sqrt(sqrt(safmin));
     rmax = (d__1<d__2) ? d__1 : d__2;
     scale = 1.;
     tnrm = PLUMED_BLAS_F77_FUNC(slanst,SLANST)("M", n, &d__[1], &e[1]);
@@ -29407,7 +29174,7 @@ PLUMED_BLAS_F77_FUNC(sstegr,SSTEGR)(const char *jobz,
     } else if (tnrm > rmax) {
 	scale = rmax / tnrm;
     }
-    if ( fabs(scale-1.0)>PLUMED_GMX_FLOAT_EPS) {
+    if ( std::abs(scale-1.0)>PLUMED_GMX_FLOAT_EPS) {
 	PLUMED_BLAS_F77_FUNC(sscal,SSCAL)(n, &scale, &d__[1], &c__1);
 	i__1 = *n - 1;
 	PLUMED_BLAS_F77_FUNC(sscal,SSCAL)(&i__1, &scale, &e[1], &c__1);
@@ -29449,7 +29216,7 @@ PLUMED_BLAS_F77_FUNC(sstegr,SSTEGR)(const char *jobz,
 	w[j] += e[iwork[iinspl + itmp - 1]];
     } 
 
-    if (fabs(scale-1.0)>PLUMED_GMX_FLOAT_EPS) {
+    if (std::abs(scale-1.0)>PLUMED_GMX_FLOAT_EPS) {
 	d__1 = 1. / scale;
 	PLUMED_BLAS_F77_FUNC(sscal,SSCAL)(m, &d__1, &w[1], &c__1);
     }
@@ -29489,7 +29256,7 @@ PLUMED_BLAS_F77_FUNC(sstegr,SSTEGR)(const char *jobz,
 } 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "blas/blas.h"
 #include "lapack.h"
 #include "lapack_limits.h"
@@ -29576,7 +29343,6 @@ PLUMED_BLAS_F77_FUNC(sstein,SSTEIN)(int *n,
     }
 
     if (*info != 0) {
-	i__1 = -(*info);
 	return;
     }
 
@@ -29615,19 +29381,19 @@ PLUMED_BLAS_F77_FUNC(sstein,SSTEIN)(int *n,
 	}
 	gpind = b1;
 
-	onenrm = fabs(d__[b1]) + fabs(e[b1]);
+	onenrm = std::abs(d__[b1]) + std::abs(e[b1]);
 	d__3 = onenrm;
-	d__4 = fabs(d__[bn]) + fabs(e[bn - 1]);
+	d__4 = std::abs(d__[bn]) + std::abs(e[bn - 1]);
 	onenrm = (d__3>d__4) ? d__3 : d__4;
 	i__2 = bn - 1;
 	for (i__ = b1 + 1; i__ <= i__2; ++i__) {
 	  d__4 = onenrm;
-	  d__5 = fabs(d__[i__]) + fabs(e[i__ - 1]) + fabs(e[i__]);
+	  d__5 = std::abs(d__[i__]) + std::abs(e[i__ - 1]) + std::abs(e[i__]);
 	    onenrm = (d__4>d__5) ? d__4 : d__5;
 	}
 	ortol = onenrm * .001;
 
-	dtpcrt = sqrt(.1 / blksiz);
+	dtpcrt =  std::sqrt(.1 / blksiz);
 
 	jblk = 0;
 	i__2 = *m;
@@ -29645,7 +29411,7 @@ PLUMED_BLAS_F77_FUNC(sstein,SSTEIN)(int *n,
 	    }
 
 	    if (jblk > 1) {
-		eps1 = fabs(eps * xj);
+		eps1 = std::abs(eps * xj);
 		pertol = eps1 * 10.;
 		sep = xj - xjm;
 		if (sep < pertol) {
@@ -29675,7 +29441,7 @@ L70:
 	    }
 
 	    d__2 = eps;
-	    d__3 = fabs(work[indrv4 + blksiz]);
+	    d__3 = std::abs(work[indrv4 + blksiz]);
 	    scl = blksiz * onenrm * ((d__2>d__3) ? d__2 : d__3) / PLUMED_BLAS_F77_FUNC(sasum,SASUM)(&blksiz, &work[
 		    indrv1 + 1], &c__1);
 	    PLUMED_BLAS_F77_FUNC(sscal,SSCAL)(&blksiz, &scl, &work[indrv1 + 1], &c__1);
@@ -29687,7 +29453,7 @@ L70:
 	    if (jblk == 1) {
 		goto L90;
 	    }
-	    if (fabs(xj - xjm) > ortol) {
+	    if (std::abs(xj - xjm) > ortol) {
 		gpind = j;
 	    }
 	    if (gpind != j) {
@@ -29702,7 +29468,7 @@ L70:
 
 L90:
 	    jmax = PLUMED_BLAS_F77_FUNC(isamax,ISAMAX)(&blksiz, &work[indrv1 + 1], &c__1);
-	    nrm = fabs(work[indrv1 + jmax]);
+	    nrm = std::abs(work[indrv1 + jmax]);
 
 	    if (nrm < dtpcrt) {
 		goto L70;
@@ -29746,7 +29512,7 @@ L120:
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "real.h"
 
 #include "blas/blas.h"
@@ -29842,8 +29608,8 @@ PLUMED_BLAS_F77_FUNC(ssteqr,SSTEQR)(const char *    compz,
     safmin = minval*(1.0+PLUMED_GMX_FLOAT_EPS);
 
     safmax = 1. / safmin;
-    ssfmax = sqrt(safmax) / 3.;
-    ssfmin = sqrt(safmin) / eps2;
+    ssfmax =  std::sqrt(safmax) / 3.;
+    ssfmin =  std::sqrt(safmin) / eps2;
 
     if (icompz == 2) {
 	PLUMED_BLAS_F77_FUNC(slaset,SLASET)("Full", n, n, &c_b9, &c_b10, &z__[z_offset], ldz);
@@ -29865,11 +29631,11 @@ L10:
     if (l1 <= nm1) {
 	i__1 = nm1;
 	for (m = l1; m <= i__1; ++m) {
-	    tst = fabs(e[m]);
-	    if (fabs(tst)<PLUMED_GMX_FLOAT_MIN) {
+	    tst = std::abs(e[m]);
+	    if (std::abs(tst)<PLUMED_GMX_FLOAT_MIN) {
 		goto L30;
 	    }
-	    if (tst <= sqrt(fabs(d__[m])) * sqrt(fabs(d__[m + 1])) * eps) {
+	    if (tst <=  std::sqrt(std::abs(d__[m])) * std::sqrt(std::abs(d__[m + 1])) * eps) {
 		e[m] = 0.;
 		goto L30;
 	    }
@@ -29890,7 +29656,7 @@ L30:
     i__1 = lend - l + 1;
     anorm = PLUMED_BLAS_F77_FUNC(slanst,SLANST)("I", &i__1, &d__[l], &e[l]);
     iscale = 0;
-    if (fabs(anorm)<PLUMED_GMX_FLOAT_MIN) {
+    if (std::abs(anorm)<PLUMED_GMX_FLOAT_MIN) {
 	goto L10;
     }
     if (anorm > ssfmax) {
@@ -29911,7 +29677,7 @@ L30:
 		info);
     }
 
-    if (fabs(d__[lend]) < fabs(d__[l])) {
+    if (std::abs(d__[lend]) < std::abs(d__[l])) {
 	lend = lsv;
 	l = lendsv;
     }
@@ -29923,9 +29689,9 @@ L40:
 	    lendm1 = lend - 1;
 	    i__1 = lendm1;
 	    for (m = l; m <= i__1; ++m) {
-  	        d__2 = fabs(e[m]);
+  	        d__2 = std::abs(e[m]);
 		tst = d__2 * d__2;
-		if (tst <= eps2 * fabs(d__[m]) * fabs(d__[m+ 1]) + safmin) {
+		if (tst <= eps2 * std::abs(d__[m]) * std::abs(d__[m+ 1]) + safmin) {
 		    goto L60;
 		}
 	    }
@@ -30022,9 +29788,9 @@ L90:
 	    lendp1 = lend + 1;
 	    i__1 = lendp1;
 	    for (m = l; m >= i__1; --m) {
-		d__2 = fabs(e[m - 1]);
+		d__2 = std::abs(e[m - 1]);
 		tst = d__2 * d__2;
-		if (tst <= eps2 * fabs(d__[m]) * fabs(d__[m- 1]) + safmin) {
+		if (tst <= eps2 * std::abs(d__[m]) * std::abs(d__[m- 1]) + safmin) {
 		    goto L110;
 		}
 	    }
@@ -30138,7 +29904,7 @@ L140:
     }
     i__1 = *n - 1;
     for (i__ = 1; i__ <= i__1; ++i__) {
-	if (fabs(e[i__])>PLUMED_GMX_FLOAT_MIN) {
+	if (std::abs(e[i__])>PLUMED_GMX_FLOAT_MIN) {
 	    ++(*info);
 	}
     }
@@ -30179,7 +29945,7 @@ L190:
 
 }
 }
-#include <math.h>
+#include <cmath>
 #include "lapack.h"
 #include "lapack_limits.h"
 
@@ -30237,8 +30003,8 @@ PLUMED_BLAS_F77_FUNC(ssterf,SSTERF)(int *n,
     d__1 = eps;
     eps2 = d__1 * d__1;
     safmax = 1. / safmin;
-    ssfmax = sqrt(safmax) / 3.;
-    ssfmin = sqrt(safmin) / eps2;
+    ssfmax =  std::sqrt(safmax) / 3.;
+    ssfmin =  std::sqrt(safmin) / eps2;
 
     nmaxit = *n * 30;
     sigma = 0.;
@@ -30256,8 +30022,8 @@ L10:
     }
     i__1 = *n - 1;
     for (m = l1; m <= i__1; ++m) {
-	if (fabs(e[m]) <= sqrt(fabs(d__[m])) * 
-		sqrt(fabs(d__[m + 1])) * eps) {
+	if (std::abs(e[m]) <=  std::sqrt(std::abs(d__[m])) * 
+		 std::sqrt(std::abs(d__[m + 1])) * eps) {
 	    e[m] = 0.;
 	    goto L30;
 	}
@@ -30301,7 +30067,7 @@ L30:
 	e[i__] = d__1 * d__1;
     }
 
-    if (fabs(d__[lend]) < fabs(d__[l])) {
+    if (std::abs(d__[lend]) < std::abs(d__[l])) {
 	lend = lsv;
 	l = lendsv;
     }
@@ -30312,7 +30078,7 @@ L50:
 	if (l != lend) {
 	    i__1 = lend - 1;
 	    for (m = l; m <= i__1; ++m) {
-		if (fabs(e[m]) <= eps2 * fabs(d__[m] * d__[m + 1])) {
+		if (std::abs(e[m]) <= eps2 * std::abs(d__[m] * d__[m + 1])) {
 		    goto L70;
 		}
 	    }
@@ -30328,7 +30094,7 @@ L70:
 	    goto L90;
 	}
 	if (m == l + 1) {
-	    rte = sqrt(e[l]);
+	    rte =  std::sqrt(e[l]);
 	    PLUMED_BLAS_F77_FUNC(slae2,SLAE2)(&d__[l], &rte, &d__[l + 1], &rt1, &rt2);
 	    d__[l] = rt1;
 	    d__[l + 1] = rt2;
@@ -30345,7 +30111,7 @@ L70:
 	}
 	++jtot;
 
-	rte = sqrt(e[l]);
+	rte =  std::sqrt(e[l]);
 	sigma = (d__[l + 1] - p) / (rte * 2.);
 	r__ = PLUMED_BLAS_F77_FUNC(slapy2,SLAPY2)(&sigma, &c_b32);
 	sigma = p - rte / (sigma + ( (sigma>0) ? r__ : -r__));
@@ -30369,7 +30135,7 @@ L70:
 	    alpha = d__[i__];
 	    gamma = c__ * (alpha - sigma) - s * oldgam;
 	    d__[i__ + 1] = oldgam + (alpha - gamma);
-	    if (fabs(c__)>PLUMED_GMX_FLOAT_MIN) {
+	    if (std::abs(c__)>PLUMED_GMX_FLOAT_MIN) {
 		p = gamma * gamma / c__;
 	    } else {
 		p = oldc * bb;
@@ -30394,7 +30160,7 @@ L90:
 L100:
 	i__1 = lend + 1;
 	for (m = l; m >= i__1; --m) {
-	    if (fabs(e[m - 1]) <= eps2 * fabs(d__[m] * d__[m - 1])) {
+	    if (std::abs(e[m - 1]) <= eps2 * std::abs(d__[m] * d__[m - 1])) {
 		goto L120;
 	    }
 	}
@@ -30410,7 +30176,7 @@ L120:
 	}
 
 	if (m == l - 1) {
-	    rte = sqrt(e[l - 1]);
+	    rte =  std::sqrt(e[l - 1]);
 	    PLUMED_BLAS_F77_FUNC(slae2,SLAE2)(&d__[l], &rte, &d__[l - 1], &rt1, &rt2);
 	    d__[l] = rt1;
 	    d__[l - 1] = rt2;
@@ -30427,7 +30193,7 @@ L120:
 	}
 	++jtot;
 
-	rte = sqrt(e[l - 1]);
+	rte =  std::sqrt(e[l - 1]);
 	sigma = (d__[l - 1] - p) / (rte * 2.);
 	r__ = PLUMED_BLAS_F77_FUNC(slapy2,SLAPY2)(&sigma, &c_b32);
 	sigma = p - rte / (sigma + ( (sigma>0) ? r__ : -r__));
@@ -30451,7 +30217,7 @@ L120:
 	    alpha = d__[i__ + 1];
 	    gamma = c__ * (alpha - sigma) - s * oldgam;
 	    d__[i__] = oldgam + (alpha - gamma);
-	    if (fabs(c__)>PLUMED_GMX_FLOAT_MIN) {
+	    if (std::abs(c__)>PLUMED_GMX_FLOAT_MIN) {
 		p = gamma * gamma / c__;
 	    } else {
 		p = oldc * bb;
@@ -30490,7 +30256,7 @@ L150:
     }
     i__1 = *n - 1;
     for (i__ = 1; i__ <= i__1; ++i__) {
-	if (fabs(e[i__])>PLUMED_GMX_FLOAT_MIN) {
+	if (std::abs(e[i__])>PLUMED_GMX_FLOAT_MIN) {
 	    ++(*info);
 	}
     }
@@ -30549,7 +30315,7 @@ PLUMED_BLAS_F77_FUNC(sstevr,SSTEVR)(const char *jobz,
 
 }
 }
-#include <math.h>
+#include <cmath>
 
 #include "real.h"
 
@@ -30575,7 +30341,7 @@ PLUMED_BLAS_F77_FUNC(ssyevr,SSYEVR)(const char *jobz, const char *range, const c
     /* Local variables */
     int c__1 = 1;
     int i__, j, nb, jj;
-    float eps, vll, vuu, tmp1;
+    float eps, tmp1;
     int indd, inde;
     float anrm;
     int imax;
@@ -30587,10 +30353,10 @@ PLUMED_BLAS_F77_FUNC(ssyevr,SSYEVR)(const char *jobz, const char *range, const c
     int lwmin;
     int lower, wantz;
     int alleig, indeig;
-    int iscale, ieeeok, indibl, indifl;
+    int iscale, indibl, indifl;
     int valeig;
     float safmin,minval;
-    float abstll, bignum;
+    float bignum;
     int indtau;
     int indwkn;
     int liwmin;
@@ -30598,10 +30364,6 @@ PLUMED_BLAS_F77_FUNC(ssyevr,SSYEVR)(const char *jobz, const char *range, const c
     float smlnum;
     int lwkopt;
     int lquery;
-    float posinf,neginf,negzro,newzro;
-    float fzero = 0.0;
-    float fone = 1.0;
-
     
     /* Parameter adjustments */
     a_dim1 = *lda;
@@ -30615,33 +30377,6 @@ PLUMED_BLAS_F77_FUNC(ssyevr,SSYEVR)(const char *jobz, const char *range, const c
     --work;
     --iwork;
 
-    /* Check for IEEE-compliant FP */
-    ieeeok = 1;
-    posinf = fone/fzero;
-    if(posinf<=1.0)
-      ieeeok = 0;
-    neginf = -fone/fzero;
-    if(neginf>=0.0)
-      ieeeok = 0;
-    negzro = fone/(neginf+fone);
-    if(negzro!=0)
-      ieeeok = 0;
-    neginf = fone/negzro;
-    if(neginf>=0)
-      ieeeok = 0;
-    newzro = negzro + fzero;
-    if(newzro!=fzero)
-      ieeeok = 0;
-    posinf = fone /newzro;
-    if(posinf<=fone)
-      ieeeok = 0;
-    neginf = neginf*posinf;
-    if(neginf>=fzero)
-      ieeeok = 0;
-    posinf = posinf*posinf;
-    if(posinf<=1.0)
-      ieeeok = 0;
-
     lower = (*uplo=='L' || *uplo=='l');
     wantz = (*jobz=='V' || *jobz=='v');
     alleig = (*range=='A' || *range=='a');
@@ -30739,15 +30474,12 @@ PLUMED_BLAS_F77_FUNC(ssyevr,SSYEVR)(const char *jobz, const char *range, const c
 
     smlnum = safmin / eps;
     bignum = 1. / smlnum;
-    rmin = sqrt(smlnum);
+    rmin =  std::sqrt(smlnum);
 
-    d__1 = sqrt(bignum), d__2 = 1. / sqrt(sqrt(safmin));
+    d__1 =  std::sqrt(bignum), d__2 = 1. / std::sqrt(sqrt(safmin));
     rmax = (d__1<d__2) ? d__1 : d__2;
 
     iscale = 0;
-    abstll = *abstol;
-    vll = *vl;
-    vuu = *vu;
     anrm = PLUMED_BLAS_F77_FUNC(slansy,SLANSY)("M", uplo, n, &a[a_offset], lda, &work[1]);
     if (anrm > 0. && anrm < rmin) {
 	iscale = 1;
@@ -30770,13 +30502,6 @@ PLUMED_BLAS_F77_FUNC(ssyevr,SSYEVR)(const char *jobz, const char *range, const c
 
 	    }
 	}
-	if (*abstol > 0.) {
-	    abstll = *abstol * sigma;
-	}
-	if (valeig) {
-	    vll = *vl * sigma;
-	    vuu = *vu * sigma;
-	}
     }
 
     indtau = 1;
@@ -30850,8 +30575,8 @@ PLUMED_BLAS_F77_FUNC(ssyevr,SSYEVR)(const char *jobz, const char *range, const c
 }
 }
 }
-#include <ctype.h>
-#include <math.h>
+#include <cctype>
+#include <cmath>
 
 #include "real.h"
 
@@ -30875,7 +30600,7 @@ PLUMED_BLAS_F77_FUNC(ssytd2,SSYTD2)(const char *    uplo,
   float minusone,zero;
   float taui,alpha,tmp;
   int ti1,ti2,ti3,i;
-  const char ch=toupper(*uplo);
+  const char ch=std::toupper(*uplo);
 
   zero = 0.0;
   minusone = -1.0;
@@ -30889,7 +30614,7 @@ PLUMED_BLAS_F77_FUNC(ssytd2,SSYTD2)(const char *    uplo,
       ti1 = 1;
       PLUMED_BLAS_F77_FUNC(slarfg,SLARFG)(&i,&(a[i*(*lda)+(i-1)]),&(a[i*(*lda)+0]),&ti1,&taui);
       e[i-1] = a[i*(*lda) + (i-1)];
-      if(fabs(taui)>PLUMED_GMX_FLOAT_MIN) {
+      if(std::abs(taui)>PLUMED_GMX_FLOAT_MIN) {
 	a[i*(*lda)+(i-1)] = 1.0;
       
 	ti1 = 1;
@@ -30923,7 +30648,7 @@ PLUMED_BLAS_F77_FUNC(ssytd2,SSYTD2)(const char *    uplo,
 
       e[i-1] = a[(i-1)*(*lda) + (i)];
 
-      if(fabs(taui)>PLUMED_GMX_FLOAT_MIN) {
+      if(std::abs(taui)>PLUMED_GMX_FLOAT_MIN) {
 	a[(i-1)*(*lda)+(i)] = 1.0;
       
 	ti1 = *n - i;
@@ -31020,7 +30745,6 @@ PLUMED_BLAS_F77_FUNC(ssytrd,SSYTRD)(const char *uplo, int *n, float *a, int *
     }
 
     nx = *n;
-    iws = 1;
     if (nb > 1 && nb < *n) {
 
 	nx = DSYTRD_CROSSOVER;
@@ -31187,7 +30911,7 @@ PLUMED_BLAS_F77_FUNC(strti2,STRTI2)(const char *uplo,
 }
 }
 }
-#include <math.h>
+#include <cmath>
 #include "blas/blas.h"
 #include "lapack.h"
 #include "lapack_limits.h"
@@ -31234,7 +30958,7 @@ PLUMED_BLAS_F77_FUNC(strtri,STRTRI)(const char *uplo,
     if (nounit) {
 	i__1 = *n;
 	for (*info = 1; *info <= i__1; ++(*info)) {
-	    if (fabs(a[*info + *info * a_dim1])<PLUMED_GMX_FLOAT_MIN) {
+	    if (std::abs(a[*info + *info * a_dim1])<PLUMED_GMX_FLOAT_MIN) {
 		return;
 	    }
 	}