# sc::Function Class Reference

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

`#include <function.h>`

Inheritance diagram for sc::Function:

List of all members.

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

`matrixkit`
  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::CLKS, sc::HSOSKS, sc::UKS, sc::MBPT2, sc::MBPT2_R12, sc::PsiWavefunction, sc::PsiSCF, sc::PsiCCSD, sc::PsiCCSD_T, sc::CLHF, sc::CLSCF, sc::HSOSHF, sc::HSOSSCF, sc::SCF, sc::UHF, sc::UnrestrictedSCF, sc::OneBodyWavefunction, 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::CLKS, sc::HSOSKS, sc::UKS, sc::MBPT2, sc::MBPT2_R12, sc::CLHF, sc::HSOSHF, sc::UHF, and sc::Shape.

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

- function.h