MPQC
2.3.1
Main Page
Related Pages
Classes
Files
File List
src
lib
chemistry
qc
wfn
obwfn.h
1
//
2
// obwfn.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_obwfn_h
29
#define _chemistry_qc_wfn_obwfn_h
30
31
#ifdef __GNUC__
32
#pragma interface
33
#endif
34
35
#include <chemistry/qc/wfn/wfn.h>
36
37
namespace
sc {
38
41
class
OneBodyWavefunction
:
public
Wavefunction
{
42
protected
:
43
ResultRefSymmSCMatrix
density_;
44
AccResultRefSCMatrix
oso_eigenvectors_;
45
AccResultRefDiagSCMatrix
eigenvalues_;
46
int
nirrep_;
47
int
*nvecperirrep_;
48
double
*occupations_;
49
double
*alpha_occupations_;
50
double
*beta_occupations_;
51
52
void
init_sym_info();
53
54
// oldocc is converted to newocc using the correlation
55
// table between initial_pg_ and the current point group
56
// returns 1 if successful and 0 otherwise. newocc is
57
// delete[]'ed and new'ed.
58
int
form_occupations(
int
*&newocc,
const
int
*oldocc);
59
60
public
:
61
OneBodyWavefunction
(
StateIn
&);
72
OneBodyWavefunction
(
const
Ref<KeyVal>
&);
73
~
OneBodyWavefunction
();
74
75
void
save_data_state
(
StateOut
&);
76
77
int
nelectron
();
78
81
void
set_desired_value_accuracy
(
double
eps);
82
83
// Following is a proposed interface to make the meaning of
84
// the various transformation matrices less confusing.
85
// /** These members give metrics and basis transformations
86
// using the covariant/contravariant tensor notation. */
87
// //@{
88
// /** Returns the transformation matrix that converts
89
// a contravariant SO tensor index to a contravariant
90
// MO tensor index.
91
// */
92
// RefSCMatrix t_mo_so_I_J();
93
// /** Returns the transformation matrix that converts a covariant SO
94
// tensor index to a covariant MO tensor index.
95
// */
96
// RefSCMatrix t_mo_so_i_j();
97
// /** Returns the transformation matrix that converts
98
// a contravariant MO tensor index to a contravariant
99
// SO tensor index.
100
// */
101
// RefSCMatrix t_mo_so_I_J();
102
// /** Returns the transformation matrix that converts a covariant MO
103
// tensor index to a covariant SO tensor index.
104
// */
105
// RefSCMatrix t_mo_so_i_j();
106
// /** Returns the metric for converting a covariant SO index into
107
// a contravariant one. */
108
// RefSCMatrix g_so_I_j();
109
// /** Returns the metric for converting a contravariant SO index into
110
// a covariant one. */
111
// RefSCMatrix g_so_i_J();
112
// //@}
113
115
RefSCMatrix
so_to_mo
();
117
RefSCMatrix
orthog_so_to_mo
();
119
RefSCMatrix
mo_to_so
();
122
RefSCMatrix
mo_to_orthog_so
();
123
125
RefSCMatrix
eigenvectors
();
128
virtual
RefSCMatrix
oso_eigenvectors
() = 0;
130
virtual
RefDiagSCMatrix
eigenvalues
() = 0;
133
virtual
double
occupation
(
int
irrep,
int
vectornum) = 0;
136
double
occupation
(
int
vectornum);
137
139
virtual
int
spin_unrestricted
() = 0;
140
143
virtual
double
alpha_occupation
(
int
irrep,
int
vectornum);
146
virtual
double
beta_occupation
(
int
irrep,
int
vectornum);
149
double
alpha_occupation
(
int
vectornum);
152
double
beta_occupation
(
int
vectornum);
153
154
// Return alpha and beta electron densities
155
virtual
RefSCMatrix
oso_alpha_eigenvectors();
156
virtual
RefSCMatrix
oso_beta_eigenvectors();
157
virtual
RefSCMatrix
alpha_eigenvectors();
158
virtual
RefSCMatrix
beta_eigenvectors();
159
virtual
RefDiagSCMatrix
alpha_eigenvalues();
160
virtual
RefDiagSCMatrix
beta_eigenvalues();
161
162
virtual
RefDiagSCMatrix
163
projected_eigenvalues(
const
Ref<OneBodyWavefunction>
&,
int
alp=1);
166
virtual
RefSCMatrix
projected_eigenvectors
(
const
Ref<OneBodyWavefunction>
&,
167
int
alp=1);
170
virtual
RefSCMatrix
hcore_guess
();
174
virtual
RefSCMatrix
hcore_guess
(
RefDiagSCMatrix
&val);
175
176
void
symmetry_changed
();
177
178
double
orbital(
const
SCVector3
& r,
int
iorb);
179
double
orbital_density(
const
SCVector3
& r,
int
iorb,
double
* orbval = 0);
180
181
void
print
(std::ostream&o=
ExEnv::out0
())
const
;
182
};
183
184
185
// This is useful as an initial guess for other one body wavefunctions
186
class
HCoreWfn
:
public
OneBodyWavefunction
{
187
private
:
188
int
nirrep_;
189
int
*docc_;
190
int
*socc_;
191
int
total_charge_;
192
int
user_occ_;
193
194
void
fill_occ(
const
RefDiagSCMatrix
&evals,
195
int
ndocc,
int
*docc,
int
nsocc = 0,
int
*socc = 0);
196
197
void
compute();
198
199
public
:
200
HCoreWfn
(
StateIn
&);
201
HCoreWfn
(
const
Ref<KeyVal>
&);
202
~
HCoreWfn
();
203
204
void
save_data_state
(
StateOut
&);
205
206
double
occupation
(
int
irrep,
int
vectornum);
207
208
RefSCMatrix
oso_eigenvectors
();
209
RefDiagSCMatrix
eigenvalues
();
210
RefSymmSCMatrix
density
();
211
int
spin_polarized
();
212
int
spin_unrestricted
();
213
214
int
value_implemented
()
const
;
215
};
216
217
}
218
219
#endif
220
221
// Local Variables:
222
// mode: c++
223
// c-file-style: "ETS"
224
// End:
Generated at Sun Aug 11 2013 06:45:32 for
MPQC
2.3.1 using the documentation package
Doxygen
1.8.3.1.