MPQC  3.0.0-alpha
coor.h
1 //
2 // coor.h
3 //
4 // Copyright (C) 1996 Limit Point Systems, Inc.
5 //
6 // Author: Curtis Janssen <cljanss@limitpt.com>
7 // Maintainer: LPS
8 //
9 // This file is part of the SC Toolkit.
10 //
11 // The SC Toolkit is free software; you can redistribute it and/or modify
12 // it under the terms of the GNU Library General Public License as published by
13 // the Free Software Foundation; either version 2, or (at your option)
14 // any later version.
15 //
16 // The SC Toolkit is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 // GNU Library General Public License for more details.
20 //
21 // You should have received a copy of the GNU Library General Public License
22 // along with the SC Toolkit; see the file COPYING.LIB. If not, write to
23 // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24 //
25 // The U.S. Government is granted a limited license as per AL 91-7.
26 //
27 
28 #ifndef _chemistry_molecule_coor_h
29 #define _chemistry_molecule_coor_h
30 
31 #include <iostream>
32 #include <vector>
33 
34 #include <math/scmat/matrix.h>
35 #include <math/optimize/transform.h>
36 #include <chemistry/molecule/molecule.h>
37 
38 namespace sc {
39 
42 
45 class IntCoor: public SavableState {
46  protected:
47  // conversion factors from radians, bohr to the preferred units
48  static double bohr_conv;
49  static double radian_conv;
50  char *label_;
51  double value_;
52  public:
53  IntCoor(StateIn&);
54  IntCoor(const IntCoor&);
57  IntCoor(const char* label = 0);
74  IntCoor(const Ref<KeyVal>&);
75 
76  virtual ~IntCoor();
78 
80  virtual const char* label() const;
82  virtual double value() const;
84  virtual void set_value(double);
86  virtual double preferred_value() const;
88  virtual const char* ctype() const = 0;
90  virtual void print(std::ostream & o=ExEnv::out0()) const;
91  virtual void print_details(const Ref<Molecule> &, std::ostream& =ExEnv::out0()) const;
94  virtual double force_constant(Ref<Molecule>&) = 0;
96  virtual void update_value(const Ref<Molecule>&) = 0;
98  virtual void bmat(const Ref<Molecule>&,RefSCVector&bmat,double coef=1.0) = 0;
102  virtual int equivalent(Ref<IntCoor>&) = 0;
103 };
104 
119 class SumIntCoor: public IntCoor {
120  private:
121  std::vector<double> coef_;
122  std::vector<Ref<IntCoor> > coor_;
123  public:
127  SumIntCoor(const char *);
138  SumIntCoor(const Ref<KeyVal>&);
139 
140  ~SumIntCoor();
141  void save_data_state(StateOut&);
142 
144  int n();
147  void add(Ref<IntCoor>&,double coef);
149  void normalize();
150 
151  // IntCoor overrides
153  double preferred_value() const;
155  const char* ctype() const;
157  void print_details(const Ref<Molecule> &, std::ostream& =ExEnv::out0()) const;
159  double force_constant(Ref<Molecule>&);
161  void update_value(const Ref<Molecule>&);
163  void bmat(const Ref<Molecule>&,RefSCVector&bmat,double coef = 1.0);
165  int equivalent(Ref<IntCoor>&);
166 };
167 
188 class SetIntCoor: public SavableState {
189  private:
190  std::vector<Ref<IntCoor> > coor_;
191  public:
192  SetIntCoor();
204  SetIntCoor(const Ref<KeyVal>&);
205 
206  virtual ~SetIntCoor();
207  void save_data_state(StateOut&);
208 
210  void add(const Ref<IntCoor>&);
212  void add(const Ref<SetIntCoor>&);
214  void pop();
216  void clear();
218  int n() const;
220  Ref<IntCoor> coor(int i) const;
222  virtual void fd_bmat(const Ref<Molecule>&,RefSCMatrix&);
224  virtual void bmat(const Ref<Molecule>&, RefSCMatrix&);
230  virtual void print_details(const Ref<Molecule> &,std::ostream& =ExEnv::out0()) const;
232  virtual void update_values(const Ref<Molecule>&);
234  virtual void values_to_vector(const RefSCVector&);
235 };
236 
237 
238 // ////////////////////////////////////////////////////////////////////////
239 
240 class BitArrayLTri;
241 
245 {
246  protected:
247  Ref<Molecule> molecule_;
248 
249  int linear_bends_;
250  int linear_lbends_;
251  int linear_tors_;
252  int linear_stors_;
253  int nextra_bonds_;
254  int *extra_bonds_;
255  double linear_bend_thres_;
256  double linear_tors_thres_;
257  double radius_scale_factor_;
258 
259  void init_constants();
260 
261  double cos_ijk(Molecule& m, int i, int j, int k);
262  int hterminal(Molecule& m, BitArrayLTri& bonds, int i);
263  int nearest_contact(int i, Molecule& m);
264 
265  void add_bonds(const Ref<SetIntCoor>& list, BitArrayLTri& bonds, Molecule& m);
266  void add_bends(const Ref<SetIntCoor>& list, BitArrayLTri& bonds, Molecule& m);
267  void add_tors(const Ref<SetIntCoor>& list, BitArrayLTri& bonds, Molecule& m);
268  void add_out(const Ref<SetIntCoor>& list, BitArrayLTri& bonds, Molecule& m);
269 
271  void connect_subgraphs(const Molecule& mol,
273 
274  public:
278  IntCoorGen(const Ref<Molecule>&, int nextra=0, int *extra=0);
320  IntCoorGen(const Ref<KeyVal>&);
322 
323  ~IntCoorGen();
324 
326  void save_data_state(StateOut&);
327 
329  virtual void generate(const Ref<SetIntCoor>&);
330 
332  virtual void print(std::ostream& out=ExEnv::out0()) const;
333 
336  static BitArrayLTri adjacency_matrix(const Molecule& mol,
337  double radius_scaling_factor = 1.1);
340  static std::vector<std::set<int> > find_disconnected_subgraphs(const BitArrayLTri& adjmat);
341 };
342 
343 
344 // ////////////////////////////////////////////////////////////////////////
345 
346 
351 {
352  protected:
353  Ref<Molecule> molecule_;
354  RefSCDimension dnatom3_; // the number of atoms x 3
355  Ref<SCMatrixKit> matrixkit_; // used to construct matrices
356 
357  int debug_;
358  public:
377  MolecularCoor(const Ref<KeyVal>&);
378 
379  virtual ~MolecularCoor();
380 
381  void save_data_state(StateOut&);
382 
385  RefSCDimension dim_natom3() { return dnatom3_; }
386 
388  Ref<Molecule> molecule() const { return molecule_; }
389 
391  virtual void print(std::ostream& =ExEnv::out0()) const = 0;
392  virtual void print_simples(std::ostream& =ExEnv::out0()) const = 0;
393 
397  virtual RefSCDimension dim() = 0;
398 
402  int to_cartesian(const RefSCVector&internal);
403  virtual int to_cartesian(const Ref<Molecule>&mol,
404  const RefSCVector&internal) = 0;
405 
409  virtual int to_internal(RefSCVector&internal) = 0;
410 
415  virtual int to_cartesian(RefSCVector&cartesian,RefSCVector&internal) = 0;
416 
421  virtual int to_internal(RefSCVector&internal,RefSCVector&cartesian) = 0;
422 
426  virtual int to_cartesian(RefSymmSCMatrix&cartesian,
427  RefSymmSCMatrix&internal) =0;
428 
432  virtual int to_internal(RefSymmSCMatrix&internal,
433  RefSymmSCMatrix&cartesian) = 0;
434 
437  virtual void guess_hessian(RefSymmSCMatrix&hessian) = 0;
438 
442 
444  virtual int nconstrained();
445 
450 
451  Ref<SCMatrixKit> matrixkit() const { return matrixkit_; }
452 };
453 
454 
458 {
459  protected:
460  Ref<IntCoorGen> generator_;
461 
462  void form_K_matrix(RefSCDimension& dredundant,
463  RefSCDimension& dfixed,
464  RefSCMatrix& K,
465  int*& is_totally_symmetric);
466 
467  RefSCDimension dim_; // corresponds to the number of variable coordinates
468  RefSCDimension dvc_; // the number of variable + constant coordinates
469 
470  Ref<SetIntCoor> variable_; // the variable internal coordinates
471  Ref<SetIntCoor> constant_; // the constant internal coordinates
472 
473  Ref<SetIntCoor> fixed_;
474  Ref<SetIntCoor> watched_;
475  Ref<IntCoor> followed_;
476 
477  // these are all of the basic coordinates
478  Ref<SetIntCoor> bonds_;
479  Ref<SetIntCoor> bends_;
480  Ref<SetIntCoor> tors_;
481  Ref<SetIntCoor> outs_;
482  // these are provided by the user or generated coordinates that
483  // could not be assigned to any of the above catagories
484  Ref<SetIntCoor> extras_;
485 
486  Ref<SetIntCoor> all_;
487 
488  // Useful relationships
489  // variable_->n() + constant_->n() = 3N-6(5)
490  // symm_->n() + asymm_->n() = 3N-6(5)
491 
492  int update_bmat_; // if 1 recompute the b matrix during to_cartesian
493  int only_totally_symmetric_; // only coors with tot. symm comp. are varied
494  double symmetry_tolerance_; // tol used to find coors with tot. sym. comp.
495  double simple_tolerance_; // tol used to see if a simple is included
496  double coordinate_tolerance_; // tol used to see if a coor is included
497  double cartesian_tolerance_; // tol used in intco->cart transformation
498  double scale_bonds_; // scale factor for bonds
499  double scale_bends_; // scale factor for bends
500  double scale_tors_; // scale factor for tors
501  double scale_outs_; // scale factor for outs
502 
503  int nextra_bonds_;
504  int* extra_bonds_;
505 
506  int given_fixed_values_; // if true make molecule have given fixed values
507 
508  int decouple_bonds_;
509  int decouple_bends_;
510 
511  int max_update_steps_;
512  double max_update_disp_;
513 
517  virtual void init();
520  virtual void new_coords();
522  virtual void read_keyval(const Ref<KeyVal>&);
523 
524  // control whether or not to print coordinates when they are formed
525  int form_print_simples_;
526  int form_print_variable_;
527  int form_print_constant_;
528  int form_print_molecule_;
529  public:
637 
638  virtual ~IntMolecularCoor();
639  void save_data_state(StateOut&);
640 
643  virtual void form_coordinates(int keep_variable=0) =0;
644 
647  virtual int all_to_cartesian(const Ref<Molecule> &,RefSCVector&internal);
650  virtual int all_to_internal(const Ref<Molecule> &,RefSCVector&internal);
651 
654  virtual RefSCDimension dim();
655  virtual int to_cartesian(const Ref<Molecule> &,const RefSCVector&internal);
656  virtual int to_internal(RefSCVector&internal);
657  virtual int to_cartesian(RefSCVector&cartesian,RefSCVector&internal);
658  virtual int to_internal(RefSCVector&internal,RefSCVector&cartesian);
659  virtual int to_cartesian(RefSymmSCMatrix&cart,RefSymmSCMatrix&internal);
660  virtual int to_internal(RefSymmSCMatrix&internal,RefSymmSCMatrix&cart);
661  virtual void print(std::ostream& =ExEnv::out0()) const;
662  virtual void print_simples(std::ostream& =ExEnv::out0()) const;
663  virtual void print_variable(std::ostream& =ExEnv::out0()) const;
664  virtual void print_constant(std::ostream& =ExEnv::out0()) const;
665  int nconstrained();
666 };
667 
668 // ///////////////////////////////////////////////////////////////////////
669 
680 {
681  protected:
682  // true if coordinates should be changed during optimization
683  int change_coordinates_;
684  // true if hessian should be transformed too (should always be true)
685  int transform_hessian_;
686  // max value for the condition number if coordinates can be changed
687  double max_kappa2_;
688 
689  void init();
690  public:
712 
713  virtual ~SymmMolecularCoor();
714  void save_data_state(StateOut&);
715 
718  void form_coordinates(int keep_variable=0);
719 
721  void guess_hessian(RefSymmSCMatrix&hessian);
724 
728 
729  void print(std::ostream& =ExEnv::out0()) const;
730 };
731 
732 // ///////////////////////////////////////////////////////////////////////
733 
737 {
738 
739  public:
744 
745  virtual ~RedundMolecularCoor();
746  void save_data_state(StateOut&);
747 
750  void form_coordinates(int keep_variable=0);
752  void guess_hessian(RefSymmSCMatrix&hessian);
755 };
756 
757 // ///////////////////////////////////////////////////////////////////////
758 
764 {
765  private:
766  protected:
767  RefSCDimension dim_; // the number of atoms x 3
768 
770  virtual void init();
771  public:
776 
777  virtual ~CartMolecularCoor();
778 
779  void save_data_state(StateOut&);
780 
782  virtual RefSCDimension dim();
783  virtual int to_cartesian(const Ref<Molecule>&,const RefSCVector&internal);
784  virtual int to_internal(RefSCVector&internal);
785  virtual int to_cartesian(RefSCVector&cartesian,RefSCVector&internal);
786  virtual int to_internal(RefSCVector&internal,RefSCVector&cartesian);
787  virtual int to_cartesian(RefSymmSCMatrix&cart,RefSymmSCMatrix&internal);
788  virtual int to_internal(RefSymmSCMatrix&internal,RefSymmSCMatrix&cart);
789  virtual void print(std::ostream& =ExEnv::out0()) const;
790  virtual void print_simples(std::ostream& =ExEnv::out0()) const;
791  void guess_hessian(RefSymmSCMatrix&hessian);
793 };
794 
796 // end of addtogroup ChemistryMolecule
797 
798 }
799 
800 #endif
801 
802 // Local Variables:
803 // mode: c++
804 // c-file-style: "CLJ"
805 // End:
sc::MolecularCoor::save_data_state
void save_data_state(StateOut &)
Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR ...
sc::IntMolecularCoor::all_to_internal
virtual int all_to_internal(const Ref< Molecule > &, RefSCVector &internal)
Like to_internal(), except all internal coordinates are considered, not just the variable ones.
sc::CartMolecularCoor::init
virtual void init()
Initializes the dimensions.
sc::CartMolecularCoor::inverse_hessian
RefSymmSCMatrix inverse_hessian(RefSymmSCMatrix &)
Given an Hessian, return the inverse of that hessian.
sc::SetIntCoor
The SetIntCoor class describes a set of internal coordinates.
Definition: coor.h:188
sc::IntCoor::update_value
virtual void update_value(const Ref< Molecule > &)=0
Recalculate the value of the coordinate.
sc::SymmMolecularCoor::inverse_hessian
RefSymmSCMatrix inverse_hessian(RefSymmSCMatrix &)
Invert the hessian.
sc::SetIntCoor::clear
void clear()
Removes all coordinates from the set.
sc::SetIntCoor::bmat
virtual void bmat(const Ref< Molecule > &, RefSCMatrix &)
Compute the B matrix the old-fashioned way.
sc::RedundMolecularCoor
The RedundMolecularCoor class provides a redundant set of simple internal coordinates.
Definition: coor.h:736
sc::SumIntCoor::force_constant
double force_constant(Ref< Molecule > &)
Returns the weighted sum of the individual force constants.
sc::BitArrayLTri
Definition: bitarray.h:69
sc::IntCoor::ctype
virtual const char * ctype() const =0
Returns a string representation of the type of coordinate this is.
sc::RefSymmSCMatrix
The RefSymmSCMatrix class is a smart pointer to an SCSymmSCMatrix specialization.
Definition: matrix.h:265
sc::Molecule
The Molecule class contains information about molecules.
Definition: molecule.h:149
sc::IntMolecularCoor::to_internal
virtual int to_internal(RefSCVector &internal)
Fill in the vector `‘internal’' with the current internal coordinates.
sc::CartMolecularCoor::guess_hessian
void guess_hessian(RefSymmSCMatrix &hessian)
Calculate an approximate hessian and place the result in `‘hessian’'.
sc::SumIntCoor::add
void add(Ref< IntCoor > &, double coef)
Add a coordinate to the linear combination.
sc::RedundMolecularCoor::inverse_hessian
RefSymmSCMatrix inverse_hessian(RefSymmSCMatrix &)
Invert the hessian.
sc::SetIntCoor::n
int n() const
Returns the number of coordinates in the set.
sc::RefSCMatrix
The RefSCMatrix class is a smart pointer to an SCMatrix specialization.
Definition: matrix.h:135
sc::MolecularCoor::to_cartesian
int to_cartesian(const RefSCVector &internal)
Given a set of displaced internal coordinates, update the cartesian coordinates of the Molecule conta...
sc::SetIntCoor::update_values
virtual void update_values(const Ref< Molecule > &)
Recalculate the values of the internal coordinates in the set.
sc::SetIntCoor::pop
void pop()
Removes the last coordinate from this set.
sc::Ref
A template class that maintains references counts.
Definition: ref.h:361
sc::SumIntCoor
SumIntCoor is used to construct linear combinations of internal coordinates.
Definition: coor.h:119
sc::SumIntCoor::ctype
const char * ctype() const
Always returns `‘SUM’'.
sc::MolecularCoor::dim
virtual RefSCDimension dim()=0
Returns a smart reference to an SCDimension equal to the number of coordinates (be they Cartesian,...
sc::MolecularCoor::guess_hessian
virtual void guess_hessian(RefSymmSCMatrix &hessian)=0
Calculate an approximate hessian and place the result in `‘hessian’'.
sc::SymmMolecularCoor::save_data_state
void save_data_state(StateOut &)
Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR ...
sc::SymmMolecularCoor::print
void print(std::ostream &=ExEnv::out0()) const
Print the coordinate.
sc::SymmMolecularCoor::guess_hessian
void guess_hessian(RefSymmSCMatrix &hessian)
Form the approximate hessian.
sc::RedundMolecularCoor::save_data_state
void save_data_state(StateOut &)
Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR ...
sc::SymmMolecularCoor::init
void init()
This is called by the constructors of classes derived from IntMolecularCoor.
sc::IntMolecularCoor::nconstrained
int nconstrained()
Returns the number of constrained coordinates.
sc::SetIntCoor::save_data_state
void save_data_state(StateOut &)
Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR ...
sc::CartMolecularCoor::save_data_state
void save_data_state(StateOut &)
Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR ...
sc::IntMolecularCoor::new_coords
virtual void new_coords()
Allocates memory for the SetIntCoor's used to store the simple and internal coordinates.
sc::IntCoor::preferred_value
virtual double preferred_value() const
Returns the value of the coordinate in more familiar units.
sc::StateIn
Definition: statein.h:79
sc::IntCoorGen::save_data_state
void save_data_state(StateOut &)
Standard member.
sc::RefSCDimension
The RefSCDimension class is a smart pointer to an SCDimension specialization.
Definition: dim.h:152
sc::MolecularCoor::inverse_hessian
virtual RefSymmSCMatrix inverse_hessian(RefSymmSCMatrix &)=0
Given an Hessian, return the inverse of that hessian.
sc::SumIntCoor::print_details
void print_details(const Ref< Molecule > &, std::ostream &=ExEnv::out0()) const
Print the individual coordinates in the sum with their coefficients.
sc::SetIntCoor::print_details
virtual void print_details(const Ref< Molecule > &, std::ostream &=ExEnv::out0()) const
Print the coordinates in the set.
sc::IntCoorGen::connect_subgraphs
void connect_subgraphs(const Molecule &mol, BitArrayLTri &adjacency_matrix)
(potentially) modifies the adjacency matrix to make sure that there are no disconnected subgraphs
sc::IntCoor::label
virtual const char * label() const
Returns the string containing the label for the internal coordinate.
sc::SumIntCoor::preferred_value
double preferred_value() const
Returns the value of the coordinate in a.u. and radians.
sc::IntCoor::print
virtual void print(std::ostream &o=ExEnv::out0()) const
Print information about the coordinate.
sc::RedundMolecularCoor::form_coordinates
void form_coordinates(int keep_variable=0)
Actually form the variable and constant internal coordinates from the simple internal coordinates.
sc::IntCoor::save_data_state
void save_data_state(StateOut &)
Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR ...
sc::IntCoorGen
IntCoorGen generates a set of simple internal coordinates for a molecule.
Definition: coor.h:244
sc::CartMolecularCoor::dim
virtual RefSCDimension dim()
These implement the virtual functions inherited from MolecularCoor.
sc::RedundMolecularCoor::guess_hessian
void guess_hessian(RefSymmSCMatrix &hessian)
Form the approximate hessian.
sc::IntCoorGen::adjacency_matrix
static BitArrayLTri adjacency_matrix(const Molecule &mol, double radius_scaling_factor=1.1)
computes the adjacency matrix for this molecule using atomic radii and the scaling_factor
sc::SumIntCoor::n
int n()
Returns the number of coordinates in this linear combination.
sc::MolecularCoor::to_internal
virtual int to_internal(RefSCVector &internal)=0
Fill in the vector `‘internal’' with the current internal coordinates.
sc::IntMolecularCoor
The IntMolecularCoor abstract class describes a molecule's coordinates in terms of internal coordinat...
Definition: coor.h:457
sc::IntMolecularCoor::dim
virtual RefSCDimension dim()
These implement the virtual functions inherited from MolecularCoor.
sc::IntMolecularCoor::read_keyval
virtual void read_keyval(const Ref< KeyVal > &)
Reads the KeyVal input.
sc::IntCoor::force_constant
virtual double force_constant(Ref< Molecule > &)=0
Returns the value of the force constant associated with this coordinate.
sc::SetIntCoor::coor
Ref< IntCoor > coor(int i) const
Returns a reference to the i'th coordinate in the set.
sc::IntMolecularCoor::all_to_cartesian
virtual int all_to_cartesian(const Ref< Molecule > &, RefSCVector &internal)
Like to_cartesians(), except all internal coordinates are considered, not just the variable ones.
sc::IntCoor::bmat
virtual void bmat(const Ref< Molecule > &, RefSCVector &bmat, double coef=1.0)=0
Fill in a row the the B matrix.
sc::MolecularCoor::nconstrained
virtual int nconstrained()
Returns the number of constrained coordinates.
sc::RefSCVector
The RefSCVector class is a smart pointer to an SCVector specialization.
Definition: matrix.h:55
sc::SymmMolecularCoor::form_coordinates
void form_coordinates(int keep_variable=0)
Actually form the variable and constant internal coordinates from simple internal coordinates.
sc::StateOut
Definition: stateout.h:71
sc::SetIntCoor::guess_hessian
virtual void guess_hessian(Ref< Molecule > &, RefSymmSCMatrix &)
Create an approximate Hessian for this set of coordinates.
sc::MolecularCoor::molecule
Ref< Molecule > molecule() const
Returns the molecule.
Definition: coor.h:388
sc::IntMolecularCoor::save_data_state
void save_data_state(StateOut &)
Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR ...
sc::IntCoorGen::find_disconnected_subgraphs
static std::vector< std::set< int > > find_disconnected_subgraphs(const BitArrayLTri &adjmat)
given the adjacency matrix find all disconnected subgraphs, each subgraph is specified by a set of ve...
sc::SumIntCoor::save_data_state
void save_data_state(StateOut &)
Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR ...
sc::IntCoorGen::print
virtual void print(std::ostream &out=ExEnv::out0()) const
Print out information about this.
sc::MolecularCoor
The MolecularCoor abstract class describes the coordinate system used to describe a molecule.
Definition: coor.h:350
sc::CartMolecularCoor::to_internal
virtual int to_internal(RefSCVector &internal)
Fill in the vector `‘internal’' with the current internal coordinates.
sc::SumIntCoor::normalize
void normalize()
This function normalizes all the coefficients.
sc::IntCoorGen::IntCoorGen
IntCoorGen(const Ref< Molecule > &, int nextra=0, int *extra=0)
Create an IntCoorGen given a Molecule and, optionally, extra bonds.
sc::ExEnv::out0
static std::ostream & out0()
Return an ostream that writes from node 0.
sc::IntCoor
The IntCoor abstract class describes an internal coordinate of a molecule.
Definition: coor.h:45
sc::MolecularCoor::dim_natom3
RefSCDimension dim_natom3()
Returns a smart reference to an SCDimension equal to the number of atoms in the molecule times 3.
Definition: coor.h:385
sc::MolecularCoor::print
virtual void print(std::ostream &=ExEnv::out0()) const =0
Print the coordinate.
sc::MolecularCoor::change_coordinates
virtual Ref< NonlinearTransform > change_coordinates()
When this is called, MoleculeCoor may select a new internal coordinate system and return a transform ...
sc::SavableState
Base class for objects that can save/restore state.
Definition: state.h:45
sc::IntMolecularCoor::print
virtual void print(std::ostream &=ExEnv::out0()) const
Print the coordinate.
sc::SetIntCoor::add
void add(const Ref< IntCoor > &)
Adds an internal coordinate to the set.
sc::SetIntCoor::values_to_vector
virtual void values_to_vector(const RefSCVector &)
Copy the values of the internal coordinates to a vector.
sc::IntCoor::equivalent
virtual int equivalent(Ref< IntCoor > &)=0
Test to see if this internal coordinate is equivalent to that one.
sc::IntCoorGen::generate
virtual void generate(const Ref< SetIntCoor > &)
This generates a set of internal coordinates.
sc::SymmMolecularCoor
The SymmMolecularCoor class derives from IntMolecularCoor.
Definition: coor.h:679
sc::CartMolecularCoor
The CartMolecularCoor class implements Cartesian coordinates in a way suitable for use in geometry op...
Definition: coor.h:763
sc::IntMolecularCoor::init
virtual void init()
This is called by the constructors of classes derived from IntMolecularCoor.
sc::SumIntCoor::equivalent
int equivalent(Ref< IntCoor > &)
Always returns 0.
sc::SumIntCoor::update_value
void update_value(const Ref< Molecule > &)
Recalculate the value of the coordinate.
sc::SymmMolecularCoor::change_coordinates
Ref< NonlinearTransform > change_coordinates()
This overrides MoleculeCoor's change_coordinates and might transform to a new set of coordinates.
sc
Contains all MPQC code up to version 3.
Definition: mpqcin.h:14
sc::CartMolecularCoor::print
virtual void print(std::ostream &=ExEnv::out0()) const
Print the coordinate.
sc::IntCoor::value
virtual double value() const
Returns the value of the coordinate in atomic units or radians.
sc::IntCoor::set_value
virtual void set_value(double)
Sets the value of the coordinate in atomic units or radians.
sc::SumIntCoor::bmat
void bmat(const Ref< Molecule > &, RefSCVector &bmat, double coef=1.0)
Fill in a row the the B matrix.
sc::IntMolecularCoor::form_coordinates
virtual void form_coordinates(int keep_variable=0)=0
Actually form the variable and constant internal coordinates from the simple internal coordinates.
sc::SetIntCoor::fd_bmat
virtual void fd_bmat(const Ref< Molecule > &, RefSCMatrix &)
Compute the B matrix by finite displacements.

Generated at Sun Jan 26 2020 23:23:56 for MPQC 3.0.0-alpha using the documentation package Doxygen 1.8.16.