回 帖 发 新 帖 刷新版面

主题:一小段程序,有个别地方不太懂,求教

C SOLUTION OF TERMINAL IMPEDANCE IN SIMPLE SYSTEM INCLUDING FRICTION
C LL=PIPE LENGTH,C=CAPACITANCE,L=INERTANCE 
      IMPLICIT REAL(L),COMPLEX(Z)
      NAMELIST/DIN/LL,D,A,F,Q,G,AR,R,L,C,OM1,OM2,DOM
  10  READ(5,DIN,END=99)
      AR=0.7854*D*D
      R=F*Q/(G*D*AR*AR)
      L=1.0/(G*AR)
      C=G*AR/(A*A)
      WRITE(6,1) LL,D,A,F,Q,G,AR,R,L,C,OM1,OM2,DOM
   1  FORMAT(1H0,'LL,D,A,F,Q =',3F8.2,2F8.4/' G,AR,R,L,C =',4F8.4,
     2E10.3/' OM1,OM2,DOM=',3F8.3)
      WRITE(6.2)
   2  FORMAT(1H0,6X,'OM',9X,'T',6X,'ABSZD',6X,'ZDF',7X,'ZDI',7X,'PHIZ')
      N=(OM2-OM1)/DOM+1
      DO 20 I=1,N
      OM=OM1+(I-1)*DOM
C CHARACTERISTIC IMPEDANCE, GAMMA, AND HYPERBOLIC FJNCTIONS
      ZGAM=CSQRT(CMPLX(-L*C*OM*OM,R*C*OM))
      ZC=ZGAM/CMPLX(0.0,OM*C)
      ZEXP=CEXP(ZGAM*LL)
      ZTH=(ZEXP-1.0/ZEXP)/(ZEXP+1.0/ZEXP)
C HYDRAULIC IMPEDANCE 
      ZD=-ZC*ZTH
      ABSZD=CABS(ZD)
      PHIZ=ATAN2(AIMAG(ZD),REAL(ZD))
      T=6.2832/OM
  20  WRITE(6,3) OM,T,ABSZD,ZD,PHIZ
   3  FORMAT(1H,2F10.3,3F10.1,F10.3)
      GO TO 10
  99  STOP
      END
εDIN G=32.2,Q=0.5,F=0.02,LL=3690.0,A=3880.0,D=0.25,OM1=0.4,
OM2=4.0,DOM=0.3, εEND
----------------------------------------------------------------------
以上是书上的一段程序,我有两个地方看不明白,希望大侠们不吝赐教。
大家姑且不用管它计算什么,只要帮我解释下它在程序中的作用即可。
1.    NAMELIST/DIN/LL,D,A,F,Q,G,AR,R,L,C,OM1,OM2,DOM
  10  READ(5,DIN,END=99)
      READ后括号中的各项含义是什么?
2.    GO TO 10
      GO TO 10起什么作用呢?循环完毕,为什么要返回行号为10的代码?
3.εDIN G=32.2,Q=0.5,F=0.02,LL=3690.0,A=3880.0,D=0.25,OM1=0.4,
OM2=4.0,DOM=0.3, εEND
      DIN和END前的那个符号怎么输入?我输的希腊字符,编译后是错误的。
-----------------------------------------------------------------------
我是FORTRAN的初学者,刚开始学有好多不懂的,希望大家能帮帮我。感激不尽。

回复列表 (共5个回复)

沙发


都是基础问题,找本书看看吧

板凳

书本都看了  要是书本上有就不在论坛上求教了

3 楼

您看的是什么书啊,用这么古董的格式和语法?
建议至少还是应看F90/F95的彭书:)

4 楼

1. NAMELIST 彭书不知道有没有, 如果没可以参考比较新的资料. 他是声明了一个东西包含一串各式各样的变量. 而这个东西本身不是变量而是一个类似"代号"的东西. 配合下面的(READ(5,DIN,END=99)这里的DIN就是一个namelist), 就可以从文件里面读取相应DIN代号里面所包含的变量信息. END=99 就是中断或者结束的时候跳去99, 一些资料建议不要这样使用, 个人也不喜欢这种跳转, 觉得比较破坏程序的结构.

2. 这里goto 10就相当于一个
  DO
    ....
  ENDDO
循环. 这个代码跳到READ(5,DIN,END=99), 而文件5会在之前读取的位置往下继续找DIN, 会发现找不到就会END=99. (个人感觉, 这段的goto实现方式非常不好!! 不过我确实没有试过在一个文件下同时出现两个或者多个namelist会怎样, 标准里面没有说这个事情, 似乎确实是一个可以利用的特性.)

3. 最后那两行应该出现在5号通道所对应的文件中, 而不应该出现在代码中. 在文件中应该是这么写
&DIN
G=32.2,Q=0.5,F=0.02,LL=3690.0,A=3880.0,D=0.25,OM1=0.4
OM2=4.0,DOM=0.3
/
以上4行都是, 详细请查资料.

5 楼

就应该在置顶帖写个FAQ, 让初学者优先学习彭书, 无论是学f90/95还是老代码f77的. 其他一些编程技巧的书先一边放. 有了免疫力再看老技巧的书也不会迷惑.

我来回复

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