Resets local rows, columns to the correct arrays and values for images.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(dbcsr_type), | intent(inout) | :: | matrix | |||
type(dbcsr_imagedistribution_obj), | intent(inout) | :: | imgdist | |||
logical, | intent(in), | optional | :: | do_rows |
SUBROUTINE dbcsr_reset_vlocals(matrix, imgdist, do_rows)
!! Resets local rows, columns to the correct arrays and values
!! for images.
TYPE(dbcsr_type), INTENT(INOUT) :: matrix
TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT) :: imgdist
LOGICAL, INTENT(IN), OPTIONAL :: do_rows
LOGICAL :: my_do_rows
! ---------------------------------------------------------------------------
CALL dbcsr_release_locals(matrix)
my_do_rows = .TRUE.
IF (PRESENT(do_rows)) my_do_rows = do_rows
! Rows
IF (.NOT. PRESENT(do_rows) .OR. my_do_rows) THEN
CALL dbcsr_get_local_vrows(imgdist, matrix%local_rows, &
matrix%index(dbcsr_slot_home_vprow))
ELSE
matrix%local_rows = imgdist%i%main%d%local_rows
END IF
CALL array_hold(matrix%local_rows)
matrix%has_local_rows = .TRUE.
matrix%nblkrows_local = array_size(matrix%local_rows)
matrix%index(dbcsr_slot_nblkrows_local) = array_size(matrix%local_rows)
CALL dbcsr_get_global_vrow_map(imgdist, matrix%global_rows)
CALL array_hold(matrix%global_rows)
matrix%has_global_rows = .TRUE.
! Columns
IF (.NOT. PRESENT(do_rows) .OR. .NOT. my_do_rows) THEN
CALL dbcsr_get_local_vcols(imgdist, matrix%local_cols, &
matrix%index(dbcsr_slot_home_vpcol))
ELSE
matrix%local_cols = imgdist%i%main%d%local_cols
END IF
CALL array_hold(matrix%local_cols)
matrix%has_local_cols = .TRUE.
matrix%nblkcols_local = array_size(matrix%local_cols)
matrix%index(dbcsr_slot_nblkcols_local) = array_size(matrix%local_cols)
CALL dbcsr_get_global_vcol_map(imgdist, matrix%global_cols)
CALL array_hold(matrix%global_cols)
matrix%has_global_cols = .TRUE.
END SUBROUTINE dbcsr_reset_vlocals