SUBROUTINE find_proper_position_caller(iterator, use_ithread)
TYPE(dbcsr_iterator), INTENT(INOUT) :: iterator
INTEGER, INTENT(in), OPTIONAL :: use_ithread
INTEGER :: post_pos, post_row, pre_pos, pre_row, r
pre_row = iterator%row
pre_pos = iterator%pos
IF (.NOT. iterator%local_indexing) THEN
IF (PRESENT(use_ithread)) THEN
CALL find_proper_position(iterator%pos, &
iterator%row, iterator%nblks, iterator%nblkrows_total, &
iterator%blk_p, iterator%row_p, &
tdist=iterator%tdist, tid=use_ithread)
ELSE
CALL find_proper_position(iterator%pos, &
iterator%row, iterator%nblks, iterator%nblkrows_total, &
iterator%blk_p, iterator%row_p)
END IF
ELSE
IF (iterator%row .GT. 0) THEN
r = iterator%global_rows(iterator%row)
ELSE
r = 0
END IF
IF (PRESENT(use_ithread)) THEN
CALL find_proper_position(iterator%pos, &
r, iterator%nblks, SIZE(iterator%local_rows), &
iterator%blk_p, iterator%row_p, &
local2global=iterator%local_rows, &
tdist=iterator%tdist, tid=use_ithread)
ELSE
CALL find_proper_position(iterator%pos, &
r, iterator%nblks, SIZE(iterator%local_rows), &
iterator%blk_p, iterator%row_p, &
local2global=iterator%local_rows)
END IF
IF (r .GT. 0) THEN
iterator%row = iterator%local_rows(r)
ELSE
iterator%row = 0
END IF
END IF
post_row = iterator%row
post_pos = iterator%pos
END SUBROUTINE find_proper_position_caller