3
$\begingroup$

A case that works

In my answer to Restarting an FCI calculation in PySCF, I provided a folder full of input and output files that demonstrates saving (as a numpy array) a CI vector from a converged CISD calculation with a certain convergence tolerance, and using it as the starting point for a CISD calculation with a tighter convergence tolerance, can lead to convergence with the tighter convergence tolerance in fewer total Davidson iterations.

In particular, this is what it looks like when not using the above-described restrat procedure (I've removed the e vectors that you would see in my original answer in order to make the max|de| column more clear; and I've removed all lines that don't start with davidson so that it's easier to see how max|de| progresses):

davidson 0 3   |r|= 2.82             max|de|=  0.967     lindep= 0.321
davidson 1 6   |r|= 1.67             max|de|= -0.374     lindep= 0.795
davidson 2 9   |r|= 0.119            max|de|= -0.1       lindep= 0.935
davidson 3 12  |r|= 0.0309           max|de|= -0.00137   lindep= 0.798
davidson 4 15  |r|= 0.015            max|de|= -9.09e-05  lindep= 0.838
davidson 5 18  |r|= 0.00676          max|de|= -4.81e-05  lindep= 0.839
davidson 6 3   |r|= 0.00676          max|de|= -2e-15     lindep=    1
davidson 7 6   |r|= 0.00341          max|de|= -6.44e-06  lindep= 0.808
davidson 8 9   |r|= 0.00545          max|de|= -5.05e-06  lindep= 0.519
davidson 9 12  |r|= 0.0266           max|de|= -8.54e-05  lindep= 0.797
davidson 10 14 |r|= 0.0367           max|de|= -0.000247  lindep= 0.769
davidson 11 16 |r|= 0.0169           max|de|= -0.00023   lindep= 0.745
davidson 12 3  |r|= 0.0169           max|de|=  3.33e-15  lindep= 0.857
davidson 13 5  |r|= 0.0155           max|de|= -5.47e-05  lindep= 0.521
davidson 14 7  |r|= 0.0199           max|de|= -5e-05     lindep= 0.54
davidson 15 9  |r|= 0.0072           max|de|= -5.41e-05  lindep= 0.868
davidson 16 11 |r|= 0.00248          max|de|= -8.5e-06   lindep= 0.946
davidson 17 12 |r|= 0.00141          max|de|= -1.45e-06  lindep= 0.805
davidson 18 13 |r|= 0.00467          max|de|= -4.16e-06  lindep= 0.954
davidson 19 14 |r|= 0.0131           max|de|= -2.79e-05  lindep= 0.916
davidson 20 15 |r|= 0.0129           max|de|= -0.000103  lindep= 0.938
davidson 21 16 |r|= 0.00397          max|de|= -2.14e-05  lindep= 0.879
davidson 22 3  |r|= 0.00397          max|de|=  5.03e-12  lindep= 0.995
davidson 23 4  |r|= 0.00169          max|de|= -1.86e-06  lindep= 0.818
davidson 24 6  |r|= 0.000331         max|de|= -2.66e-07  lindep= 0.92
davidson 25 8  |r|= 9.6e-05          max|de|= -1.48e-08  lindep= 0.892
davidson 26 9  |r|= 4.79e-05         max|de|= -1.45e-09  lindep= 0.775
davidson 27 10 |r|= 9.55e-05         max|de|= -7.29e-10  lindep= 0.446
davidson 28 11 |r|= 0.00012          max|de|= -1.91e-09  lindep= 0.607
davidson 29 13 |r|= 0.000161         max|de|= -8.3e-09   lindep=  0.9
davidson 30 15 |r|= 0.000134         max|de|= -7.21e-09  lindep= 0.894
davidson 31 17 |r|= 9.8e-05          max|de|= -4.61e-09  lindep= 0.838
davidson 32 3  |r|= 9.79e-05         max|de|=  9.03e-09  lindep= 0.999
davidson 33 4  |r|= 9.76e-05         max|de|= -2.65e-09  lindep= 0.835
davidson 34 5  |r|= 6.05e-05         max|de|= -2.83e-09  lindep= 0.913
davidson 35 6  |r|= 3.02e-05         max|de|= -1e-09     lindep= 0.738
converged 36 7 |r|= 2.1e-05          max|de|= -1.36e-10
RCISD converged

This is what it looks like when I do the above with conv_tol=1e-5 instead of conv_tol=1e-9 (notice that until the davidson 16 line, the max|de| values are almost identical to the above case):

