Merge release-4-6 into master
[alexxy/gromacs.git] / src / gromacs / gmxpreprocess / toppush.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  *                        VERSION 3.2.0
10  * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
11  * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
12  * Copyright (c) 2001-2004, The GROMACS development team,
13  * check out http://www.gromacs.org for more information.
14
15  * This program is free software; you can redistribute it and/or
16  * modify it under the terms of the GNU General Public License
17  * as published by the Free Software Foundation; either version 2
18  * of the License, or (at your option) any later version.
19  *
20  * If you want to redistribute modifications, please consider that
21  * scientific software is very special. Version control is crucial -
22  * bugs must be traceable. We will be happy to consider code for
23  * inclusion in the official distribution, but derived work must not
24  * be called official GROMACS. Details are found in the README & COPYING
25  * files - if they are missing, get the official version at www.gromacs.org.
26  *
27  * To help us fund GROMACS development, we humbly ask that you cite
28  * the papers on the package - you can find them in the top README file.
29  *
30  * For more info, check our website at http://www.gromacs.org
31  *
32  * And Hey:
33  * Gallium Rubidium Oxygen Manganese Argon Carbon Silicon
34  */
35
36 #ifndef _toppush_h
37 #define _toppush_h
38
39 #include "typedefs.h"
40 #include "toputil.h"
41 #include "gpp_atomtype.h"
42 #include "gpp_bond_atomtype.h"
43 #include "warninp.h"
44
45 typedef struct {
46     int       nr;   /* The number of entries in the list            */
47     int       nra2; /* The total number of entries in a                 */
48     atom_id  *nra;  /* The number of entries in each a array (dim nr)   */
49     atom_id **a;    /* The atom numbers (dim nr) the length of each element     */
50     /* i is nra[i]                                              */
51 } t_block2;
52
53 extern void generate_nbparams(int comb, int funct, t_params plist[],
54                               gpp_atomtype_t atype,
55                               warninp_t wi);
56
57 extern void push_at (t_symtab *symtab, gpp_atomtype_t at,
58                      t_bond_atomtype bat, char *line, int nb_funct,
59                      t_nbparam ***nbparam, t_nbparam ***pair,
60                      warninp_t wi);
61
62 extern void push_bt(directive d, t_params bt[], int nral,
63                     gpp_atomtype_t at, t_bond_atomtype bat, char *line,
64                     warninp_t wi);
65
66 extern void push_dihedraltype(directive d, t_params bt[],
67                               t_bond_atomtype bat, char *line,
68                               warninp_t wi);
69
70 extern void push_cmaptype(directive d, t_params bt[], int nral, gpp_atomtype_t at,
71                           t_bond_atomtype bat, char *line,
72                           warninp_t wi);
73
74 extern void push_nbt(directive d, t_nbparam **nbt, gpp_atomtype_t atype,
75                      char *plines, int nb_funct,
76                      warninp_t wi);
77
78 void
79 push_gb_params(gpp_atomtype_t atype,
80                char          *line,
81                warninp_t      wi);
82
83 extern void push_atom(t_symtab      *symtab,
84                       t_block       *cgs,
85                       t_atoms       *at,
86                       gpp_atomtype_t atype,
87                       char          *line,
88                       int           *lastcg,
89                       warninp_t      wi);
90
91 extern void push_bond(directive d, t_params bondtype[], t_params bond[],
92                       t_atoms *at, gpp_atomtype_t atype, char *line,
93                       gmx_bool bBonded, gmx_bool bGenPairs, real fudgeQQ,
94                       gmx_bool bZero, gmx_bool *bWarn_copy_A_B,
95                       warninp_t wi);
96
97 extern void push_cmap(directive d, t_params bondtype[], t_params bond[],
98                       t_atoms *at, gpp_atomtype_t atype, char *line,
99                       gmx_bool *bWarn_copy_A_B,
100                       warninp_t wi);
101
102 extern void push_vsitesn(directive d, t_params bondtype[], t_params bond[],
103                          t_atoms *at, gpp_atomtype_t atype, char *line,
104                          warninp_t wi);
105
106 extern void push_mol(int nrmols, t_molinfo mols[], char *pline,
107                      int *whichmol, int *nrcopies,
108                      warninp_t wi);
109
110 extern void push_molt(t_symtab *symtab, int *nmol, t_molinfo **mol, char *line,
111                       warninp_t wi);
112
113 extern void init_block2(t_block2 *b2, int natom);
114
115 extern void done_block2(t_block2 *b2);
116
117 extern void push_excl(char *line, t_block2 *b2);
118
119 extern void merge_excl(t_blocka *excl, t_block2 *b2);
120
121 extern void b_to_b2(t_blocka *b, t_block2 *b2);
122
123 extern void b2_to_b(t_block2 *b2, t_blocka *b);
124
125 extern int add_atomtype_decoupled(t_symtab *symtab, gpp_atomtype_t at,
126                                   t_nbparam ***nbparam, t_nbparam ***pair);
127 /* Add an atom type with all parameters set to zero (no interactions).
128  * Returns the atom type number.
129  */
130
131 extern void convert_moltype_couple(t_molinfo *mol, int atomtype_decouple,
132                                    real fudgeQQ,
133                                    int couple_lam0, int couple_lam1,
134                                    gmx_bool bCoupleIntra,
135                                    int nb_funct, t_params *nbp);
136 /* Setup mol such that the B-state has no interaction with the rest
137  * of the system, but full interaction with itself.
138  */
139
140 #endif  /* _toppush_h */