!-*-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