Merge branch 'master' into pygromacs
[alexxy/gromacs.git] / src / gromacs / gmxana / gmx_disre.cpp
similarity index 92%
rename from src/gromacs/gmxana/gmx_disre.c
rename to src/gromacs/gmxana/gmx_disre.cpp
index bfe6cfdbeb28c36be7436947984ccda4a47c2b15..4152803d30ccdd761958aab798ef739f26a94c9a 100644 (file)
  */
 #include "gmxpre.h"
 
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
+#include <cmath>
+#include <cstdlib>
+#include <cstring>
+
+#include <algorithm>
 
 #include "gromacs/commandline/pargs.h"
 #include "gromacs/fileio/confio.h"
@@ -110,7 +112,7 @@ int tpcomp(const void *a, const void *b)
     tpa = (t_toppop *)a;
     tpb = (t_toppop *)b;
 
-    return  (1e7*(tpb->v-tpa->v));
+    return static_cast<int>(1e7*(tpb->v-tpa->v));
 }
 
 static void add5(int ndr, real viol)
@@ -159,7 +161,7 @@ static void check_viol(FILE *log,
 {
     t_iatom         *forceatoms;
     int              i, j, nat, n, type, nviol, ndr, label;
-    real             ener, rt, mviol, tviol, viol, lam, dvdl, drt;
+    real             rt, mviol, tviol, viol, lam, dvdl, drt;
     rvec            *fshift;
     static  gmx_bool bFirst = TRUE;
 
@@ -208,17 +210,17 @@ static void check_viol(FILE *log,
             gmx_fatal(FARGS, "ndr = %d, rt_6 = %f", ndr, fcd->disres.Rt_6[0]);
         }
 
-        rt = pow(fcd->disres.Rt_6[0], -1.0/6.0);
+        rt = std::pow(fcd->disres.Rt_6[0], static_cast<real>(-1.0/6.0));
         dr[clust_id].aver1[ndr]  += rt;
         dr[clust_id].aver2[ndr]  += sqr(rt);
-        drt = pow(rt, -3.0);
+        drt = std::pow(rt, static_cast<real>(-3.0));
         dr[clust_id].aver_3[ndr] += drt;
         dr[clust_id].aver_6[ndr] += fcd->disres.Rt_6[0];
 
         snew(fshift, SHIFTS);
-        ener = interaction_function[F_DISRES].ifunc(n, &forceatoms[i], forceparams,
-                                                    (const rvec*)x, f, fshift,
-                                                    pbc, g, lam, &dvdl, NULL, fcd, NULL);
+        interaction_function[F_DISRES].ifunc(n, &forceatoms[i], forceparams,
+                                             (const rvec*)x, f, fshift,
+                                             pbc, g, lam, &dvdl, NULL, fcd, NULL);
         sfree(fshift);
         viol = fcd->disres.sumviol;
 
@@ -238,7 +240,7 @@ static void check_viol(FILE *log,
             {
                 if (index[j] == forceparams[type].disres.label)
                 {
-                    vvindex[j] = pow(fcd->disres.Rt_6[0], -1.0/6.0);
+                    vvindex[j] = std::pow(fcd->disres.Rt_6[0], static_cast<real>(-1.0/6.0));
                 }
             }
         }
@@ -325,7 +327,7 @@ static void dump_dump(FILE *log, int ndr, t_dr_stats drs[])
                         default:
                             gmx_incons("Dumping violations");
                     }
-                    viol_max     = max(viol_max, viol);
+                    viol_max     = std::max(viol_max, viol);
                     if (viol > 0)
                     {
                         nviol++;
@@ -408,11 +410,11 @@ static void dump_stats(FILE *log, int nsteps, int ndr, t_ilist *disres,
         drs[i].bCore  = is_core(i, isize, index);
         drs[i].up1    = ip[disres->iatoms[j]].disres.up1;
         drs[i].r      = dr->aver1[i]/nsteps;
-        drs[i].rT3    = pow(dr->aver_3[i]/nsteps, -1.0/3.0);
-        drs[i].rT6    = pow(dr->aver_6[i]/nsteps, -1.0/6.0);
-        drs[i].viol   = max(0, drs[i].r-drs[i].up1);
-        drs[i].violT3 = max(0, drs[i].rT3-drs[i].up1);
-        drs[i].violT6 = max(0, drs[i].rT6-drs[i].up1);
+        drs[i].rT3    = std::pow(dr->aver_3[i]/nsteps, static_cast<real>(-1.0/3.0));
+        drs[i].rT6    = std::pow(dr->aver_6[i]/nsteps, static_cast<real>(-1.0/6.0));
+        drs[i].viol   = std::max(0.0, static_cast<double>(drs[i].r-drs[i].up1));
+        drs[i].violT3 = std::max(0.0, static_cast<double>(drs[i].rT3-drs[i].up1));
+        drs[i].violT6 = std::max(0.0, static_cast<double>(drs[i].rT6-drs[i].up1));
         if (atoms)
         {
             int j1 = disres->iatoms[j+1];
@@ -484,19 +486,19 @@ static void dump_clust_stats(FILE *fp, int ndr, t_ilist *disres,
             {
                 gmx_fatal(FARGS, "dr[%d].aver_3[%d] = %f", k, i, dr[k].aver_3[i]);
             }
-            drs[i].rT3    = pow(dr[k].aver_3[i]/dr[k].nframes, -1.0/3.0);
-            drs[i].rT6    = pow(dr[k].aver_6[i]/dr[k].nframes, -1.0/6.0);
-            drs[i].viol   = max(0, drs[i].r-drs[i].up1);
-            drs[i].violT3 = max(0, drs[i].rT3-drs[i].up1);
-            drs[i].violT6 = max(0, drs[i].rT6-drs[i].up1);
+            drs[i].rT3    = std::pow(dr[k].aver_3[i]/dr[k].nframes, static_cast<real>(-1.0/3.0));
+            drs[i].rT6    = std::pow(dr[k].aver_6[i]/dr[k].nframes, static_cast<real>(-1.0/6.0));
+            drs[i].viol   = std::max(0.0, static_cast<double>(drs[i].r-drs[i].up1));
+            drs[i].violT3 = std::max(0.0, static_cast<double>(drs[i].rT3-drs[i].up1));
+            drs[i].violT6 = std::max(0.0, static_cast<double>(drs[i].rT6-drs[i].up1));
             sumV         += drs[i].viol;
             sumVT3       += drs[i].violT3;
             sumVT6       += drs[i].violT6;
-            maxV          = max(maxV, drs[i].viol);
-            maxVT3        = max(maxVT3, drs[i].violT3);
-            maxVT6        = max(maxVT6, drs[i].violT6);
+            maxV          = std::max(maxV, static_cast<double>(drs[i].viol));
+            maxVT3        = std::max(maxVT3, static_cast<double>(drs[i].violT3));
+            maxVT6        = std::max(maxVT6, static_cast<double>(drs[i].violT6));
         }
-        if (strcmp(clust_name[k], "1000") == 0)
+        if (std::strcmp(clust_name[k], "1000") == 0)
         {
             mmm++;
         }
@@ -530,7 +532,7 @@ static void dump_disre_matrix(const char *fn, t_dr_result *dr, int ndr,
     int       *resnr;
     int        n_res, a_offset, mb, mol, a;
     t_atoms   *atoms;
-    int        iii, i, j, nra, nratoms, tp, ri, rj, index, nlabel, label;
+    int        i, j, nra, nratoms, tp, ri, rj, index, nlabel, label;
     atom_id    ai, aj, *ptr;
     real     **matrix, *t_res, hi, *w_dr, rav, rviol;
     t_rgb      rlo = { 1, 1, 1 };
@@ -615,7 +617,7 @@ static void dump_disre_matrix(const char *fn, t_dr_result *dr, int ndr,
             rj = resnr[aj];
             if (bThird)
             {
-                rav = pow(dr->aver_3[i]/nsteps, -1.0/3.0);
+                rav = std::pow(dr->aver_3[i]/nsteps, static_cast<real>(-1.0/3.0));
             }
             else
             {
@@ -625,11 +627,11 @@ static void dump_disre_matrix(const char *fn, t_dr_result *dr, int ndr,
             {
                 fprintf(debug, "DR %d, atoms %d, %d, distance %g\n", i, ai, aj, rav);
             }
-            rviol           = max(0, rav-idef->iparams[tp].disres.up1);
+            rviol           = std::max(static_cast<real>(0.0), rav-idef->iparams[tp].disres.up1);
             matrix[ri][rj] += w_dr[i]*rviol;
             matrix[rj][ri] += w_dr[i]*rviol;
-            hi              = max(hi, matrix[ri][rj]);
-            hi              = max(hi, matrix[rj][ri]);
+            hi              = std::max(hi, matrix[ri][rj]);
+            hi              = std::max(hi, matrix[rj][ri]);
         }
     }