--- trunk/src/flucq/FluctuatingChargePropagator.cpp 2013/06/13 14:26:09 1878 +++ trunk/src/flucq/FluctuatingChargePropagator.cpp 2013/06/16 15:15:42 1879 @@ -35,7 +35,7 @@ * * [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005). * [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006). - * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008). + * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 234107 (2008). * [4] Kuang & Gezelter, J. Chem. Phys. 133, 164101 (2010). * [5] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011). */ @@ -60,8 +60,13 @@ namespace OpenMD { Globals* simParams = info_->getSimParams(); fqParams_ = simParams->getFluctuatingChargeParameters(); + fqConstraints_ = new FluctuatingChargeConstraints(info_); } + FluctuatingChargePropagator::~FluctuatingChargePropagator() { + if (fqConstraints_ != NULL) delete fqConstraints_; + } + void FluctuatingChargePropagator::setForceManager(ForceManager* forceMan) { forceMan_ = forceMan; } @@ -71,7 +76,6 @@ namespace OpenMD { if (info_->usesFluctuatingCharges()) { if (info_->getNFluctuatingCharges() > 0) { hasFlucQ_ = true; - fqConstraints_ = new FluctuatingChargeConstraints(info_); } } @@ -91,14 +95,19 @@ namespace OpenMD { } } - fqConstraints_ = new FluctuatingChargeConstraints(info_); - FluctuatingChargeObjectiveFunction flucQobjf(info_, forceMan_, fqConstraints_); + FluctuatingChargeObjectiveFunction flucQobjf(info_, forceMan_, + fqConstraints_); + DynamicVector initCoords = flucQobjf.setInitialCoords(); - Problem problem(flucQobjf, *(new NoConstraint()), *(new NoStatus()), initCoords); + Problem problem(flucQobjf, *(new NoConstraint()), *(new NoStatus()), + initCoords); + EndCriteria endCriteria(1000, 100, 1e-5, 1e-5, 1e-5); + OptimizationMethod* minim = OptimizationFactory::getInstance()->createOptimization("SD", info_); - DumpStatusFunction dsf(info_); // we want a dump file written every iteration + DumpStatusFunction dsf(info_); // we want a dump file written + // every iteration minim->minimize(problem, endCriteria); }