/usr/include/sc/chemistry/molecule/hess.h is in libsc-dev 2.3.1-16.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 | //
// hess.h
//
// Copyright (C) 1997 Limit Point Systems, Inc.
//
// Author: Curtis Janssen <cljanss@limitpt.com>
// Maintainer: LPS
//
// This file is part of the SC Toolkit.
//
// The SC Toolkit is free software; you can redistribute it and/or modify
// it under the terms of the GNU Library General Public License as published by
// the Free Software Foundation; either version 2, or (at your option)
// any later version.
//
// The SC Toolkit is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public License
// along with the SC Toolkit; see the file COPYING.LIB. If not, write to
// the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
//
// The U.S. Government is granted a limited license as per AL 91-7.
//
#ifndef _chemistry_molecule_hess_h
#define _chemistry_molecule_hess_h
#ifdef __GNUC__
#pragma interface
#endif
#include <iostream>
#include <chemistry/molecule/molecule.h>
#include <chemistry/molecule/coor.h>
namespace sc {
class MolecularEnergy;
/** MolecularHessian is an abstract class that computes a molecule's second
derivatives of the energy with respect to changes in the nuclear
coordinates. */
class MolecularHessian: virtual public SavableState {
protected:
Ref<Molecule> mol_;
RefSCDimension d3natom_;
Ref<SCMatrixKit> matrixkit_;
public:
MolecularHessian();
/** The MolecularHessian KeyVal constructor is used to generate a
MolecularHessian derivative object from the input. It reads the
keywords below.
<table border="1">
<tr><td>Keyword<td>Type<td>Default<td>Description
<tr><td><tt>molecule</tt><td>Molecule<td>none<td>The Molecule object.
</table>
*/
MolecularHessian(const Ref<KeyVal>&);
MolecularHessian(StateIn&);
~MolecularHessian();
void save_data_state(StateOut&);
RefSCDimension d3natom();
Ref<SCMatrixKit> matrixkit() const { return matrixkit_; }
/// Return the cartesian hessian.
virtual RefSymmSCMatrix cartesian_hessian() = 0;
/** Some MolecularHessian specializations require a molecular energy
object. The default implementations of this ignores the
argument. */
virtual void set_energy(const Ref<MolecularEnergy> &energy);
/** This returns a MolecularEnergy object, if used by
this specialization. Otherwise null is returned. */
virtual MolecularEnergy* energy() const;
/** Find transformation matrix from cartesian to symmetry
coordinates. */
static RefSCMatrix cartesian_to_symmetry(const Ref<Molecule> &m,
Ref<PointGroup> pg = 0,
Ref<SCMatrixKit> kit = 0);
/// Write the hessian in a simple text format.
static void write_cartesian_hessian(const char *filename,
const Ref<Molecule> &m,
const RefSymmSCMatrix &hess);
/// Read the hessian from a simple text format.
static void read_cartesian_hessian(const char *filename,
const Ref<Molecule> &m,
const RefSymmSCMatrix &hess);
};
/** ReadMolecularHessian is an implementation of MolecularHessian
that reads the hessian from a file. */
class ReadMolecularHessian: public MolecularHessian {
protected:
char *filename_;
public:
/** The ReadMolecularHessian KeyVal constructor is used to generate a
ReadMolecularHessian object from the input. It reads the keywords
below.
<table border="1">
<tr><td>Keyword<td>Type<td>Default<td>Description
<tr><td><tt>filename</tt><td>string<td><em>basename</em>
<tt>.hess</tt><td>The name of the file from which the hessian is
read.
</table>
*/
ReadMolecularHessian(const Ref<KeyVal>&);
ReadMolecularHessian(StateIn&);
~ReadMolecularHessian();
void save_data_state(StateOut&);
/// Return the hessian in cartesian coordinates.
RefSymmSCMatrix cartesian_hessian();
};
/** GuessMolecularHessian is an implementation of MolecularHessian
that estimates the hessian based on the internal coordinates. */
class GuessMolecularHessian: public MolecularHessian {
protected:
Ref<MolecularCoor> coor_;
public:
/** The GuessMolecularHessian KeyVal constructor is used to generate a
GuessMolecularHessian object from the input. It reads the keywords
below.
<table border="1">
<tr><td>Keyword<td>Type<td>Default<td>Description
<tr><td><tt>coor</tt><td>MolecularCoor<td>none<td>This gives
the MolecularCoor object that is used to generate the guess
hessian. It does not have to be the same MolecularCoor
object that is used to optimize the molecule.
</table>
*/
GuessMolecularHessian(const Ref<KeyVal>&);
GuessMolecularHessian(StateIn&);
~GuessMolecularHessian();
void save_data_state(StateOut&);
/// Return the hessian in cartesian coordinates.
RefSymmSCMatrix cartesian_hessian();
};
/** DiagMolecularHessian is an implementation of MolecularHessian
that returns a hessian that is a diagonal matrix. */
class DiagMolecularHessian: public MolecularHessian {
protected:
double diag_;
public:
/** The DiagMolecularHessian KeyVal constructor is used to generate a
DiagMolecularHessian object from the input. It reads the keywords
below.
<table border="1">
<tr><td>Keyword<td>Type<td>Default<td>Description
<tr><td><tt>diag</tt><td>double<td>1.0<td>Specifies the diagonal
elements of the hessian.
</table>
*/
DiagMolecularHessian(const Ref<KeyVal>&);
DiagMolecularHessian(StateIn&);
~DiagMolecularHessian();
void save_data_state(StateOut&);
/// Return the hessian in cartesian coordinates.
RefSymmSCMatrix cartesian_hessian();
};
}
#endif
// Local Variables:
// mode: c++
// c-file-style: "CLJ"
// End:
|