False detection of time reversal symmetry in non collinear magnetism case

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
batman
Posts: 12
Joined: Sun Jun 20, 2021 2:04 pm

False detection of time reversal symmetry in non collinear magnetism case

Post by batman » Fri Jan 26, 2024 5:37 am

Dear developers,

I am bit confused why does YAMBO assumes time reversal symmetry in case of magnetic materials. It also detects time reversal symmetry when quantum espresso turns it off. Looking into a bit, I found that Yambo treats magnetic symmetries as time reversal symmetry( which I guess is not true as it enforces time reversal on ground state hamiltonian for all magnetic materials). Also it looks like QE and Yambo contradict with each other.

In q.e [source file PW/src/setup.f90][https://gitlab.com/QEF/q-e/-/blob/devel ... p.f90#L484]

Code: Select all

  magnetic_sym = noncolin .AND. domag 
  time_reversal = .NOT. noinv .AND. .NOT. magnetic_sym 
Which implies time_reversal and magnetic_sym cannot be true at the same time and is perfectly fine.

Where as in YAMBO [yambo/interfaces/int_modules/mod_com2y.F][https://github.com/yambo-code/yambo/blo ... om2y.F#L85]

Code: Select all

if(any(t_rev(:)==1)) then
         mag_syms=.true.
         i_time_rev=1
       endif
which assumes that mag_syms and i_time_rev are true at the same time.

To add a bit more, the SOC term respects time reversal symmetry, so hamilitoan respects time-reversal in non-magnetic SOC case. I also donot really understand the following line (I mean isn't just "n_spin_den==4" in the if condition?)

Code: Select all

if(l_spin_orbit.and.n_spin_den==4) i_time_rev=0
Please correct me if I completely miss out something.

Best regards,
Murali
Muralidhar Nalabothula
Doctoral student at Department of Physics and Materials Science,
Université du Luxembourg

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: False detection of time reversal symmetry in non collinear magnetism case

Post by Davide Sangalli » Fri Jan 26, 2024 9:20 am

Dear Murali,
to explain a bit what is in

Code: Select all

interfaces/int_modules/mod_com2y.F
This is the code

Code: Select all

     if(present(t_rev).and.present(trevsym)) then                       
       i_time_rev=0                                                     
       if(trevsym) i_time_rev=1                                         
       if(any(t_rev(:)==1)) then                                        
         mag_syms=.true.                                                
         i_time_rev=1                                                   
       endif                                                            
       double_symmetries=.not.mag_syms                                  
     else                                                               
       i_time_rev=1                                                     
       if(l_spin_orbit.and.n_spin_den==4) i_time_rev=0                  
       double_symmetries=(i_time_rev==1)                                
     endif                                                              
The first "if( present(t_rev).and.present(trevsym) )" is the way the interfaces "p2y" and "a2y" are distinguished.
In case t_rev and trevsym are present we are reading info from QE, in the other case from abinit.

QE case. i_time_rev=1 in yambo means that there are symmetries which include time reversal.
The pure time reversal (i) could be included (mag_syms=.false. and trevsym=.true.) or (ii) not included (mag_syms=.true. and any(t_rev(:)==1)
When a symmetry operation is applied, yambo just checks if such symmetry includes the time_reversal.
In case (i) there exist an operation which is "t_rev" times "identity", while in case (ii) it will always be "t_rev" times "operation in real space" different from identity

Abinit case. For abinit such part of the code is old and to be changed.
Hope this answers the questions

Best,
D.

P.S.: The correct coding for abinit is here:
https://github.com/sangallidavide/yambo ... od_com2y.F
The same algorithm is used both for abinit and QE.
Indeed the abinit call to symmetries_check_and_load has been changed. See this change in interfaces/a2y/a2y_db1.F

Code: Select all

-    call symmetries_check_and_load(asop,a_nsym)
+    YAMBO_ALLOC( symafm, (a_nsym) )
+    varid = netcdf_inquire_varid(ncid, "symafm")
+    netcdf_error = nf90_get_var(ncid, varid, symafm)
+    call netcdf_check(ncid,netcdf_error,varid)
+
+    YAMBO_ALLOC( trev, (a_nsym) )
+    trev=0
+    if (any(symafm==-1)) then
+      trev=-99
+      do is=1,a_nsym
+        det_s=m3det_i(asop(:,:,is))
+        if (symafm(is)*det_s==-1)  trev(is)=1
+        if (symafm(is)*det_s== 1)  trev(is)=0
+      enddo
+      if (any(trev==-99)) call error(" some symmetry has determinant different from 1 or -1")
+    endif
+
+    call symmetries_check_and_load(asop,a_nsym,t_rev=trev)
I hope we will be able to import this change in the forthcoming releases.
However, it just affects the a2y interface.
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