Closed ErnDLar closed 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).
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
.
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.
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.
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!
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!