Copy data from a double real array to a data area 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 |
||
real(kind=real_4), | intent(in), | DIMENSION(:), CONTIGUOUS | :: | src |
source data array |
|
integer, | intent(in), | optional | :: | source_lb |
lower bound of source |
SUBROUTINE dbcsr_data_set_as (dst, lb, data_size, src, source_lb) !! Copy data from a double real array to a data area !! 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 REAL(kind=real_4), DIMENSION(:), INTENT(IN), CONTIGUOUS :: src !! source data array INTEGER, INTENT(IN), OPTIONAL :: source_lb !! lower bound of source INTEGER :: lb_s, ub, ub_s REAL(kind=real_4), DIMENSION(:), POINTER, CONTIGUOUS :: cont_data ! --------------------------------------------------------------------------- IF (debug_mod) THEN IF (.NOT. ASSOCIATED(dst%d)) & DBCSR_ABORT("Target data area must be setup.") IF (SIZE(src) .LT. data_size) & DBCSR_ABORT("Not enough source data.") IF (dst%d%data_type .NE. dbcsr_type_real_4) & DBCSR_ABORT("Data type mismatch.") 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 cont_data => dst%d%r_sp (lb:ub) CALL memory_copy(cont_data, src(lb_s:ub_s), data_size) END SUBROUTINE dbcsr_data_set_as