Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(inout) | :: | dest(:,:) | |||
integer(kind=int32), | intent(in) | :: | source(:,:) | |||
logical, | intent(in), | optional | :: | threaded |
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer(kind=default_int), | private | :: | cols | ||||
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 | :: | rows | ||||
logical, | private | :: | use_threads |
subroutine copy_matrix_int32(dest, source, threaded) integer(int32), intent(inout) :: dest(:, :) integer(int32), intent(in) :: source(:, :) logical, intent(in), optional :: threaded logical :: use_threads integer(default_int) :: i, j, rows, cols integer(default_int) :: ii, jj if (size(dest, 1) /= size(source, 1) .or. size(dest, 2) /= size(source, 2)) then error stop "Matrix size mismatch" end if rows = size(source, 1) cols = size(source, 2) if (present(threaded)) then use_threads = threaded else use_threads = use_threaded_default end if if (use_threads) then !$omp parallel do collapse(2) private(i,j,ii,jj) do jj = 1, cols, block_size do ii = 1, rows, block_size do j = jj, min(jj + block_size - 1, cols) do i = ii, min(ii + block_size - 1, rows) dest(i, j) = source(i, j) end do end do end do end do !$omp end parallel do else dest = source end if end subroutine copy_matrix_int32