Returns the index to a queried block, given a real (stored) row and column
Type  Intent  Optional  Attributes  Name  

type(dbcsr_type),  intent(in)  ::  matrix 
bcsr matrix 

integer,  intent(in)  ::  row 
input is logical row, output is lookup row input is logical column, output is lookup column 

integer,  intent(in)  ::  column 
input is logical row, output is lookup row input is logical column, output is lookup column 

logical,  intent(out)  ::  found 
whether the block was found 

integer,  intent(out)  ::  block_number 
returns the block number of the row and column 

integer,  intent(inout),  optional,  DIMENSION(2)  ::  lb_row_col  
integer,  intent(out),  optional  ::  data_offset 
data offset for the block; 0 if nonexistent 

logical,  intent(out),  optional  ::  transposed 
whether the block is stored transposed according to its position 
PURE SUBROUTINE dbcsr_get_stored_block_info(matrix, row, column, & found, block_number, lb_row_col, data_offset, transposed) !! Returns the index to a queried block, given a real (stored) row and !! column TYPE(dbcsr_type), INTENT(IN) :: matrix !! bcsr matrix INTEGER, INTENT(IN) :: row, column !! input is logical row, output is lookup row !! input is logical column, output is lookup column LOGICAL, INTENT(OUT) :: found !! whether the block was found INTEGER, INTENT(OUT) :: block_number !! returns the block number of the row and column INTEGER, DIMENSION(2), INTENT(INOUT), OPTIONAL :: lb_row_col INTEGER, INTENT(OUT), OPTIONAL :: data_offset !! data offset for the block; 0 if nonexistent LOGICAL, INTENT(OUT), OPTIONAL :: transposed !! whether the block is stored transposed according to its position INTEGER :: blk_last, blk_offset, offset !  IF (ASSOCIATED(matrix%row_p)) THEN blk_last = matrix%row_p(row + 1) blk_offset = 0 IF (blk_last .GT. 0) THEN IF (PRESENT(lb_row_col)) THEN IF (lb_row_col(1) .EQ. row) THEN blk_offset = lb_row_col(2) END IF END IF CALL dbcsr_find_column(column, matrix%row_p(row) + blk_offset + 1, blk_last, & matrix%col_i, matrix%blk_p, & block_number, found) blk_offset = block_number  matrix%row_p(row) ELSE found = .FALSE. END IF IF (PRESENT(lb_row_col)) THEN lb_row_col(1) = row lb_row_col(2) = blk_offset END IF ELSE found = .FALSE. END IF IF (found) THEN IF (PRESENT(data_offset) .OR. PRESENT(transposed)) THEN offset = matrix%blk_p(block_number) END IF IF (PRESENT(data_offset)) THEN data_offset = ABS(offset) END IF IF (PRESENT(transposed)) THEN transposed = offset .LT. 0 END IF ELSE IF (PRESENT(data_offset)) THEN data_offset = 0 END IF IF (PRESENT(transposed)) THEN transposed = .FALSE. END IF END IF END SUBROUTINE dbcsr_get_stored_block_info