https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92836
--- Comment #12 from Andrew Benson <abensonca at gmail dot com> --- (In reply to Thomas Koenig from comment #11) > (In reply to Andrew Benson from comment #10) > > (In reply to Thomas Koenig from comment #8) > > My reasoning for using INQUIRE to check the existence of the file > > is that if it doesn't exist I want one thread to proceed to create the data > > for the file (and actually that thread will then spawn another set of nested > > OpenMP threads to do that work). > > If you look at 12.5.6.1 in F2018, you will find > > If the file to be connected to the unit is the same as the file to which the > unit is connected, a new connection is not > established and values for any changeable modes (12.5.2) specified come into > effect for the established connection; > the current file position is unaffected. Before any effect on changeable > modes, a wait operation is performed for > any pending asynchronous data transfer operations for the specified unit. If > the POSITION= specifier appears > in such an OPEN statement, the value specified shall not disagree with the > current position of the file. If the > STATUS= specifier is included in such an OPEN statement, it shall be > specified with the value OLD. Other than > ERR=, IOSTAT=, and IOMSG=, and the changeable modes, the values of all other > specifiers in such an OPEN > statement shall not differ from those in effect for the established > connection. > > ... so my example was actually not quite correct, because the > STATUS was wrong. > > However, in order to to do what you describe, maybe an explicit variable > to hold the file number (or flag) may be better, like this, with > access guarded by OMP CRITICAL: > > integer :: file_num = -1 > > !$omp parallel > > ... > > !$omp critical > if (file_num < 0) then > open (newunit = file_num, file="foo.dat") > ! Do a lot of other stuff > end if > !$omp end critical > ! file_num contains something valid here That seems like a good approach - thanks for the suggestion!