ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/io/Globals.cpp
Revision: 1402
Committed: Fri Jan 8 17:15:27 2010 UTC (15 years, 3 months ago) by chuckv
File size: 13420 byte(s)
Log Message:
Added preliminary code for Alpha Hull calculation using qhull.
Added preliminary support to SMIPD to support Alpha Hull.
Alpha Hull does not yet add the correct things to triangle to be returned to SMPID. 
Preliminary changes for shadow hamiltonian integrator.
Chages to md files so they will work in openMD. 

File Contents

# Content
1 /*
2 * Copyright (c) 2005, 2010 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. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the
15 * distribution.
16 *
17 * This software is provided "AS IS," without a warranty of any
18 * kind. All express or implied conditions, representations and
19 * warranties, including any implied warranty of merchantability,
20 * fitness for a particular purpose or non-infringement, are hereby
21 * excluded. The University of Notre Dame and its licensors shall not
22 * be liable for any damages suffered by licensee as a result of
23 * using, modifying or distributing the software or its
24 * derivatives. In no event will the University of Notre Dame or its
25 * licensors be liable for any lost revenue, profit or data, or for
26 * direct, indirect, special, consequential, incidental or punitive
27 * damages, however caused and regardless of the theory of liability,
28 * arising out of the use of or inability to use software, even if the
29 * University of Notre Dame has been advised of the possibility of
30 * such damages.
31 *
32 * SUPPORT OPEN SCIENCE! If you use OpenMD or its source code in your
33 * research, please cite the appropriate papers when you publish your
34 * work. Good starting points are:
35 *
36 * [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005).
37 * [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006).
38 * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008).
39 * [4] Vardeman & Gezelter, in progress (2009).
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 OpenMD {
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(NeighborListNeighbors,"NeighborListNeighbors");
103 DefineOptionalParameter(UseMultipleTemperatureMethod, "useMultipleTemperatureMethod");
104 DefineOptionalParameter(MTM_Ce, "MTM_Ce");
105 DefineOptionalParameter(MTM_G, "MTM_G");
106 DefineOptionalParameter(MTM_Io, "MTM_Io");
107 DefineOptionalParameter(MTM_Sigma, "MTM_Sigma");
108 DefineOptionalParameter(MTM_R, "MTM_R");
109 DefineOptionalParameter(Alpha, "alpha");
110
111
112 DefineOptionalParameterWithDefaultValue(UsePeriodicBoundaryConditions, "usePeriodicBoundaryConditions", true);
113 DefineOptionalParameterWithDefaultValue(UseAtomicVirial, "useAtomicVirial", true);
114 DefineOptionalParameterWithDefaultValue(UseInitalTime, "useInitialTime", false);
115 DefineOptionalParameterWithDefaultValue(UseIntialExtendedSystemState, "useInitialExtendedSystemState", false);
116 DefineOptionalParameterWithDefaultValue(OrthoBoxTolerance, "orthoBoxTolerance", 1E-6);
117 DefineOptionalParameterWithDefaultValue(ElectrostaticSummationMethod, "electrostaticSummationMethod", "SHIFTED_FORCE");
118 DefineOptionalParameterWithDefaultValue(ElectrostaticScreeningMethod, "electrostaticScreeningMethod", "DAMPED");
119 DefineOptionalParameterWithDefaultValue(Dielectric, "dielectric", 78.5);
120 DefineOptionalParameterWithDefaultValue(CompressDumpFile, "compressDumpFile", 0);
121 DefineOptionalParameterWithDefaultValue(OutputForceVector, "outputForceVector", 0);
122 DefineOptionalParameterWithDefaultValue(SkinThickness, "skinThickness", 1.0);
123 DefineOptionalParameterWithDefaultValue(StatFileFormat, "statFileFormat", "TIME|TOTAL_ENERGY|POTENTIAL_ENERGY|KINETIC_ENERGY|TEMPERATURE|PRESSURE|VOLUME|CONSERVED_QUANTITY");
124 DefineOptionalParameterWithDefaultValue(UseSphericalBoundaryConditions, "useSphericalBoundaryConditions", false);
125 DefineOptionalParameterWithDefaultValue(AccumulateBoxDipole, "accumulateBoxDipole", false);
126
127 DefineOptionalParameterWithDefaultValue(UseRNEMD, "useRNEMD", false);
128 DefineOptionalParameterWithDefaultValue(RNEMD_exchangeTime, "RNEMD_exchangeTime", 100.0);
129 DefineOptionalParameterWithDefaultValue(RNEMD_nBins, "RNEMD_nBins", 16);
130 DefineOptionalParameterWithDefaultValue(RNEMD_logWidth, "RNEMD_logWidth", 16);
131 DefineOptionalParameterWithDefaultValue(RNEMD_exchangeType, "RNEMD_exchangeType", "KineticScale");
132 DefineOptionalParameterWithDefaultValue(RNEMD_targetFlux, "RNEMD_targetFlux", 0.0);
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 DefineOptionalParameterWithDefaultValue(HULL_Method,"HULL_Method","Convex");
138
139
140 deprecatedKeywords_.insert("nComponents");
141 deprecatedKeywords_.insert("nZconstraints");
142 deprecatedKeywords_.insert("initialConfig");
143 deprecatedKeywords_.insert("thermIntDistSpringConst");
144 deprecatedKeywords_.insert("thermIntThetaSpringConst");
145 deprecatedKeywords_.insert("thermIntOmegaSpringConst");
146 deprecatedKeywords_.insert("useSolidThermInt");
147 deprecatedKeywords_.insert("useLiquidThermInt");
148
149 }
150
151 Globals::~Globals() {
152 MemoryUtils::deletePointers(components_);
153 MemoryUtils::deletePointers(zconstraints_);
154 MemoryUtils::deletePointers(restraints_);
155 }
156
157 void Globals::validate() {
158 DataHolder::validate();
159
160 CheckParameter(ForceField, isNotEmpty());
161 CheckParameter(TargetTemp, isPositive());
162 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"));
163 CheckParameter(Dt, isPositive());
164 CheckParameter(RunTime, isPositive());
165 CheckParameter(FinalConfig, isNotEmpty());
166 CheckParameter(SampleTime, isNonNegative());
167 CheckParameter(ResetTime, isNonNegative());
168 CheckParameter(StatusTime, isNonNegative());
169 CheckParameter(CutoffRadius, isPositive());
170 CheckParameter(SwitchingRadius, isNonNegative());
171 CheckParameter(Dielectric, isPositive());
172 CheckParameter(ThermalTime, isNonNegative());
173 CheckParameter(TauThermostat, isPositive());
174 CheckParameter(TauBarostat, isPositive());
175 CheckParameter(ZconsTime, isPositive());
176 CheckParameter(ZconsTol, isPositive());
177 CheckParameter(Seed, isPositive());
178 CheckParameter(Minimizer, isEqualIgnoreCase("SD") || isEqualIgnoreCase("CG"));
179 CheckParameter(MinimizerMaxIter, isPositive());
180 CheckParameter(MinimizerWriteFrq, isPositive());
181 CheckParameter(MinimizerStepSize, isPositive());
182 CheckParameter(MinimizerFTol, isPositive());
183 CheckParameter(MinimizerGTol, isPositive());
184 CheckParameter(MinimizerLSTol, isPositive());
185 CheckParameter(MinimizerLSMaxIter, isPositive());
186 CheckParameter(ZconsGap, isPositive());
187 CheckParameter(ZconsFixtime, isPositive());
188 CheckParameter(ThermodynamicIntegrationLambda, isNonNegative());
189 CheckParameter(ThermodynamicIntegrationK, isPositive());
190 CheckParameter(ForceFieldVariant, isNotEmpty());
191 CheckParameter(ForceFieldFileName, isNotEmpty());
192 CheckParameter(ElectrostaticSummationMethod, isEqualIgnoreCase("NONE") || isEqualIgnoreCase("SHIFTED_POTENTIAL") || isEqualIgnoreCase("SHIFTED_FORCE") || isEqualIgnoreCase("REACTION_FIELD"));
193 CheckParameter(ElectrostaticScreeningMethod, isEqualIgnoreCase("UNDAMPED") || isEqualIgnoreCase("DAMPED"));
194 CheckParameter(CutoffPolicy, isEqualIgnoreCase("MIX") || isEqualIgnoreCase("MAX") || isEqualIgnoreCase("TRADITIONAL"));
195 CheckParameter(SwitchingFunctionType, isEqualIgnoreCase("CUBIC") || isEqualIgnoreCase("FIFTH_ORDER_POLYNOMIAL"));
196 //CheckParameter(StatFileFormat,);
197 CheckParameter(OrthoBoxTolerance, isPositive());
198 CheckParameter(DampingAlpha,isNonNegative());
199 CheckParameter(SkinThickness, isPositive());
200 CheckParameter(Viscosity, isNonNegative());
201 CheckParameter(BeadSize, isPositive());
202 CheckParameter(FrozenBufferRadius, isPositive());
203 CheckParameter(LangevinBufferRadius, isPositive());
204 CheckParameter(NeighborListNeighbors, isPositive());
205 CheckParameter(RNEMD_exchangeTime, isPositive());
206 CheckParameter(RNEMD_nBins, isPositive() && isEven());
207 CheckParameter(RNEMD_exchangeType, isEqualIgnoreCase("KineticSwap") || isEqualIgnoreCase("KineticScale") || isEqualIgnoreCase("Px") || isEqualIgnoreCase("Py") || isEqualIgnoreCase("Pz") || isEqualIgnoreCase("PxScale") || isEqualIgnoreCase("PyScale") || isEqualIgnoreCase("PzScale"));
208 CheckParameter(RNEMD_targetFlux, isNonNegative());
209 CheckParameter(HULL_Method, isEqualIgnoreCase("Convex") || isEqualIgnoreCase("AlphaShape"));
210 CheckParameter(Alpha, isPositive());
211
212
213 for(std::vector<Component*>::iterator i = components_.begin(); i != components_.end(); ++i) {
214 if (!(*i)->findMoleculeStamp(moleculeStamps_)) {
215 std::ostringstream oss;
216 oss << "Globals Error: can not find molecule stamp for component " << (*i)->getType() << std::endl;
217 throw OpenMDException(oss.str());
218 }
219 }
220 }
221
222 bool Globals::addComponent(Component* comp) {
223 components_.push_back(comp);
224 return true;
225 }
226
227 bool Globals::addZConsStamp(ZConsStamp* zcons) {
228 zconstraints_.push_back(zcons);
229 return true;
230 }
231
232 bool Globals::addRestraintStamp(RestraintStamp* rest) {
233 restraints_.push_back(rest);
234 return true;
235 }
236
237 bool Globals::addMoleculeStamp(MoleculeStamp* molStamp) {
238 std::string molStampName = molStamp->getName();
239 std::map<std::string, MoleculeStamp*>::iterator i;
240 bool ret = false;
241 i = moleculeStamps_.find(molStampName);
242 if (i == moleculeStamps_.end()) {
243 moleculeStamps_.insert(std::map<std::string, MoleculeStamp*>::value_type(molStampName, molStamp));
244 ret = true;
245 } else {
246 std::ostringstream oss;
247 oss << "Globals Error: Molecule Stamp " << molStamp->getName() << "appears multiple times\n";
248 throw OpenMDException(oss.str());
249 }
250 return ret;
251 }
252
253
254 }