| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer(kind=ip), | intent(in) | :: | n | |||
| real(kind=rp), | intent(in) | :: | x(:) | |||
| integer(kind=ip), | intent(in) | :: | incx |
function jdamax( n, x, incx ) result(iAmax) integer(ip), intent(in) :: n, incx real(rp), intent(in) :: x(:) integer(ip) :: iAmax !=========================================================================== ! jdamax does the same as idamax in most cases. ! jdamax > 0 if x contains normal values. ! jdamax = 0 if n = 0. ! jdamax < 0 means x(-jdamax) contains the first NaN or Inf. ! ! 29 Jul 2003: First version of jdamax implemented for s5setx. ! 29 Jul 2003: Current version of jdamax ! 15 Mar 2008: First f90 version. !=========================================================================== intrinsic :: huge integer(ip) :: i, ix, kmax real(rp) :: dmax, xi real(rp), parameter :: realmax = huge(realmax) if (n < 1) then iAmax = 0 return end if dmax = zero ix = 1 kmax = 1 do i = 1, n xi = abs( x(ix) ) if (xi <= realmax) then ! false if xi = Nan or Inf if (dmax < xi) then dmax = xi kmax = ix end if else go to 800 end if ix = ix + incx end do iAmax = kmax return 800 iAmax = -ix end function jdamax