Copy data from one data area to another. 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) | :: | lb |
lower bound for destination (and source if not given explicitly) number of elements to copy |
||
integer, | intent(in) | :: | data_size |
lower bound for destination (and source if not given explicitly) number of elements to copy |
||
type(dbcsr_data_obj), | intent(in) | :: | src |
source data area |
||
integer, | intent(in), | optional | :: | source_lb |
lower bound of source |
|
type(dbcsr_scalar_type), | intent(in), | optional | :: | scale |
scale by this factor |
|
integer, | intent(in), | optional | :: | lb2 |
2nd dimension lower bound 2nd dimension data size 2nd dimension lower bound for source |
|
integer, | intent(in), | optional | :: | data_size2 |
2nd dimension lower bound 2nd dimension data size 2nd dimension lower bound for source |
|
integer, | intent(in), | optional | :: | source_lb2 |
2nd dimension lower bound 2nd dimension data size 2nd dimension lower bound for source |
SUBROUTINE dbcsr_data_copy_aa(dst, lb, data_size, src, source_lb, scale, & lb2, data_size2, source_lb2) !! Copy data from one data area to another. !! There are no checks done for correctness! TYPE(dbcsr_data_obj), INTENT(INOUT) :: dst !! destination data area INTEGER, INTENT(IN) :: lb, data_size !! lower bound for destination (and source if not given explicitly) !! number of elements to copy TYPE(dbcsr_data_obj), INTENT(IN) :: src !! source data area INTEGER, INTENT(IN), OPTIONAL :: source_lb !! lower bound of source TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL :: scale !! scale by this factor INTEGER, INTENT(IN), OPTIONAL :: lb2, data_size2, source_lb2 !! 2nd dimension lower bound !! 2nd dimension data size !! 2nd dimension lower bound for source INTEGER :: lb2_s, lb_s, ub, ub2, ub2_s, ub_s ! --------------------------------------------------------------------------- lb2_s = 0 ub2_s = 0 IF (debug_mod) THEN IF (.NOT. ASSOCIATED(dst%d) .OR. .NOT. ASSOCIATED(src%d)) & DBCSR_ABORT("Data areas must be setup.") IF (dst%d%data_type .NE. src%d%data_type) & DBCSR_ABORT("Data type must be the same.") END IF IF (PRESENT(scale) .AND. careful_mod) THEN IF (dbcsr_type_is_2d(src%d%data_type)) THEN IF (scale%data_type .NE. dbcsr_type_2d_to_1d(src%d%data_type)) & DBCSR_ABORT("Incomptable data types") ELSE IF (scale%data_type .NE. src%d%data_type) & DBCSR_ABORT("Incomptable data types") END IF END IF ub = lb + data_size - 1 IF (PRESENT(source_lb)) THEN lb_s = source_lb ub_s = source_lb + data_size - 1 ELSE lb_s = lb ub_s = ub END IF IF (careful_mod) THEN IF (dbcsr_type_is_2d(src%d%data_type) .AND. .NOT. PRESENT(lb2)) & DBCSR_ABORT("Must specify lb2 for 2-D data area") IF (dbcsr_type_is_2d(src%d%data_type) .AND. .NOT. PRESENT(data_size2)) & DBCSR_ABORT("Must specify data_size2 for 2-D data area") END IF IF (PRESENT(lb2)) THEN IF (careful_mod) THEN IF (.NOT. dbcsr_type_is_2d(src%d%data_type)) & DBCSR_WARN("Should not specify lb2 for 1-D data") END IF ub2 = lb2 + data_size2 - 1 IF (PRESENT(source_lb2)) THEN lb2_s = source_lb2 ub2_s = source_lb2 + data_size2 - 1 ELSE lb2_s = lb2 ub2_s = ub2 END IF END IF SELECT CASE (src%d%data_type) CASE (dbcsr_type_real_4) IF (debug_mod) THEN IF (.NOT. ASSOCIATED(dst%d%r_sp)) & DBCSR_ABORT("associated(dst%d%r_sp)") IF (.NOT. ASSOCIATED(src%d%r_sp)) & DBCSR_ABORT("associated(src%d%r_sp)") IF (lb < LBOUND(dst%d%r_sp, 1)) & DBCSR_ABORT("lb dst%d%r_sp") IF (ub > UBOUND(dst%d%r_sp, 1)) & DBCSR_ABORT("ub dst%d%r_sp") IF (lb_s < LBOUND(src%d%r_sp, 1)) & DBCSR_ABORT("lb src%d%r_sp") IF (ub_s > UBOUND(src%d%r_sp, 1)) & DBCSR_ABORT("ub src%d%r_sp") END IF IF (PRESENT(scale)) THEN dst%d%r_sp(lb:ub) = scale%r_sp*src%d%r_sp(lb_s:ub_s) ELSE dst%d%r_sp(lb:ub) = src%d%r_sp(lb_s:ub_s) END IF CASE (dbcsr_type_real_8) IF (debug_mod) THEN IF (.NOT. ASSOCIATED(dst%d%r_dp)) & DBCSR_ABORT("associated(dst%d%r_dp)") IF (.NOT. ASSOCIATED(src%d%r_dp)) & DBCSR_ABORT("associated(src%d%r_dp)") IF (lb < LBOUND(dst%d%r_dp, 1)) & DBCSR_ABORT("lb dst%d%r_dp") IF (ub > UBOUND(dst%d%r_dp, 1)) & DBCSR_ABORT("ub dst%d%r_dp") IF (lb_s < LBOUND(src%d%r_dp, 1)) & DBCSR_ABORT("lb src%d%r_dp") IF (ub_s > UBOUND(src%d%r_dp, 1)) & DBCSR_ABORT("ub src%d%r_dp") END IF IF (PRESENT(scale)) THEN dst%d%r_dp(lb:ub) = scale%r_dp*src%d%r_dp(lb_s:ub_s) ELSE dst%d%r_dp(lb:ub) = src%d%r_dp(lb_s:ub_s) END IF CASE (dbcsr_type_complex_4) IF (debug_mod) THEN IF (.NOT. ASSOCIATED(dst%d%c_sp)) & DBCSR_ABORT("associated(dst%d%c_sp)") IF (.NOT. ASSOCIATED(src%d%c_sp)) & DBCSR_ABORT("associated(src%d%c_sp)") IF (lb < LBOUND(dst%d%c_sp, 1)) & DBCSR_ABORT("lb dst%d%c_sp") IF (ub > UBOUND(dst%d%c_sp, 1)) & DBCSR_ABORT("ub dst%d%c_sp") IF (lb_s < LBOUND(src%d%c_sp, 1)) & DBCSR_ABORT("lb src%d%c_sp") IF (ub_s > UBOUND(src%d%c_sp, 1)) & DBCSR_ABORT("ub src%d%c_sp") END IF IF (PRESENT(scale)) THEN dst%d%c_sp(lb:ub) = scale%c_sp*src%d%c_sp(lb_s:ub_s) ELSE dst%d%c_sp(lb:ub) = src%d%c_sp(lb_s:ub_s) END IF CASE (dbcsr_type_complex_8) IF (debug_mod) THEN IF (.NOT. ASSOCIATED(dst%d%c_dp)) & DBCSR_ABORT("associated(dst%d%c_dp)") IF (.NOT. ASSOCIATED(src%d%c_dp)) & DBCSR_ABORT("associated(src%d%c_dp)") IF (lb < LBOUND(dst%d%c_dp, 1)) & DBCSR_ABORT("lb dst%d%c_dp") IF (ub > UBOUND(dst%d%c_dp, 1)) & DBCSR_ABORT("ub dst%d%c_dp") IF (lb_s < LBOUND(src%d%c_dp, 1)) & DBCSR_ABORT("lb src%d%c_dp") IF (ub_s > UBOUND(src%d%c_dp, 1)) & DBCSR_ABORT("ub src%d%c_dp") END IF IF (PRESENT(scale)) THEN dst%d%c_dp(lb:ub) = scale%c_dp*src%d%c_dp(lb_s:ub_s) ELSE dst%d%c_dp(lb:ub) = src%d%c_dp(lb_s:ub_s) END IF CASE (dbcsr_type_real_4_2d) IF (PRESENT(scale)) THEN dst%d%r2_sp(lb:ub, lb2:ub2) = & scale%r_sp*src%d%r2_sp(lb_s:ub_s, lb2_s:ub2_s) ELSE dst%d%r2_sp(lb:ub, lb2:ub2) = src%d%r2_sp(lb_s:ub_s, lb2_s:ub2_s) END IF CASE (dbcsr_type_real_8_2d) IF (PRESENT(scale)) THEN dst%d%r2_dp(lb:ub, lb2:ub2) = & scale%r_dp*src%d%r2_dp(lb_s:ub_s, lb2_s:ub2_s) ELSE dst%d%r2_dp(lb:ub, lb2:ub2) = src%d%r2_dp(lb_s:ub_s, lb2_s:ub2_s) END IF CASE (dbcsr_type_complex_4_2d) IF (PRESENT(scale)) THEN dst%d%c2_sp(lb:ub, lb2:ub2) = & scale%c_sp*src%d%c2_sp(lb_s:ub_s, lb2_s:ub2_s) ELSE dst%d%c2_sp(lb:ub, lb2:ub2) = src%d%c2_sp(lb_s:ub_s, lb2_s:ub2_s) END IF CASE (dbcsr_type_complex_8_2d) IF (PRESENT(scale)) THEN dst%d%c2_dp(lb:ub, lb2:ub2) = & scale%c_dp*src%d%c2_dp(lb_s:ub_s, lb2_s:ub2_s) ELSE dst%d%c2_dp(lb:ub, lb2:ub2) = src%d%c2_dp(lb_s:ub_s, lb2_s:ub2_s) END IF CASE default DBCSR_ABORT("Invalid data type") END SELECT END SUBROUTINE dbcsr_data_copy_aa