24小时热门版块排行榜    

查看: 1104  |  回复: 4

lijunjiexm

铁虫 (小有名气)

[求助] 求助一个编译出错的简单程序,请多多指教,谢谢

在建立的一个project的Source files的其中命名为STRESSAVG的f文件如下:
C
C**********************************************************************
C**********************************************************************
C**********************************************************************
C
      SUBROUTINE STRESSAVG(NUMEL, STORE, I1, I2, STR, NKT,
     >                     ORDWHERE, FIRST, LAST,
     >                     COUNTPLUS, COUNTMINS, COUNTFLAG)
      IMPLICIT   NONE
      INCLUDE   'PARAMETERS.INC'
      INCLUDE   'NUMBERS.INC'
      INTEGER*4  ORDWHERE(NDMB)
      INTEGER*4  I
      INTEGER*4  FIRST (NUMEL + 1), LAST (NUMEL + 1)
      REAL*8     STORE (NDMB)
      REAL*8     SUM1, SUM2, NKT
      REAL*8     STR(2, 3, NUMEL)
      INTEGER*4  II, J, I1, I2, INDEX, NUMEL
      INTEGER*4  COUNTPLUS(NUMEL), COUNTMINS(NUMEL)
      LOGICAL*1  COUNTFLAG
C
C----------------------------------------------------------------------
C       STR (i , j , k)
C
C            ^   ^   ^
C            |   |   |_________ element number
C            |   |_____________ components in order xx, yx, yy
C            |_________________ triangle number (1 or 2)
C
C----------------------------------------------------------------------
C
      IF (COUNTFLAG) THEN
        DO I = 1 , NUMEL
          COUNTPLUS(I) = 0
          COUNTMINS(I) = 0
        ENDDO
      ENDIF
      IF     ((I1 .EQ. 1) .AND. (I2 .EQ. 1)) THEN
        INDEX = 1
      ELSEIF ((I1 .EQ. 1) .AND. (I2 .EQ. 2)) THEN
        INDEX = 2
      ELSEIF ((I1 .EQ. 2) .AND. (I2 .EQ. 2)) THEN
        INDEX = 3
      ELSE
        PRINT *,'Wrong indices for stress tensor'
      ENDIF
      DO J = 1 , NUMEL
        SUM1 = ZERO
        SUM2 = ZERO
*vdir nodep
CDIR$ IVDEP
        DO II = FIRST(J) , LAST(J)
          I = ORDWHERE(II)
          IF (I .GT. 0) THEN
            SUM1 = SUM1 + STORE(I)
            IF (COUNTFLAG) THEN
              COUNTPLUS(J) = COUNTPLUS(J) + 1
            ENDIF
          ELSE
            SUM2 = SUM2 + STORE(-I)
            IF (COUNTFLAG) THEN
              COUNTMINS(J) = COUNTMINS(J) + 1
            ENDIF
          ENDIF
        ENDDO
        STR(1 , INDEX , J) = SUM1
        STR(2 , INDEX , J) = SUM2
      ENDDO
      DO J = 1 , NUMEL
        STR(1 , INDEX , J) =  STR(1 , INDEX , J) * NKT /
     >                        MAX(1 , COUNTPLUS(J))
        STR(2 , INDEX , J) =  STR(2 , INDEX , J) * NKT /
     >                        MAX(1 , COUNTMINS(J))
      ENDDO
      IF ((INDEX .EQ. 1) .OR. (INDEX .EQ. 3)) THEN
        DO J = 1 , NUMEL
            STR(1 , INDEX , J) = STR(1 , INDEX , J) - NKT
            STR(2 , INDEX , J) = STR(2 , INDEX , J) - NKT
        ENDDO        
      ENDIF
      RETURN
      END


而PARAMETERS.INC和NUMBERS.INC同时保存在同一个project下的Extenal Dependenciec文件夹中:

PARAMETERS.INC文件为:

      INTEGER*4   NSD,    NEN,    NDOF
      INTEGER*4   NNPMAX, NELMAX, NEQMAX
      INTEGER*4   NSBDIV, NBWMAX
      INTEGER*4   NBUF  , MAXTRACE
      INTEGER*4   NDMB
