Array Sections and Masks
Array Section
Sum a Prefix
Array sections let a program operate on part of an array without copying each element by hand.
Program
Play the program to choose how many leading values participate in the section sum.
array_section_sum.f90
Replay: real traced execution (multi-file project)
program array_section_sum_demo
implicit none
integer :: values(5)
integer :: count
integer :: total
values = [2, 4, 6, 8, 10]
count = 3
total = sum(values(1:count))
print '(I0)', total
end program array_section_sum_demo
program array_section_sum_demo
implicit none
integer :: values(5)
integer :: count
integer :: total
values = [2, 4, 6, 8, 10]
count = 4
total = sum(values(1:count))
print '(I0)', total
end program array_section_sum_demo
program array_section_sum_demo
implicit none
integer :: values(5)
integer :: count
integer :: total
values = [2, 4, 6, 8, 10]
count = 5
total = sum(values(1:count))
print '(I0)', total
end program array_section_sum_demo
values ← [2, 4, 6, 8, 10]
7values = [2, 4, 6, 8, 10]8count = 3values this step[2, 4, 6, 8, 10]valuescount ← 3
7values = [2, 4, 6, 8, 10]8count = 39total = sum(values(1:count))values this step3counttotal ← 12
8count = 39total = sum(values(1:count))10print '(I0)', totalvalues this step12total3countprint '(I0)', total
9 total = sum(values(1:count))10 print '(I0)', total11end program array_section_sum_demooutput12values this step12total
values ← [2, 4, 6, 8, 10]
7values = [2, 4, 6, 8, 10]8count = 4values this step[2, 4, 6, 8, 10]valuescount ← 4
7values = [2, 4, 6, 8, 10]8count = 49total = sum(values(1:count))values this step4counttotal ← 20
8count = 49total = sum(values(1:count))10print '(I0)', totalvalues this step20total4countprint '(I0)', total
9 total = sum(values(1:count))10 print '(I0)', total11end program array_section_sum_demooutput20values this step20total
values ← [2, 4, 6, 8, 10]
7values = [2, 4, 6, 8, 10]8count = 5values this step[2, 4, 6, 8, 10]valuescount ← 5
7values = [2, 4, 6, 8, 10]8count = 59total = sum(values(1:count))values this step5counttotal ← 30
8count = 59total = sum(values(1:count))10print '(I0)', totalvalues this step30total5countprint '(I0)', total
9 total = sum(values(1:count))10 print '(I0)', total11end program array_section_sum_demooutput30values this step30total
section
`values(1:count)` selects a contiguous part of the array.
sum
`sum(section)` reduces the selected elements to one value.
bounds
The section bounds are expressions, so a variable can choose the range.