1!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2! Copyright 2010.  Los Alamos National Security, LLC. This material was    !
3! produced under U.S. Government contract DE-AC52-06NA25396 for Los Alamos !
4! National Laboratory (LANL), which is operated by Los Alamos National     !
5! Security, LLC for the U.S. Department of Energy. The U.S. Government has !
6! rights to use, reproduce, and distribute this software.  NEITHER THE     !
7! GOVERNMENT NOR LOS ALAMOS NATIONAL SECURITY, LLC MAKES ANY WARRANTY,     !
8! EXPRESS OR IMPLIED, OR ASSUMES ANY LIABILITY FOR THE USE OF THIS         !
9! SOFTWARE.  If software is modified to produce derivative works, such     !
10! modified software should be clearly marked, so as not to confuse it      !
11! with the version available from LANL.                                    !
12!                                                                          !
13! Additionally, this program is free software; you can redistribute it     !
14! and/or modify it under the terms of the GNU General Public License as    !
15! published by the Free Software Foundation; version 2.0 of the License.   !
16! Accordingly, this program is distributed in the hope that it will be     !
17! useful, but WITHOUT ANY WARRANTY; without even the implied warranty of   !
18! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General !
19! Public License for more details.                                         !
20!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
21
22FUNCTION DFDA(I, J, L1, L2, M1, M2, R, ALPHA, COSBETA, WHICHINT)
23
24  ! Build derivative defined in PRB 72 165107 eq. (13)
25
26  USE MYPRECISION
27
28  IMPLICIT NONE
29
30  INTEGER :: I, J, L1, L2, M1, M2, MP
31  REAL(LATTEPREC) :: ALPHA, COSBETA, R, DFDA
32  REAL(LATTEPREC), EXTERNAL :: SLMMP, TLMMP, AM, BM, WIGNERD, UNIVSCALE
33  REAL(LATTEPREC), EXTERNAL :: DSLMMPDA, DTLMMPDA
34  CHARACTER(LEN=1) :: WHICHINT
35
36  DFDA = TWO * WIGNERD(L1, ABS(M1), 0, COSBETA) * &
37       WIGNERD(L2, ABS(M2), 0, COSBETA) * &
38       UNIVSCALE(I, J, L1, L2, 0, R, WHICHINT) * &
39       (ABS(M1) * BM(M1, ALPHA) * AM(M2, ALPHA) + ABS(M2) * &
40       AM(M1, ALPHA) * BM(M2, ALPHA))
41
42  DO MP = 1, MIN(L1, L2)
43
44     DFDA = DFDA + (DSLMMPDA(L1, M1, MP, ALPHA, COSBETA) * &
45          SLMMP(L2, M2, MP, ALPHA, COSBETA) + &
46          SLMMP(L1, M1, MP, ALPHA, COSBETA) * &
47          DSLMMPDA(L2, M2, MP, ALPHA, COSBETA) + &
48          DTLMMPDA(L1, M1, MP, ALPHA, COSBETA) * &
49          TLMMP(L2, M2, MP, ALPHA, COSBETA) + &
50          TLMMP(L1, M1, MP, ALPHA, COSBETA) * &
51          DTLMMPDA(L2, M2, MP, ALPHA, COSBETA)) * &
52          UNIVSCALE(I, J, L1, L2, MP, R, WHICHINT)
53
54  ENDDO
55
56  RETURN
57
58END FUNCTION DFDA
59