LCOV - code coverage report
Current view: top level - fermi - doswt.f90 (source / functions) Hit Total Coverage
Test: FLEUR test coverage Lines: 0 36 0.0 %
Date: 2024-04-29 04:44:58 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             : MODULE m_doswt
       7             :    !
       8             :    !     calculates the weights for each k-point for integrating functions
       9             :    !     of k.  the array w has beeen cleared before entering.
      10             :    !
      11             :    USE m_trisrt
      12             :    USE m_types
      13             : 
      14             :    IMPLICIT NONE
      15             : 
      16             :    CONTAINS
      17             : 
      18           0 :    SUBROUTINE doswt(ei,nemax,jspins,kpts,eig,w)
      19             : 
      20             :       INTEGER,       INTENT(IN) :: jspins
      21             :       TYPE(t_kpts),  INTENT(IN) :: kpts
      22             :       REAL,          INTENT(IN) :: ei
      23             :       INTEGER,       INTENT(IN) :: nemax(:)
      24             :       REAL,          INTENT(IN) :: eig(:,:,:)      !(neig,nkpt,jspins)
      25             :       REAL,          INTENT(OUT):: w(:,:,:)        !(neig,nkpt,jspins)
      26             : 
      27             :       INTEGER :: jspin,iBand,itria
      28             :       INTEGER :: k1,k2,k3
      29             :       INTEGER :: neig
      30             :       REAL    :: e1,e2,e3
      31             :       REAl    :: ee,e32,e31,e21,s
      32           0 :       w=0.0 !init was missing
      33           0 :       DO jspin = 1,jspins
      34           0 :          neig = nemax(jspin)
      35           0 :          DO iBand = 1,neig
      36           0 :             DO itria = 1,kpts%ntet
      37             :                !Get the k-points and eigenvalues
      38             :                !of the current triangle
      39           0 :                k1 = kpts%ntetra(1,itria)
      40           0 :                k2 = kpts%ntetra(2,itria)
      41           0 :                k3 = kpts%ntetra(3,itria)
      42           0 :                e1 = eig(iBand,k1,jspin)
      43           0 :                e2 = eig(iBand,k2,jspin)
      44           0 :                e3 = eig(iBand,k3,jspin)
      45             :                !Sort by ascending eigenvalues
      46           0 :                CALL trisrt(e1,e2,e3,k1,k2,k3)
      47           0 :                IF (e1.LE.-9999.0) CYCLE !Not all eigenvalues available
      48           0 :                IF (ei.LE.e1) CYCLE !triangle not occupied
      49           0 :                IF (ei.GE.e3) THEN
      50             :                   !---> e3<e
      51           0 :                   s = kpts%voltet(itria)/kpts%ntet/3.0
      52           0 :                   w(iBand,k1,jspin) = w(iBand,k1,jspin) + s
      53           0 :                   w(iBand,k2,jspin) = w(iBand,k2,jspin) + s
      54           0 :                   w(iBand,k3,jspin) = w(iBand,k3,jspin) + s
      55           0 :                ELSEIF (ei.GT.e2) THEN
      56             :                   !---> e2<ei<e3
      57           0 :                   ee = e3 - ei
      58           0 :                   e31 = ee/ (e3-e1)
      59           0 :                   e32 = ee/ (e3-e2)
      60           0 :                   s = kpts%voltet(itria)/kpts%ntet/3.0
      61           0 :                   w(iBand,k1,jspin) = w(iBand,k1,jspin) + s* (1.-e31*e31*e32)
      62           0 :                   w(iBand,k2,jspin) = w(iBand,k2,jspin) + s* (1.-e31*e32*e32)
      63           0 :                   w(iBand,k3,jspin) = w(iBand,k3,jspin) + s* (1.-e31*e32*(3.-e31-e32))
      64             :                ELSE
      65             :                   !---> e1<ei<e2
      66           0 :                   ee = ei - e1
      67           0 :                   e31 = ee/ (e3-e1)
      68           0 :                   e21 = ee/ (e2-e1)
      69           0 :                   s = kpts%voltet(itria)/kpts%ntet*e31*e21/3.0
      70           0 :                   w(iBand,k1,jspin) = w(iBand,k1,jspin) + s* (3.0-e21-e31)
      71           0 :                   w(iBand,k2,jspin) = w(iBand,k2,jspin) + s*e21
      72           0 :                   w(iBand,k3,jspin) = w(iBand,k3,jspin) + s*e31
      73             :                ENDIF
      74             : 
      75             :             ENDDO
      76             :          ENDDO
      77             :       ENDDO
      78             : 
      79           0 :    END SUBROUTINE doswt
      80             : END MODULE m_doswt

Generated by: LCOV version 1.14