 <p>To answer your questions:</p> <ul> <li>Is X an array when it's passed in?</li> </ul> <p>Yes. It is a <code>DOUBLE PRECISION</code> array having one dimension with the extent <code>NGamma</code>.</p> <ul> <li>Is the X that is declared in the 3rd line different than the parameter X?</li> </ul> <p>First, a word of terminology: In Fortran, X is a dummy argument (that gets associated with the actual argument of the caller). In Fortran, a <code>PARAMETER</code> is quite a different beast: <code>PARAMETER</code>s are named constants in Fortran.</p> <p>So yes, the X that is a dummy argument is the same as in the <code>DIMENSION</code> statement. It gets its type from the <code>IMPLICIT DOUBLE PRECISION</code> statement.</p> <p>Modern ideomatic Fortran would have the declaration as something like</p> <pre><code> DOUBLE PRECISION, DIMENSION(NGamma), INTENT(IN) :: X </code></pre> <p>which would make clear to the reader that this is an array dummy argument which is not permitted to be changed by the function.</p> <p>The <code>GAMMA</code> is declared as an array of the same shape as <code>X</code>. This used to be invalid FORTRAN 77 (but accepted as an extension by many compilers), but is perfectly fine for Fortran 90 or later.</p>