00001 //
00002 // effh.h --- definition of the effective fock builder classes
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_scf_effh_h
00029 #define _chemistry_qc_scf_effh_h
00030
00031 #ifdef __GNUC__
00032 #pragma interface
00033 #endif
00034
00035 #include <math/scmat/blkiter.h>
00036 #include <math/scmat/blocked.h>
00037 #include <chemistry/qc/scf/scf.h>
00038
00039 class AccumEffectiveH: public BlockedSCElementOp2 {
00040 protected:
00041 SCF *scf_;
00042 double coef_[18];
00043
00044 virtual void init() =0;
00045
00046 // hindex is 0 for the closed and 1 for the open shell fock matrix
00047 // shelli and shellj are 0 for closed, 1 for open, and 2 for virtual
00048 int index(int hindex, int shelli, int shellj);
00049
00050 // converts an occupation number to a shell number
00051 int shell(double);
00052
00053 double& coef(int i, int j, int k) { return coef_[index(i,j,k)]; }
00054
00055 public:
00056 AccumEffectiveH(SCF*);
00057 virtual ~AccumEffectiveH();
00058
00059 virtual void process(SCMatrixBlockIter&,SCMatrixBlockIter&);
00060 };
00061
00062 // Guest & Saunders general form
00063 // C O V
00064 // ----------
00065 // | |
00066 // C | fc |
00067 // | |
00068 // -------------------
00069 // | | |
00070 // O | 2fc-fo | fc |
00071 // | | |
00072 // ----------------------------
00073 // | | | |
00074 // V | fc | fo | fc |
00075 // | | | |
00076 // ----------------------------
00077 class GSGeneralEffH: public AccumEffectiveH {
00078 protected:
00079 void init();
00080
00081 public:
00082 GSGeneralEffH(SCF*);
00083 ~GSGeneralEffH();
00084 };
00085
00086 // Guest & Saunders' form for high spin
00087 // C O V
00088 // ----------
00089 // | |
00090 // C | 2fc-fo |
00091 // | |
00092 // -------------------
00093 // | | |
00094 // O | 2fc-fo | 2fc-fo |
00095 // | | |
00096 // ----------------------------
00097 // | | | |
00098 // V | fc | fo | 2fc-fo |
00099 // | | | |
00100 // ----------------------------
00101 class GSHighSpinEffH: public AccumEffectiveH {
00102 protected:
00103 void init();
00104
00105 public:
00106 GSHighSpinEffH(SCF*);
00107 ~GSHighSpinEffH();
00108 };
00109
00110 // test form
00111 // C O V
00112 // ----------
00113 // | |
00114 // C | fo |
00115 // | |
00116 // -------------------
00117 // | | |
00118 // O | 2fc-fo | fo |
00119 // | | |
00120 // ----------------------------
00121 // | | | |
00122 // V | fc | fo | fo |
00123 // | | | |
00124 // ----------------------------
00125 class TestEffH: public AccumEffectiveH {
00126 protected:
00127 void init();
00128
00129 public:
00130 TestEffH(SCF*);
00131 ~TestEffH();
00132 };
00133
00134 // form for converged wavefunction
00135 // C O V
00136 // ----------
00137 // | |
00138 // C | fc |
00139 // | |
00140 // -------------------
00141 // | | |
00142 // O | 2fc-fo | fo |
00143 // | | |
00144 // ----------------------------
00145 // | | | |
00146 // V | fc | fo | fo |
00147 // | | | |
00148 // ----------------------------
00149 class PsiEffH: public AccumEffectiveH {
00150 protected:
00151 void init();
00152
00153 public:
00154 PsiEffH(SCF*);
00155 ~PsiEffH();
00156 };
00157
00158 #endif
00159
00160 // Local Variables:
00161 // mode: c++
00162 // c-file-style: "ETS"
00163 // End: