MODULE spherical_harmonics INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND ( 14, 200 ) CONTAINS FUNCTION dlegendre (x, l, m) RESULT (dplm) SELECT CASE ( l ) CASE ( 0 ) dplm = 0.0_dp CASE ( 1 ) dplm = 1.0_dp CASE DEFAULT IF ( mm > 0 ) THEN dpmm = -m DO im = 1, mm dpmm = -dpmm END DO IF ( l == mm + 1 ) THEN DO il = mm + 2, l dpll = dpmm END DO dplm = dpll END IF END IF END SELECT END FUNCTION dlegendre END MODULE spherical_harmonics