[QE-developers] Phase of wave-function

Lorenzo Paulatto paulatz at gmail.com
Wed Apr 8 22:20:39 CEST 2020


I'll add something on Stefano answer that I find useful when working on 
this kind of problems: an observable quantity cannot depend on the 
random phase. If you want to compute and expression that depends on the 
phase it means that 1) it is not an observable 2) you did a mistake 3) both.

If you fall in (1) it could be that when you sum over all k-points ad/or 
occupied bands the phases cancel out. This is annoying, but inevitable. 
And it actually allows you to check that your calculations are correct.

This also mean that you cannot combine wavefunctions-relate quantities 
at the same k-point/bands that come from different pw calculations, as 
the phases may not cancel out any more (typically a problem when trying 
to implement a restart without wavefunctions). I.e. if you want to 
compute <psi| (O|psi>) you have to be sure that O|psi> has been computed 
with the same |psi> as <psi| or you'll have troubles.

good work



On 4/8/20 10:06 PM, Stefano de Gironcoli wrote:
> 
> On 08/04/20 21:38, Duy Le wrote:
>> Dear developers,
>>
>> After reading many threads about the subject, and lot of testing, I 
>> still not very confident in handling the phases of wave functions. I 
>> would appreciate if you could help me with the following:
>>
>> 1. Do all wave-functions (of all bands) of a given k-point have the 
>> same phase? In other words, is psi(k, ib1) psi(k, ib2)* gauge invariant?
> 
> no. the phase of an eigenvector is determined by the diagonalization 
> routine. The safe assumption is that it's basically random, and for 
> degenerate eigenvalues you can assume a random (unitary) rotation inside 
> the degenerate manifold.  this is why in molecular dynamics simulations 
> when you want to extrapolate the starting wavfunctions of a given time 
> step from previous ones, before performing the extrapolation, you need 
> to align the two (or more) wfc subspaces.
> 
> basically you compute W=<psi(t')|psi(t)> and built the unitary rotation 
> that best align the two wfc sets from SVD of W ->  U  then build  
> |psi'(t')> = |psi(t')> U as the set at t' best aligned to the wfc at t.
> 
> check routine   extrapolate_wfcs   in file update_pot.f90 in PW/src
> 
>> 2. I want also to calculate psi(k, ib1) psi(k2, ib2)*. How should it 
>> be done so the random phases of wfc do not affect the result?
> 
> similarly random phases should be assumed ( in addition to the exp(+ikr) 
> phase from the Bloch vector) so you better work with the periodic part 
> of the wavefuncitons u(k)
> 
> you can compute  the matrix of the overlap of the periodic part of the 
> wfcs at the two kpoints  W = < psi(k1)| 
> exp(i(k1-k2)r)|psi(k2)>=<u(k1)|u(k2)>,  extract the best unitary 
> transformation from that and play with it in order to align wfcs at 
> different k's. this is one of the basic operation that Wannier 90 code 
> peforms.
> 
>> 3. Could you please tell me if there is any part of the PWSCF code 
>> that deals with phase of wave function so I can learn how it is done?
> 
> see above
> 
> best
> 
> stefano
> 
>>
>> Thank you very much. Be safe!
>>
>> Duy Le
>> University of Central Florida
>>
>> _______________________________________________
>> developers mailing list
>> developers at lists.quantum-espresso.org
>> https://lists.quantum-espresso.org/mailman/listinfo/developers
> 
> _______________________________________________
> developers mailing list
> developers at lists.quantum-espresso.org
> https://lists.quantum-espresso.org/mailman/listinfo/developers
> 

-- 
Lorenzo Paulatto - Paris


More information about the developers mailing list