13 dbcsr_clear_mempools, dbcsr_clear_prv =>
dbcsr_clear, &
15 dbcsr_convert_offsets_to_sizes, dbcsr_convert_sizes_to_offsets, &
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, &
42 dbcsr_no_transpose, dbcsr_print_config, dbcsr_print_statistics, &
46 dbcsr_run_tests, dbcsr_scale_prv =>
dbcsr_scale, dbcsr_set_config, &
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, &
59#include "../base/base_uses.f90"
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
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
86 PUBLIC :: dbcsr_print_statistics
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
152 PUBLIC :: dbcsr_csr_type
153 PUBLIC :: dbcsr_csr_p_type
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
164 PUBLIC :: dbcsr_csr_type_real_8
176 TYPE(dbcsr_type_prv) :: dbcsr = dbcsr_type_prv()
182 TYPE(dbcsr_distribution_type_prv) :: dbcsr = dbcsr_distribution_type_prv()
188 TYPE(dbcsr_iterator_type_prv) :: dbcsr = dbcsr_iterator_type_prv()
193 MODULE PROCEDURE dbcsr_create_new, dbcsr_create_template
196 LOGICAL,
PARAMETER,
PRIVATE :: USE_DBCSR_BACKEND = .true.
207 IF (
ASSOCIATED(matrix))
THEN
222 IF (
ASSOCIATED(matrix))
THEN
237 CALL cp_abort(__location__, &
238 'You should not "deallocate" a referenced matrix. '// &
239 'Avoid pointers to DBCSR matrices.')
250 SUBROUTINE dbcsr_add(matrix_a, matrix_b, alpha_scalar, beta_scalar)
253 REAL(kind=
dp),
INTENT(IN) :: alpha_scalar, beta_scalar
255 IF (use_dbcsr_backend)
THEN
256 CALL dbcsr_add_prv(matrix_a%dbcsr, matrix_b%dbcsr, alpha_scalar, beta_scalar)
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)
270 CHARACTER(len=*),
INTENT(IN) :: filepath
274 IF (use_dbcsr_backend)
THEN
275 CALL dbcsr_binary_read_prv(filepath, distribution%dbcsr, matrix_new%dbcsr)
277 cpabort(
"Not yet implemented for DBM.")
288 CHARACTER(LEN=*),
INTENT(IN) :: filepath
290 IF (use_dbcsr_backend)
THEN
291 CALL dbcsr_binary_write_prv(matrix%dbcsr, filepath)
293 cpabort(
"Not yet implemented for DBM.")
304 IF (use_dbcsr_backend)
THEN
305 CALL dbcsr_clear_prv(matrix%dbcsr)
320 IF (use_dbcsr_backend)
THEN
321 CALL dbcsr_complete_redistribute_prv(matrix%dbcsr, redist%dbcsr)
334 TYPE(dbcsr_csr_type),
INTENT(INOUT) :: csr_mat
336 IF (use_dbcsr_backend)
THEN
337 CALL convert_csr_to_dbcsr_prv(dbcsr_mat%dbcsr, csr_mat)
339 cpabort(
"Not yet implemented for DBM.")
350 TYPE(dbcsr_csr_type),
INTENT(INOUT) :: csr_mat
352 IF (use_dbcsr_backend)
THEN
353 CALL convert_dbcsr_to_csr_prv(dbcsr_mat%dbcsr, csr_mat)
355 cpabort(
"Not yet implemented for DBM.")
367 SUBROUTINE dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
370 CHARACTER(LEN=*),
INTENT(IN),
OPTIONAL :: name
371 LOGICAL,
INTENT(IN),
OPTIONAL :: keep_sparsity, keep_imaginary
373 IF (use_dbcsr_backend)
THEN
374 CALL dbcsr_copy_prv(matrix_b%dbcsr, matrix_a%dbcsr, name=name, &
375 keep_sparsity=keep_sparsity, keep_imaginary=keep_imaginary)
377 IF (
PRESENT(name) .OR.
PRESENT(keep_sparsity) .OR.
PRESENT(keep_imaginary))
THEN
378 cpabort(
"Not yet implemented for DBM.")
380 CALL dbm_copy(matrix_b%dbm, matrix_a%dbm)
395 SUBROUTINE dbcsr_create_new(matrix, name, dist, matrix_type, row_blk_size, col_blk_size, &
396 reuse_arrays, mutable_work)
398 CHARACTER(len=*),
INTENT(IN) :: name
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
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 reuse_arrays=reuse_arrays, mutable_work=mutable_work)
410 cpabort(
"Not yet implemented for DBM.")
412 END SUBROUTINE dbcsr_create_new
426 SUBROUTINE dbcsr_create_template(matrix, name, template, dist, matrix_type, &
427 row_blk_size, col_blk_size, reuse_arrays, mutable_work)
429 CHARACTER(len=*),
INTENT(IN),
OPTIONAL :: name
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
438 IF (use_dbcsr_backend)
THEN
439 IF (
PRESENT(dist))
THEN
440 CALL dbcsr_create_prv(matrix=matrix%dbcsr, name=name, template=template%dbcsr, &
441 dist=dist%dbcsr, matrix_type=matrix_type, &
442 row_blk_size=row_blk_size, col_blk_size=col_blk_size, &
443 nze=0, data_type=dbcsr_type_real_8, reuse_arrays=reuse_arrays, &
444 mutable_work=mutable_work)
446 CALL dbcsr_create_prv(matrix=matrix%dbcsr, name=name, template=template%dbcsr, &
447 matrix_type=matrix_type, &
448 row_blk_size=row_blk_size, col_blk_size=col_blk_size, &
449 nze=0, data_type=dbcsr_type_real_8, reuse_arrays=reuse_arrays, &
450 mutable_work=mutable_work)
453 cpabort(
"Not yet implemented for DBM.")
455 END SUBROUTINE dbcsr_create_template
468 TYPE(dbcsr_csr_type),
INTENT(OUT) :: csr_mat
469 INTEGER :: dist_format
470 TYPE(
dbcsr_type),
INTENT(IN),
OPTIONAL :: csr_sparsity
471 INTEGER,
INTENT(IN),
OPTIONAL :: numnodes
473 IF (use_dbcsr_backend)
THEN
474 IF (
PRESENT(csr_sparsity))
THEN
475 CALL dbcsr_csr_create_from_dbcsr_prv(dbcsr_mat%dbcsr, csr_mat, dist_format, &
476 csr_sparsity%dbcsr, numnodes)
478 CALL dbcsr_csr_create_from_dbcsr_prv(dbcsr_mat%dbcsr, csr_mat, &
479 dist_format, numnodes=numnodes)
482 cpabort(
"Not yet implemented for DBM.")
494 TYPE(
dbcsr_type),
INTENT(IN) :: rmatrix, imatrix
495 TYPE(dbcsr_csr_type),
INTENT(INOUT) :: csr_mat
496 INTEGER :: dist_format
498 COMPLEX(KIND=dp),
PARAMETER :: ione = cmplx(0.0_dp, 1.0_dp, kind=
dp), &
499 rone = cmplx(1.0_dp, 0.0_dp, kind=
dp)
503 IF (use_dbcsr_backend)
THEN
504 CALL dbcsr_create_prv(tmp_matrix%dbcsr, template=rmatrix%dbcsr, data_type=dbcsr_type_complex_8)
505 CALL dbcsr_create_prv(cmatrix%dbcsr, template=rmatrix%dbcsr, data_type=dbcsr_type_complex_8)
506 CALL dbcsr_copy_prv(cmatrix%dbcsr, rmatrix%dbcsr)
507 CALL dbcsr_copy_prv(tmp_matrix%dbcsr, imatrix%dbcsr)
508 CALL dbcsr_add_prv(cmatrix%dbcsr, tmp_matrix%dbcsr, rone, ione)
509 CALL dbcsr_release_prv(tmp_matrix%dbcsr)
511 CALL dbcsr_csr_create_from_dbcsr_prv(cmatrix%dbcsr, csr_mat, dist_format)
512 CALL convert_dbcsr_to_csr_prv(cmatrix%dbcsr, csr_mat)
513 CALL dbcsr_release_prv(cmatrix%dbcsr)
515 cpabort(
"Not yet implemented for DBM.")
528 IF (use_dbcsr_backend)
THEN
529 CALL dbcsr_desymmetrize_prv(matrix_a%dbcsr, matrix_b%dbcsr)
531 cpabort(
"Not yet implemented for DBM.")
542 IF (use_dbcsr_backend)
THEN
543 CALL dbcsr_distribute_prv(matrix%dbcsr)
545 cpabort(
"Not yet implemented for DBM.")
570 group, mynode, numnodes, nprows, npcols, myprow, mypcol, &
571 pgrid, subgroups_defined, prow_group, pcol_group)
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, &
578 INTEGER,
DIMENSION(:, :),
OPTIONAL,
POINTER :: pgrid
579 LOGICAL,
INTENT(OUT),
OPTIONAL :: subgroups_defined
580 INTEGER,
INTENT(OUT),
OPTIONAL :: prow_group, pcol_group
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 pgrid, subgroups_defined, prow_group, pcol_group)
587 cpabort(
"Not yet implemented for DBM.")
598 IF (use_dbcsr_backend)
THEN
599 CALL dbcsr_distribution_hold_prv(dist%dbcsr)
601 cpabort(
"Not yet implemented for DBM.")
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
624 IF (use_dbcsr_backend)
THEN
625 IF (
PRESENT(template))
THEN
626 CALL dbcsr_distribution_new_prv(dist%dbcsr, template%dbcsr, group, pgrid, &
627 row_dist, col_dist, reuse_arrays)
629 CALL dbcsr_distribution_new_prv(dist%dbcsr, group=group, pgrid=pgrid, &
630 row_dist=row_dist, col_dist=col_dist, &
631 reuse_arrays=reuse_arrays)
634 cpabort(
"Not yet implemented for DBM.")
645 IF (use_dbcsr_backend)
THEN
646 CALL dbcsr_distribution_release_prv(dist%dbcsr)
648 cpabort(
"Not yet implemented for DBM.")
659 REAL(
dp),
INTENT(IN) :: eps
661 IF (use_dbcsr_backend)
THEN
662 CALL dbcsr_filter_prv(matrix%dbcsr, eps)
664 cpabort(
"Not yet implemented for DBM.")
675 IF (use_dbcsr_backend)
THEN
676 CALL dbcsr_finalize_prv(matrix%dbcsr)
678 cpabort(
"Not yet implemented for DBM.")
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
699 IF (use_dbcsr_backend)
THEN
700 CALL dbcsr_get_block_p_prv(matrix%dbcsr, row, col, block, found, row_size, col_size)
702 cpabort(
"Not yet implemented for DBM.")
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
733 IF (use_dbcsr_backend)
THEN
735 CALL dbcsr_get_block_p_prv(matrix_p%dbcsr, row, col, block, found, row_size, col_size)
737 cpabort(
"Not yet implemented for DBM.")
750 INTEGER,
INTENT(IN),
OPTIONAL :: lb, ub
751 REAL(kind=
dp),
DIMENSION(:),
POINTER :: res
753 IF (use_dbcsr_backend)
THEN
754 res => dbcsr_get_data_p_prv(matrix%dbcsr, select_data_type=0.0_dp, lb=lb, ub=ub)
756 cpabort(
"Not yet implemented for DBM.")
769 IF (use_dbcsr_backend)
THEN
770 data_size = dbcsr_get_data_size_prv(matrix%dbcsr)
772 cpabort(
"Not yet implemented for DBM.")
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)
809 INTEGER,
INTENT(OUT),
OPTIONAL :: nblkrows_total, nblkcols_total, nfullrows_total, &
810 nfullcols_total, nblkrows_local, nblkcols_local, nfullrows_local, nfullcols_local, &
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
815 OPTIONAL :: distribution
816 CHARACTER(len=*),
INTENT(OUT),
OPTIONAL :: name
817 CHARACTER,
INTENT(OUT),
OPTIONAL :: matrix_type
820 INTEGER :: group_handle
821 TYPE(dbcsr_distribution_type_prv) :: my_distribution
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, &
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, &
845 matrix_type=matrix_type, &
848 IF (
PRESENT(distribution)) distribution%dbcsr = my_distribution
849 IF (
PRESENT(group))
CALL group%set_handle(group_handle)
851 cpabort(
"Not yet implemented for DBM.")
862 CHARACTER :: matrix_type
864 IF (use_dbcsr_backend)
THEN
865 matrix_type = dbcsr_get_matrix_type_prv(matrix%dbcsr)
867 cpabort(
"Not yet implemented for DBM.")
878 INTEGER :: num_blocks
880 IF (use_dbcsr_backend)
THEN
881 num_blocks = dbcsr_get_num_blocks_prv(matrix%dbcsr)
883 cpabort(
"Not yet implemented for DBM.")
894 REAL(kind=
dp) :: occupation
896 IF (use_dbcsr_backend)
THEN
897 occupation = dbcsr_get_occupation_prv(matrix%dbcsr)
899 cpabort(
"Not yet implemented for DBM.")
912 INTEGER,
INTENT(IN) :: row, column
913 INTEGER,
INTENT(OUT) :: processor
915 IF (use_dbcsr_backend)
THEN
916 CALL dbcsr_get_stored_coordinates_prv(matrix%dbcsr, row, column, processor)
918 cpabort(
"Not yet implemented for DBM.")
929 LOGICAL :: has_symmetry
931 IF (use_dbcsr_backend)
THEN
932 has_symmetry = dbcsr_has_symmetry_prv(matrix%dbcsr)
934 cpabort(
"Not yet implemented for DBM.")
945 LOGICAL :: blocks_left
947 IF (use_dbcsr_backend)
THEN
948 blocks_left = dbcsr_iterator_blocks_left_prv(iterator%dbcsr)
950 cpabort(
"Not yet implemented for DBM.")
967 block_number_argument_has_been_removed, &
968 row_size, col_size, &
969 row_offset, col_offset)
971 INTEGER,
INTENT(OUT),
OPTIONAL :: row, column
972 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: block
973 LOGICAL,
OPTIONAL :: block_number_argument_has_been_removed
974 INTEGER,
INTENT(OUT),
OPTIONAL :: row_size, col_size, row_offset, &
977 INTEGER :: my_column, my_row
978 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: my_block
980 cpassert(.NOT.
PRESENT(block_number_argument_has_been_removed))
982 IF (use_dbcsr_backend)
THEN
983 CALL dbcsr_iterator_next_block_prv(iterator%dbcsr, row=my_row, column=my_column, &
984 block=my_block, row_size=row_size, col_size=col_size, &
985 row_offset=row_offset, col_offset=col_offset)
986 IF (
PRESENT(block)) block => my_block
987 IF (
PRESENT(row)) row = my_row
988 IF (
PRESENT(column)) column = my_column
990 cpabort(
"Not yet implemented for DBM.")
1005 LOGICAL,
INTENT(IN),
OPTIONAL :: shared, dynamic, dynamic_byrows
1007 IF (use_dbcsr_backend)
THEN
1008 CALL dbcsr_iterator_start_prv(iterator%dbcsr, matrix%dbcsr, shared, dynamic, dynamic_byrows)
1010 cpabort(
"Not yet implemented for DBM.")
1026 LOGICAL,
INTENT(IN),
OPTIONAL :: shared, dynamic, dynamic_byrows
1028 IF (use_dbcsr_backend)
THEN
1029 CALL dbcsr_iterator_start_prv(iterator%dbcsr, matrix%dbcsr, shared, dynamic, &
1030 dynamic_byrows, read_only=.true.)
1032 cpabort(
"Not yet implemented for DBM.")
1043 IF (use_dbcsr_backend)
THEN
1044 CALL dbcsr_iterator_stop_prv(iterator%dbcsr)
1046 cpabort(
"Not yet implemented for DBM.")
1057 IF (use_dbcsr_backend)
THEN
1058 CALL dbcsr_mp_grid_setup_prv(dist%dbcsr)
1060 cpabort(
"Not yet implemented for DBM.")
1084 matrix_c, first_row, last_row, &
1085 first_column, last_column, first_k, last_k, &
1086 retain_sparsity, filter_eps, flop)
1087 CHARACTER(LEN=1),
INTENT(IN) :: transa, transb
1088 REAL(kind=
dp),
INTENT(IN) :: alpha
1089 TYPE(
dbcsr_type),
INTENT(IN) :: matrix_a, matrix_b
1090 REAL(kind=
dp),
INTENT(IN) :: beta
1092 INTEGER,
INTENT(IN),
OPTIONAL :: first_row, last_row, first_column, &
1093 last_column, first_k, last_k
1094 LOGICAL,
INTENT(IN),
OPTIONAL :: retain_sparsity
1095 REAL(kind=
dp),
INTENT(IN),
OPTIONAL :: filter_eps
1096 INTEGER(int_8),
INTENT(OUT),
OPTIONAL :: flop
1098 IF (use_dbcsr_backend)
THEN
1099 CALL dbcsr_multiply_prv(transa, transb, alpha, matrix_a%dbcsr, matrix_b%dbcsr, beta, &
1100 matrix_c%dbcsr, first_row, last_row, first_column, last_column, &
1101 first_k, last_k, retain_sparsity, filter_eps=filter_eps, flop=flop)
1103 cpabort(
"Not yet implemented for DBM.")
1117 INTEGER,
INTENT(IN) :: row, col
1118 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(IN) :: block
1119 LOGICAL,
INTENT(IN),
OPTIONAL :: summation
1121 IF (use_dbcsr_backend)
THEN
1122 CALL dbcsr_put_block_prv(matrix%dbcsr, row, col, block, summation=summation)
1124 cpabort(
"Not yet implemented for DBM.")
1135 IF (use_dbcsr_backend)
THEN
1136 CALL dbcsr_release_prv(matrix%dbcsr)
1138 cpabort(
"Not yet implemented for DBM.")
1149 IF (use_dbcsr_backend)
THEN
1150 CALL dbcsr_replicate_all_prv(matrix%dbcsr)
1152 cpabort(
"Not yet implemented for DBM.")
1164 INTEGER,
DIMENSION(:),
INTENT(IN) :: rows, cols
1166 IF (use_dbcsr_backend)
THEN
1167 CALL dbcsr_reserve_blocks_prv(matrix%dbcsr, rows, cols)
1169 cpabort(
"Not yet implemented for DBM.")
1180 REAL(kind=
dp),
INTENT(IN) :: alpha_scalar
1182 IF (use_dbcsr_backend)
THEN
1183 CALL dbcsr_scale_prv(matrix%dbcsr, alpha_scalar)
1185 CALL dbm_scale(matrix%dbm, alpha_scalar)
1196 REAL(kind=
dp),
INTENT(IN) :: alpha
1198 IF (use_dbcsr_backend)
THEN
1199 CALL dbcsr_set_prv(matrix%dbcsr, alpha)
1201 IF (alpha == 0.0_dp)
THEN
1204 cpabort(
"Not yet implemented for DBM.")
1216 IF (use_dbcsr_backend)
THEN
1217 CALL dbcsr_sum_replicated_prv(matrix%dbcsr)
1219 cpabort(
"Not yet implemented for DBM.")
1233 TYPE(
dbcsr_type),
INTENT(INOUT) :: transposed
1235 LOGICAL,
INTENT(IN),
OPTIONAL :: shallow_data_copy, transpose_distribution
1237 OPTIONAL :: use_distribution
1239 IF (use_dbcsr_backend)
THEN
1240 IF (
PRESENT(use_distribution))
THEN
1241 CALL dbcsr_transposed_prv(transposed%dbcsr, normal%dbcsr, &
1242 shallow_data_copy=shallow_data_copy, &
1243 transpose_distribution=transpose_distribution, &
1244 use_distribution=use_distribution%dbcsr)
1246 CALL dbcsr_transposed_prv(transposed%dbcsr, normal%dbcsr, &
1247 shallow_data_copy=shallow_data_copy, &
1248 transpose_distribution=transpose_distribution)
1251 cpabort(
"Not yet implemented for DBM.")
1262 LOGICAL :: valid_index
1264 IF (use_dbcsr_backend)
THEN
1265 valid_index = dbcsr_valid_index_prv(matrix%dbcsr)
1267 valid_index = .true.
1279 INTEGER,
INTENT(IN),
OPTIONAL :: verbosity
1280 LOGICAL,
INTENT(IN),
OPTIONAL :: local
1282 IF (use_dbcsr_backend)
THEN
1283 CALL dbcsr_verify_matrix_prv(matrix%dbcsr, verbosity, local)
1299 INTEGER,
INTENT(IN),
OPTIONAL :: nblks_guess, sizedata_guess, n
1300 LOGICAL,
INTENT(in),
OPTIONAL :: work_mutable
1302 IF (use_dbcsr_backend)
THEN
1303 CALL dbcsr_work_create_prv(matrix%dbcsr, nblks_guess, sizedata_guess, n, work_mutable)
1316 TYPE(
dbcsr_type),
INTENT(IN) :: matrix_a, matrix_b
1317 REAL(kind=
dp),
INTENT(INOUT) :: result
1319 IF (use_dbcsr_backend)
THEN
1320 CALL dbcsr_dot_prv(matrix_a%dbcsr, matrix_b%dbcsr, result)
1322 cpabort(
"Not yet implemented for DBM.")
subroutine, public dbcsr_verify_matrix(matrix, verbosity, local)
...
subroutine, public dbcsr_transposed(transposed, normal, shallow_data_copy, transpose_distribution, use_distribution)
...
subroutine, public dbcsr_distribution_release(dist)
...
logical function, public dbcsr_has_symmetry(matrix)
...
subroutine, public dbcsr_release_p(matrix)
...
integer function, public dbcsr_get_data_size(matrix)
...
subroutine, public dbcsr_get_readonly_block_p(matrix, row, col, block, found, row_size, col_size)
Like dbcsr_get_block_p() but with matrix being INTENT(IN). When invoking this routine,...
subroutine, public dbcsr_scale(matrix, alpha_scalar)
...
subroutine, public dbcsr_convert_dbcsr_to_csr(dbcsr_mat, csr_mat)
...
subroutine, public dbcsr_distribution_new(dist, template, group, pgrid, row_dist, col_dist, reuse_arrays)
...
subroutine, public dbcsr_deallocate_matrix(matrix)
...
subroutine, public dbcsr_iterator_next_block(iterator, row, column, block, block_number_argument_has_been_removed, row_size, col_size, row_offset, col_offset)
...
character function, public dbcsr_get_matrix_type(matrix)
...
logical function, public dbcsr_iterator_blocks_left(iterator)
...
subroutine, public dbcsr_distribution_hold(dist)
...
subroutine, public dbcsr_iterator_stop(iterator)
...
subroutine, public dbcsr_convert_csr_to_dbcsr(dbcsr_mat, csr_mat)
...
logical function, public dbcsr_valid_index(matrix)
...
subroutine, public dbcsr_desymmetrize(matrix_a, matrix_b)
...
subroutine, public dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
...
subroutine, public dbcsr_get_block_p(matrix, row, col, block, found, row_size, col_size)
...
subroutine, public dbcsr_multiply(transa, transb, alpha, matrix_a, matrix_b, beta, matrix_c, first_row, last_row, first_column, last_column, first_k, last_k, retain_sparsity, filter_eps, flop)
...
subroutine, public dbcsr_replicate_all(matrix)
...
subroutine, public dbcsr_get_info(matrix, nblkrows_total, nblkcols_total, nfullrows_total, nfullcols_total, nblkrows_local, nblkcols_local, nfullrows_local, nfullcols_local, my_prow, my_pcol, local_rows, local_cols, proc_row_dist, proc_col_dist, row_blk_size, col_blk_size, row_blk_offset, col_blk_offset, distribution, name, matrix_type, group)
...
subroutine, public dbcsr_reserve_blocks(matrix, rows, cols)
...
subroutine, public dbcsr_get_stored_coordinates(matrix, row, column, processor)
...
subroutine, public dbcsr_csr_create_and_convert_complex(rmatrix, imatrix, csr_mat, dist_format)
Combines csr_create_from_dbcsr and convert_dbcsr_to_csr to produce a complex CSR matrix.
subroutine, public dbcsr_init_p(matrix)
...
subroutine, public dbcsr_csr_create_from_dbcsr(dbcsr_mat, csr_mat, dist_format, csr_sparsity, numnodes)
...
subroutine, public dbcsr_distribute(matrix)
...
real(kind=dp) function, dimension(:), pointer, public dbcsr_get_data_p(matrix, lb, ub)
...
subroutine, public dbcsr_work_create(matrix, nblks_guess, sizedata_guess, n, work_mutable)
...
subroutine, public dbcsr_sum_replicated(matrix)
...
subroutine, public dbcsr_filter(matrix, eps)
...
subroutine, public dbcsr_binary_write(matrix, filepath)
...
real(kind=dp) function, public dbcsr_get_occupation(matrix)
...
subroutine, public dbcsr_dot_threadsafe(matrix_a, matrix_b, result)
...
subroutine, public dbcsr_finalize(matrix)
...
subroutine, public dbcsr_iterator_start(iterator, matrix, shared, dynamic, dynamic_byrows)
...
subroutine, public dbcsr_set(matrix, alpha)
...
subroutine, public dbcsr_release(matrix)
...
subroutine, public dbcsr_complete_redistribute(matrix, redist)
...
integer function, public dbcsr_get_num_blocks(matrix)
...
subroutine, public dbcsr_iterator_readonly_start(iterator, matrix, shared, dynamic, dynamic_byrows)
Like dbcsr_iterator_start() but with matrix being INTENT(IN). When invoking this routine,...
subroutine, public dbcsr_mp_grid_setup(dist)
...
subroutine, public dbcsr_binary_read(filepath, distribution, matrix_new)
...
subroutine, public dbcsr_clear(matrix)
...
subroutine, public dbcsr_put_block(matrix, row, col, block, summation)
...
subroutine, public dbcsr_add(matrix_a, matrix_b, alpha_scalar, beta_scalar)
...
subroutine, public dbcsr_distribution_get(dist, row_dist, col_dist, nrows, ncols, has_threads, group, mynode, numnodes, nprows, npcols, myprow, mypcol, pgrid, subgroups_defined, prow_group, pcol_group)
...
subroutine, public dbm_redistribute(matrix, redist)
Copies content of matrix_b into matrix_a. Matrices may have different distributions.
subroutine, public dbm_zero(matrix)
Sets all blocks in the given matrix to zero.
subroutine, public dbm_clear(matrix)
Remove all blocks from given matrix, but does not release the underlying memory.
subroutine, public dbm_scale(matrix, alpha)
Multiplies all entries in the given matrix by the given factor alpha.
subroutine, public dbm_add(matrix_a, matrix_b)
Adds matrix_b to matrix_a.
subroutine, public dbm_copy(matrix_a, matrix_b)
Copies content of matrix_b into matrix_a. Matrices must have the same row/col block sizes and distrib...
Defines the basic variable types.
integer, parameter, public int_8
integer, parameter, public dp
Interface to the message passing library MPI.