Page 1 of 1

Wave function phases

Posted: Wed Jul 05, 2023 3:45 pm
by Franz Fischer
Dear developers,

I have a question concerning the wave function phases.
In

Code: Select all

src/wf_and_fft/WF_apply_symm.F
line 84-88, it seems like you are unfolding the wavefunctions from the IBZ by applying a spin-symmetry operation and rotating the G-basis. Is this correct?

In

Code: Select all

"src/bse/K_WF_phases.F"
line 106-109 it seems that if S1^(-1) * S2 is a symmetry that is NOT a symmetry in the star of k you compute the phase by a dot product of two wavefunctions. Can you elaborate on this?
Why is the phase equal to 1 if S1^(-1) * S2 is a symmetry that is not a symmetry in the star of k.

Furthermore there is an if-statement, namely:

Code: Select all

if (.not.PAR_IND_WF_linear%element_2D(i_b,i_k)) cycle
could you explain what this means?

Thanks in advance.

Best,
Franz

Re: Wave function phases

Posted: Mon Jul 10, 2023 8:29 am
by Davide Sangalli
Dear Franz,
In "src/wf_and_fft/WF_apply_symm.F", line 84-88, it seems like you are unfolding the wavefunctions from the IBZ by applying a spin-symmetry operation and rotating the G-basis. Is this correct?
Correct
In "src/bse/K_WF_phases.F", line 106-109 it seems that if S1^(-1) * S2 is a symmetry that is NOT a symmetry in the star of k you compute the phase by a dot product of two wavefunctions. Can you elaborate on this?
Why is the phase equal to 1 if S1^(-1) * S2 is a symmetry that is not a symmetry in the star of k.
It is a check
In general the phase can be different from 1 since S1^(-1) * S2 is not a symmetry in the star of k.
In such case the code cannot use the symmetry rotated matrix element, but it will explicitly recompute the matrix elements.
However, if the phase is equal to 1, then the code can (and will) use the symmetry rotated matrix element to save some computational time.
Furthermore there is an if-statement, namely:
"if (.not.PAR_IND_WF_linear%element_2D(i_b,i_k)) cycle"
could you explain what this means?
This is just for parallelizaton.
When running in parallel, i_b and i_k are distributed over the MPI tasks.
Only the task to which such specific i_b and i_k are assigned will have PAR_IND_WF_linear%element_2D(i_b,i_k)=.true.

Best,
D.