Compute step size for center and forward difference calculations.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | itype |
Finite difference method being used.
|
||
integer, | intent(in) | :: | k |
Index into |
||
real(kind=wp), | intent(in) | :: | betak |
|
||
real(kind=wp), | intent(in) | :: | ssf(k) |
Scale used for the |
||
real(kind=wp), | intent(in) | :: | stpb(k) |
Relative step used for computing finite difference derivatives with respect
to |
||
integer, | intent(in) | :: | neta |
Number of good digits in the function results. |
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
real(kind=wp), | public | :: | typj |
real(wp) pure function derstep(itype, k, betak, ssf, stpb, neta) result(res) !! Compute step size for center and forward difference calculations. use odrpack_kinds, only: zero, one integer, intent(in) :: itype !! Finite difference method being used. !! `0`: Forward finite differences. !! `1`: Central finite differences. integer, intent(in) :: k !! Index into `beta` where `betak` resides. real(wp), intent(in) :: betak !! `k`-th function parameter. real(wp), intent(in) :: ssf(k) !! Scale used for the `beta`s. real(wp), intent(in) :: stpb(k) !! Relative step used for computing finite difference derivatives with respect !! to `beta`. integer, intent(in) :: neta !! Number of good digits in the function results. ! Local scalars real(wp) :: typj ! Variable definitions (alphabetically) ! TYPJ: The typical size of the J-th unkonwn BETA. if (betak == zero) then if (ssf(1) < zero) then typj = 1/abs(ssf(1)) else typj = 1/ssf(k) end if else typj = abs(betak) end if res = sign(one, betak)*typj*hstep(itype, neta, 1, k, stpb, 1) end function derstep