--- trunk/src/flucq/FluctuatingChargePropagator.cpp 2013/07/19 21:25:45 1908 +++ trunk/src/flucq/FluctuatingChargePropagator.cpp 2013/07/31 19:30:46 1920 @@ -56,12 +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_); - fqConstraints_->setConstrainRegions( fqParams_->getConstrainRegions() ); } FluctuatingChargePropagator::~FluctuatingChargePropagator() { @@ -73,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; @@ -109,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(); }