/usr/include/libmints/molecule.h is in libpsi3-dev 3.4.0-6+b1.
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 | #ifndef _psi_src_lib_libmints_molecule_h_
#define _psi_src_lib_libmints_molecule_h_
/*!
\file libmints/molecule.h
\ingroup MINTS
*/
#include <vector>
#include <string>
#include <cstdio>
#include <libmints/ref.h>
#include <libmints/vector3.h>
#include <libmints/vector.h>
#include <libpsio/psio.hpp>
#include <libchkpt/chkpt.hpp>
extern FILE *outfile;
namespace psi {
//! Molecule information class.
class Molecule
{
public:
typedef struct atom_info {
double x, y, z;
int Z;
double charge;
double mass;
std::string label;
};
protected:
/// Number of atoms.
int natoms_;
/// Atom info vector
std::vector<atom_info> atoms_;
/// Symmetry information about the molecule
int nirreps_;
/// Zero it out
void clear();
public:
Molecule();
virtual ~Molecule();
/// Pull information from a chkpt object created from psio
void init_with_chkpt(Ref<psi::PSIO> &psio);
/// Pull information from the chkpt object passed
void init_with_chkpt(Ref<psi::Chkpt> &chkpt);
/// Add an atom to the molecule
void add_atom(int Z, double x, double y, double z,
const char * = 0, double mass = 0.0,
int have_charge = 0, double charge = 0.0);
/// Number of atoms
int natom() const { return natoms_; }
/// Nuclear charge of atom
int Z(int atom) const { return atoms_[atom].Z; }
// x position of atom
double x(int atom) const { return atoms_[atom].x; }
// y position of atom
double y(int atom) const { return atoms_[atom].y; }
// z position of atom
double z(int atom) const { return atoms_[atom].z; }
/// Return reference to atom_info struct for atom
const atom_info &r(int atom) const { return atoms_[atom]; }
/// Return copy of atom_info for atom
atom_info r(int atom) { return atoms_[atom]; }
/// Returns a Vector3 with x, y, z position of atom
const Vector3 xyz(int atom) const { return Vector3(atoms_[atom].x, atoms_[atom].y, atoms_[atom].z); }
/// Returns mass atom atom
double mass(int atom) const;
/// Returns label of atom
const std::string label(int atom) const;
/// Returns charge of atom
double charge(int atom) const { return atoms_[atom].charge; }
/// Tests to see of an atom is at the passed position with a given tolerance
int atom_at_position(double *, double tol = 0.05) const;
/// Computes center of mass of molecule (does not translate molecule)
Vector3 center_of_mass() const;
/// Computes nuclear repulsion energy
double nuclear_repulsion_energy();
/// Computes number repulsion energy derivatives. Free with delete[]
double* nuclear_repulsion_energy_deriv1();
/// Returns the nuclear contribution to the dipole moment
SimpleVector nuclear_dipole_contribution();
/// Returns the nuclear contribution to the quadrupole moment
SimpleVector nuclear_quadrupole_contribution();
/// Translates molecule by r
void translate(const Vector3& r);
/// Moves molecule to center of mass
void move_to_com();
/// Returns the number of irreps
int nirrep() const { return nirreps_; }
/// Sets the number of irreps
void nirrep(int nirreps) { nirreps_ = nirreps; }
/// Print the molecule
void print(FILE *out = outfile);
};
}
#endif
|