Remove unnecessary config.h includes
[alexxy/gromacs.git] / src / gromacs / gmxpreprocess / topshake.c
index 78961c5ea8cb5e98b5a1ea9350be032504e8c7dd..66a1036bdcfe32a71b33a8ffc0df7840fb9fec43 100644 (file)
 /*
- * 
- *                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.
+ * This file is part of the GROMACS molecular simulation package.
+ *
  * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2004, The GROMACS development team,
- * check out http://www.gromacs.org for more information.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
+ * Copyright (c) 2001-2004, The GROMACS development team.
+ * Copyright (c) 2013,2014, by the GROMACS development team, led by
+ * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
+ * and including many others, as listed in the AUTHORS file in the
+ * top-level source directory and at http://www.gromacs.org.
+ *
+ * GROMACS is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
  * 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.
- * 
+ *
+ * GROMACS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GROMACS; if not, see
+ * http://www.gnu.org/licenses, or write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
+ *
+ * If you want to redistribute modifications to GROMACS, 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 http://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:
- * Gallium Rubidium Oxygen Manganese Argon Carbon Silicon
+ * the research papers on the package. Check out http://www.gromacs.org.
  */
 /* This file is completely threadsafe - keep it that way! */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
+#include "gmxpre.h"
 
 #include <ctype.h>
+#include <math.h>
 
-#include "sysstuff.h"
-#include "physics.h"
-#include "macros.h"
+#include "gromacs/math/units.h"
 #include "readir.h"
-#include "typedefs.h"
+#include "gromacs/legacyheaders/typedefs.h"
 #include "topshake.h"
 #include "toppush.h"
 #include "toputil.h"
 #include "topdirs.h"
-#include "smalloc.h"
-#include "gmx_fatal.h"
+#include "gromacs/utility/smalloc.h"
+#include "gromacs/utility/fatalerror.h"
 
 static void copy_bond (t_params *pr, int to, int from)
 /* copies an entry in a bond list to another position.
  * does no allocing or freeing of memory
  */
 {
-  /*memcpy((char*) &(pr->param[to]),(char*) &(pr->param[from]),
-    (size_t)sizeof(pr->param[from]));*/
-  int i;
-  
-  if (to != from) {
-    range_check(to,0,pr->nr);
-    range_check(from,0,pr->nr);
-    for(i=0; (i<MAXATOMLIST); i++)
-      pr->param[to].a[i] = pr->param[from].a[i];
-    for(i=0; (i<MAXFORCEPARAM); i++)
-      pr->param[to].c[i] = pr->param[from].c[i];
-    for(i=0; (i<MAXSLEN); i++)
-      pr->param[to].s[i] = pr->param[from].s[i];
-  }
+    /*memcpy((char*) &(pr->param[to]),(char*) &(pr->param[from]),
+       (size_t)sizeof(pr->param[from]));*/
+    int i;
+
+    if (to != from)
+    {
+        range_check(to, 0, pr->nr);
+        range_check(from, 0, pr->nr);
+        for (i = 0; (i < MAXATOMLIST); i++)
+        {
+            pr->param[to].a[i] = pr->param[from].a[i];
+        }
+        for (i = 0; (i < MAXFORCEPARAM); i++)
+        {
+            pr->param[to].c[i] = pr->param[from].c[i];
+        }
+        for (i = 0; (i < MAXSLEN); i++)
+        {
+            pr->param[to].s[i] = pr->param[from].s[i];
+        }
+    }
 }
 
 static int count_hydrogens (char ***atomname, int nra, atom_id a[])
 {
-  int  i,nh;
-  
-  if (!atomname) 
-    gmx_fatal(FARGS,"Cannot call count_hydrogens with no atomname (%s %d)",
-               __FILE__,__LINE__);
-    
-  nh=0;
-  for (i=0; (i<nra); i++) 
-    if (toupper(**(atomname[a[i]]))=='H')
-      nh++;
-  return nh;
+    int  i, nh;
+
+    if (!atomname)
+    {
+        gmx_fatal(FARGS, "Cannot call count_hydrogens with no atomname (%s %d)",
+                  __FILE__, __LINE__);
+    }
+
+    nh = 0;
+    for (i = 0; (i < nra); i++)
+    {
+        if (toupper(**(atomname[a[i]])) == 'H')
+        {
+            nh++;
+        }
+    }
+
+    return nh;
 }
 
