2 * This file is part of the GROMACS molecular simulation package.
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,2021, 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.
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.
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.
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.
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.
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.
42 #include "gromacs/utility/enumerationhelpers.h"
44 const char* enum_name(int index, int max_index, const char* const names[])
46 if (index < 0 || index >= max_index)
48 static const char* undef = "no name defined";
57 const char* enumValueToString(IntegrationAlgorithm enumValue)
59 static constexpr gmx::EnumerationArray<IntegrationAlgorithm, const char*> interationAlgorithmNames = {
60 "md", "steep", "cg", "bd", "sd2 - removed", "nm", "l-bfgs",
61 "tpi", "tpic", "sd", "md-vv", "md-vv-avek", "mimic"
63 return interationAlgorithmNames[enumValue];
66 const char* enumValueToString(CoulombInteractionType enumValue)
68 static constexpr gmx::EnumerationArray<CoulombInteractionType, const char*> coloumbTreatmentNames = {
71 "Generalized-Reaction-Field (unused)",
79 "Generalized-Born (unused)",
80 "Reaction-Field-nec (unsupported)",
81 "Encad-shift (unused)",
87 return coloumbTreatmentNames[enumValue];
90 const char* enumValueToString(EwaldGeometry enumValue)
92 static constexpr gmx::EnumerationArray<EwaldGeometry, const char*> ewaldGeometryNames = {
95 return ewaldGeometryNames[enumValue];
98 const char* enumValueToString(LongRangeVdW enumValue)
100 static constexpr gmx::EnumerationArray<LongRangeVdW, const char*> longRangeVdWNames = {
101 "Geometric", "Lorentz-Berthelot"
103 return longRangeVdWNames[enumValue];
106 const char* enumValueToString(VanDerWaalsType enumValue)
108 static constexpr gmx::EnumerationArray<VanDerWaalsType, const char*> vanDerWaalsTypeNames = {
109 "Cut-off", "Switch", "Shift", "User", "Encad-shift (unused)", "PME"
111 return vanDerWaalsTypeNames[enumValue];
114 const char* enumValueToString(ConstraintAlgorithm enumValue)
116 static constexpr gmx::EnumerationArray<ConstraintAlgorithm, const char*> constraintAlgorithmNames = {
119 return constraintAlgorithmNames[enumValue];
122 const char* enumValueToString(InteractionModifiers enumValue)
124 static constexpr gmx::EnumerationArray<InteractionModifiers, const char*> interactionModifierNames = {
125 "Potential-shift-Verlet", "Potential-shift", "None",
126 "Potential-switch", "Exact-cutoff", "Force-switch"
128 return interactionModifierNames[enumValue];
131 const char* enumValueToString(TemperatureCoupling enumValue)
133 static constexpr gmx::EnumerationArray<TemperatureCoupling, const char*> temperatureCouplingNames = {
134 "No", "Berendsen", "Nose-Hoover", "yes", "Andersen", "Andersen-massive", "V-rescale"
135 }; /* yes is alias for berendsen */
136 return temperatureCouplingNames[enumValue];
139 const char* enumValueToString(PressureCoupling enumValue)
141 static constexpr gmx::EnumerationArray<PressureCoupling, const char*> pressureCouplingNames = {
142 "No", "Berendsen", "Parrinello-Rahman", "Isotropic", "MTTK", "C-rescale"
143 }; /* isotropic is alias for berendsen */
144 return pressureCouplingNames[enumValue];
147 const char* enumValueToString(Boolean enumValue)
149 static constexpr gmx::EnumerationArray<Boolean, const char*> booleanNames = { "no", "yes" };
150 return booleanNames[enumValue];
153 const char* booleanValueToString(bool value)
155 Boolean enumValue = value ? Boolean::Yes : Boolean::No;
156 return enumValueToString(enumValue);
159 const char* enumValueToString(RefCoordScaling enumValue)
161 static constexpr gmx::EnumerationArray<RefCoordScaling, const char*> refCoordScalingNames = {
164 return refCoordScalingNames[enumValue];
167 const char* enumValueToString(CutoffScheme enumValue)
169 static constexpr gmx::EnumerationArray<CutoffScheme, const char*> cutoffSchemeNames = {
172 return cutoffSchemeNames[enumValue];
175 const char* enumValueToString(PressureCouplingType enumValue)
177 static constexpr gmx::EnumerationArray<PressureCouplingType, const char*> pressureCouplingTypeNames = {
178 "Isotropic", "Semiisotropic", "Anisotropic", "Surface-Tension"
180 return pressureCouplingTypeNames[enumValue];
183 const char* enumValueToString(DistanceRestraintRefinement enumValue)
185 static constexpr gmx::EnumerationArray<DistanceRestraintRefinement, const char*> distanceRestraintRefinementNames = {
186 "No", "Simple", "Ensemble"
188 return distanceRestraintRefinementNames[enumValue];
191 const char* enumValueToString(DistanceRestraintWeighting enumValue)
193 static constexpr gmx::EnumerationArray<DistanceRestraintWeighting, const char*> distanceRestraintWeightingNames = {
194 "Conservative", "Equal"
196 return distanceRestraintWeightingNames[enumValue];
199 const char* enumValueToString(VanDerWaalsPotential enumValue)
201 static constexpr gmx::EnumerationArray<VanDerWaalsPotential, const char*> vanDerWaalsPotentialNames = {
202 "None", "LJ", "Buckingham"
204 return vanDerWaalsPotentialNames[enumValue];
207 const char* enumValueToString(CombinationRule enumValue)
209 static constexpr gmx::EnumerationArray<CombinationRule, const char*> combinationRuleNames = {
210 "None", "Geometric", "Arithmetic", "GeomSigEps"
212 return combinationRuleNames[enumValue];
215 const char* enumValueToString(SimulatedTempering enumValue)
217 static constexpr gmx::EnumerationArray<SimulatedTempering, const char*> simulatedTemperingNames = {
218 "geometric", "exponential", "linear"
220 return simulatedTemperingNames[enumValue];
223 const char* enumValueToString(FreeEnergyPerturbationType enumValue)
225 static constexpr gmx::EnumerationArray<FreeEnergyPerturbationType, const char*> freeEnergyPerturbationTypeNames = {
226 "no", "yes", "static", "slow-growth", "expanded"
228 return freeEnergyPerturbationTypeNames[enumValue];
231 const char* enumValueToString(FreeEnergyPerturbationCouplingType enumValue)
233 static constexpr gmx::EnumerationArray<FreeEnergyPerturbationCouplingType, const char*> freeEnergyPerturbationCouplingTypeNames = {
234 "fep-lambdas", "mass-lambdas", "coul-lambdas", "vdw-lambdas",
235 "bonded-lambdas", "restraint-lambdas", "temperature-lambdas"
237 return freeEnergyPerturbationCouplingTypeNames[enumValue];
240 const char* enumValueToStringSingular(FreeEnergyPerturbationCouplingType enumValue)
242 static constexpr gmx::EnumerationArray<FreeEnergyPerturbationCouplingType, const char*> freeEnergyPerturbationCouplingTypeNames = {
243 "fep-lambda", "mass-lambda", "coul-lambda", "vdw-lambda",
244 "bonded-lambda", "restraint-lambda", "temperature-lambda"
246 return freeEnergyPerturbationCouplingTypeNames[enumValue];
249 const char* enumValueToString(FreeEnergyPrintEnergy enumValue)
251 static constexpr gmx::EnumerationArray<FreeEnergyPrintEnergy, const char*> freeEnergyPrintNames = {
252 "no", "total", "potential", "yes"
254 return freeEnergyPrintNames[enumValue];
257 const char* enumValueToString(LambdaWeightCalculation enumValue)
259 static constexpr gmx::EnumerationArray<LambdaWeightCalculation, const char*> lambdaWeightCalculationNames = {
260 "no", "metropolis-transition", "barker-transition",
261 "minvar", "wang-landau", "weighted-wang-landau"
263 return lambdaWeightCalculationNames[enumValue];
266 const char* enumValueToString(LambdaMoveCalculation enumValue)
268 static constexpr gmx::EnumerationArray<LambdaMoveCalculation, const char*> lambdaMoveCalculationNames = {
269 "no", "metropolis", "barker", "gibbs", "metropolized-gibbs"
271 return lambdaMoveCalculationNames[enumValue];
274 const char* enumValueToString(LambdaWeightWillReachEquilibrium enumValue)
276 static constexpr gmx::EnumerationArray<LambdaWeightWillReachEquilibrium, const char*> lambdaWeightEquilibriumNames = {
277 "no", "yes", "wl-delta", "number-all-lambda", "number-steps", "number-samples",
280 return lambdaWeightEquilibriumNames[enumValue];
283 const char* enumValueToString(SeparateDhdlFile enumValue)
285 static constexpr gmx::EnumerationArray<SeparateDhdlFile, const char*> separateDhdlFileNames = {
288 return separateDhdlFileNames[enumValue];
291 const char* enumValueToString(DhDlDerivativeCalculation enumValue)
293 static constexpr gmx::EnumerationArray<DhDlDerivativeCalculation, const char*> dhdlDerivativeCalculationNames = {
296 return dhdlDerivativeCalculationNames[enumValue];
299 const char* enumValueToString(SolventModel enumValue)
301 static constexpr gmx::EnumerationArray<SolventModel, const char*> solventModelNames = {
304 return solventModelNames[enumValue];
307 const char* enumValueToString(DispersionCorrectionType enumValue)
309 static constexpr gmx::EnumerationArray<DispersionCorrectionType, const char*> dispersionCorrectionTypeNames = {
310 "No", "EnerPres", "Ener", "AllEnerPres", "AllEner"
312 return dispersionCorrectionTypeNames[enumValue];
315 const char* enumValueToString(ComRemovalAlgorithm enumValue)
317 static constexpr gmx::EnumerationArray<ComRemovalAlgorithm, const char*> comRemovalAlgorithmNames = {
318 "Linear", "Angular", "None", "Linear-acceleration-correction"
320 return comRemovalAlgorithmNames[enumValue];
323 const char* enumValueToString(SimulatedAnnealing enumValue)
325 static constexpr gmx::EnumerationArray<SimulatedAnnealing, const char*> simulatedAnnealingNames = {
326 "No", "Single", "Periodic"
328 return simulatedAnnealingNames[enumValue];
331 const char* enumValueToString(WallType enumValue)
333 static constexpr gmx::EnumerationArray<WallType, const char*> wallTypeNames = {
334 "9-3", "10-4", "table", "12-6"
336 return wallTypeNames[enumValue];
339 const char* enumValueToString(PullingAlgorithm enumValue)
341 static constexpr gmx::EnumerationArray<PullingAlgorithm, const char*> pullAlgorithmNames = {
342 "umbrella", "constraint", "constant-force",
343 "flat-bottom", "flat-bottom-high", "external-potential"
345 return pullAlgorithmNames[enumValue];
348 const char* enumValueToString(PullGroupGeometry enumValue)
350 static constexpr gmx::EnumerationArray<PullGroupGeometry, const char*> pullGroupControlNames = {
351 "distance", "direction", "cylinder", "direction-periodic",
352 "direction-relative", "angle", "dihedral", "angle-axis"
354 return pullGroupControlNames[enumValue];
357 const char* enumValueToString(EnforcedRotationGroupType enumValue)
359 static constexpr gmx::EnumerationArray<EnforcedRotationGroupType, const char*> enforcedRotationGroupNames = {
360 "iso", "iso-pf", "pm", "pm-pf", "rm", "rm-pf",
361 "rm2", "rm2-pf", "flex", "flex-t", "flex2", "flex2-t"
363 return enforcedRotationGroupNames[enumValue];
366 const char* enumValueToString(RotationGroupFitting enumValue)
368 static constexpr gmx::EnumerationArray<RotationGroupFitting, const char*> rotationGroupFittingNames = {
369 "rmsd", "norm", "potential"
371 return rotationGroupFittingNames[enumValue];
374 const char* enumValueToString(SwapType enumValue)
376 static constexpr gmx::EnumerationArray<SwapType, const char*> swapTypeNames = {
379 return swapTypeNames[enumValue];
382 const char* enumValueToString(SwapGroupSplittingType enumValue)
384 static constexpr gmx::EnumerationArray<SwapGroupSplittingType, const char*> swapGroupSplittingTypeNames = {
385 "Split0", "Split1", "Solvent"
387 return swapGroupSplittingTypeNames[enumValue];
390 const char* enumValueToString(NbkernelElecType enumValue)
392 static constexpr gmx::EnumerationArray<NbkernelElecType, const char*> nbkernelElecTypeNames = {
393 "None", "Coulomb", "Reaction-Field", "Cubic-Spline-Table", "Ewald"
395 return nbkernelElecTypeNames[enumValue];
398 const char* enumValueToString(NbkernelVdwType enumValue)
400 static constexpr gmx::EnumerationArray<NbkernelVdwType, const char*> nbkernelVdwTypeNames = {
401 "None", "Lennard-Jones", "Buckingham", "Cubic-Spline-Table", "LJEwald"
403 return nbkernelVdwTypeNames[enumValue];