Initializes one work matrix
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(dbcsr_work_type), | intent(out) | :: | wm |
initialized work matrix |
||
integer, | intent(in) | :: | data_type | |||
integer, | intent(in), | optional | :: | nblks_guess |
estimated number of blocks estimated size of data |
|
integer, | intent(in), | optional | :: | sizedata_guess |
estimated number of blocks estimated size of data |
|
type(dbcsr_memtype_type), | intent(in), | optional | :: | memory_type |
SUBROUTINE dbcsr_init_wm(wm, data_type, nblks_guess, sizedata_guess, memory_type) !! Initializes one work matrix TYPE(dbcsr_work_type), INTENT(OUT) :: wm !! initialized work matrix INTEGER, INTENT(IN) :: data_type INTEGER, INTENT(IN), OPTIONAL :: nblks_guess, sizedata_guess !! estimated number of blocks !! estimated size of data TYPE(dbcsr_memtype_type), INTENT(IN), OPTIONAL :: memory_type CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_init_wm' INTEGER :: handle, nblks, stat ! --------------------------------------------------------------------------- IF (careful_mod) CALL timeset(routineN, handle) wm%lastblk = 0 wm%datasize = 0 ! Index IF (PRESENT(nblks_guess)) THEN nblks = nblks_guess IF (nblks_guess < 0) & DBCSR_ABORT("Can not have negative block count.") ALLOCATE (wm%row_i(nblks), stat=stat) IF (stat /= 0) DBCSR_ABORT("wm%row_i") ALLOCATE (wm%col_i(nblks), stat=stat) IF (stat /= 0) DBCSR_ABORT("wm%col_i") ALLOCATE (wm%blk_p(nblks), stat=stat) IF (stat /= 0) DBCSR_ABORT("wm%blk_p") ELSE NULLIFY (wm%row_i, wm%col_i, wm%blk_p) !nblks = CEILING (REAL (matrix%nblkrows_local * matrix%nblkcols_local)& ! / REAL (dbcsr_mp_numnodes (dbcsr_distribution_mp (matrix%dist)))) END IF ! Data CALL dbcsr_data_init(wm%data_area) IF (PRESENT(sizedata_guess)) THEN IF (sizedata_guess < 0) & DBCSR_ABORT("Can not have negative data size.") CALL dbcsr_data_new(wm%data_area, data_type, & data_size=sizedata_guess, memory_type=memory_type) ELSE CALL dbcsr_data_new(wm%data_area, data_type, memory_type=memory_type) END IF CALL dbcsr_mutable_init(wm%mutable) IF (careful_mod) CALL timestop(handle) END SUBROUTINE dbcsr_init_wm