Main Page Class Hierarchy Compound List File List Compound Members Related Pages

# wfn.h

    00001 //
    00002 // wfn.h
    00003 //
    00004 // Copyright (C) 1996 Limit Point Systems, Inc.
    00005 //
    00006 // Author: Curtis Janssen <cljanss@limitpt.com>
    00007 // Maintainer: LPS
    00008 //
    00009 // This file is part of the SC Toolkit.
    00010 //
    00011 // The SC Toolkit is free software; you can redistribute it and/or modify
    00012 // it under the terms of the GNU Library General Public License as published by
    00013 // the Free Software Foundation; either version 2, or (at your option)
    00014 // any later version.
    00015 //
    00016 // The SC Toolkit is distributed in the hope that it will be useful,
    00017 // but WITHOUT ANY WARRANTY; without even the implied warranty of
    00018 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    00019 // GNU Library General Public License for more details.
    00020 //
    00021 // You should have received a copy of the GNU Library General Public License
    00022 // along with the SC Toolkit; see the file COPYING.LIB.  If not, write to
    00023 // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
    00024 //
    00025 // The U.S. Government is granted a limited license as per AL 91-7.
    00026 //
    00027
    00028 #ifndef _chemistry_qc_wfn_wfn_h
    00029 #define _chemistry_qc_wfn_wfn_h
    00030
    00031 #ifdef __GNUC__
    00032 #pragma interface
    00033 #endif
    00034
    00035 #include <iostream>
    00036
    00037 #include <util/misc/compute.h>
    00038 #include <math/scmat/matrix.h>
    00039 #include <math/scmat/vector3.h>
    00040 #include <chemistry/molecule/energy.h>
    00041 #include <chemistry/qc/basis/basis.h>
    00042 #include <chemistry/qc/basis/integral.h>
    00043 #include <chemistry/qc/basis/orthog.h>
    00044
    00045 namespace sc {
    00046
    00048 class Wavefunction: public MolecularEnergy {
    00049
    00050     RefSCDimension aodim_;
    00051     RefSCDimension sodim_;
    00052     Ref<SCMatrixKit> basiskit_;
    00053
    00054     ResultRefSymmSCMatrix overlap_;
    00055     ResultRefSymmSCMatrix hcore_;
    00056     ResultRefSCMatrix natural_orbitals_;
    00057     ResultRefDiagSCMatrix natural_density_;
    00058
    00059     double * bs_values;
    00060     double * bsg_values;
    00061
    00062     Ref<GaussianBasisSet> gbs_;
    00063     Ref<Integral> integral_;
    00064
    00065     double lindep_tol_;
    00066     OverlapOrthog::OrthogMethod orthog_method_;
    00067     Ref<OverlapOrthog> orthog_;
    00068
    00069     int print_nao_;
    00070     int print_npa_;
    00071
    00072     void init_orthog();
    00073
    00074   protected:
    00075
    00076     int debug_;
    00077
    00078     double min_orthog_res();
    00079     double max_orthog_res();
    00080
    00081     void copy_orthog_info(const Ref<Wavefunction> &);
    00082
    00083   public:
    00084     Wavefunction(StateIn&);
    00117     Wavefunction(const Ref<KeyVal>&);
    00118     virtual ~Wavefunction();
    00119
    00120     void save_data_state(StateOut&);
    00121
    00122     double density(const SCVector3&);
    00123     double density_gradient(const SCVector3&,double*);
    00124     double natural_orbital(const SCVector3& r, int iorb);
    00125     double natural_orbital_density(const SCVector3& r,
    00126                                    int orb, double* orbval = 0);
    00127     double orbital(const SCVector3& r, int iorb, const RefSCMatrix& orbs);
    00128
    00129     double orbital_density(const SCVector3& r,
    00130                            int iorb,
    00131                            const RefSCMatrix& orbs,
    00132                            double* orbval = 0);
    00133
    00135     double charge();
    00137     virtual int nelectron() = 0;
    00138
    00140     virtual RefSymmSCMatrix density() = 0;
    00142     virtual RefSymmSCMatrix ao_density();
    00144     virtual RefSCMatrix natural_orbitals();
    00146     virtual RefDiagSCMatrix natural_density();
    00147
    00149     virtual int spin_polarized() = 0;
    00150
    00152     virtual RefSymmSCMatrix alpha_density();
    00154     virtual RefSymmSCMatrix beta_density();
    00156     virtual RefSymmSCMatrix alpha_ao_density();
    00158     virtual RefSymmSCMatrix beta_ao_density();
    00159
    00161     virtual RefSCMatrix nao(double *atom_charges=0);
    00162
    00164     virtual RefSymmSCMatrix overlap();
    00166     virtual RefSymmSCMatrix core_hamiltonian();
    00167
    00169     RefSCDimension ao_dimension();
    00171     RefSCDimension so_dimension();
    00173     RefSCDimension oso_dimension();
    00175     Ref<SCMatrixKit> basis_matrixkit();
    00177     Ref<GaussianBasisSet> basis() const;
    00179     Ref<Integral> integral();
    00180
    00181     // override symmetry_changed from MolecularEnergy
    00182     void symmetry_changed();
    00183
    00190     RefSCMatrix so_to_orthog_so();
    00191
    00194     RefSCMatrix so_to_orthog_so_inverse();
    00195
    00197     OverlapOrthog::OrthogMethod orthog_method() const;
    00198
    00200     double lindep_tol() const;
    00201
    00202     void obsolete();
    00203
    00204     void print(std::ostream& = ExEnv::out0()) const;
    00205 };
    00206
    00207 }
    00208
    00209 #endif
    00210
    00211 // Local Variables:
    00212 // mode: c++
    00213 // c-file-style: "ETS"
    00214 // End: