Copy data from one data area to another, the most basic form. There are no checks done for correctness!
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(dbcsr_data_obj), | intent(inout) | :: | dst |
destination data area |
||
integer, | intent(in), | DIMENSION(:) | :: | dst_lb |
lower bounds for destination sizes for destination |
|
integer, | intent(in), | DIMENSION(:) | :: | dst_sizes |
lower bounds for destination sizes for destination |
|
type(dbcsr_data_obj), | intent(in) | :: | src |
source data area |
||
integer, | intent(in), | DIMENSION(:) | :: | src_lb |
lower bounds for source sizes for source |
|
integer, | intent(in), | DIMENSION(:) | :: | src_sizes |
lower bounds for source sizes for source |
SUBROUTINE dbcsr_data_copy_aa2(dst, dst_lb, dst_sizes, & src, src_lb, src_sizes) !! Copy data from one data area to another, the most basic form. !! There are no checks done for correctness! TYPE(dbcsr_data_obj), INTENT(INOUT) :: dst !! destination data area INTEGER, DIMENSION(:), INTENT(IN) :: dst_lb, dst_sizes !! lower bounds for destination !! sizes for destination TYPE(dbcsr_data_obj), INTENT(IN) :: src !! source data area INTEGER, DIMENSION(:), INTENT(IN) :: src_lb, src_sizes !! lower bounds for source !! sizes for source CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_data_copy_aa2' INTEGER :: dst_d, dst_dt, handle, src_d, src_dt INTEGER, DIMENSION(2) :: dst_ub, src_ub ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) ! src_dt = dbcsr_data_get_type(src) dst_dt = dbcsr_data_get_type(dst) IF (dbcsr_type_is_2d(src_dt)) THEN src_d = 2 ELSE src_d = 1 END IF IF (dbcsr_type_is_2d(dst_dt)) THEN dst_d = 2 ELSE dst_d = 1 END IF src_ub(1:src_d) = src_lb(1:src_d) + src_sizes(1:src_d) - 1 dst_ub(1:dst_d) = dst_lb(1:dst_d) + dst_sizes(1:dst_d) - 1 IF (careful_mod) THEN IF (.NOT. dbcsr_data_exists(dst)) & DBCSR_ABORT("Invalid target data area") IF (.NOT. dbcsr_data_exists(src)) & DBCSR_ABORT("Invalid source data area") IF (dbcsr_type_2d_to_1d(src_dt) /= dbcsr_type_2d_to_1d(dst_dt)) & DBCSR_ABORT("Data types must be comptable: ") IF (dbcsr_type_is_2d(dst_dt)) THEN IF (SIZE(dst_lb) /= 2) & DBCSR_ABORT("size must be 2 for 2-d dst_lb") IF (SIZE(dst_sizes) /= 2) & DBCSR_ABORT("size must be 2 for 2-d dst_sizes") ELSE IF (SIZE(dst_lb) /= 1) & DBCSR_ABORT("size must be 1 for 1-d dst_lb") IF (SIZE(dst_sizes) /= 1) & DBCSR_ABORT("size must be 1 for 1-d dst_sizes") END IF IF (dbcsr_type_is_2d(src_dt)) THEN IF (SIZE(src_lb) /= 2) & DBCSR_ABORT("size must be 2 for 2-d src_lb") IF (SIZE(src_sizes) /= 2) & DBCSR_ABORT("size must be 2 for 2-d src_sizes") ELSE IF (SIZE(src_lb) /= 1) & DBCSR_ABORT("size must be 1 for 1-d src_lb") IF (SIZE(src_sizes) /= 1) & DBCSR_ABORT("size must be 1 for 1-d src_sizes") END IF IF (debug_mod) THEN CALL dbcsr_data_verify_bounds(dst, dst_lb(1:dst_d), dst_ub(1:dst_d)) CALL dbcsr_data_verify_bounds(src, src_lb(1:src_d), src_ub(1:src_d)) END IF END IF ! SELECT CASE (src_dt) CASE (dbcsr_type_real_4) IF (dbcsr_type_is_2d(dst_dt)) THEN CALL dbcsr_block_copy(dst%d%r2_sp(dst_lb(1):dst_ub(1), & dst_lb(2):dst_ub(2)), & src%d%r_sp(src_lb(1):src_ub(1)), & src_sizes(1), 1) ELSE CALL dbcsr_block_copy(dst%d%r_sp(dst_lb(1):dst_ub(1)), & src%d%r_sp(src_lb(1):src_ub(1)), & src_sizes(1), 1) END IF CASE (dbcsr_type_real_8) IF (dbcsr_type_is_2d(dst_dt)) THEN CALL dbcsr_block_copy(dst%d%r2_dp(dst_lb(1):dst_ub(1), & dst_lb(2):dst_ub(2)), & src%d%r_dp(src_lb(1):src_ub(1)), & src_sizes(1), 1) ELSE CALL dbcsr_block_copy(dst%d%r_dp(dst_lb(1):dst_ub(1)), & src%d%r_dp(src_lb(1):src_ub(1)), & src_sizes(1), 1) END IF CASE (dbcsr_type_complex_4) IF (dbcsr_type_is_2d(dst_dt)) THEN CALL dbcsr_block_copy(dst%d%c2_sp(dst_lb(1):dst_ub(1), & dst_lb(2):dst_ub(2)), & src%d%c_sp(src_lb(1):src_ub(1)), & src_sizes(1), 1) ELSE CALL dbcsr_block_copy(dst%d%c_sp(dst_lb(1):dst_ub(1)), & src%d%c_sp(src_lb(1):src_ub(1)), & src_sizes(1), 1) END IF CASE (dbcsr_type_complex_8) IF (dbcsr_type_is_2d(dst_dt)) THEN CALL dbcsr_block_copy(dst%d%c2_dp(dst_lb(1):dst_ub(1), & dst_lb(2):dst_ub(2)), & src%d%c_dp(src_lb(1):src_ub(1)), & src_sizes(1), 1) ELSE CALL dbcsr_block_copy(dst%d%c_dp(dst_lb(1):dst_ub(1)), & src%d%c_dp(src_lb(1):src_ub(1)), & src_sizes(1), 1) END IF CASE (dbcsr_type_real_4_2d) IF (dbcsr_type_is_2d(dst_dt)) THEN CALL dbcsr_block_copy(dst%d%r2_sp(dst_lb(1):dst_ub(1), & dst_lb(2):dst_ub(2)), & src%d%r2_sp(src_lb(1):src_ub(1), & src_lb(2):src_ub(2)), & dst_sizes(1), dst_sizes(2)) ELSE CALL dbcsr_block_copy(dst%d%r_sp(dst_lb(1):dst_ub(1)), & src%d%r2_sp(src_lb(1):src_ub(1), & src_lb(2):src_ub(2)), & dst_sizes(1), dst_sizes(2)) END IF CASE (dbcsr_type_real_8_2d) IF (dbcsr_type_is_2d(dst_dt)) THEN CALL dbcsr_block_copy(dst%d%r2_dp(dst_lb(1):dst_ub(1), & dst_lb(2):dst_ub(2)), & src%d%r2_dp(src_lb(1):src_ub(1), & src_lb(2):src_ub(2)), & dst_sizes(1), dst_sizes(2)) ELSE CALL dbcsr_block_copy(dst%d%r_dp(dst_lb(1):dst_ub(1)), & src%d%r2_dp(src_lb(1):src_ub(1), & src_lb(2):src_ub(2)), & dst_sizes(1), dst_sizes(2)) END IF CASE (dbcsr_type_complex_4_2d) IF (dbcsr_type_is_2d(dst_dt)) THEN CALL dbcsr_block_copy(dst%d%c2_sp(dst_lb(1):dst_ub(1), & dst_lb(2):dst_ub(2)), & src%d%c2_sp(src_lb(1):src_ub(1), & src_lb(2):src_ub(2)), & dst_sizes(1), dst_sizes(2)) ELSE CALL dbcsr_block_copy(dst%d%c_sp(dst_lb(1):dst_ub(1)), & src%d%c2_sp(src_lb(1):src_ub(1), & src_lb(2):src_ub(2)), & dst_sizes(1), dst_sizes(2)) END IF CASE (dbcsr_type_complex_8_2d) IF (dbcsr_type_is_2d(dst_dt)) THEN CALL dbcsr_block_copy(dst%d%c2_dp(dst_lb(1):dst_ub(1), & dst_lb(2):dst_ub(2)), & src%d%c2_dp(src_lb(1):src_ub(1), & src_lb(2):src_ub(2)), & dst_sizes(1), dst_sizes(2)) ELSE CALL dbcsr_block_copy(dst%d%c_dp(dst_lb(1):dst_ub(1)), & src%d%c2_dp(src_lb(1):src_ub(1), & src_lb(2):src_ub(2)), & dst_sizes(1), dst_sizes(2)) END IF CASE default DBCSR_ABORT("Invalid data type") END SELECT CALL timestop(handle) END SUBROUTINE dbcsr_data_copy_aa2