RDCode: ForceFields::ForceField Class Reference

- Main Page
- Namespaces
- Classes
- Files
- Directories

- Class List
- Class Hierarchy
- Class Members

# ForceFields::ForceField Class Reference

A class to store forcefields and handle minimization. More...

`#include <ForceField.h>`

List of all members.

## 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

## Detailed Description

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:

- The ForceField owns its contributions, which are stored using smart pointers.
- Distance calculations are currently lazy; the full distance matrix is never generated. In systems where the distance matrix is not sparse, this is almost certainly inefficient.

Definition at line 51 of file ForceField.h.

## Constructor & Destructor Documentation

ForceFields::ForceField::ForceField | ( | unsigned int | dimension = `3` | ) | `[inline]`

construct with a dimension

Definition at line 54 of file ForceField.h.

ForceFields::ForceField::~ForceField | ( |  | ) |

## Member Function Documentation

void ForceFields::ForceField::initialize | ( |  | ) |

does initialization

double ForceFields::ForceField::calcEnergy | ( |  | ) | const

calculates and returns the energy based on existing positions in the forcefield

Returns:
  the current energy

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

Parameters:

  | pos | an array of doubles. Should be `3*this->numPoints()` long.

Returns:
  the current energy

Side effects:

- Calling this resets the current distance matrix
- The individual contributions may further update the distance matrix

void ForceFields::ForceField::calcGrad | ( | double * | forces | ) | const

calculates the gradient of the energy at the current position

Parameters:

  | 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

Parameters:

  | pos | an array of doubles. Should be `3*this->numPoints()` long.
  | forces | an array of doubles. Should be `3*this->numPoints()` long.

Side effects:

- The individual contributions may modify the distance matrix

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

Parameters:

  | maxIts | the maximum number of iterations to try
  | forceTol | the convergence criterion for forces
  | energyTol | the convergence criterion for energies

Returns:
  an integer value indicating whether or not the convergence criteria were achieved:
  - 0: indicates success
  - 1: the minimization did not converge in `maxIts` iterations.

RDGeom::PointPtrVect& ForceFields::ForceField::positions | ( |  | ) | `[inline]`

returns a reference to our points (a PointPtrVect)

Definition at line 128 of file ForceField.h.

References d_positions.

const RDGeom::PointPtrVect& ForceFields::ForceField::positions | ( |  | ) | const`[inline]`

Definition at line 129 of file ForceField.h.

References d_positions.

ContribPtrVect& ForceFields::ForceField::contribs | ( |  | ) | `[inline]`

returns a reference to our contribs (a ContribPtrVect)

Definition at line 132 of file ForceField.h.

References d_contribs.

const ContribPtrVect& ForceFields::ForceField::contribs | ( |  | ) | const`[inline]`

Definition at line 133 of file ForceField.h.

References d_contribs.

double ForceFields::ForceField::distance | ( | unsigned int | i,
|  | unsigned int | j,
|  | double * | pos = `0` |
| ) |  |  |

returns the distance between two points

Parameters:

  | 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.

Returns:
  the distance

Side effects:

- if the distance between i and j has not previously been calculated, our internal distance matrix will be updated.

double ForceFields::ForceField::distance | ( | unsigned int | i,
|  | unsigned int | j,
|  | double * | pos = `0` |
| ) |  |  | const

returns the distance between two points

Parameters:

  | 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.

Returns:
  the distance

Note: The internal distance matrix is not updated in this case

unsigned int ForceFields::ForceField::dimension | ( |  | ) | const`[inline]`

returns the dimension of the forcefield

Definition at line 167 of file ForceField.h.

References d_dimension.

Referenced by DistGeom::FourthDimContrib::FourthDimContrib().

unsigned int ForceFields::ForceField::numPoints | ( |  | ) | const`[inline]`

returns the number of points the ForceField is handling

Definition at line 172 of file ForceField.h.

References d_numPoints.

INT_VECT& ForceFields::ForceField::fixedPoints | ( |  | ) | `[inline]`

Definition at line 174 of file ForceField.h.

References d_fixedPoints.

const INT_VECT& ForceFields::ForceField::fixedPoints | ( |  | ) | const`[inline]`

Definition at line 175 of file ForceField.h.

References d_fixedPoints.

void ForceFields::ForceField::scatter | ( | double * | pos | ) | const`[protected]`

scatter our positions into an array

Parameters:

  | pos | should be `3*this->numPoints()` long;

void ForceFields::ForceField::gather | ( | double * | pos | ) | `[protected]`

update our positions from an array

Parameters:

  | pos | should be `3*this->numPoints()` long;

void ForceFields::ForceField::initDistanceMatrix | ( |  | ) | `[protected]`

initializes our internal distance matrix

## Member Data Documentation

unsigned int ForceFields::ForceField::d_dimension`[protected]`

Definition at line 175 of file ForceField.h.

Referenced by dimension().

bool ForceFields::ForceField::df_init`[protected]`

whether or not we've been initialized

Definition at line 179 of file ForceField.h.

unsigned int ForceFields::ForceField::d_numPoints`[protected]`

the number of active points

Definition at line 180 of file ForceField.h.

Referenced by numPoints().

double* ForceFields::ForceField::dp_distMat`[protected]`

our internal distance matrix

Definition at line 181 of file ForceField.h.

RDGeom::PointPtrVect ForceFields::ForceField::d_positions`[protected]`

pointers to the points we're using

Definition at line 182 of file ForceField.h.

Referenced by positions().

ContribPtrVect ForceFields::ForceField::d_contribs`[protected]`

contributions to the energy

Definition at line 183 of file ForceField.h.

Referenced by contribs().

INT_VECT ForceFields::ForceField::d_fixedPoints`[protected]`

Definition at line 184 of file ForceField.h.

Referenced by fixedPoints().

unsigned int ForceFields::ForceField::d_matSize`[protected]`

Definition at line 185 of file ForceField.h.

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

- ForceField.h