File: N:\mfix\model\des\resize.f
1 module resize
2
3 public :: byte_grow
4 public :: integer_grow
5 public :: integer_grow2_reverse
6 public :: integer_grow2
7 public :: logical_grow
8 public :: logical_grow2
9 public :: real_grow
10 public :: real_grow2
11 public :: real_grow2_reverse
12 public :: real_grow3
13 public :: logical_grow2_reverse
14
15 contains
16
17 SUBROUTINE BYTE_GROW(byte_array,new_size)
18 IMPLICIT NONE
19
20 INTEGER, INTENT(IN) :: new_size
21 INTEGER(KIND=1), DIMENSION(:), ALLOCATABLE, INTENT(INOUT) :: byte_array
22 INTEGER(KIND=1), DIMENSION(:), ALLOCATABLE :: byte_tmp
23 INTEGER lSIZE
24
25 lSIZE = size(byte_array,1)
26 allocate(byte_tmp(new_size))
27 byte_tmp(1:lSIZE) = byte_array(1:lSIZE)
28 call move_alloc(byte_tmp,byte_array)
29
30 END SUBROUTINE BYTE_GROW
31
32 SUBROUTINE INTEGER_GROW(integer_array,new_size)
33 IMPLICIT NONE
34
35 INTEGER, INTENT(IN) :: new_size
36 INTEGER, DIMENSION(:), ALLOCATABLE, INTENT(INOUT) :: integer_array
37 INTEGER, DIMENSION(:), ALLOCATABLE :: integer_tmp
38 INTEGER lSIZE
39
40 lSIZE = size(integer_array,1)
41 allocate(integer_tmp(new_size))
42 integer_tmp(1:lSIZE) = integer_array(1:lSIZE)
43 call move_alloc(integer_tmp,integer_array)
44
45 END SUBROUTINE INTEGER_GROW
46
47 SUBROUTINE INTEGER_GROW2_reverse(integer_array,new_size)
48 IMPLICIT NONE
49
50 INTEGER, INTENT(IN) :: new_size
51 INTEGER, DIMENSION(:,:), ALLOCATABLE, INTENT(INOUT) :: integer_array
52 INTEGER, DIMENSION(:,:), ALLOCATABLE :: integer_tmp
53 INTEGER lSIZE, lSIZE2
54
55 lSIZE = size(integer_array,1)
56 lSIZE2 = size(integer_array,2)
57 allocate(integer_tmp(new_size,lSIZE2))
58 integer_tmp(1:lSIZE,:) = integer_array(1:lSIZE,:)
59 call move_alloc(integer_tmp,integer_array)
60
61 END SUBROUTINE INTEGER_GROW2_reverse
62
63 SUBROUTINE INTEGER_GROW2(integer_array,new_size)
64 IMPLICIT NONE
65
66 INTEGER, INTENT(IN) :: new_size
67 INTEGER, DIMENSION(:,:), ALLOCATABLE, INTENT(INOUT) :: integer_array
68 INTEGER, DIMENSION(:,:), ALLOCATABLE :: integer_tmp
69 INTEGER lSIZE, lSIZE2
70
71 lSIZE = size(integer_array,1)
72 lSIZE2 = size(integer_array,2)
73 allocate(integer_tmp(lSIZE,new_size))
74 integer_tmp(:,1:lSIZE2) = integer_array(:,1:lSIZE2)
75 call move_alloc(integer_tmp,integer_array)
76
77 END SUBROUTINE INTEGER_GROW2
78
79 SUBROUTINE LOGICAL_GROW(logical_array,new_size)
80 IMPLICIT NONE
81
82 INTEGER, INTENT(IN) :: new_size
83 LOGICAL, DIMENSION(:), ALLOCATABLE, INTENT(INOUT) :: logical_array
84 LOGICAL, DIMENSION(:), ALLOCATABLE :: logical_tmp
85 INTEGER lSIZE
86
87 lSIZE = size(logical_array,1)
88 allocate(logical_tmp(new_size))
89 logical_tmp(1:lSIZE) = logical_array(1:lSIZE)
90 call move_alloc(logical_tmp,logical_array)
91
92 END SUBROUTINE LOGICAL_GROW
93
94 SUBROUTINE LOGICAL_GROW2(logical_array,new_size)
95 IMPLICIT NONE
96
97 INTEGER, INTENT(IN) :: new_size
98 LOGICAL, DIMENSION(:,:), ALLOCATABLE, INTENT(INOUT) :: logical_array
99 LOGICAL, DIMENSION(:,:), ALLOCATABLE :: logical_tmp
100 INTEGER lSIZE, lSIZE2
101
102 lSIZE = size(logical_array,1)
103 lSIZE2 = size(logical_array,2)
104 allocate(logical_tmp(lSIZE,new_size))
105 logical_tmp(:,1:lSIZE2) = logical_array(:,1:lSIZE2)
106 call move_alloc(logical_tmp,logical_array)
107
108 END SUBROUTINE LOGICAL_GROW2
109
110 SUBROUTINE REAL_GROW(real_array,new_size)
111 IMPLICIT NONE
112
113 INTEGER, INTENT(IN) :: new_size
114 DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE, INTENT(INOUT) :: real_array
115 DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: real_tmp
116 INTEGER lSIZE
117
118 lSIZE = size(real_array,1)
119 allocate(real_tmp(new_size))
120 real_tmp(1:lSIZE) = real_array(1:lSIZE)
121 call move_alloc(real_tmp,real_array)
122
123 END SUBROUTINE REAL_GROW
124
125 SUBROUTINE REAL_GROW2(real_array,new_size)
126 IMPLICIT NONE
127
128 INTEGER, INTENT(IN) :: new_size
129 DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE, INTENT(INOUT) :: real_array
130 DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: real_tmp
131 INTEGER lSIZE, lSIZE2
132
133 lSIZE = size(real_array,1)
134 lSIZE2 = size(real_array,2)
135 allocate(real_tmp(lSIZE,new_size))
136 real_tmp(:,1:lSIZE2) = real_array(:,1:lSIZE2)
137 call move_alloc(real_tmp,real_array)
138
139 END SUBROUTINE REAL_GROW2
140
141 SUBROUTINE REAL_GROW2_reverse(real_array,new_size)
142 IMPLICIT NONE
143
144 INTEGER, INTENT(IN) :: new_size
145 DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE, INTENT(INOUT) :: real_array
146 DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: real_tmp
147 INTEGER lSIZE, lSIZE2
148
149 lSIZE = size(real_array,1)
150 lSIZE2 = size(real_array,2)
151 allocate(real_tmp(new_size,lSIZE2))
152 real_tmp(1:lSIZE,:) = real_array(1:lSIZE,:)
153 call move_alloc(real_tmp,real_array)
154
155 END SUBROUTINE REAL_GROW2_REVERSE
156
157 SUBROUTINE REAL_GROW3(real_array,new_size)
158 IMPLICIT NONE
159
160 INTEGER, INTENT(IN) :: new_size
161 DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE, INTENT(INOUT) :: real_array
162 DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: real_tmp
163 INTEGER lSIZE, lSIZE2, lSIZE3
164
165 lSIZE = size(real_array,1)
166 lSIZE2 = size(real_array,2)
167 lSIZE3 = size(real_array,3)
168 allocate(real_tmp(lSIZE,lSIZE2,new_size))
169 real_tmp(:,:,1:lSIZE3) = real_array(:,:,1:lSIZE3)
170 call move_alloc(real_tmp,real_array)
171
172 END SUBROUTINE REAL_GROW3
173
174 SUBROUTINE LOGICAL_GROW2_REVERSE(real_array,new_size)
175 IMPLICIT NONE
176
177 INTEGER, INTENT(IN) :: new_size
178 LOGICAL, DIMENSION(:,:), ALLOCATABLE, INTENT(INOUT) :: real_array
179 LOGICAL, DIMENSION(:,:), ALLOCATABLE :: real_tmp
180 INTEGER lSIZE, lSIZE2
181
182 lSIZE = size(real_array,1)
183 lSIZE2 = size(real_array,2)
184 allocate(real_tmp(new_size,lSIZE2))
185 real_tmp(1:lSIZE,:) = real_array(1:lSIZE,:)
186 call move_alloc(real_tmp,real_array)
187
188 END SUBROUTINE LOGICAL_GROW2_REVERSE
189
190 end module resize
191