Project

General

Profile

enums.h

added elmcmoveAIM as an enum for lmc move - Christopher Mirabzadeh, 11/02/2015 11:15 PM

 
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
 * Copyright (c) 2013,2014, by the GROMACS development team, led by
7
 * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
8
 * and including many others, as listed in the AUTHORS file in the
9
 * top-level source directory and at http://www.gromacs.org.
10
 *
11
 * GROMACS is free software; you can redistribute it and/or
12
 * modify it under the terms of the GNU Lesser General Public License
13
 * as published by the Free Software Foundation; either version 2.1
14
 * of the License, or (at your option) any later version.
15
 *
16
 * GROMACS is distributed in the hope that it will be useful,
17
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19
 * Lesser General Public License for more details.
20
 *
21
 * You should have received a copy of the GNU Lesser General Public
22
 * License along with GROMACS; if not, see
23
 * http://www.gnu.org/licenses, or write to the Free Software Foundation,
24
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
25
 *
26
 * If you want to redistribute modifications to GROMACS, please
27
 * consider that scientific software is very special. Version
28
 * control is crucial - bugs must be traceable. We will be happy to
29
 * consider code for inclusion in the official distribution, but
30
 * derived work must not be called official GROMACS. Details are found
31
 * in the README & COPYING files - if they are missing, get the
32
 * official version at http://www.gromacs.org.
33
 *
34
 * To help us fund GROMACS development, we humbly ask that you cite
35
 * the research papers on the package. Check out http://www.gromacs.org.
36
 */
37

    
38
#ifndef ENUMS_H_
39
#define ENUMS_H_
40

    
41
#ifdef __cplusplus
42
extern "C" {
43
#endif
44
#if 0
45
} /* fixes auto-indentation problems */
46
#endif
47

    
48
/* note: these enums should correspond to the names in gmxlib/names.c */
49

    
50
enum {
51
    epbcXYZ, epbcNONE, epbcXY, epbcSCREW, epbcNR
52
};
53

    
54
enum {
55
    etcNO, etcBERENDSEN, etcNOSEHOOVER, etcYES, etcANDERSEN, etcANDERSENMASSIVE, etcVRESCALE, etcNR
56
}; /* yes is an alias for berendsen */
57

    
58
#define ETC_ANDERSEN(e) (((e) == etcANDERSENMASSIVE) || ((e) == etcANDERSEN))
59

    
60
enum {
61
    epcNO, epcBERENDSEN, epcPARRINELLORAHMAN, epcISOTROPIC, epcMTTK, epcNR
62
}; /* isotropic is an alias for berendsen */
63

    
64
/* trotter decomposition extended variable parts */
65
enum {
66
    etrtNONE, etrtNHC, etrtBAROV, etrtBARONHC, etrtNHC2, etrtBAROV2, etrtBARONHC2,
67
    etrtVELOCITY1, etrtVELOCITY2, etrtPOSITION, etrtSKIPALL, etrtNR
68
};
69

    
70
/* sequenced parts of the trotter decomposition */
71
enum {
72
    ettTSEQ0,  ettTSEQ1,  ettTSEQ2,  ettTSEQ3,  ettTSEQ4, ettTSEQMAX
73
};
74

    
75
enum {
76
    epctISOTROPIC, epctSEMIISOTROPIC, epctANISOTROPIC,
77
    epctSURFACETENSION, epctNR
78
};
79

    
80
enum {
81
    erscNO, erscALL, erscCOM, erscNR
82
};
83

    
84
enum {
85
    ecutsVERLET, ecutsGROUP, ecutsNR
86
};
87

    
88
/* Coulomb / VdW interaction modifiers.
89
 * grompp replaces eintmodPOTSHIFT_VERLET by eintmodPOTSHIFT or eintmodNONE.
90
 * Exactcutoff is only used by Reaction-field-zero, and is not user-selectable.
91
 */
92
enum eintmod {
93
    eintmodPOTSHIFT_VERLET, eintmodPOTSHIFT, eintmodNONE, eintmodPOTSWITCH, eintmodEXACTCUTOFF, eintmodFORCESWITCH, eintmodNR
94
};
95

    
96
/*
97
 * eelNOTUSED1 used to be GB, but to enable generalized born with different
98
 * forms of electrostatics (RF, switch, etc.) in the future it is now selected
99
 * separately (through the implicit_solvent option).
100
 */
