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

# sc\_MolecularEnergy(3)

The MolecularEnergy abstract class inherits from the Function class.

## NAME

sc::MolecularEnergy - The **MolecularEnergy** abstract class inherits from the **Function** class.

## SYNOPSIS

`#include <energy.h>`

Inherits **sc::Function**.

Inherited by **sc::SumMolecularEnergy**, **sc::TaylorMolecularEnergy**, and **sc::Wavefunction**.

### Public Member Functions

**MolecularEnergy** (const **MolecularEnergy** &)\
 **MolecularEnergy** (const **Ref**\< **KeyVal** \> &)\
 The **KeyVal** constructor.  **MolecularEnergy** (**StateIn** &)\
 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.  void **set\_checkpoint** ()\
 Set up checkpointing.  void **set\_checkpoint\_file** (const char \*)\
 void **set\_checkpoint\_freq** (int freq)\
 bool **if\_to\_checkpoint** () const\
 Check if need to checkpoint.  const char \* **checkpoint\_file** () const\
 int **checkpoint\_freq** () const\
 **MolecularEnergy** & **operator=** (const **MolecularEnergy** &)\
 virtual double **energy** ()\
 A wrapper around **value()**;.  virtual **Ref**\< **Molecule** \> **molecule** () const\
 virtual **RefSCDimension** **moldim** () const\
 void **guess\_hessian** (**RefSymmSCMatrix** &)\
 **Compute** a quick, approximate hessian.  **RefSymmSCMatrix** **inverse\_hessian** (**RefSymmSCMatrix** &)\
 **RefSymmSCMatrix** **hessian** ()\
 If a molecule hessian object is given, it will be used to provide a hessian.  int **hessian\_implemented** () const\
 void **set\_x** (const **RefSCVector** &)\
 Set and retrieve the coordinate values.  **RefSCVector** **get\_cartesian\_x** ()\
 Return the cartesian coordinates.  **RefSCVector** **get\_cartesian\_gradient** ()\
 Return the cartesian gradient.  **RefSymmSCMatrix** **get\_cartesian\_hessian** ()\
 Return the cartesian hessian.  **Ref**\< **MolecularCoor** \> **molecularcoor** ()\
 virtual void **symmetry\_changed** ()\
 Call this if you have changed the molecular symmetry of the molecule contained by this **MolecularEnergy**.  **Ref**\< **NonlinearTransform** \> **change\_coordinates** ()\
 An optimizer can call change coordinates periodically to give the function an opportunity to change its coordinate system.  void **print\_natom\_3** (const **RefSCVector** &, const char \*t=0, std::ostream &o=**ExEnv::out0**()) const\
 Nicely print n x 3 data that are stored in a vector.  void **print\_natom\_3** (double \*\*, const char \*t=0, std::ostream &o=**ExEnv::out0**()) const\
 void **print\_natom\_3** (double \*, const char \*t=0, std::ostream &o=**ExEnv::out0**()) const\
 virtual void **print** (std::ostream &=**ExEnv::out0**()) const\
 Print information about the object.

### Protected Member Functions

void **failure** (const char \*)\
 virtual void **set\_energy** (double)\
 This is just a wrapper around set\_value().  virtual void **set\_gradient** (**RefSCVector** &)\
 These are passed gradients and hessian in cartesian coordinates.  virtual void **set\_hessian** (**RefSymmSCMatrix** &)\
 void **x\_to\_molecule** ()\
 void **molecule\_to\_x** ()\

### Protected Attributes

**Ref**\< **PointGroup** \> **initial\_pg\_**\
 int **print\_molecule\_when\_changed\_**\

### Additional Inherited Members

## Detailed Description

The **MolecularEnergy** abstract class inherits from the **Function** class.

It computes the energy of the molecule as a function of the geometry. The coordinate system used can be either internal or cartesian. \

## Constructor & Destructor Documentation

### sc::MolecularEnergy::MolecularEnergy (const Ref\< KeyVal \> &)

The **KeyVal** constructor.

- `molecule`

  A **Molecule** object. There is no default.

- `coor`

  A **MolecularCoor** object that describes the coordinates. If this is not given cartesian coordinates will be used. For convenience, two keywords needed by the **MolecularCoor** object are automatically provided: natom3 and matrixkit.

- `value_accuracy`

  Sets the accuracy to which values are computed. The default is 1.0e-6 atomic units.

- `gradient_accuracy`

  Sets the accuracy to which gradients are computed. The default is 1.0e-6 atomic units.

- `hessian_accuracy`

  Sets the accuracy to which hessians are computed. The default is 1.0e-4 atomic units.

- `hessian`

  Specifies a **MolecularHessian** object that is used to compute the hessian. If this **MolecularEnergy** specialization does not provide a hessian of its own, and a hessian is needed, then this keyword must be specified.

