<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>MPQC: molecule.h Source File</title> <link href="tabs.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.5.9 --> <div class="navigation" id="top"> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> </ul> </div> <div class="tabs"> <ul> <li><a href="files.html"><span>File List</span></a></li> </ul> </div> <h1>molecule.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//</span> <a name="l00002"></a>00002 <span class="comment">// molecule.h</span> <a name="l00003"></a>00003 <span class="comment">//</span> <a name="l00004"></a>00004 <span class="comment">// Copyright (C) 1996 Limit Point Systems, Inc.</span> <a name="l00005"></a>00005 <span class="comment">//</span> <a name="l00006"></a>00006 <span class="comment">// Author: Curtis Janssen <cljanss@limitpt.com></span> <a name="l00007"></a>00007 <span class="comment">// Maintainer: LPS</span> <a name="l00008"></a>00008 <span class="comment">//</span> <a name="l00009"></a>00009 <span class="comment">// This file is part of the SC Toolkit.</span> <a name="l00010"></a>00010 <span class="comment">//</span> <a name="l00011"></a>00011 <span class="comment">// The SC Toolkit is free software; you can redistribute it and/or modify</span> <a name="l00012"></a>00012 <span class="comment">// it under the terms of the GNU Library General Public License as published by</span> <a name="l00013"></a>00013 <span class="comment">// the Free Software Foundation; either version 2, or (at your option)</span> <a name="l00014"></a>00014 <span class="comment">// any later version.</span> <a name="l00015"></a>00015 <span class="comment">//</span> <a name="l00016"></a>00016 <span class="comment">// The SC Toolkit is distributed in the hope that it will be useful,</span> <a name="l00017"></a>00017 <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span> <a name="l00018"></a>00018 <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> <a name="l00019"></a>00019 <span class="comment">// GNU Library General Public License for more details.</span> <a name="l00020"></a>00020 <span class="comment">//</span> <a name="l00021"></a>00021 <span class="comment">// You should have received a copy of the GNU Library General Public License</span> <a name="l00022"></a>00022 <span class="comment">// along with the SC Toolkit; see the file COPYING.LIB. If not, write to</span> <a name="l00023"></a>00023 <span class="comment">// the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.</span> <a name="l00024"></a>00024 <span class="comment">//</span> <a name="l00025"></a>00025 <span class="comment">// The U.S. Government is granted a limited license as per AL 91-7.</span> <a name="l00026"></a>00026 <span class="comment">//</span> <a name="l00027"></a>00027 <a name="l00028"></a>00028 <span class="preprocessor">#ifndef _chemistry_molecule_molecule_h</span> <a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define _chemistry_molecule_molecule_h</span> <a name="l00030"></a>00030 <span class="preprocessor"></span> <a name="l00031"></a>00031 <span class="preprocessor">#ifdef __GNUC__</span> <a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#pragma interface</span> <a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#endif</span> <a name="l00034"></a>00034 <span class="preprocessor"></span> <a name="l00035"></a>00035 <span class="preprocessor">#include <stdio.h></span> <a name="l00036"></a>00036 <span class="preprocessor">#include <iostream></span> <a name="l00037"></a>00037 <span class="preprocessor">#include <util/class/class.h></span> <a name="l00038"></a>00038 <span class="preprocessor">#include <util/state/state.h></span> <a name="l00039"></a>00039 <span class="preprocessor">#include <util/keyval/keyval.h></span> <a name="l00040"></a>00040 <span class="preprocessor">#include <util/misc/units.h></span> <a name="l00041"></a>00041 <span class="preprocessor">#include <math/symmetry/pointgrp.h></span> <a name="l00042"></a>00042 <span class="preprocessor">#include <math/scmat/vector3.h></span> <a name="l00043"></a>00043 <span class="preprocessor">#include <math/scmat/matrix.h></span> <a name="l00044"></a>00044 <span class="preprocessor">#include <chemistry/molecule/atominfo.h></span> <a name="l00045"></a>00045 <a name="l00046"></a>00046 <span class="keyword">namespace </span>sc { <a name="l00047"></a>00047 <a name="l00127"></a><a class="code" href="classsc_1_1Molecule.html">00127</a> <span class="keyword">class </span><a class="code" href="classsc_1_1Molecule.html" title="The Molecule class contains information about molecules.">Molecule</a>: <span class="keyword">public</span> <a class="code" href="classsc_1_1SavableState.html" title="Base class for objects that can save/restore state.">SavableState</a> <a name="l00128"></a>00128 { <a name="l00129"></a>00129 <span class="keyword">protected</span>: <a name="l00130"></a>00130 <span class="keywordtype">int</span> natoms_; <a name="l00131"></a>00131 <a class="code" href="classsc_1_1Ref.html">Ref<AtomInfo></a> atominfo_; <a name="l00132"></a>00132 <a class="code" href="classsc_1_1Ref.html">Ref<PointGroup></a> pg_; <a name="l00133"></a>00133 <a class="code" href="classsc_1_1Ref.html">Ref<Units></a> geometry_units_; <a name="l00134"></a>00134 <span class="keywordtype">double</span> **r_; <a name="l00135"></a>00135 <span class="keywordtype">int</span> *Z_; <a name="l00136"></a>00136 <span class="keywordtype">double</span> *charges_; <a name="l00137"></a>00137 <a name="l00138"></a>00138 <span class="comment">// symmetry equiv info</span> <a name="l00139"></a>00139 <span class="keywordtype">int</span> nuniq_; <a name="l00140"></a>00140 <span class="keywordtype">int</span> *nequiv_; <a name="l00141"></a>00141 <span class="keywordtype">int</span> **equiv_; <a name="l00142"></a>00142 <span class="keywordtype">int</span> *atom_to_uniq_; <a name="l00143"></a>00143 <span class="keywordtype">void</span> init_symmetry_info(<span class="keywordtype">double</span> tol=0.5); <a name="l00144"></a>00144 <span class="keywordtype">void</span> clear_symmetry_info(); <a name="l00145"></a>00145 <a name="l00146"></a>00146 <span class="comment">// these are optional</span> <a name="l00147"></a>00147 <span class="keywordtype">double</span> *mass_; <a name="l00148"></a>00148 <span class="keywordtype">char</span> **labels_; <a name="l00149"></a>00149 <a name="l00150"></a>00150 <span class="comment">// The Z that represents a "Q" type atom.</span> <a name="l00151"></a>00151 <span class="keywordtype">int</span> q_Z_; <a name="l00152"></a>00152 <a name="l00153"></a>00153 <span class="comment">// If true, include the q terms in the charge and efield routines</span> <a name="l00154"></a>00154 <span class="keywordtype">bool</span> include_q_; <a name="l00155"></a>00155 <a name="l00156"></a>00156 <span class="comment">// If true, include the coupling between q-q pairs when</span> <a name="l00157"></a>00157 <span class="comment">// computing nuclear repulsion energy and gradients.</span> <a name="l00158"></a>00158 <span class="keywordtype">bool</span> include_qq_; <a name="l00159"></a>00159 <a name="l00160"></a>00160 <span class="comment">// These vectors contain the atom indices of atoms that are not type</span> <a name="l00161"></a>00161 <span class="comment">// "Q" and those that are.</span> <a name="l00162"></a>00162 std::vector<int> q_atoms_; <a name="l00163"></a>00163 std::vector<int> non_q_atoms_; <a name="l00164"></a>00164 <a name="l00165"></a>00165 <span class="keywordtype">void</span> clear(); <a name="l00166"></a>00166 <a name="l00167"></a>00167 <span class="comment">// Throw an exception if an atom is duplicated. The</span> <a name="l00168"></a>00168 <span class="comment">// atoms in the range [begin, natom_) are checked.</span> <a name="l00169"></a>00169 <span class="keywordtype">void</span> throw_if_atom_duplicated(<span class="keywordtype">int</span> begin=0, <span class="keywordtype">double</span> tol = 1e-3); <a name="l00170"></a>00170 <span class="keyword">public</span>: <a name="l00171"></a>00171 <a class="code" href="classsc_1_1Molecule.html" title="The Molecule class contains information about molecules.">Molecule</a>(); <a name="l00172"></a>00172 <a class="code" href="classsc_1_1Molecule.html" title="The Molecule class contains information about molecules.">Molecule</a>(<span class="keyword">const</span> <a class="code" href="classsc_1_1Molecule.html" title="The Molecule class contains information about molecules.">Molecule</a>&); <a name="l00173"></a>00173 <a class="code" href="classsc_1_1Molecule.html" title="The Molecule class contains information about molecules.">Molecule</a>(<a class="code" href="classsc_1_1StateIn.html" title="Restores objects that derive from SavableState.">StateIn</a>&); <a name="l00269"></a>00269 <a class="code" href="classsc_1_1Molecule.html" title="The Molecule class contains information about molecules.">Molecule</a>(<span class="keyword">const</span> <a class="code" href="classsc_1_1Ref.html">Ref<KeyVal></a>&input); <a name="l00270"></a>00270 <a name="l00271"></a>00271 <span class="keyword">virtual</span> ~<a class="code" href="classsc_1_1Molecule.html" title="The Molecule class contains information about molecules.">Molecule</a>(); <a name="l00272"></a>00272 <a name="l00273"></a>00273 <a class="code" href="classsc_1_1Molecule.html" title="The Molecule class contains information about molecules.">Molecule</a>& operator=(<span class="keyword">const</span> <a class="code" href="classsc_1_1Molecule.html" title="The Molecule class contains information about molecules.">Molecule</a>&); <a name="l00274"></a>00274 <a name="l00276"></a>00276 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1Molecule.html#00bc438d80337c95c0ec330fafd6b25f" title="Add an AtomicCenter to the Molecule.">add_atom</a>(<span class="keywordtype">int</span> Z,<span class="keywordtype">double</span> x,<span class="keywordtype">double</span> y,<span class="keywordtype">double</span> z, <a name="l00277"></a>00277 <span class="keyword">const</span> <span class="keywordtype">char</span> * = 0, <span class="keywordtype">double</span> mass = 0.0, <a name="l00278"></a>00278 <span class="keywordtype">int</span> have_charge = 0, <span class="keywordtype">double</span> <a class="code" href="classsc_1_1Molecule.html#a3e0484650800d1d7fddc305c32f5e27" title="Return the charge of the atom.">charge</a> = 0.0); <a name="l00279"></a>00279 <a name="l00281"></a>00281 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classsc_1_1Molecule.html#fe59cd6cd33d5a7f2b73fa906c0faa35" title="Print information about the molecule.">print</a>(std::ostream& =<a class="code" href="classsc_1_1ExEnv.html#360216acd1f990e999c0ed46cb350b1f" title="Return an ostream that writes from node 0.">ExEnv::out0</a>()) <span class="keyword">const</span>; <a name="l00282"></a>00282 <span class="keyword">virtual</span> <span class="keywordtype">void</span> print_parsedkeyval(std::ostream& =<a class="code" href="classsc_1_1ExEnv.html#360216acd1f990e999c0ed46cb350b1f" title="Return an ostream that writes from node 0.">ExEnv::out0</a>(), <a name="l00283"></a>00283 <span class="keywordtype">int</span> print_pg = 1, <a name="l00284"></a>00284 <span class="keywordtype">int</span> print_unit = 1, <a name="l00285"></a>00285 <span class="keywordtype">int</span> number_atoms = 1) <span class="keyword">const</span>; <a name="l00286"></a>00286 <a name="l00288"></a><a class="code" href="classsc_1_1Molecule.html#2d12d117494be731bf10e0901a623b82">00288</a> <span class="keywordtype">int</span> <a class="code" href="classsc_1_1Molecule.html#2d12d117494be731bf10e0901a623b82" title="Returns the number of atoms in the molcule.">natom</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> natoms_; } <a name="l00289"></a>00289 <a name="l00290"></a>00290 <span class="keywordtype">int</span> Z(<span class="keywordtype">int</span> atom)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> Z_[atom]; } <a name="l00291"></a>00291 <span class="keywordtype">double</span> &r(<span class="keywordtype">int</span> atom, <span class="keywordtype">int</span> xyz) { <span class="keywordflow">return</span> r_[atom][xyz]; } <a name="l00292"></a>00292 <span class="keyword">const</span> <span class="keywordtype">double</span> &r(<span class="keywordtype">int</span> atom, <span class="keywordtype">int</span> xyz)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> r_[atom][xyz]; } <a name="l00293"></a>00293 <span class="keywordtype">double</span> *r(<span class="keywordtype">int</span> atom) { <span class="keywordflow">return</span> r_[atom]; } <a name="l00294"></a>00294 <span class="keyword">const</span> <span class="keywordtype">double</span> *r(<span class="keywordtype">int</span> atom)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> r_[atom]; } <a name="l00295"></a>00295 <span class="keywordtype">double</span> mass(<span class="keywordtype">int</span> atom) <span class="keyword">const</span>; <a name="l00298"></a>00298 <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classsc_1_1Molecule.html#d2a87e6d05cf5fd421b9da301bfa5185" title="Returns the label explicitly assigned to atom.">label</a>(<span class="keywordtype">int</span> atom) <span class="keyword">const</span>; <a name="l00299"></a>00299 <a name="l00302"></a>00302 <span class="keywordtype">int</span> <a class="code" href="classsc_1_1Molecule.html#71a8a7cca4f0908f482005b5f583c96a" title="Takes an (x, y, z) postion and finds an atom within the given tolerance distance...">atom_at_position</a>(<span class="keywordtype">double</span> *, <span class="keywordtype">double</span> tol = 0.05) <span class="keyword">const</span>; <a name="l00303"></a>00303 <a name="l00306"></a>00306 <span class="keywordtype">int</span> <a class="code" href="classsc_1_1Molecule.html#dbb8e57bdcb6f09ffcbb2cfaf8447982" title="Returns the index of the atom with the given label.">atom_label_to_index</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classsc_1_1Molecule.html#d2a87e6d05cf5fd421b9da301bfa5185" title="Returns the label explicitly assigned to atom.">label</a>) <span class="keyword">const</span>; <a name="l00307"></a>00307 <a name="l00311"></a>00311 <span class="keywordtype">double</span> *<a class="code" href="classsc_1_1Molecule.html#7900ee64fc2eb867014ecc908c84ca01" title="Returns a double* containing the nuclear charges of the atoms.">charges</a>() <span class="keyword">const</span>; <a name="l00312"></a>00312 <a name="l00314"></a>00314 <span class="keywordtype">double</span> <a class="code" href="classsc_1_1Molecule.html#a3e0484650800d1d7fddc305c32f5e27" title="Return the charge of the atom.">charge</a>(<span class="keywordtype">int</span> iatom) <span class="keyword">const</span>; <a name="l00315"></a>00315 <a name="l00317"></a>00317 <span class="keywordtype">double</span> <a class="code" href="classsc_1_1Molecule.html#7423f54a90deee592c01e95ecf4ff121" title="Returns the total nuclear charge.">nuclear_charge</a>() <span class="keyword">const</span>; <a name="l00318"></a>00318 <a name="l00320"></a>00320 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1Molecule.html#47d838d4ce264d10c47b8701db2fb212" title="Sets the PointGroup of the molecule.">set_point_group</a>(<span class="keyword">const</span> Ref<PointGroup>&, <span class="keywordtype">double</span> tol=1.0e-7); <a name="l00322"></a>00322 Ref<PointGroup> <a class="code" href="classsc_1_1Molecule.html#d40b425a01e1bc20e524a50b317042bd" title="Returns the PointGroup of the molecule.">point_group</a>() <span class="keyword">const</span>; <a name="l00323"></a>00323 <a name="l00327"></a>00327 Ref<PointGroup> <a class="code" href="classsc_1_1Molecule.html#1c72c3747bf634cf5075297e3ff7ab3f" title="Find this molecules true point group (limited to abelian groups).">highest_point_group</a>(<span class="keywordtype">double</span> tol = 1.0e-8) <span class="keyword">const</span>; <a name="l00328"></a>00328 <a name="l00331"></a>00331 <span class="keywordtype">int</span> <a class="code" href="classsc_1_1Molecule.html#6bea2cd2b87891c9988e997104e1672a" title="Return 1 if this given axis is a symmetry element for the molecule.">is_axis</a>(SCVector3 &origin, <a name="l00332"></a>00332 SCVector3 &udirection, <span class="keywordtype">int</span> order, <span class="keywordtype">double</span> tol=1.0e-8) <span class="keyword">const</span>; <a name="l00333"></a>00333 <a name="l00336"></a>00336 <span class="keywordtype">int</span> <a class="code" href="classsc_1_1Molecule.html#18564f473b198df4f14f105941cd434e" title="Return 1 if the given plane is a symmetry element for the molecule.">is_plane</a>(SCVector3 &origin, SCVector3 &uperp, <span class="keywordtype">double</span> tol=1.0e-8) <span class="keyword">const</span>; <a name="l00337"></a>00337 <a name="l00339"></a>00339 <span class="keywordtype">int</span> <a class="code" href="classsc_1_1Molecule.html#251784416ed5928210704e56aa4a7840" title="Return 1 if the molecule has an inversion center.">has_inversion</a>(SCVector3 &origin, <span class="keywordtype">double</span> tol = 1.0e-8) <span class="keyword">const</span>; <a name="l00340"></a>00340 <a name="l00342"></a>00342 <span class="keywordtype">int</span> <a class="code" href="classsc_1_1Molecule.html#775221d24eb232418af12964186efeda" title="Returns 1 if the molecule is linear, 0 otherwise.">is_linear</a>(<span class="keywordtype">double</span> tolerance = 1.0e-5) <span class="keyword">const</span>; <a name="l00344"></a>00344 <span class="keywordtype">int</span> <a class="code" href="classsc_1_1Molecule.html#46e33d810285526ab4cde25f053b56e2" title="Returns 1 if the molecule is planar, 0 otherwise.">is_planar</a>(<span class="keywordtype">double</span> tolerance = 1.0e-5) <span class="keyword">const</span>; <a name="l00347"></a>00347 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1Molecule.html#4ef5c31897b1b545c3f85758728cb210" title="Sets linear to 1 if the molecular is linear, 0 otherwise.">is_linear_planar</a>(<span class="keywordtype">int</span>&linear,<span class="keywordtype">int</span>&planar,<span class="keywordtype">double</span> tol = 1.0e-5) <span class="keyword">const</span>; <a name="l00348"></a>00348 <a name="l00351"></a>00351 SCVector3 <a class="code" href="classsc_1_1Molecule.html#dcf28de935547bbe20527a4d2d5cc95e" title="Returns a SCVector3 containing the cartesian coordinates of the center of mass for...">center_of_mass</a>() <span class="keyword">const</span>; <a name="l00352"></a>00352 <a name="l00354"></a>00354 <span class="keywordtype">double</span> <a class="code" href="classsc_1_1Molecule.html#54ffd95060e628f06019b3364ad48ad0" title="Returns the nuclear repulsion energy for the molecule.">nuclear_repulsion_energy</a>(); <a name="l00355"></a>00355 <a name="l00358"></a>00358 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1Molecule.html#cf9914731937c41c37f707e9c71ca449" title="Compute the nuclear repulsion energy first derivative with respect to the given center...">nuclear_repulsion_1der</a>(<span class="keywordtype">int</span> center, <span class="keywordtype">double</span> xyz[3]); <a name="l00359"></a>00359 <a name="l00361"></a>00361 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1Molecule.html#58e9e0c2497caf0a03ca599d035f87fc" title="Compute the electric field due to the nuclei at the given point.">nuclear_efield</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> *position, <span class="keywordtype">double</span>* efield); <a name="l00362"></a>00362 <a name="l00365"></a>00365 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1Molecule.html#8dbca87503d084af87c02fb7d197561c" title="Compute the electric field due to the given charges at the positions of the nuclei...">nuclear_charge_efield</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> *<a class="code" href="classsc_1_1Molecule.html#7900ee64fc2eb867014ecc908c84ca01" title="Returns a double* containing the nuclear charges of the atoms.">charges</a>, <a name="l00366"></a>00366 <span class="keyword">const</span> <span class="keywordtype">double</span> *position, <span class="keywordtype">double</span>* efield); <a name="l00367"></a>00367 <a name="l00373"></a>00373 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1Molecule.html#9ccc779036e0750b56f9c7632e0a50c5" title="If the molecule contains only symmetry unique atoms, this function will generate...">symmetrize</a>(<span class="keywordtype">double</span> tol = 0.5); <a name="l00374"></a>00374 <a name="l00376"></a>00376 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1Molecule.html#9ccc779036e0750b56f9c7632e0a50c5" title="If the molecule contains only symmetry unique atoms, this function will generate...">symmetrize</a>(<span class="keyword">const</span> Ref<PointGroup> &pg, <span class="keywordtype">double</span> tol = 0.5); <a name="l00377"></a>00377 <a name="l00381"></a>00381 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1Molecule.html#ba372e38e4c63e15976894144b4588bb" title="This will try to carefully correct symmetry errors in molecules.">cleanup_molecule</a>(<span class="keywordtype">double</span> tol = 0.1); <a name="l00382"></a>00382 <a name="l00383"></a>00383 <span class="keywordtype">void</span> translate(<span class="keyword">const</span> <span class="keywordtype">double</span> *r); <a name="l00384"></a>00384 <span class="keywordtype">void</span> move_to_com(); <a name="l00385"></a>00385 <span class="keywordtype">void</span> transform_to_principal_axes(<span class="keywordtype">int</span> trans_frame=1); <a name="l00386"></a>00386 <span class="keywordtype">void</span> transform_to_symmetry_frame(); <a name="l00387"></a>00387 <span class="keywordtype">void</span> print_pdb(std::ostream& =<a class="code" href="classsc_1_1ExEnv.html#360216acd1f990e999c0ed46cb350b1f" title="Return an ostream that writes from node 0.">ExEnv::out0</a>(), <span class="keywordtype">char</span> *title =0) <span class="keyword">const</span>; <a name="l00388"></a>00388 <a name="l00389"></a>00389 <span class="keywordtype">void</span> read_pdb(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename); <a name="l00390"></a>00390 <a name="l00393"></a>00393 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1Molecule.html#eb520ea35c820fcf5aeb0bd564616294" title="Compute the principal moments of inertia and, possibly, the principal axes.">principal_moments_of_inertia</a>(<span class="keywordtype">double</span> *evals, <span class="keywordtype">double</span> **evecs=0) <span class="keyword">const</span>; <a name="l00394"></a>00394 <a name="l00396"></a><a class="code" href="classsc_1_1Molecule.html#64ef3eb01d52d6bb0527d0005db78d95">00396</a> <span class="keywordtype">int</span> <a class="code" href="classsc_1_1Molecule.html#64ef3eb01d52d6bb0527d0005db78d95" title="Return information about symmetry unique and equivalent atoms.">nunique</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> nuniq_; } <a name="l00398"></a><a class="code" href="classsc_1_1Molecule.html#3ae99990f2cc620bfc6d7b28cd7f7f57">00398</a> <span class="keywordtype">int</span> <a class="code" href="classsc_1_1Molecule.html#3ae99990f2cc620bfc6d7b28cd7f7f57" title="Returns the overall number of the iuniq&#39;th unique atom.">unique</a>(<span class="keywordtype">int</span> iuniq)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> equiv_[iuniq][0]; } <a name="l00400"></a><a class="code" href="classsc_1_1Molecule.html#ef5de4bf620e6ad2513484c3186138a6">00400</a> <span class="keywordtype">int</span> <a class="code" href="classsc_1_1Molecule.html#ef5de4bf620e6ad2513484c3186138a6" title="Returns the number of atoms equivalent to iuniq.">nequivalent</a>(<span class="keywordtype">int</span> iuniq)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> nequiv_[iuniq]; } <a name="l00402"></a><a class="code" href="classsc_1_1Molecule.html#9501f36f54a462eafac50264fe23c34d">00402</a> <span class="keywordtype">int</span> <a class="code" href="classsc_1_1Molecule.html#9501f36f54a462eafac50264fe23c34d" title="Returns the j&#39;th atom equivalent to iuniq.">equivalent</a>(<span class="keywordtype">int</span> iuniq, <span class="keywordtype">int</span> j)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> equiv_[iuniq][j]; } <a name="l00405"></a><a class="code" href="classsc_1_1Molecule.html#ad1e770152d7cf10e9a63e7be9abab56">00405</a> <span class="keywordtype">int</span> <a class="code" href="classsc_1_1Molecule.html#ad1e770152d7cf10e9a63e7be9abab56" title="Converts an atom number to the number of its generating unique atom.">atom_to_unique</a>(<span class="keywordtype">int</span> iatom)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> atom_to_uniq_[iatom]; } <a name="l00408"></a>00408 <span class="keywordtype">int</span> <a class="code" href="classsc_1_1Molecule.html#2c1d3d586b023f29ca0e78a7ac5278bd" title="Converts an atom number to the offset of this atom in the list of generated atoms...">atom_to_unique_offset</a>(<span class="keywordtype">int</span> iatom) <span class="keyword">const</span>; <a name="l00409"></a>00409 <a name="l00411"></a>00411 <span class="keywordtype">int</span> <a class="code" href="classsc_1_1Molecule.html#9e7e7122d8fc559831eaaf8e39ca4dc4" title="Return the number of core electrons.">n_core_electrons</a>(); <a name="l00412"></a>00412 <a name="l00414"></a>00414 <span class="keywordtype">int</span> <a class="code" href="classsc_1_1Molecule.html#1c999a16909475e32a447b04fe4eaf3e" title="Return the maximum atomic number.">max_z</a>(); <a name="l00415"></a>00415 <a name="l00417"></a><a class="code" href="classsc_1_1Molecule.html#35970f4dcdd80a8a3172e0e700fc4389">00417</a> <a class="code" href="classsc_1_1Ref.html">Ref<AtomInfo></a> <a class="code" href="classsc_1_1Molecule.html#35970f4dcdd80a8a3172e0e700fc4389" title="Return the molecule&#39;s AtomInfo object.">atominfo</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> atominfo_; } <a name="l00418"></a>00418 <a name="l00420"></a>00420 std::string <a class="code" href="classsc_1_1Molecule.html#8f5a07e9742358c96010b339410406bc" title="Returns the element name of the atom.">atom_name</a>(<span class="keywordtype">int</span> iatom) <span class="keyword">const</span>; <a name="l00421"></a>00421 <a name="l00423"></a>00423 std::string <a class="code" href="classsc_1_1Molecule.html#a218035531686af7a333046f1d2fb97d" title="Returns the element symbol of the atom.">atom_symbol</a>(<span class="keywordtype">int</span> iatom) <span class="keyword">const</span>; <a name="l00424"></a>00424 <a name="l00427"></a><a class="code" href="classsc_1_1Molecule.html#4363095f8ed8d8d581f4df7e6630caa2">00427</a> <span class="keywordtype">void</span> <a class="code" href="classsc_1_1Molecule.html#4363095f8ed8d8d581f4df7e6630caa2" title="If include_q is true, then include the &quot;Q&quot; atoms in the charge and efield...">set_include_q</a>(<span class="keywordtype">bool</span> iq) { include_q_ = iq; } <a name="l00429"></a><a class="code" href="classsc_1_1Molecule.html#034618f0b2872eb86b3f72def469bece">00429</a> <span class="keywordtype">bool</span> <a class="code" href="classsc_1_1Molecule.html#034618f0b2872eb86b3f72def469bece" title="Returns include_q. See set_include_q.">include_q</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> include_q_; } <a name="l00430"></a>00430 <a name="l00433"></a><a class="code" href="classsc_1_1Molecule.html#e20845074f66ef9a2aca7925bbd526a1">00433</a> <span class="keywordtype">void</span> <a class="code" href="classsc_1_1Molecule.html#e20845074f66ef9a2aca7925bbd526a1" title="If include_qq is true, include the coupling between pairs of &quot;Q&quot; atoms...">set_include_qq</a>(<span class="keywordtype">bool</span> iqq) { include_qq_ = iqq; } <a name="l00435"></a><a class="code" href="classsc_1_1Molecule.html#a67e7b521026e9af831912d1be8211cb">00435</a> <span class="keywordtype">bool</span> <a class="code" href="classsc_1_1Molecule.html#a67e7b521026e9af831912d1be8211cb" title="Returns include_qq. See set_include_qq.">include_qq</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> include_qq_; } <a name="l00436"></a>00436 <a name="l00438"></a><a class="code" href="classsc_1_1Molecule.html#09fd65cc67b6490322de5f9880428b47">00438</a> <span class="keywordtype">int</span> <a class="code" href="classsc_1_1Molecule.html#09fd65cc67b6490322de5f9880428b47" title="Retrieve the number of &quot;Q&quot; atoms.">n_q_atom</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> q_atoms_.size(); } <a name="l00440"></a><a class="code" href="classsc_1_1Molecule.html#6c1b4b7aa47f4f06877a2e2d4ebce44c">00440</a> <span class="keywordtype">int</span> <a class="code" href="classsc_1_1Molecule.html#6c1b4b7aa47f4f06877a2e2d4ebce44c" title="Retrieve the &quot;Q&quot; atoms.">q_atom</a>(<span class="keywordtype">int</span> i)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> q_atoms_[i]; } <a name="l00441"></a>00441 <a name="l00443"></a><a class="code" href="classsc_1_1Molecule.html#91cbf250883243e87fdddc2825edc9b8">00443</a> <span class="keywordtype">int</span> <a class="code" href="classsc_1_1Molecule.html#91cbf250883243e87fdddc2825edc9b8" title="Retrieve the number of non-&quot;Q&quot; atoms.">n_non_q_atom</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> non_q_atoms_.size(); } <a name="l00445"></a><a class="code" href="classsc_1_1Molecule.html#86231d441dcac105318001c93e92fb66">00445</a> <span class="keywordtype">int</span> <a class="code" href="classsc_1_1Molecule.html#86231d441dcac105318001c93e92fb66" title="Retrieve the of non-&quot;Q&quot; atoms.">non_q_atom</a>(<span class="keywordtype">int</span> i)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> non_q_atoms_[i]; } <a name="l00446"></a>00446 <a name="l00447"></a>00447 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1Molecule.html#d32cb69bf428ad40d2bd448d6788d27e" title="Save the base classes (with save_data_state) and the members in the same order that...">save_data_state</a>(<a class="code" href="classsc_1_1StateOut.html" title="Serializes objects that derive from SavableState.">StateOut</a>&); <a name="l00448"></a>00448 }; <a name="l00449"></a>00449 <a name="l00450"></a>00450 } <a name="l00451"></a>00451 <a name="l00452"></a>00452 <span class="preprocessor">#endif</span> <a name="l00453"></a>00453 <span class="preprocessor"></span> <a name="l00454"></a>00454 <span class="comment">// Local Variables:</span> <a name="l00455"></a>00455 <span class="comment">// mode: c++</span> <a name="l00456"></a>00456 <span class="comment">// c-file-style: "CLJ"</span> <a name="l00457"></a>00457 <span class="comment">// End:</span> </pre></div></div> <hr> <address> <small> Generated at Wed Oct 14 14:12:10 2009 for <a href="http://www.mpqc.org">MPQC</a> 2.3.1 using the documentation package <a href="http://www.doxygen.org">Doxygen</a> 1.5.9. </small> </address> </body> </html>