24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1327  |  回复: 5

lijunjiexm

铁虫 (小有名气)

[求助] 求助一个简单程序的错误(2),谢谢

编译如下程序,在22行处CHARACTER*(*) STR
出错:

    PROGRAM MOVIE1

C *** Program to draw velocity profiles.
C
      IMPLICIT     REAL*4(A-H,O-Z)
      PARAMETER   (NUMEL = 1920, NUMNP = 2047,NDMB = 1000,NTIME1 = 140)
      REAL*8       QUADX (4,NUMEL), QUADY (4,NUMEL)
      REAL*8       QUADVX(4,NUMEL), QUADVY(4,NUMEL)
      INTEGER*4    BLACK(3)
      INTEGER*4    GREEN(3),RED(3),BLUE(3),WHITE(3),YELLOW(3)
      INTEGER*4    PALEGREEN(3), GREY(3)
      REAL*4       COORD(2), X1, X2, Y1, Y2, PARRAY(2,4)
      REAL*4       VARRAY(2,22)
      INTEGER*4    STATUS1, WINOPE, IDUM, NPOINT, LENGTH
      INTEGER*4    HORPROP, VERPROP
      REAL*4       X(NDMB,NTIME1), Y(NDMB,NTIME1)
      REAL*4       VX(NUMNP, NTIME1), VY(NUMNP, NTIME1)
      REAL*4       XNODE(NUMNP), YNODE(NUMNP)
      CHARACTER*13 MESSAGE1, LINE
      CHARACTER*50 MESSAGE2,MESSAGE3,MESSAGE4,MESSAGE5
      CHARACTER*80 DUM
      CHARACTER*(*) STR
      LOGICAL*1    GRID, VEL
C
C *** Prepare for the graphics:
C
      DATA (BLACK(I),       I=1,3)  /0,0,0/
      DATA (RED(I),         I=1,3)  /256,20,20/
      DATA (GREEN(I),       I=1,3)  /50,256,50/
      DATA (PALEGREEN(I),   I=1,3)  /10,86,10/
      DATA (BLUE(I),        I=1,3)  /100,100,256/
      DATA (WHITE(I),       I=1,3)  /256,256,256/
      DATA (YELLOW(I),      I=1,3)  /256,256,0/
C
      OPEN (7 , FILE = '../eval/ns2dev.msh')
      OPEN (8 , FILE = '../eval/ns2dev.trc')
      OPEN (10, FILE = '../eval/ns2dev.ve2')
      OPEN (11, FILE = '../mesh/mesh.dat')
C
C *** WINDOW
C
C       XMIN =     0.17
      XMIN =   0.0
C       XMAX =    0.19
      XMAX =    0.36
      YMIN =    -0.03
      YMAX =    0.03
C       YMAX =    0.02
      HORPROP = INT(1000. * XMAX) - INT(1000. * XMIN)
      VERPROP = INT(1000. * YMAX) - INT(1000. * YMIN)
      CALL KEEPAS ( ABS(HORPROP),  ABS(VERPROP))
      CALL KEEPAS (1,1)
      CALL PREFSI(1200, 200)
      MESSAGE1 = 'movie1'
      STATUS1 = WINOPE(MESSAGE1,6)
C
      CALL ORTHO2 (XMIN, XMAX, YMIN, YMAX)
      CALL LINEWI (1)
      CALL RGBMOD
      CALL DOUBLE
      CALL LSETDE (0,19)
      CALL GCONFI
      CALL C3I (BLACK)
      CALL CLEAR
      CALL ZBUFFE (.TRUE.)
      CALL ZCLEAR
      CALL SWAPBU
      CALL SLEEP(1)
      CALL ZBUFFE (.TRUE.)
      CALL ZCLEAR
c
c read mesh
c
      DO I = 1, NUMEL
        READ(7,*) IDUM, (QUADX(II,I),II=1,4),  (QUADY(II,I),II=1,4)
      ENDDO
c
c read tracer particles
c
      DO I = 1 , NTIME1
        READ(8,*) IDUM, TIME
        DO II=1, NDMB
          READ(8, *, END = 300) X(II , I), Y(II , I)
        ENDDO
      ENDDO
c
c read velocity field
c
      READ(10,*,END=300) IDUM, DUM1
      DO I = 1 , NTIME1
        READ(10,*,END=300) IDUM, DUM1
        DO II = 1, NUMNP
          READ(10,*,END=300) IDUM, VX(II , I), VY(II , I)
        ENDDO
      ENDDO
c
c read nodes (mesh again)
c
      READ(11,*,END=300) IDUM, DUM1
      DO I = 1 , NUMNP
        READ(11, *, END = 300) IDUM, XNODE(I), YNODE(I)
      ENDDO
C
C loop
C
      DO IBIGLOOP = 1 , 1000
      DO ITIME = 1 , NTIME1
        CALL C3I (BLACK)
        CALL CLEAR
        IF (ITIME .EQ. 1) THEN
          DO II = 1 , 1000
            DUMMY = II ** 0.2342
          ENDDO
        ENDIF
