LCOV - code coverage report
Current view: top level - wannier - wann_wigner_seitz.f (source / functions) Hit Total Coverage
Test: combined.info Lines: 0 39 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_wigner_seitz
       8             :       use m_juDFT
       9             :       contains
      10           0 :       subroutine wann_wigner_seitz(
      11           0 :      >          l_get_rvecnum,num,amat,
      12             :      >          rvecnum_in,
      13           0 :      <          rvecnum,rvec,ndegen)
      14             : 
      15             :       implicit none
      16             :       logical, intent(in) :: l_get_rvecnum
      17             :       integer, intent(in) :: num(:)
      18             :       real, intent(in)    :: amat(:,:)
      19             :       integer,intent(in)  :: rvecnum_in
      20             :       integer, intent(out):: rvecnum
      21             :       integer, intent(out):: rvec(:,:)
      22             :       integer, intent(out):: ndegen(:)  
      23             : 
      24             :       integer             :: idist (3)
      25             :       real                :: dist(1331),summa,dist_min
      26             :       integer             :: k1,k2,k3,i1,i2,i3,count,i,j
      27             :       real                :: eps7,eps8
      28             :       real                :: metric(3,3)
      29             : 
      30           0 :       eps7=1.e-7
      31           0 :       eps8=1.e-8
      32           0 :       rvecnum=0
      33             : 
      34           0 :       metric=matmul(transpose(amat),amat)
      35             : 
      36           0 :       rvecnum = 0  
      37           0 :       do k1=-2*num(1),2*num(1)  
      38           0 :        do k2=-2*num(2),2*num(2)  
      39           0 :         do k3=-2*num(3),2*num(3)  
      40             :          count=0  
      41           0 :          do i1=-5,5  
      42           0 :           do i2=-5,5  
      43           0 :            do i3=-5,5  
      44           0 :             count=count+1  
      45             :             ! Get |r-R|^2
      46           0 :             idist(1)=k1-i1*num(1)  
      47           0 :             idist(2)=k2-i2*num(2)  
      48           0 :             idist(3)=k3-i3*num(3)  
      49           0 :             dist(count)=0.0 
      50           0 :             do i=1,3  
      51           0 :              do j=1,3  
      52             :               dist(count)=dist(count)+ 
      53           0 :      +         real(idist(i))*metric(i,j)*real(idist(j))
      54             :              enddo !i
      55             :             enddo !j
      56             :            enddo !i3
      57             :           enddo !i2
      58             :          enddo !i1
      59           0 :          dist_min=minval(dist)
      60           0 :          if (abs(dist(666) - dist_min ) .lt. eps7 ) then
      61           0 :                 rvecnum = rvecnum + 1  
      62           0 :                 if(.not. l_get_rvecnum) then
      63             : c                   if(.not.allocated(ndegen))
      64             : c     &                 allocate(ndegen(rvecnum_in))
      65           0 :                    ndegen(rvecnum)=0
      66           0 :                    do i=1,1331
      67           0 :                       if (abs (dist (i) - dist_min) .lt. eps7 ) 
      68           0 :      &                   ndegen(rvecnum)=ndegen(rvecnum)+1
      69             :                    end do
      70           0 :                    rvec(1,rvecnum) = k1  
      71           0 :                    rvec(2,rvecnum) = k2   
      72           0 :                    rvec(3,rvecnum) = k3   
      73             :                 endif
      74             :          endif
      75             :         enddo !k3
      76             :        enddo !k2
      77             :       enddo !k1
      78           0 :       if(l_get_rvecnum) return
      79             : 
      80             : c------ Consistency Check.
      81           0 :       summa = 0.0
      82           0 :       do i = 1, rvecnum  
      83           0 :        summa = summa + 1.0/real(ndegen(i))  
      84             :       enddo
      85           0 :       if (abs (summa - real(num(1)*num(2)*num(3)) ) > eps8) then
      86             :          CALL juDFT_error("problem finding Wigner-Seitz points",
      87           0 :      +                    calledby ="wann_wigner_seitz")
      88             :       endif
      89             : 
      90             :       end subroutine wann_wigner_seitz
      91             : 
      92             :       end module m_wann_wigner_seitz

Generated by: LCOV version 1.13