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

# User Rev Content
1 gezelter 404 /*
2 chuckv 1402 * Copyright (c) 2005, 2010 The University of Notre Dame. All Rights Reserved.
3 gezelter 246 *
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 gezelter 1390 * 1. Redistributions of source code must retain the above copyright
10 gezelter 246 * notice, this list of conditions and the following disclaimer.
11     *
12 gezelter 1390 * 2. Redistributions in binary form must reproduce the above copyright
13 gezelter 246 * 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 gezelter 1390 *
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 gezelter 246 */
41    
42 gezelter 2 #include <stdlib.h>
43     #include <stdio.h>
44     #include <string.h>
45 tim 665 #include <string>
46 gezelter 2
47 tim 3 #include "io/Globals.hpp"
48 tim 816 #include "io/ParamConstraint.hpp"
49     #include "utils/MemoryUtils.hpp"
50 tim 3 #include "utils/simError.h"
51 gezelter 2
52 gezelter 1390 namespace OpenMD {
53 tim 770 Globals::Globals() {
54 tim 665 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 gezelter 1126 DefineOptionalParameter(TargetPressure, "targetPressure");
69 tim 665 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 gezelter 1078 DefineOptionalParameter(DampingAlpha, "dampingAlpha");
91 tim 665 DefineOptionalParameter(SurfaceTension, "surfaceTension");
92     DefineOptionalParameter(PrintPressureTensor, "printPressureTensor");
93 gezelter 1291 DefineOptionalParameter(TaggedAtomPair, "taggedAtomPair");
94     DefineOptionalParameter(PrintTaggedPairDistance, "printTaggedPairDistance");
95 tim 665 DefineOptionalParameter(CutoffPolicy, "cutoffPolicy");
96 chrisfen 726 DefineOptionalParameter(SwitchingFunctionType, "switchingFunctionType");
97 tim 895 DefineOptionalParameter(HydroPropFile, "HydroPropFile");
98 tim 906 DefineOptionalParameter(Viscosity, "viscosity");
99     DefineOptionalParameter(BeadSize, "beadSize");
100 gezelter 945 DefineOptionalParameter(FrozenBufferRadius, "frozenBufferRadius");
101     DefineOptionalParameter(LangevinBufferRadius, "langevinBufferRadius");
102 chuckv 1095 DefineOptionalParameter(NeighborListNeighbors,"NeighborListNeighbors");
103 chuckv 1306 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 chuckv 1402 DefineOptionalParameter(Alpha, "alpha");
110 gezelter 1327
111 chuckv 1147
112 tim 665 DefineOptionalParameterWithDefaultValue(UsePeriodicBoundaryConditions, "usePeriodicBoundaryConditions", true);
113 gezelter 1126 DefineOptionalParameterWithDefaultValue(UseAtomicVirial, "useAtomicVirial", true);
114 tim 665 DefineOptionalParameterWithDefaultValue(UseInitalTime, "useInitialTime", false);
115     DefineOptionalParameterWithDefaultValue(UseIntialExtendedSystemState, "useInitialExtendedSystemState", false);
116     DefineOptionalParameterWithDefaultValue(OrthoBoxTolerance, "orthoBoxTolerance", 1E-6);
117 gezelter 1078 DefineOptionalParameterWithDefaultValue(ElectrostaticSummationMethod, "electrostaticSummationMethod", "SHIFTED_FORCE");
118     DefineOptionalParameterWithDefaultValue(ElectrostaticScreeningMethod, "electrostaticScreeningMethod", "DAMPED");
119 chrisfen 1050 DefineOptionalParameterWithDefaultValue(Dielectric, "dielectric", 78.5);
120 tim 665 DefineOptionalParameterWithDefaultValue(CompressDumpFile, "compressDumpFile", 0);
121 chrisfen 726 DefineOptionalParameterWithDefaultValue(OutputForceVector, "outputForceVector", 0);
122 tim 665 DefineOptionalParameterWithDefaultValue(SkinThickness, "skinThickness", 1.0);
123 tim 681 DefineOptionalParameterWithDefaultValue(StatFileFormat, "statFileFormat", "TIME|TOTAL_ENERGY|POTENTIAL_ENERGY|KINETIC_ENERGY|TEMPERATURE|PRESSURE|VOLUME|CONSERVED_QUANTITY");
124 gezelter 945 DefineOptionalParameterWithDefaultValue(UseSphericalBoundaryConditions, "useSphericalBoundaryConditions", false);
125 chrisfen 998 DefineOptionalParameterWithDefaultValue(AccumulateBoxDipole, "accumulateBoxDipole", false);
126 tim 681
127 gezelter 1327 DefineOptionalParameterWithDefaultValue(UseRNEMD, "useRNEMD", false);
128 skuang 1367 DefineOptionalParameterWithDefaultValue(RNEMD_exchangeTime, "RNEMD_exchangeTime", 100.0);
129 skuang 1341 DefineOptionalParameterWithDefaultValue(RNEMD_nBins, "RNEMD_nBins", 16);
130 skuang 1367 DefineOptionalParameterWithDefaultValue(RNEMD_logWidth, "RNEMD_logWidth", 16);
131     DefineOptionalParameterWithDefaultValue(RNEMD_exchangeType, "RNEMD_exchangeType", "KineticScale");
132     DefineOptionalParameterWithDefaultValue(RNEMD_targetFlux, "RNEMD_targetFlux", 0.0);
133 gezelter 1331 DefineOptionalParameterWithDefaultValue(RNEMD_objectSelection, "RNEMD_objectSelection", "select all");
134 cli2 1360 DefineOptionalParameterWithDefaultValue(UseRestraints, "useRestraints", false);
135 gezelter 1354 DefineOptionalParameterWithDefaultValue(Restraint_file, "Restraint_file", "idealCrystal.in");
136 cli2 1360 DefineOptionalParameterWithDefaultValue(UseThermodynamicIntegration, "useThermodynamicIntegration", false);
137 chuckv 1402 DefineOptionalParameterWithDefaultValue(HULL_Method,"HULL_Method","Convex");
138 gezelter 1327
139 cli2 1360
140 gezelter 1078 deprecatedKeywords_.insert("nComponents");
141     deprecatedKeywords_.insert("nZconstraints");
142     deprecatedKeywords_.insert("initialConfig");
143 cli2 1360 deprecatedKeywords_.insert("thermIntDistSpringConst");
144     deprecatedKeywords_.insert("thermIntThetaSpringConst");
145     deprecatedKeywords_.insert("thermIntOmegaSpringConst");
146     deprecatedKeywords_.insert("useSolidThermInt");
147     deprecatedKeywords_.insert("useLiquidThermInt");
148 gezelter 2
149     }
150    
151 tim 770 Globals::~Globals() {
152 tim 816 MemoryUtils::deletePointers(components_);
153     MemoryUtils::deletePointers(zconstraints_);
154 cli2 1360 MemoryUtils::deletePointers(restraints_);
155 gezelter 2 }
156    
157 tim 770 void Globals::validate() {
158     DataHolder::validate();
159 gezelter 2
160 tim 672 CheckParameter(ForceField, isNotEmpty());
161     CheckParameter(TargetTemp, isPositive());
162 chuckv 1293 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 tim 672 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 tim 850 CheckParameter(Minimizer, isEqualIgnoreCase("SD") || isEqualIgnoreCase("CG"));
179 tim 672 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 chrisfen 979 CheckParameter(ThermodynamicIntegrationLambda, isNonNegative());
189 tim 672 CheckParameter(ThermodynamicIntegrationK, isPositive());
190     CheckParameter(ForceFieldVariant, isNotEmpty());
191     CheckParameter(ForceFieldFileName, isNotEmpty());
192 tim 850 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 tim 672 //CheckParameter(StatFileFormat,);
197     CheckParameter(OrthoBoxTolerance, isPositive());
198 chrisfen 716 CheckParameter(DampingAlpha,isNonNegative());
199 tim 672 CheckParameter(SkinThickness, isPositive());
200 gezelter 945 CheckParameter(Viscosity, isNonNegative());
201     CheckParameter(BeadSize, isPositive());
202     CheckParameter(FrozenBufferRadius, isPositive());
203     CheckParameter(LangevinBufferRadius, isPositive());
204 chuckv 1095 CheckParameter(NeighborListNeighbors, isPositive());
205 skuang 1367 CheckParameter(RNEMD_exchangeTime, isPositive());
206 skuang 1341 CheckParameter(RNEMD_nBins, isPositive() && isEven());
207 skuang 1367 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 chuckv 1402 CheckParameter(HULL_Method, isEqualIgnoreCase("Convex") || isEqualIgnoreCase("AlphaShape"));
210     CheckParameter(Alpha, isPositive());
211 chuckv 1095
212 chuckv 1402
213 tim 770 for(std::vector<Component*>::iterator i = components_.begin(); i != components_.end(); ++i) {
214     if (!(*i)->findMoleculeStamp(moleculeStamps_)) {
215 tim 845 std::ostringstream oss;
216     oss << "Globals Error: can not find molecule stamp for component " << (*i)->getType() << std::endl;
217 gezelter 1390 throw OpenMDException(oss.str());
218 tim 770 }
219     }
220     }
221 skuang 1367
222 tim 770 bool Globals::addComponent(Component* comp) {
223     components_.push_back(comp);
224     return true;
225     }
226 gezelter 2
227 tim 770 bool Globals::addZConsStamp(ZConsStamp* zcons) {
228     zconstraints_.push_back(zcons);
229     return true;
230 gezelter 2 }
231    
232 cli2 1360 bool Globals::addRestraintStamp(RestraintStamp* rest) {
233     restraints_.push_back(rest);
234     return true;
235     }
236    
237 tim 770 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 tim 845 std::ostringstream oss;
247     oss << "Globals Error: Molecule Stamp " << molStamp->getName() << "appears multiple times\n";
248 gezelter 1390 throw OpenMDException(oss.str());
249 tim 770 }
250     return ret;
251 gezelter 2 }
252 tim 770
253    
254     }