Line data Source code
1 : MODULE m_lattHarmsSphHarmsConv
2 :
3 : USE m_types
4 :
5 : CONTAINS
6 :
7 254 : SUBROUTINE lattHarmsRepToSphHarms(sym, atoms, lattHarms, iType, funcLattHarms, funcSphHarms)
8 :
9 : IMPLICIT NONE
10 :
11 : TYPE(t_sym), INTENT(IN) :: sym
12 : TYPE(t_atoms), INTENT(IN) :: atoms
13 : TYPE(t_sphhar), INTENT(IN) :: lattHarms
14 : INTEGER, INTENT(IN) :: iType
15 : REAL, INTENT(IN) :: funcLattHarms(:,0:) ! (iR,iLH)
16 : COMPLEX, INTENT(INOUT) :: funcSphHarms(:,:) ! (iR,lm)
17 :
18 : INTEGER :: iAtom, iLH, ns, l, iM, m, lm, iR
19 :
20 254 : iAtom = atoms%firstAtom(iType)
21 254 : ns = sym%ntypsy(iAtom)
22 :
23 15202888 : funcSphHarms = CMPLX(0.0,0.0)
24 :
25 19576 : DO iLH = 0, lattHarms%nlh(ns)
26 19322 : l = lattHarms%llh(iLH,ns)
27 56118 : DO iM = 1, lattHarms%nmem(iLH,ns)
28 36542 : m = lattHarms%mlh(iM,iLH,ns)
29 36542 : lm = l*(l+1) + m + 1
30 26125364 : DO iR = 1, atoms%jri(iType)
31 26106042 : funcSphHarms(iR,lm) = funcSphHarms(iR,lm) + funcLattHarms(iR,iLH) * lattHarms%clnu(iM,iLH,ns)
32 : END DO
33 : END DO
34 : END DO
35 :
36 254 : END SUBROUTINE lattHarmsRepToSphHarms
37 :
38 86 : SUBROUTINE sphHarmsRepToLattHarms(sym, atoms, lattHarms, iType, funcSphHarms, funcLattHarms)
39 :
40 : IMPLICIT NONE
41 :
42 : TYPE(t_sym), INTENT(IN) :: sym
43 : TYPE(t_atoms), INTENT(IN) :: atoms
44 : TYPE(t_sphhar), INTENT(IN) :: lattHarms
45 : INTEGER, INTENT(IN) :: iType
46 : COMPLEX, INTENT(IN) :: funcSphHarms(:,:) ! (iR,lm)
47 : REAL, INTENT(INOUT) :: funcLattHarms(:,0:) ! (iR,iLH)
48 :
49 : INTEGER :: iAtom, iLH, ns, l, iM, m, lm, iR
50 :
51 86 : iAtom = atoms%firstAtom(iType)
52 86 : ns = sym%ntypsy(iAtom)
53 :
54 4972676 : funcLattHarms = 0.0
55 :
56 7052 : DO iLH = 0, lattHarms%nlh(ns)
57 6966 : l = lattHarms%llh(iLH,ns)
58 20210 : DO iM = 1, lattHarms%nmem(iLH,ns)
59 13158 : m = lattHarms%mlh(iM,iLH,ns)
60 13158 : lm = l*(l+1) + m + 1
61 9399636 : DO iR = 1, atoms%jri(iType)
62 9392670 : funcLattHarms(iR,iLH) = funcLattHarms(iR,iLH) + REAL(funcSphHarms(iR,lm) * CONJG(lattHarms%clnu(iM,iLH,ns)))
63 : END DO
64 : END DO
65 : END DO
66 :
67 86 : END SUBROUTINE sphHarmsRepToLattHarms
68 :
69 : END MODULE m_lattHarmsSphHarmsConv
|