Fortran and C/C++ for Numerical ComputationSuppose you are writing a Fortran Subroutine to implement the Gauss Elimination method to solve a set of linear simultaneous equations. The main program and the Gauss subroutine would look as follows: C234567890
PARAMETER (MAXSZ = 1000)
REAL A(MAXSZ*MAXSZ), X(MAXSZ), B(MAXSZ)
WRITE(*,*) 'Enter number of equations' READ(*,*) M IF (M .GT. MAXSZ) WRITE(*,*) 'Increase MAXSZ. Program aborted' ENDIF
WRITE(*,*) 'Enter coefficient matrix row by row' CALL READMAT(M, M, A) WRITE(*,*) 'Enter right hand side vector' CALL READMAT(M, 1, B)
CALL GAUSS(M, A, B, X)
WRITE(*,*) 'Solution Vector' CALL PRINTMAT(M, 1, X)
STOP END
C Subroutine to read a matrix of M rows and N columns, row by row SUBROUTINE READMAT(M, N, A) REAL A(M, N)
DO I = 1, M READ(*,*) (A(I,J), J = 1, N) END DO
RETURN END
C Subroutine to solve a set of linear simultaneous equations SUBROUTINE GAUSS(M, A, B, X) REAL A(M, M), B(M, 1), X(M, 1)
......
RETURN END
There are several points worth noting  A one dimensioned array in the main program may be viewed as a twodimensioned (or multidimensioned) array inside a subroutine, as long as you understand how it is to be done.
 When passing an array to a subroutine, its size (number of rows and columns) must also be sent as arguments to the subroutine. Subroutine does not automatically know the size of the array argument it receives.
