Psi4
libmints/molecule.h
Go to the documentation of this file.
1 /*
2  * @BEGIN LICENSE
3  *
4  * Psi4: an open-source quantum chemistry software package
5  *
6  * Copyright (c) 2007-2017 The Psi4 Developers.
7  *
8  * The copyrights for code used from other parties are included in
9  * the corresponding files.
10  *
11  * This file is part of Psi4.
12  *
13  * Psi4 is free software; you can redistribute it and/or modify
14  * it under the terms of the GNU Lesser General Public License as published by
15  * the Free Software Foundation, version 3.
16  *
17  * Psi4 is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20  * GNU Lesser General Public License for more details.
21  *
22  * You should have received a copy of the GNU Lesser General Public License along
23  * with Psi4; if not, write to the Free Software Foundation, Inc.,
24  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
25  *
26  * @END LICENSE
27  */
28 
29 #ifndef _psi_src_lib_libmints_molecule_h_
30 #define _psi_src_lib_libmints_molecule_h_
31 
32 #include <vector>
33 #include <string>
34 #include <cstdio>
35 #include <map>
36 #include <memory>
37 
38 #define LINEAR_A_TOL 1.0E-2 //When sin(a) is below this, we consider the angle to be linear
39 #define DEFAULT_SYM_TOL 1.0E-8
40 #define FULL_PG_TOL 1.0e-8 // default
41 
42 #include "typedefs.h"
43 #include "coordentry.h"
44 
45 namespace psi {
46 class PointGroup;
47 class BasisSet;
51 
52 const std::string RotorTypeList[] = {"ASYMMETRIC_TOP", "SYMMETRIC_TOP",
53  "SPHERICAL_TOP", "LINEAR", "ATOM"};
54 
55 const std::string FullPointGroupList[] = {"ATOM", "C_inf_v", "D_inf_h", "C1", "Cs", "Ci", "Cn", "Cnv",
56  "Cnh", "Sn", "Dn", "Dnd", "Dnh", "Td", "Oh", "Ih"};
57 
62 class Molecule
63 {
64 public:
71  };
79  enum FragmentType {
81  Real,
83  };
84 
86  QMatom = 1,
87  EFPatom = 2,
88  ALLatom = 3
89  };
90 
91  typedef std::vector<std::shared_ptr<CoordEntry> > EntryVector;
92  typedef EntryVector::iterator EntryVectorIter;
93 
94 protected:
96  std::string name_;
102  std::vector<int> fragment_charges_;
104  std::vector<int> fragment_multiplicities_;
105 
110 
124  std::vector<std::string> all_variables_;
126  void clear();
127 
134  CoordValue* get_coord_value(const std::string &str);
135 
143  int get_anchor_atom(const std::string &str, const std::string &line);
144 
146  std::shared_ptr<PointGroup> pg_;
151 
153  int nunique_;
155  int *nequiv_;
157  int **equiv_;
160 
162  std::map<std::string, double> geometry_variables_;
164  std::vector<FragmentType> fragment_types_;
165 //****AVC****//
166 // moved fragments_ to public
167 // moved fragment_levels_ to public
168 //****AVC****//
170  std::string symmetry_from_input_;
177  bool zmat_;
178 
179 public:
180 //****AVC****//
182  std::vector<std::pair<int, int> > fragments_;
183 //****AVC****//
184 
185  Molecule();
187  Molecule(const Molecule& other);
188  virtual ~Molecule();
189 
190  Molecule clone(void) {
191  Molecule new_obj(*this);
192  return new_obj;
193  }
194 
198  Molecule& operator=(const Molecule& other);
200  Molecule operator+(const Molecule& other);
202  Molecule operator-(const Molecule& other);
204  void operator+=(const Molecule& other);
206 
207 
212  void init_with_xyz(const std::string& xyzfilename);
213 
225  void add_atom(int Z, double x, double y, double z, std::string sym = "", double mass = 0.0,
226  double charge = 0.0);
227 
231  bool charge_specified() const { return charge_specified_; }
233  int nfragments() const { return fragments_.size();}
235  int nactive_fragments();
237  // Needed for EFP interface
238  std::pair<int, int> fragment_atom_pair(int f) { return fragments_[f]; }
239 
241  const std::string name() const {return name_; }
243  const std::string& basis_on_atom(int atom) const;
245  void set_name(const std::string &_name) { name_ = _name; }
247  int natom() const;
249  int nallatom() const { return full_atoms_.size(); }
251  const double& Z(int atom) const;
253  double fZ(int atom) const;
255  double x(int atom) const;
257  double y(int atom) const;
259  double z(int atom) const;
261  double fx(int atom) const;
263  double fy(int atom) const;
265  double fz(int atom) const;
267  Vector3 xyz(int atom) const;
268  Vector3 fxyz(int atom) const;
270  double xyz(int atom, int _xyz) const;
272  double mass(int atom) const;
273 
275  void set_mass(int atom, double mass) { full_atoms_[atom]->set_mass(mass); }
277  void set_nuclear_charge(int atom, double newZ);
278 
280  std::string symbol(int atom) const;
282  std::string fsymbol(int atom) const;
284  std::string label(int atom) const;
286  double charge(int atom) const;
288  int true_atomic_number(int atom) const;
289  int ftrue_atomic_number(int atom) const;
291  double fmass(int atom) const;
293  std::string flabel(int atom) const;
295  double fcharge(int atom) const;
297  const std::shared_ptr<CoordEntry>& atom_entry(int atom) const;
298 
299  void set_basis_all_atoms(const std::string& name, const std::string& type="BASIS");
300  void set_basis_by_symbol(const std::string& symbol, const std::string& name, const std::string& type="BASIS");
301  void set_basis_by_number(int number, const std::string& name, const std::string& type="BASIS");
302  void set_basis_by_label(const std::string& label, const std::string& name, const std::string& type="BASIS");
303  void set_shell_by_label(const std::string& label, const std::string& name, const std::string& type="BASIS");
304 
307  int atom_at_position1(double *, double tol = 0.05) const;
308  int atom_at_position2(Vector3&, double tol = 0.05) const;
310 
312  void set_reinterpret_coordentry(bool rc);
313 
315  Matrix geometry() const;
317  Matrix full_geometry() const;
318 
323  void set_geometry(double** geom);
324 
328  void set_geometry(const Matrix& geom);
329 
333  void set_full_geometry(double** geom);
334 
338  void set_full_geometry(const Matrix& geom);
339 
343  void rotate(const Matrix& R);
344  void rotate_full(const Matrix& R);
345 
350 
354  void reinterpret_fragments();
355 
360  void symmetrize_to_abelian_group(double tol);
361 
363  Vector3 center_of_mass() const;
365  double nuclear_repulsion_energy() const;
367  Vector3 nuclear_dipole() const;
369  Vector3 nuclear_dipole(const Vector3 &origin) const;
374 
376  double pairwise_nuclear_repulsion_energy(std::shared_ptr<Molecule> other) const;
377 
379  void translate(const Vector3& r);
381  void move_to_com();
387 // void reorient();
388 
390  Matrix distance_matrix() const;
391 
393  Matrix* inertia_tensor() const;
394 
396  Vector rotational_constants(double tol = FULL_PG_TOL) const;
397 
399  void print_rotational_constants(void) const;
401  RotorType rotor_type(double tol = FULL_PG_TOL) const;
402 
404  void print() const;
405 
407  void print_cluster() const;
408 
410  void print_full() const;
411 
413  void print_in_input_format() const;
414 
416  void print_in_bohr() const;
417 
419  void print_in_angstrom() const;
420 
422  void print_distances() const;
423  void print_bond_angles() const;
424  void print_dihedrals() const;
425  void print_out_of_planes() const;
426 
428  void save_xyz_file(const std::string & filename, bool save_ghosts = true) const;
430  std::string save_string_xyz_file() const;
431 
433  std::string save_string_xyz() const;
434 
440  int nunique() const { return nunique_; }
442  int unique(int iuniq) const { return equiv_[iuniq][0]; }
444  int nequivalent(int iuniq) const { return nequiv_[iuniq]; }
446  int equivalent(int iuniq, int j) const { return equiv_[iuniq][j]; }
449  int atom_to_unique(int iatom) const { return atom_to_unique_[iatom]; }
452  int atom_to_unique_offset(int iatom) const;
454  int max_nequivalent() const;
456 
460  bool has_symmetry_element(Vector3& op, double tol = DEFAULT_SYM_TOL) const;
461  std::shared_ptr<PointGroup> point_group() const;
462  void set_point_group(std::shared_ptr<PointGroup> pg);
464  void set_full_point_group(double tol = FULL_PG_TOL);
466  bool has_inversion(Vector3& origin, double tol = DEFAULT_SYM_TOL) const;
468  bool is_plane(Vector3& origin, Vector3& uperp, double tol = DEFAULT_SYM_TOL) const;
470  bool is_axis(Vector3& origin, Vector3& axis, int order, double tol = DEFAULT_SYM_TOL) const;
472  void is_linear_planar(bool& linear, bool& planar, double tol = DEFAULT_SYM_TOL) const;
474  std::shared_ptr<PointGroup> find_point_group(double tol = DEFAULT_SYM_TOL) const;
476  void reset_point_group(const std::string& pgname);
478  std::shared_ptr<PointGroup> find_highest_point_group(double tol = DEFAULT_SYM_TOL) const;
481  std::shared_ptr<Matrix> symmetry_frame(double tol = DEFAULT_SYM_TOL);
486  void form_symmetry_information(double tol = DEFAULT_SYM_TOL);
488  std::string sym_label();
490  char** irrep_labels();
491  const std::string& symmetry_from_input() const { return symmetry_from_input_; }
492 
497  void symmetrize(double tol=0.05, bool suppress_mol_print_in_exc=false);
499 
506  static std::shared_ptr<Molecule> create_molecule_from_string(const std::string &geom);
507 
514  std::string create_psi4_string_from_molecule() const;
515 
519  void activate_all_fragments();
520 
525 
530  void set_active_fragments(std::vector<int> reals);
531 
536  void set_active_fragment(int fragment);
537 
542  void set_ghost_fragments(std::vector<int> ghosts);
543 
548  void set_ghost_fragment(int fragment);
549 
557  std::shared_ptr<Molecule> extract_subsets(const std::vector<int>& real_list,
558  const std::vector<int>& ghost_list) const;
559 
566  std::shared_ptr<Molecule> py_extract_subsets_1(std::vector<int> reals, std::vector<int> ghost);
567 
574  std::shared_ptr<Molecule> py_extract_subsets_2(std::vector<int> reals, int ghost = -1);
575 
582  std::shared_ptr<Molecule> py_extract_subsets_3(int reals, std::vector<int> ghost);
583 
590  std::shared_ptr<Molecule> py_extract_subsets_4(int reals, int ghost = -1);
591 
597  std::shared_ptr<Molecule> py_extract_subsets_5(std::vector<int> reals);
598 
604  std::shared_ptr<Molecule> py_extract_subsets_6(int reals);
605 
606  // => Fragment Composition <= //
607 
610  const std::vector<std::pair<int, int> >& fragments() const { return fragments_; }
612  const std::vector<FragmentType>& fragment_types() const { return fragment_types_; }
614  const std::vector<int>& fragment_charges() const { return fragment_charges_; }
616  const std::vector<int>& fragment_multiplicities() const { return fragment_multiplicities_; }
617 
619  void set_has_zmatrix(bool tf) { zmat_ = tf; }
621  bool has_zmatrix() const { return zmat_; }
624  void set_variable(const std::string& str, double val);
627  double get_variable(const std::string& str);
630  bool is_variable(const std::string& str) const;
631 
634  charge_specified_ = true;
636  }
638  int molecular_charge() const;
640  void set_multiplicity(int mult) {
642  multiplicity_ = mult;
643  }
645  int multiplicity() const;
649  GeometryUnits units() const { return units_; }
650 
652  bool orientation_fixed() const { return fix_orientation_; }
654  void set_orientation_fixed(bool fix = true) { fix_orientation_ = fix; }
656  void set_com_fixed(bool fix = true) { move_to_com_ = !fix; }
658  std::string schoenflies_symbol() const;
660  bool valid_atom_map(double tol = 0.05) const;
662  std::string full_point_group() const;
664  std::string full_point_group_with_n() const { return FullPointGroupList[full_pg_]; }
666  int full_pg_n() { return full_pg_n_; }
667 
672  void update_geometry();
673 };
674 
675 }
676 
677 #endif
int multiplicity() const
Get the multiplicity (defined as 2Ms + 1)
Definition: libmints/molecule.cc:797
void activate_all_fragments()
Definition: libmints/molecule.cc:1477
Definition: libmints/molecule.h:50
int ** equiv_
Equivalent atom mapping array.
Definition: libmints/molecule.h:157
Molecule clone(void)
Definition: libmints/molecule.h:190
const std::shared_ptr< CoordEntry > & atom_entry(int atom) const
Returns the CoordEntry for an atom.
Definition: libmints/molecule.cc:3060
std::shared_ptr< PointGroup > point_group() const
Definition: libmints/molecule.cc:2710
bool reinterpret_coordentries_
Definition: libmints/molecule.h:173
Definition: libmints/molecule.h:49
Definition: libmints/molecule.h:49
const std::string & symmetry_from_input() const
Definition: libmints/molecule.h:491
Definition: libmints/molecule.h:50
Definition: libmints/molecule.h:50
void set_mass(int atom, double mass)
Set the mass of a particular atom (good for isotopic substitutions)
Definition: libmints/molecule.h:275
void set_variable(const std::string &str, double val)
Definition: libmints/molecule.cc:3091
Vector3 fxyz(int atom) const
Definition: libmints/molecule.cc:2930
Definition: libmints/molecule.h:75
std::string label(int atom) const
Returns the original label of the atom as given in the input file (C2, H4).
Definition: libmints/molecule.cc:332
bool is_variable(const std::string &str) const
Definition: libmints/molecule.cc:3115
Definition: libmints/molecule.h:48
Definition: libmints/molecule.h:86
std::string symmetry_from_input_
Symmetry string from geometry specification.
Definition: libmints/molecule.h:170
int molecular_charge() const
Gets the molecular charge.
Definition: libmints/molecule.cc:787
Definition: manybody.h:66
const std::vector< FragmentType > & fragment_types() const
A list describing how to handle each fragment.
Definition: libmints/molecule.h:612
Definition: libmints/molecule.h:87
int true_atomic_number(int atom) const
Returns the true atomic number of an atom.
Definition: libmints/molecule.cc:3000
Matrix * inertia_tensor() const
Compute inertia tensor.
Definition: libmints/molecule.cc:1968
void set_active_fragments(std::vector< int > reals)
Definition: libmints/molecule.cc:1502
bool fix_orientation_
Reorient or not?
Definition: libmints/molecule.h:107
Definition: libmints/molecule.h:69
double y(int atom) const
y position of atom
Definition: libmints/molecule.cc:2955
#define FULL_PG_TOL
Definition: libmints/molecule.h:40
void add_atom(int Z, double x, double y, double z, std::string sym="", double mass=0.0, double charge=0.0)
Definition: libmints/molecule.cc:286
const std::string & basis_on_atom(int atom) const
Returns the name of the basis set on the specified atom.
Definition: libmints/molecule.cc:2995
int get_anchor_atom(const std::string &str, const std::string &line)
Definition: libmints/molecule.cc:3075
std::shared_ptr< Molecule > extract_subsets(const std::vector< int > &real_list, const std::vector< int > &ghost_list) const
Definition: libmints/molecule.cc:1582
void reinterpret_coordentries()
Definition: libmints/molecule.cc:1400
FragmentType
Definition: libmints/molecule.h:79
std::string schoenflies_symbol() const
Returns the Schoenflies symbol.
Definition: libmints/molecule.cc:3141
bool is_plane(Vector3 &origin, Vector3 &uperp, double tol=DEFAULT_SYM_TOL) const
Is a plane?
Definition: libmints/molecule.cc:2118
Vector3 nuclear_dipole() const
The dipole generated by the nuclear charges evaluated at the origin.
Definition: libmints/molecule.cc:358
void set_name(const std::string &_name)
Set molecule name.
Definition: libmints/molecule.h:245
void set_reinterpret_coordentry(bool rc)
Do we reinterpret coordentries during a call to update_geometry?
Definition: libmints/molecule.cc:256
double pairwise_nuclear_repulsion_energy(std::shared_ptr< Molecule > other) const
Computes the nuclear repuslion energy between this and another Molecule.
Definition: libmints/molecule.cc:406
void move_to_com()
Moves molecule to center of mass.
Definition: libmints/molecule.cc:527
std::vector< std::shared_ptr< CoordEntry > > EntryVector
Definition: libmints/molecule.h:91
void rotate_full(const Matrix &R)
Definition: libmints/molecule.cc:676
void init_with_xyz(const std::string &xyzfilename)
Definition: libmints/molecule.cc:687
Definition: libmints/molecule.h:50
Definition: libmints/molecule.h:49
void print_in_input_format() const
Print the molecule in the same format that the user provided.
Definition: libmints/molecule.cc:1651
EntryVector::iterator EntryVectorIter
Definition: libmints/molecule.h:92
FragmentLevel
Definition: libmints/molecule.h:85
std::shared_ptr< Molecule > py_extract_subsets_6(int reals)
Definition: libmints/molecule.cc:1577
void print() const
Print the molecule.
Definition: libmints/molecule.cc:1681
void print_in_bohr() const
Print the molecule in Bohr.
Definition: libmints/molecule.cc:1625
void set_active_fragment(int fragment)
Definition: libmints/molecule.cc:1510
Definition: libmints/molecule.h:48
int molecular_charge_
The molecular charge.
Definition: libmints/molecule.h:116
std::shared_ptr< Molecule > py_extract_subsets_2(std::vector< int > reals, int ghost=-1)
Definition: libmints/molecule.cc:1541
Molecule operator-(const Molecule &other)
Subtraction.
int nunique_
Number of unique atoms.
Definition: libmints/molecule.h:153
Definition: vector3.h:37
RotorType
Definition: libmints/molecule.h:48
void reset_point_group(const std::string &pgname)
Override symmetry from outside the molecule string.
Definition: libmints/molecule.cc:2629
const std::vector< int > & fragment_multiplicities() const
The multiplicity of each fragment.
Definition: libmints/molecule.h:616
const std::string RotorTypeList[]
Definition: libmints/molecule.h:52
double fmass(int atom) const
Returns mass atom atom.
Definition: libmints/molecule.cc:3065
GeometryUnits units_
The units used to define the geometry.
Definition: libmints/molecule.h:120
std::vector< FragmentType > fragment_types_
A list describing how to handle each fragment.
Definition: libmints/molecule.h:164
Definition: libmints/molecule.h:49
void print_distances() const
Print the geometrical parameters of the molecule.
Definition: libmints/molecule.cc:1779
void is_linear_planar(bool &linear, bool &planar, double tol=DEFAULT_SYM_TOL) const
Is the molecule linear, or planar?
Definition: libmints/molecule.cc:2174
void set_basis_by_symbol(const std::string &symbol, const std::string &name, const std::string &type="BASIS")
Definition: libmints/molecule.cc:3035
std::vector< std::pair< int, int > > fragments_
The list of atom ranges defining each fragment from parent molecule.
Definition: libmints/molecule.h:182
std::shared_ptr< Matrix > symmetry_frame(double tol=DEFAULT_SYM_TOL)
Definition: libmints/molecule.cc:2245
void print_dihedrals() const
Definition: libmints/molecule.cc:1815
void update_geometry()
Definition: libmints/molecule.cc:1440
std::map< std::string, double > geometry_variables_
A listing of the variables used to define the geometries.
Definition: libmints/molecule.h:162
Definition: libmints/molecule.h:49
void form_symmetry_information(double tol=DEFAULT_SYM_TOL)
Definition: libmints/molecule.cc:2790
int nequivalent(int iuniq) const
Returns the number of atoms equivalent to iuniq.
Definition: libmints/molecule.h:444
void set_ghost_fragments(std::vector< int > ghosts)
Definition: libmints/molecule.cc:1516
int equivalent(int iuniq, int j) const
Returns the j&#39;th atom equivalent to iuniq.
Definition: libmints/molecule.h:446
void release_symmetry_information()
Release symmetry information.
Definition: libmints/molecule.cc:2776
std::shared_ptr< PointGroup > pg_
Point group to use with this molecule.
Definition: libmints/molecule.h:146
int full_pg_n()
Return n in Cnv, etc.; If there is no n (e.g. Td) it&#39;s the highest-order rotation axis...
Definition: libmints/molecule.h:666
int atom_at_position2(Vector3 &, double tol=0.05) const
Definition: libmints/molecule.cc:348
Matrix full_geometry() const
Returns the full (dummies included) in a Matrix.
Definition: libmints/molecule.cc:545
Matrix nuclear_repulsion_energy_deriv2() const
Computes nuclear repulsion energy second derivatives.
Definition: libmints/molecule.cc:458
const std::vector< std::pair< int, int > > & fragments() const
Definition: libmints/molecule.h:610
std::vector< int > fragment_multiplicities_
The multiplicity of each fragment.
Definition: libmints/molecule.h:104
Definition: libmints/molecule.h:49
Matrix geometry() const
Returns the geometry in a Matrix.
Definition: libmints/molecule.cc:533
bool charge_specified_
Whether the charge was given by the user.
Definition: libmints/molecule.h:112
const double & Z(int atom) const
Nuclear charge of atom.
Definition: libmints/molecule.cc:2940
GeometryFormat
Definition: libmints/molecule.h:68
bool charge_specified() const
Whether the charge was given by the user.
Definition: libmints/molecule.h:231
const std::string name() const
Get molecule name.
Definition: libmints/molecule.h:241
bool has_inversion(Vector3 &origin, double tol=DEFAULT_SYM_TOL) const
Does the molecule have an inversion center at origin.
Definition: libmints/molecule.cc:2106
void print_rotational_constants(void) const
Print the rotational constants.
Definition: libmints/molecule.cc:2038
int multiplicity_
The multiplicity (defined as 2Ms + 1)
Definition: libmints/molecule.h:118
const std::string FullPointGroupList[]
Definition: libmints/molecule.h:55
std::string flabel(int atom) const
Returns label of atom.
Definition: libmints/molecule.cc:3070
std::string symbol(int atom) const
Returns the cleaned up label of the atom (C2 =&gt; C, H4 = H)
Definition: libmints/molecule.cc:322
void rotate(const Matrix &R)
Definition: libmints/molecule.cc:665
void print_out_of_planes() const
Definition: libmints/molecule.cc:1858
const std::vector< int > & fragment_charges() const
The charge of each fragment.
Definition: libmints/molecule.h:614
std::string full_point_group_with_n() const
Return point group name such as Cnv or Sn.
Definition: libmints/molecule.h:664
bool lock_frame_
Nilpotence boolean (flagged upon first determination of symmetry frame, reset each time a substantiat...
Definition: libmints/molecule.h:175
Definition: libmints/molecule.h:50
int nfragments() const
The number of fragments in the molecule.
Definition: libmints/molecule.h:233
void print_in_angstrom() const
Print the molecule in Angstrom.
Definition: libmints/molecule.cc:1599
int nactive_fragments()
The number of active fragments in the molecule.
Definition: libmints/molecule.cc:1485
std::string save_string_xyz_file() const
Save an XYZ file to a string.
Definition: libmints/molecule.cc:1921
bool valid_atom_map(double tol=0.05) const
Check if current geometry fits current point group.
Definition: libmints/molecule.cc:3147
Molecule & operator=(const Molecule &other)
Definition: libmints/molecule.cc:195
Molecule()
Definition: libmints/molecule.cc:165
std::string fsymbol(int atom) const
Returns the cleaned up label of the atom (C2 =&gt; C, H4 = H)
Definition: libmints/molecule.cc:327
bool has_zmatrix() const
Whether this molecule has at least one zmatrix entry.
Definition: libmints/molecule.h:621
Vector rotational_constants(double tol=FULL_PG_TOL) const
Compute the rotational constants and return them in wavenumbers.
Definition: libmints/molecule.cc:2002
std::string save_string_xyz() const
Save an XYZ string.
Definition: libmints/molecule.cc:1949
bool is_axis(Vector3 &origin, Vector3 &axis, int order, double tol=DEFAULT_SYM_TOL) const
Is an axis?
Definition: libmints/molecule.cc:2133
int full_pg_n_
n of the highest rotational axis Cn
Definition: libmints/molecule.h:150
char ** irrep_labels()
Returns the irrep labels.
Definition: libmints/molecule.cc:2911
Definition: libmints/molecule.h:50
void symmetrize(double tol=0.05, bool suppress_mol_print_in_exc=false)
Definition: libmints/molecule.cc:2740
std::shared_ptr< Molecule > py_extract_subsets_3(int reals, std::vector< int > ghost)
Definition: libmints/molecule.cc:1551
EntryVector full_atoms_
Atom info vector (includes dummy atoms)
Definition: libmints/molecule.h:100
void reinterpret_fragments()
void operator+=(const Molecule &other)
Plus equals.
Definition: libmints/molecule.cc:274
Definition: libmints/molecule.h:48
void print_bond_angles() const
Definition: libmints/molecule.cc:1792
std::shared_ptr< Molecule > py_extract_subsets_1(std::vector< int > reals, std::vector< int > ghost)
Definition: libmints/molecule.cc:1530
void deactivate_all_fragments()
Definition: libmints/molecule.cc:1494
int atom_at_position1(double *, double tol=0.05) const
Definition: libmints/molecule.cc:337
int nunique() const
Definition: libmints/molecule.h:440
int max_nequivalent() const
Definition: libmints/molecule.cc:2236
Definition: libmints/molecule.h:75
Makes using matrices just a little easier.
Definition: libmints/matrix.h:66
void print_full() const
Print full atom list.
Definition: libmints/molecule.cc:1754
void set_geometry(double **geom)
Definition: libmints/molecule.cc:557
void set_ghost_fragment(int fragment)
Definition: libmints/molecule.cc:1524
CoordValue * get_coord_value(const std::string &str)
Definition: libmints/molecule.cc:3120
FullPointGroup full_pg_
Full point group.
Definition: libmints/molecule.h:148
std::string sym_label()
Returns the symmetry label.
Definition: libmints/molecule.cc:2905
double charge(int atom) const
Returns charge of atom.
Definition: libmints/molecule.cc:2980
double fZ(int atom) const
Nuclear charge of atom.
Definition: libmints/molecule.cc:2945
int atom_to_unique(int iatom) const
Definition: libmints/molecule.h:449
void set_units(GeometryUnits units)
Sets the geometry units.
Definition: libmints/molecule.h:647
bool orientation_fixed() const
Get whether or not orientation is fixed.
Definition: libmints/molecule.h:652
Definition: coordentry.h:55
Definition: libmints/molecule.h:48
bool multiplicity_specified() const
Whether the multiplicity was given by the user.
Definition: libmints/molecule.h:229
static std::shared_ptr< Molecule > create_molecule_from_string(const std::string &geom)
Definition: libmints/molecule.cc:802
void set_shell_by_label(const std::string &label, const std::string &name, const std::string &type="BASIS")
Definition: libmints/molecule.cc:3051
int * nequiv_
Number of equivalent atoms per unique atom (length nunique_)
Definition: libmints/molecule.h:155
std::shared_ptr< PointGroup > find_highest_point_group(double tol=DEFAULT_SYM_TOL) const
Find highest molecular point group.
Definition: libmints/molecule.cc:2564
#define DEFAULT_SYM_TOL
Definition: libmints/molecule.h:39
void set_full_point_group(double tol=FULL_PG_TOL)
Determine and set FULL point group.
Definition: libmints/molecule.cc:3196
virtual ~Molecule()
Definition: libmints/molecule.cc:187
double nuclear_repulsion_energy() const
Computes nuclear repulsion energy.
Definition: libmints/molecule.cc:418
void set_basis_by_label(const std::string &label, const std::string &name, const std::string &type="BASIS")
Definition: libmints/molecule.cc:3043
int atom_to_unique_offset(int iatom) const
Definition: libmints/molecule.cc:2224
Definition: libmints/molecule.h:48
void set_com_fixed(bool fix=true)
Fix the center of mass at its current frame.
Definition: libmints/molecule.h:656
Definition: libmints/molecule.h:80
Matrix distance_matrix() const
Computes and returns a matrix depicting distances between atoms.
Definition: libmints/molecule.cc:393
double z(int atom) const
z position of atom
Definition: libmints/molecule.cc:2960
std::string full_point_group() const
Return point group name such as C3v or S8.
Definition: libmints/molecule.cc:3498
FullPointGroup
Definition: libmints/molecule.h:49
std::shared_ptr< PointGroup > find_point_group(double tol=DEFAULT_SYM_TOL) const
Find computational molecular point group, user can override this with the &quot;symmetry&quot; keyword...
Definition: libmints/molecule.cc:2636
void set_orientation_fixed(bool fix=true)
Fix the orientation at its current frame.
Definition: libmints/molecule.h:654
bool zmat_
Whether this molecule has at least one zmatrix entry.
Definition: libmints/molecule.h:177
RotorType rotor_type(double tol=FULL_PG_TOL) const
Return the rotor type.
Definition: libmints/molecule.cc:2064
std::vector< int > fragment_charges_
The charge of each fragment.
Definition: libmints/molecule.h:102
double x(int atom) const
x position of atom
Definition: libmints/molecule.cc:2950
std::pair< int, int > fragment_atom_pair(int f)
Returns the list of atoms belonging to a fragment.
Definition: libmints/molecule.h:238
bool multiplicity_specified_
Whether the multiplicity was specified by the user.
Definition: libmints/molecule.h:114
std::string name_
Molecule (or fragment) name.
Definition: libmints/molecule.h:96
void set_molecular_charge(int charge)
Sets the molecular charge.
Definition: libmints/molecule.h:633
EntryVector atoms_
Atom info vector (no knowledge of dummy atoms)
Definition: libmints/molecule.h:98
Definition: libmints/molecule.h:49
int unique(int iuniq) const
Returns the overall number of the iuniq&#39;th unique atom.
Definition: libmints/molecule.h:442
void set_basis_all_atoms(const std::string &name, const std::string &type="BASIS")
Definition: libmints/molecule.cc:3014
void clear()
Zero it out.
Definition: libmints/molecule.cc:279
void set_basis_by_number(int number, const std::string &name, const std::string &type="BASIS")
Definition: libmints/molecule.cc:3025
Molecule information class.
Definition: libmints/molecule.h:62
double input_units_to_au_
The conversion factor to take input units to Bohr.
Definition: libmints/molecule.h:122
double fy(int atom) const
y position of atom
Definition: libmints/molecule.cc:2970
Definition: libmints/molecule.h:50
double mass(int atom) const
Returns mass atom atom.
Definition: libmints/molecule.cc:306
Definition: libmints/molecule.h:88
Definition: libmints/molecule.h:81
bool has_symmetry_element(Vector3 &op, double tol=DEFAULT_SYM_TOL) const
Definition: libmints/molecule.cc:2724
Molecule operator+(const Molecule &other)
Addition.
void set_multiplicity(int mult)
Sets the multiplicity (defined as 2Ms + 1)
Definition: libmints/molecule.h:640
Vector3 xyz(int atom) const
Returns a Vector3 with x, y, z position of atom.
Definition: libmints/molecule.cc:2925
GeometryUnits units() const
Gets the geometry units.
Definition: libmints/molecule.h:649
void set_nuclear_charge(int atom, double newZ)
Set the nuclear charge of an atom (primarily used in ECP calculations).
Definition: libmints/molecule.cc:2990
void print_cluster() const
Print the molecule, adding spacers.
Definition: libmints/molecule.cc:1718
Definition: libmints/molecule.h:50
std::shared_ptr< Molecule > py_extract_subsets_5(std::vector< int > reals)
Definition: libmints/molecule.cc:1572
Definition: libmints/molecule.h:82
int nallatom() const
Number of all atoms (includes dummies)
Definition: libmints/molecule.h:249
void set_point_group(std::shared_ptr< PointGroup > pg)
Definition: libmints/molecule.cc:2717
std::vector< std::string > all_variables_
A list of all variables known, whether they have been set or not.
Definition: libmints/molecule.h:124
double fcharge(int atom) const
Returns charge of atom.
Definition: libmints/molecule.cc:2985
Definition: vector.h:48
void save_xyz_file(const std::string &filename, bool save_ghosts=true) const
Save an XYZ file.
Definition: libmints/molecule.cc:1898
std::string create_psi4_string_from_molecule() const
Definition: libmints/molecule.cc:1315
double fz(int atom) const
z position of atom
Definition: libmints/molecule.cc:2975
void set_has_zmatrix(bool tf)
Sets whether this molecule contains at least one zmatrix entry.
Definition: libmints/molecule.h:619
double get_variable(const std::string &str)
Definition: libmints/molecule.cc:3106
double fx(int atom) const
x position of atom
Definition: libmints/molecule.cc:2965
int ftrue_atomic_number(int atom) const
Definition: libmints/molecule.cc:3007
GeometryUnits
Definition: libmints/molecule.h:75
void translate(const Vector3 &r)
Translates molecule by r.
Definition: libmints/molecule.cc:516
int * atom_to_unique_
Atom to unique atom mapping array (length natom)
Definition: libmints/molecule.h:159
int natom() const
Number of atoms.
Definition: libmints/molecule.cc:3522
void set_full_geometry(double **geom)
Definition: libmints/molecule.cc:644
std::shared_ptr< Molecule > py_extract_subsets_4(int reals, int ghost=-1)
Definition: libmints/molecule.cc:1560
void symmetrize_to_abelian_group(double tol)
Definition: libmints/molecule.cc:1385
Definition: libmints/molecule.h:70
Vector3 center_of_mass() const
Computes center of mass of molecule (does not translate molecule)
Definition: libmints/molecule.cc:374
Definition: libmints/molecule.h:49
Matrix nuclear_repulsion_energy_deriv1() const
Computes nuclear repulsion energy derivatives.
Definition: libmints/molecule.cc:435
bool move_to_com_
Move to center of mass or not?
Definition: libmints/molecule.h:109