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