ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/io/Globals.cpp
Revision: 1360
Committed: Mon Sep 7 16:31:51 2009 UTC (15 years, 7 months ago) by cli2
File size: 12964 byte(s)
Log Message:
Added new restraint infrastructure
Added MolecularRestraints
Added ObjectRestraints
Added RestraintStamp
Updated thermodynamic integration to use ObjectRestraints
Added Quaternion mathematics for twist swing decompositions
Significantly updated RestWriter and RestReader to use dump-like files
Added selections for x, y, and z coordinates of atoms
Removed monolithic Restraints class
Fixed a few bugs in gradients of Euler angles in DirectionalAtom and RigidBody
Added some rotational capabilities to prinicpalAxisCalculator

File Contents

# Content
1 /*
2 * Copyright (c) 2005 The University of Notre Dame. All Rights Reserved.
3 *
4 * The University of Notre Dame grants you ("Licensee") a
5 * non-exclusive, royalty free, license to use, modify and
6 * redistribute this software in source and binary code form, provided
7 * that the following conditions are met:
8 *
9 * 1. Acknowledgement of the program authors must be made in any
10 * publication of scientific results based in part on use of the
11 * program. An acceptable form of acknowledgement is citation of
12 * the article in which the program was described (Matthew
13 * A. Meineke, Charles F. Vardeman II, Teng Lin, Christopher
14 * J. Fennell and J. Daniel Gezelter, "OOPSE: An Object-Oriented
15 * Parallel Simulation Engine for Molecular Dynamics,"
16 * J. Comput. Chem. 26, pp. 252-271 (2005))
17 *
18 * 2. Redistributions of source code must retain the above copyright
19 * notice, this list of conditions and the following disclaimer.
20 *
21 * 3. Redistributions in binary form must reproduce the above copyright
22 * notice, this list of conditions and the following disclaimer in the
23 * documentation and/or other materials provided with the
24 * distribution.
25 *
26 * This software is provided "AS IS," without a warranty of any
27 * kind. All express or implied conditions, representations and
28 * warranties, including any implied warranty of merchantability,
29 * fitness for a particular purpose or non-infringement, are hereby
30 * excluded. The University of Notre Dame and its licensors shall not
31 * be liable for any damages suffered by licensee as a result of
32 * using, modifying or distributing the software or its
33 * derivatives. In no event will the University of Notre Dame or its
34 * licensors be liable for any lost revenue, profit or data, or for
35 * direct, indirect, special, consequential, incidental or punitive
36 * damages, however caused and regardless of the theory of liability,
37 * arising out of the use of or inability to use software, even if the
38 * University of Notre Dame has been advised of the possibility of
39 * such damages.
40 */
41
42 #include <stdlib.h>
43 #include <stdio.h>
44 #include <string.h>
45 #include <string>
46
47 #include "io/Globals.hpp"
48 #include "io/ParamConstraint.hpp"
49 #include "utils/MemoryUtils.hpp"
50 #include "utils/simError.h"
51
52 namespace oopse {
53 Globals::Globals() {
54 DefineParameter(ForceField, "forceField")
55
56 DefineOptionalParameter(TargetTemp, "targetTemp");
57 DefineOptionalParameter(Ensemble, "ensemble");
58 DefineOptionalParameter(Dt, "dt");
59 DefineOptionalParameter(RunTime, "runTime");
60 DefineOptionalParameter(FinalConfig, "finalConfig");
61 DefineOptionalParameter(SampleTime, "sampleTime");
62 DefineOptionalParameter(ResetTime, "resetTime");
63 DefineOptionalParameter(StatusTime, "statusTime");
64 DefineOptionalParameter(CutoffRadius, "cutoffRadius");
65 DefineOptionalParameter(SwitchingRadius, "switchingRadius");
66 DefineOptionalParameter(TempSet, "tempSet");
67 DefineOptionalParameter(ThermalTime, "thermalTime");
68 DefineOptionalParameter(TargetPressure, "targetPressure");
69 DefineOptionalParameter(TauThermostat, "tauThermostat");
70 DefineOptionalParameter(TauBarostat, "tauBarostat");
71 DefineOptionalParameter(ZconsTime, "zconsTime");
72 DefineOptionalParameter(ZconsTol, "zconsTol");
73 DefineOptionalParameter(ZconsForcePolicy, "zconsForcePolicy");
74 DefineOptionalParameter(Seed, "seed");
75 DefineOptionalParameter(Minimizer, "minimizer");
76 DefineOptionalParameter(MinimizerMaxIter,"minimizerMaxIter");
77 DefineOptionalParameter(MinimizerWriteFrq, "minimizerWriteFrq");
78 DefineOptionalParameter(MinimizerStepSize, "minimizerStepSize");
79 DefineOptionalParameter(MinimizerFTol, "minimizerFTol");
80 DefineOptionalParameter(MinimizerGTol, "minimizerGTol");
81 DefineOptionalParameter(MinimizerLSTol, "minimizerLSTol");
82 DefineOptionalParameter(MinimizerLSMaxIter, "minimizerLSMaxIter");
83 DefineOptionalParameter(ZconsGap, "zconsGap");
84 DefineOptionalParameter(ZconsFixtime, "zconsFixtime");
85 DefineOptionalParameter(ZconsUsingSMD, "zconsUsingSMD");
86 DefineOptionalParameter(ThermodynamicIntegrationLambda, "thermodynamicIntegrationLambda");
87 DefineOptionalParameter(ThermodynamicIntegrationK, "thermodynamicIntegrationK");
88 DefineOptionalParameter(ForceFieldVariant, "forceFieldVariant");
89 DefineOptionalParameter(ForceFieldFileName, "forceFieldFileName");
90 DefineOptionalParameter(DampingAlpha, "dampingAlpha");
91 DefineOptionalParameter(SurfaceTension, "surfaceTension");
92 DefineOptionalParameter(PrintPressureTensor, "printPressureTensor");
93 DefineOptionalParameter(TaggedAtomPair, "taggedAtomPair");
94 DefineOptionalParameter(PrintTaggedPairDistance, "printTaggedPairDistance");
95 DefineOptionalParameter(CutoffPolicy, "cutoffPolicy");
96 DefineOptionalParameter(SwitchingFunctionType, "switchingFunctionType");
97 DefineOptionalParameter(HydroPropFile, "HydroPropFile");
98 DefineOptionalParameter(Viscosity, "viscosity");
99 DefineOptionalParameter(BeadSize, "beadSize");
100 DefineOptionalParameter(FrozenBufferRadius, "frozenBufferRadius");
101 DefineOptionalParameter(LangevinBufferRadius, "langevinBufferRadius");
102 DefineOptionalParameter(ThermalConductivity, "thermalConductivity");
103 DefineOptionalParameter(ThermalLength, "thermalLength");
104 DefineOptionalParameter(NeighborListNeighbors,"NeighborListNeighbors");
105 DefineOptionalParameter(UseMultipleTemperatureMethod, "useMultipleTemperatureMethod");
106 DefineOptionalParameter(MTM_Ce, "MTM_Ce");
107 DefineOptionalParameter(MTM_G, "MTM_G");
108 DefineOptionalParameter(MTM_Io, "MTM_Io");
109 DefineOptionalParameter(MTM_Sigma, "MTM_Sigma");
110 DefineOptionalParameter(MTM_R, "MTM_R");
111
112
113
114 DefineOptionalParameterWithDefaultValue(UsePeriodicBoundaryConditions, "usePeriodicBoundaryConditions", true);
115 DefineOptionalParameterWithDefaultValue(UseAtomicVirial, "useAtomicVirial", true);
116 DefineOptionalParameterWithDefaultValue(UseInitalTime, "useInitialTime", false);
117 DefineOptionalParameterWithDefaultValue(UseIntialExtendedSystemState, "useInitialExtendedSystemState", false);
118 DefineOptionalParameterWithDefaultValue(OrthoBoxTolerance, "orthoBoxTolerance", 1E-6);
119 DefineOptionalParameterWithDefaultValue(ElectrostaticSummationMethod, "electrostaticSummationMethod", "SHIFTED_FORCE");
120 DefineOptionalParameterWithDefaultValue(ElectrostaticScreeningMethod, "electrostaticScreeningMethod", "DAMPED");
121 DefineOptionalParameterWithDefaultValue(Dielectric, "dielectric", 78.5);
122 DefineOptionalParameterWithDefaultValue(CompressDumpFile, "compressDumpFile", 0);
123 DefineOptionalParameterWithDefaultValue(OutputForceVector, "outputForceVector", 0);
124 DefineOptionalParameterWithDefaultValue(SkinThickness, "skinThickness", 1.0);
125 DefineOptionalParameterWithDefaultValue(StatFileFormat, "statFileFormat", "TIME|TOTAL_ENERGY|POTENTIAL_ENERGY|KINETIC_ENERGY|TEMPERATURE|PRESSURE|VOLUME|CONSERVED_QUANTITY");
126 DefineOptionalParameterWithDefaultValue(UseSphericalBoundaryConditions, "useSphericalBoundaryConditions", false);
127 DefineOptionalParameterWithDefaultValue(AccumulateBoxDipole, "accumulateBoxDipole", false);
128
129 DefineOptionalParameterWithDefaultValue(UseRNEMD, "useRNEMD", false);
130 DefineOptionalParameterWithDefaultValue(RNEMD_swapTime, "RNEMD_swapTime", 100.0);
131 DefineOptionalParameterWithDefaultValue(RNEMD_nBins, "RNEMD_nBins", 16);
132 DefineOptionalParameterWithDefaultValue(RNEMD_swapType, "RNEMD_swapType", "Kinetic");
133 DefineOptionalParameterWithDefaultValue(RNEMD_objectSelection, "RNEMD_objectSelection", "select all");
134 DefineOptionalParameterWithDefaultValue(UseRestraints, "useRestraints", false);
135 DefineOptionalParameterWithDefaultValue(Restraint_file, "Restraint_file", "idealCrystal.in");
136 DefineOptionalParameterWithDefaultValue(UseThermodynamicIntegration, "useThermodynamicIntegration", false);
137
138
139 deprecatedKeywords_.insert("nComponents");
140 deprecatedKeywords_.insert("nZconstraints");
141 deprecatedKeywords_.insert("initialConfig");
142 deprecatedKeywords_.insert("thermIntDistSpringConst");
143 deprecatedKeywords_.insert("thermIntThetaSpringConst");
144 deprecatedKeywords_.insert("thermIntOmegaSpringConst");
145 deprecatedKeywords_.insert("useSolidThermInt");
146 deprecatedKeywords_.insert("useLiquidThermInt");
147
148 }
149
150 Globals::~Globals() {
151 MemoryUtils::deletePointers(components_);
152 MemoryUtils::deletePointers(zconstraints_);
153 MemoryUtils::deletePointers(restraints_);
154 }
155
156 void Globals::validate() {
157 DataHolder::validate();
158
159 CheckParameter(ForceField, isNotEmpty());
160 CheckParameter(TargetTemp, isPositive());
161 CheckParameter(Ensemble, isEqualIgnoreCase("NVE") || isEqualIgnoreCase("NVT") || isEqualIgnoreCase("NPTi") || isEqualIgnoreCase("NPTf") || isEqualIgnoreCase("NPTxyz") || isEqualIgnoreCase("NPAT") || isEqualIgnoreCase("LANGEVINDYNAMICS") || isEqualIgnoreCase("LD") || isEqualIgnoreCase("NPRT") || isEqualIgnoreCase("NPGT") || isEqualIgnoreCase("NGammaT") || isEqualIgnoreCase("NGT") || isEqualIgnoreCase("SMIPD"));
162 CheckParameter(Dt, isPositive());
163 CheckParameter(RunTime, isPositive());
164 CheckParameter(FinalConfig, isNotEmpty());
165 CheckParameter(SampleTime, isNonNegative());
166 CheckParameter(ResetTime, isNonNegative());
167 CheckParameter(StatusTime, isNonNegative());
168 CheckParameter(CutoffRadius, isPositive());
169 CheckParameter(SwitchingRadius, isNonNegative());
170 CheckParameter(Dielectric, isPositive());
171 CheckParameter(ThermalTime, isNonNegative());
172 CheckParameter(TauThermostat, isPositive());
173 CheckParameter(TauBarostat, isPositive());
174 CheckParameter(ZconsTime, isPositive());
175 CheckParameter(ZconsTol, isPositive());
176 CheckParameter(Seed, isPositive());
177 CheckParameter(Minimizer, isEqualIgnoreCase("SD") || isEqualIgnoreCase("CG"));
178 CheckParameter(MinimizerMaxIter, isPositive());
179 CheckParameter(MinimizerWriteFrq, isPositive());
180 CheckParameter(MinimizerStepSize, isPositive());
181 CheckParameter(MinimizerFTol, isPositive());
182 CheckParameter(MinimizerGTol, isPositive());
183 CheckParameter(MinimizerLSTol, isPositive());
184 CheckParameter(MinimizerLSMaxIter, isPositive());
185 CheckParameter(ZconsGap, isPositive());
186 CheckParameter(ZconsFixtime, isPositive());
187 CheckParameter(ThermodynamicIntegrationLambda, isNonNegative());
188 CheckParameter(ThermodynamicIntegrationK, isPositive());
189 CheckParameter(ForceFieldVariant, isNotEmpty());
190 CheckParameter(ForceFieldFileName, isNotEmpty());
191 CheckParameter(ElectrostaticSummationMethod, isEqualIgnoreCase("NONE") || isEqualIgnoreCase("SHIFTED_POTENTIAL") || isEqualIgnoreCase("SHIFTED_FORCE") || isEqualIgnoreCase("REACTION_FIELD"));
192 CheckParameter(ElectrostaticScreeningMethod, isEqualIgnoreCase("UNDAMPED") || isEqualIgnoreCase("DAMPED"));
193 CheckParameter(CutoffPolicy, isEqualIgnoreCase("MIX") || isEqualIgnoreCase("MAX") || isEqualIgnoreCase("TRADITIONAL"));
194 CheckParameter(SwitchingFunctionType, isEqualIgnoreCase("CUBIC") || isEqualIgnoreCase("FIFTH_ORDER_POLYNOMIAL"));
195 //CheckParameter(StatFileFormat,);
196 CheckParameter(OrthoBoxTolerance, isPositive());
197 CheckParameter(DampingAlpha,isNonNegative());
198 CheckParameter(SkinThickness, isPositive());
199 CheckParameter(Viscosity, isNonNegative());
200 CheckParameter(ThermalConductivity, isNonNegative());
201 CheckParameter(ThermalLength, isNonNegative());
202 CheckParameter(BeadSize, isPositive());
203 CheckParameter(FrozenBufferRadius, isPositive());
204 CheckParameter(LangevinBufferRadius, isPositive());
205 CheckParameter(NeighborListNeighbors, isPositive());
206 CheckParameter(RNEMD_swapTime, isPositive());
207 CheckParameter(RNEMD_nBins, isPositive() && isEven());
208 CheckParameter(RNEMD_swapType, isEqualIgnoreCase("Kinetic") || isEqualIgnoreCase("Px") || isEqualIgnoreCase("Py") || isEqualIgnoreCase("Pz"));
209
210 for(std::vector<Component*>::iterator i = components_.begin(); i != components_.end(); ++i) {
211 if (!(*i)->findMoleculeStamp(moleculeStamps_)) {
212 std::ostringstream oss;
213 oss << "Globals Error: can not find molecule stamp for component " << (*i)->getType() << std::endl;
214 throw OOPSEException(oss.str());
215 }
216 }
217 }
218
219 bool Globals::addComponent(Component* comp) {
220 components_.push_back(comp);
221 return true;
222 }
223
224 bool Globals::addZConsStamp(ZConsStamp* zcons) {
225 zconstraints_.push_back(zcons);
226 return true;
227 }
228
229 bool Globals::addRestraintStamp(RestraintStamp* rest) {
230 restraints_.push_back(rest);
231 return true;
232 }
233
234 bool Globals::addMoleculeStamp(MoleculeStamp* molStamp) {
235 std::string molStampName = molStamp->getName();
236 std::map<std::string, MoleculeStamp*>::iterator i;
237 bool ret = false;
238 i = moleculeStamps_.find(molStampName);
239 if (i == moleculeStamps_.end()) {
240 moleculeStamps_.insert(std::map<std::string, MoleculeStamp*>::value_type(molStampName, molStamp));
241 ret = true;
242 } else {
243 std::ostringstream oss;
244 oss << "Globals Error: Molecule Stamp " << molStamp->getName() << "appears multiple times\n";
245 throw OOPSEException(oss.str());
246 }
247 return ret;
248 }
249
250
251 }