File: array_slice_01.f90

package info (click to toggle)
lfortran 0.58.0-4
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 54,512 kB
  • sloc: cpp: 162,179; f90: 68,251; python: 17,476; ansic: 6,278; yacc: 2,334; sh: 1,317; fortran: 892; makefile: 33; javascript: 15
file content (39 lines) | stat: -rw-r--r-- 735 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
program array_slice_01
implicit none

integer, target :: a(5, 6, 7, 19), sum_slice
integer, pointer :: b(:, :), c(:)
integer :: i, j, suma

b => a(:, 3, 4:6, 17)
a = 20
sum_slice = sum_array_slice(b)
print *, sum_slice
if( sum_slice /= 285 ) error stop

do i = lbound(a, 1), ubound(a, 1)
    do j = 4, 6
        if( a(i, 3, j, 17) /= 19 ) error stop
    end do
end do

suma = sum(a)
print *, suma
if( suma /= 79785 ) error stop

contains

function sum_array_slice(array) result(r)
integer, intent(inout) :: array(:, :)
integer :: i, j
integer :: r
r = 0
do i = lbound(array, 1), ubound(array, 1)
    do j = lbound(array, 2), ubound(array, 2)
      array(i, j) = 19
      r = r + array(i, j)
    end do
end do
end function

end program