Section 3.8: Argument Passing#

Adapted from: “Guide to Fortran 2008 Programming” by Walter S. Brainerd (Springer 2015)

Program to demonstrate different methods of passing arguments to functions in Fortran.#

This program calculates the sum:

\[ \Large \sum_{i=m}^n \left(s+d \times i \right) \]
program series_sum_program

    implicit none
    
    integer, parameter :: n = 100
    
    ! Shows different ways to pass arguments to a function
    print *, series_sum(0, 700, 100.0, 0.1)
    print *, series_sum(0, 700, d=0.1, s=100.0)
    print *, series_sum(n=700, d=0.1, s=100.0)
    print *, series_sum(d=0.1, s=100.0, n=700)
    print *, series_sum(m=0, n=700, d=0.1, s=100.0)

contains

    function series_sum(m, n, s, d) result (series_sum_result)
        integer, optional, intent(in)   :: m
        integer, intent(in)             :: n
        real, intent(in)                :: s, d
        real                            :: series_sum_result
        integer                         :: i, temp_m

        if (present(m)) then
            temp_m = m
        else
            temp_m = 0
        end if

        series_sum_result = 0
        do i = temp_m, n
            series_sum_result = series_sum_result + s + i * d
        end do

end function series_sum

end program series_sum_program

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_3_8_Argument_Passing"
os.chdir(code_dir)
build_status = os.system("fpm build 2>/dev/null")
exec_status = os.system("fpm run 2>/dev/null")
   94635.0000    
   94635.0000    
   94635.0000    
   94635.0000    
   94635.0000