101
enum {
102
    eelCUT,     eelRF,     eelGRF,   eelPME,  eelEWALD,  eelP3M_AD,
103
    eelPOISSON, eelSWITCH, eelSHIFT, eelUSER, eelGB_NOTUSED, eelRF_NEC, eelENCADSHIFT,
104
    eelPMEUSER, eelPMESWITCH, eelPMEUSERSWITCH, eelRF_ZERO, eelNR
105
};
106

    
107
/* Ewald geometry */
108
enum {
109
    eewg3D, eewg3DC, eewgNR
110
};
111

    
112
#define EEL_RF(e) ((e) == eelRF || (e) == eelGRF || (e) == eelRF_NEC || (e) == eelRF_ZERO )
113

    
114
#define EEL_PME(e)  ((e) == eelPME || (e) == eelPMESWITCH || (e) == eelPMEUSER || (e) == eelPMEUSERSWITCH || (e) == eelP3M_AD)
115
#define EEL_PME_EWALD(e) (EEL_PME(e) || (e) == eelEWALD)
116
#define EEL_FULL(e) (EEL_PME_EWALD(e) || (e) == eelPOISSON)
117

    
118
#define EEL_USER(e) ((e) == eelUSER || (e) == eelPMEUSER || (e) == (eelPMEUSERSWITCH))
119

    
120
enum {
121
    evdwCUT, evdwSWITCH, evdwSHIFT, evdwUSER, evdwENCADSHIFT,
122
    evdwPME, evdwNR
123
};
124

    
125
enum {
126
    eljpmeGEOM, eljpmeLB, eljpmeNR
127
};
128

    
129
#define EVDW_PME(e) ((e) == evdwPME)
130

    
131
enum {
132
    ensGRID, ensSIMPLE, ensNR
133
};
134

    
135
/* eiVV is normal velocity verlet -- eiVVAK uses 1/2*(KE(t-dt/2)+KE(t+dt/2)) as the kinetic energy, and the half step kinetic
136
   energy for temperature control */
137

    
138
enum {
139
    eiMD, eiSteep, eiCG, eiBD, eiSD2, eiNM, eiLBFGS, eiTPI, eiTPIC, eiSD1, eiVV, eiVVAK, eiNR
140
};
141
#define EI_VV(e) ((e) == eiVV || (e) == eiVVAK)
142
#define EI_MD(e) ((e) == eiMD || EI_VV(e))
143
#define EI_SD(e) ((e) == eiSD1 || (e) == eiSD2)
144
#define EI_RANDOM(e) (EI_SD(e) || (e) == eiBD)
145
/*above integrators may not conserve momenta*/
146
#define EI_DYNAMICS(e) (EI_MD(e) || EI_SD(e) || (e) == eiBD)
147
#define EI_ENERGY_MINIMIZATION(e) ((e) == eiSteep || (e) == eiCG || (e) == eiLBFGS)
148
#define EI_TPI(e) ((e) == eiTPI || (e) == eiTPIC)
149

    
150
#define EI_STATE_VELOCITY(e) (EI_MD(e) || EI_SD(e))
151

    
152
enum {
153
    econtLINCS, econtSHAKE, econtNR
154
};
155

    
156
enum {
157
    edrNone, edrSimple, edrEnsemble, edrNR
158
};
159

    
160
enum {
161
    edrwConservative, edrwEqual, edrwNR
162
};
163

    
164
/* Combination rule things */
165
enum {
166
    eCOMB_NONE, eCOMB_GEOMETRIC, eCOMB_ARITHMETIC, eCOMB_GEOM_SIG_EPS, eCOMB_NR
167
};
168

    
169
/* NBF selection */
170
enum {
171
    eNBF_NONE, eNBF_LJ, eNBF_BHAM, eNBF_NR
172
};
173

    
174
/* simulated tempering methods */
175
enum {
176
    esimtempGEOMETRIC, esimtempEXPONENTIAL, esimtempLINEAR, esimtempNR
177
};
178
/* FEP selection */
179
enum {
180
    efepNO, efepYES, efepSTATIC, efepSLOWGROWTH, efepEXPANDED, efepNR
181
};
182
/* if efepNO, there are no evaluations at other states.
183
   if efepYES, treated equivalently to efepSTATIC.
184
   if efepSTATIC, then lambdas do not change during the simulation.
185
   if efepSLOWGROWTH, then the states change monotonically throughout the simulation.
186
   if efepEXPANDED, then expanded ensemble simulations are occuring.
187
 */
