module mysubs contains subroutine init(a, b, c) use kinds implicit none real(kind=REAL8), dimension(:,:), pointer :: a, b, c integer, parameter :: fileid = 1 character(len=256) :: fileName integer :: status integer :: n, m, i write (*,*) 'Darstellung der Addition zweier Matritzen' write (*,*) write (*,*) 'In welcher Datei liegen die Matrizen (Beispiel in matrix.dat)?' read (*,*) fileName open(unit=fileid, file=fileName, action='read', iostat=status) if (status /= 0) then write (*,*) 'Konnte Datei ', fileName, 'nicht öffnen.' stop end if read (fileid, *, iostat=status) m, n if (status /= 0) then write (*,*) 'Konnte Dimension nicht lesen.' stop end if allocate(a(m, n)) allocate(b(m, n)) allocate(c(m, n)) read(fileid, *, iostat=status) (a(i,1:n), i=1,m) if (status /= 0) then write (*,*) 'Konnte Array nicht lesen.' stop end if read(fileid, *, iostat=status) (b(i,1:n), i=1,m) if (status /= 0) then write (*,*) 'Konnte Array nicht lesen.' stop end if close(unit=fileid) return end subroutine init subroutine result(c) use kinds implicit none real(kind=REAL8), dimension(:,:), pointer :: c integer :: i, n, m character(len=80) :: format m = size(c, 1) n = size(c, 2) write (format, '(A,I4,A)') '(', n, '(F12.3," "))' write (*, format) (c(i,1:n), i=1,m) return end subroutine result end module mysubs program Matrixaddition ! Addition zweier Matritzen use kinds use mysubs implicit none real(kind=REAL8), dimension(:,:), pointer :: a, b, c call init(a, b, c) c = a + b call result(c) stop end program Matrixaddition