Difference between revisions of "CamCASP/Programming/7"
import>Am592 |
import>Am592 |
||
Line 5: | Line 5: | ||
As a temporary measure we could calculate the hybrid ADALX+CHF (not ALDA - I still don't have the VWN correlation functional programmed, but this is not a large error) by back transforming the kernel using the DF solution. So we go from a two-index object to a four-index object, then form the full propagator, and then transform back to a two-index density-fitted propagator. This is a round-about way, but should work and will still benefit from the efficiency gains in evaluating the kernel integrals. |
As a temporary measure we could calculate the hybrid ADALX+CHF (not ALDA - I still don't have the VWN correlation functional programmed, but this is not a large error) by back transforming the kernel using the DF solution. So we go from a two-index object to a four-index object, then form the full propagator, and then transform back to a two-index density-fitted propagator. This is a round-about way, but should work and will still benefit from the efficiency gains in evaluating the kernel integrals. |
||
+ | =Kernel Notation= |
||
+ | * AUX-ALDA : ALDA kernel constructed directly in auxiliary basis. |
||
+ | * AUX-ALDAX : ALDAX exchange-only LDA kernel constructed directly in auxiliary basis. |
||
+ | * DF-(ALDA+CHF) : Hybrid ALDA+CHF kernel constructed in main basis, and then reduced in size using density-fitting. |
||
+ | * DF-(ALDAX(DF)+CHF) : As above, but with exchange-only ALDAX kernel calculated from AUX-ALDAX and converted into an ov x ov object using the DF solution matrix. |
||
+ | |||
+ | =Examples= |
||
==Benzene== |
==Benzene== |
||
* Basis: Sadlej |
* Basis: Sadlej |
||
Line 10: | Line 17: | ||
** DALTON: Kernel integrals: 3.3 hours |
** DALTON: Kernel integrals: 3.3 hours |
||
** CamCASP: (properties) 2.5 hours |
** CamCASP: (properties) 2.5 hours |
||
− | * New timings (ALDAX kernel): |
+ | * New timings (AUX-ALDAX kernel): |
** Kernel: 6.5 minutes |
** Kernel: 6.5 minutes |
||
** CamCASP (only total polarizabilities): 12 minutes |
** CamCASP (only total polarizabilities): 12 minutes |
||
Line 16: | Line 23: | ||
Not quite a good comparison, but you get the idea. The new propagator is very very fast. |
Not quite a good comparison, but you get the idea. The new propagator is very very fast. |
||
− | Accuracy is poor. |
+ | Accuracy is poor. ALDAX is just not good enough for <math>\pi</math>-conjugated systems. Here are the dipole-dipole polarizabilities: |
DF-(ALDA+CHF) kernel: |
DF-(ALDA+CHF) kernel: |
||
Line 27: | Line 34: | ||
</pre> |
</pre> |
||
− | + | AUX-ALDAX kernel: |
|
<pre> |
<pre> |
||
Order: 1 by 1 |
Order: 1 by 1 |
||
Line 41: | Line 48: | ||
I've now made the new kernel integral routines accessible from the old densfit_prop.F90 module. This is a temporary work-around to allow us to use the hybrid Hessians. Here's what I get for benzene: |
I've now made the new kernel integral routines accessible from the old densfit_prop.F90 module. This is a temporary work-around to allow us to use the hybrid Hessians. Here's what I get for benzene: |
||
− | DF-( |
+ | DF-(ALDAX(DF)+CHF) kernel: |
<pre> |
<pre> |
||
42.787209 0.000000 0.000000 |
42.787209 0.000000 0.000000 |
||
Line 56: | Line 63: | ||
It's hard to say which is the dominant source of error. But the total error is quite small now, so perhaps we can live with this for now. |
It's hard to say which is the dominant source of error. But the total error is quite small now, so perhaps we can live with this for now. |
||
− | Timings: it's slower than the previous method (using |
+ | Timings: it's slower than the previous method (using AUX-ALDAX), but only by a minute. |
--[[User:am592|alston]] 15:57, 26 April 2010 (BST) |
--[[User:am592|alston]] 15:57, 26 April 2010 (BST) |
Revision as of 15:18, 26 April 2010
CamCASP => Programming => Propagator
The new propagator module (in CamCASP 5.5-dev) can create the propagator in the LDAX approximation very efficiently. Construction scales as <math>O(N^4)</math>. Further, the kernel integrals are calculated with <math>O(N^3)</math> scaling (one power for grid points and two powers for auxiliary basis functions). So the new propagator can be calculated very efficiently. But the ALDAX approximation in the kernel results in significant errors in the polarizabilities and (probably dispersion energies).
As a temporary measure we could calculate the hybrid ADALX+CHF (not ALDA - I still don't have the VWN correlation functional programmed, but this is not a large error) by back transforming the kernel using the DF solution. So we go from a two-index object to a four-index object, then form the full propagator, and then transform back to a two-index density-fitted propagator. This is a round-about way, but should work and will still benefit from the efficiency gains in evaluating the kernel integrals.
Kernel Notation
- AUX-ALDA : ALDA kernel constructed directly in auxiliary basis.
- AUX-ALDAX : ALDAX exchange-only LDA kernel constructed directly in auxiliary basis.
- DF-(ALDA+CHF) : Hybrid ALDA+CHF kernel constructed in main basis, and then reduced in size using density-fitting.
- DF-(ALDAX(DF)+CHF) : As above, but with exchange-only ALDAX kernel calculated from AUX-ALDAX and converted into an ov x ov object using the DF solution matrix.
Examples
Benzene
- Basis: Sadlej
- Old timings obtained using different processor (AMD), so using pyridine/sadlej timings (note: smaller basis set!):
- DALTON: Kernel integrals: 3.3 hours
- CamCASP: (properties) 2.5 hours
- New timings (AUX-ALDAX kernel):
- Kernel: 6.5 minutes
- CamCASP (only total polarizabilities): 12 minutes
Not quite a good comparison, but you get the idea. The new propagator is very very fast.
Accuracy is poor. ALDAX is just not good enough for <math>\pi</math>-conjugated systems. Here are the dipole-dipole polarizabilities:
DF-(ALDA+CHF) kernel:
43.247483 0.000000 0.000000 0.000000 80.710408 0.000000 0.000000 0.000000 80.713103 Isotropic polarizability: 68.22366473 Anisotropic polarizability: 37.46427266
AUX-ALDAX kernel:
Order: 1 by 1 39.035569 0.000000 0.000000 0.000000 70.478442 0.000000 0.000000 0.000000 70.487565 Isotropic polarizability: 60.00052553 Anisotropic polarizability: 31.44743535
That's a 12% error.
I've now made the new kernel integral routines accessible from the old densfit_prop.F90 module. This is a temporary work-around to allow us to use the hybrid Hessians. Here's what I get for benzene:
DF-(ALDAX(DF)+CHF) kernel:
42.787209 0.000000 0.000000 0.000000 80.353396 0.000000 0.000000 0.000000 79.887600 Isotropic polarizability: 67.67606832 Anisotropic polarizability: 37.33546875
The error is now 0.8%. There still is a difference for these reasons (I think):
- I have constructed the ov x ov kernel integrals using the expression <math>H = D K D^T</math> where <math>D</math> is the OV density-fitting solution matrix and <math>K</math> is the kernel calculated in the auxiliary basis.
- The kernel integral is calculated in the ALDAX approximation. I still do not have the contribution from the correlation functional.
- The auxiliary basis uses Spherical GTOs.
It's hard to say which is the dominant source of error. But the total error is quite small now, so perhaps we can live with this for now.
Timings: it's slower than the previous method (using AUX-ALDAX), but only by a minute. --alston 15:57, 26 April 2010 (BST)