回 帖 发 新 帖 刷新版面

主题:请教:如何把下面这个fortran77的小程序转换成fortran90的?

以下是两个子程序,小弟对fortran77不熟,主要是goto和continue语句不熟,我只能看懂fortran90的,希望路过的大侠能帮忙转换一下
C
      SUBROUTINE UPSD(PSD,PSDR,PSDI,FREQ,KSTEP)
C
      INCLUDE 'ABA_PARAM.INC'
C
      CHARACTER*8  PSDT(21)
      CHARACTER*80 PSD
C
      DATA PSDT/'PSD1    ','PSD2    ','PSD3    ','PSD4    ',
     1          'PSD5    ','PSD6    ','PSD7    ','PSD8    ',
     2          'PSD9    ','PSD10   ','PSD11   ','PSD12   ',
     3          'PSD13   ','PSD14   ','PSD15   ','PSD16   ',
     4          'PSD17   ','PSD18   ','PSD19   ','PSD20   ',
     5          'PSD21   '/
C
      PI=3.141592654
      CONV=2.*PI
      DO 10 K1=1,21
      K2=K1
      IF(PSD(1:8).EQ.PSDT(K1)) GO TO 11
   10 CONTINUE
   11 CONTINUE
      TK=DBLE(K2-1)/24.
      PSDR=CONV*COS(FREQ*TK)
      PSDI=-CONV*SIN(FREQ*TK)
      RETURN
      END
      SUBROUTINE UCORR(PSD,CORRR,CORRI,KSTEP,LCASE,JNOD1,JDOF1,
     1                 JNOD2,JDOF2,COOR1,COOR2)
C
      INCLUDE 'ABA_PARAM.INC'
C
      DIMENSION COOR1(3),COOR2(3)
      CHARACTER*8  PSDT(21)
      CHARACTER*80 PSD
C
      DATA PSDT/'PSD1    ','PSD2    ','PSD3    ','PSD4    ',
     1          'PSD5    ','PSD6    ','PSD7    ','PSD8    ',
     2          'PSD9    ','PSD10   ','PSD11   ','PSD12   ',
     3          'PSD13   ','PSD14   ','PSD15   ','PSD16   ',
     4          'PSD17   ','PSD18   ','PSD19   ','PSD20   ',
     5          'PSD21   '/
C
      CORRR=0.
      CORRI=0.
      IF(JDOF1.NE.2) GO TO 900
      IF(JDOF2.NE.2) GO TO 900
      IF(JNOD1.EQ.JNOD2) GO TO 900
      DO 10 K1=1,21
      K2=K1
      IF(PSD(1:8).EQ.PSDT(K1)) GO TO 11
   10 CONTINUE
   11 CONTINUE
      TK=DBLE(K2-1)/4.
      DIST=0.0
      DO 20 K1=1,3
      DIST=DIST+(COOR1(K1)-COOR2(K1))**2
 20   CONTINUE
      DIST=SQRT(DIST)
      IF(ABS(TK-DIST).LT.0.01) CORRR=1.
 900  CONTINUE
      RETURN
      END

回复列表 (共2个回复)

沙发

1、把行首的C都改为!
2、
      DO 10 K1=1,21
      K2=K1
      IF(PSD(1:8).EQ.PSDT(K1)) GO TO 11
   10 CONTINUE
   11 CONTINUE
改为:
      DO K1=1,21
        K2=K1
        IF(PSD(1:8).EQ.PSDT(K1))Exit
      End Do
3、
      IF(JDOF1.NE.2) GO TO 900
      IF(JDOF2.NE.2) GO TO 900
      IF(JNOD1.EQ.JNOD2) GO TO 900
      DO 10 K1=1,21
      K2=K1
      IF(PSD(1:8).EQ.PSDT(K1)) GO TO 11
   10 CONTINUE
   11 CONTINUE
改为:
      IF(JDOF1.NE.2) Return
      IF(JDOF2.NE.2) Return
      IF(JNOD1.EQ.JNOD2) Return
      DO K1=1,21
        K2=K1
        IF(PSD(1:8).EQ.PSDT(K1)) Exit
      End Do
4、
      DO 20 K1=1,3
      DIST=DIST+(COOR1(K1)-COOR2(K1))**2
 20   CONTINUE
改为:
      DO K1=1,3
        DIST=DIST+(COOR1(K1)-COOR2(K1))**2
      End Do
5、
删除:
 900  CONTINUE
      RETURN

板凳

多谢cgl_lgs大侠

我来回复

您尚未登录,请登录后再回复。点此登录或注册