 <p>I do not understand why writing a <code>MODULE</code> would not work, but have you considered <code>CONTAINS</code>? Everything above the <code>CONTAINS</code> declaration is visible to the subroutines below the <code>CONTAINS</code>:</p> <pre><code>PROGRAM call_both INTEGER,DIMENSION(2) :: a, b a = 1 b = 2 PRINT *,"main sees", a, b CALL subA CALL subB CONTAINS SUBROUTINE subA PRINT *,"subA sees",a,b END SUBROUTINE subA SUBROUTINE subB PRINT *,"subB sees",a,b END SUBROUTINE subB END PROGRAM call_both </code></pre> <p>The output would be</p> <pre><code>main sees 1 1 2 2 subA sees 1 1 2 2 subB sees 1 1 2 2 </code></pre> <p>This works with <code>ALLOCATABLE</code> arrays as well.</p>