blob: 1493c5fb03112b6420870c53b3cd57b4754c02c0 [file] [log] [blame]
module m
implicit none (type, external)
type t
integer, allocatable :: arr(:,:)
integer :: var
integer, allocatable :: slr
end type t
contains
subroutine check_it (is_present, dummy_alloced, inner_alloc, &
scalar, array, a_scalar, a_array, &
l_scalar, l_array, la_scalar, la_array, &
opt_scalar, opt_array, a_opt_scalar, a_opt_array)
type(t), intent(inout) :: &
scalar, array(:,:), opt_scalar, opt_array(:,:), a_scalar, a_array(:,:), &
a_opt_scalar, a_opt_array(:,:), &
l_scalar, l_array(:,:), la_scalar, la_array(:,:)
optional :: opt_scalar, opt_array, a_opt_scalar, a_opt_array
allocatable :: a_scalar, a_array, a_opt_scalar, a_opt_array, la_scalar, la_array
logical, value :: is_present, dummy_alloced, inner_alloc
integer :: i, j, k, l
! CHECK VALUE
if (scalar%var /= 42) stop 1
if (l_scalar%var /= 42) stop 1
if (is_present) then
if (opt_scalar%var /= 42) stop 2
end if
if (any (shape(array) /= [3,2])) stop 1
if (any (shape(l_array) /= [3,2])) stop 1
if (is_present) then
if (any (shape(opt_array) /= [3,2])) stop 1
end if
do j = 1, 2
do i = 1, 3
if (array(i,j)%var /= i*97 + 100*41*j) stop 3
if (l_array(i,j)%var /= i*97 + 100*41*j) stop 3
if (is_present) then
if (opt_array(i,j)%var /= i*97 + 100*41*j) stop 4
end if
end do
end do
if (dummy_alloced) then
if (a_scalar%var /= 42) stop 1
if (la_scalar%var /= 42) stop 1
if (is_present) then
if (a_opt_scalar%var /= 42) stop 1
end if
if (any (shape(a_array) /= [3,2])) stop 1
if (any (shape(la_array) /= [3,2])) stop 1
if (is_present) then
if (any (shape(a_opt_array) /= [3,2])) stop 1
end if
do j = 1, 2
do i = 1, 3
if (a_array(i,j)%var /= i*97 + 100*41*j) stop 1
if (la_array(i,j)%var /= i*97 + 100*41*j) stop 1
if (is_present) then
if (a_opt_array(i,j)%var /= i*97 + 100*41*j) stop 1
end if
end do
end do
else
if (allocated (a_scalar)) stop 1
if (allocated (la_scalar)) stop 1
if (allocated (a_array)) stop 1
if (allocated (la_array)) stop 1
if (is_present) then
if (allocated (a_opt_scalar)) stop 1
if (allocated (a_opt_array)) stop 1
end if
end if
if (inner_alloc) then
if (scalar%slr /= 467) stop 5
if (l_scalar%slr /= 467) stop 5
if (a_scalar%slr /= 467) stop 6
if (la_scalar%slr /= 467) stop 6
if (is_present) then
if (opt_scalar%slr /= 467) stop 7
if (a_opt_scalar%slr /= 467) stop 8
end if
do j = 1, 2
do i = 1, 3
if (array(i,j)%slr /= (i*97 + 100*41*j) + 467) stop 9
if (l_array(i,j)%slr /= (i*97 + 100*41*j) + 467) stop 9
if (a_array(i,j)%slr /= (i*97 + 100*41*j) + 467) stop 10
if (la_array(i,j)%slr /= (i*97 + 100*41*j) + 467) stop 10
if (is_present) then
if (opt_array(i,j)%slr /= (i*97 + 100*41*j) + 467) stop 11
if (a_opt_array(i,j)%slr /= (i*97 + 100*41*j) + 467) stop 12
end if
end do
end do
do l = 1, 5
do k = 1, 4
if (any (shape(scalar%arr) /= [4,5])) stop 1
if (any (shape(l_scalar%arr) /= [4,5])) stop 1
if (any (shape(a_scalar%arr) /= [4,5])) stop 1
if (any (shape(la_scalar%arr) /= [4,5])) stop 1
if (scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467) stop 13
if (l_scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467) stop 13
if (a_scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467) stop 14
if (la_scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467) stop 14
if (is_present) then
if (any (shape(opt_scalar%arr) /= [4,5])) stop 1
if (any (shape(a_opt_scalar%arr) /= [4,5])) stop 1
if (opt_scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467) stop 15
if (a_opt_scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467) stop 16
end if
end do
end do
do j = 1, 2
do i = 1, 3
if (any (shape(array(i,j)%arr) /= [i,j])) stop 1
if (any (shape(l_array(i,j)%arr) /= [i,j])) stop 1
if (any (shape(a_array(i,j)%arr) /= [i,j])) stop 1
if (any (shape(la_array(i,j)%arr) /= [i,j])) stop 1
if (is_present) then
if (any (shape(opt_array(i,j)%arr) /= [i,j])) stop 1
if (any (shape(a_opt_array(i,j)%arr) /= [i,j])) stop 1
endif
do l = 1, j
do k = 1, i
if (array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l) stop 17
if (l_array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l) stop 17
if (a_array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l) stop 18
if (la_array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l) stop 18
if (is_present) then
if (opt_array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l) stop 19
if (a_opt_array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l) stop 20
end if
end do
end do
end do
end do
else if (dummy_alloced) then
if (allocated (scalar%slr)) stop 1
if (allocated (l_scalar%slr)) stop 1
if (allocated (a_scalar%slr)) stop 1
if (allocated (la_scalar%slr)) stop 1
if (is_present) then
if (allocated (opt_scalar%slr)) stop 1
if (allocated (a_opt_scalar%slr)) stop 1
endif
if (allocated (scalar%arr)) stop 1
if (allocated (l_scalar%arr)) stop 1
if (allocated (a_scalar%arr)) stop 1
if (allocated (la_scalar%arr)) stop 1
if (is_present) then
if (allocated (opt_scalar%arr)) stop 1
if (allocated (a_opt_scalar%arr)) stop 1
endif
end if
! SET VALUE
scalar%var = 42 + 13
l_scalar%var = 42 + 13
if (is_present) then
opt_scalar%var = 42 + 13
endif
do j = 1, 2
do i = 1, 3
array(i,j)%var = i*97 + 100*41*j + 13
l_array(i,j)%var = i*97 + 100*41*j + 13
if (is_present) then
opt_array(i,j)%var = i*97 + 100*41*j + 13
end if
end do
end do
if (dummy_alloced) then
a_scalar%var = 42 + 13
la_scalar%var = 42 + 13
if (is_present) then
a_opt_scalar%var = 42 + 13
endif
do j = 1, 2
do i = 1, 3
a_array(i,j)%var = i*97 + 100*41*j + 13
la_array(i,j)%var = i*97 + 100*41*j + 13
if (is_present) then
a_opt_array(i,j)%var = i*97 + 100*41*j + 13
endif
end do
end do
end if
if (inner_alloc) then
scalar%slr = 467 + 13
l_scalar%slr = 467 + 13
a_scalar%slr = 467 + 13
la_scalar%slr = 467 + 13
if (is_present) then
opt_scalar%slr = 467 + 13
a_opt_scalar%slr = 467 + 13
end if
do j = 1, 2
do i = 1, 3
array(i,j)%slr = (i*97 + 100*41*j) + 467 + 13
l_array(i,j)%slr = (i*97 + 100*41*j) + 467 + 13
a_array(i,j)%slr = (i*97 + 100*41*j) + 467 + 13
la_array(i,j)%slr = (i*97 + 100*41*j) + 467 + 13
if (is_present) then
opt_array(i,j)%slr = (i*97 + 100*41*j) + 467 + 13
a_opt_array(i,j)%slr = (i*97 + 100*41*j) + 467 + 13
end if
end do
end do
do l = 1, 5
do k = 1, 4
scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + 13
l_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + 13
a_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + 13
la_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + 13
if (is_present) then
opt_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + 13
a_opt_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + 13
end if
end do
end do
do j = 1, 2
do i = 1, 3
do l = 1, j
do k = 1, i
array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + 13
l_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + 13
a_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + 13
la_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + 13
if (is_present) then
opt_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + 13
a_opt_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + 13
end if
end do
end do
end do
end do
end if
end subroutine
subroutine check_reset (is_present, dummy_alloced, inner_alloc, &
scalar, array, a_scalar, a_array, &
l_scalar, l_array, la_scalar, la_array, &
opt_scalar, opt_array, a_opt_scalar, a_opt_array)
type(t), intent(inout) :: &
scalar, array(:,:), opt_scalar, opt_array(:,:), a_scalar, a_array(:,:), &
a_opt_scalar, a_opt_array(:,:), &
l_scalar, l_array(:,:), la_scalar, la_array(:,:)
optional :: opt_scalar, opt_array, a_opt_scalar, a_opt_array
allocatable :: a_scalar, a_array, a_opt_scalar, a_opt_array, la_scalar, la_array
logical, value :: is_present, dummy_alloced, inner_alloc
integer :: i, j, k, l
! CHECK VALUE
if (scalar%var /= 42 + 13) stop 1
if (l_scalar%var /= 42 + 13) stop 1
if (is_present) then
if (opt_scalar%var /= 42 + 13) stop 2
end if
if (any (shape(array) /= [3,2])) stop 1
if (any (shape(l_array) /= [3,2])) stop 1
if (is_present) then
if (any (shape(opt_array) /= [3,2])) stop 1
end if
do j = 1, 2
do i = 1, 3
if (array(i,j)%var /= i*97 + 100*41*j + 13) stop 3
if (l_array(i,j)%var /= i*97 + 100*41*j + 13) stop 3
if (is_present) then
if (opt_array(i,j)%var /= i*97 + 100*41*j + 13) stop 4
end if
end do
end do
if (dummy_alloced) then
if (a_scalar%var /= 42 + 13) stop 1
if (la_scalar%var /= 42 + 13) stop 1
if (is_present) then
if (a_opt_scalar%var /= 42 + 13) stop 1
end if
if (any (shape(a_array) /= [3,2])) stop 1
if (any (shape(la_array) /= [3,2])) stop 1
if (is_present) then
if (any (shape(a_opt_array) /= [3,2])) stop 1
end if
do j = 1, 2
do i = 1, 3
if (a_array(i,j)%var /= i*97 + 100*41*j + 13) stop 1
if (la_array(i,j)%var /= i*97 + 100*41*j + 13) stop 1
if (is_present) then
if (a_opt_array(i,j)%var /= i*97 + 100*41*j + 13) stop 1
end if
end do
end do
else
if (allocated (a_scalar)) stop 1
if (allocated (la_scalar)) stop 1
if (allocated (a_array)) stop 1
if (allocated (la_array)) stop 1
if (is_present) then
if (allocated (a_opt_scalar)) stop 1
if (allocated (a_opt_array)) stop 1
end if
end if
if (inner_alloc) then
if (scalar%slr /= 467 + 13) stop 5
if (l_scalar%slr /= 467 + 13) stop 5
if (a_scalar%slr /= 467 + 13) stop 6
if (la_scalar%slr /= 467 + 13) stop 6
if (is_present) then
if (opt_scalar%slr /= 467 + 13) stop 7
if (a_opt_scalar%slr /= 467 + 13) stop 8
end if
do j = 1, 2
do i = 1, 3
if (array(i,j)%slr /= (i*97 + 100*41*j) + 467 + 13) stop 9
if (l_array(i,j)%slr /= (i*97 + 100*41*j) + 467 + 13) stop 9
if (a_array(i,j)%slr /= (i*97 + 100*41*j) + 467 + 13) stop 10
if (la_array(i,j)%slr /= (i*97 + 100*41*j) + 467 + 13) stop 10
if (is_present) then
if (opt_array(i,j)%slr /= (i*97 + 100*41*j) + 467 + 13) stop 11
if (a_opt_array(i,j)%slr /= (i*97 + 100*41*j) + 467 + 13) stop 12
end if
end do
end do
do l = 1, 5
do k = 1, 4
if (any (shape(scalar%arr) /= [4,5])) stop 1
if (any (shape(l_scalar%arr) /= [4,5])) stop 1
if (any (shape(a_scalar%arr) /= [4,5])) stop 1
if (any (shape(la_scalar%arr) /= [4,5])) stop 1
if (scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467 + 13) stop 13
if (l_scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467 + 13) stop 13
if (a_scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467 + 13) stop 14
if (la_scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467 + 13) stop 14
if (is_present) then
if (any (shape(opt_scalar%arr) /= [4,5])) stop 1
if (any (shape(a_opt_scalar%arr) /= [4,5])) stop 1
if (opt_scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467 + 13) stop 15
if (a_opt_scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467 + 13) stop 16
end if
end do
end do
do j = 1, 2
do i = 1, 3
if (any (shape(array(i,j)%arr) /= [i,j])) stop 1
if (any (shape(l_array(i,j)%arr) /= [i,j])) stop 1
if (any (shape(a_array(i,j)%arr) /= [i,j])) stop 1
if (any (shape(la_array(i,j)%arr) /= [i,j])) stop 1
if (is_present) then
if (any (shape(opt_array(i,j)%arr) /= [i,j])) stop 1
if (any (shape(a_opt_array(i,j)%arr) /= [i,j])) stop 1
endif
do l = 1, j
do k = 1, i
if (array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l + 13) stop 17
if (l_array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l + 13) stop 17
if (a_array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l + 13) stop 18
if (la_array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l + 13) stop 18
if (is_present) then
if (opt_array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l + 13) stop 19
if (a_opt_array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l + 13) stop 20
end if
end do
end do
end do
end do
else if (dummy_alloced) then
if (allocated (scalar%slr)) stop 1
if (allocated (l_scalar%slr)) stop 1
if (allocated (a_scalar%slr)) stop 1
if (allocated (la_scalar%slr)) stop 1
if (is_present) then
if (allocated (opt_scalar%slr)) stop 1
if (allocated (a_opt_scalar%slr)) stop 1
endif
if (allocated (scalar%arr)) stop 1
if (allocated (l_scalar%arr)) stop 1
if (allocated (a_scalar%arr)) stop 1
if (allocated (la_scalar%arr)) stop 1
if (is_present) then
if (allocated (opt_scalar%arr)) stop 1
if (allocated (a_opt_scalar%arr)) stop 1
endif
end if
! (RE)SET VALUE
scalar%var = 42
l_scalar%var = 42
if (is_present) then
opt_scalar%var = 42
endif
do j = 1, 2
do i = 1, 3
array(i,j)%var = i*97 + 100*41*j
l_array(i,j)%var = i*97 + 100*41*j
if (is_present) then
opt_array(i,j)%var = i*97 + 100*41*j
end if
end do
end do
if (dummy_alloced) then
a_scalar%var = 42
la_scalar%var = 42
if (is_present) then
a_opt_scalar%var = 42
endif
do j = 1, 2
do i = 1, 3
a_array(i,j)%var = i*97 + 100*41*j
la_array(i,j)%var = i*97 + 100*41*j
if (is_present) then
a_opt_array(i,j)%var = i*97 + 100*41*j
endif
end do
end do
end if
if (inner_alloc) then
scalar%slr = 467
l_scalar%slr = 467
a_scalar%slr = 467
la_scalar%slr = 467
if (is_present) then
opt_scalar%slr = 467
a_opt_scalar%slr = 467
end if
do j = 1, 2
do i = 1, 3
array(i,j)%slr = (i*97 + 100*41*j) + 467
l_array(i,j)%slr = (i*97 + 100*41*j) + 467
a_array(i,j)%slr = (i*97 + 100*41*j) + 467
la_array(i,j)%slr = (i*97 + 100*41*j) + 467
if (is_present) then
opt_array(i,j)%slr = (i*97 + 100*41*j) + 467
a_opt_array(i,j)%slr = (i*97 + 100*41*j) + 467
end if
end do
end do
do l = 1, 5
do k = 1, 4
scalar%arr(k,l) = (i*27 + 1000*11*j) + 467
l_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467
a_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467
la_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467
if (is_present) then
opt_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467
a_opt_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467
end if
end do
end do
do j = 1, 2
do i = 1, 3
do l = 1, j
do k = 1, i
array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l
l_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l
a_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l
la_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l
if (is_present) then
opt_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l
a_opt_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l
end if
end do
end do
end do
end do
end if
end subroutine
subroutine test(scalar, array, a_scalar, a_array, opt_scalar, opt_array, &
a_opt_scalar, a_opt_array)
type(t) :: scalar, array(:,:), opt_scalar, opt_array(:,:), a_scalar, a_array(:,:)
type(t) :: a_opt_scalar, a_opt_array(:,:)
type(t) :: l_scalar, l_array(3,2), la_scalar, la_array(:,:)
allocatable :: a_scalar, a_array, a_opt_scalar, a_opt_array, la_scalar, la_array
optional :: opt_scalar, opt_array, a_opt_scalar, a_opt_array
integer :: i, j, k, l
logical :: is_present, dummy_alloced, local_alloced, inner_alloc
is_present = present(opt_scalar)
dummy_alloced = allocated(a_scalar)
inner_alloc = allocated(scalar%slr)
l_scalar%var = 42
do j = 1, 2
do i = 1, 3
l_array(i,j)%var = i*97 + 100*41*j
end do
end do
if (dummy_alloced) then
allocate(la_scalar, la_array(3,2))
a_scalar%var = 42
la_scalar%var = 42
do j = 1, 2
do i = 1, 3
l_array(i,j)%var = i*97 + 100*41*j
la_array(i,j)%var = i*97 + 100*41*j
end do
end do
end if
if (inner_alloc) then
l_scalar%slr = 467
la_scalar%slr = 467
do j = 1, 2
do i = 1, 3
l_array(i,j)%slr = (i*97 + 100*41*j) + 467
la_array(i,j)%slr = (i*97 + 100*41*j) + 467
end do
end do
allocate(l_scalar%arr(4,5), la_scalar%arr(4,5))
do l = 1, 5
do k = 1, 4
l_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467
la_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467
end do
end do
do j = 1, 2
do i = 1, 3
allocate(l_array(i,j)%arr(i,j), la_array(i,j)%arr(i,j))
do l = 1, j
do k = 1, i
l_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l
la_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l
end do
end do
end do
end do
end if
! implicit mapping
!$omp target
if (is_present) then
call check_it (is_present, dummy_alloced, inner_alloc, &
scalar, array, a_scalar, a_array, &
l_scalar, l_array, la_scalar, la_array, &
opt_scalar, opt_array, a_opt_scalar, a_opt_array)
else
call check_it (is_present, dummy_alloced, inner_alloc, &
scalar, array, a_scalar, a_array, &
l_scalar, l_array, la_scalar, la_array)
end if
!$omp end target
if (is_present) then
call check_reset (is_present, dummy_alloced, inner_alloc, &
scalar, array, a_scalar, a_array, &
l_scalar, l_array, la_scalar, la_array, &
opt_scalar, opt_array, a_opt_scalar, a_opt_array)
else
call check_reset (is_present, dummy_alloced, inner_alloc, &
scalar, array, a_scalar, a_array, &
l_scalar, l_array, la_scalar, la_array)
endif
! explicit mapping
!$omp target map(scalar, array, opt_scalar, opt_array, a_scalar, a_array) &
!$omp& map(a_opt_scalar, a_opt_array) &
!$omp& map(l_scalar, l_array, la_scalar, la_array)
if (is_present) then
call check_it (is_present, dummy_alloced, inner_alloc, &
scalar, array, a_scalar, a_array, &
l_scalar, l_array, la_scalar, la_array, &
opt_scalar, opt_array, a_opt_scalar, a_opt_array)
else
call check_it (is_present, dummy_alloced, inner_alloc, &
scalar, array, a_scalar, a_array, &
l_scalar, l_array, la_scalar, la_array)
endif
!$omp end target
if (is_present) then
call check_reset (is_present, dummy_alloced, inner_alloc, &
scalar, array, a_scalar, a_array, &
l_scalar, l_array, la_scalar, la_array, &
opt_scalar, opt_array, a_opt_scalar, a_opt_array)
else
call check_reset (is_present, dummy_alloced, inner_alloc, &
scalar, array, a_scalar, a_array, &
l_scalar, l_array, la_scalar, la_array)
endif
end subroutine
end module
program main
use m
implicit none (type, external)
type(t) :: scalar, array(3,2), opt_scalar, opt_array(3,2), a_scalar, a_array(:,:)
type(t) :: a_opt_scalar, a_opt_array(:,:)
allocatable :: a_scalar, a_array, a_opt_scalar, a_opt_array
integer :: i, j, k, l, n
scalar%var = 42
opt_scalar%var = 42
do j = 1, 2
do i = 1, 3
array(i,j)%var = i*97 + 100*41*j
opt_array(i,j)%var = i*97 + 100*41*j
end do
end do
! unallocated
call test (scalar, array, a_scalar, a_array)
call test (scalar, array, a_scalar, a_array, opt_scalar, opt_array, a_opt_scalar, a_opt_array)
! allocated
allocate(a_scalar, a_opt_scalar, a_array(3,2), a_opt_array(3,2))
a_scalar%var = 42
a_opt_scalar%var = 42
do j = 1, 2
do i = 1, 3
a_array(i,j)%var = i*97 + 100*41*j
a_opt_array(i,j)%var = i*97 + 100*41*j
end do
end do
call test (scalar, array, a_scalar, a_array)
call test (scalar, array, a_scalar, a_array, opt_scalar, opt_array, a_opt_scalar, a_opt_array)
! comps allocated
scalar%slr = 467
a_scalar%slr = 467
opt_scalar%slr = 467
a_opt_scalar%slr = 467
do j = 1, 2
do i = 1, 3
array(i,j)%slr = (i*97 + 100*41*j) + 467
a_array(i,j)%slr = (i*97 + 100*41*j) + 467
opt_array(i,j)%slr = (i*97 + 100*41*j) + 467
a_opt_array(i,j)%slr = (i*97 + 100*41*j) + 467
end do
end do
allocate(scalar%arr(4,5), a_scalar%arr(4,5), opt_scalar%arr(4,5), a_opt_scalar%arr(4,5))
do l = 1, 5
do k = 1, 4
scalar%arr(k,l) = (i*27 + 1000*11*j) + 467
a_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467
opt_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467
a_opt_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467
end do
end do
do j = 1, 2
do i = 1, 3
allocate(array(i,j)%arr(i,j), a_array(i,j)%arr(i,j), opt_array(i,j)%arr(i,j), a_opt_array(i,j)%arr(i,j))
do l = 1, j
do k = 1, i
array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l
a_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l
opt_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l
a_opt_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l
end do
end do
end do
end do
call test (scalar, array, a_scalar, a_array)
call test (scalar, array, a_scalar, a_array, opt_scalar, opt_array, a_opt_scalar, a_opt_array)
deallocate(a_scalar, a_opt_scalar, a_array, a_opt_array)
end