#
# = ALF: a collection of routines for computing associated Legendre polynomials (ALFs)
# ALF is an extension library for GSL to compute associated Legendre polynomials developed by Patrick Alken.
# Ruby/GSL includes interfaces to it if ALF is found during installlation.
#
# The class and method descriptions below are based on references from the document of ALF (alf-1.0/doc/alf.texi) by P.Alken.
#
# == {}[link:index.html"name="1] Module structure
# * GSL::ALF (module)
# * GSL::ALF::Workspace (Class)
#
# == {}[link:index.html"name="2] Creating ALF workspace
# ---
# * GSL::ALF::Workspace.alloc(lmax)
# * GSL::ALF.alloc(lmax)
#
# Creates a workspace for computing associated Legendre polynomials (ALFs). The maximum ALF degree is specified by lmax. The size of this workspace is O(lmax).
#
# == {}[link:index.html"name="3] Methods
# ---
# * GSL::ALF::Workspace#params(csphase, cnorm, norm)
#
# Sets various parameters for the subsequent computation of ALFs. If
# csphase is set to a non-zero value, the Condon-Shortley phase of
# (-1)^m will be applied to the associated Legendre functions. The
# Condon-Shortley phase is included by default. If cnorm is set to
# zero, the real normalization of the associated Legendre functions will be
# used. The default is to use complex normalization. The norm parameter
# defines the type of normalization which will be used. The possible values
# are as follows.
# * ALF::NORM_SCHMIDT: Schmidt semi-normalized associated Legendre polynomials S_l^m(x). (default)
# * ALF::NORM_SPHARM: Associated Legendre polynomials Y_l^m(x) suitable for the calculation of spherical harmonics.
# * ALF::NORM_ORTHO: Fully orthonormalized associated Legendre polynomials N_l^m(x).
# * ALF::NORM_NONE:: Unnormalized associated Legendre polynomials P_l^m(x).
# ---
# * GSL::ALF::Workspace#Plm_array(x)
# * GSL::ALF::Workspace#Plm_array(lmax, x)
# * GSL::ALF::Workspace#Plm_array(x, result)
# * GSL::ALF::Workspace#Plm_array(lmax, x, result)
# * GSL::ALF::Workspace#Plm_array(x, result, deriv)
# * GSL::ALF::Workspace#Plm_array(lmax, x, result, deriv)
#
# Compute all associated Legendre polynomials P_l^m(x) and optionally their
# first derivatives dP_l^m(x)/dx for 0 <= l <= lmax, 0 <= m <= l. The value
# of lmax cannot exceed the previously specified lmax parameter to
# ALF.alloc, but may be less. If lmax is not given, the
# parameter to ALF.alloc() is used. The results are stored in
# result, an instance of GSL::Vector. Note that this vector
# must have enough length to store all the values for the polynomial
# P_l^m(x), and the length required can be known using
# ALF::array_size(lmax). If a vector is not given, a new vector is
# created and returned.
#
# The indices of result (and deriv corresponding to the
# associated Legendre function of degree l and order m can
# be obtained by calling ALF::array_index(l, m).
# ---
# * GSL::ALF::Workspace#Plm_deriv_array(x)
# * GSL::ALF::Workspace#Plm_deriv_array(lmax, x)
# * GSL::ALF::Workspace#Plm_deriv_array(x, result, deriv)
# * GSL::ALF::Workspace#Plm_deriv_array(lmax, x, result, deriv)
#
# Compute all associated Legendre polynomials P_l^m(x) and their first
# derivatives dP_l^m(x)/dx for 0 <= l <= lmax, 0 <= m <= l.
#
# ---
# * GSL::ALF::array_size(lmax)
#
# Returns the size of arrays needed for the array versions of P_l^m(x).
# ---
# * GSL::ALF::array_index(l, m)
#
# Returns the array index of results of Plm_array() and
# Plm_deriv_array() corresponding to P_l^m(x) and dP_l^m(x)/dx
# respectively. The index is given by l(l + 1)/2 + m.
#
#