davidson 0 3   |r|= 2.82             max|de|=  0.967     lindep= 0.321
davidson 1 6   |r|= 1.67             max|de|= -0.374     lindep= 0.795
davidson 2 9   |r|= 0.119            max|de|= -0.1       lindep= 0.935
davidson 3 12  |r|= 0.0309           max|de|= -0.00137   lindep= 0.798
davidson 4 15  |r|= 0.015            max|de|= -9.09e-05  lindep= 0.838
davidson 5 18  |r|= 0.00676          max|de|= -4.81e-05  lindep= 0.839
davidson 6 3   |r|= 0.00676          max|de|= -2e-15     lindep=    1
davidson 7 5   |r|= 0.00344          max|de|= -6.42e-06  lindep= 0.808
davidson 8 7   |r|= 0.00543          max|de|= -5.02e-06  lindep= 0.738
davidson 9 9   |r|= 0.0262           max|de|= -8.09e-05  lindep= 0.577
davidson 10 11 |r|= 0.0347           max|de|= -0.000254  lindep= 0.775
davidson 11 13 |r|= 0.0214           max|de|= -0.000281  lindep= 0.888
davidson 12 15 |r|= 0.0152           max|de|= -0.000131  lindep= 0.815
davidson 13 16 |r|= 0.0217           max|de|= -0.000125  lindep= 0.84
davidson 14 3  |r|= 0.0217           max|de|= 6e-15      lindep= 0.988
davidson 15 4  |r|= 0.00936          max|de|= -5.92e-05  lindep= 0.804
davidson 16 5  |r|= 0.00678          max|de|= -2.44e-05  lindep= 0.867
davidson 17 6  |r|= 0.00551          max|de|= -1.57e-05  lindep= 0.691
davidson 18 7  |r|= 0.00339          max|de|= -3.89e-06  lindep= 0.443
converged 19 8 |r|= 0.00132          max|de|= -8.5e-07
RCISD converged

This is what it looks like when restarting from the result directly above, and switching conv_tol back to 1e-9:

davidson 0  3  |r|= 0.00132          max|de|=  0.805     lindep= 0.816
davidson 1  6  |r|= 0.000962         max|de|= -2.48e-07  lindep= 0.506
davidson 2  9  |r|= 0.000859         max|de|= -1.32e-07  lindep= 0.63
davidson 3  11 |r|= 0.00165          max|de|= -3.75e-07  lindep= 0.796
davidson 4  13 |r|= 0.00418          max|de|= -3.88e-06  lindep= 0.939
davidson 5  14 |r|= 0.00519          max|de|= -1.15e-05  lindep= 0.892
davidson 6  15 |r|= 0.00117          max|de|= -4.14e-06  lindep= 0.914
davidson 7  16 |r|= 0.00041          max|de|= -1.66e-07  lindep= 0.775
davidson 8  3  |r|= 0.00041          max|de|=  9.11e-11  lindep= 0.999
davidson 9  4  |r|= 0.000371         max|de|= -3.54e-08  lindep= 0.692
davidson 10 5  |r|= 0.000219         max|de|= -4.39e-08  lindep= 0.929
davidson 11 6  |r|= 7.38e-05         max|de|= -7.99e-09  lindep= 0.781
converged 12 7 |r|= 3.04e-05         max|de|= -7.2e-10
RCISD converged

A case that does not work

The following input file:

#!/usr/bin/env python
# Author: Nike Dattani, [email protected]

import numpy as np
import pyscf
from pyscf.gto.basis import parse_gaussian
from pyscf import gto, scf, ao2mo, fci, ci

mol = pyscf.M(
    atom = 'H 0 0 0; H 0 0 1.4011',
    unit = 'bohr',
    basis = {
            'H' : parse_gaussian.load('/home/nike/AI_ENERGIES/H/av6z.gbs', 'H')
    },
    charge = 0,
    spin = 0,
    verbose = 9,
    symmetry = True,
    symmetry_subgroup = 'Dooh',
)

#####################
## Hartree-Fock:
#####################
mf = mol.RHF().set(conv_tol=1e-10,max_cycle=999,direct_scf_tol=1e-14,chkfile = 'a6z.chk')
#mf.init_guess='atom'
#mf.init_guess='a10z.chk'
mf.kernel()

#####################
## post-Hartree-Fock:
#####################

mci = ci.CISD(mf).set(conv_tol=1e-5,max_cycle=999,nroots=27)
#mci.direct = True
e, civec = mci.kernel()
#e, civec = mci.kernel(ci0=np.load('civec.npy'))
np.save('civec.npy', civec)

#####################
## END OF INPUT
#####################

gives the following output (again with the e vectors removed and alignment adjustments so that the output is easier to raed):

