TBTK
Need a break? Support the development by playing Polarity Puzzles
Sto3g.h
1 /* Copyright 2019 Kristofer Björnson
2  *
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
17 
24 #ifndef COM_DAFER45_TBTK_STO3G
25 #define COM_DAFER45_TBTK_STO3G
26 
27 #include "TBTK/AbstractState.h"
28 #include "TBTK/Atom.h"
29 #include "TBTK/KineticOperator.h"
30 #include "TBTK/NuclearPotentialOperator.h"
31 #include "TBTK/HartreeFockPotentialOperator.h"
32 
33 namespace TBTK{
34 
35 class Sto3g : public AbstractState{
36 public:
44  Sto3g(
45  double slaterExponent,
46  const std::vector<double> &coordinates,
47  const Index &index,
48  int spinIndex = -1
49  );
50 
52  virtual Sto3g* clone() const;
53 
55  virtual std::complex<double> getOverlap(
56  const AbstractState &ket
57  ) const;
58 
60  virtual std::complex<double> getMatrixElement(
61  const AbstractState &ket,
62  const AbstractOperator &o
63  ) const;
64 private:
66  double contractionCoefficients[3] = {0.444635, 0.535328, 0.154329};
67 
69  double gaussianExponents[3];
70 
73  int spinIndex;
74 
82  std::complex<double> getKineticTerm(
83  const Sto3g &ket,
84  const KineticOperator &o
85  ) const;
86 
94  std::complex<double> getNuclearPotentialTerm(
95  const Sto3g &ket,
96  const NuclearPotentialOperator &o
97  ) const;
98 
106  std::complex<double> getHartreeFockPotentialTerm(
107  const Sto3g &ket,
108  const HartreeFockPotentialOperator &o
109  ) const;
110 
126  std::complex<double> getSingleHartreeFockTerm(
127  const Sto3g &state1,
128  const Sto3g &state2,
129  const Sto3g &state3
130  ) const;
131 
139  static double F_0(double x);
140 };
141 
142 inline Sto3g* Sto3g::clone() const{
143  return new Sto3g(*this);
144 }
145 
146 }; //End of namespace TBTK
147 
148 #endif
149 
Definition: Boolean.h:32
Atom.h.