Vxc changes when two component spinors are included
Posted: Sun Oct 12, 2014 3:51 pm
Dear Yambo Developers,
Yambo code is a great resource for someone like me who is interested in excited state properties. I take this opportunity to thank you all for developing such a nice code with great documentation.
From installing (with NetCDF) to running, everything went very smoothly for me ,and I am really impressed by the simplicity of this code which can perform quite complex calculations as GW and BSE. But recently I found something little disturbing about Yambo calculations which involve spin-orbit coupling.
It all started when I tried to calculate GW QP correction for a system with and without SO coupling. My ground state calculations were done using Quantum Espresso 5.0.2, with and without SO using appropriate pseudopotentials (with and without SO). The DFT band structure behaved consistently as expected from previous literature for this system. When I tried Yambo QP correction I found unsettling results comparing spin-oribt coupled with non spin-orbit coupled calculations. Naturally my initial though was it was a convergence problem, and I tried various parameter to converge my results. The Ground state energy (E_o), non local exchange and dynamical correlation (S_c) was consistent but I found the major deviation coming from local exchange (<n|DFT|n>).
To further test this, I started my calculation from scratch. I took a non relativistic pseudopotential (PP) and calculated SO vs non-SO calculation on quantum espresso just by turning “lspinorbit” and “lnoncollinear” ‘true’ and ‘false’. Since the PP is non relativistic, I essentially only generated a doubly degenerate space without any spin-obit splitting as expected. I checked the energy levels on quantum espresso side and they seem to be exactly same between SO and non-SO case except for each energy level which now has two states in SO case. I then ran Yambo for both cases and found that Yambo identifies the ground state energy level exactly as in Quantum espresso with a shift of Fermi energy for both (SO and non-SO) cases. As a quick test, I first tried xxvxc run level by ‘yambo –x’ ,and right away I found the difference. Again Yambo gives E_o, non local exchange (<n|HF|n>) and local exchange (<n|DFT|n>), and generates ndb.HF_locEX file. Everythng is same but the deviation in <n|DFT|n> is large. If I run g0w0 with plasmon pole, I found Sc is also same for two cases.
Since both ground state calculations should be exactly same (although I turned on SO coupling) under the same non-relativistic pseudo-potentials in quantum espresso, I found the deviation in Yambo is coming mainly from the local exchange matrix elements just because I doubled the wave-function space.
When I created the data-base “p2y –S –N”, it successfully recognized one case to be ‘spin-orbit =.true’ and listed all the doubly degenerate eigenvalues. So I think the data-base was created OK. Since on quantum espresso side, the energy levels are exactly same (although one case doubly degenerate), I am expecting the Vxc are also same for the two cases. But on Yambo side, I am not sure why matrix elements of Vxc coming out differently for the two cases when ground state calculations are done under exactly the same condition. Could it be a problem with segmentation level while creating the data base? Or I might still be doing something wrong? I tested both serial vs parallel but it doesn’t seem to be the source of the problem. My next step was to look inside the Yambo routine where the Vxc are calculated for SO vs nonSO cases, but I thought first I should let you know. Being experts you might be able to instantly see the problem or suggest how to proceed or may even fix it if there is one. I eagerly look forward to hear from you.
Thanks a lot.
Yambo code is a great resource for someone like me who is interested in excited state properties. I take this opportunity to thank you all for developing such a nice code with great documentation.
From installing (with NetCDF) to running, everything went very smoothly for me ,and I am really impressed by the simplicity of this code which can perform quite complex calculations as GW and BSE. But recently I found something little disturbing about Yambo calculations which involve spin-orbit coupling.
It all started when I tried to calculate GW QP correction for a system with and without SO coupling. My ground state calculations were done using Quantum Espresso 5.0.2, with and without SO using appropriate pseudopotentials (with and without SO). The DFT band structure behaved consistently as expected from previous literature for this system. When I tried Yambo QP correction I found unsettling results comparing spin-oribt coupled with non spin-orbit coupled calculations. Naturally my initial though was it was a convergence problem, and I tried various parameter to converge my results. The Ground state energy (E_o), non local exchange and dynamical correlation (S_c) was consistent but I found the major deviation coming from local exchange (<n|DFT|n>).
To further test this, I started my calculation from scratch. I took a non relativistic pseudopotential (PP) and calculated SO vs non-SO calculation on quantum espresso just by turning “lspinorbit” and “lnoncollinear” ‘true’ and ‘false’. Since the PP is non relativistic, I essentially only generated a doubly degenerate space without any spin-obit splitting as expected. I checked the energy levels on quantum espresso side and they seem to be exactly same between SO and non-SO case except for each energy level which now has two states in SO case. I then ran Yambo for both cases and found that Yambo identifies the ground state energy level exactly as in Quantum espresso with a shift of Fermi energy for both (SO and non-SO) cases. As a quick test, I first tried xxvxc run level by ‘yambo –x’ ,and right away I found the difference. Again Yambo gives E_o, non local exchange (<n|HF|n>) and local exchange (<n|DFT|n>), and generates ndb.HF_locEX file. Everythng is same but the deviation in <n|DFT|n> is large. If I run g0w0 with plasmon pole, I found Sc is also same for two cases.
Since both ground state calculations should be exactly same (although I turned on SO coupling) under the same non-relativistic pseudo-potentials in quantum espresso, I found the deviation in Yambo is coming mainly from the local exchange matrix elements just because I doubled the wave-function space.
When I created the data-base “p2y –S –N”, it successfully recognized one case to be ‘spin-orbit =.true’ and listed all the doubly degenerate eigenvalues. So I think the data-base was created OK. Since on quantum espresso side, the energy levels are exactly same (although one case doubly degenerate), I am expecting the Vxc are also same for the two cases. But on Yambo side, I am not sure why matrix elements of Vxc coming out differently for the two cases when ground state calculations are done under exactly the same condition. Could it be a problem with segmentation level while creating the data base? Or I might still be doing something wrong? I tested both serial vs parallel but it doesn’t seem to be the source of the problem. My next step was to look inside the Yambo routine where the Vxc are calculated for SO vs nonSO cases, but I thought first I should let you know. Being experts you might be able to instantly see the problem or suggest how to proceed or may even fix it if there is one. I eagerly look forward to hear from you.
Thanks a lot.