Set relative step size for finite difference derivatives.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | itype |
Finite difference method being used.
|
||
integer, | intent(in) | :: | neta |
Number of good digits in the function results. |
||
integer, | intent(in) | :: | i |
Identifier for selecting user-supplied step sizes. |
||
integer, | intent(in) | :: | j |
Identifier for selecting user-supplied step sizes. |
||
real(kind=wp), | intent(in) | :: | stp(ldstp,j) |
Step size for the finite difference derivative. |
||
integer, | intent(in) | :: | ldstp |
Leading dimension of array |
real(wp) pure function hstep(itype, neta, i, j, stp, ldstp) result(res) !! Set relative step size for finite difference derivatives. use odrpack_kinds, only: zero, two, three, ten integer, intent(in) :: itype !! Finite difference method being used. !! `0`: Forward finite differences. !! `1`: Central finite differences. integer, intent(in) :: neta !! Number of good digits in the function results. integer, intent(in) :: i !! Identifier for selecting user-supplied step sizes. integer, intent(in) :: j !! Identifier for selecting user-supplied step sizes. real(wp), intent(in) :: stp(ldstp, j) !! Step size for the finite difference derivative. integer, intent(in) :: ldstp !! Leading dimension of array `stp`. if (stp(1, 1) <= zero) then if (itype == 0) then ! Use default forward finite difference step size res = ten**(-abs(neta)/two - two) else ! Use default central finite difference step size res = ten**(-abs(neta)/three) end if elseif (ldstp == 1) then res = stp(1, j) else res = stp(i, j) end if end function hstep