3 * This source code is part of
7 * GROningen MAchine for Chemical Simulations
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.
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.
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.
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.
30 * For more info, check our website at http://www.gromacs.org
33 * GRoups of Organic Molecules in ACtion for Science
40 #include "types/idef.h"
41 #include "types/mdatom.h"
42 #include "types/fcdata.h"
43 #include "types/graph.h"
44 #include "types/pbc.h"
51 typedef real
t_ifunc(int nbonds
,const t_iatom iatoms
[],
52 const t_iparams iparams
[],
53 const rvec x
[],rvec f
[],rvec fshift
[],
54 const t_pbc
*pbc
,const t_graph
*g
,
55 real lambda
,real
*dvdlambda
,
56 const t_mdatoms
*md
,t_fcdata
*fcd
,
60 * The function type t_ifunc() calculates one interaction, using iatoms[]
61 * and iparams. Within the function the number of atoms to be used is
62 * known. Within the function only the atomid part of the iatoms[] array
63 * is supplied, not the type field (see also t_ilist). The function
64 * returns the potential energy. If pbc==NULL the coordinates in x are
65 * assumed to be such that no calculation of PBC is necessary,
66 * If pbc!=NULL a full PBC calculation is performed.
67 * If g!=NULL it is used for determining the shift forces.
68 * With domain decomposition ddgatindex can be used for getting global
69 * atom numbers for warnings and error messages.
70 * ddgatindex is NULL when domain decomposition is not used.
76 #define IF_CONSTRAINT 1<<2
77 #define IF_CHEMBOND 1<<3
80 #define IF_TABULATED 1<<6
81 #define IF_LIMZERO 1<<7
82 /* These flags tell to some of the routines what can be done with this
84 * With IF_BOND a bonded interaction will be calculated.
85 * With IF_BTYPE grompp can convert the bond to a Morse potential.
86 * With IF_BTYPE or IF_ATYPE the bond/angle can be converted to
87 * a constraint or used for vsite parameter determination by grompp.
88 * IF_LIMZERO indicates that for a bonded interaction the potential
89 * does goes to zero for large distances, thus if such an interaction
90 * it not assigned to any node by the domain decompostion, the simulation
91 * still continue, if mdrun has been told so.
95 const char *name
; /* the name of this function */
96 const char *longname
; /* The name for printing etc. */
97 int nratoms
; /* nr of atoms needed for this function */
98 int nrfpA
,nrfpB
; /* number of parameters for this function. */
99 /* this corresponds to the number of params in */
100 /* iparams struct! (see idef.h) */
101 /* A and B are for normal and free energy components respectively. */
102 unsigned long flags
; /* Flags (see above) */
103 int nrnb_ind
; /* index for nrnb (-1 if unknown) */
104 t_ifunc
*ifunc
; /* the function it self */
105 } t_interaction_function
;
107 #define NRFPA(ftype) (interaction_function[(ftype)].nrfpA)
108 #define NRFPB(ftype) (interaction_function[(ftype)].nrfpB)
109 #define NRFP(ftype) (NRFPA(ftype)+NRFPB(ftype))
110 #define NRAL(ftype) (interaction_function[(ftype)].nratoms)
112 #define IS_CHEMBOND(ftype) (interaction_function[(ftype)].nratoms==2 && (interaction_function[(ftype)].flags & IF_CHEMBOND))
113 /* IS_CHEMBOND tells if function type ftype represents a chemical bond */
115 /* IS_ANGLE tells if a function type ftype represents an angle
116 * Per Larsson, 2007-11-06
118 #define IS_ANGLE(ftype) (interaction_function[(ftype)].nratoms==3 && (interaction_function[(ftype)].flags & IF_ATYPE))
119 #define IS_VSITE(ftype) (interaction_function[(ftype)].flags & IF_VSITE)
121 #define IS_TABULATED(ftype) (interaction_function[(ftype)].flags & IF_TABULATED)
123 extern const t_interaction_function interaction_function
[F_NRE
];
124 /* initialised interaction functions descriptor */