Code beautification with uncrustify
[alexxy/gromacs.git] / src / tools / gmx_polystat.c
index f0314bb0e35f7f4abab1c000dfa3f0107a33b256..cfbaa2a8abfe66bfe0d9c41b07472495d35709e6 100644 (file)
@@ -1,11 +1,11 @@
 /*
- * 
+ *
  *                This source code is part of
- * 
+ *
  *                 G   R   O   M   A   C   S
- * 
+ *
  *          GROningen MAchine for Chemical Simulations
- * 
+ *
  *                        VERSION 3.2.0
  * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
  * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2
  * of the License, or (at your option) any later version.
- * 
+ *
  * If you want to redistribute modifications, please consider that
  * scientific software is very special. Version control is crucial -
  * bugs must be traceable. We will be happy to consider code for
  * inclusion in the official distribution, but derived work must not
  * be called official GROMACS. Details are found in the README & COPYING
  * files - if they are missing, get the official version at www.gromacs.org.
- * 
+ *
  * To help us fund GROMACS development, we humbly ask that you cite
  * the papers on the package - you can find them in the top README file.
- * 
+ *
  * For more info, check our website at http://www.gromacs.org
- * 
+ *
  * And Hey:
  * Green Red Orange Magenta Azure Cyan Skyblue
  */
 #include "gmx_ana.h"
 
 
-static void gyro_eigen(double **gyr,double *eig,double **eigv,int *ord)
+static void gyro_eigen(double **gyr, double *eig, double **eigv, int *ord)
 {
-  int nrot,d;
-
-  jacobi(gyr,DIM,eig,eigv,&nrot);
-  /* Order the eigenvalues */
-  ord[0] = 0;
-  ord[2] = 2;
-  for(d=0; d<DIM; d++) {
-    if (eig[d] > eig[ord[0]])
-      ord[0] = d;
-    if (eig[d] < eig[ord[2]])
-      ord[2] = d;
-  }
-  for(d=0; d<DIM; d++) {
-    if (ord[0] != d && ord[2] != d)
-      ord[1] = d;
-  }
+    int nrot, d;
+
+    jacobi(gyr, DIM, eig, eigv, &nrot);
+    /* Order the eigenvalues */
+    ord[0] = 0;
+    ord[2] = 2;
+    for (d = 0; d < DIM; d++)
+    {
+        if (eig[d] > eig[ord[0]])
+        {
+            ord[0] = d;
+        }
+        if (eig[d] < eig[ord[2]])
+        {
+            ord[2] = d;
+        }
+    }
+    for (d = 0; d < DIM; d++)
+    {
+        if (ord[0] != d && ord[2] != d)
+        {
+            ord[1] = d;
+        }
+    }
 }
 
 /* Calculate mean square internal distances (Auhl et al., JCP 119, 12718) */
 static void calc_int_dist(double *intd, rvec *x, int i0, int i1)
 {
-  int ii, jj;
-  const int ml = i1 - i0 + 1; /* Number of beads in molecule. */
-  int bd; /* Distance between beads */
-  double d;
-
-  for (bd = 1; bd < ml; bd++) {
-    d = 0.;
-    for (ii = i0; ii <= i1 - bd; ii++)
-      d += distance2(x[ii], x[ii+bd]);
-    d /= ml - bd;
-    intd[bd - 1] += d;
-  }
+    int       ii, jj;
+    const int ml = i1 - i0 + 1; /* Number of beads in molecule. */
+    int       bd;               /* Distance between beads */
+    double    d;
+
+    for (bd = 1; bd < ml; bd++)
+    {
+        d = 0.;
+        for (ii = i0; ii <= i1 - bd; ii++)
+        {
+            d += distance2(x[ii], x[ii+bd]);
+        }
+        d            /= ml - bd;
+        intd[bd - 1] += d;
+    }
 }
 
