SCF do not converge with SCF.RhoG.DIIS.UseSVD==true
Summary:
The single point calculation with charge Kerker mixing do not converge unless SCF.RhoG.DIIS.UseSVD False
line is added.
Code version: 4.1.5
Siesta Version : 4.1.5
Architecture : unknown
Compiler version: GNU Fortran (Debian 10.2.1-6) 10.2.1 20210110
Compiler flags : mpifort.openmpi -O2 -fPIC -ftree-vectorize -fallow-argument-mismatch -fopenmp
PP flags : -DFC_HAVE_ABORT -DMPI -DSIESTA__ELPA -I/usr/include/elpa/modules -DSIESTA__DIIAG_2STAGE
Libraries : libsiestaLAPACK.a libsiestaBLAS.a -fopenmp -L/usr/lib/x86_64-linux-gnu/openbllas-pthread -lopenblas -lscalapack-openmpi -lelpa
PARALLEL version
* Running in serial mode with MPI
* Running 8 OpenMP threads.
* Running 8 processes.
* OpenMP version 201511
* OpenMP NOT bound (please bind threads!)
* OpenMP runtime schedule DYNAMIC, chunks 1
** OpenMP runtime schedule DYNAMIC, chunks 32
arch.make
is attached. arch.make
System information:
Linux xxx 5.10.0-1-amd64 #1 SMP Debian 5.10.4-1 (2020-12-31) x86_64 GNU/Linux
Package: libopenblas-dev
Version: 0.3.13+ds-2
Package: gfortran
Version: 4:10.2.1-1
Package: libelpa-dev
Version: 2019.11.001-4
Package: libopenmpi-dev
Version: 4.1.0-7
Steps to reproduce:
Run the attached fdf file: Cu.svd.fdf (sorry for the large test) On the third SCF iteration you will see that all DIIS coefficients are zero. After that, SCF cycle runs amok.
Add the following line to the fdf:
SCF.RhoG.DIIS.UseSVD False
Run the corrected fdf. Everything runs well.
Expected behavior
Relevant logs and/or screenshots
iscf Eharris(eV) E_KS(eV) FreeEng(eV) dDmax Ef(eV) dHmax(eV)
scf: 1 0.000000 -107376.077236 -107376.752318 1.996041 -5.291221 28.782258
timer: Routine,Calls,Time,% = IterSCF 1 40.196 19.95
Max |\Delta rho(G)|: 63.743925
G2 rho_in(G) (R, C) Diff_rho(G) (R, C) damping
0.0000 2205.00019 0.00000 0.00006 0.00000 0.0000
0.0123 744.515471818.58844 1.34302 -0.96614 0.0393
0.0200 52.46958 -84.64123 0.24267 -0.86011 0.0626
0.0323 -101.73287 4.98051 -1.80079 -0.66095 0.0973
0.0491 -922.79493 992.96918 4.96770 1.93021 0.1407
0.0601 36.20918 -44.64071 -3.60893 2.54572 0.1669
0.0692 38.35293 -94.93998 1.53716 -2.52157 0.1874
0.0724 24.53589 52.70741 -0.95046 -4.85697 0.1944
0.0802 15.92814 55.12968 2.16485 9.05076 0.2108
0.0924 -55.36472 -10.35721 -9.74159 -3.25681 0.2355
scf: 2 0.000000 -110924.207650 -110924.368718 1.543125 -6.658065 33.015041
Max |\Delta rho(G)|: 16.278060
G2 rho_in(G) (R, C) Diff_rho(G) (R, C) damping
0.0000 2205.00020 0.00000 0.00002 0.00000 0.0000
0.0123 744.528681818.57894 2.03898 1.85433 0.0393
0.0200 52.47338 -84.65470 0.68254 0.08893 0.0626
0.0323 -101.77665 4.96444 0.03085 0.84342 0.0973
0.0491 -922.62015 993.03709 -4.29149 5.62229 0.1407
0.0601 36.05857 -44.53447 -0.69298 0.57142 0.1669
0.0692 38.42493 -95.05809 -0.78150 -0.39918 0.1874
0.0724 24.48970 52.47134 -0.00858 -1.12515 0.1944
0.0802 16.04225 55.60676 1.05937 3.70268 0.2108
0.0924 -55.93837 -10.54899 -3.73256 -0.02428 0.2355
scf: 3 0.000000 -111168.782368 -111168.971419 1.321346 -5.866247 11.234695
mat:
680333.7 312352.5 1.000000
312352.5 209003.9 1.000000
1.000000 1.000000 0.000000
------
SVD rank, s(i): 2 0.83595E+06 53386. 0.59297E-05
DIIS coeff - 1 -0.00000
DIIS coeff - 2 0.00000
Max |\Delta rho(G)|: 2137.989138
G2 rho_in(G) (R, C) Diff_rho(G) (R, C) damping
0.0000 2205.00021 0.00000 -0.00711 0.00000 0.0000
0.0123 0.00000 0.00000 644.420362038.55830 0.0393
0.0200 0.00000 -0.00000 267.09416-422.01412 0.0626
0.0323 -0.00000 0.00000 -328.89604 353.98474 0.0973
0.0491 -0.00000 0.00000 **********1107.50288 0.1407
0.0601 0.00000 -0.00000 72.76366-116.53762 0.1669
0.0692 0.00000 -0.00000 -379.87873-211.24322 0.1874
0.0724 0.00000 0.00000 119.03269 31.48683 0.1944
0.0802 0.00000 0.00000 8.44212 71.12442 0.2108
0.0924 -0.00000 -0.00000 -75.08934 15.13892 0.2355
scf: 4 0.000000 304871.235116 304871.155672 52.516036********************
Possible fixes
Apparently something goes wrong in solve_with_svd
.
At least the option SCF.RhoG.DIIS.UseSVD
should be documented.