Section Arrays: Elemental Subroutine#
Adapted from: gjbex/Fortran-MOOC
This program demonstrates elemental subroutines in Fortran.#
program elemental_subroutine
implicit none
real, dimension(3, 4) :: A, B, C
integer :: i
A = reshape([ (i, i=1, 12) ], shape(A))
call compute(A, B, C)
print '(A)', 'A'
do i = 1, 3
print '(*(F7.2))', A(i, :)
end do
print '(A)', 'B'
do i = 1, 3
print '(*(F7.2))', B(i, :)
end do
print '(A)', 'C'
do i = 1, 3
print '(*(F7.2))', C(i, :)
end do
contains
elemental subroutine compute(A, B, C)
implicit none
real, intent(in) :: A
real, intent(out) :: B
real, intent(out) :: C
B = 2*A
C = 3*A
end subroutine compute
end program elemental_subroutine
The above program is compiled and run using Fortran Package Manager (fpm):
import os
root_dir = os.getcwd()
code_dir = root_dir + "/" + "Fortran_Code/Section_Arrays_Elemental_Subroutine"
os.chdir(code_dir)
build_status = os.system("fpm build 2>/dev/null")
exec_status = os.system("fpm run 2>/dev/null")
A
1.00 4.00 7.00 10.00
2.00 5.00 8.00 11.00
3.00 6.00 9.00 12.00
B
2.00 8.00 14.00 20.00
4.00 10.00 16.00 22.00
6.00 12.00 18.00 24.00
C
3.00 12.00 21.00 30.00
6.00 15.00 24.00 33.00
9.00 18.00 27.00 36.00