# sc_Function (3) - Linux Manuals

## NAME

sc::Function -

The **Function** class is an abstract base class that, given a set of coordinates, will compute a value and possibly a gradient and hessian at that **point**.

## SYNOPSIS

#include <function.h>

Inherits **sc::SavableState**, and **sc::Compute**.

Inherited by **sc::MolecularEnergy**, and **sc::Volume**.

### Public Member Functions

**Function** (**StateIn** &)

**Function** (const **Function** &)

**Function** (const **Ref**< **KeyVal** > &, double funcacc=DBL_EPSILON, double gradacc=DBL_EPSILON, double hessacc=DBL_EPSILON)

*The keyval constructor reads the following keywords:. *

**Function** & **operator=** (const **Function** &)

**Ref**< **SCMatrixKit** > **matrixkit** () const

*Return the ***SCMatrixKit** used to construct vectors and matrices.

**RefSCDimension** **dimension** () const

*Return the ***SCDimension** of the problem.

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

virtual double **value** ()

*Return the value of the function. *

int **value_needed** () const

*Returns nonzero if the current value is not up-to-date. *

int **do_value** (int)

*If passed a nonzero number, compute the value the next time ***compute()** is called.

**AccResultdouble** & **value_result** ()

virtual void **set_desired_value_accuracy** (double)

*Set the accuracy to which the value is to be computed. *

virtual double **actual_value_accuracy** () const

*Return the accuracy with which the value has been computed. *

virtual double **desired_value_accuracy** () const

*Return the accuracy with which the value is to be computed. *

virtual void **guess_hessian** (**RefSymmSCMatrix** &)

**Compute** a quick, approximate hessian.

virtual **RefSymmSCMatrix** **inverse_hessian** (**RefSymmSCMatrix** &)

virtual int **value_implemented** () const

*Information about the availability of values, gradients, and hessians. *

virtual int **gradient_implemented** () const

virtual int **hessian_implemented** () const

virtual void **set_x** (const **RefSCVector** &)

*Set and retrieve the coordinate values. *

**RefSCVector** **get_x** () const

const **RefSCVector** & **get_x_no_copy** () const

virtual **Ref**< **NonlinearTransform** > **change_coordinates** ()

*An optimizer can call change coordinates periodically to give the function an opportunity to change its coordinate system. *

virtual void **print** (std::ostream &=ExEnv::out0()) const

*Print information about the object. *

**Gradient Members**

These are analogous to the routines that deal with values, but work with gradients instead.

virtual **RefSCVector** **gradient** ()

int **gradient_needed** () const

int **do_gradient** (int)

virtual void **set_desired_gradient_accuracy** (double)

virtual double **actual_gradient_accuracy** () const

virtual double **desired_gradient_accuracy** () const

**AccResultRefSCVector** & **gradient_result** ()

**Hessian Members**

These are analogous to the routines that deal with values, but work with the hessian instead.

virtual **RefSymmSCMatrix** **hessian** ()

int **hessian_needed** () const

int **do_hessian** (int)

virtual void **set_desired_hessian_accuracy** (double)

virtual double **actual_hessian_accuracy** () const

virtual double **desired_hessian_accuracy** () const

**AccResultRefSymmSCMatrix** & **hessian_result** ()

### Protected Member Functions

virtual void **set_matrixkit** (const **Ref**< **SCMatrixKit** > &)

*Set the ***SCMatrixKit** that should be used to construct the requisite vectors and matrices.

virtual void **set_dimension** (const **RefSCDimension** &)

**RefSCVector** & **get_x_reference** ()

*Get read/write access to the coordinates for modification. *

void **do_change_coordinates** (const **Ref**< **NonlinearTransform** > &)

*Change the coordinate system and apply the given transform to intermediates matrices and vectors. *

**Update Members**

Update the various computable results.

virtual void **set_value** (double)

virtual void **set_gradient** (**RefSCVector** &)

virtual void **set_hessian** (**RefSymmSCMatrix** &)

**Accuracy Setting Members**

Set the accuracies with which the various computables have been computed.

virtual void **set_actual_value_accuracy** (double)

virtual void **set_actual_gradient_accuracy** (double)

virtual void **set_actual_hessian_accuracy** (double)

### Protected Attributes

**Ref**< **SCMatrixKit** > **matrixkit_**

*Used to construct new matrices. *

**RefSCVector** **x_**

*The variables. *

**RefSCDimension** **dim_**

*The dimension of x_. *

**AccResultdouble** **value_**

*The value of the function at x_. *

**AccResultRefSCVector** **gradient_**

*The gradient at x_. *

**AccResultRefSymmSCMatrix** **hessian_**

*The hessian at x_. *

## Detailed Description

The **Function** class is an abstract base class that, given a set of coordinates, will compute a value and possibly a gradient and hessian at that **point**.

## Constructor & Destructor Documentation

### sc::Function::Function (const **Ref**< **KeyVal** > &, double funcacc = DBL_EPSILON, double gradacc = DBL_EPSILON, double hessacc = DBL_EPSILON)

The keyval constructor reads the following keywords:. .IP "matrixkit" 1c
Gives a **SCMatrixKit** object. If it is not specified, a default **SCMatrixKit** is selected.

- value_accuracy
- Sets the accuracy to which values are computed. The default is the machine accuracy.

- gradient_accuracy
- Sets the accuracy to which gradients are computed. The default is the machine accuracy.

- hessian_accuracy
- Sets the accuracy to which hessians are computed. The default is the machine accuracy.

## Member Function Documentation

### virtual **Ref**<**NonlinearTransform**> sc::Function::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 in **sc::MolecularEnergy**.

### void sc::Function::do_change_coordinates (const **Ref**< **NonlinearTransform** > &) [protected]

Change the coordinate system and apply the given transform to intermediates matrices and vectors.

### int sc::Function::do_value (int)

If passed a nonzero number, compute the value the next time **compute()** is called. Return a nonzero number if the value was previously to be computed.

**Ref**<**SCMatrixKit**> sc::Function::matrixkit () const

Return the **SCMatrixKit** used to construct vectors and matrices.

### virtual void sc::Function::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::MolecularEnergy**, **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::Function::set_matrixkit (const **Ref**< **SCMatrixKit** > &) [protected, virtual]

Set the **SCMatrixKit** that should be used to construct the requisite vectors and matrices.

### virtual int sc::Function::value_implemented () const [virtual]

Information about the availability of values, gradients, and hessians.

Reimplemented in **sc::SumMolecularEnergy**, **sc::TaylorMolecularEnergy**, **sc::CLKS**, **sc::HSOSKS**, **sc::UKS**, **sc::MBPT2**, **sc::MBPT2_R12**, **sc::CLHF**, **sc::HSOSHF**, **sc::OSSHF**, **sc::TCHF**, **sc::UHF**, **sc::ExtendedHuckelWfn**, **sc::HCoreWfn**, and **sc::Shape**.

## Author

Generated automatically by Doxygen for MPQC from the source code.