Determines the effect of limits on a block
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | block_size |
size of block global offset of block lower limit upper limit |
||
integer, | intent(in) | :: | block_offset |
size of block global offset of block lower limit upper limit |
||
integer, | intent(in) | :: | first_limit |
size of block global offset of block lower limit upper limit |
||
integer, | intent(in) | :: | last_limit |
size of block global offset of block lower limit upper limit |
||
integer, | intent(out) | :: | frame_size |
size of block region within the limits starting position of the block region that is within the limits |
||
integer, | intent(out) | :: | frame_offset |
size of block region within the limits starting position of the block region that is within the limits |
ELEMENTAL SUBROUTINE frame_block_limit(block_size, block_offset, & first_limit, last_limit, & frame_size, frame_offset) !! Determines the effect of limits on a block INTEGER, INTENT(IN) :: block_size, block_offset, first_limit, & last_limit !! size of block !! global offset of block !! lower limit !! upper limit INTEGER, INTENT(OUT) :: frame_size, frame_offset !! size of block region within the limits !! starting position of the block region that is within the limits INTEGER :: f, l f = MAX(block_offset, first_limit) l = MIN(block_offset + block_size - 1, last_limit) frame_size = MAX(l - f + 1, 0) frame_offset = MIN(f - block_offset + 1, block_size) END SUBROUTINE frame_block_limit