New to Fortran, questions about writing to file

后端 未结 4 701
慢半拍i
慢半拍i 2020-12-21 19:35

I am completely new to Fortran and pretty new to programming in general. I am trying to compile a script someone else has written. This is giving me a few problems. The top

相关标签:
4条回答
  • 2020-12-21 20:06

    110 is the error code thrown by the WRITE call. You need to check your FORTRAN RTL (run-time library) reference. It should list the possible error codes. I think 110 means that you're trying to convert a double-precision value to an integer, but the value is bigger than you can store in an integer. Maybe dump the values in DB and see.

    0 讨论(0)
  • 2020-12-21 20:07

    In this program, OUT is telling if the write statement was successful or not. (the IOSTAT parameter to the write statement means "I/O status", or input/output status). It returns 0 if the I/O operation was a success, or the number of the error code otherwise. You can find what the error codes mean here.

    I'm not familiar with the REC parameter, but a starting place to investigate yourself can be found here.

    0 讨论(0)
  • 2020-12-21 20:14

    To quote the handbook REC indicates the record number to be read or written. As advised, see the documentation which accompanies your compiler for further explanation.

    (DB(K),K=1,NCOEFF) means 'all the elements in DB from 1 to NCOEFF. You are looking at an io-implied-do statement.

    0 讨论(0)
  • 2020-12-21 20:17

    The statement

    WRITE (12,REC=NROUT+2,IOSTAT=OUT) (DB(K),K=1,NCOEFF)
    

    is, if memory serves me, called an "implied DO-loop". As written, it will write NCOEFF values from array DB, starting at DB(1).

    It is called an implied DO-loop because the explicit form would be (in FORTRAN IV, for the ancients: I know it a lot better than the more modern variations) something along the lines of:

          DO 10 K=1,NCOEFF
          WRITE (12,REC=NROUT+2,IOSTAT=OUT) DB(K)
    10    CONTINUE
    

    (Pretend that the first two lines are indented six columns.) This is a DO-loop. The implied DO-loop form lets you put the "loop" right in the input/output statement.

    What makes it useful is that you can have multiple arrays, and multiple loops. For a simple example:

    WRITE (12,REC=NROUT+2,IOSTAT=OUT) (DB(K), DC(K), K=1,NCOEFF)
    
    0 讨论(0)
提交回复
热议问题