188

    
189
/* FEP coupling types */
190
enum {
191
    efptFEP, efptMASS, efptCOUL, efptVDW, efptBONDED, efptRESTRAINT, efptTEMPERATURE, efptNR
192
};
193

    
194
/* Printing the energy to the free energy dhdl file. YES is an alias to TOTAL, and
195
 * will be converted in readir, so we never have to account for it in code.
196
 */
197
enum {
198
    edHdLPrintEnergyNO, edHdLPrintEnergyTOTAL, edHdLPrintEnergyPOTENTIAL, edHdLPrintEnergyYES, edHdLPrintEnergyNR
199
};
200

    
201
/* How the lambda weights are calculated:
202
   elamstatsMETROPOLIS = using the metropolis criteria
203
   elamstatsBARKER = using the Barker critera for transition weights - also called unoptimized Bennett
204
   elamstatsMINVAR = using Barker + minimum variance for weights
205
   elamstatsWL = Wang-Landu (using visitation counts)
206
   elamstatsWWL = Weighted Wang-Landau (using optimized gibbs weighted visitation counts)
207
 */
208
enum {
209
    elamstatsNO, elamstatsMETROPOLIS, elamstatsBARKER, elamstatsMINVAR, elamstatsWL, elamstatsWWL, elamstatsNR
210
};
211

    
212
#define ELAMSTATS_EXPANDED(e) ((e) > elamstatsNO)
213

    
214
#define EWL(e) ((e) == elamstatsWL || (e) == elamstatsWWL)
215

    
216
/* How moves in lambda are calculated:
217
   elmovemcMETROPOLIS - using the Metropolis criteria, and 50% up and down
218
   elmovemcBARKER - using the Barker criteria, and 50% up and down
219
   elmovemcGIBBS - computing the transition using the marginalized probabilities of the lambdas
220
   elmovemcMETGIBBS - computing the transition using the metropolized version of Gibbs (Monte Carlo Strategies in Scientific computing, Liu, p. 134)
221
   elmcmoveAIM - using metropolis and AIM criteria to make lambda moves
222
 */
223
enum {
224
    elmcmoveNO, elmcmoveMETROPOLIS, elmcmoveBARKER, elmcmoveGIBBS, elmcmoveMETGIBBS, elmcmoveAIM, elmcmoveNR
225
};
226

    
227
/* how we decide whether weights have reached equilibrium
228
   elmceqNO - never stop, weights keep going
229
   elmceqYES - fix the weights from the beginning; no movement
230
   elmceqWLDELTA - stop when the WL-delta falls below a certain level
231
   elmceqNUMATLAM - stop when we have a certain number of samples at every step
232
   elmceqSTEPS - stop when we've run a certain total number of steps
233
   elmceqSAMPLES - stop when we've run a certain total number of samples
234
   elmceqRATIO - stop when the ratio of samples (lowest to highest) is sufficiently large
235
 */
