Section Arrays: Elemental Subroutine

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