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,2015,2016,2017 by the GROMACS development team. 7 * Copyright (c) 2018,2019,2020, by the GROMACS development team, led by 8 * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, 9 * and including many others, as listed in the AUTHORS file in the 10 * top-level source 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 /*! \file 39 * \brief 40 * Declares enumerated types used throughout the code. 41 * 42 * \author David van der Spoel <david.vanderspoel@icm.uu.se> 43 * \inpublicapi 44 * \ingroup module_mdtypes 45 */ 46 #ifndef GMX_MDTYPES_MD_ENUMS_H 47 #define GMX_MDTYPES_MD_ENUMS_H 48 49 #include "gromacs/utility/basedefinitions.h" 50 51 /*! \brief Return a string from a list of strings 52 * 53 * If index if within 0 .. max_index-1 returns the corresponding string 54 * or "no name defined" otherwise, in other words this is a range-check that does 55 * not crash. 56 * \param[in] index The index in the array 57 * \param[in] max_index The length of the array 58 * \param[in] names The array 59 * \return the correct string or "no name defined" 60 */ 61 const char* enum_name(int index, int max_index, const char* names[]); 62 63 //! Boolean strings no or yes 64 extern const char* yesno_names[BOOL_NR + 1]; 65 66 //! \brief The two compartments for CompEL setups. 67 enum eCompartment 68 { 69 eCompA, 70 eCompB, 71 eCompNR 72 }; 73 74 /*! \brief The channels that define with their COM the compartment boundaries in CompEL setups. 75 * 76 * In principle one could also use modified setups with more than two channels. 77 */ 78 enum eChannel 79 { 80 eChan0, 81 eChan1, 82 eChanNR 83 }; 84 85 /*! \brief Temperature coupling type 86 * 87 * yes is an alias for berendsen 88 */ 89 enum 90 { 91 etcNO, 92 etcBERENDSEN, 93 etcNOSEHOOVER, 94 etcYES, 95 etcANDERSEN, 96 etcANDERSENMASSIVE, 97 etcVRESCALE, 98 etcNR 99 }; 100 //! Strings corresponding to temperatyre coupling types 101 extern const char* etcoupl_names[etcNR + 1]; 102 //! Macro for selecting t coupling string 103 #define ETCOUPLTYPE(e) enum_name(e, etcNR, etcoupl_names) 104 //! Return whether this is andersen coupling 105 #define ETC_ANDERSEN(e) (((e) == etcANDERSENMASSIVE) || ((e) == etcANDERSEN)) 106 107 /*! \brief Pressure coupling types 108 * 109 * isotropic is an alias for berendsen 110 */ 111 enum 112 { 113 epcNO, 114 epcBERENDSEN, 115 epcPARRINELLORAHMAN, 116 epcISOTROPIC, 117 epcMTTK, 118 epcCRESCALE, 119 epcNR 120 }; 121 //! String corresponding to pressure coupling algorithm 122 extern const char* epcoupl_names[epcNR + 1]; 123 //! Macro to return the correct pcoupling string 124 #define EPCOUPLTYPE(e) enum_name(e, epcNR, epcoupl_names) 125 126 //! Flat-bottom posres geometries 127 enum 128 { 129 efbposresZERO, 130 efbposresSPHERE, 131 efbposresCYLINDER, 132 efbposresX, 133 efbposresY, 134 efbposresZ, 135 efbposresCYLINDERX, 136 efbposresCYLINDERY, 137 efbposresCYLINDERZ, 138 efbposresNR 139 }; 140 141 //! Relative coordinate scaling type for position restraints. 142 enum 143 { 144 erscNO, 145 erscALL, 146 erscCOM, 147 erscNR 148 }; 149 //! String corresponding to relativ coordinate scaling. 150 extern const char* erefscaling_names[erscNR + 1]; 151 //! Macro to select correct coordinate scaling string. 152 #define EREFSCALINGTYPE(e) enum_name(e, erscNR, erefscaling_names) 153 154 //! Trotter decomposition extended variable parts. 155 enum 156 { 157 etrtNONE, 158 etrtNHC, 159 etrtBAROV, 160 etrtBARONHC, 161 etrtNHC2, 162 etrtBAROV2, 163 etrtBARONHC2, 164 etrtVELOCITY1, 165 etrtVELOCITY2, 166 etrtPOSITION, 167 etrtSKIPALL, 168 etrtNR 169 }; 170 171 //! Sequenced parts of the trotter decomposition. 172 enum 173 { 174 ettTSEQ0, 175 ettTSEQ1, 176 ettTSEQ2, 177 ettTSEQ3, 178 ettTSEQ4, 179 ettTSEQMAX 180 }; 181 182 //! Pressure coupling type 183 enum 184 { 185 epctISOTROPIC, 186 epctSEMIISOTROPIC, 187 epctANISOTROPIC, 188 epctSURFACETENSION, 189 epctNR 190 }; 191 //! String corresponding to pressure coupling type 192 extern const char* epcoupltype_names[epctNR + 1]; 193 //! Macro to select the right string for pcoupl type 194 #define EPCOUPLTYPETYPE(e) enum_name(e, epctNR, epcoupltype_names) 195 196 //! \\brief Cutoff scheme 197 enum 198 { 199 ecutsVERLET, 200 ecutsGROUP, 201 ecutsNR 202 }; 203 //! String corresponding to cutoff scheme 204 extern const char* ecutscheme_names[ecutsNR + 1]; 205 //! Macro to select the right string for cutoff scheme 206 #define ECUTSCHEME(e) enum_name(e, ecutsNR, ecutscheme_names) 207 208 /*! \brief Coulomb / VdW interaction modifiers. 209 * 210 * grompp replaces eintmodPOTSHIFT_VERLET_UNSUPPORTED by eintmodPOTSHIFT. 211 * Exactcutoff is only used by Reaction-field-zero, and is not user-selectable. 212 */ 213 enum eintmod 214 { 215 eintmodPOTSHIFT_VERLET_UNSUPPORTED, 216 eintmodPOTSHIFT, 217 eintmodNONE, 218 eintmodPOTSWITCH, 219 eintmodEXACTCUTOFF, 220 eintmodFORCESWITCH, 221 eintmodNR 222 }; 223 //! String corresponding to interaction modifiers 224 extern const char* eintmod_names[eintmodNR + 1]; 225 //! Macro to select the correct string for modifiers 226 #define INTMODIFIER(e) enum_name(e, eintmodNR, eintmod_names) 227 228 /*! \brief Cut-off treatment for Coulomb */ 229 enum 230 { 231 eelCUT, 232 eelRF, 233 eelGRF_NOTUSED, 234 eelPME, 235 eelEWALD, 236 eelP3M_AD, 237 eelPOISSON, 238 eelSWITCH, 239 eelSHIFT, 240 eelUSER, 241 eelGB_NOTUSED, 242 eelRF_NEC_UNSUPPORTED, 243 eelENCADSHIFT_NOTUSED, 244 eelPMEUSER, 245 eelPMESWITCH, 246 eelPMEUSERSWITCH, 247 eelRF_ZERO, 248 eelNR 249 }; 250 //! String corresponding to Coulomb treatment 251 extern const char* eel_names[eelNR + 1]; 252 //! Macro for correct string for Coulomb treatment 253 #define EELTYPE(e) enum_name(e, eelNR, eel_names) 254 255 //! Ewald geometry. 256 enum 257 { 258 eewg3D, 259 eewg3DC, 260 eewgNR 261 }; 262 //! String corresponding to Ewald geometry 263 extern const char* eewg_names[eewgNR + 1]; 264 265 //! Macro telling us whether we use reaction field 266 #define EEL_RF(e) \ 267 ((e) == eelRF || (e) == eelGRF_NOTUSED || (e) == eelRF_NEC_UNSUPPORTED || (e) == eelRF_ZERO) 268 269 //! Macro telling us whether we use PME 270 #define EEL_PME(e) \ 271 ((e) == eelPME || (e) == eelPMESWITCH || (e) == eelPMEUSER || (e) == eelPMEUSERSWITCH || (e) == eelP3M_AD) 272 //! Macro telling us whether we use PME or full Ewald 273 #define EEL_PME_EWALD(e) (EEL_PME(e) || (e) == eelEWALD) 274 //! Macro telling us whether we use full electrostatics of any sort 275 #define EEL_FULL(e) (EEL_PME_EWALD(e) || (e) == eelPOISSON) 276 //! Macro telling us whether we use user defined electrostatics 277 #define EEL_USER(e) ((e) == eelUSER || (e) == eelPMEUSER || (e) == (eelPMEUSERSWITCH)) 278 279 //! Van der Waals interaction treatment 280 enum 281 { 282 evdwCUT, 283 evdwSWITCH, 284 evdwSHIFT, 285 evdwUSER, 286 evdwENCADSHIFT_UNUSED, 287 evdwPME, 288 evdwNR 289 }; 290 //! String corresponding to Van der Waals treatment 291 extern const char* evdw_names[evdwNR + 1]; 292 //! Macro for selecting correct string for VdW treatment 293 #define EVDWTYPE(e) enum_name(e, evdwNR, evdw_names) 294 295 //! Type of long-range VdW treatment of combination rules 296 enum 297 { 298 eljpmeGEOM, 299 eljpmeLB, 300 eljpmeNR 301 }; 302 //! String for LJPME combination rule treatment 303 extern const char* eljpme_names[eljpmeNR + 1]; 304 //! Macro for correct LJPME comb rule name 305 #define ELJPMECOMBNAMES(e) enum_name(e, eljpmeNR, eljpme_names) 306 307 //! Macro to tell us whether we use LJPME 308 #define EVDW_PME(e) ((e) == evdwPME) 309 310 /*! \brief Integrator algorithm 311 * 312 * eiSD2 has been removed, but we keep a renamed enum entry, 313 * so we can refuse to do MD with such .tpr files. 314 * eiVV is normal velocity verlet 315 * eiVVAK uses 1/2*(KE(t-dt/2)+KE(t+dt/2)) as the kinetic energy, 316 * and the half step kinetic energy for temperature control 317 */ 318 enum 319 { 320 eiMD, 321 eiSteep, 322 eiCG, 323 eiBD, 324 eiSD2_REMOVED, 325 eiNM, 326 eiLBFGS, 327 eiTPI, 328 eiTPIC, 329 eiSD1, 330 eiVV, 331 eiVVAK, 332 eiMimic, 333 eiNR 334 }; 335 //! Name of the integrator algorithm 336 extern const char* ei_names[eiNR + 1]; 337 //! Macro returning integrator string 338 #define EI(e) enum_name(e, eiNR, ei_names) 339 //! Do we use MiMiC QM/MM? 340 #define EI_MIMIC(e) ((e) == eiMimic) 341 //! Do we use velocity Verlet 342 #define EI_VV(e) ((e) == eiVV || (e) == eiVVAK) 343 //! Do we use molecular dynamics 344 #define EI_MD(e) ((e) == eiMD || EI_VV(e) || EI_MIMIC(e)) 345 //! Do we use stochastic dynamics 346 #define EI_SD(e) ((e) == eiSD1) 347 //! Do we use any stochastic integrator 348 #define EI_RANDOM(e) (EI_SD(e) || (e) == eiBD) 349 /*above integrators may not conserve momenta*/ 350 //! Do we use any type of dynamics 351 #define EI_DYNAMICS(e) (EI_MD(e) || EI_RANDOM(e)) 352 //! Or do we use minimization 353 #define EI_ENERGY_MINIMIZATION(e) ((e) == eiSteep || (e) == eiCG || (e) == eiLBFGS) 354 //! Do we apply test particle insertion 355 #define EI_TPI(e) ((e) == eiTPI || (e) == eiTPIC) 356 //! Do we deal with particle velocities 357 #define EI_STATE_VELOCITY(e) (EI_MD(e) || EI_SD(e)) 358 359 //! Constraint algorithm 360 enum 361 { 362 econtLINCS, 363 econtSHAKE, 364 econtNR 365 }; 366 //! String corresponding to constraint algorithm 367 extern const char* econstr_names[econtNR + 1]; 368 //! Macro to select the correct string 369 #define ECONSTRTYPE(e) enum_name(e, econtNR, econstr_names) 370 371 //! Distance restraint refinement algorithm 372 enum 373 { 374 edrNone, 375 edrSimple, 376 edrEnsemble, 377 edrNR 378 }; 379 //! String corresponding to distance restraint algorithm 380 extern const char* edisre_names[edrNR + 1]; 381 //! Macro to select the right disre algorithm string 382 #define EDISRETYPE(e) enum_name(e, edrNR, edisre_names) 383 384 //! Distance restraints weighting type 385 enum 386 { 387 edrwConservative, 388 edrwEqual, 389 edrwNR 390 }; 391 //! String corresponding to distance restraint weighting 392 extern const char* edisreweighting_names[edrwNR + 1]; 393 //! Macro corresponding to dr weighting 394 #define EDISREWEIGHTING(e) enum_name(e, edrwNR, edisreweighting_names) 395 396 //! Combination rule algorithm. 397 enum 398 { 399 eCOMB_NONE, 400 eCOMB_GEOMETRIC, 401 eCOMB_ARITHMETIC, 402 eCOMB_GEOM_SIG_EPS, 403 eCOMB_NR 404 }; 405 //! String for combination rule algorithm 406 extern const char* ecomb_names[eCOMB_NR + 1]; 407 //! Macro to select the comb rule string 408 #define ECOMBNAME(e) enum_name(e, eCOMB_NR, ecomb_names) 409 410 //! Van der Waals potential. 411 enum 412 { 413 eNBF_NONE, 414 eNBF_LJ, 415 eNBF_BHAM, 416 eNBF_NR 417 }; 418 //! String corresponding to Van der Waals potential 419 extern const char* enbf_names[eNBF_NR + 1]; 420 //! Macro for correct VdW potential string 421 #define ENBFNAME(e) enum_name(e, eNBF_NR, enbf_names) 422 423 //! Simulated tempering methods. 424 enum 425 { 426 esimtempGEOMETRIC, 427 esimtempEXPONENTIAL, 428 esimtempLINEAR, 429 esimtempNR 430 }; 431 //! String corresponding to simulated tempering 432 extern const char* esimtemp_names[esimtempNR + 1]; 433 //! Macro for correct tempering string 434 #define ESIMTEMP(e) enum_name(e, esimtempNR, esimtemp_names) 435 436 /*! \brief Free energy perturbation type 437 * 438 * efepNO, there are no evaluations at other states. 439 * efepYES, treated equivalently to efepSTATIC. 440 * efepSTATIC, then lambdas do not change during the simulation. 441 * efepSLOWGROWTH, then the states change monotonically 442 * throughout the simulation. 443 * efepEXPANDED, then expanded ensemble simulations are occuring. 444 */ 445 enum 446 { 447 efepNO, 448 efepYES, 449 efepSTATIC, 450 efepSLOWGROWTH, 451 efepEXPANDED, 452 efepNR 453 }; 454 //! String corresponding to FEP type. 455 extern const char* efep_names[efepNR + 1]; 456 //! Macro corresponding to FEP string. 457 #define EFEPTYPE(e) enum_name(e, efepNR, efep_names) 458 459 //! Free energy pertubation coupling types. 460 enum 461 { 462 efptFEP, 463 efptMASS, 464 efptCOUL, 465 efptVDW, 466 efptBONDED, 467 efptRESTRAINT, 468 efptTEMPERATURE, 469 efptNR 470 }; 471 //! String for FEP coupling type 472 extern const char* efpt_names[efptNR + 1]; 473 //! Long names for FEP coupling type 474 extern const char* efpt_singular_names[efptNR + 1]; 475 476 /*! \brief What to print for free energy calculations 477 * 478 * Printing the energy to the free energy dhdl file. 479 * YES is an alias to TOTAL, and 480 * will be converted in readir, so we never have to account for it in code. 481 */ 482 enum 483 { 484 edHdLPrintEnergyNO, 485 edHdLPrintEnergyTOTAL, 486 edHdLPrintEnergyPOTENTIAL, 487 edHdLPrintEnergyYES, 488 edHdLPrintEnergyNR 489 }; 490 //! String corresponding to printing of free energy 491 extern const char* edHdLPrintEnergy_names[edHdLPrintEnergyNR + 1]; 492 493 /*! \brief How the lambda weights are calculated 494 * 495 * elamstatsMETROPOLIS - using the metropolis criteria 496 * elamstatsBARKER - using the Barker critera for transition weights, 497 * also called unoptimized Bennett 498 * elamstatsMINVAR - using Barker + minimum variance for weights 499 * elamstatsWL - Wang-Landu (using visitation counts) 500 * elamstatsWWL - Weighted Wang-Landau (using optimized Gibbs 501 * weighted visitation counts) 502 */ 503 enum 504 { 505 elamstatsNO, 506 elamstatsMETROPOLIS, 507 elamstatsBARKER, 508 elamstatsMINVAR, 509 elamstatsWL, 510 elamstatsWWL, 511 elamstatsNR 512 }; 513 //! String corresponding to lambda weights 514 extern const char* elamstats_names[elamstatsNR + 1]; 515 //! Macro telling us whether we use expanded ensemble 516 #define ELAMSTATS_EXPANDED(e) ((e) > elamstatsNO) 517 //! Macro telling us whether we use some kind of Wang-Landau 518 #define EWL(e) ((e) == elamstatsWL || (e) == elamstatsWWL) 519 520 /*! \brief How moves in lambda are calculated 521 * 522 * elmovemcMETROPOLIS - using the Metropolis criteria, and 50% up and down 523 * elmovemcBARKER - using the Barker criteria, and 50% up and down 524 * elmovemcGIBBS - computing the transition using the marginalized 525 * probabilities of the lambdas 526 * elmovemcMETGIBBS - computing the transition using the metropolized 527 * version of Gibbs (Monte Carlo Strategies in 528 * Scientific computing, Liu, p. 134) 529 */ 530 enum 531 { 532 elmcmoveNO, 533 elmcmoveMETROPOLIS, 534 elmcmoveBARKER, 535 elmcmoveGIBBS, 536 elmcmoveMETGIBBS, 537 elmcmoveNR 538 }; 539 //! String corresponding to lambda moves 540 extern const char* elmcmove_names[elmcmoveNR + 1]; 541 542 /*! \brief How we decide whether weights have reached equilibrium 543 * 544 * elmceqNO - never stop, weights keep going 545 * elmceqYES - fix the weights from the beginning; no movement 546 * elmceqWLDELTA - stop when the WL-delta falls below a certain level 547 * elmceqNUMATLAM - stop when we have a certain number of samples at 548 * every step 549 * elmceqSTEPS - stop when we've run a certain total number of steps 550 * elmceqSAMPLES - stop when we've run a certain total number of samples 551 * elmceqRATIO - stop when the ratio of samples (lowest to highest) 552 * is sufficiently large 553 */ 554 enum 555 { 556 elmceqNO, 557 elmceqYES, 558 elmceqWLDELTA, 559 elmceqNUMATLAM, 560 elmceqSTEPS, 561 elmceqSAMPLES, 562 elmceqRATIO, 563 elmceqNR 564 }; 565 //! String corresponding to equilibrium algorithm 566 extern const char* elmceq_names[elmceqNR + 1]; 567 568 /*! \brief separate_dhdl_file selection 569 * 570 * NOTE: YES is the first one. Do NOT interpret this one as a gmx_bool 571 */ 572 enum 573 { 574 esepdhdlfileYES, 575 esepdhdlfileNO, 576 esepdhdlfileNR 577 }; 578 //! String corresponding to separate DHDL file selection 579 extern const char* separate_dhdl_file_names[esepdhdlfileNR + 1]; 580 //! Monster macro for DHDL file selection 581 #define SEPDHDLFILETYPE(e) enum_name(e, esepdhdlfileNR, separate_dhdl_file_names) 582 583 /*! \brief dhdl_derivatives selection \ 584 * 585 * NOTE: YES is the first one. Do NOT interpret this one as a gmx_bool 586 */ 587 enum 588 { 589 edhdlderivativesYES, 590 edhdlderivativesNO, 591 edhdlderivativesNR 592 }; 593 //! String for DHDL derivatives 594 extern const char* dhdl_derivatives_names[edhdlderivativesNR + 1]; 595 //! YAMM (Yet another monster macro) 596 #define DHDLDERIVATIVESTYPE(e) enum_name(e, edhdlderivativesNR, dhdl_derivatives_names) 597 598 /*! \brief Solvent model 599 * 600 * Distinguishes classical water types with 3 or 4 particles 601 */ 602 enum 603 { 604 esolNO, 605 esolSPC, 606 esolTIP4P, 607 esolNR 608 }; 609 //! String corresponding to solvent type 610 extern const char* esol_names[esolNR + 1]; 611 //! Macro lest we print the wrong solvent model string 612 #define ESOLTYPE(e) enum_name(e, esolNR, esol_names) 613 614 //! Dispersion correction. 615 enum 616 { 617 edispcNO, 618 edispcEnerPres, 619 edispcEner, 620 edispcAllEnerPres, 621 edispcAllEner, 622 edispcNR 623 }; 624 //! String corresponding to dispersion corrections 625 extern const char* edispc_names[edispcNR + 1]; 626 //! Macro for dispcorr string 627 #define EDISPCORR(e) enum_name(e, edispcNR, edispc_names) 628 629 //! Center of mass motion removal algorithm. 630 enum 631 { 632 ecmLINEAR, 633 ecmANGULAR, 634 ecmNO, 635 ecmLINEAR_ACCELERATION_CORRECTION, 636 ecmNR 637 }; 638 //! String corresponding to COM removal 639 extern const char* ecm_names[ecmNR + 1]; 640 //! Macro for COM removal string 641 #define ECOM(e) enum_name(e, ecmNR, ecm_names) 642 643 //! Algorithm for simulated annealing. 644 enum 645 { 646 eannNO, 647 eannSINGLE, 648 eannPERIODIC, 649 eannNR 650 }; 651 //! String for simulated annealing 652 extern const char* eann_names[eannNR + 1]; 653 //! And macro for simulated annealing string 654 #define EANNEAL(e) enum_name(e, eannNR, eann_names) 655 656 //! Wall types. 657 enum 658 { 659 ewt93, 660 ewt104, 661 ewtTABLE, 662 ewt126, 663 ewtNR 664 }; 665 //! String corresponding to wall type 666 extern const char* ewt_names[ewtNR + 1]; 667 //! Macro for wall type string 668 #define EWALLTYPE(e) enum_name(e, ewtNR, ewt_names) 669 670 //! Pulling algorithm. 671 enum 672 { 673 epullUMBRELLA, 674 epullCONSTRAINT, 675 epullCONST_F, 676 epullFLATBOTTOM, 677 epullFLATBOTTOMHIGH, 678 epullEXTERNAL, 679 epullNR 680 }; 681 //! String for pulling algorithm 682 extern const char* epull_names[epullNR + 1]; 683 //! Macro for pulling string 684 #define EPULLTYPE(e) enum_name(e, epullNR, epull_names) 685 686 //! Control of pull groups 687 enum 688 { 689 epullgDIST, 690 epullgDIR, 691 epullgCYL, 692 epullgDIRPBC, 693 epullgDIRRELATIVE, 694 epullgANGLE, 695 epullgDIHEDRAL, 696 epullgANGLEAXIS, 697 epullgNR 698 }; 699 //! String for pull groups 700 extern const char* epullg_names[epullgNR + 1]; 701 //! Macro for pull group string 702 #define EPULLGEOM(e) enum_name(e, epullgNR, epullg_names) 703 704 //! Enforced rotation groups. 705 enum 706 { 707 erotgISO, 708 erotgISOPF, 709 erotgPM, 710 erotgPMPF, 711 erotgRM, 712 erotgRMPF, 713 erotgRM2, 714 erotgRM2PF, 715 erotgFLEX, 716 erotgFLEXT, 717 erotgFLEX2, 718 erotgFLEX2T, 719 erotgNR 720 }; 721 //! Rotation group names 722 extern const char* erotg_names[erotgNR + 1]; 723 //! Macro for rot group names 724 #define EROTGEOM(e) enum_name(e, erotgNR, erotg_names) 725 //! String for rotation group origin names 726 extern const char* erotg_originnames[erotgNR + 1]; 727 //! Macro for rot group origin names 728 #define EROTORIGIN(e) enum_name(e, erotgOriginNR, erotg_originnames) 729 730 //! Rotation group fitting type 731 enum 732 { 733 erotgFitRMSD, 734 erotgFitNORM, 735 erotgFitPOT, 736 erotgFitNR 737 }; 738 //! String corresponding to rotation group fitting 739 extern const char* erotg_fitnames[erotgFitNR + 1]; 740 //! Macro for rot group fit names 741 #define EROTFIT(e) enum_name(e, erotgFitNR, erotg_fitnames) 742 743 /*! \brief Direction along which ion/water swaps happen 744 * 745 * Part of "Computational Electrophysiology" (CompEL) setups 746 */ 747 enum eSwaptype 748 { 749 eswapNO, 750 eswapX, 751 eswapY, 752 eswapZ, 753 eSwapTypesNR 754 }; 755 //! Names for swapping 756 extern const char* eSwapTypes_names[eSwapTypesNR + 1]; 757 //! Macro for swapping string 758 #define ESWAPTYPE(e) enum_name(e, eSwapTypesNR, eSwapTypes_names) 759 760 /*! \brief Swap group splitting type 761 * 762 * These are just the fixed groups we need for any setup. In t_swap's grp 763 * entry after that follows the variable number of swap groups. 764 */ 765 enum 766 { 767 eGrpSplit0, 768 eGrpSplit1, 769 eGrpSolvent, 770 eSwapFixedGrpNR 771 }; 772 //! String for swap group splitting 773 extern const char* eSwapFixedGrp_names[eSwapFixedGrpNR + 1]; 774 775 /*! \brief Neighborlist geometry type. 776 * 777 * Kernels will compute interactions between two particles, 778 * 3-center water, 4-center water or coarse-grained beads. 779 */ 780 enum gmx_nblist_kernel_geometry 781 { 782 GMX_NBLIST_GEOMETRY_PARTICLE_PARTICLE, 783 GMX_NBLIST_GEOMETRY_WATER3_PARTICLE, 784 GMX_NBLIST_GEOMETRY_WATER3_WATER3, 785 GMX_NBLIST_GEOMETRY_WATER4_PARTICLE, 786 GMX_NBLIST_GEOMETRY_WATER4_WATER4, 787 GMX_NBLIST_GEOMETRY_CG_CG, 788 GMX_NBLIST_GEOMETRY_NR 789 }; 790 //! String corresponding to nblist geometry names 791 extern const char* gmx_nblist_geometry_names[GMX_NBLIST_GEOMETRY_NR + 1]; 792 793 /*! \brief Types of electrostatics calculations 794 * 795 * Types of electrostatics calculations available inside nonbonded kernels. 796 * Note that these do NOT necessarily correspond to the user selections 797 * in the MDP file; many interactions for instance map to tabulated kernels. 798 */ 799 enum gmx_nbkernel_elec 800 { 801 GMX_NBKERNEL_ELEC_NONE, 802 GMX_NBKERNEL_ELEC_COULOMB, 803 GMX_NBKERNEL_ELEC_REACTIONFIELD, 804 GMX_NBKERNEL_ELEC_CUBICSPLINETABLE, 805 GMX_NBKERNEL_ELEC_EWALD, 806 GMX_NBKERNEL_ELEC_NR 807 }; 808 //! String corresponding to electrostatics kernels 809 extern const char* gmx_nbkernel_elec_names[GMX_NBKERNEL_ELEC_NR + 1]; 810 811 /*! \brief Types of vdw calculations available 812 * 813 * Types of vdw calculations available inside nonbonded kernels. 814 * Note that these do NOT necessarily correspond to the user selections 815 * in the MDP file; many interactions for instance map to tabulated kernels. 816 */ 817 enum gmx_nbkernel_vdw 818 { 819 GMX_NBKERNEL_VDW_NONE, 820 GMX_NBKERNEL_VDW_LENNARDJONES, 821 GMX_NBKERNEL_VDW_BUCKINGHAM, 822 GMX_NBKERNEL_VDW_CUBICSPLINETABLE, 823 GMX_NBKERNEL_VDW_LJEWALD, 824 GMX_NBKERNEL_VDW_NR 825 }; 826 //! String corresponding to VdW kernels 827 extern const char* gmx_nbkernel_vdw_names[GMX_NBKERNEL_VDW_NR + 1]; 828 829 //! \brief Types of interactions inside the neighborlist 830 enum gmx_nblist_interaction_type 831 { 832 GMX_NBLIST_INTERACTION_STANDARD, 833 GMX_NBLIST_INTERACTION_FREE_ENERGY, 834 GMX_NBLIST_INTERACTION_NR 835 }; 836 //! String corresponding to interactions in neighborlist code 837 extern const char* gmx_nblist_interaction_names[GMX_NBLIST_INTERACTION_NR + 1]; 838 839 #endif /* GMX_MDTYPES_MD_ENUMS_H */ 840