236
enum {
237
    elmceqNO, elmceqYES, elmceqWLDELTA, elmceqNUMATLAM, elmceqSTEPS, elmceqSAMPLES, elmceqRATIO, elmceqNR
238
};
239

    
240
/* separate_dhdl_file selection */
241
enum
242
{
243
    /* NOTE: YES is the first one. Do NOT interpret this one as a gmx_bool */
244
    esepdhdlfileYES, esepdhdlfileNO, esepdhdlfileNR
245
};
246

    
247
/* dhdl_derivatives selection */
248
enum
249
{
250
    /* NOTE: YES is the first one. Do NOT interpret this one as a gmx_bool */
251
    edhdlderivativesYES, edhdlderivativesNO, edhdlderivativesNR
252
};
253

    
254
/* Solvent model */
255
enum {
256
    esolNO, esolSPC, esolTIP4P, esolNR
257
};
258

    
259
/* Dispersion correction */
260
enum {
261
    edispcNO, edispcEnerPres, edispcEner, edispcAllEnerPres, edispcAllEner, edispcNR
262
};
263

    
264
/* Center of mass motion selection */
265
enum {
266
    ecmLINEAR, ecmANGULAR, ecmNO, ecmNR
267
};
268

    
269
/* New version of simulated annealing */
270
enum {
271
    eannNO, eannSINGLE, eannPERIODIC, eannNR
272
};
273

    
274
/* Implicit solvent algorithms */
275
enum {
276
    eisNO, eisGBSA, eisNR
277
};
278

    
279
/* Algorithms for calculating GB radii */
280
enum {
281
    egbSTILL, egbHCT, egbOBC, egbNR
282
};
283

    
284
enum {
285
    esaAPPROX, esaNO, esaSTILL, esaNR
286
};
287

    
288
/* Wall types */
289
enum {
290
    ewt93, ewt104, ewtTABLE, ewt126, ewtNR
291
};
292

    
293
/* Pull stuff */
294
enum {
295
    epullNO, epullUMBRELLA, epullCONSTRAINT, epullCONST_F, epullNR
296
};
297

    
298
enum {
299
    epullgDIST, epullgDIR, epullgCYL, epullgDIRPBC, epullgNR
300
};
301

    
302
#define PULL_CYL(pull) ((pull)->eGeom == epullgCYL)
303

    
304
/* Enforced rotation groups */
305
enum {
306
    erotgISO, erotgISOPF,
307
    erotgPM, erotgPMPF,
308
    erotgRM, erotgRMPF,
309
    erotgRM2, erotgRM2PF,
310
    erotgFLEX, erotgFLEXT,
311
    erotgFLEX2, erotgFLEX2T,
312
    erotgNR
313
};
314

    
315
enum {
316
    erotgFitRMSD, erotgFitNORM, erotgFitPOT, erotgFitNR
317
};
318

    
319
/* Direction along which ion/water swaps happen in "Computational
320
 * Electrophysiology" (CompEL) setups */
321
enum eSwaptype {
322
    eswapNO, eswapX, eswapY, eswapZ, eSwapTypesNR
323
};
324

    
325
/* QMMM */
326
enum {
327
    eQMmethodAM1, eQMmethodPM3, eQMmethodRHF,
328
    eQMmethodUHF, eQMmethodDFT, eQMmethodB3LYP, eQMmethodMP2, eQMmethodCASSCF, eQMmethodB3LYPLAN,
329
    eQMmethodDIRECT, eQMmethodNR
330
};
331

    
332
enum {
333
    eQMbasisSTO3G, eQMbasisSTO3G2, eQMbasis321G,
334
    eQMbasis321Gp, eQMbasis321dGp, eQMbasis621G,
335
    eQMbasis631G, eQMbasis631Gp, eQMbasis631dGp,
336
    eQMbasis6311G, eQMbasisNR
337
};
338

    
339
enum {
340
    eQMMMschemenormal, eQMMMschemeoniom, eQMMMschemeNR
341
};
342

    
343
enum {
344
    eMultentOptName, eMultentOptNo, eMultentOptLast, eMultentOptNR
345
};
346

    
347
/* flat-bottom posres geometries */
348
enum {
349
    efbposresZERO, efbposresSPHERE, efbposresCYLINDER, efbposresX, efbposresY, efbposresZ,
350
    efbposresNR
351
};
352

    
353
enum {
354
    eAdressOff, eAdressConst, eAdressXSplit, eAdressSphere, eAdressNR
355
};
356

    
357
enum {
358
    eAdressICOff, eAdressICThermoForce, eAdressICNR
359
};
360

    
361
enum {
362
    eAdressSITEcom, eAdressSITEcog, eAdressSITEatom, eAdressSITEatomatom, eAdressSITENR
363
};
364

    
365

    
366
/* The interactions contained in a (possibly merged) table
367
 * for computing electrostatic, VDW repulsion and/or VDW dispersion
368
 * contributions.
369
 */
