ERKALE
ERKALE - DFT from Hel
 All Classes Functions Variables Friends Pages
eri_digest.h
1 /*
2  * This source code is part of
3  *
4  * E R K A L E
5  * -
6  * DFT from Hel
7  *
8  * Written by Susi Lehtola, 2010-2015
9  * Copyright (c) 2010-2015, Susi Lehtola
10  *
11  * This program is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU General Public License
13  * as published by the Free Software Foundation; either version 2
14  * of the License, or (at your option) any later version.
15  */
16 
17 #ifndef ERKALE_ERIDIGEST
18 #define ERKALE_ERIDIGEST
19 
20 #include "basis.h"
21 class dERIWorker;
22 
25  public:
29  virtual ~IntegralDigestor();
31  virtual void digest(const std::vector<eripair_t> & shpairs, size_t ip, size_t jp, const std::vector<double> & ints, size_t ioff)=0;
32 };
33 
35 class JDigestor: public IntegralDigestor {
37  arma::mat P;
39  arma::mat J;
40  public:
42  JDigestor(const arma::mat & P);
44  ~JDigestor();
45 
47  void digest(const std::vector<eripair_t> & shpairs, size_t ip, size_t jp, const std::vector<double> & ints, size_t ioff);
49  arma::mat get_J() const;
50 };
51 
53 class KDigestor: public IntegralDigestor {
55  arma::mat P;
57  arma::mat K;
58  public:
60  KDigestor(const arma::mat & P);
62  ~KDigestor();
63 
65  void digest(const std::vector<eripair_t> & shpairs, size_t ip, size_t jp, const std::vector<double> & ints, size_t ioff);
67  arma::mat get_K() const;
68 };
69 
73  arma::cx_mat P;
75  arma::cx_mat K;
76  public:
78  cxKDigestor(const arma::cx_mat & P);
80  ~cxKDigestor();
81 
83  void digest(const std::vector<eripair_t> & shpairs, size_t ip, size_t jp, const std::vector<double> & ints, size_t ioff);
85  arma::cx_mat get_K() const;
86 };
87 
90  public:
92  ForceDigestor();
94  virtual ~ForceDigestor();
96  virtual void digest(const std::vector<eripair_t> & shpairs, size_t ip, size_t jp, dERIWorker & deriw, arma::vec & f)=0;
97 };
98 
100 class JFDigestor: public ForceDigestor {
102  arma::mat P;
103  public:
105  JFDigestor(const arma::mat & P);
107  ~JFDigestor();
108 
110  void digest(const std::vector<eripair_t> & shpairs, size_t ip, size_t jp, dERIWorker & deriw, arma::vec & f);
111 };
112 
114 class KFDigestor: public ForceDigestor {
116  arma::mat P;
118  double kfrac;
120  double fac;
121 
122  public:
124  KFDigestor(const arma::mat & P, double kfrac, bool restr);
126  ~KFDigestor();
127 
129  void digest(const std::vector<eripair_t> & shpairs, size_t ip, size_t jp, dERIWorker & deriw, arma::vec & f);
130 };
131 
132 #endif
arma::mat J
Coulomb matrix.
Definition: eri_digest.h:39
arma::mat P
Density matrix.
Definition: eri_digest.h:55
KFDigestor(const arma::mat &P, double kfrac, bool restr)
Construct digestor.
Definition: eri_digest.cpp:477
arma::mat get_J() const
Get output.
Definition: eri_digest.cpp:121
~cxKDigestor()
Destruct digestor.
Definition: eri_digest.cpp:273
void digest(const std::vector< eripair_t > &shpairs, size_t ip, size_t jp, dERIWorker &deriw, arma::vec &f)
Digest integrals.
Definition: eri_digest.cpp:484
virtual ~ForceDigestor()
Destructor.
Definition: eri_digest.cpp:416
Exchange matrix digestor.
Definition: eri_digest.h:53
Coulomb matrix digestor.
Definition: eri_digest.h:35
arma::cx_mat K
Exchange matrix.
Definition: eri_digest.h:75
arma::cx_mat get_K() const
Get output.
Definition: eri_digest.cpp:409
Exchange force digestor.
Definition: eri_digest.h:114
KDigestor(const arma::mat &P)
Construct digestor.
Definition: eri_digest.cpp:125
arma::cx_mat P
Density matrix.
Definition: eri_digest.h:73
double fac
Degeneracy factor.
Definition: eri_digest.h:120
arma::mat K
Exchange matrix.
Definition: eri_digest.h:57
Complex exchange matrix digestor.
Definition: eri_digest.h:71
~KDigestor()
Destruct digestor.
Definition: eri_digest.cpp:129
IntegralDigestor()
Constructor.
Definition: eri_digest.cpp:20
virtual ~IntegralDigestor()
Destructor.
Definition: eri_digest.cpp:23
ForceDigestor()
Constructor.
Definition: eri_digest.cpp:413
arma::mat P
Density matrix.
Definition: eri_digest.h:116
~JDigestor()
Destruct digestor.
Definition: eri_digest.cpp:30
arma::mat P
Density matrix.
Definition: eri_digest.h:102
void digest(const std::vector< eripair_t > &shpairs, size_t ip, size_t jp, dERIWorker &deriw, arma::vec &f)
Digest integrals.
Definition: eri_digest.cpp:425
~KFDigestor()
Destruct digestor.
Definition: eri_digest.cpp:481
Coulomb force digestor.
Definition: eri_digest.h:100
~JFDigestor()
Destruct digestor.
Definition: eri_digest.cpp:422
JFDigestor(const arma::mat &P)
Construct digestor.
Definition: eri_digest.cpp:419
virtual void digest(const std::vector< eripair_t > &shpairs, size_t ip, size_t jp, dERIWorker &deriw, arma::vec &f)=0
Digest derivative block.
Worker for computing electron repulsion integrals.
Definition: eriworker.h:121
void digest(const std::vector< eripair_t > &shpairs, size_t ip, size_t jp, const std::vector< double > &ints, size_t ioff)
Digest integrals.
Definition: eri_digest.cpp:132
void digest(const std::vector< eripair_t > &shpairs, size_t ip, size_t jp, const std::vector< double > &ints, size_t ioff)
Digest integrals.
Definition: eri_digest.cpp:33
void digest(const std::vector< eripair_t > &shpairs, size_t ip, size_t jp, const std::vector< double > &ints, size_t ioff)
Digest integrals.
Definition: eri_digest.cpp:276
JDigestor(const arma::mat &P)
Construct digestor.
Definition: eri_digest.cpp:26
Force digestor.
Definition: eri_digest.h:89
double kfrac
Fraction of exact exchange.
Definition: eri_digest.h:118
cxKDigestor(const arma::cx_mat &P)
Construct digestor.
Definition: eri_digest.cpp:269
Integral digestor.
Definition: eri_digest.h:24
arma::mat get_K() const
Get output.
Definition: eri_digest.cpp:265
arma::mat P
Density matrix.
Definition: eri_digest.h:37
virtual void digest(const std::vector< eripair_t > &shpairs, size_t ip, size_t jp, const std::vector< double > &ints, size_t ioff)=0
Digest integral block.