LCOV - code coverage report
Current view: top level - src/dbx - cp_dbcsr_api.F (source / functions) Hit Total Coverage
Test: CP2K Regtests (git:b4bd748) Lines: 178 185 96.2 %
Date: 2025-03-09 07:56:22 Functions: 51 56 91.1 %

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

Generated by: LCOV version 1.15