Fortran输出文件以列而不是行的形式写入数据

Fortran输出文件以列而不是行的形式写入数据,fortran,Fortran,我正在尝试将数据输出到文件。当我运行Fortran代码时,数据如下图所示 数据似乎正在跨行写入。我希望它在我提供的标题下的列中写入,这些标题是片段编号、索引、X_POS、Y_POS、时间、X_级别和Y_级别 任何帮助都将不胜感激 SUBROUTINE EXEDIT USE kindef USE wrapup USE mdgrid USE ranges USE kindef USE cycvar ! STORES THE CYCLE VARIAB

我正在尝试将数据输出到文件。当我运行Fortran代码时,数据如下图所示

数据似乎正在跨行写入。我希望它在我提供的标题下的列中写入,这些标题是片段编号、索引、X_POS、Y_POS、时间、X_级别和Y_级别

任何帮助都将不胜感激

     SUBROUTINE EXEDIT

  USE kindef
  USE wrapup
  USE mdgrid
  USE ranges
  USE kindef
  USE cycvar        ! STORES THE CYCLE VARIABLES (E.G. TIME)
  USE subdef
  USE fildef
  USE matdef        ! STORES ALL RELEVANT MATERIAL ASSIGNMENTS AND DETAILS
  USE material
 

  IMPLICIT NONE

  ! Define user variables
  INTEGER (INT4)    ::  NS,I,J,IJK,counter
  REAL (REAL8)  ::  Y_LIMIT,POS_X,POS_Y,SIM_TIME,VEL_X,VEL_Y


   ! Specify the output files
   ! Desired output is a text file which lists the relevant variables for each fragment, i.e.
  !  Fragment   Mat-ID  Part    Index   X_POS   Y_POS   Z_POS   Time    X_VEL   Y_VEL   Z_VEL   Mass
  
  open(99,FILE=trim(FNID)//'.dat')
  write (99, '(A15)',advance='no')'Cycle no: '
  write (99, '(I10)',advance='yes')NCYCLE
  write (99, '(A15)',advance='yes')' '
  write (99, '(A15)',advance='no')'Fragment'
  write (99, '(A15)',advance='no')'Index'
  write (99, '(A15)',advance='no')'X-POS'
  write (99, '(A15)',advance='no')'Y_POS'
  write (99, '(A15)',advance='no')'Time'
  write (99, '(A15)',advance='no')'X_VEL'
  write (99, '(A15)',advance='no')'Y_VEL'
  write (99, '(A15)',advance='yes')' '


  ! SETTING THE VARIABLES EQUAL TO 0
  !   POS_X = 0 
  !   POS_Y = 0
  !   POS_Z = 0
  !   VEL_X = 0
  !   VEL_Y = 0
  !   VEL_Z = 0
  !   NODE_MASS = 0
  counter = 0 !The variable count is initialized to 0

  ! Defining the z-boundary
    Y_LIMIT=0


  ! Initialization of arrays
  ! This set of loops generates a variable array IJK which defines each IJK index in each part
    DO NS=1,NUMSUB
    NSUB=NS
    CALL GETSUB
        DO I=1,IMAX
            DO J=1,JMAX
                    IJK=IJSET(I,J)                      
            END DO
        END DO
    END DO


  
  ! Determining the fragment variables
    DO NS = 1, NUMSUB ! From NS = 1 to the Number of Parts in problem.
    NSUB = NS
    CALL GETSUB
    CALL GETMAT
        DO I = 1,IMAX
            DO J = 1,JMAX
                    IJK=IJSET(I,J)
                    SIM_TIME=0
                    IF ((YN(IJK).LE.Y_LIMIT).AND.(SIM_TIME==0)) THEN 
                            counter=counter+1 
                            SIM_TIME=TIME !TIME is an already defined variable - CURRENT TIME
      ! Fragment    Index   X_POS   Y_POS   Time    X_VEL   Y_VEL   
                            write(99,'(I15)',advance='no')counter
                            write(99,'(I15)',advance='no')IJK
                            write(99,'(F15.5)',advance='no')XN(IJK)
                            write(99,'(F15.5)',advance='no')YN(IJK)
                            write(99,'(F15.5)',advance='no')TIME
                            write(99,'(F15.5)',advance='no')UXN(IJK)
                            write(99,'(F15.5)',advance='no')UYN(IJK)
                    END IF
                END DO
            END DO
        END DO

  
  CLOSE(99)

  RETURN

  END SUBROUTINE EXEDIT

我建议你查一查或者用谷歌搜索advance='no'的功能,然后将第二组写入内容与第一组写入内容进行比较。谢谢Ian,我不得不将最后一行写入内容改为:write(99),(F15.5)',advance='yes')UYN(IJK)