@@ -43,11 +43,12 @@ contains
43
43
work(size_prepend+1:size_prepend+size_x) = x
44
44
if (size_append > 0) work(size_prepend+size_x+1:) = append
45
45
46
- do i = 1, n_
46
+ do concurrent ( i = 1:n_)
47
47
work(1:size(work)-i) = work(2:size(work)-i+1) - work(1:size(work)-i)
48
48
end do
49
49
50
- y = work(1:size(work)-n_)
50
+ call move_alloc(work, y)
51
+ y = y(1:size(y)-n_)
51
52
52
53
end function diff_1_${k1}$
53
54
@@ -92,22 +93,24 @@ contains
92
93
if (size_prepend > 0) work(1:size_prepend, :) = prepend
93
94
work(size_prepend+1:size_x+size_prepend, :) = x
94
95
if (size_append > 0) work(size_x+size_prepend+1:, :) = append
95
- do i = 1, n_
96
+ do concurrent ( i = 1:n_)
96
97
work(1:size(work,1)-i, :) = work(2:size(work)-i+1, :) - work(1:size(x, 1)-i, :)
97
98
end do
98
99
99
- y = work(1:size(work)-n_, :)
100
+ call move_alloc(work, y)
101
+ y = y(1:size(y)-n_, :)
100
102
101
103
elseif (dim_ == 2) then
102
104
allocate(work(size(x, 1), size_x+size_prepend+size_append))
103
105
if (size_prepend > 0) work(:, 1:size_prepend) = prepend
104
106
work(:, size_prepend+1:size_x+size_prepend) = x
105
107
if (size_append > 0) work(:, size_x+size_prepend+1:) = append
106
- do i = 1, n_
108
+ do concurrent ( i = 1:n_)
107
109
work(:, 1:size(work,2)-i) = work(:, 2:size(work,2)-i+1) - work(:, 1:size(work, 2)-i)
108
110
end do
109
111
110
- y = work(:, 1:size(work,2)-n_)
112
+ call move_alloc(work, y)
113
+ y = y(:, 1:size(y,2)-n_)
111
114
112
115
end if
113
116
0 commit comments