-/* -*- 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);
}
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)
{
}
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);
}
-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");
{
fprintf(out, "!EnGrad TightSCF\n");
}
+
/* here we include the insertion of the additional orca-input */
snew(buf, 200);
if (addInputFile != NULL)
}
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
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;
#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 */
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
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()
}
}
-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 */
int
i, j;
real
- QMener = 0.0;
+ QMener;
rvec
*QMgrad, *MMgrad;
char
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++)