Elemental functions are defined as scalar operators, with a single scalar dummy argument and a scalar return value, but they may be invoked with arrays as actual arguments in which case the function will be applied element-wise, with a conforming array return value. Such functions must also be pure functions, with no side effects, and can be indicated with the
elemental prefix. Since it is implied that an elemental function is also pure, the
pure prefix is not necessary.
Elemental subroutines may be defined in a similar way, however, side effects are permitted for
The main benefit of elemental procedures is that advance knowledge that a function is elemental simplifies parallel execution.
module test_mod implicit none contains elemental real function square(x) real, intent(in) :: x square = x*x end function end module program test_prog use test_mod implicit none real, dimension(3) :: x = (/ 1.0, 2.0, 3.0 /) print *, square(x) end program