C
C *** Grid
C
        GRID = .FALSE.
        IF (GRID) THEN
          CALL LINEWI (1)
          CALL C3I (BLUE)
          DO II = 1 , NUMEL
            CALL BGNLIN
            DO III = 1 , 4
              COORD(1) = QUADX(III, II)
              COORD(2) = QUADY(III, II)
              PARRAY(1 , III) = QUADX(III, II)
              CALL V2F(COORD)
            ENDDO
            CALL ENDLIN
          ENDDO
          CALL C3I (RED)
          CALL LINEWI (1)
        ENDIF
C
C *** Velocity field
C
        VEL = .FALSE.
        IF (VEL) THEN
          DO I = 1 , NUMNP
            CALL C3I (GREEN)
            X1 = XNODE(I)
            Y1 = YNODE(I)
            X2 = XNODE(I) + VX(I,ITIME) * 1
            Y2 = YNODE(I) + VY(I,ITIME) * 1
            CALL MOVE2 (X1,Y1)
            CALL DRAW2 (X2,Y2)         
            CALL C3I (RED)
            CALL DRAW2 (X2,Y2)
          ENDDO
        ENDIF
c
c *** x-axis
c
C        CALL C3I (RED)
C        CALL LINEWI (1)
C        X1 = -11.
C        Y1 =  0.
C        X2 =  11.
C        Y2 =  0.
C        CALL MOVE2 (X1,Y1)
C        CALL DRAW2 (X2,Y2)
C
c *** y-axis
c
        X1 =  0.
        Y1 = -11
        X2 =  0.
        Y2 =  11
        CALL MOVE2 (X1,Y1)
        CALL DRAW2 (X2,Y2)
C        DO I = 1 , 1000
C          DUMMY = I ** 3.3
C        ENDDO
C
C *** Dumbbells
C
        DO I = 1 , 1
          CALL LINEWI (1)
          CALL C3I (YELLOW)
          CALL BGNPOI
          DO II = 1, NDMB
            COORD(1) = X(II, ITIME)
            COORD(2) = Y(II, ITIME)
            CALL V2F(COORD)
            COORD(2) = - Y(II, ITIME)
            CALL V2F(COORD)
          ENDDO
          CALL ENDPOI
C          CALL C3I (RED)
C          COORD(1) = X(346, ITIME)
C          COORD(2) = Y(346, ITIME)
C          CALL CIRCF(COORD(1), COORD(2), 0.0001)
C          CALL C3I (GREEN)
C          COORD(1) = X(1116, ITIME)
C          COORD(2) = Y(1116, ITIME)
C          CALL CIRCF(COORD(1), COORD(2), 0.0001)
C          CALL C3I (BLUE)
C          COORD(1) = X(319, ITIME)
C          COORD(2) = Y(319, ITIME)
C          CALL CIRCF(COORD(1), COORD(2), 0.0001)
        ENDDO
C         READ(5,*) LINE
        CALL SWAPBU
      ENDDO
      ENDDO
300  STOP
      END
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijunjiexm

铁虫 (小有名气)


dubo(金币+1): 欢迎常来程序语言版讨论 2011-07-31 13:28:39
编译错误信息如下(请帮忙指点,谢谢):
--------------------Configuration: sucontr - Win32 Debug--------------------
Compiling Fortran...
G:\Program Files\sucontr\eval\movie1.f
G:\Program Files\sucontr\eval\movie1.f(22) : Error: This passed length character name has been used in an invalid context.   [STR]
      CHARACTER*(*) STR
--------------------^
Error executing df.exe.

movie1.obj - 1 error(s), 0 warning(s)
2楼2011-07-18 01:19:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖


jjdg(金币+1): 感谢参与 2011-07-18 14:48:49
CHARACTER*(*) STR

这个只能用在子程的参数中,也就是说 STR 只能是 dummy argument

gfortran 给出的提示信息可能更清楚一些:
引用回帖:
      CHARACTER*(*) STR                                                
                      1
Error: Entity with assumed character length at (1) must be a dummy argument or a PARAMETER

3楼2011-07-18 08:30:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijunjiexm

铁虫 (小有名气)

那应该如何呢?把它删了??
4楼2011-07-18 08:56:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zsq510

银虫 (小有名气)


dubo(金币+1): 欢迎常来程序语言版讨论 2011-07-31 13:28:48
祝福一下
5楼2011-07-18 09:17:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖


lijunjiexm(金币+10): 谢谢,应该是删了就可以,不影响,我就是觉得f77程序,在VF调用时经常出现原来没问题的隐式申明,但在VF中就出问题了,是这样吗? 2011-07-18 09:54:06
jjdg(金币+1): 感谢参与 2011-07-18 14:49:03
引用回帖:
Originally posted by lijunjiexm at 2011-07-18 08:56:41:
那应该如何呢?把它删了??

好像在程序中也没有用到,就删了好了……
如果用到了,就直接给个特定的长度,如 character*80 str 也可以……
6楼2011-07-18 09:21:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 lijunjiexm 的主题更新
信息提示
请填处理意见