68 integer,
intent(in) :: n_range
70 if (
allocated(integer_rmap%inverse))
then
71 deallocate(integer_rmap%inverse)
73 allocate(integer_rmap%inverse(n_range))
86 if (
allocated(integer_rmap%inverse))
then
101 integer,
intent(in) :: i_range
103 call assert(200002696,
allocated(integer_rmap%inverse))
104 call assert(549740445, i_range >= 1)
105 call assert(145872613, i_range <=
size(integer_rmap%inverse))
124 integer,
intent(in) :: i_domain
126 integer,
intent(in) :: i_range
128 integer :: i_range_old, i_index_old, i_domain_shifted
130 call assert(483243151,
allocated(integer_rmap%inverse))
131 call assert(709581778, i_domain >= 1)
135 call assert(590911054, i_range >= 1)
136 call assert(859774512, i_range <=
size(integer_rmap%inverse))
138 i_range_old = integer_rmap%forward%entry(i_domain)
139 if (i_range_old == i_range)
return
140 i_index_old = integer_rmap%index%entry(i_domain)
149 i_domain_shifted = integer_rmap%inverse(i_range_old)%entry(i_index_old)
150 integer_rmap%index%entry(i_domain_shifted) = i_index_old
154 integer_rmap%forward%entry(i_domain) = i_range
156 integer_rmap%index%entry(i_domain) &
170 integer,
intent(in) :: i_domain
172 integer :: i_range_old, i_index_old, i_domain_shifted, i_range_fix
173 integer :: i_index_fix, i_domain_fix
175 call assert(790455753,
allocated(integer_rmap%inverse))
176 call assert(745161821, i_domain >= 1)
177 call assert(143043782, i_domain &
185 i_range_old = integer_rmap%forward%entry(i_domain)
186 i_index_old = integer_rmap%index%entry(i_domain)
190 if (i_domain_shifted /= i_domain)
then
191 i_range_fix = integer_rmap%forward%entry(i_domain_shifted)
192 i_index_fix = integer_rmap%index%entry(i_domain_shifted)
193 integer_rmap%inverse(i_range_fix)%entry(i_index_fix) = i_domain
203 i_domain_fix = integer_rmap%inverse(i_range_old)%entry(i_index_fix)
207 if (i_index_fix /= i_index_old)
then
209 integer_rmap%index%entry(i_domain_fix) = i_index_old
223 character(len=*),
intent(in) :: name
225 integer,
intent(in) :: n_domain
227 integer,
intent(in) :: n_range
229 logical,
intent(in) :: continue_on_error
231 integer :: i_domain, i_range, i_index
233 if (.not.
allocated(integer_rmap%inverse))
then
239 .or. (n_range /=
size(integer_rmap%inverse)))
then
240 write(0,*)
'ERROR integer_rmap A:', name
241 write(0,*)
'n_domain', n_domain
242 write(0,*)
'n_range', n_range
243 write(0,*)
'integer_varray_n_entry(integer_rmap%forward)', &
245 write(0,*)
'integer_varray_n_entry(integer_rmap%index)', &
247 write(0,*)
'size(integer_rmap%inverse)',
size(integer_rmap%inverse)
248 call assert(973643016, continue_on_error)
251 do i_domain = 1,n_domain
252 i_range = integer_rmap%forward%entry(i_domain)
253 if ((i_range < 1) .or. (i_range > n_range))
then
254 write(0,*)
'ERROR integer_rmap B:', name
255 write(0,*)
'i_domain', i_domain
256 write(0,*)
'i_range', i_range
257 write(0,*)
'n_range', n_range
258 call assert(798857945, continue_on_error)
261 i_index = integer_rmap%index%entry(i_domain)
265 write(0,*)
'ERROR integer_rmap C:', name
266 write(0,*)
'i_domain', i_domain
267 write(0,*)
'i_range', i_range
268 write(0,*)
'i_index', i_index
269 write(0,*)
'integer_varray_n_entry(integer_rmap%inverse(i_range))', &
271 call assert(823748734, continue_on_error)
273 if (i_domain /= integer_rmap%inverse(i_range)%entry(i_index))
then
274 write(0,*)
'ERROR integer_rmap D:', name
275 write(0,*)
'i_domain', i_domain
276 write(0,*)
'i_range', i_range
277 write(0,*)
'i_index', i_index
278 write(0,*)
'integer_rmap%inverse(i_range)%entry(i_index)', &
279 integer_rmap%inverse(i_range)%entry(i_index)
280 call assert(735205557, continue_on_error)
284 do i_range = 1,n_range
286 i_domain = integer_rmap%inverse(i_range)%entry(i_index)
287 if ((i_domain < 1) .or. (i_domain > n_domain))
then
288 write(0,*)
'ERROR integer_rmap E:', name
289 write(0,*)
'i_range', i_range
290 write(0,*)
'i_index', i_index
291 write(0,*)
'i_domain', i_domain
292 write(0,*)
'n_domain', n_domain
293 call assert(502643520, continue_on_error)
295 if ((i_range /= integer_rmap%forward%entry(i_domain)) &
296 .or. (i_index /= integer_rmap%index%entry(i_domain)))
then
297 write(0,*)
'ERROR integer_rmap F:', name
298 write(0,*)
'i_domain', i_domain
299 write(0,*)
'i_range', i_range
300 write(0,*)
'integer_rmap%forward%entry(i_domain)', &
301 integer_rmap%forward%entry(i_domain)
302 write(0,*)
'i_index', i_index
303 write(0,*)
'integer_rmap%index%entry(i_domain)', &
304 integer_rmap%index%entry(i_domain)
305 call assert(544747928, continue_on_error)
320 integer :: i, total_size
321 logical :: is_allocated
324 is_allocated =
allocated(val%inverse)
326 if (is_allocated)
then
328 do i = 1,
size(val%inverse)
329 total_size = total_size &
345 character,
intent(inout) :: buffer(:)
347 integer,
intent(inout) :: position
352 integer :: prev_position, i
353 logical :: is_allocated
355 prev_position = position
356 is_allocated =
allocated(val%inverse)
358 if (is_allocated)
then
360 do i = 1,
size(val%inverse)
378 character,
intent(inout) :: buffer(:)
380 integer,
intent(inout) :: position
385 integer :: prev_position, i, n
386 logical :: is_allocated
388 prev_position = position
390 if (is_allocated)
then
393 do i = 1,
size(val%inverse)
397 if (
allocated(val%inverse))
then
398 deallocate(val%inverse)