20 #include "../base/base_uses.f90"
24 PUBLIC :: allocate_any
26 INTERFACE allocate_any
27 MODULE PROCEDURE allocate_1d
28 MODULE PROCEDURE allocate_2d
29 MODULE PROCEDURE allocate_3d
30 MODULE PROCEDURE allocate_4d
31 MODULE PROCEDURE allocate_5d
32 MODULE PROCEDURE allocate_6d
33 MODULE PROCEDURE allocate_7d
48 SUBROUTINE allocate_1d(array, shape_spec, source, order)
49 REAL(dp),
DIMENSION(:),
ALLOCATABLE,
INTENT(OUT) :: array
50 INTEGER,
DIMENSION(1),
INTENT(IN),
OPTIONAL :: shape_spec
51 REAL(dp),
DIMENSION(:),
INTENT(IN),
OPTIONAL :: source
52 INTEGER,
DIMENSION(1),
INTENT(IN),
OPTIONAL :: order
53 INTEGER,
DIMENSION(1) :: shape_prv
55 IF (
PRESENT(shape_spec))
THEN
56 IF (
PRESENT(order))
THEN
57 shape_prv(order) = shape_spec
59 shape_prv = shape_spec
61 ELSEIF (
PRESENT(source))
THEN
62 IF (
PRESENT(order))
THEN
63 shape_prv(order) = shape(source)
65 shape_prv = shape(source)
68 cpabort(
"either source or shape_spec must be present")
71 IF (
PRESENT(source))
THEN
72 IF (
PRESENT(order))
THEN
73 ALLOCATE (array(shape_prv(1)))
74 array(:) = reshape(source, shape_prv, order=order)
76 ALLOCATE (array(shape_prv(1)), source=source)
79 ALLOCATE (array(shape_prv(1)))
93 SUBROUTINE allocate_2d(array, shape_spec, source, order)
94 REAL(dp),
DIMENSION(:,:),
ALLOCATABLE,
INTENT(OUT) :: array
95 INTEGER,
DIMENSION(2),
INTENT(IN),
OPTIONAL :: shape_spec
96 REAL(dp),
DIMENSION(:,:),
INTENT(IN),
OPTIONAL :: source
97 INTEGER,
DIMENSION(2),
INTENT(IN),
OPTIONAL :: order
98 INTEGER,
DIMENSION(2) :: shape_prv
100 IF (
PRESENT(shape_spec))
THEN
101 IF (
PRESENT(order))
THEN
102 shape_prv(order) = shape_spec
104 shape_prv = shape_spec
106 ELSEIF (
PRESENT(source))
THEN
107 IF (
PRESENT(order))
THEN
108 shape_prv(order) = shape(source)
110 shape_prv = shape(source)
113 cpabort(
"either source or shape_spec must be present")
116 IF (
PRESENT(source))
THEN
117 IF (
PRESENT(order))
THEN
118 ALLOCATE (array(shape_prv(1), shape_prv(2)))
119 array(:,:) = reshape(source, shape_prv, order=order)
121 ALLOCATE (array(shape_prv(1), shape_prv(2)), source=source)
124 ALLOCATE (array(shape_prv(1), shape_prv(2)))
138 SUBROUTINE allocate_3d(array, shape_spec, source, order)
139 REAL(dp),
DIMENSION(:,:,:),
ALLOCATABLE,
INTENT(OUT) :: array
140 INTEGER,
DIMENSION(3),
INTENT(IN),
OPTIONAL :: shape_spec
141 REAL(dp),
DIMENSION(:,:,:),
INTENT(IN),
OPTIONAL :: source
142 INTEGER,
DIMENSION(3),
INTENT(IN),
OPTIONAL :: order
143 INTEGER,
DIMENSION(3) :: shape_prv
145 IF (
PRESENT(shape_spec))
THEN
146 IF (
PRESENT(order))
THEN
147 shape_prv(order) = shape_spec
149 shape_prv = shape_spec
151 ELSEIF (
PRESENT(source))
THEN
152 IF (
PRESENT(order))
THEN
153 shape_prv(order) = shape(source)
155 shape_prv = shape(source)
158 cpabort(
"either source or shape_spec must be present")
161 IF (
PRESENT(source))
THEN
162 IF (
PRESENT(order))
THEN
163 ALLOCATE (array(shape_prv(1), shape_prv(2), shape_prv(3)))
164 array(:,:,:) = reshape(source, shape_prv, order=order)
166 ALLOCATE (array(shape_prv(1), shape_prv(2), shape_prv(3)), source=source)
169 ALLOCATE (array(shape_prv(1), shape_prv(2), shape_prv(3)))
183 SUBROUTINE allocate_4d(array, shape_spec, source, order)
184 REAL(dp),
DIMENSION(:,:,:,:),
ALLOCATABLE,
INTENT(OUT) :: array
185 INTEGER,
DIMENSION(4),
INTENT(IN),
OPTIONAL :: shape_spec
186 REAL(dp),
DIMENSION(:,:,:,:),
INTENT(IN),
OPTIONAL :: source
187 INTEGER,
DIMENSION(4),
INTENT(IN),
OPTIONAL :: order
188 INTEGER,
DIMENSION(4) :: shape_prv
190 IF (
PRESENT(shape_spec))
THEN
191 IF (
PRESENT(order))
THEN
192 shape_prv(order) = shape_spec
194 shape_prv = shape_spec
196 ELSEIF (
PRESENT(source))
THEN
197 IF (
PRESENT(order))
THEN
198 shape_prv(order) = shape(source)
200 shape_prv = shape(source)
203 cpabort(
"either source or shape_spec must be present")
206 IF (
PRESENT(source))
THEN
207 IF (
PRESENT(order))
THEN
208 ALLOCATE (array(shape_prv(1), shape_prv(2), shape_prv(3), shape_prv(4)))
209 array(:,:,:,:) = reshape(source, shape_prv, order=order)
211 ALLOCATE (array(shape_prv(1), shape_prv(2), shape_prv(3), shape_prv(4)), source=source)
214 ALLOCATE (array(shape_prv(1), shape_prv(2), shape_prv(3), shape_prv(4)))
228 SUBROUTINE allocate_5d(array, shape_spec, source, order)
229 REAL(dp),
DIMENSION(:,:,:,:,:),
ALLOCATABLE,
INTENT(OUT) :: array
230 INTEGER,
DIMENSION(5),
INTENT(IN),
OPTIONAL :: shape_spec
231 REAL(dp),
DIMENSION(:,:,:,:,:),
INTENT(IN),
OPTIONAL :: source
232 INTEGER,
DIMENSION(5),
INTENT(IN),
OPTIONAL :: order
233 INTEGER,
DIMENSION(5) :: shape_prv
235 IF (
PRESENT(shape_spec))
THEN
236 IF (
PRESENT(order))
THEN
237 shape_prv(order) = shape_spec
239 shape_prv = shape_spec
241 ELSEIF (
PRESENT(source))
THEN
242 IF (
PRESENT(order))
THEN
243 shape_prv(order) = shape(source)
245 shape_prv = shape(source)
248 cpabort(
"either source or shape_spec must be present")
251 IF (
PRESENT(source))
THEN
252 IF (
PRESENT(order))
THEN
253 ALLOCATE (array(shape_prv(1), shape_prv(2), shape_prv(3), shape_prv(4), shape_prv(5)))
254 array(:,:,:,:,:) = reshape(source, shape_prv, order=order)
256 ALLOCATE (array(shape_prv(1), shape_prv(2), shape_prv(3), shape_prv(4), shape_prv(5)), source=source)
259 ALLOCATE (array(shape_prv(1), shape_prv(2), shape_prv(3), shape_prv(4), shape_prv(5)))
273 SUBROUTINE allocate_6d(array, shape_spec, source, order)
274 REAL(dp),
DIMENSION(:,:,:,:,:,:),
ALLOCATABLE,
INTENT(OUT) :: array
275 INTEGER,
DIMENSION(6),
INTENT(IN),
OPTIONAL :: shape_spec
276 REAL(dp),
DIMENSION(:,:,:,:,:,:),
INTENT(IN),
OPTIONAL :: source
277 INTEGER,
DIMENSION(6),
INTENT(IN),
OPTIONAL :: order
278 INTEGER,
DIMENSION(6) :: shape_prv
280 IF (
PRESENT(shape_spec))
THEN
281 IF (
PRESENT(order))
THEN
282 shape_prv(order) = shape_spec
284 shape_prv = shape_spec
286 ELSEIF (
PRESENT(source))
THEN
287 IF (
PRESENT(order))
THEN
288 shape_prv(order) = shape(source)
290 shape_prv = shape(source)
293 cpabort(
"either source or shape_spec must be present")
296 IF (
PRESENT(source))
THEN
297 IF (
PRESENT(order))
THEN
298 ALLOCATE (array(shape_prv(1), shape_prv(2), shape_prv(3), shape_prv(4), shape_prv(5), shape_prv(6)))
299 array(:,:,:,:,:,:) = reshape(source, shape_prv, order=order)
301 ALLOCATE (array(shape_prv(1), shape_prv(2), shape_prv(3), shape_prv(4), shape_prv(5), shape_prv(6)), source=source)
304 ALLOCATE (array(shape_prv(1), shape_prv(2), shape_prv(3), shape_prv(4), shape_prv(5), shape_prv(6)))
318 SUBROUTINE allocate_7d(array, shape_spec, source, order)
319 REAL(dp),
DIMENSION(:,:,:,:,:,:,:),
ALLOCATABLE,
INTENT(OUT) :: array
320 INTEGER,
DIMENSION(7),
INTENT(IN),
OPTIONAL :: shape_spec
321 REAL(dp),
DIMENSION(:,:,:,:,:,:,:),
INTENT(IN),
OPTIONAL :: source
322 INTEGER,
DIMENSION(7),
INTENT(IN),
OPTIONAL :: order
323 INTEGER,
DIMENSION(7) :: shape_prv
325 IF (
PRESENT(shape_spec))
THEN
326 IF (
PRESENT(order))
THEN
327 shape_prv(order) = shape_spec
329 shape_prv = shape_spec
331 ELSEIF (
PRESENT(source))
THEN
332 IF (
PRESENT(order))
THEN
333 shape_prv(order) = shape(source)
335 shape_prv = shape(source)
338 cpabort(
"either source or shape_spec must be present")
341 IF (
PRESENT(source))
THEN
342 IF (
PRESENT(order))
THEN
343 ALLOCATE (array(shape_prv(1), shape_prv(2), shape_prv(3), shape_prv(4), shape_prv(5), shape_prv(6), shape_prv(7)))
344 array(:,:,:,:,:,:,:) = reshape(source, shape_prv, order=order)
346 ALLOCATE (array(shape_prv(1), shape_prv(2), shape_prv(3), shape_prv(4), shape_prv(5), shape_prv(6), shape_prv(7)),&
350 ALLOCATE (array(shape_prv(1), shape_prv(2), shape_prv(3), shape_prv(4), shape_prv(5), shape_prv(6), shape_prv(7)))
Wrapper for allocating, copying and reshaping arrays.
Defines the basic variable types.
integer, parameter, public dp