qcscine / qcmaquis

Release-only repository for SCINE QCMaquis, the DMRG software from the Reiher group.
BSD 3-Clause "New" or "Revised" License
32 stars 15 forks source link

Explanation of different sweep types? #3

Closed ErnDLar closed 3 years ago

ErnDLar commented 3 years ago

Hi,

Maybe this is the wrong forum for this type of question, but here it goes:

My understanding of how many sweeps QCMaquis does per orbital rotation step is not clear. I get that if I set nsweeps = 4, I should expect 4 "forward" and 4 "backwards" sweeps, i.e., 8 total sweeps. But I am uncertain on how to interpret nmainsweeps and ngrowsweeps and factor those in. If I have nmainsweeps = 2 and ngrowsweeps = 3... does that mean that per orbital rotation step, I get 8x2x3 = 48 total sweeps? (Also: what are the default values? As far as I can tell the manual does not specify this) Or how do I know how many total sweeps to expect per orbital rotation? (Assuming that the sweeps are fixed per orbital rotation, I suppose that these may be reduced if some convergence is achieved before hitting the max)

Thanks!

kommerck commented 3 years ago

If you do not use the noise/perturbative correction for the convergence acceleration, these parameters are irrelevant. In any case, the parameter nsweeps specifies the total number of sweeps per iteration.

A quick explanation for ngrowsweeps and nmainsweeps: If you use the noise/perturbative correction (you must specify twosite_truncation=heev), the correction scaled by a factor alpha is added to the MPS in due course of the sweep. One may specify three different alpha values: alpha_initial for the beginning, alpha_main for the later sweeps and alpha_final for the final sweeps. If you specify all of these parameters, the value of alpha_initial will be used for ngrowsweeps first sweeps, then alpha_main for nmainsweeps sweeps and finally, alpha_final for the remainder of the sweeps (up to the nsweeps total number, or less if convergence is achieved earlier).

ErnDLar commented 3 years ago

Aha okay.

Thank you!

So just to summarize for myself: If I use noise correction (which is to accelerate convergence?) and have nsweeps = 8, nmainsweeps = 2 and ngrowsweeps = 3 then the first two sweeps use alpha_initial, the next three use alpha_main and the final three use alpha_final (assuming no earlier convergence).

Since I'm already posting here: If I converge a DMRGSCF wave function with a small max_bond_dimension, can I use that as a starting point for a calculation with a larger value by copying the checkpoint-folder into WorkDir and specifying donotdelete = 1 using the OpenMolcas interface? Something like starting with max_bond_dimension = 300 before ending with max_bond_dimension = 1000.

kommerck commented 3 years ago

If I use noise correction (which is to accelerate convergence?) and have nsweeps = 8, nmainsweeps = 2 and ngrowsweeps = 3 then the first two sweeps use alpha_initial, the next three use alpha_main and the final three use alpha_final (assuming no earlier convergence).

Yes, that's correct.

Since I'm already posting here: If I converge a DMRGSCF wave function with a small max_bond_dimension, can I use that as a starting point for a calculation with a larger value by copying the checkpoint-folder into WorkDir and specifying donotdelete = 1 using the OpenMolcas interface? Something like starting with max_bond_dimension = 300 before ending with max_bond_dimension = 1000.

It would work, but there is a caveat: the number of sweeps is accumulated in the checkpoint, so you have to add the total previous number of sweeps to your intended number of sweeps The total previous number of sweeps can be extracted from $Project.QCMaquis.log file from the OpenMolcas scratch directory (beware that sweeps are counted starting from 0). Example: if you want to run 5 sweeps per DMRGSCF iteration, and previously you have had 4 DMRGSCF iterations with 5 sweeps each, i.e. 20 sweeps, you should specify 25 sweeps.

kommerck commented 3 years ago

Ah no, my bad, the additional sweep specification was there in the past but might not be needed anymore.

Btw, my personal experience shows that a checkpoint from a DMRG calculation (a single DMRG-SCF iteration) with smaller m is not necessarily the best guess for a calculation with larger m. I saw several cases where the larger m got stuck in a local minimum, whereas a calculation starting from a random guess converged faster.

This is not valid for different DMRG-SCF -- a smaller-m DMRG-SCF calculation is an excellent way to speed up early orbital optimisation iterations.

ErnDLar commented 3 years ago

Thank you very much for your answers @kommerck!

I'll close this now since I've received all the answers I need to get started.

Cheers!