# sc::MolecularCoor Class Reference

The MolecularCoor abstract class describes the coordinate system used to describe a molecule. More...

`#include <coor.h>`

Inheritance diagram for sc::MolecularCoor:

List of all members.

## Public Member Functions

| MolecularCoor (Ref< Molecule > &)
| MolecularCoor (StateIn &)
| MolecularCoor (const Ref< KeyVal > &)
| The KeyVal constructor.
void | save_data_state (StateOut &)
| Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR initializes them.
RefSCDimension | dim_natom3 ()
| Returns a smart reference to an SCDimension equal to the number of atoms in the molecule times 3.
Ref< Molecule > | molecule () const
| Returns the molecule.
virtual void | print (std::ostream &=ExEnv::out0()) const =0
| Print the coordinate.
virtual void | print_simples (std::ostream &=ExEnv::out0()) const =0
virtual RefSCDimension | dim ()=0
| Returns a smart reference to an SCDimension equal to the number of coordinates (be they Cartesian, internal, or whatever) that are being optimized.
int | to_cartesian (const RefSCVector &internal)
| Given a set of displaced internal coordinates, update the cartesian coordinates of the Molecule contained herein.
virtual int | to_cartesian (const Ref< Molecule > &mol, const RefSCVector &internal)=0
virtual int | to_internal (RefSCVector &internal)=0
| Fill in the vector ``internal'' with the current internal coordinates.
virtual int | to_cartesian (RefSCVector &cartesian, RefSCVector &internal)=0
| Convert the internal coordinate gradients in ``internal'' to Cartesian coordinates and copy these Cartesian coordinate gradients to ``cartesian''.
virtual int | to_internal (RefSCVector &internal, RefSCVector &cartesian)=0
| Convert the Cartesian coordinate gradients in ``cartesian'' to internal coordinates and copy these internal coordinate gradients to ``internal''.
virtual int | to_cartesian (RefSymmSCMatrix &cartesian, RefSymmSCMatrix &internal)=0
| Convert the internal coordinate Hessian ``internal'' to Cartesian coordinates and copy the result to ``cartesian''.
virtual int | to_internal (RefSymmSCMatrix &internal, RefSymmSCMatrix &cartesian)=0
| Convert the Cartesian coordinate Hessian ``cartesian'' to internal coordinates and copy the result to ``internal''.
virtual void | guess_hessian (RefSymmSCMatrix &hessian)=0
| Calculate an approximate hessian and place the result in ``hessian''.
virtual RefSymmSCMatrix | inverse_hessian (RefSymmSCMatrix &)=0
| Given an Hessian, return the inverse of that hessian.
virtual int | nconstrained ()
| Returns the number of constrained coordinates.
virtual Ref< NonlinearTransform > | change_coordinates ()
| When this is called, MoleculeCoor may select a new internal coordinate system and return a transform to it.
Ref< SCMatrixKit > | matrixkit () const

## Protected Attributes

Ref< Molecule > | molecule_
RefSCDimension | dnatom3_
Ref< SCMatrixKit > | matrixkit_
int | debug_

## Detailed Description

The MolecularCoor abstract class describes the coordinate system used to describe a molecule.

It is used to convert a molecule's cartesian coordinates to and from this coordinate system.

## Constructor & Destructor Documentation

sc::MolecularCoor::MolecularCoor | ( | const Ref< KeyVal > & |  | ) |

The KeyVal constructor.

`molecule`
  A Molecule object. There is no default.

`debug`
  An integer which, if nonzero, will cause extra output.

`matrixkit`
  A SCMatrixKit object. It is usually unnecessary to give this keyword.

`natom3`
  An SCDimension object for the dimension of the vector of cartesian coordinates. It is usually unnecessary to give this keyword.

## Member Function Documentation

void sc::MolecularCoor::save_data_state | ( | StateOut & |  | ) | `[virtual]`

Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR initializes them.

This must be implemented by the derived class if the class has data.

Reimplemented from sc::SavableState.

