28 module procedure rotate_array_real_2d
29 module procedure rotate_array_real_3d
30 module procedure rotate_array_real_4d
31 module procedure rotate_array_integer
32 module procedure rotate_array_logical
42 module procedure rotate_array_pair_real_2d
43 module procedure rotate_array_pair_real_3d
44 module procedure rotate_array_pair_integer
56 module procedure rotate_vector_real_2d
57 module procedure rotate_vector_real_3d
58 module procedure rotate_vector_real_4d
65 module procedure allocate_rotated_array_real_2d
66 module procedure allocate_rotated_array_real_3d
67 module procedure allocate_rotated_array_real_4d
68 module procedure allocate_rotated_array_integer
74 subroutine rotate_array_real_2d(A_in, turns, A)
75 real,
intent(in) :: A_in(:,:)
76 integer,
intent(in) :: turns
77 real,
intent(out) :: A(:,:)
84 select case (modulo(turns, 4))
88 a(:,:) = transpose(a_in)
91 a(:,:) = a_in(m:1:-1, n:1:-1)
93 a(:,:) = transpose(a_in(m:1:-1, :))
95 end subroutine rotate_array_real_2d
99 subroutine rotate_array_real_3d(A_in, turns, A)
100 real,
intent(in) :: A_in(:,:,:)
101 integer,
intent(in) :: turns
102 real,
intent(out) :: A(:,:,:)
106 do k = 1,
size(a_in, 3)
109 end subroutine rotate_array_real_3d
113 subroutine rotate_array_real_4d(A_in, turns, A)
114 real,
intent(in) :: A_in(:,:,:,:)
115 integer,
intent(in) :: turns
116 real,
intent(out) :: A(:,:,:,:)
120 do n = 1,
size(a_in, 4)
123 end subroutine rotate_array_real_4d
127 subroutine rotate_array_integer(A_in, turns, A)
128 integer,
intent(in) :: A_in(:,:)
129 integer,
intent(in) :: turns
130 integer,
intent(out) :: A(:,:)
137 select case (modulo(turns, 4))
141 a(:,:) = transpose(a_in)
142 a(:,:) = a(n:1:-1, :)
144 a(:,:) = a_in(m:1:-1, n:1:-1)
146 a(:,:) = transpose(a_in(m:1:-1, :))
148 end subroutine rotate_array_integer
152 subroutine rotate_array_logical(A_in, turns, A)
153 logical,
intent(in) :: A_in(:,:)
154 integer,
intent(in) :: turns
155 logical,
intent(out) :: A(:,:)
162 select case (modulo(turns, 4))
166 a(:,:) = transpose(a_in)
167 a(:,:) = a(n:1:-1, :)
169 a(:,:) = a_in(m:1:-1, n:1:-1)
171 a(:,:) = transpose(a_in(m:1:-1, :))
173 end subroutine rotate_array_logical
177 subroutine rotate_array_pair_real_2d(A_in, B_in, turns, A, B)
178 real,
intent(in) :: A_in(:,:)
179 real,
intent(in) :: B_in(:,:)
180 integer,
intent(in) :: turns
181 real,
intent(out) :: A(:,:)
182 real,
intent(out) :: B(:,:)
184 if (modulo(turns, 2) /= 0)
then 191 end subroutine rotate_array_pair_real_2d
195 subroutine rotate_array_pair_real_3d(A_in, B_in, turns, A, B)
196 real,
intent(in) :: A_in(:,:,:)
197 real,
intent(in) :: B_in(:,:,:)
198 integer,
intent(in) :: turns
199 real,
intent(out) :: A(:,:,:)
200 real,
intent(out) :: B(:,:,:)
204 do k = 1,
size(a_in, 3)
208 end subroutine rotate_array_pair_real_3d
212 subroutine rotate_array_pair_integer(A_in, B_in, turns, A, B)
213 integer,
intent(in) :: A_in(:,:)
214 integer,
intent(in) :: B_in(:,:)
215 integer,
intent(in) :: turns
216 integer,
intent(out) :: A(:,:)
217 integer,
intent(out) :: B(:,:)
219 if (modulo(turns, 2) /= 0)
then 226 end subroutine rotate_array_pair_integer
230 subroutine rotate_vector_real_2d(A_in, B_in, turns, A, B)
231 real,
intent(in) :: A_in(:,:)
232 real,
intent(in) :: B_in(:,:)
233 integer,
intent(in) :: turns
234 real,
intent(out) :: A(:,:)
235 real,
intent(out) :: B(:,:)
239 if (modulo(turns, 4) == 1 .or. modulo(turns, 4) == 2) &
242 if (modulo(turns, 4) == 2 .or. modulo(turns, 4) == 3) &
244 end subroutine rotate_vector_real_2d
248 subroutine rotate_vector_real_3d(A_in, B_in, turns, A, B)
249 real,
intent(in) :: A_in(:,:,:)
250 real,
intent(in) :: B_in(:,:,:)
251 integer,
intent(in) :: turns
252 real,
intent(out) :: A(:,:,:)
253 real,
intent(out) :: B(:,:,:)
257 do k = 1,
size(a_in, 3)
258 call rotate_vector(a_in(:,:,k), b_in(:,:,k), turns, a(:,:,k), b(:,:,k))
260 end subroutine rotate_vector_real_3d
264 subroutine rotate_vector_real_4d(A_in, B_in, turns, A, B)
265 real,
intent(in) :: A_in(:,:,:,:)
266 real,
intent(in) :: B_in(:,:,:,:)
267 integer,
intent(in) :: turns
268 real,
intent(out) :: A(:,:,:,:)
269 real,
intent(out) :: B(:,:,:,:)
273 do n = 1,
size(a_in, 4)
275 a(:,:,:,n), b(:,:,:,n))
277 end subroutine rotate_vector_real_4d
281 subroutine allocate_rotated_array_real_2d(A_in, lb, turns, A)
283 integer,
intent(in) :: lb(2)
284 real,
intent(in) :: A_in(lb(1):, lb(2):)
285 integer,
intent(in) :: turns
286 real,
allocatable,
intent(inout) :: A(:,:)
292 if (modulo(turns, 2) /= 0)
then 293 allocate(a(lb(2):ub(2), lb(1):ub(1)))
295 allocate(a(lb(1):ub(1), lb(2):ub(2)))
297 end subroutine allocate_rotated_array_real_2d
301 subroutine allocate_rotated_array_real_3d(A_in, lb, turns, A)
303 integer,
intent(in) :: lb(3)
304 real,
intent(in) :: A_in(lb(1):, lb(2):, lb(3):)
305 integer,
intent(in) :: turns
306 real,
allocatable,
intent(inout) :: A(:,:,:)
312 if (modulo(turns, 2) /= 0)
then 313 allocate(a(lb(2):ub(2), lb(1):ub(1), lb(3):ub(3)))
315 allocate(a(lb(1):ub(1), lb(2):ub(2), lb(3):ub(3)))
317 end subroutine allocate_rotated_array_real_3d
321 subroutine allocate_rotated_array_real_4d(A_in, lb, turns, A)
323 integer,
intent(in) :: lb(4)
324 real,
intent(in) :: A_in(lb(1):,lb(2):,lb(3):,lb(4):)
325 integer,
intent(in) :: turns
326 real,
allocatable,
intent(inout) :: A(:,:,:,:)
332 if (modulo(turns, 2) /= 0)
then 333 allocate(a(lb(2):ub(2), lb(1):ub(1), lb(3):ub(3), lb(4):ub(4)))
335 allocate(a(lb(1):ub(1), lb(2):ub(2), lb(3):ub(3), lb(4):ub(4)))
337 end subroutine allocate_rotated_array_real_4d
341 subroutine allocate_rotated_array_integer(A_in, lb, turns, A)
342 integer,
intent(in) :: lb(2)
343 integer,
intent(in) :: A_in(lb(1):,lb(2):)
344 integer,
intent(in) :: turns
345 integer,
allocatable,
intent(inout) :: A(:,:)
351 if (modulo(turns, 2) /= 0)
then 352 allocate(a(lb(2):ub(2), lb(1):ub(1)))
354 allocate(a(lb(1):ub(1), lb(2):ub(2)))
356 end subroutine allocate_rotated_array_integer