28#ifndef _chemistry_qc_mbptr12_mp2r12energyutil_h
29#define _chemistry_qc_mbptr12_mp2r12energyutil_h
31#include <util/ref/ref.h>
32#include <math/scmat/matrix.h>
33#include <util/misc/scexception.h>
34#include <chemistry/qc/wfn/spin.h>
35#include <math/scmat/svd.h>
36#include <chemistry/qc/wfn/orbitalspace.h>
37#include <chemistry/qc/mbptr12/r12technology.h>
63 const unsigned int nocc_act);
98 virtual void times(
unsigned int ij,
127 const unsigned int nocc_act);
197 SpinCase2 spincase2_;
206 const unsigned int nocc_act);
273 SpinCase2 spincase2_;
282 const unsigned int nocc_act);
354 const unsigned int nocc_act);
404 const unsigned int nocc_act);
static std::ostream & out0()
Return an ostream that writes from node 0.
Class MP2R12EnergyUtil provides some misc functions to operate on (blocked) ijxy and xyxy matrices.
Definition mp2r12_energy_util.h:195
void print(const char *label, const RefSCMatrix &A, std::ostream &os=ExEnv::out0()) const
Prints A.
void put(unsigned int ij, const RefSCMatrix &A, const RefSCVector &Aij) const
puts ij block into A
void put(unsigned int ij, const RefSymmSCMatrix &A, const RefSymmSCMatrix &Aij) const
puts ij block into A
void times(unsigned int ij, const RefSymmSCMatrix &A, const RefSCMatrix &x, RefSCMatrix &y) const
computes y = A x
void print(const char *label, const RefSymmSCMatrix &A, std::ostream &os=ExEnv::out0()) const
Prints A.
void get(unsigned int ij, const RefSymmSCMatrix &A, const RefSymmSCMatrix &Aij) const
gets ij block of A
void get(unsigned int ij, const RefSCMatrix &A, const RefSCMatrix &Aij) const
gets ij block of A
void diagonalize(const RefSymmSCMatrix &A, RefDiagSCMatrix &evals, RefSCMatrix &evecs) const
Computes eigenvalues and eigenvectors of A. evals and evecs don't have to be allocated.
void times(const RefSymmSCMatrix &A, const RefSCMatrix &x, RefSCMatrix &y) const
computes y = A x
void solve_linear_system(const RefSymmSCMatrix &A, RefSCMatrix &X, const RefSCMatrix &B) const
Solves A*X = B.
void print(const char *label, const RefDiagSCMatrix &A, std::ostream &os=ExEnv::out0()) const
Prints A.
void get(unsigned int ij, const RefSCMatrix &A, const RefSCVector &Aij) const
gets ij block of A
unsigned int nblks(const RefSymmSCMatrix &A) const
Number of oo blocks in dimension of A.
void invert(RefSymmSCMatrix &A) const
Inverts A in-place.
RefDiagSCMatrix eigenvalues(const RefSymmSCMatrix &A) const
Computes eigenvalues of A.
void put(unsigned int ij, const RefSCMatrix &A, const RefSCMatrix &Aij) const
puts ij block into A
RefSCVector dot_product(const RefSCMatrix &A, const RefSCMatrix &B) const
Computes "dot" product of A and B: tr[i] = sum_j A[j][i] B[j][i].
void get(unsigned int ij, const RefDiagSCMatrix &A, const RefDiagSCMatrix &Aij) const
gets ij block of A
MP2R12EnergyUtil_Diag_DifferentSpin(const RefSCDimension &oodim, const RefSCDimension &xydim, const RefSCDimension &f12dim, const unsigned int nocc_act)
oodim is a dimension of ij (active occupied pairs) xydim is a dimension of xy (orbital products used ...
void transform(const RefSymmSCMatrix &B, const RefDiagSCMatrix &A, const RefSCMatrix &U) const
B = U * A * U.t()
unsigned int ncolblks(const RefSCMatrix &A) const
Number of oo blocks in column dimension of A.
unsigned int nrowblks(const RefSCMatrix &A) const
Number of oo blocks in row dimension of A.
void put(unsigned int ij, const RefDiagSCMatrix &A, const RefDiagSCMatrix &Aij) const
puts ij block into A
Definition mp2r12_energy_util.h:271
unsigned int nblks(const RefSymmSCMatrix &A) const
Number of oo blocks in dimension of A.
void diagonalize(const RefSymmSCMatrix &A, RefDiagSCMatrix &evals, RefSCMatrix &evecs) const
Computes eigenvalues and eigenvectors of A. evals and evecs don't have to be allocated.
void get(unsigned int ij, const RefSCMatrix &A, const RefSCMatrix &Aij) const
gets ij block of A
RefDiagSCMatrix eigenvalues(const RefSymmSCMatrix &A) const
Computes eigenvalues of A.
void put(unsigned int ij, const RefSymmSCMatrix &A, const RefSymmSCMatrix &Aij) const
puts ij block into A
void invert(RefSymmSCMatrix &A) const
Inverts A in-place.
void get(unsigned int ij, const RefSCMatrix &A, const RefSCVector &Aij) const
gets ij block of A
void transform(const RefSymmSCMatrix &B, const RefDiagSCMatrix &A, const RefSCMatrix &U) const
B = U * A * U.t()
void put(unsigned int ij, const RefSCMatrix &A, const RefSCMatrix &Aij) const
puts ij block into A
void put(unsigned int ij, const RefSCMatrix &A, const RefSCVector &Aij) const
puts ij block into A
void get(unsigned int ij, const RefDiagSCMatrix &A, const RefDiagSCMatrix &Aij) const
gets ij block of A
unsigned int ncolblks(const RefSCMatrix &A) const
Number of oo blocks in column dimension of A.
void get(unsigned int ij, const RefSymmSCMatrix &A, const RefSymmSCMatrix &Aij) const
gets ij block of A
void print(const char *label, const RefSymmSCMatrix &A, std::ostream &os=ExEnv::out0()) const
Prints A.
void print(const char *label, const RefDiagSCMatrix &A, std::ostream &os=ExEnv::out0()) const
Prints A.
unsigned int nrowblks(const RefSCMatrix &A) const
Number of oo blocks in row dimension of A.
MP2R12EnergyUtil_Diag_SameSpin(const RefSCDimension &oodim, const RefSCDimension &xydim, const RefSCDimension &f12dim, const unsigned int nocc_act)
oodim is a dimension of ij (active occupied pairs) xydim is a dimension of xy (orbital products used ...
void times(unsigned int ij, const RefSymmSCMatrix &A, const RefSCMatrix &x, RefSCMatrix &y) const
computes y = A x
void print(const char *label, const RefSCMatrix &A, std::ostream &os=ExEnv::out0()) const
Prints A.
RefSCVector dot_product(const RefSCMatrix &A, const RefSCMatrix &B) const
Computes "dot" product of A and B: tr[i] = sum_j A[j][i] B[j][i].
void times(const RefSymmSCMatrix &A, const RefSCMatrix &x, RefSCMatrix &y) const
computes y = A x
void solve_linear_system(const RefSymmSCMatrix &A, RefSCMatrix &X, const RefSCMatrix &B) const
Solves A*X = B.
void put(unsigned int ij, const RefDiagSCMatrix &A, const RefDiagSCMatrix &Aij) const
puts ij block into A
Definition mp2r12_energy_util.h:107
virtual void get(unsigned int ij, const RefSCMatrix &A, const RefSCMatrix &Aij) const =0
gets ij block of A
unsigned int nocc_act_
number of active occupied orbitals
Definition mp2r12_energy_util.h:110
virtual void transform(const RefSymmSCMatrix &B, const RefDiagSCMatrix &A, const RefSCMatrix &U) const =0
B = U * A * U.t()
virtual void diagonalize(const RefSymmSCMatrix &A, RefDiagSCMatrix &evals, RefSCMatrix &evecs) const =0
Computes eigenvalues and eigenvectors of A. evals and evecs don't have to be allocated.
void check_dims(const RefSymmSCMatrix &A) const
Checks if matrix A has proper dimensions. Throw, if not.
virtual void times(const RefSymmSCMatrix &A, const RefSCMatrix &x, RefSCMatrix &y) const =0
computes y = A x
RefSCDimension oodim_
number of ij pairs
Definition mp2r12_energy_util.h:112
virtual RefSCVector dot_product(const RefSCMatrix &A, const RefSCMatrix &B) const =0
Computes "dot" product of A and B: tr[i] = sum_j A[j][i] B[j][i].
RefSCDimension gdim_
number of geminals
Definition mp2r12_energy_util.h:118
virtual void get(unsigned int ij, const RefSymmSCMatrix &A, const RefSymmSCMatrix &Aij) const =0
gets ij block of A
virtual void put(unsigned int ij, const RefSymmSCMatrix &A, const RefSymmSCMatrix &Aij) const =0
puts ij block into A
unsigned int nf12_
number of geminals
Definition mp2r12_energy_util.h:120
virtual RefDiagSCMatrix eigenvalues(const RefSymmSCMatrix &A) const =0
Computes eigenvalues of A.
virtual void put(unsigned int ij, const RefSCMatrix &A, const RefSCVector &Aij) const =0
puts ij block into A
RefSCDimension xydim_
number of xy pairs
Definition mp2r12_energy_util.h:114
virtual void solve_linear_system(const RefSymmSCMatrix &A, RefSCMatrix &X, const RefSCMatrix &B) const =0
Solves A*X = B.
virtual void times(unsigned int ij, const RefSymmSCMatrix &A, const RefSCMatrix &x, RefSCMatrix &y) const =0
computes y = A x
virtual void print(const char *label, const RefSymmSCMatrix &A, std::ostream &os=ExEnv::out0()) const =0
Prints A.
virtual void print(const char *label, const RefSCMatrix &A, std::ostream &os=ExEnv::out0()) const =0
Prints A.
virtual void invert(RefSymmSCMatrix &A) const =0
Inverts A in-place.
void check_dims(const RefSCMatrix &A) const
Checks if matrix A has proper dimensions. Throw, if not.
RefSCDimension f12dim_
number of geminals per pair times number of xy pairs
Definition mp2r12_energy_util.h:116
virtual void get(unsigned int ij, const RefSCMatrix &A, const RefSCVector &Aij) const =0
gets ij block of A
virtual void put(unsigned int ij, const RefSCMatrix &A, const RefSCMatrix &Aij) const =0
puts ij block into A
virtual void get(unsigned int ij, const RefDiagSCMatrix &A, const RefDiagSCMatrix &Aij) const =0
gets ij block of A
virtual void put(unsigned int ij, const RefDiagSCMatrix &A, const RefDiagSCMatrix &Aij) const =0
puts ij block into A
virtual void print(const char *label, const RefDiagSCMatrix &A, std::ostream &os=ExEnv::out0()) const =0
Prints A.
Definition mp2r12_energy_util.h:346
void times(unsigned int ij, const RefSymmSCMatrix &A, const RefSCMatrix &x, RefSCMatrix &y) const
computes y = A x
unsigned int nblks(const RefSymmSCMatrix &A) const
Number of oo blocks in dimension of A.
void times(const RefSymmSCMatrix &A, const RefSCMatrix &x, RefSCMatrix &y) const
computes y = A x
void print(const char *label, const RefDiagSCMatrix &A, std::ostream &os=ExEnv::out0()) const
Prints A.
void print(const char *label, const RefSymmSCMatrix &A, std::ostream &os=ExEnv::out0()) const
Prints A.
unsigned int nrowblks(const RefSCMatrix &A) const
Number of oo blocks in row dimension of A.
RefSCVector dot_product(const RefSCMatrix &A, const RefSCMatrix &B) const
Computes "dot" product of A and B: tr[i] = sum_j A[j][i] B[j][i].
RefDiagSCMatrix eigenvalues(const RefSymmSCMatrix &A) const
Computes eigenvalues of A.
void solve_linear_system(const RefSymmSCMatrix &A, RefSCMatrix &X, const RefSCMatrix &B) const
Solves A*X = B.
void diagonalize(const RefSymmSCMatrix &A, RefDiagSCMatrix &evals, RefSCMatrix &evecs) const
Computes eigenvalues and eigenvectors of A. evals and evecs don't have to be allocated.
MP2R12EnergyUtil_Nondiag(const RefSCDimension &oodim, const RefSCDimension &xydim, const RefSCDimension &f12dim, const unsigned int nocc_act)
oodim is a dimension of ij (active occupied pairs) xydim is a dimension of xy (orbital products used ...
void invert(RefSymmSCMatrix &A) const
Inverts A in-place.
void print(const char *label, const RefSCMatrix &A, std::ostream &os=ExEnv::out0()) const
Prints A.
void transform(const RefSymmSCMatrix &B, const RefDiagSCMatrix &A, const RefSCMatrix &U) const
B = U * A * U.t()
unsigned int ncolblks(const RefSCMatrix &A) const
Number of oo blocks in column dimension of A.
Class MP2R12EnergyUtil_base is the abstract interface to utility functions used by MP2R12Energy deriv...
Definition mp2r12_energy_util.h:43
void check_dims(const RefSCMatrix &A) const
Checks if matrix A has proper dimensions. Throw, if not.
virtual void times(const RefSymmSCMatrix &A, const RefSCMatrix &x, RefSCMatrix &y) const =0
computes y = A x
RefSCDimension gdim_
number of geminals
Definition mp2r12_energy_util.h:54
RefSCDimension f12dim_
number of geminals per pair times number of xy pairs
Definition mp2r12_energy_util.h:52
unsigned int nocc_act_
number of active occupied orbitals
Definition mp2r12_energy_util.h:46
virtual void print(const char *label, const RefSCMatrix &A, std::ostream &os=ExEnv::out0()) const =0
Prints A.
virtual void solve_linear_system(const RefSymmSCMatrix &A, RefSCMatrix &X, const RefSCMatrix &B) const =0
Solves A*X = B.
virtual void print(const char *label, const RefSymmSCMatrix &A, std::ostream &os=ExEnv::out0()) const =0
Prints A.
unsigned int nf12_
number of geminals
Definition mp2r12_energy_util.h:56
virtual void print(const char *label, const RefDiagSCMatrix &A, std::ostream &os=ExEnv::out0()) const =0
Prints A.
virtual void invert(RefSymmSCMatrix &A) const =0
Inverts A in-place.
virtual void diagonalize(const RefSymmSCMatrix &A, RefDiagSCMatrix &evals, RefSCMatrix &evecs) const =0
Computes eigenvalues and eigenvectors of A. evals and evecs don't have to be allocated.
virtual RefDiagSCMatrix eigenvalues(const RefSymmSCMatrix &A) const =0
Computes eigenvalues of A.
virtual void times(unsigned int ij, const RefSymmSCMatrix &A, const RefSCMatrix &x, RefSCMatrix &y) const =0
computes y = A x
virtual void transform(const RefSymmSCMatrix &B, const RefDiagSCMatrix &A, const RefSCMatrix &U) const =0
B = U * A * U.t()
void check_dims(const RefSymmSCMatrix &A) const
Checks if matrix A has proper dimensions. Throw, if not.
virtual RefSCVector dot_product(const RefSCMatrix &A, const RefSCMatrix &B) const =0
Computes "dot" product of A and B: tr[i] = sum_j A[j][i] B[j][i].
RefSCDimension xydim_
number of xy pairs
Definition mp2r12_energy_util.h:50
RefSCDimension oodim_
number of ij pairs
Definition mp2r12_energy_util.h:48
The base class for all reference counted objects.
Definition ref.h:192
The RefDiagSCMatrix class is a smart pointer to an DiagSCMatrix specialization.
Definition matrix.h:389
The RefSCDimension class is a smart pointer to an SCDimension specialization.
Definition dim.h:152
The RefSCMatrix class is a smart pointer to an SCMatrix specialization.
Definition matrix.h:135
The RefSCVector class is a smart pointer to an SCVector specialization.
Definition matrix.h:55
The RefSymmSCMatrix class is a smart pointer to an SCSymmSCMatrix specialization.
Definition matrix.h:265
A template class that maintains references counts.
Definition ref.h:361
Contains all MPQC code up to version 3.
Definition mpqcin.h:14
void firstorder_cusp_coefficients(const SpinCase2 &spincase2, RefSCMatrix &C, const Ref< OrbitalSpace > &i1, const Ref< OrbitalSpace > &i2, const Ref< R12Technology::CorrelationFactor > &corrfactor)
fills C with coefficients determined by first-order cusp conditions