370
enum gmx_table_interaction
371
{
372
    GMX_TABLE_INTERACTION_ELEC,
373
    GMX_TABLE_INTERACTION_VDWREP_VDWDISP,
374
    GMX_TABLE_INTERACTION_VDWEXPREP_VDWDISP,
375
    GMX_TABLE_INTERACTION_VDWDISP,
376
    GMX_TABLE_INTERACTION_ELEC_VDWREP_VDWDISP,
377
    GMX_TABLE_INTERACTION_ELEC_VDWEXPREP_VDWDISP,
378
    GMX_TABLE_INTERACTION_ELEC_VDWDISP,
379
    GMX_TABLE_INTERACTION_NR
380
};
381

    
382
/* Different formats for table data. Cubic spline tables are typically stored
383
 * with the four Y,F,G,H intermediate values (check tables.c for format), which
384
 * makes it easy to load with a single 4-way SIMD instruction too.
385
 * Linear tables only need one value per table point, or two if both V and F
386
 * are calculated. However, with SIMD instructions this makes the loads unaligned,
387
 * and in that case we store the data as F, D=F(i+1)-F(i), V, and then a blank value,
388
 * which again makes it possible to load as a single instruction.
389
 */
390
enum gmx_table_format
391
{
392
    GMX_TABLE_FORMAT_CUBICSPLINE_YFGH,
393
    GMX_TABLE_FORMAT_LINEAR_VF,
394
    GMX_TABLE_FORMAT_LINEAR_V,
395
    GMX_TABLE_FORMAT_LINEAR_F,
396
    GMX_TABLE_FORMAT_LINEAR_FDV0,
397
    GMX_TABLE_FORMAT_NR
398
};
399

    
400
/* Neighborlist geometry type.
401
 * Kernels will compute interactions between two particles,
402
 * 3-center water, 4-center water or coarse-grained beads.
403
 */
404
enum gmx_nblist_kernel_geometry
405
{
406
    GMX_NBLIST_GEOMETRY_PARTICLE_PARTICLE,
407
    GMX_NBLIST_GEOMETRY_WATER3_PARTICLE,
408
    GMX_NBLIST_GEOMETRY_WATER3_WATER3,
409
    GMX_NBLIST_GEOMETRY_WATER4_PARTICLE,
410
    GMX_NBLIST_GEOMETRY_WATER4_WATER4,
411
    GMX_NBLIST_GEOMETRY_CG_CG,
412
    GMX_NBLIST_GEOMETRY_NR
413
};
414

    
415
/* Types of electrostatics calculations available inside nonbonded kernels.
416
 * Note that these do NOT necessarily correspond to the user selections in the MDP file;
417
 * many interactions for instance map to tabulated kernels.
418
 */
419
enum gmx_nbkernel_elec
420
{
421
    GMX_NBKERNEL_ELEC_NONE,
422
    GMX_NBKERNEL_ELEC_COULOMB,
423
    GMX_NBKERNEL_ELEC_REACTIONFIELD,
424
    GMX_NBKERNEL_ELEC_CUBICSPLINETABLE,
425
    GMX_NBKERNEL_ELEC_GENERALIZEDBORN,
426
    GMX_NBKERNEL_ELEC_EWALD,
427
    GMX_NBKERNEL_ELEC_NR
428
};
429

    
430
/* Types of vdw calculations available inside nonbonded kernels.
431
 * Note that these do NOT necessarily correspond to the user selections in the MDP file;
432
 * many interactions for instance map to tabulated kernels.
433
 */
434
enum gmx_nbkernel_vdw
435
{
436
    GMX_NBKERNEL_VDW_NONE,
437
    GMX_NBKERNEL_VDW_LENNARDJONES,
438
    GMX_NBKERNEL_VDW_BUCKINGHAM,
439
    GMX_NBKERNEL_VDW_CUBICSPLINETABLE,
440
    GMX_NBKERNEL_VDW_LJEWALD,
441
    GMX_NBKERNEL_VDW_NR
442
};
443
/* Types of interactions inside the neighborlist
444
 */
445
enum gmx_nblist_interaction_type
446
{
447
    GMX_NBLIST_INTERACTION_STANDARD,
448
    GMX_NBLIST_INTERACTION_FREE_ENERGY,
449
    GMX_NBLIST_INTERACTION_ADRESS,
450
    GMX_NBLIST_INTERACTION_NR
451
};
452

    
453
#ifdef __cplusplus
454
}
455
#endif
456

    
457
#endif /* ENUMS_H_ */