LCOV - code coverage report
Current view: top level - src/dbx - cp_dbcsr_api.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:936074a) Lines: 96.3 % 189 182
Test Date: 2025-12-04 06:27:48 Functions: 91.1 % 56 51

            Line data    Source code
       1              : !--------------------------------------------------------------------------------------------------!
       2              : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3              : !   Copyright 2000-2025 CP2K developers group <https://cp2k.org>                                   !
       4              : !                                                                                                  !
       5              : !   SPDX-License-Identifier: GPL-2.0-or-later                                                      !
       6              : !--------------------------------------------------------------------------------------------------!
       7              : 
       8              : MODULE cp_dbcsr_api
       9              :    USE dbcsr_api,                       ONLY: &
      10              :         convert_csr_to_dbcsr_prv => dbcsr_convert_csr_to_dbcsr, &
      11              :         convert_dbcsr_to_csr_prv => dbcsr_convert_dbcsr_to_csr, dbcsr_add_prv => dbcsr_add, &
      12              :         dbcsr_binary_read_prv => dbcsr_binary_read, dbcsr_binary_write_prv => dbcsr_binary_write, &
      13              :         dbcsr_clear_mempools, dbcsr_clear_prv => dbcsr_clear, &
      14              :         dbcsr_complete_redistribute_prv => dbcsr_complete_redistribute, &
      15              :         dbcsr_convert_offsets_to_sizes, dbcsr_convert_sizes_to_offsets, &
      16              :         dbcsr_copy_prv => dbcsr_copy, dbcsr_create_prv => dbcsr_create, dbcsr_csr_create, &
      17              :         dbcsr_csr_create_from_dbcsr_prv => dbcsr_csr_create_from_dbcsr, &
      18              :         dbcsr_csr_dbcsr_blkrow_dist, dbcsr_csr_destroy, dbcsr_csr_eqrow_floor_dist, &
      19              :         dbcsr_csr_p_type, dbcsr_csr_print_sparsity, dbcsr_csr_type, &
      20              :         dbcsr_csr_type_real_8 => dbcsr_type_real_8, dbcsr_csr_write, &
      21              :         dbcsr_desymmetrize_prv => dbcsr_desymmetrize, dbcsr_distribute_prv => dbcsr_distribute, &
      22              :         dbcsr_distribution_get_num_images, dbcsr_distribution_get_prv => dbcsr_distribution_get, &
      23              :         dbcsr_distribution_hold_prv => dbcsr_distribution_hold, &
      24              :         dbcsr_distribution_new_prv => dbcsr_distribution_new, &
      25              :         dbcsr_distribution_release_prv => dbcsr_distribution_release, &
      26              :         dbcsr_distribution_type_prv => dbcsr_distribution_type, dbcsr_dot_prv => dbcsr_dot, &
      27              :         dbcsr_filter_prv => dbcsr_filter, dbcsr_finalize_lib, &
      28              :         dbcsr_finalize_prv => dbcsr_finalize, dbcsr_get_block_p_prv => dbcsr_get_block_p, &
      29              :         dbcsr_get_data_p_prv => dbcsr_get_data_p, dbcsr_get_data_size_prv => dbcsr_get_data_size, &
      30              :         dbcsr_get_default_config, dbcsr_get_info_prv => dbcsr_get_info, &
      31              :         dbcsr_get_matrix_type_prv => dbcsr_get_matrix_type, &
      32              :         dbcsr_get_num_blocks_prv => dbcsr_get_num_blocks, &
      33              :         dbcsr_get_occupation_prv => dbcsr_get_occupation, &
      34              :         dbcsr_get_stored_coordinates_prv => dbcsr_get_stored_coordinates, &
      35              :         dbcsr_has_symmetry_prv => dbcsr_has_symmetry, dbcsr_init_lib, &
      36              :         dbcsr_iterator_blocks_left_prv => dbcsr_iterator_blocks_left, &
      37              :         dbcsr_iterator_next_block_prv => dbcsr_iterator_next_block, &
      38              :         dbcsr_iterator_start_prv => dbcsr_iterator_start, &
      39              :         dbcsr_iterator_stop_prv => dbcsr_iterator_stop, &
      40              :         dbcsr_iterator_type_prv => dbcsr_iterator_type, &
      41              :         dbcsr_mp_grid_setup_prv => dbcsr_mp_grid_setup, dbcsr_multiply_prv => dbcsr_multiply, &
      42              :         dbcsr_no_transpose, dbcsr_print_config, dbcsr_print_statistics, &
      43              :         dbcsr_put_block_prv => dbcsr_put_block, dbcsr_release_prv => dbcsr_release, &
      44              :         dbcsr_replicate_all_prv => dbcsr_replicate_all, &
      45              :         dbcsr_reserve_blocks_prv => dbcsr_reserve_blocks, dbcsr_reset_randmat_seed, &
      46              :         dbcsr_run_tests, dbcsr_scale_prv => dbcsr_scale, dbcsr_set_config, &
      47              :         dbcsr_set_prv => dbcsr_set, dbcsr_sum_replicated_prv => dbcsr_sum_replicated, &
      48              :         dbcsr_test_mm, dbcsr_transpose, dbcsr_transposed_prv => dbcsr_transposed, &
      49              :         dbcsr_type_antisymmetric, dbcsr_type_complex_8, dbcsr_type_no_symmetry, &
      50              :         dbcsr_type_prv => dbcsr_type, dbcsr_type_real_8, dbcsr_type_symmetric, &
      51              :         dbcsr_valid_index_prv => dbcsr_valid_index, &
      52              :         dbcsr_verify_matrix_prv => dbcsr_verify_matrix, dbcsr_work_create_prv => dbcsr_work_create
      53              :    USE dbm_api,                         ONLY: &
      54              :         dbm_add, dbm_clear, dbm_copy, dbm_distribution_obj, dbm_iterator, dbm_redistribute, &
      55              :         dbm_scale, dbm_type, dbm_zero
      56              :    USE kinds,                           ONLY: dp,&
      57              :                                               int_8
      58              :    USE mathconstants,                   ONLY: gaussi,&
      59              :                                               z_one
      60              :    USE message_passing,                 ONLY: mp_comm_type
      61              : #include "../base/base_uses.f90"
      62              : 
      63              :    IMPLICIT NONE
      64              :    PRIVATE
      65              : 
      66              :    ! constants
      67              :    PUBLIC :: dbcsr_type_no_symmetry
      68              :    PUBLIC :: dbcsr_type_symmetric
      69              :    PUBLIC :: dbcsr_type_antisymmetric
      70              :    PUBLIC :: dbcsr_transpose
      71              :    PUBLIC :: dbcsr_no_transpose
      72              : 
      73              :    ! types
      74              :    PUBLIC :: dbcsr_type
      75              :    PUBLIC :: dbcsr_p_type
      76              :    PUBLIC :: dbcsr_distribution_type
      77              :    PUBLIC :: dbcsr_iterator_type
      78              : 
      79              :    ! lib init/finalize
      80              :    PUBLIC :: dbcsr_clear_mempools
      81              :    PUBLIC :: dbcsr_init_lib
      82              :    PUBLIC :: dbcsr_finalize_lib
      83              :    PUBLIC :: dbcsr_set_config
      84              :    PUBLIC :: dbcsr_get_default_config
      85              :    PUBLIC :: dbcsr_print_config
      86              :    PUBLIC :: dbcsr_reset_randmat_seed
      87              :    PUBLIC :: dbcsr_mp_grid_setup
      88              :    PUBLIC :: dbcsr_print_statistics
      89              : 
      90              :    ! create / release
      91              :    PUBLIC :: dbcsr_distribution_hold
      92              :    PUBLIC :: dbcsr_distribution_release
      93              :    PUBLIC :: dbcsr_distribution_new
      94              :    PUBLIC :: dbcsr_create
      95              :    PUBLIC :: dbcsr_init_p
      96              :    PUBLIC :: dbcsr_release
      97              :    PUBLIC :: dbcsr_release_p
      98              :    PUBLIC :: dbcsr_deallocate_matrix
      99              : 
     100              :    ! primitive matrix operations
     101              :    PUBLIC :: dbcsr_set
     102              :    PUBLIC :: dbcsr_add
     103              :    PUBLIC :: dbcsr_scale
     104              :    PUBLIC :: dbcsr_transposed
     105              :    PUBLIC :: dbcsr_multiply
     106              :    PUBLIC :: dbcsr_copy
     107              :    PUBLIC :: dbcsr_desymmetrize
     108              :    PUBLIC :: dbcsr_filter
     109              :    PUBLIC :: dbcsr_complete_redistribute
     110              :    PUBLIC :: dbcsr_reserve_blocks
     111              :    PUBLIC :: dbcsr_put_block
     112              :    PUBLIC :: dbcsr_get_block_p
     113              :    PUBLIC :: dbcsr_get_readonly_block_p
     114              :    PUBLIC :: dbcsr_clear
     115              : 
     116              :    ! iterator
     117              :    PUBLIC :: dbcsr_iterator_start
     118              :    PUBLIC :: dbcsr_iterator_readonly_start
     119              :    PUBLIC :: dbcsr_iterator_stop
     120              :    PUBLIC :: dbcsr_iterator_blocks_left
     121              :    PUBLIC :: dbcsr_iterator_next_block
     122              : 
     123              :    ! getters
     124              :    PUBLIC :: dbcsr_get_info
     125              :    PUBLIC :: dbcsr_distribution_get
     126              :    PUBLIC :: dbcsr_get_matrix_type
     127              :    PUBLIC :: dbcsr_get_occupation
     128              :    PUBLIC :: dbcsr_get_num_blocks
     129              :    PUBLIC :: dbcsr_get_data_size
     130              :    PUBLIC :: dbcsr_has_symmetry
     131              :    PUBLIC :: dbcsr_get_stored_coordinates
     132              :    PUBLIC :: dbcsr_valid_index
     133              : 
     134              :    ! work operations
     135              :    PUBLIC :: dbcsr_work_create
     136              :    PUBLIC :: dbcsr_verify_matrix
     137              :    PUBLIC :: dbcsr_get_data_p
     138              :    PUBLIC :: dbcsr_finalize
     139              : 
     140              :    ! replication
     141              :    PUBLIC :: dbcsr_replicate_all
     142              :    PUBLIC :: dbcsr_sum_replicated
     143              :    PUBLIC :: dbcsr_distribute
     144              : 
     145              :    ! misc
     146              :    PUBLIC :: dbcsr_distribution_get_num_images
     147              :    PUBLIC :: dbcsr_convert_offsets_to_sizes
     148              :    PUBLIC :: dbcsr_convert_sizes_to_offsets
     149              :    PUBLIC :: dbcsr_run_tests
     150              :    PUBLIC :: dbcsr_test_mm
     151              :    PUBLIC :: dbcsr_dot_threadsafe
     152              : 
     153              :    ! csr conversion
     154              :    PUBLIC :: dbcsr_csr_type
     155              :    PUBLIC :: dbcsr_csr_p_type
     156              :    PUBLIC :: dbcsr_convert_csr_to_dbcsr
     157              :    PUBLIC :: dbcsr_convert_dbcsr_to_csr
     158              :    PUBLIC :: dbcsr_csr_create_from_dbcsr
     159              :    PUBLIC :: dbcsr_csr_destroy
     160              :    PUBLIC :: dbcsr_csr_create
     161              :    PUBLIC :: dbcsr_csr_eqrow_floor_dist
     162              :    PUBLIC :: dbcsr_csr_dbcsr_blkrow_dist
     163              :    PUBLIC :: dbcsr_csr_print_sparsity
     164              :    PUBLIC :: dbcsr_csr_write
     165              :    PUBLIC :: dbcsr_csr_create_and_convert_complex
     166              :    PUBLIC :: dbcsr_csr_type_real_8
     167              : 
     168              :    ! binary io
     169              :    PUBLIC :: dbcsr_binary_write
     170              :    PUBLIC :: dbcsr_binary_read
     171              : 
     172              :    TYPE dbcsr_p_type
     173              :       TYPE(dbcsr_type), POINTER :: matrix => Null()
     174              :    END TYPE dbcsr_p_type
     175              : 
     176              :    TYPE dbcsr_type
     177              :       PRIVATE
     178              :       TYPE(dbcsr_type_prv)  :: dbcsr = dbcsr_type_prv()
     179              :       TYPE(dbm_type) :: dbm = dbm_type()
     180              :    END TYPE dbcsr_type
     181              : 
     182              :    TYPE dbcsr_distribution_type
     183              :       PRIVATE
     184              :       TYPE(dbcsr_distribution_type_prv) :: dbcsr = dbcsr_distribution_type_prv()
     185              :       TYPE(dbm_distribution_obj)        :: dbm = dbm_distribution_obj()
     186              :    END TYPE dbcsr_distribution_type
     187              : 
     188              :    TYPE dbcsr_iterator_type
     189              :       PRIVATE
     190              :       TYPE(dbcsr_iterator_type_prv)  :: dbcsr = dbcsr_iterator_type_prv()
     191              :       TYPE(dbm_iterator) :: dbm = dbm_iterator()
     192              :    END TYPE dbcsr_iterator_type
     193              : 
     194              :    INTERFACE dbcsr_create
     195              :       MODULE PROCEDURE dbcsr_create_new, dbcsr_create_template
     196              :    END INTERFACE
     197              : 
     198              :    LOGICAL, PARAMETER, PRIVATE :: USE_DBCSR_BACKEND = .TRUE.
     199              : 
     200              : CONTAINS
     201              : 
     202              : ! **************************************************************************************************
     203              : !> \brief ...
     204              : !> \param matrix ...
     205              : ! **************************************************************************************************
     206       319793 :    SUBROUTINE dbcsr_init_p(matrix)
     207              :       TYPE(dbcsr_type), POINTER                          :: matrix
     208              : 
     209       319793 :       IF (ASSOCIATED(matrix)) THEN
     210        22322 :          CALL dbcsr_release(matrix)
     211        22322 :          DEALLOCATE (matrix)
     212              :       END IF
     213              : 
     214       319793 :       ALLOCATE (matrix)
     215       319793 :    END SUBROUTINE dbcsr_init_p
     216              : 
     217              : ! **************************************************************************************************
     218              : !> \brief ...
     219              : !> \param matrix ...
     220              : ! **************************************************************************************************
     221       223368 :    SUBROUTINE dbcsr_release_p(matrix)
     222              :       TYPE(dbcsr_type), POINTER                          :: matrix
     223              : 
     224       223368 :       IF (ASSOCIATED(matrix)) THEN
     225       222628 :          CALL dbcsr_release(matrix)
     226       222628 :          DEALLOCATE (matrix)
     227              :       END IF
     228       223368 :    END SUBROUTINE dbcsr_release_p
     229              : 
     230              : ! **************************************************************************************************
     231              : !> \brief ...
     232              : !> \param matrix ...
     233              : ! **************************************************************************************************
     234      1327545 :    SUBROUTINE dbcsr_deallocate_matrix(matrix)
     235              :       TYPE(dbcsr_type), POINTER                          :: matrix
     236              : 
     237      1327545 :       CALL dbcsr_release(matrix)
     238      1327545 :       IF (dbcsr_valid_index(matrix)) &
     239              :          CALL cp_abort(__LOCATION__, &
     240              :                        'You should not "deallocate" a referenced matrix. '// &
     241            0 :                        'Avoid pointers to DBCSR matrices.')
     242      1327545 :       DEALLOCATE (matrix)
     243      1327545 :    END SUBROUTINE dbcsr_deallocate_matrix
     244              : 
     245              : ! **************************************************************************************************
     246              : !> \brief ...
     247              : !> \param matrix_a ...
     248              : !> \param matrix_b ...
     249              : !> \param alpha_scalar ...
     250              : !> \param beta_scalar ...
     251              : ! **************************************************************************************************
     252      2064866 :    SUBROUTINE dbcsr_add(matrix_a, matrix_b, alpha_scalar, beta_scalar)
     253              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_a
     254              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix_b
     255              :       REAL(kind=dp), INTENT(IN)                          :: alpha_scalar, beta_scalar
     256              : 
     257              :       IF (USE_DBCSR_BACKEND) THEN
     258      2064866 :          CALL dbcsr_add_prv(matrix_a%dbcsr, matrix_b%dbcsr, alpha_scalar, beta_scalar)
     259              :       ELSE
     260              :          IF (alpha_scalar /= 1.0_dp .OR. beta_scalar /= 1.0_dp) CPABORT("Not yet implemented for DBM.")
     261              :          CALL dbm_add(matrix_a%dbm, matrix_b%dbm)
     262              :       END IF
     263      2064866 :    END SUBROUTINE dbcsr_add
     264              : 
     265              : ! **************************************************************************************************
     266              : !> \brief ...
     267              : !> \param filepath ...
     268              : !> \param distribution ...
     269              : !> \param matrix_new ...
     270              : ! **************************************************************************************************
     271           36 :    SUBROUTINE dbcsr_binary_read(filepath, distribution, matrix_new)
     272              :       CHARACTER(len=*), INTENT(IN)                       :: filepath
     273              :       TYPE(dbcsr_distribution_type), INTENT(IN)          :: distribution
     274              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_new
     275              : 
     276           36 :       IF (USE_DBCSR_BACKEND) THEN
     277              :          CALL dbcsr_binary_read_prv(filepath, distribution%dbcsr, matrix_new%dbcsr)
     278              :       ELSE
     279              :          CPABORT("Not yet implemented for DBM.")
     280              :       END IF
     281           36 :    END SUBROUTINE dbcsr_binary_read
     282              : 
     283              : ! **************************************************************************************************
     284              : !> \brief ...
     285              : !> \param matrix ...
     286              : !> \param filepath ...
     287              : ! **************************************************************************************************
     288          278 :    SUBROUTINE dbcsr_binary_write(matrix, filepath)
     289              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
     290              :       CHARACTER(LEN=*), INTENT(IN)                       :: filepath
     291              : 
     292          278 :       IF (USE_DBCSR_BACKEND) THEN
     293              :          CALL dbcsr_binary_write_prv(matrix%dbcsr, filepath)
     294              :       ELSE
     295              :          CPABORT("Not yet implemented for DBM.")
     296              :       END IF
     297          278 :    END SUBROUTINE dbcsr_binary_write
     298              : 
     299              : ! **************************************************************************************************
     300              : !> \brief ...
     301              : !> \param matrix ...
     302              : ! **************************************************************************************************
     303       113590 :    SUBROUTINE dbcsr_clear(matrix)
     304              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
     305              : 
     306       113590 :       IF (USE_DBCSR_BACKEND) THEN
     307              :          CALL dbcsr_clear_prv(matrix%dbcsr)
     308              :       ELSE
     309              :          CALL dbm_clear(matrix%dbm)
     310              :       END IF
     311       113590 :    END SUBROUTINE dbcsr_clear
     312              : 
     313              : ! **************************************************************************************************
     314              : !> \brief ...
     315              : !> \param matrix ...
     316              : !> \param redist ...
     317              : ! **************************************************************************************************
     318      2165089 :    SUBROUTINE dbcsr_complete_redistribute(matrix, redist)
     319              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
     320              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: redist
     321              : 
     322      2165089 :       IF (USE_DBCSR_BACKEND) THEN
     323              :          CALL dbcsr_complete_redistribute_prv(matrix%dbcsr, redist%dbcsr)
     324              :       ELSE
     325              :          CALL dbm_redistribute(matrix%dbm, redist%dbm)
     326              :       END IF
     327      2165089 :    END SUBROUTINE dbcsr_complete_redistribute
     328              : 
     329              : ! **************************************************************************************************
     330              : !> \brief ...
     331              : !> \param dbcsr_mat ...
     332              : !> \param csr_mat ...
     333              : ! **************************************************************************************************
     334            0 :    SUBROUTINE dbcsr_convert_csr_to_dbcsr(dbcsr_mat, csr_mat)
     335              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: dbcsr_mat
     336              :       TYPE(dbcsr_csr_type), INTENT(INOUT)                :: csr_mat
     337              : 
     338            0 :       IF (USE_DBCSR_BACKEND) THEN
     339              :          CALL convert_csr_to_dbcsr_prv(dbcsr_mat%dbcsr, csr_mat)
     340              :       ELSE
     341              :          CPABORT("Not yet implemented for DBM.")
     342              :       END IF
     343            0 :    END SUBROUTINE dbcsr_convert_csr_to_dbcsr
     344              : 
     345              : ! **************************************************************************************************
     346              : !> \brief ...
     347              : !> \param dbcsr_mat ...
     348              : !> \param csr_mat ...
     349              : ! **************************************************************************************************
     350          142 :    SUBROUTINE dbcsr_convert_dbcsr_to_csr(dbcsr_mat, csr_mat)
     351              :       TYPE(dbcsr_type), INTENT(IN)                       :: dbcsr_mat
     352              :       TYPE(dbcsr_csr_type), INTENT(INOUT)                :: csr_mat
     353              : 
     354          142 :       IF (USE_DBCSR_BACKEND) THEN
     355              :          CALL convert_dbcsr_to_csr_prv(dbcsr_mat%dbcsr, csr_mat)
     356              :       ELSE
     357              :          CPABORT("Not yet implemented for DBM.")
     358              :       END IF
     359          142 :    END SUBROUTINE dbcsr_convert_dbcsr_to_csr
     360              : 
     361              : ! **************************************************************************************************
     362              : !> \brief ...
     363              : !> \param matrix_b ...
     364              : !> \param matrix_a ...
     365              : !> \param name ...
     366              : !> \param keep_sparsity ...
     367              : !> \param keep_imaginary ...
     368              : ! **************************************************************************************************
     369      3967557 :    SUBROUTINE dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
     370              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_b
     371              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a
     372              :       CHARACTER(LEN=*), INTENT(IN), OPTIONAL             :: name
     373              :       LOGICAL, INTENT(IN), OPTIONAL                      :: keep_sparsity, keep_imaginary
     374              : 
     375              :       IF (USE_DBCSR_BACKEND) THEN
     376              :          CALL dbcsr_copy_prv(matrix_b%dbcsr, matrix_a%dbcsr, name=name, &
     377      6940865 :                              keep_sparsity=keep_sparsity, keep_imaginary=keep_imaginary)
     378              :       ELSE
     379              :          IF (PRESENT(name) .OR. PRESENT(keep_sparsity) .OR. PRESENT(keep_imaginary)) THEN
     380              :             CPABORT("Not yet implemented for DBM.")
     381              :          END IF
     382              :          CALL dbm_copy(matrix_b%dbm, matrix_a%dbm)
     383              :       END IF
     384      3967557 :    END SUBROUTINE dbcsr_copy
     385              : 
     386              : ! **************************************************************************************************
     387              : !> \brief ...
     388              : !> \param matrix ...
     389              : !> \param name ...
     390              : !> \param dist ...
     391              : !> \param matrix_type ...
     392              : !> \param row_blk_size ...
     393              : !> \param col_blk_size ...
     394              : !> \param reuse_arrays ...
     395              : !> \param mutable_work ...
     396              : ! **************************************************************************************************
     397      4470505 :    SUBROUTINE dbcsr_create_new(matrix, name, dist, matrix_type, row_blk_size, col_blk_size, &
     398              :                                reuse_arrays, mutable_work)
     399              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
     400              :       CHARACTER(len=*), INTENT(IN)                       :: name
     401              :       TYPE(dbcsr_distribution_type), INTENT(IN)          :: dist
     402              :       CHARACTER, INTENT(IN)                              :: matrix_type
     403              :       INTEGER, DIMENSION(:), INTENT(INOUT), POINTER      :: row_blk_size, col_blk_size
     404              :       LOGICAL, INTENT(IN), OPTIONAL                      :: reuse_arrays, mutable_work
     405              : 
     406              :       IF (USE_DBCSR_BACKEND) THEN
     407              :          CALL dbcsr_create_prv(matrix=matrix%dbcsr, name=name, dist=dist%dbcsr, &
     408              :                                matrix_type=matrix_type, row_blk_size=row_blk_size, &
     409              :                                col_blk_size=col_blk_size, nze=0, data_type=dbcsr_type_real_8, &
     410      4470505 :                                reuse_arrays=reuse_arrays, mutable_work=mutable_work)
     411              :       ELSE
     412              :          CPABORT("Not yet implemented for DBM.")
     413              :       END IF
     414      4470505 :    END SUBROUTINE dbcsr_create_new
     415              : 
     416              : ! **************************************************************************************************
     417              : !> \brief ...
     418              : !> \param matrix ...
     419              : !> \param name ...
     420              : !> \param template ...
     421              : !> \param dist ...
     422              : !> \param matrix_type ...
     423              : !> \param row_blk_size ...
     424              : !> \param col_blk_size ...
     425              : !> \param reuse_arrays ...
     426              : !> \param mutable_work ...
     427              : ! **************************************************************************************************
     428      2458650 :    SUBROUTINE dbcsr_create_template(matrix, name, template, dist, matrix_type, &
     429              :                                     row_blk_size, col_blk_size, reuse_arrays, mutable_work)
     430              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
     431              :       CHARACTER(len=*), INTENT(IN), OPTIONAL             :: name
     432              :       TYPE(dbcsr_type), INTENT(IN)                       :: template
     433              :       TYPE(dbcsr_distribution_type), INTENT(IN), &
     434              :          OPTIONAL                                        :: dist
     435              :       CHARACTER, INTENT(IN), OPTIONAL                    :: matrix_type
     436              :       INTEGER, DIMENSION(:), INTENT(INOUT), OPTIONAL, &
     437              :          POINTER                                         :: row_blk_size, col_blk_size
     438              :       LOGICAL, INTENT(IN), OPTIONAL                      :: reuse_arrays, mutable_work
     439              : 
     440              :       IF (USE_DBCSR_BACKEND) THEN
     441      2458650 :          IF (PRESENT(dist)) THEN
     442              :             CALL dbcsr_create_prv(matrix=matrix%dbcsr, name=name, template=template%dbcsr, &
     443              :                                   dist=dist%dbcsr, matrix_type=matrix_type, &
     444              :                                   row_blk_size=row_blk_size, col_blk_size=col_blk_size, &
     445              :                                   nze=0, data_type=dbcsr_type_real_8, reuse_arrays=reuse_arrays, &
     446        33610 :                                   mutable_work=mutable_work)
     447              :          ELSE
     448              :             CALL dbcsr_create_prv(matrix=matrix%dbcsr, name=name, template=template%dbcsr, &
     449              :                                   matrix_type=matrix_type, &
     450              :                                   row_blk_size=row_blk_size, col_blk_size=col_blk_size, &
     451              :                                   nze=0, data_type=dbcsr_type_real_8, reuse_arrays=reuse_arrays, &
     452      4725980 :                                   mutable_work=mutable_work)
     453              :          END IF
     454              :       ELSE
     455              :          CPABORT("Not yet implemented for DBM.")
     456              :       END IF
     457      2458650 :    END SUBROUTINE dbcsr_create_template
     458              : 
     459              : ! **************************************************************************************************
     460              : !> \brief ...
     461              : !> \param dbcsr_mat ...
     462              : !> \param csr_mat ...
     463              : !> \param dist_format ...
     464              : !> \param csr_sparsity ...
     465              : !> \param numnodes ...
     466              : ! **************************************************************************************************
     467          142 :    SUBROUTINE dbcsr_csr_create_from_dbcsr(dbcsr_mat, csr_mat, dist_format, csr_sparsity, numnodes)
     468              : 
     469              :       TYPE(dbcsr_type), INTENT(IN)                       :: dbcsr_mat
     470              :       TYPE(dbcsr_csr_type), INTENT(OUT)                  :: csr_mat
     471              :       INTEGER                                            :: dist_format
     472              :       TYPE(dbcsr_type), INTENT(IN), OPTIONAL             :: csr_sparsity
     473              :       INTEGER, INTENT(IN), OPTIONAL                      :: numnodes
     474              : 
     475              :       IF (USE_DBCSR_BACKEND) THEN
     476          142 :          IF (PRESENT(csr_sparsity)) THEN
     477              :             CALL dbcsr_csr_create_from_dbcsr_prv(dbcsr_mat%dbcsr, csr_mat, dist_format, &
     478            0 :                                                  csr_sparsity%dbcsr, numnodes)
     479              :          ELSE
     480              :             CALL dbcsr_csr_create_from_dbcsr_prv(dbcsr_mat%dbcsr, csr_mat, &
     481          142 :                                                  dist_format, numnodes=numnodes)
     482              :          END IF
     483              :       ELSE
     484              :          CPABORT("Not yet implemented for DBM.")
     485              :       END IF
     486          142 :    END SUBROUTINE dbcsr_csr_create_from_dbcsr
     487              : 
     488              : ! **************************************************************************************************
     489              : !> \brief Combines csr_create_from_dbcsr and convert_dbcsr_to_csr to produce a complex CSR matrix.
     490              : !> \param rmatrix Real part of the matrix.
     491              : !> \param imatrix Imaginary part of the matrix.
     492              : !> \param csr_mat The resulting CSR matrix.
     493              : !> \param dist_format ...
     494              : ! **************************************************************************************************
     495          128 :    SUBROUTINE dbcsr_csr_create_and_convert_complex(rmatrix, imatrix, csr_mat, dist_format)
     496              :       TYPE(dbcsr_type), INTENT(IN)                       :: rmatrix, imatrix
     497              :       TYPE(dbcsr_csr_type), INTENT(INOUT)                :: csr_mat
     498              :       INTEGER                                            :: dist_format
     499              : 
     500              :       TYPE(dbcsr_type)                                   :: cmatrix, tmp_matrix
     501              : 
     502              :       IF (USE_DBCSR_BACKEND) THEN
     503           64 :          CALL dbcsr_create_prv(tmp_matrix%dbcsr, template=rmatrix%dbcsr, data_type=dbcsr_type_complex_8)
     504           64 :          CALL dbcsr_create_prv(cmatrix%dbcsr, template=rmatrix%dbcsr, data_type=dbcsr_type_complex_8)
     505           64 :          CALL dbcsr_copy_prv(cmatrix%dbcsr, rmatrix%dbcsr)
     506           64 :          CALL dbcsr_copy_prv(tmp_matrix%dbcsr, imatrix%dbcsr)
     507           64 :          CALL dbcsr_add_prv(cmatrix%dbcsr, tmp_matrix%dbcsr, z_one, gaussi)
     508           64 :          CALL dbcsr_release_prv(tmp_matrix%dbcsr)
     509              :          ! Convert to csr
     510           64 :          CALL dbcsr_csr_create_from_dbcsr_prv(cmatrix%dbcsr, csr_mat, dist_format)
     511           64 :          CALL convert_dbcsr_to_csr_prv(cmatrix%dbcsr, csr_mat)
     512           64 :          CALL dbcsr_release_prv(cmatrix%dbcsr)
     513              :       ELSE
     514              :          CPABORT("Not yet implemented for DBM.")
     515              :       END IF
     516           64 :    END SUBROUTINE dbcsr_csr_create_and_convert_complex
     517              : 
     518              : ! **************************************************************************************************
     519              : !> \brief ...
     520              : !> \param matrix_a ...
     521              : !> \param matrix_b ...
     522              : ! **************************************************************************************************
     523      1235333 :    SUBROUTINE dbcsr_desymmetrize(matrix_a, matrix_b)
     524              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a
     525              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_b
     526              : 
     527      1235333 :       IF (USE_DBCSR_BACKEND) THEN
     528              :          CALL dbcsr_desymmetrize_prv(matrix_a%dbcsr, matrix_b%dbcsr)
     529              :       ELSE
     530              :          CPABORT("Not yet implemented for DBM.")
     531              :       END IF
     532      1235333 :    END SUBROUTINE dbcsr_desymmetrize
     533              : 
     534              : ! **************************************************************************************************
     535              : !> \brief ...
     536              : !> \param matrix ...
     537              : ! **************************************************************************************************
     538        52914 :    SUBROUTINE dbcsr_distribute(matrix)
     539              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
     540              : 
     541        52914 :       IF (USE_DBCSR_BACKEND) THEN
     542              :          CALL dbcsr_distribute_prv(matrix%dbcsr)
     543              :       ELSE
     544              :          CPABORT("Not yet implemented for DBM.")
     545              :       END IF
     546        52914 :    END SUBROUTINE dbcsr_distribute
     547              : 
     548              : ! **************************************************************************************************
     549              : !> \brief ...
     550              : !> \param dist ...
     551              : !> \param row_dist ...
     552              : !> \param col_dist ...
     553              : !> \param nrows ...
     554              : !> \param ncols ...
     555              : !> \param has_threads ...
     556              : !> \param group ...
     557              : !> \param mynode ...
     558              : !> \param numnodes ...
     559              : !> \param nprows ...
     560              : !> \param npcols ...
     561              : !> \param myprow ...
     562              : !> \param mypcol ...
     563              : !> \param pgrid ...
     564              : !> \param subgroups_defined ...
     565              : !> \param prow_group ...
     566              : !> \param pcol_group ...
     567              : ! **************************************************************************************************
     568      7119070 :    SUBROUTINE dbcsr_distribution_get(dist, row_dist, col_dist, nrows, ncols, has_threads, &
     569              :                                      group, mynode, numnodes, nprows, npcols, myprow, mypcol, &
     570              :                                      pgrid, subgroups_defined, prow_group, pcol_group)
     571              :       TYPE(dbcsr_distribution_type), INTENT(IN)          :: dist
     572              :       INTEGER, DIMENSION(:), OPTIONAL, POINTER           :: row_dist, col_dist
     573              :       INTEGER, INTENT(OUT), OPTIONAL                     :: nrows, ncols
     574              :       LOGICAL, INTENT(OUT), OPTIONAL                     :: has_threads
     575              :       INTEGER, INTENT(OUT), OPTIONAL                     :: group, mynode, numnodes, nprows, npcols, &
     576              :                                                             myprow, mypcol
     577              :       INTEGER, DIMENSION(:, :), OPTIONAL, POINTER        :: pgrid
     578              :       LOGICAL, INTENT(OUT), OPTIONAL                     :: subgroups_defined
     579              :       INTEGER, INTENT(OUT), OPTIONAL                     :: prow_group, pcol_group
     580              : 
     581              :       IF (USE_DBCSR_BACKEND) THEN
     582              :          CALL dbcsr_distribution_get_prv(dist%dbcsr, row_dist, col_dist, nrows, ncols, has_threads, &
     583              :                                          group, mynode, numnodes, nprows, npcols, myprow, mypcol, &
     584      7119070 :                                          pgrid, subgroups_defined, prow_group, pcol_group)
     585              :       ELSE
     586              :          CPABORT("Not yet implemented for DBM.")
     587              :       END IF
     588      7119070 :    END SUBROUTINE dbcsr_distribution_get
     589              : 
     590              : ! **************************************************************************************************
     591              : !> \brief ...
     592              : !> \param dist ...
     593              : ! **************************************************************************************************
     594          912 :    SUBROUTINE dbcsr_distribution_hold(dist)
     595              :       TYPE(dbcsr_distribution_type)                      :: dist
     596              : 
     597          912 :       IF (USE_DBCSR_BACKEND) THEN
     598              :          CALL dbcsr_distribution_hold_prv(dist%dbcsr)
     599              :       ELSE
     600              :          CPABORT("Not yet implemented for DBM.")
     601              :       END IF
     602          912 :    END SUBROUTINE dbcsr_distribution_hold
     603              : 
     604              : ! **************************************************************************************************
     605              : !> \brief ...
     606              : !> \param dist ...
     607              : !> \param template ...
     608              : !> \param group ...
     609              : !> \param pgrid ...
     610              : !> \param row_dist ...
     611              : !> \param col_dist ...
     612              : !> \param reuse_arrays ...
     613              : ! **************************************************************************************************
     614      4101445 :    SUBROUTINE dbcsr_distribution_new(dist, template, group, pgrid, row_dist, col_dist, reuse_arrays)
     615              :       TYPE(dbcsr_distribution_type), INTENT(OUT)         :: dist
     616              :       TYPE(dbcsr_distribution_type), INTENT(IN), &
     617              :          OPTIONAL                                        :: template
     618              :       INTEGER, INTENT(IN), OPTIONAL                      :: group
     619              :       INTEGER, DIMENSION(:, :), OPTIONAL, POINTER        :: pgrid
     620              :       INTEGER, DIMENSION(:), INTENT(INOUT), POINTER      :: row_dist, col_dist
     621              :       LOGICAL, INTENT(IN), OPTIONAL                      :: reuse_arrays
     622              : 
     623              :       IF (USE_DBCSR_BACKEND) THEN
     624      4101445 :          IF (PRESENT(template)) THEN
     625              :             CALL dbcsr_distribution_new_prv(dist%dbcsr, template%dbcsr, group, pgrid, &
     626      1951548 :                                             row_dist, col_dist, reuse_arrays)
     627              :          ELSE
     628              :             CALL dbcsr_distribution_new_prv(dist%dbcsr, group=group, pgrid=pgrid, &
     629              :                                             row_dist=row_dist, col_dist=col_dist, &
     630      2149897 :                                             reuse_arrays=reuse_arrays)
     631              :          END IF
     632              :       ELSE
     633              :          CPABORT("Not yet implemented for DBM.")
     634              :       END IF
     635      4101445 :    END SUBROUTINE dbcsr_distribution_new
     636              : 
     637              : ! **************************************************************************************************
     638              : !> \brief ...
     639              : !> \param dist ...
     640              : ! **************************************************************************************************
     641      4102357 :    SUBROUTINE dbcsr_distribution_release(dist)
     642              :       TYPE(dbcsr_distribution_type)                      :: dist
     643              : 
     644      4102357 :       IF (USE_DBCSR_BACKEND) THEN
     645              :          CALL dbcsr_distribution_release_prv(dist%dbcsr)
     646              :       ELSE
     647              :          CPABORT("Not yet implemented for DBM.")
     648              :       END IF
     649      4102357 :    END SUBROUTINE dbcsr_distribution_release
     650              : 
     651              : ! **************************************************************************************************
     652              : !> \brief ...
     653              : !> \param matrix ...
     654              : !> \param eps ...
     655              : ! **************************************************************************************************
     656       580343 :    SUBROUTINE dbcsr_filter(matrix, eps)
     657              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
     658              :       REAL(dp), INTENT(IN)                               :: eps
     659              : 
     660       580343 :       IF (USE_DBCSR_BACKEND) THEN
     661              :          CALL dbcsr_filter_prv(matrix%dbcsr, eps)
     662              :       ELSE
     663              :          CPABORT("Not yet implemented for DBM.")
     664              :       END IF
     665       580343 :    END SUBROUTINE dbcsr_filter
     666              : 
     667              : ! **************************************************************************************************
     668              : !> \brief ...
     669              : !> \param matrix ...
     670              : ! **************************************************************************************************
     671      2376231 :    SUBROUTINE dbcsr_finalize(matrix)
     672              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
     673              : 
     674      2376231 :       IF (USE_DBCSR_BACKEND) THEN
     675              :          CALL dbcsr_finalize_prv(matrix%dbcsr)
     676              :       ELSE
     677              :          CPABORT("Not yet implemented for DBM.")
     678              :       END IF
     679      2376231 :    END SUBROUTINE dbcsr_finalize
     680              : 
     681              : ! **************************************************************************************************
     682              : !> \brief ...
     683              : !> \param matrix ...
     684              : !> \param row ...
     685              : !> \param col ...
     686              : !> \param block ...
     687              : !> \param found ...
     688              : !> \param row_size ...
     689              : !> \param col_size ...
     690              : ! **************************************************************************************************
     691    209508126 :    SUBROUTINE dbcsr_get_block_p(matrix, row, col, block, found, row_size, col_size)
     692              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
     693              :       INTEGER, INTENT(IN)                                :: row, col
     694              :       REAL(kind=dp), DIMENSION(:, :), POINTER            :: block
     695              :       LOGICAL, INTENT(OUT)                               :: found
     696              :       INTEGER, INTENT(OUT), OPTIONAL                     :: row_size, col_size
     697              : 
     698              :       IF (USE_DBCSR_BACKEND) THEN
     699    209508126 :          CALL dbcsr_get_block_p_prv(matrix%dbcsr, row, col, block, found, row_size, col_size)
     700              :       ELSE
     701              :          CPABORT("Not yet implemented for DBM.")
     702              :       END IF
     703    209508126 :    END SUBROUTINE dbcsr_get_block_p
     704              : 
     705              : ! **************************************************************************************************
     706              : !> \brief Like dbcsr_get_block_p() but with matrix being INTENT(IN).
     707              : !>        When invoking this routine, the caller promises not to modify the returned block.
     708              : !> \param matrix ...
     709              : !> \param row ...
     710              : !> \param col ...
     711              : !> \param block ...
     712              : !> \param found ...
     713              : !> \param row_size ...
     714              : !> \param col_size ...
     715              : ! **************************************************************************************************
     716     33869065 :    SUBROUTINE dbcsr_get_readonly_block_p(matrix, row, col, block, found, row_size, col_size)
     717              :       TYPE(dbcsr_type), INTENT(IN), TARGET               :: matrix
     718              :       INTEGER, INTENT(IN)                                :: row, col
     719              :       REAL(kind=dp), DIMENSION(:, :), POINTER            :: block
     720              :       LOGICAL, INTENT(OUT)                               :: found
     721              :       INTEGER, INTENT(OUT), OPTIONAL                     :: row_size, col_size
     722              : 
     723              :       TYPE(dbcsr_type), POINTER                          :: matrix_p
     724              : 
     725              :       MARK_USED(matrix)
     726              :       MARK_USED(row)
     727              :       MARK_USED(col)
     728              :       MARK_USED(block)
     729              :       MARK_USED(found)
     730              :       MARK_USED(row_size)
     731              :       MARK_USED(col_size)
     732              :       IF (USE_DBCSR_BACKEND) THEN
     733     33869065 :          matrix_p => matrix ! Hacky workaround to shake the INTENT(IN).
     734     33869065 :          CALL dbcsr_get_block_p_prv(matrix_p%dbcsr, row, col, block, found, row_size, col_size)
     735              :       ELSE
     736              :          CPABORT("Not yet implemented for DBM.")
     737              :       END IF
     738     33869065 :    END SUBROUTINE dbcsr_get_readonly_block_p
     739              : 
     740              : ! **************************************************************************************************
     741              : !> \brief ...
     742              : !> \param matrix ...
     743              : !> \param lb ...
     744              : !> \param ub ...
     745              : !> \return ...
     746              : ! **************************************************************************************************
     747      5393471 :    FUNCTION dbcsr_get_data_p(matrix, lb, ub) RESULT(res)
     748              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
     749              :       INTEGER, INTENT(IN), OPTIONAL                      :: lb, ub
     750              :       REAL(kind=dp), DIMENSION(:), POINTER               :: res
     751              : 
     752              :       IF (USE_DBCSR_BACKEND) THEN
     753      5393471 :          res => dbcsr_get_data_p_prv(matrix%dbcsr, select_data_type=0.0_dp, lb=lb, ub=ub)
     754              :       ELSE
     755              :          CPABORT("Not yet implemented for DBM.")
     756              :       END IF
     757      5393471 :    END FUNCTION dbcsr_get_data_p
     758              : 
     759              : ! **************************************************************************************************
     760              : !> \brief ...
     761              : !> \param matrix ...
     762              : !> \return ...
     763              : ! **************************************************************************************************
     764           92 :    FUNCTION dbcsr_get_data_size(matrix) RESULT(data_size)
     765              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
     766              :       INTEGER                                            :: data_size
     767              : 
     768           92 :       IF (USE_DBCSR_BACKEND) THEN
     769              :          data_size = dbcsr_get_data_size_prv(matrix%dbcsr)
     770              :       ELSE
     771              :          CPABORT("Not yet implemented for DBM.")
     772              :       END IF
     773           92 :    END FUNCTION dbcsr_get_data_size
     774              : 
     775              : ! **************************************************************************************************
     776              : !> \brief ...
     777              : !> \param matrix ...
     778              : !> \param nblkrows_total ...
     779              : !> \param nblkcols_total ...
     780              : !> \param nfullrows_total ...
     781              : !> \param nfullcols_total ...
     782              : !> \param nblkrows_local ...
     783              : !> \param nblkcols_local ...
     784              : !> \param nfullrows_local ...
     785              : !> \param nfullcols_local ...
     786              : !> \param my_prow ...
     787              : !> \param my_pcol ...
     788              : !> \param local_rows ...
     789              : !> \param local_cols ...
     790              : !> \param proc_row_dist ...
     791              : !> \param proc_col_dist ...
     792              : !> \param row_blk_size ...
     793              : !> \param col_blk_size ...
     794              : !> \param row_blk_offset ...
     795              : !> \param col_blk_offset ...
     796              : !> \param distribution ...
     797              : !> \param name ...
     798              : !> \param matrix_type ...
     799              : !> \param group ...
     800              : ! **************************************************************************************************
     801     25641142 :    SUBROUTINE dbcsr_get_info(matrix, nblkrows_total, nblkcols_total, &
     802              :                              nfullrows_total, nfullcols_total, nblkrows_local, nblkcols_local, &
     803              :                              nfullrows_local, nfullcols_local, my_prow, my_pcol, &
     804              :                              local_rows, local_cols, proc_row_dist, proc_col_dist, &
     805              :                              row_blk_size, col_blk_size, row_blk_offset, col_blk_offset, &
     806              :                              distribution, name, matrix_type, group)
     807              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
     808              :       INTEGER, INTENT(OUT), OPTIONAL :: nblkrows_total, nblkcols_total, nfullrows_total, &
     809              :          nfullcols_total, nblkrows_local, nblkcols_local, nfullrows_local, nfullcols_local, &
     810              :          my_prow, my_pcol
     811              :       INTEGER, DIMENSION(:), OPTIONAL, POINTER :: local_rows, local_cols, proc_row_dist, &
     812              :          proc_col_dist, row_blk_size, col_blk_size, row_blk_offset, col_blk_offset
     813              :       TYPE(dbcsr_distribution_type), INTENT(OUT), &
     814              :          OPTIONAL                                        :: distribution
     815              :       CHARACTER(len=*), INTENT(OUT), OPTIONAL            :: name
     816              :       CHARACTER, INTENT(OUT), OPTIONAL                   :: matrix_type
     817              :       TYPE(mp_comm_type), INTENT(OUT), OPTIONAL          :: group
     818              : 
     819              :       INTEGER                                            :: group_handle
     820              :       TYPE(dbcsr_distribution_type_prv)                  :: my_distribution
     821              : 
     822              :       IF (USE_DBCSR_BACKEND) THEN
     823              :          CALL dbcsr_get_info_prv(matrix=matrix%dbcsr, &
     824              :                                  nblkrows_total=nblkrows_total, &
     825              :                                  nblkcols_total=nblkcols_total, &
     826              :                                  nfullrows_total=nfullrows_total, &
     827              :                                  nfullcols_total=nfullcols_total, &
     828              :                                  nblkrows_local=nblkrows_local, &
     829              :                                  nblkcols_local=nblkcols_local, &
     830              :                                  nfullrows_local=nfullrows_local, &
     831              :                                  nfullcols_local=nfullcols_local, &
     832              :                                  my_prow=my_prow, &
     833              :                                  my_pcol=my_pcol, &
     834              :                                  local_rows=local_rows, &
     835              :                                  local_cols=local_cols, &
     836              :                                  proc_row_dist=proc_row_dist, &
     837              :                                  proc_col_dist=proc_col_dist, &
     838              :                                  row_blk_size=row_blk_size, &
     839              :                                  col_blk_size=col_blk_size, &
     840              :                                  row_blk_offset=row_blk_offset, &
     841              :                                  col_blk_offset=col_blk_offset, &
     842              :                                  distribution=my_distribution, &
     843              :                                  name=name, &
     844              :                                  matrix_type=matrix_type, &
     845     74031246 :                                  group=group_handle)
     846              : 
     847     25641142 :          IF (PRESENT(distribution)) distribution%dbcsr = my_distribution
     848     25641142 :          IF (PRESENT(group)) CALL group%set_handle(group_handle)
     849              :       ELSE
     850              :          CPABORT("Not yet implemented for DBM.")
     851              :       END IF
     852     25641142 :    END SUBROUTINE dbcsr_get_info
     853              : 
     854              : ! **************************************************************************************************
     855              : !> \brief ...
     856              : !> \param matrix ...
     857              : !> \return ...
     858              : ! **************************************************************************************************
     859      1232591 :    FUNCTION dbcsr_get_matrix_type(matrix) RESULT(matrix_type)
     860              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
     861              :       CHARACTER                                          :: matrix_type
     862              : 
     863              :       IF (USE_DBCSR_BACKEND) THEN
     864      1232591 :          matrix_type = dbcsr_get_matrix_type_prv(matrix%dbcsr)
     865              :       ELSE
     866              :          CPABORT("Not yet implemented for DBM.")
     867              :       END IF
     868      1232591 :    END FUNCTION dbcsr_get_matrix_type
     869              : 
     870              : ! **************************************************************************************************
     871              : !> \brief ...
     872              : !> \param matrix ...
     873              : !> \return ...
     874              : ! **************************************************************************************************
     875        81684 :    FUNCTION dbcsr_get_num_blocks(matrix) RESULT(num_blocks)
     876              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
     877              :       INTEGER                                            :: num_blocks
     878              : 
     879        81684 :       IF (USE_DBCSR_BACKEND) THEN
     880              :          num_blocks = dbcsr_get_num_blocks_prv(matrix%dbcsr)
     881              :       ELSE
     882              :          CPABORT("Not yet implemented for DBM.")
     883              :       END IF
     884        81684 :    END FUNCTION dbcsr_get_num_blocks
     885              : 
     886              : ! **************************************************************************************************
     887              : !> \brief ...
     888              : !> \param matrix ...
     889              : !> \return ...
     890              : ! **************************************************************************************************
     891       226838 :    FUNCTION dbcsr_get_occupation(matrix) RESULT(occupation)
     892              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
     893              :       REAL(KIND=dp)                                      :: occupation
     894              : 
     895       226838 :       IF (USE_DBCSR_BACKEND) THEN
     896              :          occupation = dbcsr_get_occupation_prv(matrix%dbcsr)
     897              :       ELSE
     898              :          CPABORT("Not yet implemented for DBM.")
     899              :       END IF
     900       226838 :    END FUNCTION dbcsr_get_occupation
     901              : 
     902              : ! **************************************************************************************************
     903              : !> \brief ...
     904              : !> \param matrix ...
     905              : !> \param row ...
     906              : !> \param column ...
     907              : !> \param processor ...
     908              : ! **************************************************************************************************
     909      1321080 :    SUBROUTINE dbcsr_get_stored_coordinates(matrix, row, column, processor)
     910              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
     911              :       INTEGER, INTENT(IN)                                :: row, column
     912              :       INTEGER, INTENT(OUT)                               :: processor
     913              : 
     914              :       IF (USE_DBCSR_BACKEND) THEN
     915      1321080 :          CALL dbcsr_get_stored_coordinates_prv(matrix%dbcsr, row, column, processor)
     916              :       ELSE
     917              :          CPABORT("Not yet implemented for DBM.")
     918              :       END IF
     919      1321080 :    END SUBROUTINE dbcsr_get_stored_coordinates
     920              : 
     921              : ! **************************************************************************************************
     922              : !> \brief ...
     923              : !> \param matrix ...
     924              : !> \return ...
     925              : ! **************************************************************************************************
     926      6882025 :    FUNCTION dbcsr_has_symmetry(matrix) RESULT(has_symmetry)
     927              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
     928              :       LOGICAL                                            :: has_symmetry
     929              : 
     930      6882025 :       IF (USE_DBCSR_BACKEND) THEN
     931              :          has_symmetry = dbcsr_has_symmetry_prv(matrix%dbcsr)
     932              :       ELSE
     933              :          CPABORT("Not yet implemented for DBM.")
     934              :       END IF
     935      6882025 :    END FUNCTION dbcsr_has_symmetry
     936              : 
     937              : ! **************************************************************************************************
     938              : !> \brief ...
     939              : !> \param iterator ...
     940              : !> \return ...
     941              : ! **************************************************************************************************
     942    146629514 :    FUNCTION dbcsr_iterator_blocks_left(iterator) RESULT(blocks_left)
     943              :       TYPE(dbcsr_iterator_type), INTENT(IN)              :: iterator
     944              :       LOGICAL                                            :: blocks_left
     945              : 
     946    146629514 :       IF (USE_DBCSR_BACKEND) THEN
     947              :          blocks_left = dbcsr_iterator_blocks_left_prv(iterator%dbcsr)
     948              :       ELSE
     949              :          CPABORT("Not yet implemented for DBM.")
     950              :       END IF
     951    146629514 :    END FUNCTION dbcsr_iterator_blocks_left
     952              : 
     953              : ! **************************************************************************************************
     954              : !> \brief ...
     955              : !> \param iterator ...
     956              : !> \param row ...
     957              : !> \param column ...
     958              : !> \param block ...
     959              : !> \param block_number_argument_has_been_removed ...
     960              : !> \param row_size ...
     961              : !> \param col_size ...
     962              : !> \param row_offset ...
     963              : !> \param col_offset ...
     964              : ! **************************************************************************************************
     965    266557464 :    SUBROUTINE dbcsr_iterator_next_block(iterator, row, column, block, &
     966              :                                         block_number_argument_has_been_removed, &
     967              :                                         row_size, col_size, &
     968              :                                         row_offset, col_offset)
     969              :       TYPE(dbcsr_iterator_type), INTENT(INOUT)           :: iterator
     970              :       INTEGER, INTENT(OUT), OPTIONAL                     :: row, column
     971              :       REAL(kind=dp), DIMENSION(:, :), OPTIONAL, POINTER  :: block
     972              :       LOGICAL, OPTIONAL :: block_number_argument_has_been_removed
     973              :       INTEGER, INTENT(OUT), OPTIONAL                     :: row_size, col_size, row_offset, &
     974              :                                                             col_offset
     975              : 
     976              :       INTEGER                                            :: my_column, my_row
     977    133278732 :       REAL(kind=dp), DIMENSION(:, :), POINTER            :: my_block
     978              : 
     979            0 :       CPASSERT(.NOT. PRESENT(block_number_argument_has_been_removed))
     980              : 
     981              :       IF (USE_DBCSR_BACKEND) THEN
     982              :          CALL dbcsr_iterator_next_block_prv(iterator%dbcsr, row=my_row, column=my_column, &
     983              :                                             block=my_block, row_size=row_size, col_size=col_size, &
     984    133278732 :                                             row_offset=row_offset, col_offset=col_offset)
     985    133278732 :          IF (PRESENT(block)) block => my_block
     986    133278732 :          IF (PRESENT(row)) row = my_row
     987    133278732 :          IF (PRESENT(column)) column = my_column
     988              :       ELSE
     989              :          CPABORT("Not yet implemented for DBM.")
     990              :       END IF
     991    133278732 :    END SUBROUTINE dbcsr_iterator_next_block
     992              : 
     993              : ! **************************************************************************************************
     994              : !> \brief ...
     995              : !> \param iterator ...
     996              : !> \param matrix ...
     997              : !> \param shared ...
     998              : !> \param dynamic ...
     999              : !> \param dynamic_byrows ...
    1000              : ! **************************************************************************************************
    1001     10094910 :    SUBROUTINE dbcsr_iterator_start(iterator, matrix, shared, dynamic, dynamic_byrows)
    1002              :       TYPE(dbcsr_iterator_type), INTENT(OUT)             :: iterator
    1003              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
    1004              :       LOGICAL, INTENT(IN), OPTIONAL                      :: shared, dynamic, dynamic_byrows
    1005              : 
    1006     10094910 :       IF (USE_DBCSR_BACKEND) THEN
    1007              :          CALL dbcsr_iterator_start_prv(iterator%dbcsr, matrix%dbcsr, shared, dynamic, dynamic_byrows)
    1008              :       ELSE
    1009              :          CPABORT("Not yet implemented for DBM.")
    1010              :       END IF
    1011     10094910 :    END SUBROUTINE dbcsr_iterator_start
    1012              : 
    1013              : ! **************************************************************************************************
    1014              : !> \brief Like dbcsr_iterator_start() but with matrix being INTENT(IN).
    1015              : !>        When invoking this routine, the caller promises not to modify the returned blocks.
    1016              : !> \param iterator ...
    1017              : !> \param matrix ...
    1018              : !> \param shared ...
    1019              : !> \param dynamic ...
    1020              : !> \param dynamic_byrows ...
    1021              : ! **************************************************************************************************
    1022      3595547 :    SUBROUTINE dbcsr_iterator_readonly_start(iterator, matrix, shared, dynamic, dynamic_byrows)
    1023              :       TYPE(dbcsr_iterator_type), INTENT(OUT)             :: iterator
    1024              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
    1025              :       LOGICAL, INTENT(IN), OPTIONAL                      :: shared, dynamic, dynamic_byrows
    1026              : 
    1027              :       IF (USE_DBCSR_BACKEND) THEN
    1028              :          CALL dbcsr_iterator_start_prv(iterator%dbcsr, matrix%dbcsr, shared, dynamic, &
    1029      3595547 :                                        dynamic_byrows, read_only=.TRUE.)
    1030              :       ELSE
    1031              :          CPABORT("Not yet implemented for DBM.")
    1032              :       END IF
    1033      3595547 :    END SUBROUTINE dbcsr_iterator_readonly_start
    1034              : 
    1035              : ! **************************************************************************************************
    1036              : !> \brief ...
    1037              : !> \param iterator ...
    1038              : ! **************************************************************************************************
    1039     13690457 :    SUBROUTINE dbcsr_iterator_stop(iterator)
    1040              :       TYPE(dbcsr_iterator_type), INTENT(INOUT)           :: iterator
    1041              : 
    1042     13690457 :       IF (USE_DBCSR_BACKEND) THEN
    1043              :          CALL dbcsr_iterator_stop_prv(iterator%dbcsr)
    1044              :       ELSE
    1045              :          CPABORT("Not yet implemented for DBM.")
    1046              :       END IF
    1047     13690457 :    END SUBROUTINE dbcsr_iterator_stop
    1048              : 
    1049              : ! **************************************************************************************************
    1050              : !> \brief ...
    1051              : !> \param dist ...
    1052              : ! **************************************************************************************************
    1053       137255 :    SUBROUTINE dbcsr_mp_grid_setup(dist)
    1054              :       TYPE(dbcsr_distribution_type), INTENT(INOUT)       :: dist
    1055              : 
    1056       137255 :       IF (USE_DBCSR_BACKEND) THEN
    1057              :          CALL dbcsr_mp_grid_setup_prv(dist%dbcsr)
    1058              :       ELSE
    1059              :          CPABORT("Not yet implemented for DBM.")
    1060              :       END IF
    1061       137255 :    END SUBROUTINE dbcsr_mp_grid_setup
    1062              : 
    1063              : ! **************************************************************************************************
    1064              : !> \brief ...
    1065              : !> \param transa ...
    1066              : !> \param transb ...
    1067              : !> \param alpha ...
    1068              : !> \param matrix_a ...
    1069              : !> \param matrix_b ...
    1070              : !> \param beta ...
    1071              : !> \param matrix_c ...
    1072              : !> \param first_row ...
    1073              : !> \param last_row ...
    1074              : !> \param first_column ...
    1075              : !> \param last_column ...
    1076              : !> \param first_k ...
    1077              : !> \param last_k ...
    1078              : !> \param retain_sparsity ...
    1079              : !> \param filter_eps ...
    1080              : !> \param flop ...
    1081              : ! **************************************************************************************************
    1082      3347308 :    SUBROUTINE dbcsr_multiply(transa, transb, alpha, matrix_a, matrix_b, beta, &
    1083              :                              matrix_c, first_row, last_row, &
    1084              :                              first_column, last_column, first_k, last_k, &
    1085              :                              retain_sparsity, filter_eps, flop)
    1086              :       CHARACTER(LEN=1), INTENT(IN)                       :: transa, transb
    1087              :       REAL(kind=dp), INTENT(IN)                          :: alpha
    1088              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a, matrix_b
    1089              :       REAL(kind=dp), INTENT(IN)                          :: beta
    1090              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_c
    1091              :       INTEGER, INTENT(IN), OPTIONAL                      :: first_row, last_row, first_column, &
    1092              :                                                             last_column, first_k, last_k
    1093              :       LOGICAL, INTENT(IN), OPTIONAL                      :: retain_sparsity
    1094              :       REAL(kind=dp), INTENT(IN), OPTIONAL                :: filter_eps
    1095              :       INTEGER(int_8), INTENT(OUT), OPTIONAL              :: flop
    1096              : 
    1097              :       IF (USE_DBCSR_BACKEND) THEN
    1098              :          CALL dbcsr_multiply_prv(transa, transb, alpha, matrix_a%dbcsr, matrix_b%dbcsr, beta, &
    1099              :                                  matrix_c%dbcsr, first_row, last_row, first_column, last_column, &
    1100      3347308 :                                  first_k, last_k, retain_sparsity, filter_eps=filter_eps, flop=flop)
    1101              :       ELSE
    1102              :          CPABORT("Not yet implemented for DBM.")
    1103              :       END IF
    1104      3347308 :    END SUBROUTINE dbcsr_multiply
    1105              : 
    1106              : ! **************************************************************************************************
    1107              : !> \brief ...
    1108              : !> \param matrix ...
    1109              : !> \param row ...
    1110              : !> \param col ...
    1111              : !> \param block ...
    1112              : !> \param summation ...
    1113              : ! **************************************************************************************************
    1114       854393 :    SUBROUTINE dbcsr_put_block(matrix, row, col, block, summation)
    1115              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
    1116              :       INTEGER, INTENT(IN)                                :: row, col
    1117              :       REAL(kind=dp), DIMENSION(:, :), INTENT(IN)         :: block
    1118              :       LOGICAL, INTENT(IN), OPTIONAL                      :: summation
    1119              : 
    1120              :       IF (USE_DBCSR_BACKEND) THEN
    1121       854393 :          CALL dbcsr_put_block_prv(matrix%dbcsr, row, col, block, summation=summation)
    1122              :       ELSE
    1123              :          CPABORT("Not yet implemented for DBM.")
    1124              :       END IF
    1125       854393 :    END SUBROUTINE dbcsr_put_block
    1126              : 
    1127              : ! **************************************************************************************************
    1128              : !> \brief ...
    1129              : !> \param matrix ...
    1130              : ! **************************************************************************************************
    1131      8111887 :    SUBROUTINE dbcsr_release(matrix)
    1132              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
    1133              : 
    1134      8111887 :       IF (USE_DBCSR_BACKEND) THEN
    1135              :          CALL dbcsr_release_prv(matrix%dbcsr)
    1136              :       ELSE
    1137              :          CPABORT("Not yet implemented for DBM.")
    1138              :       END IF
    1139      8111887 :    END SUBROUTINE dbcsr_release
    1140              : 
    1141              : ! **************************************************************************************************
    1142              : !> \brief ...
    1143              : !> \param matrix ...
    1144              : ! **************************************************************************************************
    1145       101706 :    SUBROUTINE dbcsr_replicate_all(matrix)
    1146              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
    1147              : 
    1148       101706 :       IF (USE_DBCSR_BACKEND) THEN
    1149              :          CALL dbcsr_replicate_all_prv(matrix%dbcsr)
    1150              :       ELSE
    1151              :          CPABORT("Not yet implemented for DBM.")
    1152              :       END IF
    1153       101706 :    END SUBROUTINE dbcsr_replicate_all
    1154              : 
    1155              : ! **************************************************************************************************
    1156              : !> \brief ...
    1157              : !> \param matrix ...
    1158              : !> \param rows ...
    1159              : !> \param cols ...
    1160              : ! **************************************************************************************************
    1161      3110094 :    SUBROUTINE dbcsr_reserve_blocks(matrix, rows, cols)
    1162              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
    1163              :       INTEGER, DIMENSION(:), INTENT(IN)                  :: rows, cols
    1164              : 
    1165              :       IF (USE_DBCSR_BACKEND) THEN
    1166      3110094 :          CALL dbcsr_reserve_blocks_prv(matrix%dbcsr, rows, cols)
    1167              :       ELSE
    1168              :          CPABORT("Not yet implemented for DBM.")
    1169              :       END IF
    1170      3110094 :    END SUBROUTINE dbcsr_reserve_blocks
    1171              : 
    1172              : ! **************************************************************************************************
    1173              : !> \brief ...
    1174              : !> \param matrix ...
    1175              : !> \param alpha_scalar ...
    1176              : ! **************************************************************************************************
    1177       426155 :    SUBROUTINE dbcsr_scale(matrix, alpha_scalar)
    1178              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
    1179              :       REAL(kind=dp), INTENT(IN)                          :: alpha_scalar
    1180              : 
    1181       426155 :       IF (USE_DBCSR_BACKEND) THEN
    1182              :          CALL dbcsr_scale_prv(matrix%dbcsr, alpha_scalar)
    1183              :       ELSE
    1184              :          CALL dbm_scale(matrix%dbm, alpha_scalar)
    1185              :       END IF
    1186       426155 :    END SUBROUTINE dbcsr_scale
    1187              : 
    1188              : ! **************************************************************************************************
    1189              : !> \brief ...
    1190              : !> \param matrix ...
    1191              : !> \param alpha ...
    1192              : ! **************************************************************************************************
    1193      4850306 :    SUBROUTINE dbcsr_set(matrix, alpha)
    1194              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
    1195              :       REAL(kind=dp), INTENT(IN)                          :: alpha
    1196              : 
    1197              :       IF (USE_DBCSR_BACKEND) THEN
    1198      4850306 :          CALL dbcsr_set_prv(matrix%dbcsr, alpha)
    1199              :       ELSE
    1200              :          IF (alpha == 0.0_dp) THEN
    1201              :             CALL dbm_zero(matrix%dbm)
    1202              :          ELSE
    1203              :             CPABORT("Not yet implemented for DBM.")
    1204              :          END IF
    1205              :       END IF
    1206      4850306 :    END SUBROUTINE dbcsr_set
    1207              : 
    1208              : ! **************************************************************************************************
    1209              : !> \brief ...
    1210              : !> \param matrix ...
    1211              : ! **************************************************************************************************
    1212        52914 :    SUBROUTINE dbcsr_sum_replicated(matrix)
    1213              :       TYPE(dbcsr_type), INTENT(inout)                    :: matrix
    1214              : 
    1215        52914 :       IF (USE_DBCSR_BACKEND) THEN
    1216              :          CALL dbcsr_sum_replicated_prv(matrix%dbcsr)
    1217              :       ELSE
    1218              :          CPABORT("Not yet implemented for DBM.")
    1219              :       END IF
    1220        52914 :    END SUBROUTINE dbcsr_sum_replicated
    1221              : 
    1222              : ! **************************************************************************************************
    1223              : !> \brief ...
    1224              : !> \param transposed ...
    1225              : !> \param normal ...
    1226              : !> \param shallow_data_copy ...
    1227              : !> \param transpose_distribution ...
    1228              : !> \param use_distribution ...
    1229              : ! **************************************************************************************************
    1230       176778 :    SUBROUTINE dbcsr_transposed(transposed, normal, shallow_data_copy, transpose_distribution, &
    1231              :                                use_distribution)
    1232              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: transposed
    1233              :       TYPE(dbcsr_type), INTENT(IN)                       :: normal
    1234              :       LOGICAL, INTENT(IN), OPTIONAL                      :: shallow_data_copy, transpose_distribution
    1235              :       TYPE(dbcsr_distribution_type), INTENT(IN), &
    1236              :          OPTIONAL                                        :: use_distribution
    1237              : 
    1238              :       IF (USE_DBCSR_BACKEND) THEN
    1239       176778 :          IF (PRESENT(use_distribution)) THEN
    1240              :             CALL dbcsr_transposed_prv(transposed%dbcsr, normal%dbcsr, &
    1241              :                                       shallow_data_copy=shallow_data_copy, &
    1242              :                                       transpose_distribution=transpose_distribution, &
    1243        92770 :                                       use_distribution=use_distribution%dbcsr)
    1244              :          ELSE
    1245              :             CALL dbcsr_transposed_prv(transposed%dbcsr, normal%dbcsr, &
    1246              :                                       shallow_data_copy=shallow_data_copy, &
    1247        84008 :                                       transpose_distribution=transpose_distribution)
    1248              :          END IF
    1249              :       ELSE
    1250              :          CPABORT("Not yet implemented for DBM.")
    1251              :       END IF
    1252       176778 :    END SUBROUTINE dbcsr_transposed
    1253              : 
    1254              : ! **************************************************************************************************
    1255              : !> \brief ...
    1256              : !> \param matrix ...
    1257              : !> \return ...
    1258              : ! **************************************************************************************************
    1259      1523729 :    FUNCTION dbcsr_valid_index(matrix) RESULT(valid_index)
    1260              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
    1261              :       LOGICAL                                            :: valid_index
    1262              : 
    1263      1523729 :       IF (USE_DBCSR_BACKEND) THEN
    1264              :          valid_index = dbcsr_valid_index_prv(matrix%dbcsr)
    1265              :       ELSE
    1266              :          valid_index = .TRUE. ! Does not apply to DBM.
    1267              :       END IF
    1268      1523729 :    END FUNCTION dbcsr_valid_index
    1269              : 
    1270              : ! **************************************************************************************************
    1271              : !> \brief ...
    1272              : !> \param matrix ...
    1273              : !> \param verbosity ...
    1274              : !> \param local ...
    1275              : ! **************************************************************************************************
    1276       196184 :    SUBROUTINE dbcsr_verify_matrix(matrix, verbosity, local)
    1277              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
    1278              :       INTEGER, INTENT(IN), OPTIONAL                      :: verbosity
    1279              :       LOGICAL, INTENT(IN), OPTIONAL                      :: local
    1280              : 
    1281       196184 :       IF (USE_DBCSR_BACKEND) THEN
    1282              :          CALL dbcsr_verify_matrix_prv(matrix%dbcsr, verbosity, local)
    1283              :       ELSE
    1284              :          ! Does not apply to DBM.
    1285              :       END IF
    1286       196184 :    END SUBROUTINE dbcsr_verify_matrix
    1287              : 
    1288              : ! **************************************************************************************************
    1289              : !> \brief ...
    1290              : !> \param matrix ...
    1291              : !> \param nblks_guess ...
    1292              : !> \param sizedata_guess ...
    1293              : !> \param n ...
    1294              : !> \param work_mutable ...
    1295              : ! **************************************************************************************************
    1296         6250 :    SUBROUTINE dbcsr_work_create(matrix, nblks_guess, sizedata_guess, n, work_mutable)
    1297              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
    1298              :       INTEGER, INTENT(IN), OPTIONAL                      :: nblks_guess, sizedata_guess, n
    1299              :       LOGICAL, INTENT(in), OPTIONAL                      :: work_mutable
    1300              : 
    1301         6250 :       IF (USE_DBCSR_BACKEND) THEN
    1302              :          CALL dbcsr_work_create_prv(matrix%dbcsr, nblks_guess, sizedata_guess, n, work_mutable)
    1303              :       ELSE
    1304              :          ! Does not apply to DBM.
    1305              :       END IF
    1306         6250 :    END SUBROUTINE dbcsr_work_create
    1307              : 
    1308              : ! **************************************************************************************************
    1309              : !> \brief ...
    1310              : !> \param matrix_a ...
    1311              : !> \param matrix_b ...
    1312              : !> \param RESULT ...
    1313              : ! **************************************************************************************************
    1314        42917 :    SUBROUTINE dbcsr_dot_threadsafe(matrix_a, matrix_b, RESULT)
    1315              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a, matrix_b
    1316              :       REAL(kind=dp), INTENT(INOUT)                       :: result
    1317              : 
    1318        42917 :       IF (USE_DBCSR_BACKEND) THEN
    1319              :          CALL dbcsr_dot_prv(matrix_a%dbcsr, matrix_b%dbcsr, RESULT)
    1320              :       ELSE
    1321              :          CPABORT("Not yet implemented for DBM.")
    1322              :       END IF
    1323        42917 :    END SUBROUTINE dbcsr_dot_threadsafe
    1324              : 
    1325            0 : END MODULE cp_dbcsr_api
        

Generated by: LCOV version 2.0-1