A class to store forcefields and handle minimization. More...
#include <ForceField.h>
Public Member Functions | |
| ForceField (unsigned int dimension=3) | |
| construct with a dimension | |
| ~ForceField () | |
| void | initialize () |
| does initialization | |
| double | calcEnergy () const |
| calculates and returns the energy based on existing positions in the forcefield | |
| double | calcEnergy (double *pos) |
| calculates and returns the energy of the position passed in | |
| void | calcGrad (double *forces) const |
| calculates the gradient of the energy at the current position | |
| void | calcGrad (double *pos, double *forces) |
| calculates the gradient of the energy at the provided position | |
| int | minimize (unsigned int maxIts=200, double forceTol=1e-4, double energyTol=1e-6) |
| minimizes the energy of the system by following gradients | |
| RDGeom::PointPtrVect & | positions () |
| returns a reference to our points (a PointPtrVect) | |
| const RDGeom::PointPtrVect & | positions () const |
| ContribPtrVect & | contribs () |
| returns a reference to our contribs (a ContribPtrVect) | |
| const ContribPtrVect & | contribs () const |
| double | distance (unsigned int i, unsigned int j, double *pos=0) |
| returns the distance between two points | |
| double | distance (unsigned int i, unsigned int j, double *pos=0) const |
| returns the distance between two points | |
| unsigned int | dimension () const |
| returns the dimension of the forcefield | |
| unsigned int | numPoints () const |
| returns the number of points the ForceField is handling | |
| INT_VECT & | fixedPoints () |
| const INT_VECT & | fixedPoints () const |
Protected Member Functions | |
| void | scatter (double *pos) const |
| scatter our positions into an array | |
| void | gather (double *pos) |
| update our positions from an array | |
| void | initDistanceMatrix () |
| initializes our internal distance matrix | |
Protected Attributes | |
| unsigned int | d_dimension |
| bool | df_init |
| whether or not we've been initialized | |
| unsigned int | d_numPoints |
| the number of active points | |
| double * | dp_distMat |
| our internal distance matrix | |
| RDGeom::PointPtrVect | d_positions |
| pointers to the points we're using | |
| ContribPtrVect | d_contribs |
| contributions to the energy | |
| INT_VECT | d_fixedPoints |
| unsigned int | d_matSize |
A class to store forcefields and handle minimization.
A force field is used like this (schematically):
ForceField ff;
// add contributions:
for contrib in contribs:
ff.contribs().push_back(contrib);
// set up the points:
for positionPtr in positions:
ff.positions().push_back(point);
// initialize:
ff.initialize()
// and minimize:
needsMore = ff.minimize();
Notes:
Definition at line 55 of file ForceField.h.
| ForceFields::ForceField::ForceField | ( | unsigned int | dimension = 3 |
) | [inline] |
construct with a dimension
Definition at line 58 of file ForceField.h.
| ForceFields::ForceField::~ForceField | ( | ) |
| double ForceFields::ForceField::calcEnergy | ( | ) | const |
calculates and returns the energy based on existing positions in the forcefield
Note: This function is less efficient than calcEnergy with postions passed in as double * the positions need to be converted to double * here
| double ForceFields::ForceField::calcEnergy | ( | double * | pos | ) |
calculates and returns the energy of the position passed in
| pos | an array of doubles. Should be 3*this->numPoints() long. |
Side effects:
| void ForceFields::ForceField::calcGrad | ( | double * | forces | ) | const |
calculates the gradient of the energy at the current position
| forces | an array of doubles. Should be 3*this->numPoints() long. |
Note: This function is less efficient than calcGrad with positions passed in the positions need to be converted to double * here
| void ForceFields::ForceField::calcGrad | ( | double * | pos, | |
| double * | forces | |||
| ) |
calculates the gradient of the energy at the provided position
| pos | an array of doubles. Should be 3*this->numPoints() long. | |
| forces | an array of doubles. Should be 3*this->numPoints() long. |
Side effects:
| ContribPtrVect& ForceFields::ForceField::contribs | ( | ) | [inline] |
returns a reference to our contribs (a ContribPtrVect)
Definition at line 136 of file ForceField.h.
References d_contribs.
| const ContribPtrVect& ForceFields::ForceField::contribs | ( | ) | const [inline] |
Definition at line 137 of file ForceField.h.
References d_contribs.
| unsigned int ForceFields::ForceField::dimension | ( | ) | const [inline] |
returns the dimension of the forcefield
Definition at line 171 of file ForceField.h.
References d_dimension.
Referenced by DistGeom::FourthDimContrib::FourthDimContrib().
| double ForceFields::ForceField::distance | ( | unsigned int | i, | |
| unsigned int | j, | |||
| double * | pos = 0 | |||
| ) |
returns the distance between two points
| i | point index | |
| j | point index | |
| pos | (optional) If this argument is provided, it will be used to provide the positions of points. pos should be 3*this->numPoints() long. |
Side effects:
| double ForceFields::ForceField::distance | ( | unsigned int | i, | |
| unsigned int | j, | |||
| double * | pos = 0 | |||
| ) | const |
returns the distance between two points
| i | point index | |
| j | point index | |
| pos | (optional) If this argument is provided, it will be used to provide the positions of points. pos should be 3*this->numPoints() long. |
Note: The internal distance matrix is not updated in this case
| const INT_VECT& ForceFields::ForceField::fixedPoints | ( | ) | const [inline] |
Definition at line 179 of file ForceField.h.
References d_fixedPoints.
| INT_VECT& ForceFields::ForceField::fixedPoints | ( | ) | [inline] |
Definition at line 178 of file ForceField.h.
References d_fixedPoints.
| void ForceFields::ForceField::gather | ( | double * | pos | ) | [protected] |
update our positions from an array
| pos | should be 3*this->numPoints() long; |
| void ForceFields::ForceField::initDistanceMatrix | ( | ) | [protected] |
initializes our internal distance matrix
| void ForceFields::ForceField::initialize | ( | ) |
does initialization
| int ForceFields::ForceField::minimize | ( | unsigned int | maxIts = 200, |
|
| double | forceTol = 1e-4, |
|||
| double | energyTol = 1e-6 | |||
| ) |
minimizes the energy of the system by following gradients
| maxIts | the maximum number of iterations to try | |
| forceTol | the convergence criterion for forces | |
| energyTol | the convergence criterion for energies |
maxIts iterations. | unsigned int ForceFields::ForceField::numPoints | ( | ) | const [inline] |
returns the number of points the ForceField is handling
Definition at line 176 of file ForceField.h.
References d_numPoints.
| const RDGeom::PointPtrVect& ForceFields::ForceField::positions | ( | ) | const [inline] |
Definition at line 133 of file ForceField.h.
References d_positions.
| RDGeom::PointPtrVect& ForceFields::ForceField::positions | ( | ) | [inline] |
returns a reference to our points (a PointPtrVect)
Definition at line 132 of file ForceField.h.
References d_positions.
| void ForceFields::ForceField::scatter | ( | double * | pos | ) | const [protected] |
scatter our positions into an array
| pos | should be 3*this->numPoints() long; |
ContribPtrVect ForceFields::ForceField::d_contribs [protected] |
unsigned int ForceFields::ForceField::d_dimension [protected] |
Definition at line 179 of file ForceField.h.
Referenced by dimension().
INT_VECT ForceFields::ForceField::d_fixedPoints [protected] |
Definition at line 188 of file ForceField.h.
Referenced by fixedPoints().
unsigned int ForceFields::ForceField::d_matSize [protected] |
Definition at line 189 of file ForceField.h.
unsigned int ForceFields::ForceField::d_numPoints [protected] |
pointers to the points we're using
Definition at line 186 of file ForceField.h.
Referenced by positions().
bool ForceFields::ForceField::df_init [protected] |
whether or not we've been initialized
Definition at line 183 of file ForceField.h.
double* ForceFields::ForceField::dp_distMat [protected] |
our internal distance matrix
Definition at line 185 of file ForceField.h.
1.7.1