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). |
38 |
> |
* [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 234107 (2008). |
39 |
|
* [4] Kuang & Gezelter, J. Chem. Phys. 133, 164101 (2010). |
40 |
|
* [5] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011). |
41 |
|
*/ |
43 |
|
#include "brains/Snapshot.hpp" |
44 |
|
#include "integrators/Integrator.hpp" |
45 |
|
#include "integrators/DLM.hpp" |
46 |
< |
#include "integrators/FluctuatingChargeNVT.hpp" |
46 |
> |
#include "flucq/FluctuatingChargeLangevin.hpp" |
47 |
> |
#include "flucq/FluctuatingChargeNVT.hpp" |
48 |
|
#include "utils/simError.h" |
49 |
|
|
50 |
|
namespace OpenMD { |
53 |
|
needReset(false), velocitizer_(NULL), needVelocityScaling(false), |
54 |
|
rnemd_(NULL), useRNEMD(false), rotAlgo_(NULL), flucQ_(NULL), |
55 |
|
rattle_(NULL), dumpWriter(NULL), statWriter(NULL), thermo(info), |
56 |
< |
currentSnapshot_(info->getSnapshotManager()->getCurrentSnapshot()) { |
56 |
> |
snap(info->getSnapshotManager()->getCurrentSnapshot()) { |
57 |
|
|
58 |
|
simParams = info->getSimParams(); |
59 |
|
|
74 |
|
painCave.isFatal = 1; |
75 |
|
simError(); |
76 |
|
} |
77 |
+ |
|
78 |
|
// set the status, sample, and thermal kick times |
79 |
|
if (simParams->haveSampleTime()){ |
80 |
|
sampleTime = simParams->getSampleTime(); |
83 |
|
sampleTime = simParams->getRunTime(); |
84 |
|
statusTime = sampleTime; |
85 |
|
} |
86 |
< |
|
86 |
> |
|
87 |
|
if (simParams->haveStatusTime()){ |
88 |
|
statusTime = simParams->getStatusTime(); |
89 |
|
} |
90 |
< |
|
90 |
> |
|
91 |
|
if (simParams->haveThermalTime()){ |
92 |
|
thermalTime = simParams->getThermalTime(); |
93 |
|
} else { |
94 |
|
thermalTime = simParams->getRunTime(); |
95 |
|
} |
96 |
< |
|
96 |
> |
|
97 |
|
if (!simParams->getUseInitalTime()) { |
98 |
< |
currentSnapshot_->setTime(0.0); |
98 |
> |
snap->setTime(0.0); |
99 |
|
} |
100 |
< |
|
100 |
> |
|
101 |
|
if (simParams->haveResetTime()) { |
102 |
|
needReset = true; |
103 |
|
resetTime = simParams->getResetTime(); |
104 |
|
} |
105 |
< |
|
105 |
> |
|
106 |
|
// Create a default ForceManager: If the subclass wants to use |
107 |
|
// a different ForceManager, use setForceManager |
106 |
– |
|
108 |
|
forceMan_ = new ForceManager(info); |
109 |
< |
|
109 |
> |
|
110 |
|
// check for the temperature set flag (velocity scaling) |
111 |
+ |
needVelocityScaling = false; |
112 |
|
if (simParams->haveTempSet()) { |
113 |
|
needVelocityScaling = simParams->getTempSet(); |
114 |
+ |
} |
115 |
|
|
116 |
+ |
if (needVelocityScaling) { |
117 |
|
if (simParams->haveTargetTemp()) { |
118 |
|
targetScalingTemp = simParams->getTargetTemp(); |
119 |
|
} |
120 |
|
else { |
121 |
|
sprintf(painCave.errMsg, |
122 |
< |
"Integrator Error: Target Temperature is not set\n"); |
122 |
> |
"Integrator Error: Target Temperature must be set to turn on tempSet\n"); |
123 |
|
painCave.isFatal = 1; |
124 |
|
simError(); |
125 |
|
|
126 |
|
} |
127 |
|
} |
128 |
< |
|
128 |
> |
|
129 |
|
// Create a default a velocitizer: If the subclass wants to use |
130 |
|
// a different velocitizer, use setVelocitizer |
131 |
|
velocitizer_ = new Velocitizer(info); |
132 |
< |
|
133 |
< |
if (simParams->haveUseRNEMD()) { |
134 |
< |
if (simParams->getUseRNEMD()) { |
132 |
> |
|
133 |
> |
if (simParams->getRNEMDParameters()->haveUseRNEMD()) { |
134 |
> |
if (simParams->getRNEMDParameters()->getUseRNEMD()) { |
135 |
|
// Create a default a RNEMD. |
136 |
|
rnemd_ = new RNEMD(info); |
137 |
< |
useRNEMD = simParams->getUseRNEMD(); |
138 |
< |
if (simParams->haveRNEMD_exchangeTime()) { |
139 |
< |
RNEMD_exchangeTime = simParams->getRNEMD_exchangeTime(); |
137 |
> |
useRNEMD = simParams->getRNEMDParameters()->getUseRNEMD(); |
138 |
> |
if (simParams->getRNEMDParameters()->haveExchangeTime()) { |
139 |
> |
RNEMD_exchangeTime = simParams->getRNEMDParameters()->getExchangeTime(); |
140 |
|
} |
141 |
|
} |
142 |
|
} |
143 |
< |
|
143 |
> |
|
144 |
|
rotAlgo_ = new DLM(); |
145 |
|
rattle_ = new Rattle(info); |
146 |
< |
flucQ_ = new FluctuatingChargeNVT(info); |
146 |
> |
if (simParams->getFluctuatingChargeParameters()->havePropagator()) { |
147 |
> |
std::string prop = toUpperCopy(simParams->getFluctuatingChargeParameters()->getPropagator()); |
148 |
> |
if (prop.compare("NVT")==0){ |
149 |
> |
flucQ_ = new FluctuatingChargeNVT(info); |
150 |
> |
} else if (prop.compare("LANGEVIN")==0) { |
151 |
> |
flucQ_ = new FluctuatingChargeLangevin(info); |
152 |
> |
} else { |
153 |
> |
sprintf(painCave.errMsg, |
154 |
> |
"Integrator Error: Unknown Fluctuating Charge propagator (%s) requested\n", |
155 |
> |
simParams->getFluctuatingChargeParameters()->getPropagator().c_str()); |
156 |
> |
painCave.isFatal = 1; |
157 |
> |
} |
158 |
> |
} |
159 |
> |
flucQ_->setForceManager(forceMan_); |
160 |
|
} |
161 |
|
|
162 |
|
Integrator::~Integrator(){ |