-void make_shake (t_params plist[],t_atoms *atoms,gpp_atomtype_t at,int nshake)
+void make_shake (t_params plist[], t_atoms *atoms, int nshake)
 {
-  char         ***info=atoms->atomname;
-  t_params     *pr;
-  t_params     *bonds;
-  t_param      p,*bond,*ang;
-  real         b_ij,b_jk;
-  int          nb,b,i,j,ftype,ftype_a;
-  gmx_bool         bFound;
-  
-  if (nshake != eshNONE) {
-    switch (nshake) {
-    case eshHBONDS:
-      printf("turning H bonds into constraints...\n");
-      break;
-    case eshALLBONDS:
-      printf("turning all bonds into constraints...\n");
-      break;
-    case eshHANGLES:
-      printf("turning all bonds and H angles into constraints...\n");
-      break;
-    case eshALLANGLES:
-      printf("turning all bonds and angles into constraints...\n");
-      break;
-    default:
-      gmx_fatal(FARGS,"Invalid option for make_shake (%d)",nshake);
-    }
-    
-    if ((nshake == eshHANGLES) || (nshake == eshALLANGLES)) {
-      /* Add all the angles with hydrogens to the shake list
-       * and remove them from the bond list
-       */
-      for(ftype = 0; (ftype < F_NRE); ftype++) {
-       if (interaction_function[ftype].flags & IF_BTYPE) {
-         bonds=&(plist[ftype]);
-
-         for(ftype_a = 0; (bonds->nr > 0 && ftype_a < F_NRE); ftype_a++) {
-           if (interaction_function[ftype_a].flags & IF_ATYPE) {
-             pr = &(plist[ftype_a]);
-             
-             for (i=0; (i < pr->nr); ) {
-               int numhydrogens;
-
-               ang=&(pr->param[i]);
+    char          ***info = atoms->atomname;
+    t_params        *pr;
+    t_params        *bonds;
+    t_param          p, *bond, *ang;
+    real             b_ij, b_jk;
+    int              nb, b, i, j, ftype, ftype_a;
+    gmx_bool         bFound;
+
+    if (nshake != eshNONE)
+    {
+        switch (nshake)
+        {
+            case eshHBONDS:
+                printf("turning H bonds into constraints...\n");
+                break;
+            case eshALLBONDS:
+                printf("turning all bonds into constraints...\n");
+                break;
+            case eshHANGLES:
+                printf("turning all bonds and H angles into constraints...\n");
+                break;
+            case eshALLANGLES:
+                printf("turning all bonds and angles into constraints...\n");
+                break;
+            default:
+                gmx_fatal(FARGS, "Invalid option for make_shake (%d)", nshake);
+        }
+
+        if ((nshake == eshHANGLES) || (nshake == eshALLANGLES))
+        {
+            /* Add all the angles with hydrogens to the shake list
+             * and remove them from the bond list
+             */
+            for (ftype = 0; (ftype < F_NRE); ftype++)
+            {
+                if (interaction_function[ftype].flags & IF_BTYPE)
+                {
+                    bonds = &(plist[ftype]);
+
+                    for (ftype_a = 0; (bonds->nr > 0 && ftype_a < F_NRE); ftype_a++)
+                    {
+                        if (interaction_function[ftype_a].flags & IF_ATYPE)
+                        {
+                            pr = &(plist[ftype_a]);
+
+                            for (i = 0; (i < pr->nr); )
+                            {
+                                int numhydrogens;
+
+                                ang = &(pr->param[i]);
 #ifdef DEBUG
-               printf("Angle: %d-%d-%d\n",ang->AI,ang->AJ,ang->AK); 
+                                printf("Angle: %d-%d-%d\n", ang->AI, ang->AJ, ang->AK);
 #endif
-               numhydrogens = count_hydrogens(info,3,ang->a);
-               if ((nshake == eshALLANGLES) ||
-                   (numhydrogens > 1) ||
-                   (numhydrogens == 1 && toupper(**(info[ang->a[1]]))=='O')) {
-                 /* Can only add hydrogen angle shake, if the two bonds
-                  * are constrained.
-                  * append this angle to the shake list 
-                  */
-                 p.AI = ang->AI;
-                 p.AJ = ang->AK;
-                 
-                 /* Calculate length of constraint */
-                 bFound=FALSE;
-                 b_ij=b_jk=0.0;
-                 for (j=0; !bFound && (j<bonds->nr); j++) {
-                   bond=&(bonds->param[j]);
-                   if (((bond->AI==ang->AI) && 
-                        (bond->AJ==ang->AJ)) ||
-                       ((bond->AI==ang->AJ) && 
-                        (bond->AJ==ang->AI)))
-                     b_ij=bond->C0;
-                   if (((bond->AI==ang->AK) && 
-                        (bond->AJ==ang->AJ)) ||
-                       ((bond->AI==ang->AJ) && 
-                        (bond->AJ==ang->AK)))
-                     b_jk=bond->C0;
-                   bFound = (b_ij!=0.0) && (b_jk!=0.0);
-                 }
-                 if (bFound) {
-                   /* apply law of cosines */
-                   p.C0 = sqrt( b_ij*b_ij + b_jk*b_jk - 
-                                2.0*b_ij*b_jk*cos(DEG2RAD*ang->C0) );
-                   p.C1 = p.C0;
+                                numhydrogens = count_hydrogens(info, 3, ang->a);
+                                if ((nshake == eshALLANGLES) ||
+                                    (numhydrogens > 1) ||
+                                    (numhydrogens == 1 && toupper(**(info[ang->a[1]])) == 'O'))
+                                {
+                                    /* Can only add hydrogen angle shake, if the two bonds
+                                     * are constrained.
+                                     * append this angle to the shake list
+                                     */
+                                    p.AI = ang->AI;
+                                    p.AJ = ang->AK;
+
+                                    /* Calculate length of constraint */
+                                    bFound = FALSE;
+                                    b_ij   = b_jk = 0.0;
+                                    for (j = 0; !bFound && (j < bonds->nr); j++)
+                                    {
+                                        bond = &(bonds->param[j]);
+                                        if (((bond->AI == ang->AI) &&
+                                             (bond->AJ == ang->AJ)) ||
+                                            ((bond->AI == ang->AJ) &&
+                                             (bond->AJ == ang->AI)))
+                                        {
+                                            b_ij = bond->C0;
+                                        }
+                                        if (((bond->AI == ang->AK) &&
+                                             (bond->AJ == ang->AJ)) ||
+                                            ((bond->AI == ang->AJ) &&
+                                             (bond->AJ == ang->AK)))
+                                        {
+                                            b_jk = bond->C0;
+                                        }
+                                        bFound = (b_ij != 0.0) && (b_jk != 0.0);
+                                    }
+                                    if (bFound)
+                                    {
+                                        /* apply law of cosines */
+                                        p.C0 = sqrt( b_ij*b_ij + b_jk*b_jk -
+                                                     2.0*b_ij*b_jk*cos(DEG2RAD*ang->C0) );
+                                        p.C1 = p.C0;
 #ifdef DEBUG
-                   printf("p: %d, q: %d, dist: %12.5e\n",p.AI,p.AJ,p.C0);
+                                        printf("p: %d, q: %d, dist: %12.5e\n", p.AI, p.AJ, p.C0);
 #endif
-                   add_param_to_list (&(plist[F_CONSTR]),&p);
-                   /* move the last bond to this position */
-                   copy_bond (pr,i,pr->nr-1);
-                   /* should free memory here!! */
-                   pr->nr--;
-                 }
-               }
-               else
-                 i++;
-             }
-           } /* if IF_ATYPE */
-         } /* for ftype_A */
-       } /* if IF_BTYPE */
-      } /* for ftype */
-    } /* if shake angles */
-  
-    /* Add all the bonds with hydrogens to the shake list
-     * and remove them from the bond list
-     */
-    for (ftype=0; (ftype < F_NRE); ftype++) {
-      if (interaction_function[ftype].flags & IF_BTYPE) {
-       pr = &(plist[ftype]);
-        j = 0;
-       for(i=0; i<pr->nr; i++) {
-         if ( (nshake != eshHBONDS) || 
-              (count_hydrogens (info,2,pr->param[i].a) > 0) ) {
-           /* append this bond to the shake list */
-           p.AI = pr->param[i].AI;
-           p.AJ = pr->param[i].AJ;
-           p.C0 = pr->param[i].C0;
-           p.C1 = pr->param[i].C2;
-           add_param_to_list (&(plist[F_CONSTR]),&p);
-         } else {
-             copy_bond(pr,j++,i); 
-         }
-       }
-       pr->nr = j;
-      }
+                                        add_param_to_list (&(plist[F_CONSTR]), &p);
+                                        /* move the last bond to this position */
+                                        copy_bond (pr, i, pr->nr-1);
+                                        /* should free memory here!! */
+                                        pr->nr--;
+                                    }
+                                }
+                                else
+                                {
+                                    i++;
+                                }
+                            }
+                        } /* if IF_ATYPE */
+                    }     /* for ftype_A */
+                }         /* if IF_BTYPE */
+            }             /* for ftype */
+        }                 /* if shake angles */
+
+        /* Add all the bonds with hydrogens to the shake list
+         * and remove them from the bond list
+         */
+        for (ftype = 0; (ftype < F_NRE); ftype++)
+        {
+            if (interaction_function[ftype].flags & IF_BTYPE)
+            {
+                pr = &(plist[ftype]);
+                j  = 0;
+                for (i = 0; i < pr->nr; i++)
+                {
+                    if ( (nshake != eshHBONDS) ||
+                         (count_hydrogens (info, 2, pr->param[i].a) > 0) )
+                    {
+                        /* append this bond to the shake list */
+                        p.AI = pr->param[i].AI;
+                        p.AJ = pr->param[i].AJ;
+                        p.C0 = pr->param[i].C0;
+                        p.C1 = pr->param[i].C2;
+                        add_param_to_list (&(plist[F_CONSTR]), &p);
+                    }
+                    else
+                    {
+                        copy_bond(pr, j++, i);
+                    }
+                }
+                pr->nr = j;
+            }
+        }
     }
-  }
 }