Loading...
Searching...
No Matches
ZBLRepulsiveIDPPObjective Class Reference

#include <IDPPObjectiveFunction.hpp>

Inheritance diagram for ZBLRepulsiveIDPPObjective:

Public Member Functions

 ZBLRepulsiveIDPPObjective (std::shared_ptr< ObjectiveFunction > idpp, std::shared_ptr< Potential > zbl, std::vector< Matter > &p, const Parameters &params, double weight=1.0)
double getEnergy () override
VectorXd getGradient (bool fdstep=false) override
void setPositions (const VectorXd &x) override
VectorXd getPositions () override
int degreesOfFreedom () override
bool isConverged () override
double getConvergence () override
VectorXd difference (const VectorXd &a, const VectorXd &b) override
Public Member Functions inherited from eonc::ObjectiveFunction
 ObjectiveFunction (const Parameters &paramsPassed)
virtual ~ObjectiveFunction ()

Public Attributes

std::shared_ptr< ObjectiveFunctionidpp_obj
std::shared_ptr< Potentialzbl_pot
std::vector< Matter > & path
double zbl_weight

Additional Inherited Members

Protected Attributes inherited from eonc::ObjectiveFunction
const Parametersparams

Detailed Description

Definition at line 145 of file IDPPObjectiveFunction.hpp.

Constructor & Destructor Documentation

◆ ZBLRepulsiveIDPPObjective()

eonc::ZBLRepulsiveIDPPObjective::ZBLRepulsiveIDPPObjective ( std::shared_ptr< ObjectiveFunction > idpp,
std::shared_ptr< Potential > zbl,
std::vector< Matter > & p,
const Parameters & params,
double weight = 1.0 )
inline

Definition at line 152 of file IDPPObjectiveFunction.hpp.

157 idpp_obj(idpp),
158 zbl_pot(zbl),
159 path(p),
160 zbl_weight(weight) {}
ObjectiveFunction(const Parameters &paramsPassed)
const Parameters & params
std::shared_ptr< Potential > zbl_pot
std::shared_ptr< ObjectiveFunction > idpp_obj

Member Function Documentation

◆ degreesOfFreedom()

Implements eonc::ObjectiveFunction.

Definition at line 199 of file IDPPObjectiveFunction.hpp.

199{ return idpp_obj->degreesOfFreedom(); }
std::shared_ptr< ObjectiveFunction > idpp_obj

◆ difference()

VectorXd eonc::ZBLRepulsiveIDPPObjective::difference ( const VectorXd & a,
const VectorXd & b )
inlineoverridevirtual

Implements eonc::ObjectiveFunction.

Definition at line 203 of file IDPPObjectiveFunction.hpp.

203 {
204 return idpp_obj->difference(a, b);
205 }

◆ getConvergence()

double eonc::ZBLRepulsiveIDPPObjective::getConvergence ( )
inlineoverridevirtual

Implements eonc::ObjectiveFunction.

Definition at line 201 of file IDPPObjectiveFunction.hpp.

201{ return idpp_obj->getConvergence(); }

◆ getEnergy()

double eonc::ZBLRepulsiveIDPPObjective::getEnergy ( )
inlineoverridevirtual

Implements eonc::ObjectiveFunction.

Definition at line 162 of file IDPPObjectiveFunction.hpp.

162 {
163 // IDPP "Energy" (Residual) + ZBL Energy
164 return idpp_obj->getEnergy();
165 }

◆ getGradient()

VectorXd eonc::ZBLRepulsiveIDPPObjective::getGradient ( bool fdstep = false)
inlineoverridevirtual

Implements eonc::ObjectiveFunction.

Definition at line 167 of file IDPPObjectiveFunction.hpp.

167 {
168 // 1. Get IDPP Gradient (forces atoms towards interpolated distances)
169 VectorXd grad = idpp_obj->getGradient(fdstep);
170
171 // 2. Calculate ZBL Forces for every image
172 int n_images = path.size();
173 int atoms_per_image = path[0].numberOfAtoms();
174
175 // ZBL calculation loop
176 for (int i = 1; i < n_images - 1; ++i) { // Skip endpoints
177 AtomMatrix forces = MatrixXd::Zero(atoms_per_image, 3);
178 double energy = 0;
179
180 // Calculate ZBL forces for this image
181 zbl_pot->force(atoms_per_image, path[i].getPositions().data(),
182 path[i].getAtomicNrs().data(), forces.data(), &energy,
183 nullptr, path[i].getCell().data());
184
185 int segment_start = (i - 1) * 3 * atoms_per_image;
186 VectorXd zbl_grad_vec = VectorXd::Map(forces.data(), 3 * atoms_per_image);
187
188 // Add repulsive push (negate force to get gradient)
189 grad.segment(segment_start, 3 * atoms_per_image) -=
190 (zbl_grad_vec * zbl_weight);
191 }
192
193 return grad;
194 }
Eigen::Matrix< double, Eigen::Dynamic, 3, eOnStorageOrder > AtomMatrix
Definition Eigen.h:37
std::shared_ptr< Potential > zbl_pot

◆ getPositions()

VectorXd eonc::ZBLRepulsiveIDPPObjective::getPositions ( )
inlineoverridevirtual

Implements eonc::ObjectiveFunction.

Definition at line 198 of file IDPPObjectiveFunction.hpp.

198{ return idpp_obj->getPositions(); }

◆ isConverged()

bool eonc::ZBLRepulsiveIDPPObjective::isConverged ( )
inlineoverridevirtual

Implements eonc::ObjectiveFunction.

Definition at line 200 of file IDPPObjectiveFunction.hpp.

200{ return idpp_obj->isConverged(); }

◆ setPositions()

void eonc::ZBLRepulsiveIDPPObjective::setPositions ( const VectorXd & x)
inlineoverridevirtual

Implements eonc::ObjectiveFunction.

Definition at line 197 of file IDPPObjectiveFunction.hpp.

197{ idpp_obj->setPositions(x); }

Member Data Documentation

◆ idpp_obj

◆ path

◆ zbl_pot

◆ zbl_weight


The documentation for this class was generated from the following file: