MPQC 2.3.1
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
37namespace sc {
38
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:
74
76
77 int nelectron();
78
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
123
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);
167 int alp=1);
175
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
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:
201 HCoreWfn(const Ref<KeyVal>&);
202 ~HCoreWfn();
203
205
206 double occupation(int irrep, int vectornum);
207
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:
static std::ostream & out0()
Return an ostream that writes from node 0.
Definition obwfn.h:186
int spin_unrestricted()
Return 1 if the alpha orbitals are not equal to the beta orbitals.
int value_implemented() const
Information about the availability of values, gradients, and hessians.
RefDiagSCMatrix eigenvalues()
Returns the MO basis eigenvalues.
RefSymmSCMatrix density()
Returns the SO density.
double occupation(int irrep, int vectornum)
Returns the occupation.
void save_data_state(StateOut &)
Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR ...
RefSCMatrix oso_eigenvectors()
Returns the orthogonal MO (columns) to orthogonal-SO (rows) transformation matrix.
int spin_polarized()
Return 1 if the alpha density is not equal to the beta density.
A OneBodyWavefunction is a MolecularEnergy that solves an effective one-body problem.
Definition obwfn.h:41
RefSCMatrix so_to_mo()
These members give metrics and basis transformations using the covariant/contravariant tensor notatio...
virtual RefSCMatrix hcore_guess(RefDiagSCMatrix &val)
Return a guess vector and the eigenvalues.
void symmetry_changed()
Call this if you have changed the molecular symmetry of the molecule contained by this MolecularEnerg...
OneBodyWavefunction(const Ref< KeyVal > &)
The KeyVal constructor.
RefSCMatrix mo_to_so()
Returns the MO to SO transformation matrix.
virtual double beta_occupation(int irrep, int vectornum)
Returns the beta occupation.
void save_data_state(StateOut &)
Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR ...
void set_desired_value_accuracy(double eps)
Overload of Function::set_desired_value_accuracy().
virtual int spin_unrestricted()=0
Return 1 if the alpha orbitals are not equal to the beta orbitals.
virtual double occupation(int irrep, int vectornum)=0
Returns the occupation.
virtual RefDiagSCMatrix eigenvalues()=0
Returns the MO basis eigenvalues.
double occupation(int vectornum)
Returns the occupation.
RefSCMatrix eigenvectors()
Deprecated.
double alpha_occupation(int vectornum)
Returns the alpha occupation.
virtual double alpha_occupation(int irrep, int vectornum)
Returns the alpha occupation.
RefSCMatrix orthog_so_to_mo()
Returns the orthogonal-SO to MO transformation matrix.
RefSCMatrix mo_to_orthog_so()
Returns the MO to orthogonal-SO transformation matrix.
int nelectron()
Returns the number of electrons.
virtual RefSCMatrix hcore_guess()
Return a guess vector.
virtual RefSCMatrix oso_eigenvectors()=0
Returns the orthogonal MO (columns) to orthogonal-SO (rows) transformation matrix.
void print(std::ostream &o=ExEnv::out0()) const
Print information about the object.
double beta_occupation(int vectornum)
Returns the beta occupation.
virtual RefSCMatrix projected_eigenvectors(const Ref< OneBodyWavefunction > &, int alp=1)
Projects the density into the current basis set.
The RefDiagSCMatrix class is a smart pointer to an DiagSCMatrix specialization.
Definition matrix.h:380
The RefSCMatrix class is a smart pointer to an SCMatrix specialization.
Definition matrix.h:135
The RefSymmSCMatrix class is a smart pointer to an SCSymmSCMatrix specialization.
Definition matrix.h:261
A template class that maintains references counts.
Definition ref.h:332
Definition vector3.h:46
Restores objects that derive from SavableState.
Definition statein.h:70
Serializes objects that derive from SavableState.
Definition stateout.h:61
A Wavefunction is a MolecularEnergy that utilizies a GaussianBasisSet.
Definition wfn.h:48

Generated at Mon Sep 2 2024 00:00:00 for MPQC 2.3.1 using the documentation package Doxygen 1.12.0.