!-*-f90-*-
!
! API: Complex numbers
! (internal conversion routines)
!
!> \page "Comments on complex numbers"
!> Please go to api/complex.finc for the API documentation.
!>
!> Since the Fortran standard provides extensive support for complex
!> numbers, ony those routines for which no Fortran intrinsic is
!> available are mapped in FGSL. Instead of an argument
!> of type gsl_complex
, a standard Fortran
!> complex(fgsl_double)
is used for all mapped functions.
function fgsl_complex_arg(z)
complex(fgsl_double_complex), intent(in) :: z
real(fgsl_double) :: fgsl_complex_arg
!
type(gsl_complex) :: zz
zz = z
fgsl_complex_arg = gsl_complex_arg(zz)
end function fgsl_complex_arg
function fgsl_complex_logabs(z)
complex(fgsl_double_complex), intent(in) :: z
real(fgsl_double) :: fgsl_complex_logabs
!
type(gsl_complex) :: zz
zz = z
fgsl_complex_logabs = gsl_complex_logabs(zz)
end function fgsl_complex_logabs
function fgsl_complex_log10(z)
complex(fgsl_double_complex), intent(in) :: z
complex(fgsl_double_complex) :: fgsl_complex_log10
!
type(gsl_complex) :: zz
zz = z
fgsl_complex_log10 = gsl_complex_log10(zz)
end function fgsl_complex_log10
function fgsl_complex_log_b(z,b)
complex(fgsl_double_complex), intent(in) :: z, b
complex(fgsl_double_complex) :: fgsl_complex_log_b
!
type(gsl_complex) :: zz, bb
zz = z
bb = b
fgsl_complex_log_b = gsl_complex_log_b(zz, bb)
end function fgsl_complex_log_b
function fgsl_complex_arcsin(z)
complex(fgsl_double_complex), intent(in) :: z
complex(fgsl_double_complex) :: fgsl_complex_arcsin
!
type(gsl_complex) :: zz
zz = z
fgsl_complex_arcsin = gsl_complex_arcsin(zz)
end function fgsl_complex_arcsin
function fgsl_complex_arcsin_real(r)
real(fgsl_double), intent(in) :: r
complex(fgsl_double_complex) :: fgsl_complex_arcsin_real
fgsl_complex_arcsin_real = gsl_complex_arcsin_real(r)
end function fgsl_complex_arcsin_real
function fgsl_complex_arccos(z)
complex(fgsl_double_complex), intent(in) :: z
complex(fgsl_double_complex) :: fgsl_complex_arccos
!
type(gsl_complex) :: zz
zz = z
fgsl_complex_arccos = gsl_complex_arccos(zz)
end function fgsl_complex_arccos
function fgsl_complex_arccos_real(r)
real(fgsl_double), intent(in) :: r
complex(fgsl_double_complex) :: fgsl_complex_arccos_real
fgsl_complex_arccos_real = gsl_complex_arccos_real(r)
end function fgsl_complex_arccos_real
function fgsl_complex_arctan(z)
complex(fgsl_double_complex), intent(in) :: z
complex(fgsl_double_complex) :: fgsl_complex_arctan
!
type(gsl_complex) :: zz
zz = z
fgsl_complex_arctan = gsl_complex_arctan(zz)
end function fgsl_complex_arctan
function fgsl_complex_arcsec(z)
complex(fgsl_double_complex), intent(in) :: z
complex(fgsl_double_complex) :: fgsl_complex_arcsec
!
type(gsl_complex) :: zz
zz = z
fgsl_complex_arcsec = gsl_complex_arcsec(zz)
end function fgsl_complex_arcsec
function fgsl_complex_arcsec_real(r)
real(fgsl_double), intent(in) :: r
complex(fgsl_double_complex) :: fgsl_complex_arcsec_real
fgsl_complex_arcsec_real = gsl_complex_arcsec_real(r)
end function fgsl_complex_arcsec_real
function fgsl_complex_arccsc(z)
complex(fgsl_double_complex), intent(in) :: z
complex(fgsl_double_complex) :: fgsl_complex_arccsc
!
type(gsl_complex) :: zz
zz = z
fgsl_complex_arccsc = gsl_complex_arccsc(zz)
end function fgsl_complex_arccsc
function fgsl_complex_arccsc_real(r)
real(fgsl_double), intent(in) :: r
complex(fgsl_double_complex) :: fgsl_complex_arccsc_real
fgsl_complex_arccsc_real = gsl_complex_arccsc_real(r)
end function fgsl_complex_arccsc_real
function fgsl_complex_arccot(z)
complex(fgsl_double_complex), intent(in) :: z
complex(fgsl_double_complex) :: fgsl_complex_arccot
!
type(gsl_complex) :: zz
zz = z
fgsl_complex_arccot = gsl_complex_arccot(zz)
end function fgsl_complex_arccot
function fgsl_complex_arcsinh(z)
complex(fgsl_double_complex), intent(in) :: z
complex(fgsl_double_complex) :: fgsl_complex_arcsinh
!
type(gsl_complex) :: zz
zz = z
fgsl_complex_arcsinh = gsl_complex_arcsinh(zz)
end function fgsl_complex_arcsinh
function fgsl_complex_arccosh(z)
complex(fgsl_double_complex), intent(in) :: z
complex(fgsl_double_complex) :: fgsl_complex_arccosh
!
type(gsl_complex) :: zz
zz = z
fgsl_complex_arccosh = gsl_complex_arccosh(zz)
end function fgsl_complex_arccosh
function fgsl_complex_arccosh_real(r)
real(fgsl_double), intent(in) :: r
complex(fgsl_double_complex) :: fgsl_complex_arccosh_real
fgsl_complex_arccosh_real = gsl_complex_arccosh_real(r)
end function fgsl_complex_arccosh_real
function fgsl_complex_arctanh(z)
complex(fgsl_double_complex), intent(in) :: z
complex(fgsl_double_complex) :: fgsl_complex_arctanh
!
type(gsl_complex) :: zz
zz = z
fgsl_complex_arctanh = gsl_complex_arctanh(zz)
end function fgsl_complex_arctanh
function fgsl_complex_arctanh_real(r)
real(fgsl_double), intent(in) :: r
complex(fgsl_double_complex) :: fgsl_complex_arctanh_real
fgsl_complex_arctanh_real = gsl_complex_arctanh_real(r)
end function fgsl_complex_arctanh_real
function fgsl_complex_arcsech(z)
complex(fgsl_double_complex), intent(in) :: z
complex(fgsl_double_complex) :: fgsl_complex_arcsech
!
type(gsl_complex) :: zz
zz = z
fgsl_complex_arcsech = gsl_complex_arcsech(zz)
end function fgsl_complex_arcsech
function fgsl_complex_arccsch(z)
complex(fgsl_double_complex), intent(in) :: z
complex(fgsl_double_complex) :: fgsl_complex_arccsch
!
type(gsl_complex) :: zz
zz = z
fgsl_complex_arccsch = gsl_complex_arccsch(zz)
end function fgsl_complex_arccsch
function fgsl_complex_arccoth(z)
complex(fgsl_double_complex), intent(in) :: z
complex(fgsl_double_complex) :: fgsl_complex_arccoth
!
type(gsl_complex) :: zz
zz = z
fgsl_complex_arccoth = gsl_complex_arccoth(zz)
end function fgsl_complex_arccoth
!
elemental subroutine fgsl_complex_to_complex(result, source)
complex(fgsl_double_complex), intent(out) :: result
type(gsl_complex), intent(in) :: source
result = source%dat(1) + (0.0_fgsl_double, 1.0_fgsl_double) * source%dat(2)
end subroutine fgsl_complex_to_complex
elemental subroutine complex_to_fgsl_complex(result, source)
type(gsl_complex), intent(out) :: result
complex(fgsl_double_complex), intent(in) :: source
result%dat(1) = real(source)
result%dat(2) = aimag(source)
end subroutine complex_to_fgsl_complex