davidson 0  27  |r|= 0.306    max|de|=  1.28      lindep= 0.317
davidson 1  54  |r|= 0.228    max|de|= -0.0578    lindep= 0.237
davidson 2  81  |r|= 0.361    max|de|= -0.041     lindep= 0.656
davidson 3  27  |r|= 0.361    max|de|= -1.16e-09  lindep= 0.723
davidson 4  54  |r|= 0.353    max|de|= -0.0399    lindep= 0.333
davidson 5  81  |r|= 0.332    max|de|= -0.0695    lindep= 0.355
davidson 6  27  |r|= 0.332    max|de|= -2.87e-08  lindep= 0.474
davidson 7  36  |r|= 0.251    max|de|= -0.0333    lindep= 0.362
davidson 8  43  |r|= 0.133    max|de|= -0.0115    lindep= 0.707
davidson 9  49  |r|= 0.0693   max|de|= -0.00816   lindep= 0.855
davidson 10 51  |r|= 0.0425   max|de|= -0.00192   lindep= 0.734
davidson 11 53  |r|= 0.0214   max|de|= -0.000329  lindep= 0.813
davidson 12 55  |r|= 0.0119   max|de|= -0.000104  lindep= 0.792
davidson 13 57  |r|= 0.00687  max|de|= -3.89e-05  lindep= 0.69
davidson 14 58  |r|= 0.00315  max|de|= -1.09e-05  lindep= 0.791
converged 15 59  |r|= 0.00244 max|de|= -2.53e-06
RCISD converged

When I "restart" this calculation with a smaller conv_tol value and using the civec.npy file from the previous calculation:

mci = ci.CISD(mf).set(conv_tol=1e-6,max_cycle=999,nroots=28)
e, civec = mci.kernel(ci0=np.load('civec.npy'))

I get results that are significantly worse:

davidson 0   27  |r|= 0.00244 max|de|=  1.02    lindep= 0.809
davidson 1   54  |r|= 3.26    max|de|= -0.0404  lindep= 0.694
davidson 2   66  |r|= 0.523   max|de|= -0.953   lindep= 0.278
davidson 3   28  |r|= 0.48    max|de|= -0.0422  lindep= 0.198
davidson 4   34  |r|= 0.178   max|de|= -0.032   lindep= 0.111
davidson 5   40  |r|= 1.07    max|de|=  0.11    lindep= 0.0356
davidson 6   46  |r|= 0.224   max|de|= -0.148   lindep= 0.00736
davidson 7   52  |r|= 1.55    max|de|=  0.614   lindep= 0.00343
davidson 8   59  |r|= 0.383   max|de|= -0.481   lindep= 0.000585
davidson 9   66  |r|= 1.43    max|de|=  0.481   lindep= 0.000675
davidson 10  28  |r|= 1.26    max|de|=  0.0416  lindep= 0.225
davidson 11  38  |r|= 0.183   max|de|= -0.0698  lindep= 0.0414
davidson 12  47  |r|=  1.3    max|de|=  0.76    lindep= 0.0137
davidson 13  57  |r|= 0.506   max|de|= -0.775   lindep= 0.00197
davidson 14  67  |r|= 0.335   max|de|= -0.0292  lindep= 0.00103
davidson 15  28  |r|= 0.213   max|de|=  0.055   lindep= 0.138
davidson 16  38  |r|= 0.72    max|de|= -0.0243  lindep= 0.0141
davidson 17  49  |r|= 0.286   max|de|= -0.184   lindep= 0.00154
davidson 18  60  |r|= 0.274   max|de|= -0.00263 lindep= 0.00017
davidson 19  71  |r|= 0.815   max|de|=  0.308   lindep= 7.68e-05
davidson 20  28  |r|= 0.815   max|de|=  0.0582  lindep= 0.128
davidson 21  41  |r|= 0.813   max|de|= -0.206   lindep= 0.0214
davidson 22  55  |r|= 1.17    max|de|=  0.165   lindep= 0.00475
davidson 23  70  |r|= 1.23    max|de|= -0.415   lindep= 0.00107
davidson 24  28  |r|=  1.3    max|de|=  0.0979  lindep= 0.123
davidson 25  44  |r|= 1.09    max|de|= -0.403   lindep= 0.00725
davidson 26  60  |r|= 1.24    max|de|=  0.401   lindep= 0.000936
davidson 27  77  |r|= 1.22    max|de|= -0.669   lindep= 0.00155
davidson 28  28  |r|= 1.22    max|de|=  0.291   lindep= 0.143
davidson 29  46  |r|= 1.51    max|de|= -0.406   lindep= 0.00606
davidson 30  66  |r|= 0.774   max|de|= -0.409   lindep= 0.0109
davidson 31  28  |r|= 0.628   max|de|=  0.122   lindep= 0.118
davidson 32  49  |r|= 0.73    max|de|= -0.107   lindep= 0.0052
davidson 33  71  |r|= 0.944   max|de|=  0.227   lindep= 0.000678
davidson 34  28  |r|= 0.955   max|de|=  0.181   lindep= 0.126
davidson 35  50  |r|= 0.907   max|de|= -0.216   lindep= 0.00234
davidson 36  68  |r|= 0.534   max|de|= -0.145   lindep= 0.000781
davidson 37  28  |r|= 0.391   max|de|=  0.0416  lindep= 0.0934
davidson 38  51  |r|= 0.896   max|de|=  0.0729  lindep= 0.00274
davidson 39  72  |r|= 1.05    max|de|=  0.261   lindep= 0.000494
davidson 40  28  |r|= 1.04    max|de|= -0.145   lindep= 0.132
davidson 41  54  |r|= 0.872   max|de|= -0.328   lindep= 0.00481
davidson 42  72  |r|=  1.2    max|de|=  0.265   lindep= 0.000577
davidson 43  28  |r|=  1.2    max|de|=  0.113   lindep= 0.123
davidson 44  56  |r|= 0.926   max|de|= -0.246   lindep= 0.00102
davidson 45  74  |r|= 0.515   max|de|= -0.244   lindep= 0.000294
davidson 46  28  |r|= 0.323   max|de|=  0.0482  lindep= 0.156
davidson 47  54  |r|= 0.15    max|de|= -0.0714  lindep= 0.0188
davidson 48  71  |r|= 0.39    max|de|=  0.00182 lindep= 0.00268
davidson 49  28  |r|= 0.398   max|de|=  0.0692  lindep= 0.123
davidson 50  54  |r|= 0.682   max|de|= -0.0383  lindep= 0.00184
davidson 51  66  |r|= 0.535   max|de|= -0.121   lindep= 0.000584
davidson 52  28  |r|= 0.522   max|de|=  0.0788  lindep= 0.217
davidson 53  52  |r|= 0.477   max|de|= -0.0799  lindep= 0.0475
davidson 54  65  |r|= 0.282   max|de|= -0.0426  lindep= 0.00548
davidson 55  75  |r|= 0.313   max|de|= -0.0138  lindep= 0.00125
davidson 56  28  |r|= 0.286   max|de|=  0.078   lindep= 0.183
davidson 57  50  |r|= 0.773   max|de|= -0.0439  lindep= 0.00725
davidson 58  65  |r|= 0.511   max|de|= -0.13    lindep= 0.00639
davidson 59  80  |r|= 0.561   max|de|= -0.0389  lindep= 0.00332
davidson 60  28  |r|= 0.436   max|de|=  0.139   lindep= 0.226
davidson 61  53  |r|=  0.7    max|de|= -0.0786  lindep= 0.295
davidson 62  70  |r|= 0.467   max|de|= -0.112   lindep= 0.0113
davidson 63  28  |r|= 0.411   max|de|=  0.131   lindep= 0.231
davidson 64  53  |r|= 0.593   max|de|= -0.0579  lindep= 0.06
davidson 65  71  |r|= 0.579   max|de|= -0.0811  lindep= 0.0167
davidson 66  28  |r|= 0.41    max|de|=  0.156   lindep= 0.221
davidson 67  56  |r|= 0.561   max|de|= -0.0616  lindep= 0.0926
davidson 68  76  |r|= 0.521   max|de|= -0.0812  lindep= 0.0288

