Gets information about a matrix
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(dbcsr_type), | intent(in) | :: | matrix |
matrix to query |
||
integer, | intent(out), | optional | :: | nblkrows_total | ||
integer, | intent(out), | optional | :: | nblkcols_total | ||
integer, | intent(out), | optional | :: | nfullrows_total | ||
integer, | intent(out), | optional | :: | nfullcols_total | ||
integer, | intent(out), | optional | :: | nblkrows_local | ||
integer, | intent(out), | optional | :: | nblkcols_local | ||
integer, | intent(out), | optional | :: | nfullrows_local | ||
integer, | intent(out), | optional | :: | nfullcols_local | ||
integer, | intent(out), | optional | :: | my_prow | ||
integer, | intent(out), | optional | :: | my_pcol | ||
integer, | optional, | DIMENSION(:), POINTER | :: | local_rows | ||
integer, | optional, | DIMENSION(:), POINTER | :: | local_cols | ||
integer, | optional, | DIMENSION(:), POINTER | :: | proc_row_dist | ||
integer, | optional, | DIMENSION(:), POINTER | :: | proc_col_dist | ||
integer, | optional, | DIMENSION(:), POINTER | :: | row_blk_size | ||
integer, | optional, | DIMENSION(:), POINTER | :: | col_blk_size | ||
integer, | optional, | DIMENSION(:), POINTER | :: | row_blk_offset | ||
integer, | optional, | DIMENSION(:), POINTER | :: | col_blk_offset | ||
type(dbcsr_distribution_obj), | intent(out), | optional | :: | distribution |
the data distribution of the matrix |
|
character(len=*), | intent(out), | optional | :: | name |
matrix name |
|
type(dbcsr_data_obj), | intent(out), | optional | :: | data_area |
data_area |
|
character(len=1), | optional | :: | matrix_type |
matrix type (regular, symmetric, see dbcsr_types.F for values) |
||
integer, | optional | :: | data_type |
data type (single/double precision real/complex) |
||
type(mp_comm_type), | intent(out), | optional | :: | group |
SUBROUTINE dbcsr_get_info(matrix, nblkrows_total, nblkcols_total, & nfullrows_total, nfullcols_total, & nblkrows_local, nblkcols_local, & nfullrows_local, nfullcols_local, & my_prow, my_pcol, & local_rows, local_cols, proc_row_dist, proc_col_dist, & row_blk_size, col_blk_size, row_blk_offset, col_blk_offset, distribution, name, data_area, & matrix_type, data_type, group) !! Gets information about a matrix TYPE(dbcsr_type), INTENT(IN) :: matrix !! matrix to query INTEGER, INTENT(OUT), OPTIONAL :: nblkrows_total, nblkcols_total, nfullrows_total, & nfullcols_total, nblkrows_local, nblkcols_local, nfullrows_local, nfullcols_local, & my_prow, my_pcol INTEGER, DIMENSION(:), OPTIONAL, POINTER :: local_rows, local_cols, proc_row_dist, & proc_col_dist, row_blk_size, col_blk_size, row_blk_offset, col_blk_offset TYPE(dbcsr_distribution_obj), INTENT(OUT), & OPTIONAL :: distribution !! the data distribution of the matrix CHARACTER(len=*), INTENT(OUT), OPTIONAL :: name !! matrix name TYPE(dbcsr_data_obj), INTENT(OUT), OPTIONAL :: data_area !! data_area CHARACTER, OPTIONAL :: matrix_type !! matrix type (regular, symmetric, see dbcsr_types.F for values) INTEGER, OPTIONAL :: data_type !! data type (single/double precision real/complex) TYPE(mp_comm_type), INTENT(OUT), OPTIONAL :: group ! --------------------------------------------------------------------------- !vw avoid massive printing of warnings !DBCSR_WARN("Invalid matrix") IF (PRESENT(nblkrows_total)) nblkrows_total = matrix%nblkrows_total IF (PRESENT(nblkcols_total)) nblkcols_total = matrix%nblkcols_total IF (PRESENT(nfullrows_total)) nfullrows_total = matrix%nfullrows_total IF (PRESENT(nfullcols_total)) nfullcols_total = matrix%nfullcols_total IF (PRESENT(nblkrows_local)) nblkrows_local = matrix%nblkrows_local IF (PRESENT(nblkcols_local)) nblkcols_local = matrix%nblkcols_local IF (PRESENT(nfullrows_local)) nfullrows_local = matrix%nfullrows_local IF (PRESENT(nfullcols_local)) nfullcols_local = matrix%nfullcols_local IF (PRESENT(row_blk_size)) row_blk_size => array_data(matrix%row_blk_size) IF (PRESENT(col_blk_size)) col_blk_size => array_data(matrix%col_blk_size) IF (PRESENT(row_blk_offset)) row_blk_offset => array_data(matrix%row_blk_offset) IF (PRESENT(col_blk_offset)) col_blk_offset => array_data(matrix%col_blk_offset) IF (PRESENT(distribution)) distribution = matrix%dist IF (PRESENT(name)) name = matrix%name IF (PRESENT(data_area)) data_area = matrix%data_area IF (PRESENT(data_type)) data_type = matrix%data_type IF (PRESENT(local_rows)) local_rows => dbcsr_distribution_local_rows(matrix%dist) IF (PRESENT(local_cols)) local_cols => dbcsr_distribution_local_cols(matrix%dist) IF (PRESENT(proc_row_dist)) proc_row_dist => dbcsr_distribution_row_dist(matrix%dist) IF (PRESENT(proc_col_dist)) proc_col_dist => dbcsr_distribution_col_dist(matrix%dist) IF (PRESENT(my_prow)) my_prow = dbcsr_mp_myprow(dbcsr_distribution_mp(matrix%dist)) IF (PRESENT(my_pcol)) my_pcol = dbcsr_mp_mypcol(dbcsr_distribution_mp(matrix%dist)) IF (PRESENT(matrix_type)) matrix_type = dbcsr_get_matrix_type(matrix) IF (PRESENT(group)) group = dbcsr_mp_group(matrix%dist%d%mp_env) ! a shortcut !IF (PRESENT(matrix_type)) THEN ! matrix_type = dbcsr_get_matrix_type(matrix) ! IF (matrix_type .EQ. dbcsr_type_invalid) & ! DBCSR_ABORT("Incorrect symmetry") !ENDIF END SUBROUTINE dbcsr_get_info