48#include "flucq/FluctuatingChargePropagator.hpp"
54#include "flucq/FluctuatingChargeObjectiveFunction.hpp"
57#include "optimization/OptimizationFactory.hpp"
59#include "optimization/StatusFunction.hpp"
61using namespace QuantLib;
64 FluctuatingChargePropagator::FluctuatingChargePropagator(
SimInfo* info) :
65 info_(info), forceMan_(NULL), hasFlucQ_(false), initialized_(false) {
66 Globals* simParams = info_->getSimParams();
67 fqParams_ = simParams->getFluctuatingChargeParameters();
70 FluctuatingChargePropagator::~FluctuatingChargePropagator() {
71 if (info_->usesFluctuatingCharges() && info_->getNFluctuatingCharges() > 0)
72 delete fqConstraints_;
75 void FluctuatingChargePropagator::setForceManager(
ForceManager* forceMan) {
79 void FluctuatingChargePropagator::initialize() {
80 if (info_->usesFluctuatingCharges()) {
81 if (info_->getNFluctuatingCharges() > 0) {
83 fqConstraints_ =
new FluctuatingChargeConstraints(info_);
84 fqConstraints_->setConstrainRegions(fqParams_->getConstrainRegions());
110 if (fqParams_->getDoInitialOptimization()) {
111 FluctuatingChargeObjectiveFunction flucQobjf(info_, forceMan_,
114 DynamicVector<RealType> initCoords = flucQobjf.setInitialCoords();
116 NoConstraint noConstraint {};
117 NoStatus noStatus {};
119 Problem problem(flucQobjf, noConstraint, noStatus, initCoords);
121 int maxIter = fqParams_->getMaxIterations();
122 RealType tolerance = fqParams_->getTolerance();
123 RealType initialStepSize = fqParams_->getInitialStepSize();
125 EndCriteria endCriteria(maxIter, maxIter, tolerance, tolerance,
127 std::string chargeOptMethod = fqParams_->getChargeOptimizationMethod();
128 OptimizationMethod* minim =
132 minim->
minimize(problem, endCriteria, initialStepSize);
140 void FluctuatingChargePropagator::applyConstraints() {
141 if (!initialized_) initialize();
142 if (!hasFlucQ_)
return;
144 fqConstraints_->applyConstraints();
Abstract constraint class.
Optimization criteria class.
Abstract optimization problem class.
ForceManager is responsible for calculating both the short range (bonded) interactions and long range...
static OptimizationFactory & getInstance()
Returns an instance of Optimization factory.
QuantLib::OptimizationMethod * createOptimization(const std::string &id, SimInfo *info)
Looks up the type identifier in the internal map.
One of the heavy-weight classes of OpenMD, SimInfo maintains objects and variables relating to the cu...
virtual EndCriteria::Type minimize(Problem &P, const EndCriteria &endCriteria, RealType initialStepSize)=0
minimize the optimization problem P
This basic Periodic Table class was originally taken from the data.cpp file in OpenBabel.