Fortran Coder

标题: 程序运行时出现 run-time error F6501错误 [打印本页]

作者: 木头    时间: 2017-2-16 15:10
标题: 程序运行时出现 run-time error F6501错误
[Fortran] 纯文本查看 复制代码
C----------------------------------------------------------------------
C     形成单元节点的岩土强度指标FA(I),C(I),单元联系数据,输入节点应力(平面问题)
        IMPLICIT REAL*8 (A-H,O-Z)
      COMMON FA(10000),C(10000),NUMNP,NENM,NUM
        DIMENSION NODMJ(8,10000),NENMJ(16,10000),FAM(100),CM(100)
      DIMENSION STRESS(4),NSTR(10000),NPAR(20,50)
        CHARACTER*30 INFNAME
C******************************************************************
        INFNAME='STRESS-CHANGE-4.OUT'
C******************************************************************
        DO I=1,30
           IF(INFNAME(I:I).EQ.'.') GOTO 10
        END DO
10    INFNAME(I+1:I+4)='CON '
      OPEN(UNIT=11,FILE=INFNAME)
      INFNAME(I+1:I+4)='NSTR'
      OPEN(UNIT=13,FILE=INFNAME)
C   *********************************************************************
C    单元平均节点应力由有限元输出获得.
C    文件格式:NODE(I),SGXX,SGYY,SGZZ,SGYZ,节点编号应依此增大.

      INFNAME(I+1:I+4)='STR '
      OPEN(23,FILE=INFNAME)
C   *********************************************************************

      INFNAME(I+1:I+4)='ENM '
      OPEN(22,FILE=INFNAME,FORM='UNFORMATTED',ACCESS='DIRECT',RECL=120)

C    输入单元数据,节点数NUMNP,单元组数NUM,单元数NUMN
        READ(11,*) NUMNP,NUM,NENM
        DO I=1,NUM
           READ(11,*) (NPAR(J,I),J=1,10)
           READ(11,*) (NPAR(J,I),J=11,20)
        END DO
C******************************************************************
C    直接输入单元组的岩土强度指标,FAM(I),CM(I).
      FAM(1)=34.0
        CM(1)=35000.0
      FAM(2)=34.0
        CM(2)=35000.0
      FAM(3)=34.0
        CM(3)=35000.0
      FAM(4)=25.0
        CM(4)=25000.0
C******************************************************************

C    形成单元联系单元 NENMJ(8,NUMN),输出到*.NSTR文件中
      IELN=8
        DO I=1,NENM
           READ(22,REC=I) IDEGEN,IELD,ISOCOR,(NODMJ(K,I),K=1,IELN)
        END DO
        CLOSE(22)

        DO I=1,NENM
           DO J=1,16
              NENMJ(J,I)=0
           END DO
           MM=0
           DO J=1,NENM
              IF(J.NE.I) THEN
                      CALL NENMJD2(NODMJ,I,J,MM,NENMJ)
              END IF
           END DO
           WRITE(13,'(16I6)') (NENMJ(K,I),K=1,16)
        END DO

C    形成单元节点应力 STRESSJ(4,NUNMP), 岩土强度指标FA(NUNMP),C(NUNMP),输出到*.NSTR文件中.
        DO I=1,NUMNP
           NSTR(I)=0
           FA(I)=0.0
           C(I)=0
        END DO

        DO I=1,NENM
           NM=0
C     第MM组单元的单元数NPAR(2,MM)
           DO MM=1,NUM
              IF(I.GT.NM.AND.I.LE.NM+NPAR(2,MM)) GOTO 200
                     NM=NM+NPAR(2,MM)
           END DO
C     求单元各节点的岩土强度指标和.
200      DO J=1,8
              IF(NODMJ(J,I).NE.0) THEN
                FA(NODMJ(J,I))=FA(NODMJ(J,I))+FAM(MM)
                C(NODMJ(J,I))=C(NODMJ(J,I))+CM(MM)
                NSTR(NODMJ(J,I))=NSTR(NODMJ(J,I))+1
              END IF
           END DO
        END DO
        ZZ=ATAN(1.0)/45.0
        DO I=1,NUMNP
C     求单元各节点的岩土强度指标平均值.  NSTR(I)为节点I的联系单元数
           FA(I)=FA(I)/NSTR(I)
           C(I)=C(I)/NSTR(I)

           READ(23,*) NODE,(STRESS(J),J=1,4)
C    形成单元节点应力 STRESSJ(4), 岩土强度指标FA(I),C(I),输出到*.NSTR文件中.
           WRITE(13,2000) (-STRESS(J),J=1,4),FA(I)*ZZ,C(I)
        END DO
        CLOSE(23)
        CLOSE(13)

1000  FORMAT(1X,'INPUT FILE NAME :',$)
1001  FORMAT(A12)
2000  FORMAT(6E14.6)
2100  FORMAT(16I5)
        END

C----------------------------------------------------------------------
C   形成单元联系标记NENMJ(20,I), 单元M1和节点号NODMJ(4,M1),联系单元M2和节点号NODMJ(4,M2)
        SUBROUTINE NENMJD2(NODMJ,M1,M2,MM,NENMJ)
        IMPLICIT REAL*8 (A-H,O-Z)
        DIMENSION NENMJ(16,10000),NODMJ(8,10000)
        N=1
        DO I=1,4
           DO J=1,4
                     IF(NODMJ(I,M1).EQ.NODMJ(J,M2)) GOTO 100
               END DO
        END DO
        N=0
100   IF(N.GE.1) THEN
        MM=MM+1        
          NENMJ(MM,M1)=M2
           END IF
        RETURN
        END

QQ图片20170216151117.png (12.72 KB, 下载次数: 373)

QQ图片20170216151117.png

作者: 木头    时间: 2017-2-16 15:11
本人刚刚接触Fortran,导师给了一些编好的程序,让我计算,计算时出现这样的错误,不知道该怎么解决,想请教各位大神一下
作者: fcode    时间: 2017-2-16 15:15
这是读取文件时遇到了文件的结束。例如,代码要求数据有3行数据,而实际输入文件只有2行。在某些时候,甚至输入文件根本不存在或是空白文件。此外,数据文件缺失某些行某些列也是较大的可能。当然,也可能是循环读取文件时没控制住。比如想读100行,结果写错了,读了1000行。有时候,可能是文件路径错误,导致实际读取了另一个空白的文件。或者文件扩展名被隐藏了,比如读取 a.txt,但实际的文件名却是 a.txt.txt
作者: 木头    时间: 2017-2-16 15:22
十分感谢您的热心解答,听明白您的意思,这个文件应该是个空白文件,程序读到这个地方就停止,但还是不知道怎么解决这个问题。
作者: 木头    时间: 2017-2-16 15:25
fcode 发表于 2017-2-16 15:15
这是读取文件时遇到了文件的结束。例如,代码要求数据有3行数据,而实际输入文件只有2行。在某些时候,甚至 ...

在程序的96行时读23号文件时,这个文件是空文件,程序就停止了。但不知道怎么解决这个问题
作者: fcode    时间: 2017-2-16 15:25
读空白文件肯定会有这问题。你需要在这个文件中输入必要的数据,程序依赖它。
巧妇难为无米之炊,没有数据,你叫程序算什么?

作者: 木头    时间: 2017-2-16 15:28
fcode 发表于 2017-2-16 15:25
读空白文件肯定会有这问题。你需要在这个文件中输入必要的数据,程序依赖它。
巧妇难为无米之炊,没有数据 ...

十分感谢,我再检查一下这个程序,还有不懂的到时候再向您请教!




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2