Dear elk users and developers,
I can not converge my calculation when spin orbit coupling is
included. Can anyone help me have a look what should I do, what
parameters should change.
I have been playing around with mixtype, broydpm, beta0, betamax, gmaxvr, highq, but never converged my calculation.
Following is my input file:
epsengy
0.0001
tasks
1
10
110
115
xctype
3
mixtype
3
! DFT+U block
dft+u
1 4 : dftu, inpdftu
1 2 3.0 : is, l, lambda
spinpol
.true.
! external field for breaking spin symmetry
bfieldc
0.0 0.0 0.0
reducebf
0.90
! enable calculation of the dipole magnetic field
tbdip
.true.
! enable calculation of the current density (i.e. orbital) contribution to the
! dipole field
tjr
.true.
! enable spin-orbit coupling
spinorb
.true.
! switch on core polarisation for hyperfine field
spincore
.true.
! conduction local-orbitals required
lorbcnd
.true.
ngridk
4 4 4
nempty
4
msmooth
2
lmaxi
2
maxscl
500
sppath
'./'
avec
4.942408600 8.560502807 0.000000000
9.884817200 0.000000000 0.000000000
0.000000000 0.000000000 26.89524360
atoms
3 : nspecies
'Fe.in' : spfname
8 : natoms; atposl, bfcmt below
0.66666667 0.66666666 0.51597000 0.010000000 0.00000000 0.00000000
0.33333333 0.33333334 0.48403000 -0.010000000 0.00000000 0.00000000
0.33333333 0.33333334 0.98403000 -0.010000000 0.00000000 0.00000000
0.66666667 0.66666666 0.01597000 0.010000000 0.00000000 0.00000000
0.66666667 0.66666666 0.30787000 0.010000000 0.00000000 0.00000000
0.33333333 0.33333334 0.69213000 -0.010000000 0.00000000 0.00000000
0.33333333 0.33333334 0.19213000 -0.010000000 0.00000000 0.00000000
0.66666667 0.66666666 0.80787000 0.010000000 0.00000000 0.00000000
'Ta.in' : spfname
4 : natoms; atposl, bfcmt below
0.00000000 0.00000000 0.85690000 0.00000000 0.00000000 0.00000000
0.00000000 0.00000000 0.14310000 0.00000000 0.00000000 0.00000000
0.00000000 0.00000000 0.64310000 0.00000000 0.00000000 0.00000000
0.00000000 0.00000000 0.35690000 0.00000000 0.00000000 0.00000000
'O.in' : spfname
18 : natoms; atposl, bfcmt below
0.32345000 0.02761000 0.08456000 0.00000000 0.00000000 0.00000000
0.67655000 0.97239000 0.91544000 0.00000000 0.00000000 0.00000000
0.02761000 0.64894000 0.08456000 0.00000000 0.00000000 0.00000000
0.97239000 0.35106000 0.91544000 0.00000000 0.00000000 0.00000000
0.64894000 0.32345000 0.08456000 0.00000000 0.00000000 0.00000000
0.35106000 0.67655000 0.91544000 0.00000000 0.00000000 0.00000000
0.35106000 0.97239000 0.41544000 0.00000000 0.00000000 0.00000000
0.64894000 0.02761000 0.58456000 0.00000000 0.00000000 0.00000000
0.67655000 0.35106000 0.41544000 0.00000000 0.00000000 0.00000000
0.32345000 0.64894000 0.58456000 0.00000000 0.00000000 0.00000000
0.97239000 0.67655000 0.41544000 0.00000000 0.00000000 0.00000000
0.02761000 0.32345000 0.58456000 0.00000000 0.00000000 0.00000000
0.00000000 0.29602000 0.25000000 0.00000000 0.00000000 0.00000000
0.00000000 0.70398000 0.75000000 0.00000000 0.00000000 0.00000000
0.29602000 0.70398000 0.25000000 0.00000000 0.00000000 0.00000000
0.70398000 0.29602000 0.75000000 0.00000000 0.00000000 0.00000000
0.70398000 0.00000000 0.25000000 0.00000000 0.00000000 0.00000000
0.29602000 0.00000000 0.75000000 0.00000000 0.00000000 0.00000000
-
Dear Zhiwei,
It can be tricky, especially with DFT+U.
You do not need bfieldc. To break the symmetry the atomic fields are enough and can be even smaller. You can also try fsmtype for a desired atomic magnetizations. However, note that the target magnetization values apply to muffin-tin part only, which are smaller than the total magnetization related to a given atom.
Reducebf 0.9 seems too high, the field gets down too fast. It'd go with atomic fields of 0.0001, no reducebf, and then a restart without the small fields.
Other than that, I'd go like the following.
1. Converge it without DFT+U and spinorb, see if it works. Save that STATE.OUT.
2. Try with DFT+U, without spinorb, both from scratch and from step 1.
3. In a meantime, try it with spinorb, without DFT+U.
4. Try meta-GGA. it can be pain due to memory requirements, but if it works - it's likely that you don't need +U at all.Good luck.
Andrew
-
Dear Andrew,
Thank you for the advice. I will try more things that you suggest and see where I can reach.
Actually, this system can converge without any problem without SOC.
I have tried DFT+U with FLL or FLL+AMF, they both converge very fast, ~ 30 loops for the FLL case. For the FLL+AMF case it is slower for elk version 7.0.12 but also very fast for earlier versions. Without DFT+U, it is also very easy with the default parameters for NM, PM, AFM state.
Once I turn on SOC starting from the above converged results, I always get stuck around 10^-4 ~ 10^-5 for the potential and 10^-3 ~ 10^-4 for the total energy difference.
And the calculated results, for example the magnetic moments, become unstable.Best,
Zhiwei
-
Dear Zhiwei,
did you try to change mixing to mixtype 1 ? Although, definitely slower this may at least give convergence.
best
Michael
-
Dear Michael,
Yes, I have tried that way.. and it did not work, in the end the energy and potential difference became fluctuating around the level of 10^-3 and 10^-4best,
Zhiwei
-
Dear Zhiwei,
as everything is stable in absence of SOC I wonder if it is not so that you have encountered a case where the collinear anti-ferromagnetic order is unstable, due to Dzyaloshinskii-Moriya like interactions which vaish in absence of SOC. At least that is my experience.
Then the local moments will rotate away from their initial direction. That is, they acquire components along y and/or z too. This process can be slow and you should be patient or you could do an "intelligent" guess and constrain moments in certain direction and let free again to see if you are closer to a stable solution ...
You can study whether you have local rotations in your calculations by plotting how e.g. the y-component of a local moment behaves with iterations (I use awk on INFO.OUT to do that as in script below).
Notice, if it stay within an AF order the total moment in MOMENTM.OUT stays zero, but dependending on symmetry you can also get a weak ferromagnetic total moment and you can study its evolution with iterations too.
Good luck,
Lars---- # $1 is the number of lines to be skipped after line with "Moments :"
awk -v C=$1 '/Moments :/ {i += 1; for (j = 0; j < C; j++) getline; print i, $4, $5, $6}' INFO.OUT
-
Dear Lars,
Thanks for this information. This is actually what I expected to see.
However, I am very new to DFT calculations, in fact elk is the first code that I used.
I want to relax the spins and to see the final directions after the DM interaction that is included in SOC.
But, I am not sure exactly what to do, and I am still learning how to do that.
Do you have any suggestions of a general way to do that or any refs that I can read? That would be very helpful!Currently, I am trying to play with parameter tempk with bigger values than default. It still need more time, just run the calculation for one day now. But, it looks converge faster that before. I am still waiting for more time.
However, I do not know very much what this means? what should I be aware of to play with this parameter?by the way, here is a recent run of your awk script:
I think it is not very stable to reach the final point.
awk -v C=4 '/Moments :/ {i += 1; for (j = 0; j < C; j++) getline; print i, $4, $5, $6}' INFO.OUT
1 -3.633121642 -0.3392386580E-03 0.7390734934E-05
2 -3.398960501 -0.3787232669E-03 -0.1201042979E-05
3 -3.872127142 -0.2455963388E-03 0.9180283851E-05
4 -3.570338362 -0.3751279395E-03 0.4035940892E-06
5 -3.676390354 -0.3799435953E-03 -0.4194559008E-05
6 -3.357192081 -0.4425310786E-03 -0.1719614817E-03
7 -3.826564761 -0.2002793628E-02 0.2221713130E-03
8 -4.200331984 -0.1839894215E-02 0.1725773596E-02
9 -3.560119258 0.1209407231E-03 -0.6071516333E-02
10 -4.019687505 -0.1617932389E-02 0.5521494292E-03
11 -3.812877580 -0.8424052499E-03 -0.2514479358E-02
12 -2.395671756 -0.1282324429E-02 -0.5617447049E-03
13 -3.451452440 -0.1644234071E-04 -0.9355971827E-02
14 -3.437867920 0.1466134397E-03 -0.1024910523E-01
15 -3.435133242 0.2137996241E-03 -0.1061021531E-01
16 -3.434574514 0.2631612159E-03 -0.1072816114E-01
17 -3.426513543 0.6745997357E-03 -0.1189460239E-01
18 -3.425750283 0.6255786155E-03 -0.1188842462E-01
19 -3.421623869 0.8249264622E-03 -0.1248351457E-01
20 -3.421572493 0.8894361368E-03 -0.1271496142E-01
21 -3.420740378 0.1017032806E-02 -0.1315110066E-01
22 -3.418713772 0.1307618974E-02 -0.1411923894E-01
23 -3.417499788 0.1518241179E-02 -0.1482044574E-01
24 -3.415778757 0.1876155471E-02 -0.1601207134E-01
25 -3.415794894 0.1929807543E-02 -0.1619060667E-01
26 -3.414264306 0.2347987511E-02 -0.1756164223E-01
27 -3.414839952 0.2269643429E-02 -0.1729308613E-01
28 -3.413599900 0.2692326081E-02 -0.1864280264E-01
29 -3.413373436 0.2884157237E-02 -0.1921998690E-01
30 -3.413117922 0.3040835228E-02 -0.1966855605E-01
31 -3.412377590 0.3478768455E-02 -0.2088463632E-01
32 -3.411991780 0.3878817282E-02 -0.2178286284E-01
awk -v C=8 '/Moments :/ {i += 1; for (j = 0; j < C; j++) getline; print i, $4, $5, $6}' INFO.OUT
1 -3.103779488 -0.6105245191E-02 -0.2163644316E-04
2 -3.324765305 -0.4013075226E-02 -0.5147729430E-04
3 -2.871276170 -0.7369121830E-02 0.1692342251E-04
4 -3.175435866 -0.5068230733E-02 -0.4560080781E-04
5 -3.081994217 -0.5483545052E-02 -0.5092989721E-04
6 -3.209608454 -0.3137949084E-02 -0.3112949284E-03
7 -4.097707234 0.6313057769E-02 -0.1878241279E-02
8 -3.324348249 0.6674690750E-02 -0.1085976901E-02
9 -3.526370439 0.1002500625E-01 -0.2314459517E-02
10 -2.782539022 0.5498079484E-02 0.4834953046E-02
11 -3.439679869 0.9405106178E-02 -0.1275937216E-02
12 -3.677313445 0.1223468828E-01 -0.1813781247E-02
13 -3.447928094 0.9622313324E-02 -0.1256819988E-02
14 -3.454584644 0.9710621031E-02 -0.1355681507E-02
15 -3.452779590 0.9669076353E-02 -0.1456492658E-02
16 -3.455459504 0.9679278315E-02 -0.1463162631E-02
17 -3.451277262 0.9608386623E-02 -0.1714451010E-02
18 -3.455118517 0.9651343601E-02 -0.1693307567E-02
19 -3.457042232 0.9660597658E-02 -0.1755389410E-02
20 -3.456433622 0.9664798130E-02 -0.1761027977E-02
21 -3.456895216 0.9680174962E-02 -0.1764851320E-02
22 -3.457141988 0.9709670977E-02 -0.1762546524E-02
23 -3.457306042 0.9734141684E-02 -0.1738839032E-02
24 -3.457385575 0.9776145198E-02 -0.1673373937E-02
25 -3.457314746 0.9782593519E-02 -0.1653430771E-02
26 -3.457210077 0.9827365837E-02 -0.1551047352E-02
27 -3.457268498 0.9818025950E-02 -0.1563857581E-02
28 -3.457041167 0.9855893051E-02 -0.1452072228E-02
29 -3.456978861 0.9866932691E-02 -0.1396709729E-02
30 -3.456906634 0.9872337294E-02 -0.1358464769E-02
31 -3.456776628 0.9880303576E-02 -0.1256986077E-02
32 -3.456757461 0.9857231261E-02 -0.1198750140E-02another calculation
awk -v C=4 '/Moments :/ {i += 1; for (j = 0; j < C; j++) getline; print i, $4, $5, $6}' INFO.OUT
1 -3.502537030 -0.2489424571E-03 0.3759924878E-05
2 -3.438028664 -0.2695727014E-03 0.3435924496E-05
3 -3.742064368 -0.2195206610E-03 0.7172634840E-05
4 -3.420226641 -0.3916479727E-03 0.1075290287E-04
5 -3.591787712 -0.5041377317E-03 0.4797026185E-04
6 -3.510991641 -0.8131246584E-03 0.2745327950E-03
7 -3.424149529 -0.2596940610E-02 0.2202010976E-02
8 -3.458999011 -0.2791251130E-02 0.2324055455E-02
9 -3.467384642 -0.2790611299E-02 0.2630258734E-02
10 -3.470969984 -0.2705838350E-02 0.2786767959E-02
11 -3.474514643 -0.2568882837E-02 0.3020526184E-02
12 -3.480462297 -0.2201247864E-02 0.3564027060E-02
13 -3.479730038 -0.2208725664E-02 0.3516945145E-02
14 -3.480331490 -0.2094281646E-02 0.3618442764E-02
15 -3.480919690 -0.1999436307E-02 0.3699030684E-02
16 -3.481992502 -0.1757391972E-02 0.3880566147E-02
17 -3.482290351 -0.1581539656E-02 0.3978329698E-02
18 -3.482405498 -0.1336466236E-02 0.4084711399E-02
19 -3.482430370 -0.1012015819E-02 0.4199087973E-02
20 -3.481992401 -0.4197963698E-03 0.4334056319E-02
21 -3.481697664 -0.1857262951E-03 0.4342346635E-02
22 -3.481569609 0.4921746468E-04 0.4361951350E-02
23 -3.481283899 0.3271966119E-03 0.4380990589E-02
24 -3.480582559 0.1231836202E-02 0.4452205195E-02
25 -3.479357546 0.2796285426E-02 0.4611883707E-02
26 -3.478403934 0.4049124977E-02 0.4804319986E-02
27 -3.478606283 0.4224727974E-02 0.4980395588E-02
awk -v C=8 '/Moments :/ {i += 1; for (j = 0; j < C; j++) getline; print i, $4, $5, $6}' INFO.OUT
1 -3.180941459 -0.2391043224E-02 -0.1331777794E-04
2 -3.242978956 -0.2201172335E-02 -0.1574765244E-04
3 -2.951080986 -0.3139458807E-02 -0.8457558628E-05
4 -3.293445716 -0.2326060521E-02 -0.3137718892E-04
5 -3.144914833 -0.3174949613E-02 -0.6903570192E-04
6 -3.259966198 -0.3844680117E-02 -0.4308160929E-03
7 -3.356272897 -0.8467888037E-02 -0.6035184171E-02
8 -3.441791199 -0.9405534674E-02 -0.7355188554E-02
9 -3.457342647 -0.9806520992E-02 -0.7826645222E-02
10 -3.457527684 -0.9842898846E-02 -0.7939165347E-02
11 -3.459426371 -0.9932466273E-02 -0.8052304848E-02
12 -3.464258021 -0.1024295585E-01 -0.8065674374E-02
13 -3.462902464 -0.1024052573E-01 -0.8017520577E-02
14 -3.462816728 -0.1034236013E-01 -0.7909781473E-02
15 -3.462799217 -0.1042892963E-01 -0.7812220691E-02
16 -3.462765973 -0.1064822549E-01 -0.7532650059E-02
17 -3.462782592 -0.1080706780E-01 -0.7292255375E-02
18 -3.462764409 -0.1102560971E-01 -0.6935955492E-02
19 -3.462747520 -0.1131233037E-01 -0.6454549256E-02
20 -3.462666981 -0.1182412633E-01 -0.5566277168E-02
21 -3.462637688 -0.1201483482E-01 -0.5227097035E-02
22 -3.462593075 -0.1220201015E-01 -0.4916097461E-02
23 -3.462554414 -0.1242441940E-01 -0.4546835492E-02
24 -3.462370356 -0.1313036231E-01 -0.3458680996E-02
25 -3.461946077 -0.1433595187E-01 -0.1811565087E-02
26 -3.461534203 -0.1529190195E-01 -0.7070587956E-03
27 -3.461564781 -0.1541106995E-01 -0.7161268584E-03Best,
Zhiwei
-
Dear Zhiwei,
yes the reason for slow convergence is definitely moment rotations. As you can see by plotting the different y and z components you are not close to convergence.
So either be patient, as the torques build up the speed of rotation will increase and you will reach convergence sooner or later ...
Or, from the plots you extrapolate to a probable solution. Set up a calculation where the different site moments are constrained, either in direction and value or only in direction, see elk.pdf for details and there are maybe examples too. Iterate some with the constrain active, then switch them off again and see where the rotations go now ... If still too far away, start over with new extrapolation ...
Good luck!
Best regards,
Lars
Dear Lars,
Thanks for your help. I understand why this system converges too slow now.
The new calculation with tempk=1000 converges faster at first and
eventually can not go down anymore as before, waiting for the spins to
rotate to the final direction.
Maybe the high system temperature helps at first, and now we have to wait the system to be converged.
Any idea what can I do to speed this process?
best,
Zhiwei
https://sourceforge.net/p/elk/discussion/897820/thread/2663dcb235/
0 Comments