Is there a way in Fortran to write to an output file from subroutine when the file has open statement in main program.

fortran, output, program-entry-point, subroutine

Solution

By passing the integer representing the opened file:

module mod1
  implicit none
contains
  subroutine subroutine1(fp)
    integer, intent(in) :: fp
    write(fp,*)'dummy'
    write(fp,*)'dummy'
  end subroutine subroutine1
end module mod1

program main1
  use mod1
  implicit none
  integer :: fp
  fp = 11
  open(unit=fp,file='output.dat')
  call subroutine1(fp)
  close(fp)
end program main1

Problem

In Fortran, I am trying to write to an output file from subroutine when the file has open statement in the main program. In other words, how do I pass file unit number (terminal number) to subroutine from the main program. Any idea about this is highly appreciated.For example, my code looks like this, ``` program main1 open(unit=11,file='output.dat') call subroutine1 ... call subroutine1 ... end program main1 subroutine subroutine1 write(11,*)'dummy' ... write(11,*)'dummy' ... end subroutine subroutine1 ```

Original source