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 
37 namespace 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 
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 
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:
200  HCoreWfn(StateIn&);
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()
Returns the SO to MO transformation matrix.
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 Fri Dec 2 2022 21:09:13 for MPQC 2.3.1 using the documentation package Doxygen 1.9.1.