The BCSR sparse matrix type.
arrays data and index hold the bulk of the data.
Note
the pointers row_p, col_i, blk_p point into the index array.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | public | :: | serial_number | = | -1 |
a unique number of each created matrix |
|
logical, | public | :: | valid | = | .FALSE. |
whether the matrix is valid (consistent) |
|
character(len=default_string_length), | public | :: | name | = | "" |
name of the matrix |
|
type(dbcsr_data_obj), | public | :: | data_area | = | dbcsr_data_obj() | ||
integer, | public, | DIMENSION(:), POINTER, CONTIGUOUS | :: | index | => | Null() |
agglomeration of the indices and offsets of pointers into this array. |
integer, | public, | DIMENSION(:), POINTER | :: | row_p | => | Null() |
points into the col_i and blk_p arrays, each element (1:nblkrows_total+1) points to the previous row's last element. So each rows has elements row_p(row)+1:row_p(row+1). |
integer, | public, | DIMENSION(:), POINTER | :: | col_i | => | Null() |
the global blocked column number of this block. |
integer, | public, | DIMENSION(:), POINTER | :: | blk_p | => | Null() |
the pointer into the data array of this block. |
integer, | public, | DIMENSION(:), POINTER | :: | thr_c | => | Null() |
elements/thread for list index |
integer, | public, | DIMENSION(:), POINTER | :: | coo_l | => | Null() |
coordinate list (used for direct indexing) |
type(array_i1d_obj), | public | :: | row_blk_size | = | array_i1d_obj() |
sizes (rows in a block) of blocked rows |
|
type(array_i1d_obj), | public | :: | col_blk_size | = | array_i1d_obj() |
sizes (columns in a block) of blocked columns |
|
type(array_i1d_obj), | public | :: | row_blk_offset | = | array_i1d_obj() |
row offset (size = nrow+1) |
|
type(array_i1d_obj), | public | :: | col_blk_offset | = | array_i1d_obj() |
col offset (size = ncol+1) |
|
type(array_i1d_obj), | public | :: | local_rows | = | array_i1d_obj() |
Map of global to local rows when local indexing is enabled |
|
type(array_i1d_obj), | public | :: | global_rows | = | array_i1d_obj() | ||
type(array_i1d_obj), | public | :: | local_cols | = | array_i1d_obj() | ||
type(array_i1d_obj), | public | :: | global_cols | = | array_i1d_obj() | ||
logical, | public | :: | has_local_rows | = | .FALSE. | ||
logical, | public | :: | has_global_rows | = | .FALSE. | ||
logical, | public | :: | has_local_cols | = | .FALSE. | ||
logical, | public | :: | has_global_cols | = | .FALSE. | ||
integer, | public | :: | max_rbs | = | -1 |
maximal row sizes |
|
integer, | public | :: | max_cbs | = | -1 |
maximal column sizes |
|
integer, | public | :: | sparsity_id | = | -1 | ||
integer, | public | :: | id_nr | = | -1 | ||
integer, | public | :: | nblks | = | -1 |
number of blocks locally present |
|
integer, | public | :: | nze | = | -1 |
number of non-zero elements locally present |
|
integer, | public | :: | nblkrows_total | = | -1 |
size of entire matrix in blocked rows |
|
integer, | public | :: | nblkcols_total | = | -1 |
size of entire matrix in blocked columns |
|
integer, | public | :: | nfullrows_total | = | -1 |
size of entire matrix in full rows |
|
integer, | public | :: | nfullcols_total | = | -1 |
size of entire matrix in full columns |
|
integer, | public | :: | nblkrows_local | = | -1 |
size of local part of matrix in blocked rows |
|
integer, | public | :: | nblkcols_local | = | -1 |
size of local part of matrix in blocked columns |
|
integer, | public | :: | nfullrows_local | = | -1 |
size of local part of matrix in full rows |
|
integer, | public | :: | nfullcols_local | = | -1 |
size of local part of matrix in full columns |
|
integer, | public | :: | data_type | = | -1 |
'r'/'R' for single/double precision real or 'c'/'C' for single/double precision complex data |
|
character(len=1), | public | :: | replication_type | = | "" |
multi-process replication used in the matrix |
|
logical, | public | :: | symmetry | = | .FALSE. |
matrix has symmetry |
|
logical, | public | :: | negate_real | = | .FALSE. |
symmetry is realized by negating the real part |
|
logical, | public | :: | negate_imaginary | = | .FALSE. |
symmetry is realized by negating complex part (i.e., antisymmetric) |
|
logical, | public | :: | bcsc | = | .FALSE. |
BCS Column instead of BCS Row |
|
logical, | public | :: | local_indexing | = | .FALSE. |
Local indexing of rows instead of global indexing. |
|
logical, | public | :: | list_indexing | = | .FALSE. | ||
type(dbcsr_memtype_type), | public | :: | data_memory_type | = | dbcsr_memtype_type() |
memory type for data |
|
type(dbcsr_memtype_type), | public | :: | index_memory_type | = | dbcsr_memtype_type() |
memory type for the index |
|
type(dbcsr_block_buffer_obj), | public | :: | buffers | = | dbcsr_block_buffer_obj() |
Block buffers |
|
type(dbcsr_work_type), | public, | DIMENSION(:), POINTER | :: | wms | => | Null() | |
type(dbcsr_distribution_obj), | public | :: | dist | = | dbcsr_distribution_obj() |
distribution used by this matrix |
|
integer, | public | :: | refcount | = | 0 |
reference count |
|
logical, | public | :: | work_mutable | = | .FALSE. |
uses the mutable data for working and not the append-only data |
TYPE dbcsr_type !! The BCSR sparse matrix type. !! !! arrays data and index hold the bulk of the data. !! @note the pointers row_p, col_i, blk_p point into the index array. !! @endnote INTEGER :: serial_number = -1 !! a unique number of each created matrix LOGICAL :: valid = .FALSE. !! whether the matrix is valid (consistent) CHARACTER(LEN=default_string_length) :: name = "" !! name of the matrix TYPE(dbcsr_data_obj) :: data_area = dbcsr_data_obj() INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: index => Null() !! agglomeration of the indices and offsets of pointers into this array. INTEGER, DIMENSION(:), POINTER :: row_p => Null() !! points into the col_i and blk_p arrays, each element (1:nblkrows_total+1) points to the previous row's last element. So !! each rows has elements row_p(row)+1:row_p(row+1). INTEGER, DIMENSION(:), POINTER :: col_i => Null() !! the global blocked column number of this block. INTEGER, DIMENSION(:), POINTER :: blk_p => Null() !! the pointer into the data array of this block. INTEGER, DIMENSION(:), POINTER :: thr_c => Null() !! elements/thread for list index INTEGER, DIMENSION(:), POINTER :: coo_l => Null() !! coordinate list (used for direct indexing) TYPE(array_i1d_obj) :: row_blk_size = array_i1d_obj() !! sizes (rows in a block) of blocked rows TYPE(array_i1d_obj) :: col_blk_size = array_i1d_obj() !! sizes (columns in a block) of blocked columns TYPE(array_i1d_obj) :: row_blk_offset = array_i1d_obj() !! row offset (size = nrow+1) TYPE(array_i1d_obj) :: col_blk_offset = array_i1d_obj() !! col offset (size = ncol+1) TYPE(array_i1d_obj) :: local_rows = array_i1d_obj() !! Map of global to local rows when local indexing is enabled TYPE(array_i1d_obj) :: global_rows = array_i1d_obj() TYPE(array_i1d_obj) :: local_cols = array_i1d_obj() TYPE(array_i1d_obj) :: global_cols = array_i1d_obj() LOGICAL :: has_local_rows = .FALSE. LOGICAL :: has_global_rows = .FALSE. LOGICAL :: has_local_cols = .FALSE. LOGICAL :: has_global_cols = .FALSE. INTEGER :: max_rbs = -1 !! maximal row sizes INTEGER :: max_cbs = -1 !! maximal column sizes INTEGER :: sparsity_id = -1 INTEGER :: id_nr = -1 ! use in sm_pool INTEGER :: nblks = -1 !! number of blocks locally present INTEGER :: nze = -1 !! number of non-zero elements locally present INTEGER :: nblkrows_total = -1 !! size of entire matrix in blocked rows INTEGER :: nblkcols_total = -1 !! size of entire matrix in blocked columns INTEGER :: nfullrows_total = -1 !! size of entire matrix in full rows INTEGER :: nfullcols_total = -1 !! size of entire matrix in full columns INTEGER :: nblkrows_local = -1 !! size of local part of matrix in blocked rows INTEGER :: nblkcols_local = -1 !! size of local part of matrix in blocked columns INTEGER :: nfullrows_local = -1 !! size of local part of matrix in full rows INTEGER :: nfullcols_local = -1 !! size of local part of matrix in full columns INTEGER :: data_type = -1 !! 'r'/'R' for single/double precision real or 'c'/'C' for single/double precision complex data CHARACTER :: replication_type = "" !! multi-process replication used in the matrix LOGICAL :: symmetry = .FALSE. !! matrix has symmetry LOGICAL :: negate_real = .FALSE. !! symmetry is realized by negating the real part LOGICAL :: negate_imaginary = .FALSE. !! symmetry is realized by negating complex part (i.e., antisymmetric) LOGICAL :: bcsc = .FALSE. !! BCS Column instead of BCS Row LOGICAL :: local_indexing = .FALSE. !! Local indexing of rows instead of global indexing. LOGICAL :: list_indexing = .FALSE. TYPE(dbcsr_memtype_type) :: data_memory_type = dbcsr_memtype_type() !! memory type for data TYPE(dbcsr_memtype_type) :: index_memory_type = dbcsr_memtype_type() !! memory type for the index TYPE(dbcsr_block_buffer_obj) :: buffers = dbcsr_block_buffer_obj() !! Block buffers TYPE(dbcsr_work_type), DIMENSION(:), POINTER :: wms => Null() TYPE(dbcsr_distribution_obj) :: dist = dbcsr_distribution_obj() !! distribution used by this matrix INTEGER :: refcount = 0 !! reference count LOGICAL :: work_mutable = .FALSE. !! uses the mutable data for working and not the append-only data END TYPE dbcsr_type