LCOV - code coverage report
Current view: top level - kpoints - divi.f (source / functions) Hit Total Coverage
Test: combined.info Lines: 43 45 95.6 %
Date: 2019-09-08 04:53:50 Functions: 1 1 100.0 %

          Line data    Source code
       1             :       MODULE m_divi
       2             :       CONTAINS
       3          18 :       SUBROUTINE divi(
       4             :      >                nkpt,rltv,film,nop,nop2,
       5             :      <                n)
       6             : 
       7             :       IMPLICIT NONE
       8             : 
       9             :       INTEGER, INTENT (IN) :: nkpt      ! maximum number of k-points
      10             :       INTEGER, INTENT (IN) :: nop,nop2  ! number of symmetry operations (3D,2D)
      11             :       REAL,    INTENT (IN) :: rltv(3,3) ! reciprocal lattice axes
      12             :       LOGICAL, INTENT (IN) :: film      ! .true. -> 2D k-points
      13             :       INTEGER, INTENT(OUT) :: n(3)      ! # of k-points in each direction
      14             : 
      15             :       INTEGER ntes,i,ntot
      16             :       REAL    b(3)
      17             : 
      18          72 :       DO i = 1,3
      19          72 :         b(i) = sqrt( rltv(i,1)**2 + rltv(i,2)**2 + rltv(i,3)**2 )
      20             :       ENDDO
      21             : 
      22          18 :       IF (film) THEN
      23           2 :         ntot = nkpt * nop2
      24             :       ELSE
      25          16 :         ntot = nkpt * nop
      26             :       ENDIF
      27             : 
      28          18 :       IF (film) THEN
      29             :         ntes = ntot
      30           6 :   5     n(1) = nint( sqrt( ntes*b(1)/b(2) ) )
      31           6 :         n(2) = nint( n(1)*b(2)/b(1) )
      32           6 :         IF (n(1)*n(2).GT.ntot) THEN
      33           4 :           n(2) = nint(  sqrt( ntes*b(2)/b(1) ) )
      34           4 :           n(1) = nint( n(2)*b(1)/b(2) )
      35           4 :           IF (n(1)*n(2).GT.ntot) THEN
      36           4 :             ntes = ntes - 1
      37           4 :             GOTO 5
      38             :           ENDIF
      39             :         ENDIF
      40           2 :         n(3) = 0
      41           2 :         IF (nop2.GE.4) THEN
      42           0 :           n(1) = MAX(2*NINT(n(1)/2.0+0.1),1)
      43           0 :           n(2) = MAX(2*NINT(n(2)/2.0+0.1),1)
      44             :         ENDIF
      45           2 :         n(1) = MAX(n(1),1)
      46           2 :         n(2) = MAX(n(2),1)
      47           2 :         WRITE (*,*) n(1),n(2),n(1)*n(2)
      48             :       ELSE
      49             :         ntes = ntot
      50          76 :  10     n(1) = nint( (ntes*b(1)**2/(b(2)*b(3)))**(1./3.) ) 
      51          76 :         n(2) = nint( n(1)*b(2)/b(1) )
      52          76 :         n(3) = nint( n(1)*b(3)/b(1) )
      53          76 :         IF (n(1)*n(2)*n(3).GT.ntot) THEN
      54          64 :           n(2) = nint( (ntes*b(2)**2/(b(1)*b(3)))**(1./3.) )
      55          64 :           n(1) = nint( n(2)*b(1)/b(2) )
      56          64 :           n(3) = nint( n(2)*b(3)/b(2) )
      57          64 :           IF (n(1)*n(2)*n(3).GT.ntot) THEN
      58          64 :             n(3) = nint( (ntes*b(3)**2/(b(1)*b(2)))**(1./3.) )
      59          64 :             n(2) = nint( n(3)*b(2)/b(3) )
      60          64 :             n(1) = nint( n(3)*b(1)/b(3) )
      61          64 :             IF (n(1)*n(2)*n(3).GT.ntot) THEN
      62          60 :               ntes = ntes - 1
      63          60 :               GOTO 10
      64             :             ENDIF
      65             :           ENDIF
      66             :         ENDIF
      67          16 :         IF (nop.GE.8) THEN
      68          13 :           n(1) = MAX(2*NINT(n(1)/2.0-0.1),1)
      69          13 :           n(2) = MAX(2*NINT(n(2)/2.0-0.1),1)
      70          13 :           n(3) = MAX(2*NINT(n(3)/2.0-0.1),1)
      71             :         ENDIF
      72          16 :         n(1) = MAX(n(1),1)
      73          16 :         n(2) = MAX(n(2),1)
      74          16 :         n(3) = MAX(n(3),1)
      75          16 :         WRITE (*,*) n(1),n(2),n(3),n(1)*n(2)*n(3)
      76             :       ENDIF
      77             : 
      78          18 :       RETURN
      79             :       END SUBROUTINE divi
      80             :       END MODULE m_divi

Generated by: LCOV version 1.13