It continued like that until the calculation job timed out after davidson 608:

davidson 601 56  |r|= 0.419   max|de|= -0.0211  lindep= 0.0172
davidson 602 83  |r|= 0.37    max|de|= -0.13    lindep= 0.0116
davidson 603 28  |r|= 0.306   max|de|=  0.0743  lindep= 0.224
davidson 604 56  |r|= 0.402   max|de|= -0.0317  lindep= 0.0255
davidson 605 79  |r|= 0.35    max|de|= -0.0622  lindep= 0.0292
davidson 606 28  |r|= 0.271   max|de|=  0.0528  lindep= 0.222
davidson 607 56  |r|= 0.427   max|de|= -0.0196  lindep= 0.0186
davidson 608 81  |r|= 0.405   max|de|= -0.0856  lindep= 0.0531

It's good to see that the |r| values match:

converged 15 59  |r|= 0.00244 max|de|= -2.53e-06
davidson 0   27  |r|= 0.00244 max|de|=  1.02    lindep= 0.809

However, the max|de| value for the davidson 0 in the "restarted" calculation is closer to what we had at the beginning of the first calculation:

davidson 0  27  |r|= 0.306    max|de|=  1.28      lindep= 0.317

In the "restarted" calculation, the |r| value gets bad at davidson 1 and the max|de| and lindep values go bad very soon after.

Question

Why is the restart not working in the second case, like it did for the first case?

$\endgroup$

1 Answer 1

1
$\begingroup$

To prioritize other people's questions in search results for unanswered questions, I'm taking this out of the unanswered queue.

If have also promised to put a bounty on this question if someone does answer it and warns me in advance.

If you want to answer this question, let me know and I'll remove this Community Wiki answer!

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .