LCOV - code coverage report
Current view: top level - vgen - dylm3.f (source / functions) Hit Total Coverage
Test: FLEUR test coverage Lines: 48 50 96.0 %
Date: 2024-04-23 04:28:20 Functions: 1 1 100.0 %

          Line data    Source code
       1             :       MODULE m_dylm
       2             :       use m_juDFT
       3             : c.....------------------------------------------------------------------
       4             : c     preparation of dylmt1(=d(ylm)/dtheta),
       5             : c     dylmt2(=d(dylmt1)/dtheta),
       6             : c     dylmf1, dylmf2 are for fai.
       7             : c     dylmtf=d(dylmt1)/df
       8             : c     t.a. june, 1996.
       9             : c.....------------------------------------------------------------------
      10             :       CONTAINS
      11      122680 :       SUBROUTINE dylm3(
      12      122680 :      >                 lmaxd,lmax,v,ylm,
      13      122680 :      <                 dylmt1,dylmt2,dylmf1,dylmf2,dylmtf)
      14             : c
      15             :       use m_constants
      16             :       IMPLICIT NONE
      17             : C     ..
      18             : C     .. Scalar Arguments ..
      19             :       INTEGER, INTENT (IN) :: lmaxd,lmax
      20             : C     ..
      21             : C     .. Array Arguments ..
      22             :       REAL,    INTENT (IN) :: v(3)
      23             :       COMPLEX, INTENT (IN) ::    ylm( (lmaxd+1)**2 )
      24             :       COMPLEX, INTENT (OUT):: dylmt1( (lmaxd+1)**2 )
      25             :       COMPLEX, INTENT (OUT):: dylmt2( (lmaxd+1)**2 )
      26             :       COMPLEX, INTENT (OUT):: dylmf1( (lmaxd+1)**2 )
      27             :       COMPLEX, INTENT (OUT):: dylmf2( (lmaxd+1)**2 )
      28             :       COMPLEX, INTENT (OUT):: dylmtf( (lmaxd+1)**2 )
      29             : C     ..
      30             : C     .. Local Scalars ..
      31             :       INTEGER lm1,lm,lm2,lm1m,lmm1m,lmm,lmm1,lmm2
      32             :       INTEGER l,m,ll1,llm
      33             :       COMPLEX em1f,em2f,ep1f,ep2f
      34             :       REAL cph,rxy,small,sph,x,xy,y
      35             : C     ..
      36             : C     .. Data Statements ..
      37             :       DATA small/1.0e-12/
      38             : c.....------------------------------------------------------------------
      39             : c     ..
      40      122680 :       IF (lmax.GT.lmaxd) THEN
      41           0 :         WRITE (oUnit,*) lmax,lmaxd
      42           0 :          CALL juDFT_error("lmax.GT.lmaxd",calledby="dylm3")
      43             :       ENDIF
      44             : 
      45             : c--->    calculate sin and cos of phi
      46      122680 :       x = v(1)
      47      122680 :       y = v(2)
      48             : 
      49      122680 :       xy = x*x + y*y
      50      122680 :       rxy = sqrt(xy)
      51             : c
      52      122680 :       IF (rxy.gt.small) THEN
      53      122680 :          cph = x/rxy
      54      122680 :          sph = y/rxy
      55             :       ELSE
      56             :          cph = 1.e0
      57             :          sph = 0.e0
      58             :       ENDIF
      59             : 
      60      122680 :       ep1f=cmplx(cph,sph)
      61      122680 :       em1f=conjg(ep1f)
      62      122680 :       ep2f=ep1f*ep1f
      63      122680 :       em2f=em1f*em1f
      64             : c
      65     1312560 :       DO 21 l=0,lmax
      66     1189880 :          ll1 = l*(l+1) 
      67             : 
      68    12989680 :          DO m=-l,l
      69    11799800 :             llm = ll1 + m + 1
      70    11799800 :             dylmt1(llm) = cmplx(0.0,0.0)
      71    12989680 :             dylmt2(llm) = cmplx(0.0,0.0)
      72             :          ENDDO
      73             : 
      74    12989680 :          DO 23 m=-l,l
      75    11799800 :             llm = ll1 + m + 1
      76             : 
      77    11799800 :             lmm1m = l - m - 1
      78    11799800 :             lmm   = l - m
      79    11799800 :             lmm1  = l - m + 1
      80    11799800 :             lmm2  = l - m + 2
      81    11799800 :             lm1m  = l + m - 1
      82    11799800 :             lm    = l + m
      83    11799800 :             lm1   = l + m + 1
      84    11799800 :             lm2   = l + m + 2
      85             : 
      86             :             dylmt2(llm)=dylmt2(llm) -
      87    11799800 :      +                      (lmm*lm1+lmm1*lm)/4.e0*ylm(llm)
      88             : 
      89    11799800 :             IF (m+2.le.l) dylmt2(llm)=dylmt2(llm) +
      90     9542720 :      +           sqrt(real(lmm1m*lmm*lm1*lm2))/4*ylm(llm+2)*em2f
      91             : 
      92    11799800 :             IF (m+1.le.l) dylmt1(llm)=dylmt1(llm) +
      93    10609920 :      +           sqrt(real(lmm*lm1))/2*ylm(llm+1)*em1f
      94             : 
      95    11799800 :             IF (m-1.ge.-l) dylmt1(llm)=dylmt1(llm) -
      96    10609920 :      +           sqrt(real(lm*lmm1))/2*ylm(llm-1)*ep1f
      97             : 
      98    11799800 :             IF (m-2.ge.-l) dylmt2(llm)=dylmt2(llm) +
      99     9542720 :      +           sqrt(real(lmm1*lmm2*lm1m*lm))/4*ylm(llm-2)*ep2f
     100             : 
     101     1189880 :    23    ENDDO
     102             : 
     103    12989680 :          DO m=-l,l
     104    11799800 :             llm = ll1 + m + 1
     105    11799800 :             dylmf1(llm) = ImagUnit * m *    ylm(llm)
     106    11799800 :             dylmf2(llm) = -m * m *    ylm(llm)
     107    12989680 :             dylmtf(llm) = ImagUnit * m * dylmt1(llm)
     108             :          ENDDO
     109             : 
     110      122680 :    21 ENDDO
     111             : 
     112      122680 :       RETURN
     113             :       END SUBROUTINE dylm3
     114             :       END MODULE m_dylm

Generated by: LCOV version 1.14