 <p>See <a href="http://stackoverflow.com/questions/32809769/how-to-pass-subroutine-names-as-arguments-in-fortran/32811182#32811182">How to pass subroutine names as arguments in Fortran?</a> for general rules.</p> <p>Don't use <code>external</code> here. It is incompatible with advanced features like array valued functions. Generally, <code>external</code> is only for old programs in FORTRAN 77 style. Make an interface block (see the link) or try </p> <pre><code> procedure(Function1) :: RandomFunction </code></pre> <p>instead (Fortran 2003).</p>