Main Page | Modules | Namespace List | Class Hierarchy | Class List | Namespace Members | Class Members

ForceField Class Reference
[General Force Field Classes.]

Force field class. More...

#include <forceField.h>

Inheritance diagram for ForceField:

AmberFF CharmmFF MMFF94 List of all members.

Public Types

Type Definitions
typedef std::vector< std::pair<
Atom *, Atom * > > 
PairVector
 Atom pair vector.

Public Member Functions

Constructors and Destructors
 ForceField ()
 Default constructor.
 ForceField (System &system)
 Constructor.
 ForceField (System &system, const Options &options)
 Constructor.
 ForceField (const ForceField &force_field)
 Copy constructor.
virtual ~ForceField ()
 Destructor.
virtual void clear () throw ()
 Clear method.
Assignments
ForceFieldoperator= (const ForceField &force_field)
 Assignment operator.
Debugging and Diagnostics
bool isValid () const throw ()
 Check the force field's validity.
Setup methods
bool setup (System &system)
 Sets up the force field and its components.
bool setup (System &system, const Options &options)
 Sets up the force field and its components.
virtual bool specificSetup () throw (Exception::TooManyErrors)
 Force field specific setup.
void setMaximumNumberOfErrors (Size nr)
 Set the number of atoms, for which the setup of the forcefield can fail, until the setup() methods aborts and return false.
Size getMaximumNumberOfErrors () const
 Get the number of atoms, for which the setup of the forcefield can fail, until the setup() methods aborts and return false.
HashSet< const Atom * > & getUnassignedAtoms ()
 Get the atoms, for which the force field setup failed.
Accessors
void setName (const String &name)
 Sets the force field name.
String getName () const
 Returns the force field name.
Size getNumberOfAtoms () const
 Returns the number of atoms stored in the force field.
Size getNumberOfMovableAtoms () const
 Returns the number of non-fixed atoms stored in the force field.
const AtomVectorgetAtoms () const throw ()
 Returns a reference to the atom vector.
SystemgetSystem () throw ()
 Returns a pointer to the system.
const SystemgetSystem () const throw ()
 Returns a const pointer to the system.
bool getUseSelection () const throw ()
 Return the status of the selection mechanism.
void disableSelection () throw ()
 Set the status of the selection mechanism.
void enableSelection () throw ()
 Set the status of the selection mechanism.
bool isSelectionEnabled () const throw ()
 Return the status of the selection mechanism.
ForceFieldParametersgetParameters ()
 Returns a pointer to the parameter file.
Size countComponents () const
 Returns the number of components registered by the force field.
const TimeStampgetUpdateTime () const throw ()
 Return the point of time of the last call to update.
const TimeStampgetSetupTime () const throw ()
 Return the point of time of the last call to setup.
void insertComponent (ForceFieldComponent *force_field_component)
 Insert a new component into the force field's component list.
void removeComponent (const ForceFieldComponent *force_field_component)
 Remove a component from the force field's component list.
void removeComponent (const String &name)
 Remove a component from the force field's component list.
ForceFieldComponentgetComponent (const Size index) const
 Return a pointer to the specified force field component.
ForceFieldComponentgetComponent (const String &name) const
 Return a pointer to the specified force field component.
double getEnergy () const
 Return the sum of energies of all registered force field components.
double updateEnergy ()
 Calculate the sum of energies of all force field components and returns its value.
void updateForces ()
 Calculate the forces caused by each component and updates the current forces.
double getRMSGradient () const
 Calculates the RMS of the current gradient.
virtual Size getUpdateFrequency () const
 Return the update frequency for pair lists etc.
virtual void update () throw (Exception::TooManyErrors)
 Update internal data structures.
virtual String getResults () const throw ()
 Get the current results in String form (Generic function to be overloaded in derived classes.).
std::ostream & error () throw (Exception::TooManyErrors)

Public Attributes

Public Attributes
Options options
 Force field options.
PeriodicBoundary periodic_boundary
 Periodic boundary.

Protected Member Functions

void collectAtoms_ (const System &system)
void sortSelectedAtomVector_ ()

Protected Attributes

Systemsystem_
AtomVector atoms_
ForceFieldParameters parameters_
bool valid_
String name_
double energy_
vector< ForceFieldComponent * > components_
Size number_of_movable_atoms_
bool use_selection_
bool selection_enabled_
TimeStamp update_time_stamp_
TimeStamp setup_time_stamp_
HashSet< const Atom * > unassigned_atoms_
Size max_number_of_errors_
Size number_of_errors_

Friends

class ForceFieldComponent

Detailed Description

Force field class.

This class is used to represent a general force field. Each force field by itself is composed by several different force field components which are represented by ForceFieldComponent objects.

