48#include "rnemd/RNEMDParameters.hpp"
54namespace OpenMD::RNEMD {
56 RNEMDParameters::RNEMDParameters() {
57 DefineOptionalParameterWithDefaultValue(UseRNEMD,
"useRNEMD",
false);
58 DefineOptionalParameterWithDefaultValue(ObjectSelection,
"objectSelection",
61 DefineOptionalParameterWithDefaultValue(Method,
"method",
"VSS");
62 DefineOptionalParameter(FluxType,
"fluxType");
64 DefineOptionalParameterWithDefaultValue(ExchangeTime,
"exchangeTime",
66 DefineOptionalParameter(KineticFlux,
"kineticFlux");
67 DefineOptionalParameter(ParticleFlux,
"particleFlux");
68 DefineOptionalParameter(CurrentDensity,
"currentDensity");
69 DefineOptionalParameter(MomentumFlux,
"momentumFlux");
70 DefineOptionalParameter(MomentumFluxVector,
"momentumFluxVector");
71 DefineOptionalParameter(AngularMomentumFlux,
"angularMomentumFlux");
72 DefineOptionalParameter(AngularMomentumFluxVector,
73 "angularMomentumFluxVector");
74 DefineOptionalParameter(SlabWidth,
"slabWidth");
75 DefineOptionalParameter(SlabACenter,
"slabAcenter");
76 DefineOptionalParameter(SlabBCenter,
"slabBcenter");
77 DefineOptionalParameter(SphereARadius,
"sphereAradius");
78 DefineOptionalParameter(SphereBRadius,
"sphereBradius");
79 DefineOptionalParameter(SelectionA,
"selectionA");
80 DefineOptionalParameter(SelectionB,
"selectionB");
81 DefineOptionalParameter(CoordinateOrigin,
"coordinateOrigin");
82 DefineOptionalParameter(OutputFileName,
"outputFileName");
83 DefineOptionalParameterWithDefaultValue(OutputBins,
"outputBins", 20);
84 DefineOptionalParameterWithDefaultValue(OutputBinWidth,
"outputBinWidth",
86 DefineOptionalParameter(OutputSelection,
"outputSelection");
87 DefineOptionalParameter(OutputFields,
"outputFields");
88 DefineOptionalParameter(DividingArea,
"dividingArea");
89 DefineOptionalParameterWithDefaultValue(PrivilegedAxis,
"privilegedAxis",
91 DefineOptionalParameterWithDefaultValue(SPFScalingPower,
"spfScalingPower",
93 DefineOptionalParameterWithDefaultValue(SPFUniformKineticScaling,
94 "spfUniformKineticScaling",
false);
97 void RNEMDParameters::validate() {
98 CheckParameter(ExchangeTime, isPositive());
99 CheckParameter(OutputBins, isPositive());
100 CheckParameter(OutputBinWidth, isPositive());
101 CheckParameter(Method,
102 isEqualIgnoreCase(
"Swap") || isEqualIgnoreCase(
"NIVS") ||
103 isEqualIgnoreCase(
"VSS") || isEqualIgnoreCase(
"SPF"));
106 isEqualIgnoreCase(
"KE") || isEqualIgnoreCase(
"Px") ||
107 isEqualIgnoreCase(
"Py") || isEqualIgnoreCase(
"Pz") ||
108 isEqualIgnoreCase(
"Lx") || isEqualIgnoreCase(
"Ly") ||
109 isEqualIgnoreCase(
"Lz") || isEqualIgnoreCase(
"Pvector") ||
110 isEqualIgnoreCase(
"Lvector") || isEqualIgnoreCase(
"KE+Px") ||
111 isEqualIgnoreCase(
"KE+Py") || isEqualIgnoreCase(
"KE+Lx") ||
112 isEqualIgnoreCase(
"KE+Ly") || isEqualIgnoreCase(
"KE+Lz") ||
113 isEqualIgnoreCase(
"KE+Pvector") ||
114 isEqualIgnoreCase(
"KE+Lvector") || isEqualIgnoreCase(
"Particle") ||
115 isEqualIgnoreCase(
"Particle+KE") ||
116 isEqualIgnoreCase(
"CurrentDensity"));
117 CheckParameter(PrivilegedAxis, isEqualIgnoreCase(
"x") ||
118 isEqualIgnoreCase(
"y") ||
119 isEqualIgnoreCase(
"z"));
122 bool RNEMDParameters::requiresElectricField() {
123 static bool wasParsed {
false};
126 StringTokenizer tokenizer(getOutputFields(),
" ,;|\t\n\r");
128 while (tokenizer.hasMoreTokens()) {
129 std::string token(tokenizer.nextToken());
132 if (token ==
"ELECTRICFIELD" || token ==
"ELECTROSTATICPOTENTIAL") {
133 calculateElectricField_ =
true;
141 return calculateElectricField_;