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
#ifndef _chemistry_qc_scf_clscf_h
00029
#define _chemistry_qc_scf_clscf_h
00030
00031
#ifdef __GNUC__
00032
#pragma interface
00033
#endif
00034
00035
#include <chemistry/qc/scf/scf.h>
00036
00037
namespace sc {
00038
00039
00040
00043 class CLSCF:
public SCF {
00044
protected:
00045
Ref<PointGroup> most_recent_pg_;
00046
int user_occupations_;
00047
int tndocc_;
00048
int nirrep_;
00049
int *initial_ndocc_;
00050
int *ndocc_;
00051
00052
ResultRefSymmSCMatrix cl_fock_;
00053
00054
public:
00055
CLSCF(
StateIn&);
00069
CLSCF(
const Ref<KeyVal>&);
00070 ~
CLSCF();
00071
00072
void save_data_state(
StateOut&);
00073
00074
void print(std::ostream&o=ExEnv::out0())
const;
00075
00076
double occupation(
int irrep,
int vectornum);
00077
00078
int n_fock_matrices()
const;
00079
RefSymmSCMatrix fock(
int);
00080
RefSymmSCMatrix effective_fock();
00081
00082
RefSymmSCMatrix density();
00083
00084
void symmetry_changed();
00085
00086
00087
int spin_polarized();
00088
00089
protected:
00090
00091
RefSymmSCMatrix cl_dens_;
00092
RefSymmSCMatrix cl_dens_diff_;
00093
RefSymmSCMatrix cl_gmat_;
00094
00095
void set_occupations(
const RefDiagSCMatrix& evals);
00096
00097
00098
void init_vector();
00099
void done_vector();
00100
void reset_density();
00101
double new_density();
00102
double scf_energy();
00103
00104
Ref<SCExtrapData> extrap_data();
00105
00106
00107
void init_gradient();
00108
void done_gradient();
00109
00110
RefSymmSCMatrix lagrangian();
00111
RefSymmSCMatrix gradient_density();
00112
00113
00114
void init_hessian();
00115
void done_hessian();
00116
00117
00118
void two_body_deriv_hf(
double*grad,
double exchange_fraction);
00119 };
00120
00121 }
00122
00123
#endif
00124
00125
00126
00127
00128