dbcsr_type Derived Type

type, public :: 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.


Components

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


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