I am a bit confused by the description here, but I think you are saying you have a program written to read and write from a file.
You would like to be able to open a file as an internal file even if the machine does not have a memory-resident file system you can write to; and maybe you are saying all images even in a parallel job running on multiple nodes should have access to the file.
If it is just a coarray that holds the data you can write it out using stream I/O, but just use it as an array while executing. That does mean it gets complicated if you do not know the size required when the program starts.
Note that internal files can only be written to using formatted I/O. The loophole is that you can write anything with an “A” format (perhaps not a well-known Fortran feature, but standard). So (again best off if you know the maximum size when you allocate the “file”) you can actually use that and a few other tricks to write the record length at the beginning of each record (available via an INQUIRE). If the file is direct-access it is pretty easy to just have the code conditionally do a WRITE or a store into a user-defined type array; and again just write the data out at the end if you need to retain it.
But on just about any HPC cluster that uses the nodes as general resources and not just for floating point ops there is usually a memory-resident file system available to the user. Many job schedulers create a private /tmp mount for each job that is often memory-resident in one form or another now-a-days.
The tricky part is if all the processes have to see the file. Sometimes it is trivial to rewrite the code so one node does the I/O and the rest get and put data to that node, or it puts the data into coarrays.
Some of the products already listed (as well as others) let you create a single parallel file system visible to multiple nodes; but a lot of HPC systems already have high-speed I/O available (eg., Lustre, ..) so there are often alternatives, albeit not as convenient.
But is that what you are saying? Instead of internal files having to be of fixed width and length (and formatted, although the ‘(*(A))’ format implied above gives you a partial solution for that) you want to be able to write binary sequential data of arbitrary record width as well as an arbitrary number of records to an internal file?
And do you need other images or other processes or sub-processes to see that data concurrently?
program really
! a program I hesitate to show someone
character(len=128) :: file(1000)
character(len=17) :: str
real :: x, y
complex :: z
write(file(1),'(*(a))') 'this is standard?',10.3,sqrt(40.0),(3,-4)
read(file(1),'(*(a))')str,x,y,z
write(*,*)str,x,y,z
end program really
A more legitimate use of that trick is when you need to mix formatted and binary data on the same output file. Rare, but sometimes a legitimate need. That comes up on writing to stdout in particular.