Each ForceField object provides a list of components which may be manipulated by the user to generate the force field he needs.
ForceField only represents a baseclass to the specific force field implementations (e.g. AMBER ) and implements the common interface and the neccessary mechanisms to administer the force field components.
A typical force field contains a small number of components (e.g. bond stretch, bend, torsion and non-bonding interactions). A specialized forcefield has to implement each of these components (by deriving them from ForceFieldComponent and must be derived from ForceField. Basically only the default constructor for the new forcefield has to be modified to create an instance of each of the components and register them by calling insertComponent . But in order to implement the setup methods of the force field components efficiently, jobs like assigning atom types, reading parameter files and the such should be provided for all force field components by the corrseponding ForceField object. This should be implemented in the force field-specific specificSetup method.
For an efficient and easy to use implementation of a forcefield parameter file, please refer to ForceFieldParameters and its related objects.
Each force field provides as well energy and its derivatives, the force on each atom. A calculation of the energy is done by calling updateEnergy . This method iterates over the list of force field components and invokes the updateEnergy method of each of these components. The total energy may then be retrieved by calling getEnergy .
Analogously, a force calculation is performed by invoking updateForces . getForces returns a pointer to an array containing the forces for each atom.


Member Typedef Documentation

typedef std::vector<std::pair<Atom*, Atom*> > ForceField::PairVector
 

Atom pair vector.

This type is used to represent "pair lists". In fact, it is a vector of pairs of atom pointers.


Constructor & Destructor Documentation

ForceField::ForceField  ) 
 

Default constructor.

A default-constructed force field is not valid! It becomes valid after a successful call to setup.

ForceField::ForceField System system  ) 
 

Constructor.

The successful setup of the force field can be verified by the isValid method.

ForceField::ForceField System system,
const Options options
 

Constructor.

The successful setup of the force field can be verified by the isValid method.

virtual ForceField::~ForceField  )  [virtual]
 

Destructor.


Member Function Documentation

virtual void ForceField::clear  )  throw () [virtual]
 

Clear method.

Reimplemented in AmberFF, CharmmFF, and MMFF94.

Size ForceField::countComponents  )  const
 

Returns the number of components registered by the force field.

ForceFieldComponent* ForceField::getComponent const String name  )  const
 

Return a pointer to the specified force field component.

If a component with the specified name does not exist, 0 is returned.

ForceFieldComponent* ForceField::getComponent const Size  index  )  const
 

Return a pointer to the specified force field component.

If the specified index does not exist, 0 is returned. The given index should be smaller than the value returned by countComponents. The first component in the list has the index zero.

double ForceField::getEnergy  )  const
 

Return the sum of energies of all registered force field components.

No calculation will be performed. This method simply returns the last value for the total energy calculated by updateEnergy.

Returns:
double - energy in kJ/mol

Size ForceField::getMaximumNumberOfErrors  )  const
 

Get the number of atoms, for which the setup of the forcefield can fail, until the setup() methods aborts and return false.

Size ForceField::getNumberOfMovableAtoms  )  const
 

Returns the number of non-fixed atoms stored in the force field.

If the option SELECTION_FIXED is set to true or SELECTION_MOVABLE is set to true the atom array is split. The first section (indices 0 to getNumberOfMovableAtoms ) contains the atoms that are to be moved, the rest of the array contains the fixed atoms.

const TimeStamp& ForceField::getSetupTime  )  const throw ()
 

Return the point of time of the last call to setup.

ForceField contains a time stamp which is used to determine whether the selection or even the topology of the system has changed. Every time update is called, the update_time_stamp_ is updated. Similarly, all setup methods update the setup_time_stamp_

virtual Size ForceField::getUpdateFrequency  )  const [virtual]
 

Return the update frequency for pair lists etc.

This method is used by minimizers or the MD simulation to determine the number of iterations between two calls to update .

Reimplemented in AmberFF, and MMFF94.

const TimeStamp& ForceField::getUpdateTime  )  const throw ()
 

Return the point of time of the last call to update.

ForceField contains a time stamp which is used to determine whether the selection or even the topology of the system has changed. Every time update is called, the update_time_stamp_ is updated. Similarly, all setup methods update the setup_time_stamp_

void ForceField::insertComponent ForceFieldComponent force_field_component  ) 
 

Insert a new component into the force field's component list.

Responsability for the destruction of the component is passed on to the ForceField instance.

bool ForceField::isValid  )  const throw ()
 

Check the force field's validity.

A force field is valid if it is bound to a system and setup was successful.

void ForceField::removeComponent const String name  ) 
 

Remove a component from the force field's component list.

void ForceField::removeComponent const ForceFieldComponent force_field_component  ) 
 

Remove a component from the force field's component list.

The ForceFieldComponent will be destructed and removed from the component list.

void ForceField::setMaximumNumberOfErrors Size  nr  ) 
 

Set the number of atoms, for which the setup of the forcefield can fail, until the setup() methods aborts and return false.

By default, there is no limit set.

void ForceField::setName const String name  ) 
 

Sets the force field name.

bool ForceField::setup System system,
const Options options
 

Sets up the force field and its components.

bool ForceField::setup System system  ) 
 

Sets up the force field and its components.

virtual bool ForceField::specificSetup  )  throw (Exception::TooManyErrors) [virtual]
 

Force field specific setup.

This method is called by setup.

Reimplemented in AmberFF, CharmmFF, and MMFF94.

virtual void ForceField::update  )  throw (Exception::TooManyErrors) [virtual]
 

Update internal data structures.

The force field may use this method to update internal data structures (e.g. pair lists) periodically. The MD simulation class as well as the minimizer classes use getUpdateFrequency to determine the number of iterations between two calls to update.

The default implementation calls ForceFieldComponent::update for each component in the force field.

double ForceField::updateEnergy  ) 
 

Calculate the sum of energies of all force field components and returns its value.

void ForceField::updateForces  ) 
 

Calculate the forces caused by each component and updates the current forces.