28#ifndef _chemistry_molecule_coor_h
29#define _chemistry_molecule_coor_h
38#include <math/scmat/matrix.h>
39#include <math/optimize/transform.h>
40#include <chemistry/molecule/molecule.h>
49 static double bohr_conv;
50 static double radian_conv;
81 virtual const char*
label()
const;
89 virtual const char*
ctype()
const = 0;
122 std::vector<double> coef_;
123 std::vector<Ref<IntCoor> > coor_;
191 std::vector<Ref<IntCoor> > coor_;
256 double linear_bend_thres_;
257 double linear_tors_thres_;
258 double radius_scale_factor_;
260 void init_constants();
262 double cos_ijk(
Molecule& m,
int i,
int j,
int k);
264 int nearest_contact(
int i,
Molecule& m);
380 virtual void print_simples(std::ostream& =
ExEnv::out0())
const = 0;
453 int*& is_totally_symmetric);
481 int only_totally_symmetric_;
482 double symmetry_tolerance_;
483 double simple_tolerance_;
484 double coordinate_tolerance_;
485 double cartesian_tolerance_;
494 int given_fixed_values_;
499 int max_update_steps_;
500 double max_update_disp_;
513 int form_print_simples_;
514 int form_print_variable_;
515 int form_print_constant_;
516 int form_print_molecule_;
650 virtual void print_simples(std::ostream& =
ExEnv::out0())
const;
651 virtual void print_variable(std::ostream& =
ExEnv::out0())
const;
652 virtual void print_constant(std::ostream& =
ExEnv::out0())
const;
671 int change_coordinates_;
673 int transform_hessian_;
778 virtual void print_simples(std::ostream& =
ExEnv::out0())
const;
Definition: bitarray.h:68
The CartMolecularCoor class implements Cartesian coordinates in a way suitable for use in geometry op...
Definition: coor.h:752
virtual int to_internal(RefSymmSCMatrix &internal, RefSymmSCMatrix &cart)
Convert the Cartesian coordinate Hessian cartesian'' to internal coordinates and copy the result toin...
virtual int to_internal(RefSCVector &internal, RefSCVector &cartesian)
Convert the Cartesian coordinate gradients in `‘cartesian’' to internal coordinates and copy these in...
virtual RefSCDimension dim()
These implement the virtual functions inherited from MolecularCoor.
virtual int to_cartesian(RefSymmSCMatrix &cart, RefSymmSCMatrix &internal)
Convert the internal coordinate Hessian internal'' to Cartesian coordinates and copy the result tocar...
RefSymmSCMatrix inverse_hessian(RefSymmSCMatrix &)
Given an Hessian, return the inverse of that hessian.
virtual int to_cartesian(RefSCVector &cartesian, RefSCVector &internal)
Convert the internal coordinate gradients in `‘internal’' to Cartesian coordinates and copy these Car...
virtual void init()
Initializes the dimensions.
void save_data_state(StateOut &)
Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR ...
void guess_hessian(RefSymmSCMatrix &hessian)
Calculate an approximate hessian and place the result in `‘hessian’'.
virtual int to_internal(RefSCVector &internal)
Fill in the vector `‘internal’' with the current internal coordinates.
CartMolecularCoor(const Ref< KeyVal > &)
The KeyVal constructor.
virtual void print(std::ostream &=ExEnv::out0()) const
Print the coordinate.
static std::ostream & out0()
Return an ostream that writes from node 0.
IntCoorGen generates a set of simple internal coordinates for a molecule.
Definition: coor.h:246
IntCoorGen(const Ref< KeyVal > &)
The KeyVal constructor.
virtual void print(std::ostream &out=ExEnv::out0()) const
Print out information about this.
void save_data_state(StateOut &)
Standard member.
IntCoorGen(const Ref< Molecule > &, int nextra=0, int *extra=0)
Create an IntCoorGen given a Molecule and, optionally, extra bonds.
virtual void generate(const Ref< SetIntCoor > &)
This generates a set of internal coordinates.
The IntCoor abstract class describes an internal coordinate of a molecule.
Definition: coor.h:46
virtual const char * ctype() const =0
Returns a string representation of the type of coordinate this is.
virtual double preferred_value() const
Returns the value of the coordinate in more familiar units.
IntCoor(const Ref< KeyVal > &)
The KeyVal constructor.
virtual int equivalent(Ref< IntCoor > &)=0
Test to see if this internal coordinate is equivalent to that one.
virtual double value() const
Returns the value of the coordinate in atomic units or radians.
virtual void print(std::ostream &o=ExEnv::out0()) const
Print information about the coordinate.
virtual void set_value(double)
Sets the value of the coordinate in atomic units or radians.
virtual double force_constant(Ref< Molecule > &)=0
Returns the value of the force constant associated with this coordinate.
virtual void bmat(const Ref< Molecule > &, RefSCVector &bmat, double coef=1.0)=0
Fill in a row the the B matrix.
virtual void update_value(const Ref< Molecule > &)=0
Recalculate the value of the coordinate.
IntCoor(const char *label=0)
This constructor takes a string containing a label for the internal coordinate.
void save_data_state(StateOut &)
Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR ...
virtual const char * label() const
Returns the string containing the label for the internal coordinate.
The IntMolecularCoor abstract class describes a molecule's coordinates in terms of internal coordinat...
Definition: coor.h:446
virtual void new_coords()
Allocates memory for the SetIntCoor's used to store the simple and internal coordinates.
IntMolecularCoor(const Ref< KeyVal > &)
The KeyVal constructor.
virtual void read_keyval(const Ref< KeyVal > &)
Reads the KeyVal input.
virtual int all_to_internal(const Ref< Molecule > &, RefSCVector &internal)
Like to_internal(), except all internal coordinates are considered, not just the variable ones.
int nconstrained()
Returns the number of constrained coordinates.
virtual int to_internal(RefSCVector &internal, RefSCVector &cartesian)
Convert the Cartesian coordinate gradients in `‘cartesian’' to internal coordinates and copy these in...
virtual void print(std::ostream &=ExEnv::out0()) const
Print the coordinate.
virtual int all_to_cartesian(const Ref< Molecule > &, RefSCVector &internal)
Like to_cartesians(), except all internal coordinates are considered, not just the variable ones.
virtual void form_coordinates(int keep_variable=0)=0
Actually form the variable and constant internal coordinates from the simple internal coordinates.
virtual int to_cartesian(RefSymmSCMatrix &cart, RefSymmSCMatrix &internal)
Convert the internal coordinate Hessian internal'' to Cartesian coordinates and copy the result tocar...
virtual int to_internal(RefSCVector &internal)
Fill in the vector `‘internal’' with the current internal coordinates.
void save_data_state(StateOut &)
Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR ...
virtual RefSCDimension dim()
These implement the virtual functions inherited from MolecularCoor.
virtual void init()
This is called by the constructors of classes derived from IntMolecularCoor.
virtual int to_internal(RefSymmSCMatrix &internal, RefSymmSCMatrix &cart)
Convert the Cartesian coordinate Hessian cartesian'' to internal coordinates and copy the result toin...
virtual int to_cartesian(RefSCVector &cartesian, RefSCVector &internal)
Convert the internal coordinate gradients in `‘internal’' to Cartesian coordinates and copy these Car...
The MolecularCoor abstract class describes the coordinate system used to describe a molecule.
Definition: coor.h:339
virtual int to_internal(RefSCVector &internal)=0
Fill in the vector `‘internal’' with the current internal coordinates.
virtual int nconstrained()
Returns the number of constrained coordinates.
Ref< Molecule > molecule() const
Returns the molecule.
Definition: coor.h:376
virtual int to_internal(RefSCVector &internal, RefSCVector &cartesian)=0
Convert the Cartesian coordinate gradients in `‘cartesian’' to internal coordinates and copy these in...
virtual Ref< NonlinearTransform > change_coordinates()
When this is called, MoleculeCoor may select a new internal coordinate system and return a transform ...
MolecularCoor(const Ref< KeyVal > &)
The KeyVal constructor.
virtual int to_cartesian(RefSCVector &cartesian, RefSCVector &internal)=0
Convert the internal coordinate gradients in `‘internal’' to Cartesian coordinates and copy these Car...
virtual int to_cartesian(RefSymmSCMatrix &cartesian, RefSymmSCMatrix &internal)=0
Convert the internal coordinate Hessian internal'' to Cartesian coordinates and copy the result tocar...
virtual void print(std::ostream &=ExEnv::out0()) const =0
Print the coordinate.
RefSCDimension dim_natom3()
Returns a smart reference to an SCDimension equal to the number of atoms in the molecule times 3.
Definition: coor.h:373
void save_data_state(StateOut &)
Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR ...
virtual RefSymmSCMatrix inverse_hessian(RefSymmSCMatrix &)=0
Given an Hessian, return the inverse of that hessian.
virtual int to_internal(RefSymmSCMatrix &internal, RefSymmSCMatrix &cartesian)=0
Convert the Cartesian coordinate Hessian cartesian'' to internal coordinates and copy the result toin...
int to_cartesian(const RefSCVector &internal)
Given a set of displaced internal coordinates, update the cartesian coordinates of the Molecule conta...
virtual RefSCDimension dim()=0
Returns a smart reference to an SCDimension equal to the number of coordinates (be they Cartesian,...
virtual void guess_hessian(RefSymmSCMatrix &hessian)=0
Calculate an approximate hessian and place the result in `‘hessian’'.
The Molecule class contains information about molecules.
Definition: molecule.h:128
The RedundMolecularCoor class provides a redundant set of simple internal coordinates.
Definition: coor.h:725
void save_data_state(StateOut &)
Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR ...
void form_coordinates(int keep_variable=0)
Actually form the variable and constant internal coordinates from the simple internal coordinates.
RedundMolecularCoor(const Ref< KeyVal > &)
The KeyVal constructor.
void guess_hessian(RefSymmSCMatrix &hessian)
Form the approximate hessian.
RefSymmSCMatrix inverse_hessian(RefSymmSCMatrix &)
Invert the hessian.
The RefSCDimension class is a smart pointer to an SCDimension specialization.
Definition: dim.h:156
The RefSCMatrix class is a smart pointer to an SCMatrix specialization.
Definition: matrix.h:135
The RefSCVector class is a smart pointer to an SCVector specialization.
Definition: matrix.h:55
The RefSymmSCMatrix class is a smart pointer to an SCSymmSCMatrix specialization.
Definition: matrix.h:261
A template class that maintains references counts.
Definition: ref.h:332
Base class for objects that can save/restore state.
Definition: state.h:46
The SetIntCoor class describes a set of internal coordinates.
Definition: coor.h:189
void save_data_state(StateOut &)
Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR ...
void add(const Ref< IntCoor > &)
Adds an internal coordinate to the set.
void clear()
Removes all coordinates from the set.
void add(const Ref< SetIntCoor > &)
Adds all the elements of another set to this one.
virtual void bmat(const Ref< Molecule > &, RefSCMatrix &)
Compute the B matrix the old-fashioned way.
SetIntCoor(const Ref< KeyVal > &)
The KeyVal constructor.
virtual void guess_hessian(Ref< Molecule > &, RefSymmSCMatrix &)
Create an approximate Hessian for this set of coordinates.
int n() const
Returns the number of coordinates in the set.
virtual void fd_bmat(const Ref< Molecule > &, RefSCMatrix &)
Compute the B matrix by finite displacements.
Ref< IntCoor > coor(int i) const
Returns a reference to the i'th coordinate in the set.
virtual void values_to_vector(const RefSCVector &)
Copy the values of the internal coordinates to a vector.
virtual void update_values(const Ref< Molecule > &)
Recalculate the values of the internal coordinates in the set.
virtual void print_details(const Ref< Molecule > &, std::ostream &=ExEnv::out0()) const
Print the coordinates in the set.
void pop()
Removes the last coordinate from this set.
Restores objects that derive from SavableState.
Definition: statein.h:70
Serializes objects that derive from SavableState.
Definition: stateout.h:61
SumIntCoor is used to construct linear combinations of internal coordinates.
Definition: coor.h:120
double force_constant(Ref< Molecule > &)
Returns the weighted sum of the individual force constants.
void normalize()
This function normalizes all the coefficients.
void add(Ref< IntCoor > &, double coef)
Add a coordinate to the linear combination.
void update_value(const Ref< Molecule > &)
Recalculate the value of the coordinate.
double preferred_value() const
Returns the value of the coordinate in a.u. and radians.
SumIntCoor(const Ref< KeyVal > &)
The KeyVal constructor.
SumIntCoor(const char *)
This constructor takes a string containing a label for this coordinate.
void print_details(const Ref< Molecule > &, std::ostream &=ExEnv::out0()) const
Print the individual coordinates in the sum with their coefficients.
int equivalent(Ref< IntCoor > &)
Always returns 0.
void save_data_state(StateOut &)
Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR ...
const char * ctype() const
Always returns `‘SUM’'.
int n()
Returns the number of coordinates in this linear combination.
void bmat(const Ref< Molecule > &, RefSCVector &bmat, double coef=1.0)
Fill in a row the the B matrix.
The SymmMolecularCoor class derives from IntMolecularCoor.
Definition: coor.h:668
void init()
This is called by the constructors of classes derived from IntMolecularCoor.
void form_coordinates(int keep_variable=0)
Actually form the variable and constant internal coordinates from simple internal coordinates.
void save_data_state(StateOut &)
Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR ...
SymmMolecularCoor(const Ref< KeyVal > &)
The KeyVal constructor.
void guess_hessian(RefSymmSCMatrix &hessian)
Form the approximate hessian.
RefSymmSCMatrix inverse_hessian(RefSymmSCMatrix &)
Invert the hessian.
void print(std::ostream &=ExEnv::out0()) const
Print the coordinate.
Ref< NonlinearTransform > change_coordinates()
This overrides MoleculeCoor's change_coordinates and might transform to a new set of coordinates.