Merge branch 'release-4-5-patches'
[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