Reimplemented in sc::IntMolecularCoor, sc::SymmMolecularCoor, sc::RedundMolecularCoor, and sc::CartMolecularCoor.

RefSCDimension sc::MolecularCoor::dim_natom3 | ( |  | ) | `[inline]`

Returns a smart reference to an SCDimension equal to the number of atoms in the molecule times 3.

virtual RefSCDimension sc::MolecularCoor::dim | ( |  | ) | `[pure virtual]`

Returns a smart reference to an SCDimension equal to the number of coordinates (be they Cartesian, internal, or whatever) that are being optimized.

Implemented in sc::IntMolecularCoor, and sc::CartMolecularCoor.

int sc::MolecularCoor::to_cartesian | ( | const RefSCVector & | internal | ) |

Given a set of displaced internal coordinates, update the cartesian coordinates of the Molecule contained herein.

This function does not change the vector ``internal''.

virtual int sc::MolecularCoor::to_internal | ( | RefSCVector & | internal | ) | `[pure virtual]`

Fill in the vector ``internal'' with the current internal coordinates.

Note that this member will update the values of the variable internal coordinates.

Implemented in sc::IntMolecularCoor, and sc::CartMolecularCoor.

virtual int sc::MolecularCoor::to_cartesian | ( | RefSCVector & | cartesian,
|  | RefSCVector & | internal |
| ) |  |  | `[pure virtual]`

Convert the internal coordinate gradients in ``internal'' to Cartesian coordinates and copy these Cartesian coordinate gradients to ``cartesian''.

Only the variable internal coordinate gradients are transformed.

Implemented in sc::IntMolecularCoor, and sc::CartMolecularCoor.

virtual int sc::MolecularCoor::to_internal | ( | RefSCVector & | internal,
|  | RefSCVector & | cartesian |
| ) |  |  | `[pure virtual]`

Convert the Cartesian coordinate gradients in ``cartesian'' to internal coordinates and copy these internal coordinate gradients to ``internal''.

Only the variable internal coordinate gradients are calculated.

Implemented in sc::IntMolecularCoor, and sc::CartMolecularCoor.

virtual int sc::MolecularCoor::to_cartesian | ( | RefSymmSCMatrix & | cartesian,
|  | RefSymmSCMatrix & | internal |
| ) |  |  | `[pure virtual]`

Convert the internal coordinate Hessian ``internal'' to Cartesian coordinates and copy the result to ``cartesian''.

Only the variable internal coordinate force constants are transformed.

Implemented in sc::IntMolecularCoor, and sc::CartMolecularCoor.

virtual int sc::MolecularCoor::to_internal | ( | RefSymmSCMatrix & | internal,
|  | RefSymmSCMatrix & | cartesian |
| ) |  |  | `[pure virtual]`

Convert the Cartesian coordinate Hessian ``cartesian'' to internal coordinates and copy the result to ``internal''.

Only the variable internal coordinate force constants are calculated.

Implemented in sc::IntMolecularCoor, and sc::CartMolecularCoor.

virtual void sc::MolecularCoor::guess_hessian | ( | RefSymmSCMatrix & | hessian | ) | `[pure virtual]`

Calculate an approximate hessian and place the result in ``hessian''.

Implemented in sc::SymmMolecularCoor, sc::RedundMolecularCoor, and sc::CartMolecularCoor.

virtual RefSymmSCMatrix sc::MolecularCoor::inverse_hessian | ( | RefSymmSCMatrix & |  | ) | `[pure virtual]`

Given an Hessian, return the inverse of that hessian.

For singular matrices this should return the generalized inverse.

Implemented in sc::SymmMolecularCoor, sc::RedundMolecularCoor, and sc::CartMolecularCoor.

virtual Ref<NonlinearTransform> sc::MolecularCoor::change_coordinates | ( |  | ) | `[virtual]`

When this is called, MoleculeCoor may select a new internal coordinate system and return a transform to it.

The default action is to not change anything and return an IdentityTransform.

Reimplemented in sc::SymmMolecularCoor.

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

- coor.h