Remove unnecessary config.h includes
[alexxy/gromacs.git] / src / gromacs / mdlib / qm_orca.c
index 50b098c6e4f46fe910e6f537cd8b1bdcf4505291..f5f85e4f8d0743a38723ede0f29b228edead895b 100644 (file)
@@ -1,77 +1,70 @@
-/* -*- mode: c; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; c-file-style: "stroustrup"; -*-
+/*
+ * This file is part of the GROMACS molecular simulation package.
  *
- *                This source code is part of
- *
- *                 G   R   O   M   A   C   S
- *
- *          GROningen MAchine for Chemical Simulations
- *
- *                        VERSION 4.5
- * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
  * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2008, 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-2008, 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.
  *
- * 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.
+ * 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.
  *
- * For more info, check our website at http://www.gromacs.org
+ * 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.
  *
- * And Hey:
- * Groningen Machine for Chemical Simulation
+ * To help us fund GROMACS development, we humbly ask that you cite
+ * the research papers on the package. Check out http://www.gromacs.org.
  */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
+#include "gmxpre.h"
 
 #include <math.h>
-#include "sysstuff.h"
-#include "typedefs.h"
-#include "macros.h"
-#include "smalloc.h"
-#include "physics.h"
-#include "macros.h"
-#include "vec.h"
-#include "force.h"
-#include "invblock.h"
-#include "confio.h"
-#include "names.h"
-#include "network.h"
-#include "pbc.h"
-#include "ns.h"
-#include "nrnb.h"
-#include "bondf.h"
-#include "mshift.h"
-#include "txtdump.h"
-#include "copyrite.h"
-#include "qmmm.h"
 #include <stdio.h>
-#include <string.h>
-#include "gmx_fatal.h"
-#include "typedefs.h"
 #include <stdlib.h>
+#include <string.h>
+
+#include "gromacs/legacyheaders/typedefs.h"
+#include "gromacs/legacyheaders/macros.h"
+#include "gromacs/utility/smalloc.h"
+#include "gromacs/math/units.h"
+#include "gromacs/math/vec.h"
+#include "gromacs/legacyheaders/force.h"
+#include "gromacs/fileio/confio.h"
+#include "gromacs/legacyheaders/names.h"
+#include "gromacs/legacyheaders/network.h"
+#include "gromacs/legacyheaders/ns.h"
+#include "gromacs/legacyheaders/nrnb.h"
+#include "gromacs/legacyheaders/txtdump.h"
+#include "gromacs/legacyheaders/qmmm.h"
+#include "gromacs/utility/fatalerror.h"
 
 /* ORCA interface routines */
 
-void init_orca(t_commrec *cr, t_QMrec *qm, t_MMrec *mm)
+void init_orca(t_QMrec *qm)
 {
-    char
-    *buf;
+    char *buf;
     snew(buf, 200);
+
     /* ORCA settings on the system */
-    buf = getenv("BASENAME");
+    buf = getenv("GMX_QM_ORCA_BASENAME");
     if (buf)
     {
         snew(qm->orca_basename, 200);
@@ -79,13 +72,12 @@ void init_orca(t_commrec *cr, t_QMrec *qm, t_MMrec *mm)
     }
     else
     {
-        gmx_fatal(FARGS, "no $BASENAME\n");
+        gmx_fatal(FARGS, "$GMX_QM_ORCA_BASENAME is not set\n");
     }
 
     /* ORCA directory on the system */
     snew(buf, 200);
-    buf = getenv("ORCA_PATH");
-    fprintf(stderr, "%s", buf);
+    buf = getenv("GMX_ORCA_PATH");
 
     if (buf)
     {
@@ -94,11 +86,11 @@ void init_orca(t_commrec *cr, t_QMrec *qm, t_MMrec *mm)
     }
     else
     {
-        gmx_fatal(FARGS, "no $ORCA_PATH, check manual\n");
+        gmx_fatal(FARGS, "$GMX_ORCA_PATH not set, check manual\n");
     }
 
-    fprintf(stderr, "%s...\n", qm->orca_dir);
-    fprintf(stderr, "orca initialised...\n");
+    fprintf(stderr, "Setting ORCA path to: %s...\n", qm->orca_dir);
+    fprintf(stderr, "ORCA initialised...\n\n");
     /* since we append the output to the BASENAME.out file,
        we should delete an existent old out-file here. */
     sprintf(buf, "%s.out", qm->orca_basename);
@@ -106,26 +98,26 @@ void init_orca(t_commrec *cr, t_QMrec *qm, t_MMrec *mm)
 }
 
 
