Fortran Coder

标题: 各位高人请看这个程序是怎么执行的 [打印本页]

作者: gengyan123456    时间: 2014-7-17 18:30
标题: 各位高人请看这个程序是怎么执行的
[Fortran] 纯文本查看 复制代码


SUBROUTINE REMA(IJ,IK,II,NREF)
      implicit real*8 (a-h,o-z)
      COMMON NG,NM,NM1,NNG,NN,NMS,BA,BB,NSVC,NMG,NTCSC,NMGS
      COMMON/COMC/NGIN(165),NGOUT(165),NMIN(420),NMOUT(420),NMM(420,3)
      COMMON/COMD/BK(420),BK1(165),BK2(165),TA(165),TB(165),NPSS(10,10)
      LPSS=1
      LL=1
1    read(2,*) N1,N2,CA,TRA,CB,TRB
      IF(N1.LT.0) THEN
   LL=LL+1
   IF(LL.LE.II) GOTO 1
   NPSS(IJ,LPSS)=-1
   RETURN
      ENDIF
      IF(TRA.EQ.0.0.and.TRB.EQ.0.0) GOTO 3
      NG=NG+1
      WRITE(3,605) NG,'G',N1+IK,N2+IK,CA,TRA,CB,TRB
605  FORMAT(I3,7X,A1,2I5,4F15.5)
      TB(NG)=TRB
      TRB=1.0/TRB
      bk1(NG)=CA*TRB
      bk2(NG)=CB*TRB
      TA(NG)=TRA*TRB
      NGIN(NG)=N1+IK
      NGOUT(NG)=N2+IK
      GOTO 1
3    NM=NM+1
      WRITE(3,606) NM,'M',N1+IK,N2+IK,CA,TRA,CB,TRB
606  FORMAT(I6,4X,A1,2I5,4F15.5)
      bk(NM)=CA
      NMIN(NM)=N1+IK
      NMOUT(NM)=N2+IK
      NMM(NM,3)=0
      IF(N1.EQ.17.AND.IJ.EQ.NREF) THEN
NM=NM-1
GOTO 1
      ENDIF
      IF(LL.EQ.II) THEN
NPSS(IJ,LPSS)=NM
LPSS=LPSS+1
      ENDIF
      GOTO 1
      END

其中文件2为:
0.0025 1.8 1.7 0.3 0.55 0.25 0.25 8.0 0.4 0.03 0.05 6.5
  0.0  12.0
  8   9   -1.000    0.000    1.000    0.010
  9   7  200.000    0.000    0.000    0.000
-1 0 0 0 0 0
  5  31    10.50     0.00    1.000    0.00
31  32    0.000    10.00    1.000    10.00
32   9    1.000    0.237    1.000    0.176
-1 0 0 0 0 0
-1 0 0 0 0 0
0.0025 1.8 1.7 0.3 0.55 0.25 0.25 8.0 0.4 0.03 0.05 6.5
  0.0  12.0
  8   9   -1.000    0.000    1.000    0.010
  9   7  200.000    0.000    0.000    0.000
-1 0 0 0 0 0
  5  31     4.00     0.00    1.000    0.00
31  32    0.000    10.00    1.000    10.00
32   9    1.000    0.285    1.000    0.17
-1 0 0 0 0 0
-1 0 0 0 0 0
0.0025 1.8 1.7 0.3 0.55 0.25 0.25 8.0 0.4 0.03 0.05 6.175
  0.0  12.0
  8   9   -1.000    0.000    1.000    0.010
  9   7  200.000    0.000    0.000    0.000
-1 0 0 0 0 0
-1 0 0 0 0 0
  5  31     8.00     0.00    1.000    0.00
31  32    0.000    10.00    1.000    10.00
32   9    1.000    0.180    1.000    0.166
-1 0 0 0 0 0
0.0025 1.8 1.7 0.3 0.55 0.25 0.25 8.0 0.4 0.03 0.05 6.175
  0.0  12.0
  8   9   -1.000    0.000    1.000    0.010
  9   7  200.000    0.000    0.000    0.000