- `guess_hessian`

  Specifies a **MolecularHessian** object that is used to compute a guess hessian. Guess hessians are used to improve the rate of convergence of optimizations. If this keyword is not specified, and a **MolecularCoor** object is given by `coor`, then the guess hessian is obtained from the **MolecularCoor** object. If neither this nor `coor` are given, then **Function::guess\_hessian** is used, which returns a unit matrix.

- `print_molecule_when_changed`

  If true, then whenever the molecule's coordinates are updated they will be printed. The default is true.

- `checkpoint`

  If true, then this object will be checkpointed during its evaluation. Not all implementations of **MolecularEnergy support checkpointing. The default is false.**

- `checkpoint_file`

  **Specifies the name of the file into which this object will be checkpointed. Default is '\<inpubasename\>.ckpt', where '\<inputbasename\>' is the name of the input file without '.in'.**

- `checkpoint_freq`

  **Specifies how often this object to be checkpointed. Only matters for objects which are computed iteratively. Default is 1.**

## Member Function Documentation

### Ref\< NonlinearTransform \> sc::MolecularEnergy::change\_coordinates ()` [virtual]`

**An optimizer can call change coordinates periodically to give the function an opportunity to change its coordinate system. A return value of 0 means the coordinates were not changed. Otherwise, a transform object to the new coordinate system is return. The function object applies the transform to any objects it contains. This will obsolete the function data.**

**Reimplemented from sc::Function.**

### void sc::MolecularEnergy::guess\_hessian (RefSymmSCMatrix &)` [virtual]`

**Compute a quick, approximate hessian.**

**Reimplemented from sc::Function.**

### RefSymmSCMatrix sc::MolecularEnergy::hessian ()` [virtual]`

**If a molecule hessian object is given, it will be used to provide a hessian.**

**Reimplemented from sc::Function.**

### int sc::MolecularEnergy::hessian\_implemented () const` [virtual]`

**Reimplemented from sc::Function.**

### RefSymmSCMatrix sc::MolecularEnergy::inverse\_hessian (RefSymmSCMatrix &)` [virtual]`

**Reimplemented from sc::Function.**

### virtual Ref\< Molecule \> sc::MolecularEnergy::molecule () const` [virtual]`

**Reimplemented in sc::Wavefunction.**

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

**Print information about the object.**

**Reimplemented from sc::Function.**

**Reimplemented in sc::TaylorMolecularEnergy, sc::Wavefunction, sc::CLKS, sc::HSOSKS, sc::UKS, sc::MBPT2, sc::MBPT2\_R12, sc::PsiWavefunction, sc::CLHF, sc::CLSCF, sc::HSOSHF, sc::HSOSSCF, sc::OSSHF, sc::OSSSCF, sc::SCF, sc::TCHF, sc::TCSCF, sc::UHF, sc::UnrestrictedSCF, and sc::OneBodyWavefunction.**

### void sc::MolecularEnergy::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::Function.**

**Reimplemented in sc::SumMolecularEnergy, sc::TaylorMolecularEnergy, sc::CLKS, sc::HSOSKS, sc::UKS, sc::MBPT2, sc::MP2BasisExtrap, sc::MBPT2\_R12, sc::PsiWavefunction, sc::PsiSCF, sc::PsiCCSD, sc::PsiCCSD\_T, sc::CLHF, sc::CLSCF, sc::HSOSHF, sc::HSOSSCF, sc::OSSHF, sc::OSSSCF, sc::SCF, sc::TCHF, sc::TCSCF, sc::UHF, sc::UnrestrictedSCF, sc::ExtendedHuckelWfn, sc::OneBodyWavefunction, sc::HCoreWfn, and sc::Wavefunction.**

### virtual void sc::MolecularEnergy::set\_gradient (RefSCVector &)` [protected]`, ` [virtual]`

**These are passed gradients and hessian in cartesian coordinates. The gradient and hessian in internal coordinates are computed.**

**Reimplemented from sc::Function.**

### virtual void sc::MolecularEnergy::set\_hessian (RefSymmSCMatrix &)` [protected]`, ` [virtual]`

**Reimplemented from sc::Function.**

### void sc::MolecularEnergy::set\_x (const RefSCVector &)` [virtual]`

**Set and retrieve the coordinate values.**

**Reimplemented from sc::Function.**

**Reimplemented in sc::SumMolecularEnergy.**

### virtual void sc::MolecularEnergy::symmetry\_changed ()` [virtual]`

**Call this if you have changed the molecular symmetry of the molecule contained by this MolecularEnergy.**

**Reimplemented in sc::MBPT2, sc::CLSCF, sc::HSOSSCF, sc::OSSSCF, sc::SCF, sc::TCSCF, sc::UnrestrictedSCF, sc::OneBodyWavefunction, and sc::Wavefunction.**

## Author

**Generated automatically by Doxygen for MPQC from the source code.**
