Merge release-4-6 into master
[alexxy/gromacs.git] / src / gromacs / legacyheaders / types / qmmmrec.h
1 /*
2  *
3  *                This source code is part of
4  *
5  *                 G   R   O   M   A   C   S
6  *
7  *          GROningen MAchine for Chemical Simulations
8  *
9  * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
10  * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
11  * Copyright (c) 2001-2008, The GROMACS development team,
12  * check out http://www.gromacs.org for more information.
13
14  * This program is free software; you can redistribute it and/or
15  * modify it under the terms of the GNU General Public License
16  * as published by the Free Software Foundation; either version 2
17  * of the License, or (at your option) any later version.
18  *
19  * If you want to redistribute modifications, please consider that
20  * scientific software is very special. Version control is crucial -
21  * bugs must be traceable. We will be happy to consider code for
22  * inclusion in the official distribution, but derived work must not
23  * be called official GROMACS. Details are found in the README & COPYING
24  * files - if they are missing, get the official version at www.gromacs.org.
25  *
26  * To help us fund GROMACS development, we humbly ask that you cite
27  * the papers on the package - you can find them in the top README file.
28  *
29  * For more info, check our website at http://www.gromacs.org
30  *
31  * And Hey:
32  * Gallium Rubidium Oxygen Manganese Argon Carbon Silicon
33  */
34
35
36 #include "simple.h"
37
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41
42 typedef struct {
43     int                nrQMatoms;      /* total nr of QM atoms              */
44     rvec              *xQM;            /* shifted to center of box          */
45     int               *indexQM;        /* atom i = atom indexQM[i] in mdrun */
46     int               *atomicnumberQM; /* atomic numbers of QM atoms        */
47     real              *QMcharges;      /* atomic charges of QM atoms(ONIOM) */
48     int               *shiftQM;
49     int                QMcharge;       /* charge of the QM system           */
50     int                multiplicity;   /* multipicity (no of unpaired eln)  */
51     int                QMmethod;       /* see enums.h for all methods       */
52     int                QMbasis;        /* see enums.h for all bases         */
53     int                nelectrons;     /* total number of elecs in QM region*/
54     gmx_bool           bTS;            /* Optimize a TS, only steep, no md  */
55     gmx_bool           bOPT;           /* Optimize QM subsys, only steep, no md  */
56     gmx_bool          *frontatoms;     /* qm atoms on the QM side of a QM-MM bond */
57     /* Gaussian specific stuff */
58     int                nQMcpus;        /* no. of CPUs used for the QM calc. */
59     int                QMmem;          /* memory for the gaussian calc.     */
60     int                accuracy;       /* convergence criterium (E(-x))     */
61     gmx_bool           cpmcscf;        /* using cpmcscf(l1003)*/
62     char              *gauss_dir;
63     char              *gauss_exe;
64     char              *devel_dir;
65     char              *orca_basename; /* basename for I/O with orca        */
66     char              *orca_dir;      /* directory for ORCA                */
67     real              *c6;
68     real              *c12;
69     /* Surface hopping stuff */
70     gmx_bool           bSH;     /* surface hopping (diabatic only)   */
71     real               SAon;    /* at which energy gap the SA starts */
72     real               SAoff;   /* at which energy gap the SA stops  */
73     int                SAsteps; /* stepwise switchinng on the SA     */
74     int                SAstep;  /* current state of SA               */
75     int                CIdim;
76     real              *CIvec1;
77     real              *CIvec2;
78     real              *CIvec1old;
79     real              *CIvec2old;
80     ivec               SHbasis;
81     int                CASelectrons;
82     int                CASorbitals;
83 } t_QMrec;
84
85 typedef struct {
86     int            nrMMatoms;   /* nr of MM atoms, updated every step*/
87     rvec          *xMM;         /* shifted to center of box          */
88     int           *indexMM;     /* atom i = atom indexMM[I] in mdrun */
89     real          *MMcharges;   /* MM point charges in std QMMM calc.*/
90     int           *shiftMM;
91     int           *MMatomtype;  /* only important for semi-emp.      */
92     real           scalefactor;
93     /* gaussian specific stuff */
94     real          *c6;
95     real          *c12;
96 } t_MMrec;
97
98
99 typedef struct {
100     int             QMMMscheme; /* ONIOM (multi-layer) or normal          */
101     int             nrQMlayers; /* number of QM layers (total layers +1 (MM)) */
102     t_QMrec       **qm;         /* atoms and run params for each QM group */
103     t_MMrec        *mm;         /* there can only be one MM subsystem !   */
104 } t_QMMMrec;
105
106 #ifdef __cplusplus
107 }
108 #endif