Tuesday, August 4, 2015

The basis set project continues

In the last blog post, we were discussing both the saturation and the contraction. In the end, I've settled on a (26s16p12d2f) basis set for the aug-cc-pVTZ-Juc basis set (uc is for uncontracted) and now I turn to the contraction of the basis set.

So why do we contract the basis set? - well – for every primitive s-function have in our system, we increase the size of the Fock matrix by one. For p-functions, we have \(p_x\), \(p_y\) and \(p_z\) and thus for every primitive p-function we increase the size of the Fock matrix by three. For d-fucntions it's five and for f-functions is 10. So, by just including one atom using our newly constructed aug-cc-pVTZ-Juc basis set increases the size of the Fock matix by

\[ 26 \times 1 + 3 \times 16 + 12 \times 5 + 2 \times 10 = 156 \]

and remember that the methods you want to use scales really bad with the number of basis functions.

So a contraction of the basis set can be seen as a reasonable reduction of the basis set size without compromising its quality (too much).

Above you see a figure I 've made with the error in percent to aug-cc-pVTZ-Juc as the contraction level is increased. The further you go to the right, the more s-functions (see the number on the x-axis) you have in your contracted basis set. Obviously, the fewer the better because of computational speed but as you go further to the left, the error starts increasing. Initially not so much, but below 10 some errors are > 100 %.

I've decided that an error below 1 % in the contraction when compared to the uncontracted basis set is acceptable (at least for the s-functions), but as observed from the figure above, this threshold is reached at quite different points depending on the which element is investigated.

And this is where it stops being: there is one answer only and it turns into voodoo. So personally, I think that a contraction level of 14 would be quite nice, but since that is the first point where all five elements are below or very close to 1 % (Bromine is not quite there) I don't feel that this should be the contraction level. Going to a contraction level of 15, all calculations give results that are below 1 % but somehow it saddens me that the error for Gallium shoots up to 1 % while Bromine goes down. Obviously I should not concern myself with Germanium, Arsenic or Selenium as their errors are well below 0.2 % for the same contraction level. I guess for s-functions I could probably settle with a contraction level of 17 since reduces the error to 0.6 % in the worst case (Gallium) without adding a lot of computational expense, but then again – a difference of 0.4 % is not really a whole lot.