-1 0 0 0 0 0
-1 0 0 0 0 0
  5  31     8.00     0.00    1.000    0.00
31  32    0.000    10.00    1.000    10.00
32   9    1.000    0.192    1.000    0.165
-1 0 0 0 0 0
32

作者: jfnano    时间: 2014-7-19 09:50
这种还不如直接重写,
作者: gengyan123456    时间: 2014-7-19 10:40
jfnano 发表于 2014-7-19 09:50
这种还不如直接重写,

说的容易,要不你帮我写下?上边那个我自己解决了,你如果会写的话,帮我重新写下这个?不用goto语句,不胜感激
[Fortran] 纯文本查看 复制代码
10    CONTINUE
      IF(KX.GT.KSX.AND.KY.GT.KSY) GOTO 70
      IF(KX.LE.KSX) THEN
        KXI=X(KX,2)
        KXJ=X(KX,3)
      ENDIF
      IF(KY.LE.KSY) THEN
        KYI=Y(KY,2)
        KYJ=Y(KY,3)
      ENDIF
      KSZ=KSZ+1
          IF(KSZ.EQ.M5) THEN
            WRITE(*,*) ' KSZ=M5=',M5,KSX,KSY,' Increase M5(in plus)!'
            STOP
          ENDIF
      IF(KX.GT.KSX) GOTO 40
      IF(KY.GT.KSY) GOTO 20
      IF(KXI.EQ.KYI.AND.KXJ.EQ.KYJ) GOTO 30
      IF(KYI.LT.KXI.OR.(KYI.EQ.KXI.AND.KYJ.LT.KXJ)) GOTO 40

20        Z(KSZ,1)=X(KX,1)
50        Z(KSZ,2)=X(KX,2)
        Z(KSZ,3)=X(KX,3)
        KX=KX+1
        GOTO 10

30        Z(KSZ,1)=X(KX,1)+Y(KY,1)
        KY=KY+1
        GOTO 50

40        Z(KSZ,1)=Y(KY,1)
        Z(KSZ,2)=Y(KY,2)
        Z(KSZ,3)=Y(KY,3)
        KY=KY+1
        GOTO 10
70    CONTINUE


作者: jfnano    时间: 2014-7-19 10:44
[Fortran] 纯文本查看 复制代码
      IF(KY.LE.KSY) THEN
        KYI=Y(KY,2)
        KYJ=Y(KY,3)
      ENDIF

这样发更好看

作者: fcode    时间: 2014-7-19 11:16
我帮楼主改了,嘿嘿。

话说,修改老代码是个费劲的活儿,唉......
作者: 岸边的鱼    时间: 2014-7-19 12:34
fcode 发表于 2014-7-19 11:16
我帮楼主改了,嘿嘿。

话说,修改老代码是个费劲的活儿,唉......

你就是太好了,我看着论坛里面这一板块都快被楼主刷屏了,什么问题都问,感觉楼主就是自己不动脑子的那一类,感觉问的问题都是写思路简单,改写繁琐的活,技术含量并不是很高。老大,应该狠心叫楼主自己锻炼下的。
作者: gengyan123456    时间: 2014-7-19 13:56
岸边的鱼 发表于 2014-7-19 12:34
你就是太好了,我看着论坛里面这一板块都快被楼主刷屏了,什么问题都问,感觉楼主就是自己不动脑子的那一 ...

关键是我不会啊!不会还不能问,要啥技术含量啊?这改写繁琐的不需要技术啊?
作者: gengyan123456    时间: 2014-7-19 14:36
fcode 发表于 2014-7-19 11:16
我帮楼主改了,嘿嘿。

话说,修改老代码是个费劲的活儿,唉......

这个不用goto只用IF和DO的话重新用FORTRAN编确实很繁琐,我只是想改成MATLAB,自己已经解决了




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