1 // 2 // accum.h 3 // 4 // Copyright (C) 1996 Limit Point Systems, Inc. 5 // 6 // Author: Curtis Janssen <cljanss@limitpt.com> 7 // Maintainer: LPS 8 // 9 // This file is part of the SC Toolkit. 10 // 11 // The SC Toolkit is free software; you can redistribute it and/or modify 12 // it under the terms of the GNU Library General Public License as published by 13 // the Free Software Foundation; either version 2, or (at your option) 14 // any later version. 15 // 16 // The SC Toolkit is distributed in the hope that it will be useful, 17 // but WITHOUT ANY WARRANTY; without even the implied warranty of 18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 // GNU Library General Public License for more details. 20 // 21 // You should have received a copy of the GNU Library General Public License 22 // along with the SC Toolkit; see the file COPYING.LIB. If not, write to 23 // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 24 // 25 // The U.S. Government is granted a limited license as per AL 91-7. 26 // 27 28 #ifndef _chemistry_qc_wfn_accum_h 29 #define _chemistry_qc_wfn_accum_h 30 31 #ifdef __GNUC__ 32 #pragma interface 33 #endif 34 35 #include <chemistry/qc/wfn/wfn.h> 36 37 namespace sc { 38 39 // ////////////////////////////////////////////////////////////////////////// 40 41 // computes additions to H 42 class AccumH: virtual public SavableState { 43 protected: 44 Ref<Wavefunction> wfn_; 45 46 public: 47 AccumH(); 48 AccumH(StateIn&); 49 AccumH(const Ref<KeyVal>&); 50 virtual ~AccumH(); 51 52 void save_data_state(StateOut&); 53 54 virtual void init(const Ref<Wavefunction>&); 55 virtual void accum(const RefSymmSCMatrix& h) =0; 56 virtual void print_summary(); 57 virtual void done(); 58 59 // Returns the scalar contribution to the energy. 60 // Available only after accum is called. 61 virtual double e(); 62 }; 63 64 65 class AccumHNull: public AccumH { 66 public: 67 AccumHNull(); 68 AccumHNull(StateIn&); 69 AccumHNull(const Ref<KeyVal>&); 70 ~AccumHNull(); 71 72 void save_data_state(StateOut&); 73 74 void accum(const RefSymmSCMatrix& h); 75 }; 76 77 class SumAccumH: public AccumH { 78 protected: 79 int n_; 80 Ref<AccumH> *accums_; 81 82 public: 83 SumAccumH(StateIn&); 84 SumAccumH(const Ref<KeyVal>&); 85 ~SumAccumH(); 86 87 void save_data_state(StateOut&); 88 89 void init(const Ref<Wavefunction>&); 90 void accum(const RefSymmSCMatrix& h); 91 void done(); 92 93 double e(); 94 }; 95 96 } 97 98 #endif 99 100 // Local Variables: 101 // mode: c++ 102 // c-file-style: "ETS" 103 // End: 104