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