sisi4s
Loading...
Searching...
No Matches
CcsdPerturbativeTriplesComplex.hpp
Go to the documentation of this file.
1#ifndef CCSD_PERTURBATIVE_TRIPLES_COMPLEX_DEFINED
2#define CCSD_PERTURBATIVE_TRIPLES_COMPLEX_DEFINED
3
7
8namespace sisi4s {
13public:
15 CcsdPerturbativeTriplesComplex(std::vector<Argument> const &argumentList);
21 virtual void run();
22
26 virtual void dryRun();
27
28private:
29 // NOTE: the Dummy template argument is needed to "fully" specialize
30 // the inner class CoulombVertex to CoulombVertex<double> or <complex>
31 template <typename F, int Dummy = 0>
32 class CoulombVertex {};
33
34 template <int Dummy>
35 class CoulombVertex<double, Dummy> {
36 public:
37 CoulombVertex(Tensor<complex> *GammaFab, Tensor<complex> *GammaFai);
38 ~CoulombVertex();
39 void getDoublesParticleContribution(SlicedCtfTensor<double> &Tabij,
40 const Map<3> &i,
41 Tensor<double> &SVabc);
42
43 protected:
44 Tensor<double> *realGammaFab, *imagGammaFab;
45 SlicedCtfTensor<double> *realGammaFai, *imagGammaFai;
46 };
47
48 template <int Dummy>
49 class CoulombVertex<complex, Dummy> {
50 public:
51 CoulombVertex(Tensor<complex> *GammaFab, Tensor<complex> *GammaFai);
52 ~CoulombVertex();
53 void getDoublesParticleContribution(SlicedCtfTensor<complex> &Tabij,
54 const Map<3> &i,
55 Tensor<complex> &DVabc);
56
57 protected:
58 Tensor<complex> *conjGammaFab;
59 SlicedCtfTensor<complex> *GammaFai;
60 };
61
62 template <typename F>
63 class Calculator {
64 public:
65 Calculator(Tensor<F> *Tai,
66 Tensor<F> *Tabij,
67 Tensor<F> *Vabij,
68 Tensor<F> *Valij,
69 Tensor<complex> *GammaFab,
70 Tensor<complex> *GammaFai,
71 Tensor<double> *epsi,
72 Tensor<double> *epsa);
73 ~Calculator();
74 F calculate();
75 void addDoublesHoleContribution(const Map<3> &, Tensor<F> &);
76 Tensor<F> &getSinglesContribution(const Map<3> &);
77 Tensor<F> &getEnergyDenominator(const Map<3> &);
78
79 protected:
80 Tensor<F> *SVabc, *DVabc;
81 SlicedCtfTensor<F> *Tai, *Tabij, *Tabil;
82 SlicedCtfTensor<F> *Vabij, *Valij;
83 CoulombVertex<F> Gamma;
84 SlicedCtfTensor<F> *epsi;
85 Tensor<F> *epsa;
86 };
87};
88} // namespace sisi4s
89
90#endif
#define ALGORITHM_REGISTRAR_DECLARATION(NAME)
Auxiliary macro declaring the algorithm registrar for the algorithm type of the given name....
Definition Algorithm.hpp:169
Definition Algorithm.hpp:26
Caclulates perturbative triples correction.
Definition CcsdPerturbativeTriplesComplex.hpp:12
virtual ~CcsdPerturbativeTriplesComplex()
Definition CcsdPerturbativeTriplesComplex.cxx:20
virtual void dryRun()
Dry run for perturbative triples correction based on Helgaker book.
Definition CcsdPerturbativeTriplesComplex.cxx:351
virtual void run()
Calculates perturbative triples correction. Routine based on Helgaker book.
Definition CcsdPerturbativeTriplesComplex.cxx:32
Definition Permutation.hpp:9
Definition SlicedCtfTensor.hpp:12
@ F
Definition AngularMomentum.hpp:12
Definition Algorithm.hpp:10
CTF::Tensor< F > Tensor
Definition Tensor.hpp:9
Complex< real > complex
Definition Complex.hpp:17