|
36 | 36 | integer, allocatable, dimension(:) :: lb, ub !< These are 1 and shape(arr) respectively for all dimensions |
37 | 37 | !! except the domain-decomposed dimensions, for which they are |
38 | 38 | !! set according to the is,ie,js,je options. |
39 | | - integer :: n, m |
| 39 | + integer :: ndims, n |
40 | 40 | integer :: i1, i2, i3, i4, i5 |
41 | 41 |
|
42 | | - n = rank(arr) |
43 | | - allocate (lb(n), ub(n)) |
| 42 | + ndims = rank(arr) |
| 43 | + allocate (lb(ndims), ub(ndims)) |
44 | 44 |
|
45 | 45 | lb = 1 |
46 | 46 | ub = shape(arr) |
|
51 | 51 | ub(xdim) = ie |
52 | 52 | ub(ydim) = je |
53 | 53 |
|
54 | | - m = 0 |
| 54 | + n = product(ub - lb + 1) |
| 55 | + |
55 | 56 | select rank(arr) |
56 | 57 | rank (2) |
57 | | - do i2=lb(2),ub(2) |
58 | | - do i1=lb(1),ub(1) |
59 | | - m = m + 1 |
60 | | - vec(m) = arr(i1, i2) |
61 | | - enddo |
62 | | - enddo |
| 58 | + vec(1:n) = reshape(arr(lb(1):ub(1), lb(2):ub(2)), [n]) |
63 | 59 | rank (3) |
64 | | - do i3=lb(3),ub(3) |
65 | | - do i2=lb(2),ub(2) |
66 | | - do i1=lb(1),ub(1) |
67 | | - m = m + 1 |
68 | | - vec(m) = arr(i1, i2, i3) |
69 | | - enddo |
70 | | - enddo |
71 | | - enddo |
| 60 | + vec(1:n) = reshape(arr(lb(1):ub(1), lb(2):ub(2), lb(3):ub(3)), [n]) |
72 | 61 | rank (4) |
73 | | - do i4=lb(4),ub(4) |
74 | | - do i3=lb(3),ub(3) |
75 | | - do i2=lb(2),ub(2) |
76 | | - do i1=lb(1),ub(1) |
77 | | - m = m + 1 |
78 | | - vec(m) = arr(i1, i2, i3, i4) |
79 | | - enddo |
80 | | - enddo |
81 | | - enddo |
82 | | - enddo |
| 62 | + vec(1:n) = reshape(arr(lb(1):ub(1), lb(2):ub(2), lb(3):ub(3), lb(4):ub(4)), [n]) |
83 | 63 | rank (5) |
84 | | - do i5=lb(5),ub(5) |
85 | | - do i4=lb(4),ub(4) |
86 | | - do i3=lb(3),ub(3) |
87 | | - do i2=lb(2),ub(2) |
88 | | - do i1=lb(1),ub(1) |
89 | | - m = m + 1 |
90 | | - vec(m) = arr(i1, i2, i3, i4, i5) |
91 | | - enddo |
92 | | - enddo |
93 | | - enddo |
94 | | - enddo |
95 | | - enddo |
| 64 | + vec(1:n) = reshape(arr(lb(1):ub(1), lb(2):ub(2), lb(3):ub(3), lb(4):ub(4), lb(5):ub(5)), [n]) |
96 | 65 | end select |
97 | 66 | end subroutine ARR2VEC_ |
98 | 67 |
|
|
116 | 85 | integer, allocatable, dimension(:) :: lb, ub !< These are 1 and shape(arr) respectively for all dimensions |
117 | 86 | !! except the domain-decomposed dimensions, for which they are |
118 | 87 | !! set according to the is,ie,js,je options. |
119 | | - integer :: n, m |
| 88 | + integer :: ndims, n |
120 | 89 | integer :: i1, i2, i3, i4, i5 |
121 | 90 |
|
122 | | - n = rank(arr) |
123 | | - allocate (lb(n), ub(n)) |
| 91 | + ndims = rank(arr) |
| 92 | + allocate (lb(ndims), ub(ndims)) |
124 | 93 |
|
125 | 94 | lb = 1 |
126 | 95 | ub = shape(arr) |
|
131 | 100 | ub(xdim) = ie |
132 | 101 | ub(ydim) = je |
133 | 102 |
|
134 | | - m = 0 |
135 | | - select rank(arr) |
136 | | - rank (2) |
137 | | - do i2=lb(2),ub(2) |
138 | | - do i1=lb(1),ub(1) |
139 | | - m = m + 1 |
140 | | - arr(i1, i2) = vec(m) |
141 | | - enddo |
142 | | - enddo |
143 | | - rank (3) |
144 | | - do i3=lb(3),ub(3) |
145 | | - do i2=lb(2),ub(2) |
146 | | - do i1=lb(1),ub(1) |
147 | | - m = m + 1 |
148 | | - arr(i1, i2, i3) = vec(m) |
149 | | - enddo |
150 | | - enddo |
151 | | - enddo |
152 | | - rank (4) |
153 | | - do i4=lb(4),ub(4) |
154 | | - do i3=lb(3),ub(3) |
155 | | - do i2=lb(2),ub(2) |
156 | | - do i1=lb(1),ub(1) |
157 | | - m = m + 1 |
158 | | - arr(i1, i2, i3, i4) = vec(m) |
159 | | - enddo |
160 | | - enddo |
161 | | - enddo |
162 | | - enddo |
163 | | - rank (5) |
164 | | - do i5=lb(5),ub(5) |
165 | | - do i4=lb(4),ub(4) |
166 | | - do i3=lb(3),ub(3) |
167 | | - do i2=lb(2),ub(2) |
168 | | - do i1=lb(1),ub(1) |
169 | | - m = m + 1 |
170 | | - arr(i1, i2, i3, i4, i5) = vec(m) |
171 | | - enddo |
172 | | - enddo |
173 | | - enddo |
174 | | - enddo |
175 | | - enddo |
176 | | - end select |
| 103 | + associate (s => ub - lb + 1) |
| 104 | + n = product(s) |
| 105 | + select rank(arr) |
| 106 | + rank (2) |
| 107 | + arr(lb(1):ub(1), lb(2):ub(2)) = reshape(vec(1:n), s(1:2)) |
| 108 | + rank (3) |
| 109 | + arr(lb(1):ub(1), lb(2):ub(2), lb(3):ub(3)) = reshape(vec(1:n), s(1:3)) |
| 110 | + rank (4) |
| 111 | + arr(lb(1):ub(1), lb(2):ub(2), lb(3):ub(3), lb(4):ub(4)) = reshape(vec(1:n), s(1:4)) |
| 112 | + rank (5) |
| 113 | + arr(lb(1):ub(1), lb(2):ub(2), lb(3):ub(3), lb(4):ub(4), lb(5):ub(5)) = reshape(vec(1:n), s(1:5)) |
| 114 | + end select |
| 115 | + end associate |
177 | 116 | end subroutine VEC2ARR_ |
178 | 117 |
|
179 | 118 | !> @brief Initialize an assumed-rank array to `val`. This is used when initializing an assumed-rank array |
|
0 commit comments