copy a tensor of datatype int64
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer(kind=int64), | intent(inout) | :: | dest(:,:,:) | |||
| integer(kind=int64), | intent(in) | :: | source(:,:,:) | |||
| logical, | intent(in), | optional | :: | threaded | ||
| type(error_t), | intent(inout), | optional | :: | err |
set to ERROR_VALIDATION on a size mismatch, leaving dest unchanged; when absent a mismatch aborts with error stop |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer(kind=default_int), | private | :: | i | ||||
| integer(kind=default_int), | private | :: | ii | ||||
| integer(kind=default_int), | private | :: | j | ||||
| integer(kind=default_int), | private | :: | jj | ||||
| integer(kind=default_int), | private | :: | k | ||||
| integer(kind=default_int), | private | :: | kk | ||||
| integer(kind=default_int), | private | :: | nx | ||||
| integer(kind=default_int), | private | :: | ny | ||||
| integer(kind=default_int), | private | :: | nz | ||||
| logical, | private | :: | use_threads |
subroutine copy_3d_tensor_int64(dest, source, threaded, err) !! copy a tensor of datatype int64 integer(int64), intent(inout) :: dest(:, :, :) integer(int64), intent(in) :: source(:, :, :) logical, intent(in), optional :: threaded type(error_t), intent(inout), optional :: err !! set to ERROR_VALIDATION on a size mismatch, leaving dest unchanged; !! when absent a mismatch aborts with error stop logical :: use_threads integer(default_int) :: i, j, k integer(default_int) :: ii, jj, kk integer(default_int) :: nx, ny, nz ! --- Size checks --- if (size(dest, 1) /= size(source, 1) & .or. size(dest, 2) /= size(source, 2) & .or. size(dest, 3) /= size(source, 3)) then if (present(err)) then call error_raise(err, ERROR_VALIDATION, "pic_copy: tensor size mismatch") return end if error stop "pic_copy: tensor size mismatch" end if nx = size(source, 1) ny = size(source, 2) nz = size(source, 3) use_threads = pic_optional(threaded, use_threaded_default) if (use_threads) then !$omp parallel do collapse(3) private(i,j,k,ii,jj,kk) do kk = 1, nz, block_size do jj = 1, ny, block_size do ii = 1, nx, block_size do k = kk, min(kk + block_size - 1, nz) do j = jj, min(jj + block_size - 1, ny) do i = ii, min(ii + block_size - 1, nx) dest(i, j, k) = source(i, j, k) end do end do end do end do end do end do !$omp end parallel do else dest = source end if end subroutine copy_3d_tensor_int64