MADNESS  0.10.1
Public Member Functions | Static Public Member Functions | Public Attributes | Private Member Functions | Private Attributes | List of all members
madness::MolecularOptimizer Class Reference

Molecular optimizer derived from the QuasiNewton optimizer. More...

#include <molecular_optimizer.h>

Inheritance diagram for madness::MolecularOptimizer:
Inheritance graph
[legend]
Collaboration diagram for madness::MolecularOptimizer:
Collaboration graph
[legend]

Public Member Functions

 MolecularOptimizer (World &world, const commandlineparser &parser, const std::shared_ptr< MolecularOptimizationTargetInterface > &tar)
 same ctor as the QuasiNewton optimizer More...
 
bool converged () const
 
bool converged (const Tensor< double > &displacement) const
 
double gradient_norm () const
 
bool optimize (Tensor< double > &x)
 optimize the underlying molecule More...
 
void set_hessian (const Tensor< double > &hess)
 set an (initial) hessian More...
 
double value () const
 
- Public Member Functions inherited from madness::OptimizerInterface
virtual ~OptimizerInterface ()
 

Static Public Member Functions

static Tensor< double > compute_frequencies (const Molecule &molecule, const Tensor< double > &hessian, Tensor< double > &normalmodes, const std::vector< std::string > &remove_dof={}, const bool print_hessian=false)
 returns the vibrational frequencies More...
 
static Tensor< double > compute_reduced_mass (const Molecule &molecule, const Tensor< double > &normalmodes)
 
static Tensor< double > projector_external_dof (const Molecule &mol, const std::vector< std::string > &remove_dof)
 compute the projector to remove transl. and rot. degrees of freedom More...
 
static void remove_external_dof (Tensor< double > &hessian, const Molecule &mol, const std::vector< std::string > &remove_dof)
 remove translational degrees of freedom from the hessian More...
 

Public Attributes

MolecularOptimizationParameters parameters
 

Private Member Functions

Tensor< double > new_search_direction2 (const Tensor< double > &g, const Tensor< double > &hessian) const
 effectively invert the hessian and multiply with the gradient More...
 
bool optimize_conjugate_gradients (Tensor< double > &x)
 
bool optimize_quasi_newton (Tensor< double > &x)
 

Private Attributes

double f =1.e10
 
double gnorm =1.e10
 
Tensor< double > h
 
std::shared_ptr< MolecularOptimizationTargetInterfacetarget
 How to update the hessian: BFGS or SR1. More...
 

Detailed Description

Molecular optimizer derived from the QuasiNewton optimizer.

Essentially the QuasiNewton optimizer, but with the additional feature of projecting out rotational and translational degrees of freedom

Constructor & Destructor Documentation

◆ MolecularOptimizer()

madness::MolecularOptimizer::MolecularOptimizer ( World world,
const commandlineparser parser,
const std::shared_ptr< MolecularOptimizationTargetInterface > &  tar 
)
inline

same ctor as the QuasiNewton optimizer

Member Function Documentation

◆ compute_frequencies()

static Tensor<double> madness::MolecularOptimizer::compute_frequencies ( const Molecule molecule,
const Tensor< double > &  hessian,
Tensor< double > &  normalmodes,
const std::vector< std::string > &  remove_dof = {},
const bool  print_hessian = false 
)
inlinestatic

returns the vibrational frequencies

Parameters
[in]hessianthe hessian matrix (not mass-weighted)
[out]normalmodesthe normal modes
[in]project_trwhether to project out translation and rotation
[in]print_hessianwhether to print the hessian matrix
Returns
the frequencies in atomic units

Referenced by optimize_quasi_newton().

◆ compute_reduced_mass()

static Tensor<double> madness::MolecularOptimizer::compute_reduced_mass ( const Molecule molecule,
const Tensor< double > &  normalmodes 
)
inlinestatic

◆ converged() [1/2]

bool madness::MolecularOptimizer::converged ( ) const
inlinevirtual

◆ converged() [2/2]

bool madness::MolecularOptimizer::converged ( const Tensor< double > &  displacement) const
inline

◆ gradient_norm()

double madness::MolecularOptimizer::gradient_norm ( ) const
inlinevirtual

Implements madness::OptimizerInterface.

References gnorm.

Referenced by converged().

◆ new_search_direction2()

Tensor<double> madness::MolecularOptimizer::new_search_direction2 ( const Tensor< double > &  g,
const Tensor< double > &  hessian 
) const
inlineprivate

◆ optimize()

bool madness::MolecularOptimizer::optimize ( Tensor< double > &  x)
inlinevirtual

optimize the underlying molecule

Parameters
[in]xthe coordinates to compute energy and gradient

Implements madness::OptimizerInterface.

References converge(), and optimize_quasi_newton().

Referenced by main().

◆ optimize_conjugate_gradients()

bool madness::MolecularOptimizer::optimize_conjugate_gradients ( Tensor< double > &  x)
inlineprivate

◆ optimize_quasi_newton()

bool madness::MolecularOptimizer::optimize_quasi_newton ( Tensor< double > &  x)
inlineprivate

◆ projector_external_dof()

static Tensor<double> madness::MolecularOptimizer::projector_external_dof ( const Molecule mol,
const std::vector< std::string > &  remove_dof 
)
inlinestatic

◆ remove_external_dof()

static void madness::MolecularOptimizer::remove_external_dof ( Tensor< double > &  hessian,
const Molecule mol,
const std::vector< std::string > &  remove_dof 
)
inlinestatic

remove translational degrees of freedom from the hessian

Parameters
[in]do_remove_dofwhich dof to remove: x,y,z,Rx,Ry,Rz (transl/rot)

References madness::inner(), and projector_external_dof().

Referenced by optimize_quasi_newton().

◆ set_hessian()

void madness::MolecularOptimizer::set_hessian ( const Tensor< double > &  hess)
inline

set an (initial) hessian

References madness::copy(), and h.

Referenced by main().

◆ value()

double madness::MolecularOptimizer::value ( ) const
inlinevirtual

Member Data Documentation

◆ f

double madness::MolecularOptimizer::f =1.e10
private

Referenced by optimize_quasi_newton().

◆ gnorm

double madness::MolecularOptimizer::gnorm =1.e10
private

◆ h

Tensor<double> madness::MolecularOptimizer::h
private

◆ parameters

MolecularOptimizationParameters madness::MolecularOptimizer::parameters

◆ target

std::shared_ptr<MolecularOptimizationTargetInterface> madness::MolecularOptimizer::target
private

How to update the hessian: BFGS or SR1.

Referenced by optimize_conjugate_gradients(), and optimize_quasi_newton().


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