-void write_orca_input(int step, t_forcerec *fr, t_QMrec *qm, t_MMrec *mm)
+void write_orca_input(t_forcerec *fr, t_QMrec *qm, t_MMrec *mm)
 {
-    int
-        i;
-    t_QMMMrec
-       *QMMMrec;
-    FILE
-       *out, *pcFile, *addInputFile, *LJCoeff;
-    char
-       *buf, *orcaInput, *addInputFilename, *LJCoeffFilename,
-    *pcFilename, *exclInName, *exclOutName;
+    int        i;
+    t_QMMMrec *QMMMrec;
+    FILE      *out, *pcFile, *addInputFile, *LJCoeff;
+    char      *buf, *orcaInput, *addInputFilename, *LJCoeffFilename, *pcFilename, *exclInName, *exclOutName;
+
     QMMMrec = fr->qr;
+
     /* write the first part of the input-file */
     snew(orcaInput, 200);
     sprintf(orcaInput, "%s.inp", qm->orca_basename);
     out = fopen(orcaInput, "w");
+
     snew(addInputFilename, 200);
     sprintf(addInputFilename, "%s.ORCAINFO", qm->orca_basename);
     addInputFile = fopen(addInputFilename, "r");
-    fprintf(out, "#input-file generated by gromacs\n");
+
+    fprintf(out, "#input-file generated by GROMACS\n");
+
     if (qm->bTS)
     {
         fprintf(out, "!QMMMOpt TightSCF\n");
@@ -139,6 +131,7 @@ void write_orca_input(int step, t_forcerec *fr, t_QMrec *qm, t_MMrec *mm)
     {
         fprintf(out, "!EnGrad TightSCF\n");
     }
+
     /* here we include the insertion of the additional orca-input */
     snew(buf, 200);
     if (addInputFile != NULL)
@@ -153,10 +146,11 @@ void write_orca_input(int step, t_forcerec *fr, t_QMrec *qm, t_MMrec *mm)
     }
     else
     {
-        fprintf(stderr, "No information on the calculation given in <%s>\n", addInputFilename);
-        gmx_call("qm_orca.c");
+        gmx_fatal(FARGS, "No information on the calculation given in %s\n", addInputFilename);
     }
+
     fclose(addInputFile);
+
     if (qm->bTS || qm->bOPT)
     {
         /* freeze the frontier QM atoms and Link atoms. This is
@@ -219,11 +213,11 @@ void write_orca_input(int step, t_forcerec *fr, t_QMrec *qm, t_MMrec *mm)
             fclose(LJCoeff);
         }
     }
-    /* write charge and multiplicity
-     */
+
+    /* write charge and multiplicity */
     fprintf(out, "*xyz %2d%2d\n", qm->QMcharge, qm->multiplicity);
-    /* write the QM coordinates
-     */
+
+    /* write the QM coordinates */
     for (i = 0; i < qm->nrQMatoms; i++)
     {
         int atomNr;
@@ -250,8 +244,8 @@ void write_orca_input(int step, t_forcerec *fr, t_QMrec *qm, t_MMrec *mm)
 #endif
     }
     fprintf(out, "*\n");
-    /* write the MM point charge data
-     */
+
+    /* write the MM point charge data */
     if (QMMMrec->QMMMscheme != eQMMMschemeoniom && mm->nrMMatoms)
     {
         /* name of the point charge file */
@@ -284,7 +278,7 @@ void write_orca_input(int step, t_forcerec *fr, t_QMrec *qm, t_MMrec *mm)
     fclose(out);
 }  /* write_orca_input */
 
-real read_orca_output(rvec QMgrad[], rvec MMgrad[], int step, t_forcerec *fr,
+real read_orca_output(rvec QMgrad[], rvec MMgrad[], t_forcerec *fr,
                       t_QMrec *qm, t_MMrec *mm)
 {
     int
@@ -457,7 +451,7 @@ real read_orca_output(rvec QMgrad[], rvec MMgrad[], int step, t_forcerec *fr,
     return(QMener);
 }
 
-void do_orca(int step, char *exe, char *orca_dir, char *basename)
+void do_orca(char *orca_dir, char *basename)
 {
 
     /* make the call to the orca binary through system()
@@ -478,7 +472,7 @@ void do_orca(int step, char *exe, char *orca_dir, char *basename)
     }
 }
 
-real call_orca(t_commrec *cr,  t_forcerec *fr,
+real call_orca(t_forcerec *fr,
                t_QMrec *qm, t_MMrec *mm, rvec f[], rvec fshift[])
 {
     /* normal orca jobs */
@@ -487,7 +481,7 @@ real call_orca(t_commrec *cr,  t_forcerec *fr,
     int
         i, j;
     real
-        QMener = 0.0;
+        QMener;
     rvec
        *QMgrad, *MMgrad;
     char
@@ -498,9 +492,9 @@ real call_orca(t_commrec *cr,  t_forcerec *fr,
     snew(QMgrad, qm->nrQMatoms);
     snew(MMgrad, mm->nrMMatoms);
 
-    write_orca_input(step, fr, qm, mm);
-    do_orca(step, exe, qm->orca_dir, qm->orca_basename);
-    QMener = read_orca_output(QMgrad, MMgrad, step, fr, qm, mm);
+    write_orca_input(fr, qm, mm);
+    do_orca(qm->orca_dir, qm->orca_basename);
+    QMener = read_orca_output(QMgrad, MMgrad, fr, qm, mm);
     /* put the QMMM forces in the force array and to the fshift
      */
     for (i = 0; i < qm->nrQMatoms; i++)