C
      PARAMETER ( NSD      =                   2,
     >            NEN      =                   4,
     >            NDOF     =                   2,
     >            NNPMAX   =                3000,
     >            NEQMAX   =       NDOF * NNPMAX,
     >            NSBDIV   =                 110,
     >            NBWMAX   =       NDOF * NSBDIV,
     >            NDMB     =              524288,
C     >            NDMB     =               65536,
C    >            NDMB     =                2048,
     >            NBUF     =                1024,
     >            NELMAX   =                3000,
     >            MAXTRACE =               10000 )


NUMBERS.INC 文件为:

      REAL*8     ZERO, ONE, TWO, THREE, FOUR, FIVE, SIX,
     >           HALF, THIRD, SIXTH,
     >           FOURTH, TWSVTH, NINTH, TWFOUR,
     >           PI, TWOPI, FTPI,
     >           RSMALL
      PARAMETER (ZERO   = 0.0                              ,
     >           ONE    = 1.0                              ,
     >           TWO    = 2.0                              ,
     >           THREE  = 3.0                              ,
     >           FOUR   = 4.0                              ,
     >           FIVE   = 5.0                              ,
     >           SIX    = 6.0                              ,
     >           HALF   = 1.0 /  2.0                       ,
     >           THIRD  = 1.0 /  3.0                       ,
     >           SIXTH  = 1.0 /  6.0                       ,
     >           FOURTH = 1.0 /  4.0                       ,
     >           TWSVTH = 1.0 / 27.0                       ,
     >           NINTH  = 1.0 /  9.0                       ,
     >           TWFOUR = 24.                              ,
     >           PI     =      3.14159265358979323846      ,
     >           TWOPI  = 2. * 3.14159265358979323846      ,
     >           FTPI   = 4. * 3.14159265358979323846 / 3. ,
     >           RSMALL = 1.0E-30                     )
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijunjiexm

铁虫 (小有名气)


dubo(金币+1): 欢迎常来程序语言版讨论 2011-07-31 13:31:08
在windows下Compaq Visual Fotran编译出现如下错误信息(请多多指教,谢谢):

-------------------Configuration: sucontr - Win32 Debug--------------------
Compiling Fortran...
G:\Program Files\sucontr\src\stressavg.f
G:\Program Files\sucontr\src\stressavg.f(14) : Error: This name does not have a type, and must have an explicit type.   [NUMEL]
      INTEGER*4  FIRST (NUMEL + 1), LAST (NUMEL + 1)
------------------------^
G:\Program Files\sucontr\src\stressavg.f(14) : Error: A specification expression is invalid.   [NUMEL]
      INTEGER*4  FIRST (NUMEL + 1), LAST (NUMEL + 1)
------------------------^
G:\Program Files\sucontr\src\stressavg.f(14) : Error: A specification expression is invalid.   [NUMEL]
      INTEGER*4  FIRST (NUMEL + 1), LAST (NUMEL + 1)
------------------------------------------^
G:\Program Files\sucontr\src\stressavg.f(17) : Error: A specification expression is invalid.   [NUMEL]
      REAL*8     STR(2, 3, NUMEL)
---------------------------^
Error executing df.exe.

stressavg.obj - 4 error(s), 0 warning(s)
2楼2011-07-17 21:58:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖


jjdg(金币+1): 感谢应助 2011-07-17 22:18:08
lijunjiexm(金币+2): 改了,还是不行。。 2011-07-17 23:14:39
你在INCLUDE   'NUMBERS.INC'后加一句:
INTEGER*4 NUMEL
应该就可以了……
3楼2011-07-17 22:12:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖


jjdg(金币+1): 感谢参与 2011-07-18 14:51:34
看出错信息:
G:\Program Files\sucontr\src\stressavg.f(14) : Error: This name does not have a type, and must have an explicit type.   [NUMEL]

说的就是我前面给出的那个解决方案。

不过,我刚才用gfortran试了一下,即使不加前面的那一句话,都可以顺利编译啊……
4楼2011-07-17 23:32:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

★ ★
jjdg(金币+2): 感谢参与 2011-07-18 14:51:45
lijunjiexm(金币+28): Thanks.希望以后还可以向您讨教Fortran的问题。 2011-07-19 08:15:56
哦,看到问题了,你在第 19 行声名了 NUMEL,但你在第 14 行用了 NUMEL

所以,你删掉 19 行中的 NUMEL,然后按我第一帖中的方法再试一下……
5楼2011-07-17 23:35:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 lijunjiexm 的主题更新
信息提示
请填处理意见