 The code is fairly straightforward:

{exampe {
subroutine find_minimum( params, range, x, func, value )
    type(ANNEALING_PARAMETERS), intent(inout) :: params
    real(wp), dimension(:,:), intent(in)      :: range
    real(wp), dimension(:), intent(inout)     :: x
    real(wp), intent(out)                     :: value

    interface
        function func( x )
            use select_precision
            real(wp), dimension(:), intent(in) :: x
            real(wp)                           :: 