1MODULE spherical_harmonics
2  INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND ( 14, 200 )
3CONTAINS
4  FUNCTION dlegendre (x, l, m) RESULT (dplm)
5  SELECT CASE ( l )
6  CASE ( 0 )
7    dplm = 0.0_dp
8  CASE ( 1 )
9    dplm = 1.0_dp
10  CASE DEFAULT
11    IF ( mm > 0 ) THEN
12      dpmm = -m
13      DO im = 1, mm
14        dpmm = -dpmm
15      END DO
16      IF ( l == mm + 1 ) THEN
17        DO il = mm + 2, l
18          dpll = dpmm
19        END DO
20        dplm = dpll
21      END IF
22    END IF
23  END SELECT
24  END FUNCTION dlegendre
25END MODULE spherical_harmonics
26