---
name: "sc_MolecularCoor"
section: "3"
platform: "linux"
package: "libsc-doc"
version: "2.3.1-22"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/sc_MolecularCoor"
---

# sc\_MolecularCoor(3)

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

## NAME

sc::MolecularCoor - The **MolecularCoor** abstract class describes the coordinate system used to describe a molecule.

## SYNOPSIS

`#include <coor.h>`

Inherits **sc::SavableState**.

Inherited by **sc::CartMolecularCoor**, and **sc::IntMolecularCoor**.

### 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\_**\

### Additional Inherited Members

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

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

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

### 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 int sc::MolecularCoor::nconstrained ()` [virtual]`

Returns the number of constrained coordinates.

Reimplemented in **sc::IntMolecularCoor**.

### virtual void sc::MolecularCoor::print (std::ostream & = ExEnv::out0`()`) const` [pure virtual]`

Print the coordinate.

Reimplemented from **sc::DescribedClass**.

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

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

### 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\_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\_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 (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\_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\_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**.

## Author

Generated automatically by Doxygen for MPQC from the source code.
