LCOV - code coverage report
Current view: top level - src/dbx - cp_dbcsr_api.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:71c3ab0) Lines: 95.8 % 191 183
Test Date: 2026-07-25 06:35:44 Functions: 91.1 % 56 51

            Line data    Source code
       1              : !--------------------------------------------------------------------------------------------------!
       2              : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3              : !   Copyright 2000-2026 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       348423 :    SUBROUTINE dbcsr_init_p(matrix)
     207              :       TYPE(dbcsr_type), POINTER                          :: matrix
     208              : 
     209       348423 :       IF (ASSOCIATED(matrix)) THEN
     210        22322 :          CALL dbcsr_release(matrix)
     211        22322 :          DEALLOCATE (matrix)
     212              :       END IF
     213              : 
     214       348423 :       ALLOCATE (matrix)
     215       348423 :    END SUBROUTINE dbcsr_init_p
     216              : 
     217              : ! **************************************************************************************************
     218              : !> \brief ...
     219              : !> \param matrix ...
     220              : ! **************************************************************************************************
     221       242722 :    SUBROUTINE dbcsr_release_p(matrix)
     222              :       TYPE(dbcsr_type), POINTER                          :: matrix
     223              : 
     224       242722 :       IF (ASSOCIATED(matrix)) THEN
     225       241746 :          CALL dbcsr_release(matrix)
     226       241746 :          DEALLOCATE (matrix)
     227              :       END IF
     228       242722 :    END SUBROUTINE dbcsr_release_p
     229              : 
     230              : ! **************************************************************************************************
     231              : !> \brief ...
     232              : !> \param matrix ...
     233              : ! **************************************************************************************************
     234      3082151 :    SUBROUTINE dbcsr_deallocate_matrix(matrix)
     235              :       TYPE(dbcsr_type), POINTER                          :: matrix
     236              : 
     237      3082151 :       CALL dbcsr_release(matrix)
     238      3082151 :       IF (dbcsr_valid_index(matrix)) THEN
     239              :          CALL cp_abort(__LOCATION__, &
     240              :                        'You should not "deallocate" a referenced matrix. '// &
     241            0 :                        'Avoid pointers to DBCSR matrices.')
     242              :       END IF
     243      3082151 :       DEALLOCATE (matrix)
     244      3082151 :    END SUBROUTINE dbcsr_deallocate_matrix
     245              : 
     246              : ! **************************************************************************************************
     247              : !> \brief ...
     248              : !> \param matrix_a ...
     249              : !> \param matrix_b ...
     250              : !> \param alpha_scalar ...
     251              : !> \param beta_scalar ...
     252              : ! **************************************************************************************************
     253      2235862 :    SUBROUTINE dbcsr_add(matrix_a, matrix_b, alpha_scalar, beta_scalar)
     254              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_a
     255              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix_b
     256              :       REAL(kind=dp), INTENT(IN)                          :: alpha_scalar, beta_scalar
     257              : 
     258              :       IF (USE_DBCSR_BACKEND) THEN
     259      2235862 :          CALL dbcsr_add_prv(matrix_a%dbcsr, matrix_b%dbcsr, alpha_scalar, beta_scalar)
     260              :       ELSE
     261              :          IF (alpha_scalar /= 1.0_dp .OR. beta_scalar /= 1.0_dp) CPABORT("Not yet implemented for DBM.")
     262              :          CALL dbm_add(matrix_a%dbm, matrix_b%dbm)
     263              :       END IF
     264      2235862 :    END SUBROUTINE dbcsr_add
     265              : 
     266              : ! **************************************************************************************************
     267              : !> \brief ...
     268              : !> \param filepath ...
     269              : !> \param distribution ...
     270              : !> \param matrix_new ...
     271              : ! **************************************************************************************************
     272           38 :    SUBROUTINE dbcsr_binary_read(filepath, distribution, matrix_new)
     273              :       CHARACTER(len=*), INTENT(IN)                       :: filepath
     274              :       TYPE(dbcsr_distribution_type), INTENT(IN)          :: distribution
     275              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_new
     276              : 
     277           38 :       IF (USE_DBCSR_BACKEND) THEN
     278              :          CALL dbcsr_binary_read_prv(filepath, distribution%dbcsr, matrix_new%dbcsr)
     279              :       ELSE
     280              :          CPABORT("Not yet implemented for DBM.")
     281              :       END IF
     282           38 :    END SUBROUTINE dbcsr_binary_read
     283              : 
     284              : ! **************************************************************************************************
     285              : !> \brief ...
     286              : !> \param matrix ...
     287              : !> \param filepath ...
     288              : ! **************************************************************************************************
     289          278 :    SUBROUTINE dbcsr_binary_write(matrix, filepath)
     290              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
     291              :       CHARACTER(LEN=*), INTENT(IN)                       :: filepath
     292              : 
     293          278 :       IF (USE_DBCSR_BACKEND) THEN
     294              :          CALL dbcsr_binary_write_prv(matrix%dbcsr, filepath)
     295              :       ELSE
     296              :          CPABORT("Not yet implemented for DBM.")
     297              :       END IF
     298          278 :    END SUBROUTINE dbcsr_binary_write
     299              : 
     300              : ! **************************************************************************************************
     301              : !> \brief ...
     302              : !> \param matrix ...
     303              : ! **************************************************************************************************
     304       127208 :    SUBROUTINE dbcsr_clear(matrix)
     305              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
     306              : 
     307       127208 :       IF (USE_DBCSR_BACKEND) THEN
     308              :          CALL dbcsr_clear_prv(matrix%dbcsr)
     309              :       ELSE
     310              :          CALL dbm_clear(matrix%dbm)
     311              :       END IF
     312       127208 :    END SUBROUTINE dbcsr_clear
     313              : 
     314              : ! **************************************************************************************************
     315              : !> \brief ...
     316              : !> \param matrix ...
     317              : !> \param redist ...
     318              : ! **************************************************************************************************
     319      3067228 :    SUBROUTINE dbcsr_complete_redistribute(matrix, redist)
     320              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
     321              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: redist
     322              : 
     323      3067228 :       IF (USE_DBCSR_BACKEND) THEN
     324              :          CALL dbcsr_complete_redistribute_prv(matrix%dbcsr, redist%dbcsr)
     325              :       ELSE
     326              :          CALL dbm_redistribute(matrix%dbm, redist%dbm)
     327              :       END IF
     328      3067228 :    END SUBROUTINE dbcsr_complete_redistribute
     329              : 
     330              : ! **************************************************************************************************
     331              : !> \brief ...
     332              : !> \param dbcsr_mat ...
     333              : !> \param csr_mat ...
     334              : ! **************************************************************************************************
     335            0 :    SUBROUTINE dbcsr_convert_csr_to_dbcsr(dbcsr_mat, csr_mat)
     336              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: dbcsr_mat
     337              :       TYPE(dbcsr_csr_type), INTENT(INOUT)                :: csr_mat
     338              : 
     339            0 :       IF (USE_DBCSR_BACKEND) THEN
     340              :          CALL convert_csr_to_dbcsr_prv(dbcsr_mat%dbcsr, csr_mat)
     341              :       ELSE
     342              :          CPABORT("Not yet implemented for DBM.")
     343              :       END IF
     344            0 :    END SUBROUTINE dbcsr_convert_csr_to_dbcsr
     345              : 
     346              : ! **************************************************************************************************
     347              : !> \brief ...
     348              : !> \param dbcsr_mat ...
     349              : !> \param csr_mat ...
     350              : ! **************************************************************************************************
     351          206 :    SUBROUTINE dbcsr_convert_dbcsr_to_csr(dbcsr_mat, csr_mat)
     352              :       TYPE(dbcsr_type), INTENT(IN)                       :: dbcsr_mat
     353              :       TYPE(dbcsr_csr_type), INTENT(INOUT)                :: csr_mat
     354              : 
     355          206 :       IF (USE_DBCSR_BACKEND) THEN
     356              :          CALL convert_dbcsr_to_csr_prv(dbcsr_mat%dbcsr, csr_mat)
     357              :       ELSE
     358              :          CPABORT("Not yet implemented for DBM.")
     359              :       END IF
     360          206 :    END SUBROUTINE dbcsr_convert_dbcsr_to_csr
     361              : 
     362              : ! **************************************************************************************************
     363              : !> \brief ...
     364              : !> \param matrix_b ...
     365              : !> \param matrix_a ...
     366              : !> \param name ...
     367              : !> \param keep_sparsity ...
     368              : !> \param keep_imaginary ...
     369              : ! **************************************************************************************************
     370      6891241 :    SUBROUTINE dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
     371              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_b
     372              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a
     373              :       CHARACTER(LEN=*), INTENT(IN), OPTIONAL             :: name
     374              :       LOGICAL, INTENT(IN), OPTIONAL                      :: keep_sparsity, keep_imaginary
     375              : 
     376              :       IF (USE_DBCSR_BACKEND) THEN
     377              :          CALL dbcsr_copy_prv(matrix_b%dbcsr, matrix_a%dbcsr, name=name, &
     378     11245605 :                              keep_sparsity=keep_sparsity, keep_imaginary=keep_imaginary)
     379              :       ELSE
     380              :          IF (PRESENT(name) .OR. PRESENT(keep_sparsity) .OR. PRESENT(keep_imaginary)) THEN
     381              :             CPABORT("Not yet implemented for DBM.")
     382              :          END IF
     383              :          CALL dbm_copy(matrix_b%dbm, matrix_a%dbm)
     384              :       END IF
     385      6891241 :    END SUBROUTINE dbcsr_copy
     386              : 
     387              : ! **************************************************************************************************
     388              : !> \brief ...
     389              : !> \param matrix ...
     390              : !> \param name ...
     391              : !> \param dist ...
     392              : !> \param matrix_type ...
     393              : !> \param row_blk_size ...
     394              : !> \param col_blk_size ...
     395              : !> \param reuse_arrays ...
     396              : !> \param mutable_work ...
     397              : ! **************************************************************************************************
     398      5931112 :    SUBROUTINE dbcsr_create_new(matrix, name, dist, matrix_type, row_blk_size, col_blk_size, &
     399              :                                reuse_arrays, mutable_work)
     400              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
     401              :       CHARACTER(len=*), INTENT(IN)                       :: name
     402              :       TYPE(dbcsr_distribution_type), INTENT(IN)          :: dist
     403              :       CHARACTER, INTENT(IN)                              :: matrix_type
     404              :       INTEGER, DIMENSION(:), INTENT(INOUT), POINTER      :: row_blk_size, col_blk_size
     405              :       LOGICAL, INTENT(IN), OPTIONAL                      :: reuse_arrays, mutable_work
     406              : 
     407              :       IF (USE_DBCSR_BACKEND) THEN
     408              :          CALL dbcsr_create_prv(matrix=matrix%dbcsr, name=name, dist=dist%dbcsr, &
     409              :                                matrix_type=matrix_type, row_blk_size=row_blk_size, &
     410              :                                col_blk_size=col_blk_size, nze=0, data_type=dbcsr_type_real_8, &
     411      5931112 :                                reuse_arrays=reuse_arrays, mutable_work=mutable_work)
     412              :       ELSE
     413              :          CPABORT("Not yet implemented for DBM.")
     414              :       END IF
     415      5931112 :    END SUBROUTINE dbcsr_create_new
     416              : 
     417              : ! **************************************************************************************************
     418              : !> \brief ...
     419              : !> \param matrix ...
     420              : !> \param name ...
     421              : !> \param template ...
     422              : !> \param dist ...
     423              : !> \param matrix_type ...
     424              : !> \param row_blk_size ...
     425              : !> \param col_blk_size ...
     426              : !> \param reuse_arrays ...
     427              : !> \param mutable_work ...
     428              : ! **************************************************************************************************
     429      4617560 :    SUBROUTINE dbcsr_create_template(matrix, name, template, dist, matrix_type, &
     430              :                                     row_blk_size, col_blk_size, reuse_arrays, mutable_work)
     431              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
     432              :       CHARACTER(len=*), INTENT(IN), OPTIONAL             :: name
     433              :       TYPE(dbcsr_type), INTENT(IN)                       :: template
     434              :       TYPE(dbcsr_distribution_type), INTENT(IN), &
     435              :          OPTIONAL                                        :: dist
     436              :       CHARACTER, INTENT(IN), OPTIONAL                    :: matrix_type
     437              :       INTEGER, DIMENSION(:), INTENT(INOUT), OPTIONAL, &
     438              :          POINTER                                         :: row_blk_size, col_blk_size
     439              :       LOGICAL, INTENT(IN), OPTIONAL                      :: reuse_arrays, mutable_work
     440              : 
     441              :       IF (USE_DBCSR_BACKEND) THEN
     442      4617560 :          IF (PRESENT(dist)) THEN
     443              :             CALL dbcsr_create_prv(matrix=matrix%dbcsr, name=name, template=template%dbcsr, &
     444              :                                   dist=dist%dbcsr, matrix_type=matrix_type, &
     445              :                                   row_blk_size=row_blk_size, col_blk_size=col_blk_size, &
     446              :                                   nze=0, data_type=dbcsr_type_real_8, reuse_arrays=reuse_arrays, &
     447        33664 :                                   mutable_work=mutable_work)
     448              :          ELSE
     449              :             CALL dbcsr_create_prv(matrix=matrix%dbcsr, name=name, template=template%dbcsr, &
     450              :                                   matrix_type=matrix_type, &
     451              :                                   row_blk_size=row_blk_size, col_blk_size=col_blk_size, &
     452              :                                   nze=0, data_type=dbcsr_type_real_8, reuse_arrays=reuse_arrays, &
     453      8869935 :                                   mutable_work=mutable_work)
     454              :          END IF
     455              :       ELSE
     456              :          CPABORT("Not yet implemented for DBM.")
     457              :       END IF
     458      4617560 :    END SUBROUTINE dbcsr_create_template
     459              : 
     460              : ! **************************************************************************************************
     461              : !> \brief ...
     462              : !> \param dbcsr_mat ...
     463              : !> \param csr_mat ...
     464              : !> \param dist_format ...
     465              : !> \param csr_sparsity ...
     466              : !> \param numnodes ...
     467              : ! **************************************************************************************************
     468          206 :    SUBROUTINE dbcsr_csr_create_from_dbcsr(dbcsr_mat, csr_mat, dist_format, csr_sparsity, numnodes)
     469              : 
     470              :       TYPE(dbcsr_type), INTENT(IN)                       :: dbcsr_mat
     471              :       TYPE(dbcsr_csr_type), INTENT(OUT)                  :: csr_mat
     472              :       INTEGER                                            :: dist_format
     473              :       TYPE(dbcsr_type), INTENT(IN), OPTIONAL             :: csr_sparsity
     474              :       INTEGER, INTENT(IN), OPTIONAL                      :: numnodes
     475              : 
     476              :       IF (USE_DBCSR_BACKEND) THEN
     477          206 :          IF (PRESENT(csr_sparsity)) THEN
     478              :             CALL dbcsr_csr_create_from_dbcsr_prv(dbcsr_mat%dbcsr, csr_mat, dist_format, &
     479            0 :                                                  csr_sparsity%dbcsr, numnodes)
     480              :          ELSE
     481              :             CALL dbcsr_csr_create_from_dbcsr_prv(dbcsr_mat%dbcsr, csr_mat, &
     482          206 :                                                  dist_format, numnodes=numnodes)
     483              :          END IF
     484              :       ELSE
     485              :          CPABORT("Not yet implemented for DBM.")
     486              :       END IF
     487          206 :    END SUBROUTINE dbcsr_csr_create_from_dbcsr
     488              : 
     489              : ! **************************************************************************************************
     490              : !> \brief Combines csr_create_from_dbcsr and convert_dbcsr_to_csr to produce a complex CSR matrix.
     491              : !> \param rmatrix Real part of the matrix.
     492              : !> \param imatrix Imaginary part of the matrix.
     493              : !> \param csr_mat The resulting CSR matrix.
     494              : !> \param dist_format ...
     495              : ! **************************************************************************************************
     496          128 :    SUBROUTINE dbcsr_csr_create_and_convert_complex(rmatrix, imatrix, csr_mat, dist_format)
     497              :       TYPE(dbcsr_type), INTENT(IN)                       :: rmatrix, imatrix
     498              :       TYPE(dbcsr_csr_type), INTENT(INOUT)                :: csr_mat
     499              :       INTEGER                                            :: dist_format
     500              : 
     501              :       TYPE(dbcsr_type)                                   :: cmatrix, tmp_matrix
     502              : 
     503              :       IF (USE_DBCSR_BACKEND) THEN
     504           64 :          CALL dbcsr_create_prv(tmp_matrix%dbcsr, template=rmatrix%dbcsr, data_type=dbcsr_type_complex_8)
     505           64 :          CALL dbcsr_create_prv(cmatrix%dbcsr, template=rmatrix%dbcsr, data_type=dbcsr_type_complex_8)
     506           64 :          CALL dbcsr_copy_prv(cmatrix%dbcsr, rmatrix%dbcsr)
     507           64 :          CALL dbcsr_copy_prv(tmp_matrix%dbcsr, imatrix%dbcsr)
     508           64 :          CALL dbcsr_add_prv(cmatrix%dbcsr, tmp_matrix%dbcsr, z_one, gaussi)
     509           64 :          CALL dbcsr_release_prv(tmp_matrix%dbcsr)
     510              :          ! Convert to csr
     511           64 :          CALL dbcsr_csr_create_from_dbcsr_prv(cmatrix%dbcsr, csr_mat, dist_format)
     512           64 :          CALL convert_dbcsr_to_csr_prv(cmatrix%dbcsr, csr_mat)
     513           64 :          CALL dbcsr_release_prv(cmatrix%dbcsr)
     514              :       ELSE
     515              :          CPABORT("Not yet implemented for DBM.")
     516              :       END IF
     517           64 :    END SUBROUTINE dbcsr_csr_create_and_convert_complex
     518              : 
     519              : ! **************************************************************************************************
     520              : !> \brief ...
     521              : !> \param matrix_a ...
     522              : !> \param matrix_b ...
     523              : ! **************************************************************************************************
     524      2181235 :    SUBROUTINE dbcsr_desymmetrize(matrix_a, matrix_b)
     525              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a
     526              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_b
     527              : 
     528      2181235 :       IF (USE_DBCSR_BACKEND) THEN
     529              :          CALL dbcsr_desymmetrize_prv(matrix_a%dbcsr, matrix_b%dbcsr)
     530              :       ELSE
     531              :          CPABORT("Not yet implemented for DBM.")
     532              :       END IF
     533      2181235 :    END SUBROUTINE dbcsr_desymmetrize
     534              : 
     535              : ! **************************************************************************************************
     536              : !> \brief ...
     537              : !> \param matrix ...
     538              : ! **************************************************************************************************
     539       222996 :    SUBROUTINE dbcsr_distribute(matrix)
     540              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
     541              : 
     542       222996 :       IF (USE_DBCSR_BACKEND) THEN
     543              :          CALL dbcsr_distribute_prv(matrix%dbcsr)
     544              :       ELSE
     545              :          CPABORT("Not yet implemented for DBM.")
     546              :       END IF
     547       222996 :    END SUBROUTINE dbcsr_distribute
     548              : 
     549              : ! **************************************************************************************************
     550              : !> \brief ...
     551              : !> \param dist ...
     552              : !> \param row_dist ...
     553              : !> \param col_dist ...
     554              : !> \param nrows ...
     555              : !> \param ncols ...
     556              : !> \param has_threads ...
     557              : !> \param group ...
     558              : !> \param mynode ...
     559              : !> \param numnodes ...
     560              : !> \param nprows ...
     561              : !> \param npcols ...
     562              : !> \param myprow ...
     563              : !> \param mypcol ...
     564              : !> \param pgrid ...
     565              : !> \param subgroups_defined ...
     566              : !> \param prow_group ...
     567              : !> \param pcol_group ...
     568              : ! **************************************************************************************************
     569      8215412 :    SUBROUTINE dbcsr_distribution_get(dist, row_dist, col_dist, nrows, ncols, has_threads, &
     570              :                                      group, mynode, numnodes, nprows, npcols, myprow, mypcol, &
     571              :                                      pgrid, subgroups_defined, prow_group, pcol_group)
     572              :       TYPE(dbcsr_distribution_type), INTENT(IN)          :: dist
     573              :       INTEGER, DIMENSION(:), OPTIONAL, POINTER           :: row_dist, col_dist
     574              :       INTEGER, INTENT(OUT), OPTIONAL                     :: nrows, ncols
     575              :       LOGICAL, INTENT(OUT), OPTIONAL                     :: has_threads
     576              :       INTEGER, INTENT(OUT), OPTIONAL                     :: group, mynode, numnodes, nprows, npcols, &
     577              :                                                             myprow, mypcol
     578              :       INTEGER, DIMENSION(:, :), OPTIONAL, POINTER        :: pgrid
     579              :       LOGICAL, INTENT(OUT), OPTIONAL                     :: subgroups_defined
     580              :       INTEGER, INTENT(OUT), OPTIONAL                     :: prow_group, pcol_group
     581              : 
     582              :       IF (USE_DBCSR_BACKEND) THEN
     583              :          CALL dbcsr_distribution_get_prv(dist%dbcsr, row_dist, col_dist, nrows, ncols, has_threads, &
     584              :                                          group, mynode, numnodes, nprows, npcols, myprow, mypcol, &
     585      8215412 :                                          pgrid, subgroups_defined, prow_group, pcol_group)
     586              :       ELSE
     587              :          CPABORT("Not yet implemented for DBM.")
     588              :       END IF
     589      8215412 :    END SUBROUTINE dbcsr_distribution_get
     590              : 
     591              : ! **************************************************************************************************
     592              : !> \brief ...
     593              : !> \param dist ...
     594              : ! **************************************************************************************************
     595         1012 :    SUBROUTINE dbcsr_distribution_hold(dist)
     596              :       TYPE(dbcsr_distribution_type)                      :: dist
     597              : 
     598         1012 :       IF (USE_DBCSR_BACKEND) THEN
     599              :          CALL dbcsr_distribution_hold_prv(dist%dbcsr)
     600              :       ELSE
     601              :          CPABORT("Not yet implemented for DBM.")
     602              :       END IF
     603         1012 :    END SUBROUTINE dbcsr_distribution_hold
     604              : 
     605              : ! **************************************************************************************************
     606              : !> \brief ...
     607              : !> \param dist ...
     608              : !> \param template ...
     609              : !> \param group ...
     610              : !> \param pgrid ...
     611              : !> \param row_dist ...
     612              : !> \param col_dist ...
     613              : !> \param reuse_arrays ...
     614              : ! **************************************************************************************************
     615      5228760 :    SUBROUTINE dbcsr_distribution_new(dist, template, group, pgrid, row_dist, col_dist, reuse_arrays)
     616              :       TYPE(dbcsr_distribution_type), INTENT(OUT)         :: dist
     617              :       TYPE(dbcsr_distribution_type), INTENT(IN), &
     618              :          OPTIONAL                                        :: template
     619              :       INTEGER, INTENT(IN), OPTIONAL                      :: group
     620              :       INTEGER, DIMENSION(:, :), OPTIONAL, POINTER        :: pgrid
     621              :       INTEGER, DIMENSION(:), INTENT(INOUT), POINTER      :: row_dist, col_dist
     622              :       LOGICAL, INTENT(IN), OPTIONAL                      :: reuse_arrays
     623              : 
     624              :       IF (USE_DBCSR_BACKEND) THEN
     625      5228760 :          IF (PRESENT(template)) THEN
     626              :             CALL dbcsr_distribution_new_prv(dist%dbcsr, template%dbcsr, group, pgrid, &
     627      2175574 :                                             row_dist, col_dist, reuse_arrays)
     628              :          ELSE
     629              :             CALL dbcsr_distribution_new_prv(dist%dbcsr, group=group, pgrid=pgrid, &
     630              :                                             row_dist=row_dist, col_dist=col_dist, &
     631      3053186 :                                             reuse_arrays=reuse_arrays)
     632              :          END IF
     633              :       ELSE
     634              :          CPABORT("Not yet implemented for DBM.")
     635              :       END IF
     636      5228760 :    END SUBROUTINE dbcsr_distribution_new
     637              : 
     638              : ! **************************************************************************************************
     639              : !> \brief ...
     640              : !> \param dist ...
     641              : ! **************************************************************************************************
     642      5229772 :    SUBROUTINE dbcsr_distribution_release(dist)
     643              :       TYPE(dbcsr_distribution_type)                      :: dist
     644              : 
     645      5229772 :       IF (USE_DBCSR_BACKEND) THEN
     646              :          CALL dbcsr_distribution_release_prv(dist%dbcsr)
     647              :       ELSE
     648              :          CPABORT("Not yet implemented for DBM.")
     649              :       END IF
     650      5229772 :    END SUBROUTINE dbcsr_distribution_release
     651              : 
     652              : ! **************************************************************************************************
     653              : !> \brief ...
     654              : !> \param matrix ...
     655              : !> \param eps ...
     656              : ! **************************************************************************************************
     657      1090279 :    SUBROUTINE dbcsr_filter(matrix, eps)
     658              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
     659              :       REAL(dp), INTENT(IN)                               :: eps
     660              : 
     661      1090279 :       IF (USE_DBCSR_BACKEND) THEN
     662              :          CALL dbcsr_filter_prv(matrix%dbcsr, eps)
     663              :       ELSE
     664              :          CPABORT("Not yet implemented for DBM.")
     665              :       END IF
     666      1090279 :    END SUBROUTINE dbcsr_filter
     667              : 
     668              : ! **************************************************************************************************
     669              : !> \brief ...
     670              : !> \param matrix ...
     671              : ! **************************************************************************************************
     672      6574756 :    SUBROUTINE dbcsr_finalize(matrix)
     673              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
     674              : 
     675      6574756 :       IF (USE_DBCSR_BACKEND) THEN
     676              :          CALL dbcsr_finalize_prv(matrix%dbcsr)
     677              :       ELSE
     678              :          CPABORT("Not yet implemented for DBM.")
     679              :       END IF
     680      6574756 :    END SUBROUTINE dbcsr_finalize
     681              : 
     682              : ! **************************************************************************************************
     683              : !> \brief ...
     684              : !> \param matrix ...
     685              : !> \param row ...
     686              : !> \param col ...
     687              : !> \param block ...
     688              : !> \param found ...
     689              : !> \param row_size ...
     690              : !> \param col_size ...
     691              : ! **************************************************************************************************
     692    836986191 :    SUBROUTINE dbcsr_get_block_p(matrix, row, col, block, found, row_size, col_size)
     693              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
     694              :       INTEGER, INTENT(IN)                                :: row, col
     695              :       REAL(kind=dp), DIMENSION(:, :), POINTER            :: block
     696              :       LOGICAL, INTENT(OUT)                               :: found
     697              :       INTEGER, INTENT(OUT), OPTIONAL                     :: row_size, col_size
     698              : 
     699              :       IF (USE_DBCSR_BACKEND) THEN
     700    836986191 :          CALL dbcsr_get_block_p_prv(matrix%dbcsr, row, col, block, found, row_size, col_size)
     701              :       ELSE
     702              :          CPABORT("Not yet implemented for DBM.")
     703              :       END IF
     704    836986191 :    END SUBROUTINE dbcsr_get_block_p
     705              : 
     706              : ! **************************************************************************************************
     707              : !> \brief Like dbcsr_get_block_p() but with matrix being INTENT(IN).
     708              : !>        When invoking this routine, the caller promises not to modify the returned block.
     709              : !> \param matrix ...
     710              : !> \param row ...
     711              : !> \param col ...
     712              : !> \param block ...
     713              : !> \param found ...
     714              : !> \param row_size ...
     715              : !> \param col_size ...
     716              : ! **************************************************************************************************
     717     61989294 :    SUBROUTINE dbcsr_get_readonly_block_p(matrix, row, col, block, found, row_size, col_size)
     718              :       TYPE(dbcsr_type), INTENT(IN), TARGET               :: matrix
     719              :       INTEGER, INTENT(IN)                                :: row, col
     720              :       REAL(kind=dp), DIMENSION(:, :), POINTER            :: block
     721              :       LOGICAL, INTENT(OUT)                               :: found
     722              :       INTEGER, INTENT(OUT), OPTIONAL                     :: row_size, col_size
     723              : 
     724              :       TYPE(dbcsr_type), POINTER                          :: matrix_p
     725              : 
     726              :       MARK_USED(matrix)
     727              :       MARK_USED(row)
     728              :       MARK_USED(col)
     729              :       MARK_USED(block)
     730              :       MARK_USED(found)
     731              :       MARK_USED(row_size)
     732              :       MARK_USED(col_size)
     733              :       IF (USE_DBCSR_BACKEND) THEN
     734     61989294 :          matrix_p => matrix ! Hacky workaround to shake the INTENT(IN).
     735     61989294 :          CALL dbcsr_get_block_p_prv(matrix_p%dbcsr, row, col, block, found, row_size, col_size)
     736              :       ELSE
     737              :          CPABORT("Not yet implemented for DBM.")
     738              :       END IF
     739     61989294 :    END SUBROUTINE dbcsr_get_readonly_block_p
     740              : 
     741              : ! **************************************************************************************************
     742              : !> \brief ...
     743              : !> \param matrix ...
     744              : !> \param lb ...
     745              : !> \param ub ...
     746              : !> \return ...
     747              : ! **************************************************************************************************
     748      5648725 :    FUNCTION dbcsr_get_data_p(matrix, lb, ub) RESULT(res)
     749              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
     750              :       INTEGER, INTENT(IN), OPTIONAL                      :: lb, ub
     751              :       REAL(kind=dp), DIMENSION(:), POINTER               :: res
     752              : 
     753              :       IF (USE_DBCSR_BACKEND) THEN
     754      5648725 :          res => dbcsr_get_data_p_prv(matrix%dbcsr, select_data_type=0.0_dp, lb=lb, ub=ub)
     755              :       ELSE
     756              :          CPABORT("Not yet implemented for DBM.")
     757              :       END IF
     758      5648725 :    END FUNCTION dbcsr_get_data_p
     759              : 
     760              : ! **************************************************************************************************
     761              : !> \brief ...
     762              : !> \param matrix ...
     763              : !> \return ...
     764              : ! **************************************************************************************************
     765          126 :    FUNCTION dbcsr_get_data_size(matrix) RESULT(data_size)
     766              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
     767              :       INTEGER                                            :: data_size
     768              : 
     769          126 :       IF (USE_DBCSR_BACKEND) THEN
     770              :          data_size = dbcsr_get_data_size_prv(matrix%dbcsr)
     771              :       ELSE
     772              :          CPABORT("Not yet implemented for DBM.")
     773              :       END IF
     774          126 :    END FUNCTION dbcsr_get_data_size
     775              : 
     776              : ! **************************************************************************************************
     777              : !> \brief ...
     778              : !> \param matrix ...
     779              : !> \param nblkrows_total ...
     780              : !> \param nblkcols_total ...
     781              : !> \param nfullrows_total ...
     782              : !> \param nfullcols_total ...
     783              : !> \param nblkrows_local ...
     784              : !> \param nblkcols_local ...
     785              : !> \param nfullrows_local ...
     786              : !> \param nfullcols_local ...
     787              : !> \param my_prow ...
     788              : !> \param my_pcol ...
     789              : !> \param local_rows ...
     790              : !> \param local_cols ...
     791              : !> \param proc_row_dist ...
     792              : !> \param proc_col_dist ...
     793              : !> \param row_blk_size ...
     794              : !> \param col_blk_size ...
     795              : !> \param row_blk_offset ...
     796              : !> \param col_blk_offset ...
     797              : !> \param distribution ...
     798              : !> \param name ...
     799              : !> \param matrix_type ...
     800              : !> \param group ...
     801              : ! **************************************************************************************************
     802     32588251 :    SUBROUTINE dbcsr_get_info(matrix, nblkrows_total, nblkcols_total, &
     803              :                              nfullrows_total, nfullcols_total, nblkrows_local, nblkcols_local, &
     804              :                              nfullrows_local, nfullcols_local, my_prow, my_pcol, &
     805              :                              local_rows, local_cols, proc_row_dist, proc_col_dist, &
     806              :                              row_blk_size, col_blk_size, row_blk_offset, col_blk_offset, &
     807              :                              distribution, name, matrix_type, group)
     808              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
     809              :       INTEGER, INTENT(OUT), OPTIONAL :: nblkrows_total, nblkcols_total, nfullrows_total, &
     810              :          nfullcols_total, nblkrows_local, nblkcols_local, nfullrows_local, nfullcols_local, &
     811              :          my_prow, my_pcol
     812              :       INTEGER, DIMENSION(:), OPTIONAL, POINTER :: local_rows, local_cols, proc_row_dist, &
     813              :          proc_col_dist, row_blk_size, col_blk_size, row_blk_offset, col_blk_offset
     814              :       TYPE(dbcsr_distribution_type), INTENT(OUT), &
     815              :          OPTIONAL                                        :: distribution
     816              :       CHARACTER(len=*), INTENT(OUT), OPTIONAL            :: name
     817              :       CHARACTER, INTENT(OUT), OPTIONAL                   :: matrix_type
     818              :       TYPE(mp_comm_type), INTENT(OUT), OPTIONAL          :: group
     819              : 
     820              :       INTEGER                                            :: group_handle
     821              :       TYPE(dbcsr_distribution_type_prv)                  :: my_distribution
     822              : 
     823              :       IF (USE_DBCSR_BACKEND) THEN
     824              :          CALL dbcsr_get_info_prv(matrix=matrix%dbcsr, &
     825              :                                  nblkrows_total=nblkrows_total, &
     826              :                                  nblkcols_total=nblkcols_total, &
     827              :                                  nfullrows_total=nfullrows_total, &
     828              :                                  nfullcols_total=nfullcols_total, &
     829              :                                  nblkrows_local=nblkrows_local, &
     830              :                                  nblkcols_local=nblkcols_local, &
     831              :                                  nfullrows_local=nfullrows_local, &
     832              :                                  nfullcols_local=nfullcols_local, &
     833              :                                  my_prow=my_prow, &
     834              :                                  my_pcol=my_pcol, &
     835              :                                  local_rows=local_rows, &
     836              :                                  local_cols=local_cols, &
     837              :                                  proc_row_dist=proc_row_dist, &
     838              :                                  proc_col_dist=proc_col_dist, &
     839              :                                  row_blk_size=row_blk_size, &
     840              :                                  col_blk_size=col_blk_size, &
     841              :                                  row_blk_offset=row_blk_offset, &
     842              :                                  col_blk_offset=col_blk_offset, &
     843              :                                  distribution=my_distribution, &
     844              :                                  name=name, &
     845              :                                  matrix_type=matrix_type, &
     846     92839909 :                                  group=group_handle)
     847              : 
     848     32588251 :          IF (PRESENT(distribution)) distribution%dbcsr = my_distribution
     849     32588251 :          IF (PRESENT(group)) CALL group%set_handle(group_handle)
     850              :       ELSE
     851              :          CPABORT("Not yet implemented for DBM.")
     852              :       END IF
     853     32588251 :    END SUBROUTINE dbcsr_get_info
     854              : 
     855              : ! **************************************************************************************************
     856              : !> \brief ...
     857              : !> \param matrix ...
     858              : !> \return ...
     859              : ! **************************************************************************************************
     860      2913328 :    FUNCTION dbcsr_get_matrix_type(matrix) RESULT(matrix_type)
     861              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
     862              :       CHARACTER                                          :: matrix_type
     863              : 
     864              :       IF (USE_DBCSR_BACKEND) THEN
     865      2913328 :          matrix_type = dbcsr_get_matrix_type_prv(matrix%dbcsr)
     866              :       ELSE
     867              :          CPABORT("Not yet implemented for DBM.")
     868              :       END IF
     869      2913328 :    END FUNCTION dbcsr_get_matrix_type
     870              : 
     871              : ! **************************************************************************************************
     872              : !> \brief ...
     873              : !> \param matrix ...
     874              : !> \return ...
     875              : ! **************************************************************************************************
     876        94691 :    FUNCTION dbcsr_get_num_blocks(matrix) RESULT(num_blocks)
     877              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
     878              :       INTEGER                                            :: num_blocks
     879              : 
     880        94691 :       IF (USE_DBCSR_BACKEND) THEN
     881              :          num_blocks = dbcsr_get_num_blocks_prv(matrix%dbcsr)
     882              :       ELSE
     883              :          CPABORT("Not yet implemented for DBM.")
     884              :       END IF
     885        94691 :    END FUNCTION dbcsr_get_num_blocks
     886              : 
     887              : ! **************************************************************************************************
     888              : !> \brief ...
     889              : !> \param matrix ...
     890              : !> \return ...
     891              : ! **************************************************************************************************
     892       242914 :    FUNCTION dbcsr_get_occupation(matrix) RESULT(occupation)
     893              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
     894              :       REAL(KIND=dp)                                      :: occupation
     895              : 
     896       242914 :       IF (USE_DBCSR_BACKEND) THEN
     897              :          occupation = dbcsr_get_occupation_prv(matrix%dbcsr)
     898              :       ELSE
     899              :          CPABORT("Not yet implemented for DBM.")
     900              :       END IF
     901       242914 :    END FUNCTION dbcsr_get_occupation
     902              : 
     903              : ! **************************************************************************************************
     904              : !> \brief ...
     905              : !> \param matrix ...
     906              : !> \param row ...
     907              : !> \param column ...
     908              : !> \param processor ...
     909              : ! **************************************************************************************************
     910      2719657 :    SUBROUTINE dbcsr_get_stored_coordinates(matrix, row, column, processor)
     911              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
     912              :       INTEGER, INTENT(IN)                                :: row, column
     913              :       INTEGER, INTENT(OUT)                               :: processor
     914              : 
     915              :       IF (USE_DBCSR_BACKEND) THEN
     916      2719657 :          CALL dbcsr_get_stored_coordinates_prv(matrix%dbcsr, row, column, processor)
     917              :       ELSE
     918              :          CPABORT("Not yet implemented for DBM.")
     919              :       END IF
     920      2719657 :    END SUBROUTINE dbcsr_get_stored_coordinates
     921              : 
     922              : ! **************************************************************************************************
     923              : !> \brief ...
     924              : !> \param matrix ...
     925              : !> \return ...
     926              : ! **************************************************************************************************
     927     14151983 :    FUNCTION dbcsr_has_symmetry(matrix) RESULT(has_symmetry)
     928              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
     929              :       LOGICAL                                            :: has_symmetry
     930              : 
     931     14151983 :       IF (USE_DBCSR_BACKEND) THEN
     932              :          has_symmetry = dbcsr_has_symmetry_prv(matrix%dbcsr)
     933              :       ELSE
     934              :          CPABORT("Not yet implemented for DBM.")
     935              :       END IF
     936     14151983 :    END FUNCTION dbcsr_has_symmetry
     937              : 
     938              : ! **************************************************************************************************
     939              : !> \brief ...
     940              : !> \param iterator ...
     941              : !> \return ...
     942              : ! **************************************************************************************************
     943    277032568 :    FUNCTION dbcsr_iterator_blocks_left(iterator) RESULT(blocks_left)
     944              :       TYPE(dbcsr_iterator_type), INTENT(IN)              :: iterator
     945              :       LOGICAL                                            :: blocks_left
     946              : 
     947    277032568 :       IF (USE_DBCSR_BACKEND) THEN
     948              :          blocks_left = dbcsr_iterator_blocks_left_prv(iterator%dbcsr)
     949              :       ELSE
     950              :          CPABORT("Not yet implemented for DBM.")
     951              :       END IF
     952    277032568 :    END FUNCTION dbcsr_iterator_blocks_left
     953              : 
     954              : ! **************************************************************************************************
     955              : !> \brief ...
     956              : !> \param iterator ...
     957              : !> \param row ...
     958              : !> \param column ...
     959              : !> \param block ...
     960              : !> \param block_number_argument_has_been_removed ...
     961              : !> \param row_size ...
     962              : !> \param col_size ...
     963              : !> \param row_offset ...
     964              : !> \param col_offset ...
     965              : !> \param transposed ...
     966              : ! **************************************************************************************************
     967    250850218 :    SUBROUTINE dbcsr_iterator_next_block(iterator, row, column, block, &
     968              :                                         block_number_argument_has_been_removed, &
     969              :                                         row_size, col_size, &
     970              :                                         row_offset, col_offset, transposed)
     971              :       TYPE(dbcsr_iterator_type), INTENT(INOUT)           :: iterator
     972              :       INTEGER, INTENT(OUT), OPTIONAL                     :: row, column
     973              :       REAL(kind=dp), DIMENSION(:, :), OPTIONAL, POINTER  :: block
     974              :       LOGICAL, OPTIONAL :: block_number_argument_has_been_removed
     975              :       INTEGER, INTENT(OUT), OPTIONAL                     :: row_size, col_size, row_offset, &
     976              :                                                             col_offset
     977              :       LOGICAL, INTENT(OUT), OPTIONAL                     :: transposed
     978              : 
     979              :       INTEGER                                            :: my_column, my_row
     980    250850218 :       REAL(kind=dp), DIMENSION(:, :), POINTER            :: my_block
     981              : 
     982            0 :       CPASSERT(.NOT. PRESENT(block_number_argument_has_been_removed))
     983              : 
     984              :       IF (USE_DBCSR_BACKEND) THEN
     985    250850218 :          IF (PRESENT(transposed)) THEN
     986              :             CALL dbcsr_iterator_next_block_prv(iterator%dbcsr, row=my_row, column=my_column, &
     987              :                                                block=my_block, row_size=row_size, col_size=col_size, &
     988              :                                                row_offset=row_offset, col_offset=col_offset, &
     989            0 :                                                transposed=transposed)
     990              :          ELSE
     991              :             CALL dbcsr_iterator_next_block_prv(iterator%dbcsr, row=my_row, column=my_column, &
     992              :                                                block=my_block, row_size=row_size, col_size=col_size, &
     993    250850218 :                                                row_offset=row_offset, col_offset=col_offset)
     994              :          END IF
     995    250850218 :          IF (PRESENT(block)) block => my_block
     996    250850218 :          IF (PRESENT(row)) row = my_row
     997    250850218 :          IF (PRESENT(column)) column = my_column
     998              :       ELSE
     999              :          CPABORT("Not yet implemented for DBM.")
    1000              :       END IF
    1001    250850218 :    END SUBROUTINE dbcsr_iterator_next_block
    1002              : 
    1003              : ! **************************************************************************************************
    1004              : !> \brief ...
    1005              : !> \param iterator ...
    1006              : !> \param matrix ...
    1007              : !> \param shared ...
    1008              : !> \param dynamic ...
    1009              : !> \param dynamic_byrows ...
    1010              : ! **************************************************************************************************
    1011     20014475 :    SUBROUTINE dbcsr_iterator_start(iterator, matrix, shared, dynamic, dynamic_byrows)
    1012              :       TYPE(dbcsr_iterator_type), INTENT(OUT)             :: iterator
    1013              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
    1014              :       LOGICAL, INTENT(IN), OPTIONAL                      :: shared, dynamic, dynamic_byrows
    1015              : 
    1016     20014475 :       IF (USE_DBCSR_BACKEND) THEN
    1017              :          CALL dbcsr_iterator_start_prv(iterator%dbcsr, matrix%dbcsr, shared, dynamic, dynamic_byrows)
    1018              :       ELSE
    1019              :          CPABORT("Not yet implemented for DBM.")
    1020              :       END IF
    1021     20014475 :    END SUBROUTINE dbcsr_iterator_start
    1022              : 
    1023              : ! **************************************************************************************************
    1024              : !> \brief Like dbcsr_iterator_start() but with matrix being INTENT(IN).
    1025              : !>        When invoking this routine, the caller promises not to modify the returned blocks.
    1026              : !> \param iterator ...
    1027              : !> \param matrix ...
    1028              : !> \param shared ...
    1029              : !> \param dynamic ...
    1030              : !> \param dynamic_byrows ...
    1031              : ! **************************************************************************************************
    1032      6566464 :    SUBROUTINE dbcsr_iterator_readonly_start(iterator, matrix, shared, dynamic, dynamic_byrows)
    1033              :       TYPE(dbcsr_iterator_type), INTENT(OUT)             :: iterator
    1034              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
    1035              :       LOGICAL, INTENT(IN), OPTIONAL                      :: shared, dynamic, dynamic_byrows
    1036              : 
    1037              :       IF (USE_DBCSR_BACKEND) THEN
    1038              :          CALL dbcsr_iterator_start_prv(iterator%dbcsr, matrix%dbcsr, shared, dynamic, &
    1039      6566464 :                                        dynamic_byrows, read_only=.TRUE.)
    1040              :       ELSE
    1041              :          CPABORT("Not yet implemented for DBM.")
    1042              :       END IF
    1043      6566464 :    END SUBROUTINE dbcsr_iterator_readonly_start
    1044              : 
    1045              : ! **************************************************************************************************
    1046              : !> \brief ...
    1047              : !> \param iterator ...
    1048              : ! **************************************************************************************************
    1049     26580939 :    SUBROUTINE dbcsr_iterator_stop(iterator)
    1050              :       TYPE(dbcsr_iterator_type), INTENT(INOUT)           :: iterator
    1051              : 
    1052     26580939 :       IF (USE_DBCSR_BACKEND) THEN
    1053              :          CALL dbcsr_iterator_stop_prv(iterator%dbcsr)
    1054              :       ELSE
    1055              :          CPABORT("Not yet implemented for DBM.")
    1056              :       END IF
    1057     26580939 :    END SUBROUTINE dbcsr_iterator_stop
    1058              : 
    1059              : ! **************************************************************************************************
    1060              : !> \brief ...
    1061              : !> \param dist ...
    1062              : ! **************************************************************************************************
    1063       145343 :    SUBROUTINE dbcsr_mp_grid_setup(dist)
    1064              :       TYPE(dbcsr_distribution_type), INTENT(INOUT)       :: dist
    1065              : 
    1066       145343 :       IF (USE_DBCSR_BACKEND) THEN
    1067              :          CALL dbcsr_mp_grid_setup_prv(dist%dbcsr)
    1068              :       ELSE
    1069              :          CPABORT("Not yet implemented for DBM.")
    1070              :       END IF
    1071       145343 :    END SUBROUTINE dbcsr_mp_grid_setup
    1072              : 
    1073              : ! **************************************************************************************************
    1074              : !> \brief ...
    1075              : !> \param transa ...
    1076              : !> \param transb ...
    1077              : !> \param alpha ...
    1078              : !> \param matrix_a ...
    1079              : !> \param matrix_b ...
    1080              : !> \param beta ...
    1081              : !> \param matrix_c ...
    1082              : !> \param first_row ...
    1083              : !> \param last_row ...
    1084              : !> \param first_column ...
    1085              : !> \param last_column ...
    1086              : !> \param first_k ...
    1087              : !> \param last_k ...
    1088              : !> \param retain_sparsity ...
    1089              : !> \param filter_eps ...
    1090              : !> \param flop ...
    1091              : ! **************************************************************************************************
    1092      3613680 :    SUBROUTINE dbcsr_multiply(transa, transb, alpha, matrix_a, matrix_b, beta, &
    1093              :                              matrix_c, first_row, last_row, &
    1094              :                              first_column, last_column, first_k, last_k, &
    1095              :                              retain_sparsity, filter_eps, flop)
    1096              :       CHARACTER(LEN=1), INTENT(IN)                       :: transa, transb
    1097              :       REAL(kind=dp), INTENT(IN)                          :: alpha
    1098              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a, matrix_b
    1099              :       REAL(kind=dp), INTENT(IN)                          :: beta
    1100              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_c
    1101              :       INTEGER, INTENT(IN), OPTIONAL                      :: first_row, last_row, first_column, &
    1102              :                                                             last_column, first_k, last_k
    1103              :       LOGICAL, INTENT(IN), OPTIONAL                      :: retain_sparsity
    1104              :       REAL(kind=dp), INTENT(IN), OPTIONAL                :: filter_eps
    1105              :       INTEGER(int_8), INTENT(OUT), OPTIONAL              :: flop
    1106              : 
    1107              :       IF (USE_DBCSR_BACKEND) THEN
    1108              :          CALL dbcsr_multiply_prv(transa, transb, alpha, matrix_a%dbcsr, matrix_b%dbcsr, beta, &
    1109              :                                  matrix_c%dbcsr, first_row, last_row, first_column, last_column, &
    1110      3613680 :                                  first_k, last_k, retain_sparsity, filter_eps=filter_eps, flop=flop)
    1111              :       ELSE
    1112              :          CPABORT("Not yet implemented for DBM.")
    1113              :       END IF
    1114      3613680 :    END SUBROUTINE dbcsr_multiply
    1115              : 
    1116              : ! **************************************************************************************************
    1117              : !> \brief ...
    1118              : !> \param matrix ...
    1119              : !> \param row ...
    1120              : !> \param col ...
    1121              : !> \param block ...
    1122              : !> \param summation ...
    1123              : ! **************************************************************************************************
    1124       945485 :    SUBROUTINE dbcsr_put_block(matrix, row, col, block, summation)
    1125              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
    1126              :       INTEGER, INTENT(IN)                                :: row, col
    1127              :       REAL(kind=dp), DIMENSION(:, :), INTENT(IN)         :: block
    1128              :       LOGICAL, INTENT(IN), OPTIONAL                      :: summation
    1129              : 
    1130              :       IF (USE_DBCSR_BACKEND) THEN
    1131       945485 :          CALL dbcsr_put_block_prv(matrix%dbcsr, row, col, block, summation=summation)
    1132              :       ELSE
    1133              :          CPABORT("Not yet implemented for DBM.")
    1134              :       END IF
    1135       945485 :    END SUBROUTINE dbcsr_put_block
    1136              : 
    1137              : ! **************************************************************************************************
    1138              : !> \brief ...
    1139              : !> \param matrix ...
    1140              : ! **************************************************************************************************
    1141     11841777 :    SUBROUTINE dbcsr_release(matrix)
    1142              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
    1143              : 
    1144     11841777 :       IF (USE_DBCSR_BACKEND) THEN
    1145              :          CALL dbcsr_release_prv(matrix%dbcsr)
    1146              :       ELSE
    1147              :          CPABORT("Not yet implemented for DBM.")
    1148              :       END IF
    1149     11841777 :    END SUBROUTINE dbcsr_release
    1150              : 
    1151              : ! **************************************************************************************************
    1152              : !> \brief ...
    1153              : !> \param matrix ...
    1154              : ! **************************************************************************************************
    1155       272138 :    SUBROUTINE dbcsr_replicate_all(matrix)
    1156              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
    1157              : 
    1158       272138 :       IF (USE_DBCSR_BACKEND) THEN
    1159              :          CALL dbcsr_replicate_all_prv(matrix%dbcsr)
    1160              :       ELSE
    1161              :          CPABORT("Not yet implemented for DBM.")
    1162              :       END IF
    1163       272138 :    END SUBROUTINE dbcsr_replicate_all
    1164              : 
    1165              : ! **************************************************************************************************
    1166              : !> \brief ...
    1167              : !> \param matrix ...
    1168              : !> \param rows ...
    1169              : !> \param cols ...
    1170              : ! **************************************************************************************************
    1171      5179864 :    SUBROUTINE dbcsr_reserve_blocks(matrix, rows, cols)
    1172              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
    1173              :       INTEGER, DIMENSION(:), INTENT(IN)                  :: rows, cols
    1174              : 
    1175              :       IF (USE_DBCSR_BACKEND) THEN
    1176      5179864 :          CALL dbcsr_reserve_blocks_prv(matrix%dbcsr, rows, cols)
    1177              :       ELSE
    1178              :          CPABORT("Not yet implemented for DBM.")
    1179              :       END IF
    1180      5179864 :    END SUBROUTINE dbcsr_reserve_blocks
    1181              : 
    1182              : ! **************************************************************************************************
    1183              : !> \brief ...
    1184              : !> \param matrix ...
    1185              : !> \param alpha_scalar ...
    1186              : ! **************************************************************************************************
    1187       451749 :    SUBROUTINE dbcsr_scale(matrix, alpha_scalar)
    1188              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
    1189              :       REAL(kind=dp), INTENT(IN)                          :: alpha_scalar
    1190              : 
    1191       451749 :       IF (USE_DBCSR_BACKEND) THEN
    1192              :          CALL dbcsr_scale_prv(matrix%dbcsr, alpha_scalar)
    1193              :       ELSE
    1194              :          CALL dbm_scale(matrix%dbm, alpha_scalar)
    1195              :       END IF
    1196       451749 :    END SUBROUTINE dbcsr_scale
    1197              : 
    1198              : ! **************************************************************************************************
    1199              : !> \brief ...
    1200              : !> \param matrix ...
    1201              : !> \param alpha ...
    1202              : ! **************************************************************************************************
    1203      7867294 :    SUBROUTINE dbcsr_set(matrix, alpha)
    1204              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
    1205              :       REAL(kind=dp), INTENT(IN)                          :: alpha
    1206              : 
    1207              :       IF (USE_DBCSR_BACKEND) THEN
    1208      7867294 :          CALL dbcsr_set_prv(matrix%dbcsr, alpha)
    1209              :       ELSE
    1210              :          IF (alpha == 0.0_dp) THEN
    1211              :             CALL dbm_zero(matrix%dbm)
    1212              :          ELSE
    1213              :             CPABORT("Not yet implemented for DBM.")
    1214              :          END IF
    1215              :       END IF
    1216      7867294 :    END SUBROUTINE dbcsr_set
    1217              : 
    1218              : ! **************************************************************************************************
    1219              : !> \brief ...
    1220              : !> \param matrix ...
    1221              : ! **************************************************************************************************
    1222        53280 :    SUBROUTINE dbcsr_sum_replicated(matrix)
    1223              :       TYPE(dbcsr_type), INTENT(inout)                    :: matrix
    1224              : 
    1225        53280 :       IF (USE_DBCSR_BACKEND) THEN
    1226              :          CALL dbcsr_sum_replicated_prv(matrix%dbcsr)
    1227              :       ELSE
    1228              :          CPABORT("Not yet implemented for DBM.")
    1229              :       END IF
    1230        53280 :    END SUBROUTINE dbcsr_sum_replicated
    1231              : 
    1232              : ! **************************************************************************************************
    1233              : !> \brief ...
    1234              : !> \param transposed ...
    1235              : !> \param normal ...
    1236              : !> \param shallow_data_copy ...
    1237              : !> \param transpose_distribution ...
    1238              : !> \param use_distribution ...
    1239              : ! **************************************************************************************************
    1240       185462 :    SUBROUTINE dbcsr_transposed(transposed, normal, shallow_data_copy, transpose_distribution, &
    1241              :                                use_distribution)
    1242              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: transposed
    1243              :       TYPE(dbcsr_type), INTENT(IN)                       :: normal
    1244              :       LOGICAL, INTENT(IN), OPTIONAL                      :: shallow_data_copy, transpose_distribution
    1245              :       TYPE(dbcsr_distribution_type), INTENT(IN), &
    1246              :          OPTIONAL                                        :: use_distribution
    1247              : 
    1248              :       IF (USE_DBCSR_BACKEND) THEN
    1249       185462 :          IF (PRESENT(use_distribution)) THEN
    1250              :             CALL dbcsr_transposed_prv(transposed%dbcsr, normal%dbcsr, &
    1251              :                                       shallow_data_copy=shallow_data_copy, &
    1252              :                                       transpose_distribution=transpose_distribution, &
    1253       100780 :                                       use_distribution=use_distribution%dbcsr)
    1254              :          ELSE
    1255              :             CALL dbcsr_transposed_prv(transposed%dbcsr, normal%dbcsr, &
    1256              :                                       shallow_data_copy=shallow_data_copy, &
    1257        84682 :                                       transpose_distribution=transpose_distribution)
    1258              :          END IF
    1259              :       ELSE
    1260              :          CPABORT("Not yet implemented for DBM.")
    1261              :       END IF
    1262       185462 :    END SUBROUTINE dbcsr_transposed
    1263              : 
    1264              : ! **************************************************************************************************
    1265              : !> \brief ...
    1266              : !> \param matrix ...
    1267              : !> \return ...
    1268              : ! **************************************************************************************************
    1269      3330099 :    FUNCTION dbcsr_valid_index(matrix) RESULT(valid_index)
    1270              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
    1271              :       LOGICAL                                            :: valid_index
    1272              : 
    1273      3330099 :       IF (USE_DBCSR_BACKEND) THEN
    1274              :          valid_index = dbcsr_valid_index_prv(matrix%dbcsr)
    1275              :       ELSE
    1276              :          valid_index = .TRUE. ! Does not apply to DBM.
    1277              :       END IF
    1278      3330099 :    END FUNCTION dbcsr_valid_index
    1279              : 
    1280              : ! **************************************************************************************************
    1281              : !> \brief ...
    1282              : !> \param matrix ...
    1283              : !> \param verbosity ...
    1284              : !> \param local ...
    1285              : ! **************************************************************************************************
    1286       247948 :    SUBROUTINE dbcsr_verify_matrix(matrix, verbosity, local)
    1287              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix
    1288              :       INTEGER, INTENT(IN), OPTIONAL                      :: verbosity
    1289              :       LOGICAL, INTENT(IN), OPTIONAL                      :: local
    1290              : 
    1291       247948 :       IF (USE_DBCSR_BACKEND) THEN
    1292              :          CALL dbcsr_verify_matrix_prv(matrix%dbcsr, verbosity, local)
    1293              :       ELSE
    1294              :          ! Does not apply to DBM.
    1295              :       END IF
    1296       247948 :    END SUBROUTINE dbcsr_verify_matrix
    1297              : 
    1298              : ! **************************************************************************************************
    1299              : !> \brief ...
    1300              : !> \param matrix ...
    1301              : !> \param nblks_guess ...
    1302              : !> \param sizedata_guess ...
    1303              : !> \param n ...
    1304              : !> \param work_mutable ...
    1305              : ! **************************************************************************************************
    1306         6830 :    SUBROUTINE dbcsr_work_create(matrix, nblks_guess, sizedata_guess, n, work_mutable)
    1307              :       TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix
    1308              :       INTEGER, INTENT(IN), OPTIONAL                      :: nblks_guess, sizedata_guess, n
    1309              :       LOGICAL, INTENT(in), OPTIONAL                      :: work_mutable
    1310              : 
    1311         6830 :       IF (USE_DBCSR_BACKEND) THEN
    1312              :          CALL dbcsr_work_create_prv(matrix%dbcsr, nblks_guess, sizedata_guess, n, work_mutable)
    1313              :       ELSE
    1314              :          ! Does not apply to DBM.
    1315              :       END IF
    1316         6830 :    END SUBROUTINE dbcsr_work_create
    1317              : 
    1318              : ! **************************************************************************************************
    1319              : !> \brief ...
    1320              : !> \param matrix_a ...
    1321              : !> \param matrix_b ...
    1322              : !> \param RESULT ...
    1323              : ! **************************************************************************************************
    1324        48015 :    SUBROUTINE dbcsr_dot_threadsafe(matrix_a, matrix_b, RESULT)
    1325              :       TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a, matrix_b
    1326              :       REAL(kind=dp), INTENT(INOUT)                       :: result
    1327              : 
    1328        48015 :       IF (USE_DBCSR_BACKEND) THEN
    1329              :          CALL dbcsr_dot_prv(matrix_a%dbcsr, matrix_b%dbcsr, RESULT)
    1330              :       ELSE
    1331              :          CPABORT("Not yet implemented for DBM.")
    1332              :       END IF
    1333        48015 :    END SUBROUTINE dbcsr_dot_threadsafe
    1334              : 
    1335            0 : END MODULE cp_dbcsr_api
        

Generated by: LCOV version 2.0-1