Boundary checks can clamp a requested index so an array access stays inside valid limits.

Program

Play the program to choose an index and see how the boundary rule protects the lookup.

clamped_index.f90
program clamped_index_demo
    implicit none
    integer :: values(4)
    integer :: raw_index
    integer :: used_index
    integer :: picked

    values = [10, 20, 30, 40]
    raw_index = 
    used_index = max(1, min(raw_index, 4))
    picked = values(used_index)
    print '(I0, 1X, I0, 1X, I0)', raw_index, used_index, picked
end program clamped_index_demo
program clamped_index_demo
    implicit none
    integer :: values(4)
    integer :: raw_index
    integer :: used_index
    integer :: picked

    values = [10, 20, 30, 40]
    raw_index = 
    used_index = max(1, min(raw_index, 4))
    picked = values(used_index)
    print '(I0, 1X, I0, 1X, I0)', raw_index, used_index, picked
end program clamped_index_demo
program clamped_index_demo
    implicit none
    integer :: values(4)
    integer :: raw_index
    integer :: used_index
    integer :: picked

    values = [10, 20, 30, 40]
    raw_index = 
    used_index = max(1, min(raw_index, 4))
    picked = values(used_index)
    print '(I0, 1X, I0, 1X, I0)', raw_index, used_index, picked
end program clamped_index_demo
boundary Valid array positions are bounded by the first and last index.
clamp `max(1, min(raw_index, 4))` keeps the index inside `1..4`.
safe lookup The lookup uses `used_index`, not the unchecked requested index.