-int gmx_polystat(int argc,char *argv[])
+int gmx_polystat(int argc, char *argv[])
 {
-  const char *desc[] = {
-    "[TT]g_polystat[tt] plots static properties of polymers as a function of time",
-    "and prints the average.[PAR]",
-    "By default it determines the average end-to-end distance and radii",
-    "of gyration of polymers. It asks for an index group and split this",
-    "into molecules. The end-to-end distance is then determined using",
-    "the first and the last atom in the index group for each molecules.",
-    "For the radius of gyration the total and the three principal components",
-    "for the average gyration tensor are written.",
-    "With option [TT]-v[tt] the eigenvectors are written.",
-    "With option [TT]-pc[tt] also the average eigenvalues of the individual",
-    "gyration tensors are written.",
-    "With option [TT]-i[tt] the mean square internal distances are",
-    "written.[PAR]",
-    "With option [TT]-p[tt] the persistence length is determined.",
-    "The chosen index group should consist of atoms that are",
-    "consecutively bonded in the polymer mainchains.",
-    "The persistence length is then determined from the cosine of",
-    "the angles between bonds with an index difference that is even,",
-    "the odd pairs are not used, because straight polymer backbones",
-    "are usually all trans and therefore only every second bond aligns.",
-    "The persistence length is defined as number of bonds where",
-    "the average cos reaches a value of 1/e. This point is determined",
-    "by a linear interpolation of log(<cos>)."
-  };
-  static gmx_bool bMW = TRUE, bPC = FALSE;
-  t_pargs pa[] = {
-    { "-mw", FALSE, etBOOL, {&bMW},
-      "Use the mass weighting for radii of gyration" },
-    { "-pc", FALSE, etBOOL, {&bPC},
-      "Plot average eigenvalues" }
-  };
-
-  t_filenm   fnm[] = {
-    { efTPX, NULL, NULL,  ffREAD  },
-    { efTRX, "-f", NULL,  ffREAD  },
-    { efNDX, NULL, NULL,  ffOPTRD },
-    { efXVG, "-o", "polystat",  ffWRITE },
-    { efXVG, "-v", "polyvec", ffOPTWR },
-    { efXVG, "-p", "persist",  ffOPTWR },
-    { efXVG, "-i", "intdist", ffOPTWR }
-  };
+    const char     *desc[] = {
+        "[TT]g_polystat[tt] plots static properties of polymers as a function of time",
+        "and prints the average.[PAR]",
+        "By default it determines the average end-to-end distance and radii",
+        "of gyration of polymers. It asks for an index group and split this",
+        "into molecules. The end-to-end distance is then determined using",
+        "the first and the last atom in the index group for each molecules.",
+        "For the radius of gyration the total and the three principal components",
+        "for the average gyration tensor are written.",
+        "With option [TT]-v[tt] the eigenvectors are written.",
+        "With option [TT]-pc[tt] also the average eigenvalues of the individual",
+        "gyration tensors are written.",
+        "With option [TT]-i[tt] the mean square internal distances are",
+        "written.[PAR]",
+        "With option [TT]-p[tt] the persistence length is determined.",
+        "The chosen index group should consist of atoms that are",
+        "consecutively bonded in the polymer mainchains.",
+        "The persistence length is then determined from the cosine of",
+        "the angles between bonds with an index difference that is even,",
+        "the odd pairs are not used, because straight polymer backbones",
+        "are usually all trans and therefore only every second bond aligns.",
+        "The persistence length is defined as number of bonds where",
+        "the average cos reaches a value of 1/e. This point is determined",
+        "by a linear interpolation of log(<cos>)."
+    };
+    static gmx_bool bMW  = TRUE, bPC = FALSE;
+    t_pargs         pa[] = {
+        { "-mw", FALSE, etBOOL, {&bMW},
+          "Use the mass weighting for radii of gyration" },
+        { "-pc", FALSE, etBOOL, {&bPC},
+          "Plot average eigenvalues" }
+    };
+
+    t_filenm        fnm[] = {
+        { efTPX, NULL, NULL,  ffREAD  },
+        { efTRX, "-f", NULL,  ffREAD  },
+        { efNDX, NULL, NULL,  ffOPTRD },
+        { efXVG, "-o", "polystat",  ffWRITE },
+        { efXVG, "-v", "polyvec", ffOPTWR },
+        { efXVG, "-p", "persist",  ffOPTWR },
+        { efXVG, "-i", "intdist", ffOPTWR }
+    };
 #define NFILE asize(fnm)
 
-  t_topology *top;
-  output_env_t oenv;
-  int    ePBC;
-  int    isize,*index,nmol,*molind,mol,nat_min=0,nat_max=0;
-  char   *grpname;
-  t_trxstatus *status;
-  real   t;
-  rvec   *x,*bond=NULL;
-  matrix box;
-  int    natoms,i,j,frame,ind0,ind1,a,d,d2,ord[DIM]={0};
-  dvec   cm,sum_eig={0,0,0};
-  double **gyr,**gyr_all,eig[DIM],**eigv;
-  double sum_eed2,sum_eed2_tot,sum_gyro,sum_gyro_tot,sum_pers_tot;
-  int    *ninp=NULL;
-  double *sum_inp=NULL,pers;
-  double *intd, ymax, ymin;
-  double mmol,m;
-  char   title[STRLEN];
-  FILE   *out,*outv,*outp, *outi;
-  const char *leg[8] = { "end to end", "<R\\sg\\N>",
-                        "<R\\sg\\N> eig1", "<R\\sg\\N> eig2", "<R\\sg\\N> eig3",
-                        "<R\\sg\\N eig1>", "<R\\sg\\N eig2>", "<R\\sg\\N eig3>" };
-  char   **legp,buf[STRLEN];
-  gmx_rmpbc_t  gpbc=NULL;
-
-  parse_common_args(&argc,argv,
-                   PCA_CAN_VIEW | PCA_CAN_TIME | PCA_TIME_UNIT | PCA_BE_NICE,
-                   NFILE,fnm,asize(pa),pa,asize(desc),desc,0,NULL,&oenv);
-                   
-  snew(top,1);
-  ePBC = read_tpx_top(ftp2fn(efTPX,NFILE,fnm),
-                     NULL,box,&natoms,NULL,NULL,NULL,top);
-  
-  fprintf(stderr,"Select a group of polymer mainchain atoms:\n");
-  get_index(&top->atoms,ftp2fn_null(efNDX,NFILE,fnm),
-            1,&isize,&index,&grpname);
-
-  snew(molind,top->mols.nr+1);
-  nmol = 0;
-  mol = -1;
-  for(i=0; i<isize; i++) {
-    if (i == 0 || index[i] >= top->mols.index[mol+1]) {
-      molind[nmol++] = i;
-      do {
-       mol++;
-      } while (index[i] >= top->mols.index[mol+1]);
+    t_topology  *top;
+    output_env_t oenv;
+    int          ePBC;
+    int          isize, *index, nmol, *molind, mol, nat_min = 0, nat_max = 0;
+    char        *grpname;
+    t_trxstatus *status;
+    real         t;
+    rvec        *x, *bond = NULL;
+    matrix       box;
+    int          natoms, i, j, frame, ind0, ind1, a, d, d2, ord[DIM] = {0};
+    dvec         cm, sum_eig = {0, 0, 0};
+    double     **gyr, **gyr_all, eig[DIM], **eigv;
+    double       sum_eed2, sum_eed2_tot, sum_gyro, sum_gyro_tot, sum_pers_tot;
+    int         *ninp    = NULL;
+    double      *sum_inp = NULL, pers;
+    double      *intd, ymax, ymin;
+    double       mmol, m;
+    char         title[STRLEN];
+    FILE        *out, *outv, *outp, *outi;
+    const char  *leg[8] = {
+        "end to end", "<R\\sg\\N>",
+        "<R\\sg\\N> eig1", "<R\\sg\\N> eig2", "<R\\sg\\N> eig3",
+        "<R\\sg\\N eig1>", "<R\\sg\\N eig2>", "<R\\sg\\N eig3>"
+    };
+    char       **legp, buf[STRLEN];
+    gmx_rmpbc_t  gpbc = NULL;
+
+    parse_common_args(&argc, argv,
+                      PCA_CAN_VIEW | PCA_CAN_TIME | PCA_TIME_UNIT | PCA_BE_NICE,
+                      NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv);
+
+    snew(top, 1);
+    ePBC = read_tpx_top(ftp2fn(efTPX, NFILE, fnm),
+                        NULL, box, &natoms, NULL, NULL, NULL, top);
+
+    fprintf(stderr, "Select a group of polymer mainchain atoms:\n");
+    get_index(&top->atoms, ftp2fn_null(efNDX, NFILE, fnm),
+              1, &isize, &index, &grpname);
+
+    snew(molind, top->mols.nr+1);
+    nmol = 0;
+    mol  = -1;
+    for (i = 0; i < isize; i++)
+    {
+        if (i == 0 || index[i] >= top->mols.index[mol+1])
+        {
+            molind[nmol++] = i;
+            do
+            {
+                mol++;
+            }
+            while (index[i] >= top->mols.index[mol+1]);
+        }
+    }
+    molind[nmol] = i;
+    nat_min      = top->atoms.nr;
+    nat_max      = 0;
+    for (mol = 0; mol < nmol; mol++)
+    {
+        nat_min = min(nat_min, molind[mol+1]-molind[mol]);
+        nat_max = max(nat_max, molind[mol+1]-molind[mol]);
+    }
+    fprintf(stderr, "Group %s consists of %d molecules\n", grpname, nmol);
+    fprintf(stderr, "Group size per molecule, min: %d atoms, max %d atoms\n",
+            nat_min, nat_max);
+
+    sprintf(title, "Size of %d polymers", nmol);
+    out = xvgropen(opt2fn("-o", NFILE, fnm), title, output_env_get_xvgr_tlabel(oenv), "(nm)",
+                   oenv);
+    xvgr_legend(out, bPC ? 8 : 5, leg, oenv);
+
+    if (opt2bSet("-v", NFILE, fnm))
+    {
+        outv = xvgropen(opt2fn("-v", NFILE, fnm), "Principal components",
+                        output_env_get_xvgr_tlabel(oenv), "(nm)", oenv);
+        snew(legp, DIM*DIM);
+        for (d = 0; d < DIM; d++)
+        {
+            for (d2 = 0; d2 < DIM; d2++)
+            {
+                sprintf(buf, "eig%d %c", d+1, 'x'+d2);
+                legp[d*DIM+d2] = strdup(buf);
+            }
+        }
+        xvgr_legend(outv, DIM*DIM, (const char**)legp, oenv);
+    }
+    else
+    {
+        outv = NULL;
+    }
+
+    if (opt2bSet("-p", NFILE, fnm))
+    {
+        outp = xvgropen(opt2fn("-p", NFILE, fnm), "Persistence length",
+                        output_env_get_xvgr_tlabel(oenv), "bonds", oenv);
+        snew(bond, nat_max-1);
+        snew(sum_inp, nat_min/2);
+        snew(ninp, nat_min/2);
     }
-  }
-  molind[nmol] = i;
-  nat_min = top->atoms.nr;
-  nat_max = 0;
-  for(mol=0; mol<nmol; mol++) {
-    nat_min = min(nat_min,molind[mol+1]-molind[mol]);
-    nat_max = max(nat_max,molind[mol+1]-molind[mol]);
-  }
-  fprintf(stderr,"Group %s consists of %d molecules\n",grpname,nmol);
-  fprintf(stderr,"Group size per molecule, min: %d atoms, max %d atoms\n",
-         nat_min,nat_max);
-
-  sprintf(title,"Size of %d polymers",nmol);
-  out = xvgropen(opt2fn("-o",NFILE,fnm),title,output_env_get_xvgr_tlabel(oenv),"(nm)",
-                oenv);
-  xvgr_legend(out,bPC ? 8 : 5,leg,oenv);
-
-  if (opt2bSet("-v",NFILE,fnm)) {
-    outv = xvgropen(opt2fn("-v",NFILE,fnm),"Principal components",
-                   output_env_get_xvgr_tlabel(oenv),"(nm)",oenv);
-    snew(legp,DIM*DIM);
-    for(d=0; d<DIM; d++) {
-      for(d2=0; d2<DIM; d2++) {
-       sprintf(buf,"eig%d %c",d+1,'x'+d2);
-       legp[d*DIM+d2] = strdup(buf);
-      }
+    else
+    {
+        outp = NULL;
     }
-    xvgr_legend(outv,DIM*DIM,(const char**)legp,oenv);
-  } else {
-    outv = NULL;
-  }
-
-  if (opt2bSet("-p",NFILE,fnm)) {
-    outp = xvgropen(opt2fn("-p",NFILE,fnm),"Persistence length",
-                   output_env_get_xvgr_tlabel(oenv),"bonds",oenv);
-    snew(bond,nat_max-1);
-    snew(sum_inp,nat_min/2);
-    snew(ninp,nat_min/2);
-  } else {
-    outp = NULL;
-  }
-
-  if (opt2bSet("-i", NFILE, fnm)) {
-    outi = xvgropen(opt2fn("-i", NFILE, fnm), "Internal distances",
-                    "n", "<R\\S2\\N(n)>/n (nm\\S2\\N)",oenv);
-    i = index[molind[1]-1] - index[molind[0]]; /* Length of polymer -1 */
-    snew(intd, i);
-  } else {
-    intd = NULL;
-    outi = NULL;
-  }
-
-  natoms = read_first_x(oenv,&status,ftp2fn(efTRX,NFILE,fnm),&t,&x,box);
-
-  snew(gyr,DIM);
-  snew(gyr_all,DIM);
-  snew(eigv,DIM);
-  for(d=0; d<DIM; d++) {
-    snew(gyr[d],DIM);
-    snew(gyr_all[d],DIM);
-    snew(eigv[d],DIM);
-  }
-
-  frame        = 0;
-  sum_eed2_tot = 0;
-  sum_gyro_tot = 0;
-  sum_pers_tot = 0;
-  
-  gpbc = gmx_rmpbc_init(&top->idef,ePBC,natoms,box);
-  
-  do {
-    gmx_rmpbc(gpbc,natoms,box,x);
-    
-    sum_eed2 = 0;
-    for(d=0; d<DIM; d++)
-      clear_dvec(gyr_all[d]);
-    
-    if (bPC)
-      clear_dvec(sum_eig);
-
-    if (outp) {
-      for(i=0; i<nat_min/2; i++) {
-       sum_inp[i] = 0;
-       ninp[i] = 0;
-      }
+
+    if (opt2bSet("-i", NFILE, fnm))
+    {
+        outi = xvgropen(opt2fn("-i", NFILE, fnm), "Internal distances",
+                        "n", "<R\\S2\\N(n)>/n (nm\\S2\\N)", oenv);
+        i = index[molind[1]-1] - index[molind[0]]; /* Length of polymer -1 */
+        snew(intd, i);
+    }
+    else
+    {
+        intd = NULL;
+        outi = NULL;
     }
 
-    for(mol=0; mol<nmol; mol++) {
-      ind0 = molind[mol];
-      ind1 = molind[mol+1];
-
-      /* Determine end to end distance */
-      sum_eed2 += distance2(x[index[ind0]],x[index[ind1-1]]);
-
-      /* Determine internal distances */
-      if (outi) {
-        calc_int_dist(intd, x, index[ind0], index[ind1-1]);
-      }
-
-      /* Determine the radius of gyration */
-      clear_dvec(cm);
-      for(d=0; d<DIM; d++)
-       clear_dvec(gyr[d]);
-      mmol = 0;
-
-      for(i=ind0; i<ind1; i++) {
-       a = index[i];
-       if (bMW)
-         m = top->atoms.atom[a].m;
-       else
-         m = 1;
-       mmol += m;
-       for(d=0; d<DIM; d++) {
-         cm[d] += m*x[a][d];
-         for(d2=0; d2<DIM; d2++)
-           gyr[d][d2] += m*x[a][d]*x[a][d2];
-       }
-      }
-      dsvmul(1/mmol,cm,cm);
-      for(d=0; d<DIM; d++) {
-       for(d2=0; d2<DIM; d2++) {
-         gyr[d][d2] = gyr[d][d2]/mmol - cm[d]*cm[d2];
-         gyr_all[d][d2] += gyr[d][d2];
-       }
-      }
-      if (bPC) {
-       gyro_eigen(gyr,eig,eigv,ord);
-       for(d=0; d<DIM; d++)
-         sum_eig[d] += eig[ord[d]];
-      }
-      if (outp) {
-       for(i=ind0; i<ind1-1; i++) {
-         rvec_sub(x[index[i+1]],x[index[i]],bond[i-ind0]);
-         unitv(bond[i-ind0],bond[i-ind0]);
-       }
-       for(i=ind0; i<ind1-1; i++) {
-         for(j=0; (i+j<ind1-1 && j<nat_min/2); j+=2) {
-           sum_inp[j] += iprod(bond[i-ind0],bond[i-ind0+j]);
-           ninp[j]++;
-         }
-       }
-      }
+    natoms = read_first_x(oenv, &status, ftp2fn(efTRX, NFILE, fnm), &t, &x, box);
+
+    snew(gyr, DIM);
+    snew(gyr_all, DIM);
+    snew(eigv, DIM);
+    for (d = 0; d < DIM; d++)
+    {
+        snew(gyr[d], DIM);
+        snew(gyr_all[d], DIM);
+        snew(eigv[d], DIM);
     }
-    sum_eed2 /= nmol;
 
-    sum_gyro = 0;
-    for(d=0; d<DIM; d++) {
-      for(d2=0; d2<DIM; d2++)
-       gyr_all[d][d2] /= nmol;
-      sum_gyro += gyr_all[d][d];
+    frame        = 0;
+    sum_eed2_tot = 0;
+    sum_gyro_tot = 0;
+    sum_pers_tot = 0;
+
+    gpbc = gmx_rmpbc_init(&top->idef, ePBC, natoms, box);
+
+    do
+    {
+        gmx_rmpbc(gpbc, natoms, box, x);
+
+        sum_eed2 = 0;
+        for (d = 0; d < DIM; d++)
+        {
+            clear_dvec(gyr_all[d]);
+        }
+
+        if (bPC)
+        {
+            clear_dvec(sum_eig);
+        }
+
+        if (outp)
+        {
+            for (i = 0; i < nat_min/2; i++)
+            {
+                sum_inp[i] = 0;
+                ninp[i]    = 0;
+            }
+        }
+
+        for (mol = 0; mol < nmol; mol++)
+        {
+            ind0 = molind[mol];
+            ind1 = molind[mol+1];
+
+            /* Determine end to end distance */
+            sum_eed2 += distance2(x[index[ind0]], x[index[ind1-1]]);
+
+            /* Determine internal distances */
+            if (outi)
+            {
+                calc_int_dist(intd, x, index[ind0], index[ind1-1]);
+            }
+
+            /* Determine the radius of gyration */
+            clear_dvec(cm);
+            for (d = 0; d < DIM; d++)
+            {
+                clear_dvec(gyr[d]);
+            }
+            mmol = 0;
+
+            for (i = ind0; i < ind1; i++)
+            {
+                a = index[i];
+                if (bMW)
+                {
+                    m = top->atoms.atom[a].m;
+                }
+                else
+                {
+                    m = 1;
+                }
+                mmol += m;
+                for (d = 0; d < DIM; d++)
+                {
+                    cm[d] += m*x[a][d];
+                    for (d2 = 0; d2 < DIM; d2++)
+                    {
+                        gyr[d][d2] += m*x[a][d]*x[a][d2];
+                    }
+                }
+            }
+            dsvmul(1/mmol, cm, cm);
+            for (d = 0; d < DIM; d++)
+            {
+                for (d2 = 0; d2 < DIM; d2++)
+                {
+                    gyr[d][d2]      = gyr[d][d2]/mmol - cm[d]*cm[d2];
+                    gyr_all[d][d2] += gyr[d][d2];
+                }
+            }
+            if (bPC)
+            {
+                gyro_eigen(gyr, eig, eigv, ord);
+                for (d = 0; d < DIM; d++)
+                {
+                    sum_eig[d] += eig[ord[d]];
+                }
+            }
+            if (outp)
+            {
+                for (i = ind0; i < ind1-1; i++)
+                {
+                    rvec_sub(x[index[i+1]], x[index[i]], bond[i-ind0]);
+                    unitv(bond[i-ind0], bond[i-ind0]);
+                }
+                for (i = ind0; i < ind1-1; i++)
+                {
+                    for (j = 0; (i+j < ind1-1 && j < nat_min/2); j += 2)
+                    {
+                        sum_inp[j] += iprod(bond[i-ind0], bond[i-ind0+j]);
+                        ninp[j]++;
+                    }
+                }
+            }
+        }
+        sum_eed2 /= nmol;
+
+        sum_gyro = 0;
+        for (d = 0; d < DIM; d++)
+        {
+            for (d2 = 0; d2 < DIM; d2++)
+            {
+                gyr_all[d][d2] /= nmol;
+            }
+            sum_gyro += gyr_all[d][d];
+        }
+
+        gyro_eigen(gyr_all, eig, eigv, ord);
+
+        fprintf(out, "%10.3f %8.4f %8.4f %8.4f %8.4f %8.4f",
+                t*output_env_get_time_factor(oenv),
+                sqrt(sum_eed2), sqrt(sum_gyro),
+                sqrt(eig[ord[0]]), sqrt(eig[ord[1]]), sqrt(eig[ord[2]]));
+        if (bPC)
+        {
+            for (d = 0; d < DIM; d++)
+            {
+                fprintf(out, " %8.4f", sqrt(sum_eig[d]/nmol));
+            }
+        }
+        fprintf(out, "\n");
+
+        if (outv)
+        {
+            fprintf(outv, "%10.3f", t*output_env_get_time_factor(oenv));
+            for (d = 0; d < DIM; d++)
+            {
+                for (d2 = 0; d2 < DIM; d2++)
+                {
+                    fprintf(outv, " %6.3f", eigv[ord[d]][d2]);
+                }
+            }
+            fprintf(outv, "\n");
+        }
+
+        sum_eed2_tot += sum_eed2;
+        sum_gyro_tot += sum_gyro;
+
+        if (outp)
+        {
+            i = -1;
+            for (j = 0; j < nat_min/2; j += 2)
+            {
+                sum_inp[j] /= ninp[j];
+                if (i == -1 && sum_inp[j] <= exp(-1.0))
+                {
+                    i = j;
+                }
+            }
+            if (i == -1)
+            {
+                pers = j;
+            }
+            else
+            {
+                /* Do linear interpolation on a log scale */
+                pers = i - 2
+                    + 2*(log(sum_inp[i-2]) + 1)/(log(sum_inp[i-2]) - log(sum_inp[i]));
+            }
+            fprintf(outp, "%10.3f %8.4f\n", t*output_env_get_time_factor(oenv), pers);
+            sum_pers_tot += pers;
+        }
+
+        frame++;
     }
+    while (read_next_x(oenv, status, &t, natoms, x, box));
+
+    gmx_rmpbc_done(gpbc);
 
-    gyro_eigen(gyr_all,eig,eigv,ord);
+    close_trx(status);
 
-    fprintf(out,"%10.3f %8.4f %8.4f %8.4f %8.4f %8.4f",
-           t*output_env_get_time_factor(oenv),
-           sqrt(sum_eed2),sqrt(sum_gyro),
-           sqrt(eig[ord[0]]),sqrt(eig[ord[1]]),sqrt(eig[ord[2]]));
-    if (bPC) {
-      for(d=0; d<DIM; d++)
-       fprintf(out," %8.4f",sqrt(sum_eig[d]/nmol));
+    ffclose(out);
+    if (outv)
+    {
+        ffclose(outv);
     }
-    fprintf(out,"\n");
-
-    if (outv) {
-      fprintf(outv,"%10.3f",t*output_env_get_time_factor(oenv));
-      for(d=0; d<DIM; d++) {
-       for(d2=0; d2<DIM; d2++)
-         fprintf(outv," %6.3f",eigv[ord[d]][d2]);
-      }
-      fprintf(outv,"\n");
+    if (outp)
+    {
+        ffclose(outp);
     }
 
-    sum_eed2_tot += sum_eed2;
-    sum_gyro_tot += sum_gyro;
-
-    if (outp) {
-      i = -1;
-      for(j=0; j<nat_min/2; j+=2) {
-       sum_inp[j] /= ninp[j];
-       if (i == -1 && sum_inp[j] <= exp(-1.0))
-         i = j;
-      }
-      if (i == -1) {
-       pers = j;
-      } else {
-       /* Do linear interpolation on a log scale */
-       pers = i - 2
-         + 2*(log(sum_inp[i-2]) + 1)/(log(sum_inp[i-2]) - log(sum_inp[i]));
-      }
-      fprintf(outp,"%10.3f %8.4f\n",t*output_env_get_time_factor(oenv),pers);
-      sum_pers_tot += pers;
+    sum_eed2_tot /= frame;
+    sum_gyro_tot /= frame;
+    sum_pers_tot /= frame;
+    fprintf(stdout, "\nAverage end to end distance: %.3f (nm)\n",
+            sqrt(sum_eed2_tot));
+    fprintf(stdout, "\nAverage radius of gyration:  %.3f (nm)\n",
+            sqrt(sum_gyro_tot));
+    if (opt2bSet("-p", NFILE, fnm))
+    {
+        fprintf(stdout, "\nAverage persistence length:  %.2f bonds\n",
+                sum_pers_tot);
     }
 
-    frame++;
-  } while (read_next_x(oenv,status,&t,natoms,x,box));
-  
-  gmx_rmpbc_done(gpbc);
-
-  close_trx(status);
-
-  ffclose(out);
-  if (outv)
-    ffclose(outv);
-  if (outp)
-    ffclose(outp);
-
-  sum_eed2_tot /= frame;
-  sum_gyro_tot /= frame;
-  sum_pers_tot /= frame;
-  fprintf(stdout,"\nAverage end to end distance: %.3f (nm)\n",
-         sqrt(sum_eed2_tot));
-  fprintf(stdout,"\nAverage radius of gyration:  %.3f (nm)\n",
-         sqrt(sum_gyro_tot));
-  if (opt2bSet("-p",NFILE,fnm))
-    fprintf(stdout,"\nAverage persistence length:  %.2f bonds\n",
-           sum_pers_tot);
-
-  /* Handle printing of internal distances. */
-  if (outi) {
-    fprintf(outi, "@    xaxes scale Logarithmic\n");
-    ymax = -1;
-    ymin = 1e300;
-    j = index[molind[1]-1] - index[molind[0]]; /* Polymer length -1. */
-    for (i = 0; i < j; i++) {
-      intd[i] /= (i + 1) * frame * nmol;
-      if (intd[i] > ymax)
-        ymax = intd[i];
-      if (intd[i] < ymin)
-        ymin = intd[i];
+    /* Handle printing of internal distances. */
+    if (outi)
+    {
+        fprintf(outi, "@    xaxes scale Logarithmic\n");
+        ymax = -1;
+        ymin = 1e300;
+        j    = index[molind[1]-1] - index[molind[0]]; /* Polymer length -1. */
+        for (i = 0; i < j; i++)
+        {
+            intd[i] /= (i + 1) * frame * nmol;
+            if (intd[i] > ymax)
+            {
+                ymax = intd[i];
+            }
+            if (intd[i] < ymin)
+            {
+                ymin = intd[i];
+            }
+        }
+        xvgr_world(outi, 1, ymin, j, ymax, oenv);
+        for (i = 0; i < j; i++)
+        {
+            fprintf(outi, "%d  %8.4f\n", i+1, intd[i]);
+        }
+        ffclose(outi);
     }
-    xvgr_world(outi, 1, ymin, j, ymax,oenv);
-    for (i = 0; i < j; i++) {
-      fprintf(outi, "%d  %8.4f\n", i+1, intd[i]);
+
+    do_view(oenv, opt2fn("-o", NFILE, fnm), "-nxy");
+    if (opt2bSet("-v", NFILE, fnm))
+    {
+        do_view(oenv, opt2fn("-v", NFILE, fnm), "-nxy");
+    }
+    if (opt2bSet("-p", NFILE, fnm))
+    {
+        do_view(oenv, opt2fn("-p", NFILE, fnm), "-nxy");
     }
-    ffclose(outi);
-  }
-
-  do_view(oenv,opt2fn("-o",NFILE,fnm),"-nxy");
-  if (opt2bSet("-v",NFILE,fnm))
-    do_view(oenv,opt2fn("-v",NFILE,fnm),"-nxy");
-  if (opt2bSet("-p",NFILE,fnm))
-    do_view(oenv,opt2fn("-p",NFILE,fnm),"-nxy");
-    
-  thanx(stderr);
-    
-  return 0;
+
+    thanx(stderr);
+
+    return 0;
 }