Count number of images in the product matrix
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | matrix_dense_size_1d |
1D size of the (equivalent) dense matrix Number of row processors Number of column processors |
||
integer, | intent(in) | :: | nblocks |
1D size of the (equivalent) dense matrix Number of row processors Number of column processors |
||
integer, | intent(in) | :: | nprows |
1D size of the (equivalent) dense matrix Number of row processors Number of column processors |
||
integer, | intent(in) | :: | npcols |
1D size of the (equivalent) dense matrix Number of row processors Number of column processors |
Number of images
FUNCTION dbcsr_distribution_get_num_images_1d(matrix_dense_size_1d, nblocks, & nprows, npcols) RESULT(num_images_1d) !! Count number of images in the product matrix INTEGER, INTENT(IN) :: matrix_dense_size_1d, nblocks, nprows, & npcols !! 1D size of the (equivalent) dense matrix !! Number of row processors !! Number of column processors INTEGER :: num_images_1d !! Number of images INTEGER :: lcmv lcmv = lcm(nprows, npcols) num_images_1d = lcmv IF (dbcsr_cfg%num_mult_images%val .GT. 1) THEN num_images_1d = num_images_1d*dbcsr_cfg%num_mult_images%val RETURN END IF IF (matrix_dense_size_1d .EQ. 0) RETURN ! IF (dbcsr_cfg%avg_elements_images%val .GT. 0) THEN num_images_1d = num_images_1d* & CEILING((REAL(matrix_dense_size_1d, KIND=dp)/num_images_1d)/ & SQRT(REAL(dbcsr_cfg%avg_elements_images%val, KIND=dp))) END IF ! limiting # clusters to be close to # atoms IF (num_images_1d .GT. nblocks .AND. nblocks .GT. 0) THEN num_images_1d = CEILING(REAL(nblocks, KIND=dp)/lcmv)*lcmv END IF END FUNCTION dbcsr_distribution_get_num_images_1d