75 integer,
intent(in) :: n_range_1
77 integer,
intent(in) :: n_range_2
79 if (
allocated(integer_rmap2%inverse))
then
80 deallocate(integer_rmap2%inverse)
82 allocate(integer_rmap2%inverse(n_range_1, n_range_2))
96 if (
allocated(integer_rmap2%inverse))
then
112 integer,
intent(in) :: i_range_1
114 integer,
intent(in) :: i_range_2
116 call assert(438521606,
allocated(integer_rmap2%inverse))
117 call assert(708651144, i_range_1 >= 1)
118 call assert(779828769, i_range_1 <=
size(integer_rmap2%inverse, 1))
119 call assert(978259336, i_range_2 >= 1)
120 call assert(238981205, i_range_2 <=
size(integer_rmap2%inverse, 2))
141 integer,
intent(in) :: i_domain
143 integer,
intent(in) :: i_range_1
145 integer,
intent(in) :: i_range_2
147 integer :: i_range_1_old, i_range_2_old, i_index_old, i_domain_shifted
149 call assert(897948211,
allocated(integer_rmap2%inverse))
150 call assert(191141591, i_domain >= 1)
153 call assert(671426897, i_range_1 >= 1)
154 call assert(311976942, i_range_1 <=
size(integer_rmap2%inverse, 1))
155 call assert(383129645, i_range_2 >= 1)
156 call assert(771283685, i_range_2 <=
size(integer_rmap2%inverse, 2))
158 i_range_1_old = integer_rmap2%forward1%entry(i_domain)
159 i_range_2_old = integer_rmap2%forward2%entry(i_domain)
160 if ((i_range_1_old == i_range_1) .and. (i_range_1_old == i_range_1))
return
161 i_index_old = integer_rmap2%index%entry(i_domain)
165 integer_rmap2%inverse(i_range_1_old, i_range_2_old), i_index_old)
168 i_range_2_old)))
then
171 i_domain_shifted = integer_rmap2%inverse(i_range_1_old, &
172 i_range_2_old)%entry(i_index_old)
173 integer_rmap2%index%entry(i_domain_shifted) = i_index_old
177 integer_rmap2%forward1%entry(i_domain) = i_range_1
178 integer_rmap2%forward2%entry(i_domain) = i_range_2
181 integer_rmap2%index%entry(i_domain) &
195 integer,
intent(in) :: i_domain
197 integer :: i_range_1_old, i_range_2_old, i_index_old, i_domain_shifted
198 integer :: i_range_1_fix, i_range_2_fix, i_index_fix, i_domain_fix
200 call assert(902132756,
allocated(integer_rmap2%inverse))
201 call assert(242566612, i_domain >= 1)
210 i_range_1_old = integer_rmap2%forward1%entry(i_domain)
211 i_range_2_old = integer_rmap2%forward2%entry(i_domain)
212 i_index_old = integer_rmap2%index%entry(i_domain)
216 if (i_domain_shifted /= i_domain)
then
217 i_range_1_fix = integer_rmap2%forward1%entry(i_domain_shifted)
218 i_range_2_fix = integer_rmap2%forward2%entry(i_domain_shifted)
219 i_index_fix = integer_rmap2%index%entry(i_domain_shifted)
220 integer_rmap2%inverse(i_range_1_fix, i_range_2_fix)%entry(i_index_fix) &
233 i_domain_fix = integer_rmap2%inverse(i_range_1_old, i_range_2_old)%entry(&
236 integer_rmap2%inverse(i_range_1_old, i_range_2_old), i_index_old)
238 if (i_index_fix /= i_index_old)
then
240 integer_rmap2%index%entry(i_domain_fix) = i_index_old
249 n_range_2, continue_on_error)
254 character(len=*),
intent(in) :: name
256 integer,
intent(in) :: n_domain
258 integer,
intent(in) :: n_range_1
260 integer,
intent(in) :: n_range_2
262 logical,
intent(in) :: continue_on_error
264 integer :: i_domain, i_range_1, i_range_2, i_index
266 if (.not.
allocated(integer_rmap2%inverse))
then
273 .or. (n_range_1 /=
size(integer_rmap2%inverse, 1)) &
274 .or. (n_range_2 /=
size(integer_rmap2%inverse, 2)))
then
275 write(0,*)
'ERROR integer_rmap2 A:', name
276 write(0,*)
'n_domain', n_domain
277 write(0,*)
'n_range_1', n_range_1
278 write(0,*)
'n_range_2', n_range_2
279 write(0,*)
'integer_varray_n_entry(integer_rmap2%forward1)', &
281 write(0,*)
'integer_varray_n_entry(integer_rmap2%forward2)', &
283 write(0,*)
'integer_varray_n_entry(integer_rmap2%index)', &
285 write(0,*)
'size(integer_rmap2%inverse, 1)', &
286 size(integer_rmap2%inverse, 1)
287 write(0,*)
'size(integer_rmap2%inverse, 2)', &
288 size(integer_rmap2%inverse, 2)
289 call assert(786992107, continue_on_error)
292 do i_domain = 1,n_domain
293 i_range_1 = integer_rmap2%forward1%entry(i_domain)
294 i_range_2 = integer_rmap2%forward2%entry(i_domain)
295 if ((i_range_1 < 1) .or. (i_range_1 > n_range_1) &
296 .or. (i_range_2 < 1) .or. (i_range_2 > n_range_2))
then
297 write(0,*)
'ERROR integer_rmap2 B:', name
298 write(0,*)
'i_domain', i_domain
299 write(0,*)
'i_range_1', i_range_1
300 write(0,*)
'i_range_2', i_range_2
301 write(0,*)
'n_range_1', n_range_1
302 write(0,*)
'n_range_2', n_range_2
303 call assert(723392756, continue_on_error)
306 i_index = integer_rmap2%index%entry(i_domain)
307 if ((i_index < 1) .or. (i_index &
310 write(0,*)
'ERROR integer_rmap2 C:', name
311 write(0,*)
'i_domain', i_domain
312 write(0,*)
'i_range_1', i_range_1
313 write(0,*)
'i_range_2', i_range_2
314 write(0,*)
'i_index', i_index
315 write(0,*)
'integer_varray_n_entry(' &
316 //
'integer_rmap2%inverse(i_range_1, i_range_2))', &
319 call assert(317458796, continue_on_error)
322 /= integer_rmap2%inverse(i_range_1, i_range_2)%entry(i_index))
then
323 write(0,*)
'ERROR integer_rmap2 D:', name
324 write(0,*)
'i_domain', i_domain
325 write(0,*)
'i_range_1', i_range_1
326 write(0,*)
'i_range_2', i_range_2
327 write(0,*)
'i_index', i_index
328 write(0,*)
'integer_rmap2%inverse(i_range_1, ' &
329 //
'i_range_2)%entry(i_index)', &
330 integer_rmap2%inverse(i_range_1, i_range_2)%entry(i_index)
331 call assert(662733308, continue_on_error)
335 do i_range_1 = 1,n_range_1
336 do i_range_2 = 1,n_range_2
338 integer_rmap2%inverse(i_range_1, i_range_2))
340 = integer_rmap2%inverse(i_range_1, i_range_2)%entry(i_index)
341 if ((i_domain < 1) .or. (i_domain > n_domain))
then
342 write(0,*)
'ERROR integer_rmap2 E:', name
343 write(0,*)
'i_range_1', i_range_1
344 write(0,*)
'i_range_2', i_range_2
345 write(0,*)
'i_index', i_index
346 write(0,*)
'i_domain', i_domain
347 write(0,*)
'n_domain', n_domain
348 call assert(639449827, continue_on_error)
350 if ((i_range_1 /= integer_rmap2%forward1%entry(i_domain)) &
351 .or. (i_range_2 /= integer_rmap2%forward2%entry(i_domain)) &
352 .or. (i_index /= integer_rmap2%index%entry(i_domain)))
then
353 write(0,*)
'ERROR integer_rmap2 F:', name
354 write(0,*)
'i_domain', i_domain
355 write(0,*)
'i_range_1', i_range_1
356 write(0,*)
'i_range_2', i_range_2
357 write(0,*)
'integer_rmap2%forward1%entry(i_domain)', &
358 integer_rmap2%forward1%entry(i_domain)
359 write(0,*)
'integer_rmap2%forward2%entry(i_domain)', &
360 integer_rmap2%forward2%entry(i_domain)
361 write(0,*)
'i_index', i_index
362 write(0,*)
'integer_rmap2%index%entry(i_domain)', &
363 integer_rmap2%index%entry(i_domain)
364 call assert(636832060, continue_on_error)
380 integer :: i_1, i_2, total_size
381 logical :: is_allocated
384 is_allocated =
allocated(val%inverse)
386 if (is_allocated)
then
387 total_size = total_size &
389 total_size = total_size &
391 do i_1 = 1,
size(val%inverse, 1)
392 do i_2 = 1,
size(val%inverse, 2)
393 total_size = total_size &
411 character,
intent(inout) :: buffer(:)
413 integer,
intent(inout) :: position
418 integer :: prev_position, i_1, i_2
419 logical :: is_allocated
421 prev_position = position
422 is_allocated =
allocated(val%inverse)
424 if (is_allocated)
then
427 do i_1 = 1,
size(val%inverse, 1)
428 do i_2 = 1,
size(val%inverse, 2)
430 val%inverse(i_1, i_2))
449 character,
intent(inout) :: buffer(:)
451 integer,
intent(inout) :: position
456 integer :: prev_position, i_1, i_2, n_1, n_2
457 logical :: is_allocated
459 prev_position = position
461 if (is_allocated)
then
465 do i_1 = 1,
size(val%inverse, 1)
466 do i_2 = 1,
size(val%inverse, 2)
468 val%inverse(i_1, i_2))
472 if (
allocated(val%inverse))
then
473 deallocate(val%inverse)