|
1 | 1 | # Project #4: The second-order Moller-Plesset perturbation (MP2) energy
|
2 | 2 | Unlike the Hartree-Fock energy, correlation energies like the MP2 energy are usually expressed in terms of MO-basis quantities (integrals, MO energies).
|
3 |
| -The most expensive part of the calculation is the transformation of the two-electron integrals from the AO to the MO basis representation. |
4 |
| -The purpose of this project is to understand this transformation and fundamental techniques for its efficient implementation. |
5 |
| -The theoretical background and a concise set of instructions for this project may be found [[http://sirius.chem.vt.edu/~crawdad/programming/mp2.pdf|here]]. |
| 3 | +The most expensive part of the calculation is the transformation of the two-electron integrals from the AO to the MO basis representation. |
| 4 | +The purpose of this project is to understand this transformation and fundamental techniques for its efficient implementation. |
| 5 | +The theoretical background and a concise set of instructions for this project may be found [here](./project4-instructions.pdf). |
6 | 6 |
|
7 | 7 | ## Step #1: Read the Two-Electron Integrals
|
8 | 8 | The Mulliken-ordered integrals are defined as:
|
9 | 9 |
|
10 |
| -``` |
11 |
| -EQUATION |
12 |
| -(\mu \nu|\lambda \sigma) \equiv \int \phi_\mu({\mathbf r_1}) |
13 |
| -\phi_\nu({\mathbf r_1}) r_{12}^{-1} \phi_\lambda({\mathbf r_2}) |
14 |
| -\phi_\sigma({\mathbf r_2}) d{\mathbf r_1} d{\mathbf r_2} |
15 |
| -``` |
| 10 | +<img src="./figures/eri.png" height="45"> |
16 | 11 |
|
17 |
| -Concise instructions for this step can be found in |
18 |
| -[Project #3](https://github.com/CrawfordGroup/ProgrammingProjects/tree/master/Project%2303) |
| 12 | +Concise instructions for this step can be found in [Project #3](../Project%2303). |
19 | 13 |
|
20 | 14 | ## Step #2: Obtain the MO Coefficients and MO Energies
|
21 |
| -Use the values you computed in the Hartree-Fock program of |
22 |
| -[Project #3](https://github.com/CrawfordGroup/ProgrammingProjects/tree/master/Project%2303) |
| 15 | +Use the values you computed in the Hartree-Fock program of [Project #3](../Project%2303). |
23 | 16 | ## Step #3: Transform the Two-Electron Integrals to the MO Basis
|
24 | 17 | ### The Noddy Algorithm
|
25 | 18 |
|
26 | 19 | The most straightforward expression of the AO/MO integral transformation is
|
27 | 20 |
|
28 |
| -``` |
29 |
| -EQUATION |
30 |
| -(pq|rs) = \sum_\mu \sum_\nu \sum_\lambda \sum_\sigma C_\mu^p C_\nu^q |
31 |
| -(\mu \nu|\lambda \sigma) C_\lambda^r C_\sigma^s |
32 |
| -``` |
| 21 | +<img src="./figures/noddy-transform.png" height="50"> |
33 | 22 |
|
34 |
| -This approach is easy to implement (hence the word "[noddy](http://www.hackerslang.com/noddy.html)" above), but is expensive due to its N<sup>8</sup> computational order. |
35 |
| -Nevertheless, you should start with this algorithm to get your code working, and run timings (use the UNIX "time" command) |
36 |
| -for the test cases below to get an idea of its computational cost. |
| 23 | +This approach is easy to implement (hence the word "[noddy](http://www.hackerslang.com/noddy.html)" above), but is expensive due to its N<sup>8</sup> computational order. Nevertheless, you should start with this algorithm to get your code working, and run timings (use the UNIX "time" command) for the test cases below to get an idea of its computational cost. |
37 | 24 |
|
38 |
| - * Hint 1: Noddy transformation code |
| 25 | + * [Hint 1](./hints/hint1.md): Noddy transformation code |
39 | 26 | ### The Smarter Algorithm
|
40 | 27 |
|
41 | 28 | Notice that none of the *C* coefficients in the above expression have any indices in common. Thus, the summation could be rearranged such that:
|
42 |
| -``` |
43 |
| -EQUATION |
44 |
| -(pq|rs) = \sum_\mu C_\mu^p \left[ \sum_\nu C_\nu^q \left[ \sum_\lambda C_\lambda^r \left[ \sum_\sigma C_\sigma^s (\mu \nu|\lambda \sigma) \right] \right] \right]. |
45 |
| -``` |
| 29 | + |
| 30 | +<img src="./figures/smart-transform.png" height="60"> |
46 | 31 |
|
47 | 32 | This means that each summation within brackets could be carried out separately,
|
48 |
| -starting from the innermost summation over <html>σ</html>, if we store the results at each step. |
49 |
| -This reduces the N<sup>8</sup> algorithm above to four N<sup>5</sup> steps. |
| 33 | +starting from the innermost summation over <html>σ</html>, if we store the results at each step. This reduces the N<sup>8</sup> algorithm above to four N<sup>5</sup> steps. |
50 | 34 |
|
51 | 35 | Be careful about the permutational symmetry of the integrals and intermediates at each step:
|
52 | 36 | while the AO-basis integrals have eight-fold permutational symmetry, the partially transformed integrals have much less symmetry.
|
53 | 37 |
|
54 | 38 | After you have the noddy algorithm working and timed, modify it to use this smarter algorithm and time the test cases again. Enjoy!
|
55 | 39 |
|
56 |
| - * Hint 2: Smarter transformation code |
| 40 | + * [Hint 2](./hints/hint2.md): Smarter transformation code |
57 | 41 |
|
58 | 42 | ## Step #4: Compute the MP2 Energy
|
59 | 43 |
|
60 |
| -``` |
61 |
| -EQUATION |
62 |
| -E_{\rm MP2} = \sum_{ij} \sum_{ab} \frac{(ia|jb) \left[ 2 (ia|jb) - |
63 |
| -(ib|ja) \right]}{\epsilon_i + \epsilon_j - \epsilon_a - \epsilon_b}, |
64 |
| -``` |
| 44 | +<img src="./figures/mp2-energy.png" height="60"> |
65 | 45 |
|
66 | 46 | where *i* and *j* denote doubly-occupied orbitals and *a* and *b* unoccupied orbitals, and the denominator involves the MO energies.
|
67 | 47 |
|
68 |
| - * Hint 3: Occupied versus unoccupied orbitals |
| 48 | + * [Hint 3](./hints/hint3.md): Occupied versus unoccupied orbitals |
69 | 49 |
|
70 | 50 | ## Test Cases
|
71 |
| -The input structures, integrals, etc. for these examples are found in the [input directory](https://github.com/CrawfordGroup/ProgrammingProjects/tree/master/Project%2304/input). |
| 51 | +The input structures, integrals, etc. for these examples are found in the [input directory](./input). |
72 | 52 |
|
73 |
| -* STO-3G Water | [output](https://github.com/CrawfordGroup/ProgrammingProjects/blob/master/Project%2304/output/h2o/STO-3G/output.txt) |
74 |
| -* DZ Water | [output](https://github.com/CrawfordGroup/ProgrammingProjects/blob/master/Project%2304/output/h2o/DZ/output.txt) |
75 |
| -* DZP Water | [output](https://github.com/CrawfordGroup/ProgrammingProjects/blob/master/Project%2304/output/h2o/DZP/output.txt) |
76 |
| -* STO-3G Methane | [output](https://github.com/CrawfordGroup/ProgrammingProjects/blob/master/Project%2304/output/ch4/STO-3G/output.txt) |
| 53 | +* STO-3G Water | [output](./output/h2o/STO-3G/output.txt) |
| 54 | +* DZ Water | [output](./output/h2o/DZ/output.txt) |
| 55 | +* DZP Water | [output](./output/h2o/DZP/output.txt) |
| 56 | +* STO-3G Methane | [output](./output/ch4/STO-3G/output.txt) |
77 | 57 |
|
0 commit comments