Update copyright statements and change license to LGPL
[alexxy/gromacs.git] / include / types / topology.h
1 /*
2  * This file is part of the GROMACS molecular simulation package.
3  *
4  * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
5  * Copyright (c) 2001-2004, The GROMACS development team,
6  * check out http://www.gromacs.org for more information.
7  * Copyright (c) 2012, by the GROMACS development team, led by
8  * David van der Spoel, Berk Hess, Erik Lindahl, and including many
9  * others, as listed in the AUTHORS file in the top-level source
10  * directory and at http://www.gromacs.org.
11  *
12  * GROMACS is free software; you can redistribute it and/or
13  * modify it under the terms of the GNU Lesser General Public License
14  * as published by the Free Software Foundation; either version 2.1
15  * of the License, or (at your option) any later version.
16  *
17  * GROMACS is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
20  * Lesser General Public License for more details.
21  *
22  * You should have received a copy of the GNU Lesser General Public
23  * License along with GROMACS; if not, see
24  * http://www.gnu.org/licenses, or write to the Free Software Foundation,
25  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
26  *
27  * If you want to redistribute modifications to GROMACS, please
28  * consider that scientific software is very special. Version
29  * control is crucial - bugs must be traceable. We will be happy to
30  * consider code for inclusion in the official distribution, but
31  * derived work must not be called official GROMACS. Details are found
32  * in the README & COPYING files - if they are missing, get the
33  * official version at http://www.gromacs.org.
34  *
35  * To help us fund GROMACS development, we humbly ask that you cite
36  * the research papers on the package. Check out http://www.gromacs.org.
37  */
38
39 #include "atoms.h"
40 #include "idef.h"
41 #include "block.h"
42 #include "simple.h"
43 #include "symtab.h"
44
45 #ifdef __cplusplus
46 extern "C" {
47 #endif
48
49 enum {
50   egcTC,    egcENER,   egcACC, egcFREEZE, 
51   egcUser1, egcUser2,  egcVCM, egcXTC,
52   egcORFIT, egcQMMM,
53   egcNR 
54 };
55
56 typedef struct {
57   char          **name;         /* Name of the molecule type            */
58   t_atoms       atoms;          /* The atoms                            */
59   t_ilist       ilist[F_NRE];
60   t_block       cgs;            /* The charge groups                    */
61   t_blocka      excls;          /* The exclusions                       */
62 } gmx_moltype_t;
63
64 typedef struct {
65   int           type;           /* The molcule type index in mtop.moltype */
66   int           nmol;           /* The number of molecules in this block  */
67   int           natoms_mol;     /* The number of atoms in one molecule    */
68   int           nposres_xA;     /* The number of posres coords for top A  */
69   rvec          *posres_xA;     /* The posres coords for top A            */
70   int           nposres_xB;     /* The number of posres coords for top B  */
71   rvec          *posres_xB;     /* The posres coords for top B            */
72 } gmx_molblock_t;
73
74 typedef struct {
75   t_grps         grps[egcNR];   /* Groups of things                     */
76   int            ngrpname;      /* Number of groupnames                 */
77   char           ***grpname;    /* Names of the groups                  */
78   int            ngrpnr[egcNR];
79   unsigned char  *grpnr[egcNR]; /* Group numbers or NULL                */
80 } gmx_groups_t;
81
82 /* This macro gives the group number of group type egc for atom i.
83  * This macro is useful, since the grpnr pointers are NULL
84  * for group types that have all entries 0.
85  */
86 #define ggrpnr(groups,egc,i) ((groups)->grpnr[egc] ? (groups)->grpnr[egc][i] : 0)
87
88 /* The global, complete system topology struct, based on molecule types.
89    This structure should contain no data that is O(natoms) in memory. */
90 typedef struct {
91   char           **name;        /* Name of the topology                 */
92   gmx_ffparams_t ffparams;
93   int            nmoltype;
94   gmx_moltype_t  *moltype;
95   int            nmolblock;
96   gmx_molblock_t *molblock;
97   int            natoms;
98   int            maxres_renum;  /* Parameter for residue numbering      */
99   int            maxresnr;      /* The maximum residue number in moltype */
100   t_atomtypes    atomtypes;     /* Atomtype properties                  */
101   t_block        mols;          /* The molecules                        */
102   gmx_groups_t   groups;
103   t_symtab       symtab;        /* The symbol table                     */
104 } gmx_mtop_t;
105
106 /* The mdrun node-local topology struct, completely written out */
107 typedef struct {
108   t_idef        idef;           /* The interaction function definition  */
109   t_atomtypes   atomtypes;      /* Atomtype properties                  */
110   t_block       cgs;            /* The charge groups                    */
111   t_blocka      excls;          /* The exclusions                       */
112 } gmx_localtop_t;
113
114 /* The old topology struct, completely written out, used in analysis tools */
115 typedef struct {
116   char          **name;         /* Name of the topology                 */
117   t_idef        idef;           /* The interaction function definition  */
118   t_atoms       atoms;          /* The atoms                            */
119   t_atomtypes   atomtypes;      /* Atomtype properties                  */
120   t_block       cgs;            /* The charge groups                    */
121   t_block       mols;           /* The molecules                        */
122   t_blocka      excls;          /* The exclusions                       */
123   t_symtab      symtab;         /* The symbol table                     */
124 } t_topology;
125
126 #ifdef __cplusplus
127 }
128 #endif
129