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