--- trunk/src/flucq/FluctuatingChargePropagator.cpp 2013/06/16 15:15:42 1879 +++ trunk/src/flucq/FluctuatingChargePropagator.cpp 2013/07/31 19:30:46 1920 @@ -56,11 +56,10 @@ namespace OpenMD { namespace OpenMD { FluctuatingChargePropagator::FluctuatingChargePropagator(SimInfo* info) : - info_(info), hasFlucQ_(false), forceMan_(NULL) { + info_(info), hasFlucQ_(false), forceMan_(NULL), initialized_(false) { Globals* simParams = info_->getSimParams(); - fqParams_ = simParams->getFluctuatingChargeParameters(); - fqConstraints_ = new FluctuatingChargeConstraints(info_); + fqParams_ = simParams->getFluctuatingChargeParameters(); } FluctuatingChargePropagator::~FluctuatingChargePropagator() { @@ -72,15 +71,19 @@ namespace OpenMD { } void FluctuatingChargePropagator::initialize() { - if (info_->usesFluctuatingCharges()) { if (info_->getNFluctuatingCharges() > 0) { hasFlucQ_ = true; + fqConstraints_ = new FluctuatingChargeConstraints(info_); + fqConstraints_->setConstrainRegions(fqParams_->getConstrainRegions()); } } + + if (!hasFlucQ_) { + initialized_ = true; + return; + } - if (!hasFlucQ_) return; - SimInfo::MoleculeIterator i; Molecule::FluctuatingChargeIterator j; Molecule* mol; @@ -108,11 +111,12 @@ namespace OpenMD { DumpStatusFunction dsf(info_); // we want a dump file written // every iteration - minim->minimize(problem, endCriteria); + initialized_ = true; } void FluctuatingChargePropagator::applyConstraints() { + if (!initialized_) initialize(); if (!hasFlucQ_) return; fqConstraints_->applyConstraints(); }