!-*-f90-*- ! ! API: Mathematical Functions ! !> \page "Comments on elementary mathematical functions" !> Please go to api/math.finc for the API documentation. !> Note that many of the elementary functions are also available as Fortran !> intrinsics. The file also contains constructors for function objects. function fgsl_isnan(x) real(fgsl_double), intent(in) :: x integer(fgsl_int) :: fgsl_isnan fgsl_isnan = gsl_isnan(x) end function fgsl_isnan function fgsl_isinf(x) real(fgsl_double), intent(in) :: x integer(fgsl_int) :: fgsl_isinf fgsl_isinf = gsl_isinf(x) end function fgsl_isinf function fgsl_finite(x) real(fgsl_double), intent(in) :: x integer(fgsl_int) :: fgsl_finite fgsl_finite = gsl_finite(x) end function fgsl_finite function fgsl_log1p(x) real(fgsl_double), intent(in) :: x real(fgsl_double) :: fgsl_log1p fgsl_log1p = gsl_log1p(x) end function fgsl_log1p function fgsl_expm1(x) real(fgsl_double), intent(in) :: x real(fgsl_double) :: fgsl_expm1 fgsl_expm1 = gsl_expm1(x) end function fgsl_expm1 function fgsl_acosh(x) real(fgsl_double), intent(in) :: x real(fgsl_double) :: fgsl_acosh fgsl_acosh = gsl_acosh(x) end function fgsl_acosh function fgsl_asinh(x) real(fgsl_double), intent(in) :: x real(fgsl_double) :: fgsl_asinh fgsl_asinh = gsl_asinh(x) end function fgsl_asinh function fgsl_atanh(x) real(fgsl_double), intent(in) :: x real(fgsl_double) :: fgsl_atanh fgsl_atanh = gsl_atanh(x) end function fgsl_atanh function fgsl_ldexp(x,e) real(fgsl_double), intent(in) :: x integer(fgsl_int), intent(in) :: e real(fgsl_double) :: fgsl_ldexp fgsl_ldexp = gsl_ldexp(x,e) end function fgsl_ldexp function fgsl_frexp(x,e) real(fgsl_double), intent(in) :: x integer(fgsl_int), intent(out) :: e real(fgsl_double) :: fgsl_frexp fgsl_frexp = gsl_frexp(x,e) end function fgsl_frexp function fgsl_fcmp(x,y,eps) real(fgsl_double), intent(in) :: x, y, eps integer(fgsl_int) :: fgsl_fcmp fgsl_fcmp = gsl_fcmp(x,y,eps) end function fgsl_fcmp !> Constructor for an FGSL function type !> \param func - interface for a double precision valued function with !> a parameter of arbitrary type !> \param params - parameter of arbitrary type !> \result FGSL function object. function fgsl_function_init(func, params) interface function func(x, params) bind(c) use, intrinsic :: iso_c_binding real(c_double), value :: x type(c_ptr), value :: params real(c_double) :: func end function func end interface type(c_ptr), intent(in) :: params type(fgsl_function) :: fgsl_function_init ! type(c_funptr) :: fp fp = c_funloc(func) fgsl_function_init%gsl_function = fgsl_function_cinit(fp, params) end function fgsl_function_init !> Constructor for an FGSL function type including a derivative !> \param f - interface for a double precision valued function with !> a parameter of arbitrary type !> \param df - interface for a function evaluating the derivative of f !> \param fdf - interface for a subroutine evaluating f as well as its !> derivative given an argument and a parameter. !> \param params - parameter of arbitrary type !> \result FGSL function with derivative object. function fgsl_function_fdf_init(f, df, fdf, params) interface function f(x, params) bind(c) use, intrinsic :: iso_c_binding real(c_double), value :: x type(c_ptr), value :: params real(c_double) :: f end function f function df(x, params) bind(c) use, intrinsic :: iso_c_binding real(c_double), value :: x type(c_ptr), value :: params real(c_double) :: df end function df subroutine fdf(x, params, f, df) bind(c) use, intrinsic :: iso_c_binding real(c_double), value :: x type(c_ptr), value :: params real(c_double), intent(out) :: f, df end subroutine fdf end interface type(c_ptr), intent(in) :: params type(fgsl_function_fdf) :: fgsl_function_fdf_init ! type(c_funptr) :: fp, dfp, fdfp fp = c_funloc(f) dfp = c_funloc(df) fdfp = c_funloc(fdf) fgsl_function_fdf_init%gsl_function_fdf = fgsl_function_fdf_cinit(fp, dfp, fdfp, params) end function fgsl_function_fdf_init !> Free resources associated with a FGSL function object. subroutine fgsl_function_free(sfunc) type(fgsl_function), intent(inout) :: sfunc call fgsl_function_cfree(sfunc%gsl_function) end subroutine fgsl_function_free !> Free resources associated with a FGSL function with derivative object. subroutine fgsl_function_fdf_free(sfunc) type(fgsl_function_fdf), intent(inout) :: sfunc call fgsl_function_fdf_cfree(sfunc%gsl_function_fdf) end subroutine fgsl_function_fdf_free !> Evaluate a function value for a FGSL function object. !> \param sfunc - function object. !> \param x - argument value !> \result Function value function fgsl_fn_eval(sfunc, x) type(fgsl_function), intent(inout) :: sfunc real(fgsl_double), intent(in) :: x real(fgsl_double) :: fgsl_fn_eval fgsl_fn_eval = fgsl_fn_eval_aux(sfunc%gsl_function, x) end function fgsl_fn_eval !> Evaluate a function value for a FGSL function with derivative object. !> \param sfunc - function with derivative object. !> \param x - argument value !> \result Function value function fgsl_fn_fdf_eval_f(sfunc, x) type(fgsl_function_fdf), intent(inout) :: sfunc real(fgsl_double), intent(in) :: x real(fgsl_double) :: fgsl_fn_fdf_eval_f fgsl_fn_fdf_eval_f = fgsl_fn_fdf_eval_f_aux(sfunc%gsl_function_fdf, x) end function fgsl_fn_fdf_eval_f !> Evaluate a derivative value for a FGSL function with derivative object. !> \param sfunc - function with derivative object. !> \param x - argument value !> \result Derivative value function fgsl_fn_fdf_eval_df(sfunc, x) type(fgsl_function_fdf), intent(inout) :: sfunc real(fgsl_double), intent(in) :: x real(fgsl_double) :: fgsl_fn_fdf_eval_df fgsl_fn_fdf_eval_df = fgsl_fn_fdf_eval_df_aux(sfunc%gsl_function_fdf, x) end function fgsl_fn_fdf_eval_df !> Evaluate function as well as derivative value for a FGSL function with derivative object. !> \param sfunc - function with derivative object. !> \param x - argument value !> \param y - function value !> \param dy - derivative value subroutine fgsl_fn_fdf_eval_f_df(sfunc, x, y, dy) type(fgsl_function_fdf), intent(inout) :: sfunc real(fgsl_double), intent(in) :: x real(fgsl_double), intent(out) :: y, dy call fgsl_fn_fdf_eval_f_df_aux(sfunc%gsl_function_fdf, x, y, dy) end subroutine fgsl_fn_fdf_eval_f_df