Wave function phases

Concerns any physical issues arising during the setup step (-i option). This includes problems with symmetries, k/q-point sets, and so on. For technical problems (running in parallel, etc), refer to the Technical forum.

Moderators: Davide Sangalli, andrea.ferretti, myrta gruning, Daniele Varsano

Post Reply
Franz Fischer
Posts: 38
Joined: Wed Jul 20, 2022 9:36 am

Wave function phases

Post by Franz Fischer » Wed Jul 05, 2023 3:45 pm

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
Franz Fischer
PhD student / IMPRS-UFAST fellow
Institute of Physical Chemistry
University of Hamburg

User avatar
Davide Sangalli
Posts: 614
Joined: Tue May 29, 2012 4:49 pm
Location: Via Salaria Km 29.3, CP 10, 00016, Monterotondo Stazione, Italy
Contact:

Re: Wave function phases

Post by Davide Sangalli » Mon Jul 10, 2023 8:29 am

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.
Davide Sangalli, PhD
CNR-ISM, Division of Ultrafast Processes in Materials (FLASHit) and MaX Centre
https://sites.google.com/view/davidesangalli
http://www.max-centre.eu/

Post Reply