主题:请教:如何把下面这个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
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