Fortran输出文件以列而不是行的形式写入数据
我正在尝试将数据输出到文件。当我运行Fortran代码时,数据如下图所示 数据似乎正在跨行写入。我希望它在我提供的标题下的列中写入,这些标题是片段编号、索引、X_POS、Y_POS、时间、X_级别和Y_级别 任何帮助都将不胜感激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
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)