Performs quick finalization of matrix The data area from the work matrix is accepted as the new matrix's data area and the index is built from the work matrix.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(dbcsr_type), | intent(inout) | :: | matrix |
matrix to finalize |
SUBROUTINE quick_finalize(matrix)
!! Performs quick finalization of matrix
!! The data area from the work matrix is accepted as the new matrix's data
!! area and the index is built from the work matrix.
TYPE(dbcsr_type), INTENT(INOUT) :: matrix
!! matrix to finalize
CHARACTER(len=*), PARAMETER :: routineN = 'quick_finalize'
INTEGER :: error_handle, nblks, nrows
! ---------------------------------------------------------------------------
CALL timeset(routineN, error_handle)
!$OMP SECTIONS
!$OMP SECTION
nblks = matrix%wms(1)%lastblk
nrows = matrix%nblkrows_total
CALL dbcsr_sort_indices(nblks, &
matrix%wms(1)%row_i, &
matrix%wms(1)%col_i, &
matrix%wms(1)%blk_p)
CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_row_p)
CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_col_i)
CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_blk_p)
CALL dbcsr_addto_index_array(matrix, dbcsr_slot_row_p, &
reservation=nrows + 1, extra=2*nblks)
CALL dbcsr_make_dbcsr_index(matrix%row_p, matrix%wms(1)%row_i, &
nrows, nblks)
CALL dbcsr_addto_index_array(matrix, dbcsr_slot_col_i, &
DATA=matrix%wms(1)%col_i(1:nblks))
CALL dbcsr_addto_index_array(matrix, dbcsr_slot_blk_p, &
DATA=matrix%wms(1)%blk_p(1:nblks))
matrix%nblks = nblks
matrix%nze = matrix%wms(1)%datasize
matrix%index(dbcsr_slot_nblks) = nblks
matrix%index(dbcsr_slot_nze) = matrix%wms(1)%datasize
CALL dbcsr_repoint_index(matrix)
!$OMP SECTION
CALL dbcsr_switch_data_area(matrix, matrix%wms(1)%data_area)
!$OMP END SECTIONS
CALL timestop(error_handle)
END SUBROUTINE quick_finalize