LCOV - code coverage report
Current view: top level - wannier - wann_socmat.F (source / functions) Hit Total Coverage
Test: combined.info Lines: 0 38 0.0 %
Date: 2019-09-08 04:53:50 Functions: 0 1 0.0 %

          Line data    Source code
       1             : !--------------------------------------------------------------------------------
       2             : ! Copyright (c) 2016 Peter Grünberg Institut, Forschungszentrum Jülich, Germany
       3             : ! This file is part of FLEUR and available as free software under the conditions
       4             : ! of the MIT license as expressed in the LICENSE file in more detail.
       5             : !--------------------------------------------------------------------------------
       6             : 
       7             :       module m_wann_socmat
       8             :       contains
       9           0 :       subroutine wann_socmat(
      10             :      >               mpi,enpara,input,noco,atoms,
      11             :      >               lmaxd,ntypd,nlod,natd,neigd,
      12             :      >               llod,jmtd,jspd,nlhd,neq,
      13             :      >               ntype,theta_in,phi_in,jspins,irank,
      14             :      >               jri,lmax,dx,rmsh,el,ello,nlo,llo,
      15           0 :      >               l_dulo,ulo_der,vr,
      16           0 :      >               acof,bcof,chelp,
      17             :      <               hsomtx)
      18             : c***********************************************************************
      19             : c     Calculate matrix elements of the spin-orbit interaction for those
      20             : c     Bloch functions out of which the Wannier functions are 
      21             : c     constructed. From these matrix elements the spin-orbit Hamiltonian
      22             : c     in the basis set of Wannier functions may be constructed.
      23             : c     
      24             : c     Frank Freimuth
      25             : c***********************************************************************
      26             :       USE m_types
      27             :       USE m_spnorb 
      28             :       USE m_hsoham
      29             :       implicit none
      30             : 
      31             :       TYPE(t_mpi),INTENT(IN)      :: mpi
      32             : 
      33             :       TYPE(t_enpara),INTENT(IN)   :: enpara
      34             :       TYPE(t_input),INTENT(IN)    :: input
      35             :       TYPE(t_noco),INTENT(IN)     :: noco
      36             :       TYPE(t_atoms),INTENT(IN)    :: atoms
      37             : 
      38             :       integer, intent(in) :: lmaxd
      39             :       integer, intent(in) :: ntypd
      40             :       integer, intent(in) :: nlod
      41             :       integer, intent(in) :: natd
      42             :       integer, intent(in) :: neigd
      43             : 
      44             :       integer, intent(in) :: llod
      45             :       integer, intent(in) :: jmtd
      46             :       integer, intent(in) :: jspd
      47             :       integer, intent(in) :: nlhd
      48             :       integer, intent(in) :: neq(:) !ntype
      49             : 
      50             :       integer, intent(in) :: ntype
      51             :       real,    intent(in) :: theta_in
      52             :       real,    intent(in) :: phi_in
      53             :       integer, intent(in) :: jspins
      54             :       integer, intent(in) :: irank
      55             : 
      56             :       integer, intent(in) :: jri(:)  ! ntypd
      57             :       integer, intent(in) :: lmax(:) ! ntypd
      58             :       real,    intent(in) :: dx(:)   ! ntypd
      59             :       real,    intent(in) :: rmsh(:,:)  ! jmtd,ntypd
      60             :       real,    intent(in) :: el(0:,:,:) ! 0:lmaxd,ntypd,max(2,jspd)
      61             :       real,    intent(in) :: ello(:,:,:)! nlod,ntypd,max(2,jspd)
      62             :       integer, intent(in) :: nlo(:)     ! ntypd
      63             :       integer, intent(in) :: llo(:,:)   ! nlod,ntypd
      64             : 
      65             :       logical, intent(in) :: l_dulo(:,:)  ! l_dulo(nlod,ntypd)
      66             :       integer, intent(in) :: ulo_der(:,:) ! ulo_der(nlod,ntypd)
      67             :       real,    intent(in) :: vr(:,0:,:,:)    ! jmtd,0:nlhd,ntypd,jspd   
      68             :   
      69             :       complex, intent(in) :: acof(:,0:,:,:) !acof(noccbd,0:lmd,natd,jspd)
      70             :       complex, intent(in) :: bcof(:,0:,:,:) !bcof(noccbd,0:lmd,natd,jspd)
      71             :       complex, intent(in) :: chelp(-llod:,:,:,:,:) !chelp(-llod:llod,neigd,nlod,natd,jspd)
      72             : 
      73             :       complex, allocatable, intent(out):: hsomtx(:,:,:,:) !(neigd,neigd,2,2)
      74             : 
      75             :       integer :: n,l,nwdd,nw,ispin,ie,na,ll1,m,lm,i,nsz(2)
      76             :       real    :: s(3),r2
      77             :       logical :: l_all
      78             :       CHARACTER*3 chntype
      79             :       real    :: theta,phi,pi
      80             : 
      81           0 :       real,allocatable :: ddn(:,:,:) ! 0:lmaxd,ntypd,jspd
      82           0 :       real,allocatable :: us(:,:,:)  ! 0:lmaxd,ntypd,jspd
      83           0 :       real,allocatable :: dus(:,:,:) ! 0:lmaxd,ntypd,jspd
      84           0 :       real,allocatable :: uds(:,:,:) ! 0:lmaxd,ntypd,jspd
      85           0 :       real,allocatable :: duds(:,:,:)! 0:lmaxd,ntypd,jspd
      86             : 
      87           0 :       real,allocatable :: ulos(:,:,:)  ! nlod,ntypd,jspd
      88           0 :       real,allocatable :: dulos(:,:,:) ! nlod,ntypd,jspd
      89           0 :       real,allocatable :: uulon(:,:,:) ! nlod,ntypd,jspd
      90           0 :       real,allocatable :: dulon(:,:,:) ! nlod,ntypd,jspd  
      91             : 
      92           0 :       COMPLEX,ALLOCATABLE :: ahelp(:,:,:,:)
      93           0 :       complex,allocatable :: bhelp(:,:,:,:)
      94             : 
      95           0 :       TYPE(t_rsoc)::rsoc
      96           0 :       TYPE(t_usdus):: usdus
      97             : 
      98           0 :       nwdd=1
      99           0 :       nw=1
     100           0 :       nsz=neigd
     101             : 
     102             :       IF (.true.) THEN
     103           0 :         theta= theta_In
     104           0 :         phi= phi_In
     105             :       ELSE
     106             :         pi= 4.*ATAN(1.)
     107             :         theta= -theta_In
     108             :         phi=   phi_In+pi
     109             :         ! now the definition of rotation matrices
     110             :         ! is equivalent to the def in the noco-routines
     111             :       ENDIF
     112             : 
     113           0 :       ALLOCATE ( ahelp(lmaxd*(lmaxd+2),natd,neigd,input%jspins) )
     114           0 :       ALLOCATE ( bhelp(lmaxd*(lmaxd+2),natd,neigd,input%jspins) )
     115             : 
     116           0 :       do ispin=1,input%jspins
     117           0 :        DO ie = 1, neigd
     118           0 :         DO na = 1, natd
     119           0 :          DO l = 1, lmaxd
     120           0 :           ll1 = l*(l+1)
     121           0 :           DO m = -l,l
     122           0 :              lm = ll1 + m
     123           0 :              ahelp(lm,na,ie,ispin) = (acof(ie,lm,na,ispin))
     124           0 :              bhelp(lm,na,ie,ispin) = (bcof(ie,lm,na,ispin))
     125             :           ENDDO !m
     126             :          ENDDO !l
     127             :         ENDDO !na
     128             :        ENDDO !ie
     129             :       enddo !ispin
     130             : 
     131             :       ALLOCATE(usdus%us(0:atoms%lmaxd,atoms%ntype,jspd), 
     132             :      +         usdus%dus(0:atoms%lmaxd,atoms%ntype,jspd),
     133             :      +         usdus%uds(0:atoms%lmaxd,atoms%ntype,jspd),
     134             :      +         usdus%duds(0:atoms%lmaxd,atoms%ntype,jspd),
     135             :      +         usdus%ddn(0:atoms%lmaxd,atoms%ntype,jspd),
     136             :      +         usdus%ulos(atoms%nlod,atoms%ntype,jspd),
     137             :      +         usdus%dulos(atoms%nlod,atoms%ntype,jspd),
     138             :      +         usdus%uulon(atoms%nlod,atoms%ntype,jspd),
     139           0 :      +         usdus%dulon(atoms%nlod,atoms%ntype,jspd))
     140             : 
     141             :       ALLOCATE( us(0:lmaxd,ntypd,jspd), dus(0:lmaxd,ntypd,jspd),
     142             :      +          uds(0:lmaxd,ntypd,jspd),duds(0:lmaxd,ntypd,jspd),
     143             :      +          ddn(0:lmaxd,ntypd,jspd),
     144             :      +          ulos(nlod,ntypd,jspd),dulos(nlod,ntypd,jspd),
     145           0 :      +          uulon(nlod,ntypd,jspd),dulon(nlod,ntypd,jspd))
     146             : 
     147             :       CALL spnorb(
     148             :      >         atoms,noco,input,mpi, enpara,
     149           0 :      >         vr,usdus,rsoc,.true.)
     150             :       
     151           0 :       rsoc%soangl= conjg(rsoc%soangl)
     152             : 
     153             :       CALL hsoham(atoms,noco,input,nsz,neigd,chelp,rsoc,ahelp,
     154             :      >            bhelp,1,natd,mpi%n_rank,mpi%n_size,mpi%SUB_COMM,
     155           0 :      <            hsomtx)
     156             :  
     157           0 :       end subroutine wann_socmat
     158             :       end module m_wann_socmat

Generated by: LCOV version 1.13