The main documentation of the VeryClose_Real Procedure contains additional explanation of this code listing.
define([VERY_CLOSE_ROUTINE],[
pushdef([DIM], [$1])
pushdef([VeryClose_Real_DIM], expand(VeryClose_Real_DIM))
function VeryClose_Real_DIM (X, Y) result(VeryClose)
! Use association for numbers.
use Caesar_Numbers_Module, only: two, ten
! Input variables.
type(real,DIM,np), intent(in) :: X, Y ! Variables to be checked.
! Output variable.
type(logical) :: VeryClose ! Result of check.
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Verify requirements.
VERIFY(ALL(SHAPE(X)==SHAPE(Y)),5) ! X and Y are conformable.
! VeryClose is true if X and Y are within 10 SPACING's of each other.
VeryClose = ALL(ABS(X - Y) < ten*SPACING((X+Y)/two))
! Verify guarantees -- none.
return
end function VeryClose_Real_DIM
popdef([DIM])
popdef([VeryClose_Real_DIM])
])
forloop([Dim],[0],[7],[
VERY_CLOSE_ROUTINE(Dim)
])