MPQC 2.3.1

- Main Page
- Related Pages
- Classes
- Files

- File List

wfn.h
1 //
2 // wfn.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_wfn_h
29 #define _chemistry_qc_wfn_wfn_h
30
31 #ifdef __GNUC__
32 #pragma interface
33 #endif
34
35 #include <iostream>
36
37 #include <util/misc/compute.h>
38 #include <math/scmat/matrix.h>
39 #include <math/scmat/vector3.h>
40 #include <chemistry/molecule/energy.h>
41 #include <chemistry/qc/basis/basis.h>
42 #include <chemistry/qc/basis/integral.h>
43 #include <chemistry/qc/basis/orthog.h>
44
45 namespace sc {
46
48 class Wavefunction: public MolecularEnergy {
49
50 RefSCDimension aodim_;
51 RefSCDimension sodim_;
52 Ref<SCMatrixKit> basiskit_;
53
54 ResultRefSymmSCMatrix overlap_;
55 ResultRefSymmSCMatrix hcore_;
56 ResultRefSCMatrix natural_orbitals_;
57 ResultRefDiagSCMatrix natural_density_;
58
59 double * bs_values;
60 double * bsg_values;
61
62 Ref<GaussianBasisSet> gbs_;
63 Ref<Integral> integral_;
64
65 Ref<GaussianBasisSet> atom_basis_;
66 double * atom_basis_coef_;
67
68 double lindep_tol_;
69 OverlapOrthog::OrthogMethod orthog_method_;
70 Ref<OverlapOrthog> orthog_;
71
72 int print_nao_;
73 int print_npa_;
74
75 void init_orthog();
76
77 void set_up_charge_types(std::vector<int> &q_pc,
78 std::vector<int> &q_cd,
79 std::vector<int> &n_pc,
80 std::vector<int> &n_cd);
81
82 double nuc_rep_pc_pc(const std::vector<int>&,const std::vector<int>&,bool);
83 double nuc_rep_pc_cd(const std::vector<int>&,const std::vector<int>&);
84 double nuc_rep_cd_cd(const std::vector<int>&,const std::vector<int>&,bool);
85 void scale_atom_basis_coef();
86
87 void nuc_rep_grad_pc_pc(double **grad,
88 const std::vector<int>&c1,
89 const std::vector<int>&c2,
90 bool uniq);
91 void nuc_rep_grad_pc_cd(double **grad,
92 const std::vector<int>&c1,
93 const std::vector<int>&c2);
94 void nuc_rep_grad_cd_cd(double **grad,
95 const std::vector<int>&c1,
96 const std::vector<int>&c2,
97 bool uniq);
98
99 protected:
100
101 int debug_;
102
103 double min_orthog_res();
104 double max_orthog_res();
105
106 void copy_orthog_info(const Ref<Wavefunction> &);
107
108 public:
109 Wavefunction(StateIn&);
142 Wavefunction(const Ref<KeyVal>&);
143 virtual ~Wavefunction();
144
145 void save_data_state(StateOut&);
146
147 double density(const SCVector3&);
148 double density_gradient(const SCVector3&,double*);
149 double natural_orbital(const SCVector3& r, int iorb);
150 double natural_orbital_density(const SCVector3& r,
151 int orb, double* orbval = 0);
152 double orbital(const SCVector3& r, int iorb, const RefSCMatrix& orbs);
153
154 double orbital_density(const SCVector3& r,
155 int iorb,
156 const RefSCMatrix& orbs,
157 double* orbval = 0);
158
160 double charge();
162 virtual int nelectron() = 0;
163
165 virtual RefSymmSCMatrix density() = 0;
167 virtual RefSymmSCMatrix ao_density();
169 virtual RefSCMatrix natural_orbitals();
171 virtual RefDiagSCMatrix natural_density();
172
174 virtual int spin_polarized() = 0;
175
177 virtual RefSymmSCMatrix alpha_density();
179 virtual RefSymmSCMatrix beta_density();
181 virtual RefSymmSCMatrix alpha_ao_density();
183 virtual RefSymmSCMatrix beta_ao_density();
184
186 virtual RefSCMatrix nao(double *atom_charges=0);
187
189 virtual RefSymmSCMatrix overlap();
191 virtual RefSymmSCMatrix core_hamiltonian();
192
196 virtual double nuclear_repulsion_energy();
201 void nuclear_repulsion_energy_gradient(double *g);
206 virtual void nuclear_repulsion_energy_gradient(double **g);
207
209 RefSCDimension ao_dimension();
211 RefSCDimension so_dimension();
213 RefSCDimension oso_dimension();
215 Ref<SCMatrixKit> basis_matrixkit();
217 Ref<Molecule> molecule() const;
219 Ref<GaussianBasisSet> basis() const;
221 Ref<GaussianBasisSet> atom_basis() const;
224 const double *atom_basis_coef() const;
226 Ref<Integral> integral();
227
228 // override symmetry_changed from MolecularEnergy
229 void symmetry_changed();
230
237 RefSCMatrix so_to_orthog_so();
238
241 RefSCMatrix so_to_orthog_so_inverse();
242
244 OverlapOrthog::OrthogMethod orthog_method() const;
246 void set_orthog_method(const OverlapOrthog::OrthogMethod&);
247
249 double lindep_tol() const;
251 void set_lindep_tol(double);
252
253 void obsolete();
254
255 void print(std::ostream& = ExEnv::out0()) const;
256 };
257
258 }
259
260 #endif
261
262 // Local Variables:
263 // mode: c++
264 // c-file-style: "ETS"
265 // End: