00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
#ifndef _chemistry_qc_dft_hsosks_h
00030
#define _chemistry_qc_dft_hsosks_h
00031
00032
#ifdef __GNUC__
00033
#pragma interface
00034
#endif
00035
00036
#include <chemistry/qc/scf/hsosscf.h>
00037
#include <chemistry/qc/dft/integrator.h>
00038
#include <chemistry/qc/dft/functional.h>
00039
00040
namespace sc {
00041
00042
00043
00048 class HSOSKS:
public HSOSSCF {
00049
protected:
00050
Ref<DenIntegrator> integrator_;
00051
Ref<DenFunctional> functional_;
00052
RefSymmSCMatrix vxc_a_;
00053
RefSymmSCMatrix vxc_b_;
00054
00055
RefSymmSCMatrix cl_vxc();
00056
RefSymmSCMatrix op_vxc();
00057
00058
public:
00059
HSOSKS(
StateIn&);
00074
HSOSKS(
const Ref<KeyVal>&);
00075 ~
HSOSKS();
00076
00077
void save_data_state(
StateOut&);
00078
00079
void print(std::ostream&o=ExEnv::out0())
const;
00080
00081
void two_body_energy(
double &ec,
double &ex);
00082
00083
int value_implemented()
const;
00084
int gradient_implemented()
const;
00085
00086
protected:
00087
void ao_fock(
double accuracy);
00088
double exc_;
00089
double scf_energy();
00090
Ref<SCExtrapData> extrap_data();
00091
RefSymmSCMatrix effective_fock();
00092
00093
void init_vector();
00094
void done_vector();
00095
00096
void two_body_deriv(
double*);
00097
00098
RefSymmSCMatrix lagrangian();
00099 };
00100
00101 }
00102
00103
#endif
00104
00105
00106
00107
00108