沉积物动力学领域旧Fortran代码语法错误排查咨询
沉积物动力学Fortran代码语法错误梳理
以下是这份1975年文献配套Fortran代码的所有可识别录入/语法错误:
核心语法错误
- 字符/数字录入混淆
- 输入语句
READ (6O,1)中设备号写为字母O,应改为数字0,即READ (60,1) - 输出格式行
I0 FORMAT开头为字母I,应改为数字1,即10 FORMAT - 上述格式行内的
IH0为字母I开头,应改为数字1,即1H0(Fortran77霍勒瑞斯格式固定写法) - 速度单位标注
6HCM/SECl末尾为字母l,属于冗余录入,应改为6HCM/SEC或修正字符数匹配
- 输入语句
- 循环语法错误
- 循环语句
DO 12 K = 1.60是OCR识别错误,把逗号识别为小数点,Fortran DO循环要求明确起止值,应改为DO 12 K = 1,60(循环执行60次)
- 循环语句
- 变量未定义错误
- 稳定性判断行
RATIO = H / DPTH中的DPTH没有定义,结合上下文计算的深度变量为OPTH,应改为RATIO = H / OPTH
- 稳定性判断行
- 标签重复定义错误
- 代码中两次使用标签
15:一处在15 J = 1.20,另一处在末尾15 CONTINUE,属于重复定义,应将前者的标签改为未使用的编号,同时补充循环跳转逻辑
- 代码中两次使用标签
- 冗余逻辑错误
- 判断语句
IF(X.LT.1.0) GO TO 30后紧跟标签30的代码行,该判断无任何实际作用,可直接删除
- 判断语句
补充优化建议
- 建议在程序开头添加
IMPLICIT NONE语句,强制显式声明所有变量,避免隐式类型带来的隐藏错误 - 代码中赋值的
J = 1.20后续从未使用,可直接删除
修正后可运行参考代码
PROGRAM TSHOLD IMPLICIT NONE REAL LI, LO, G, PIE, RHOW, DIAM, RHOS, A, B, PWR, FAC, FAC1, T REAL LD, UM, H, SING, X, ASINH, OPTH, RATIO, STEEP, TEST INTEGER K G = 981.0 PIE = 3.1416 RHOW = 1.00 READ (60,1) DIAM, RHOS 1 FORMAT (2X, F6.3,2X, F5.3) IF(DIAM .LT. 0.05) GO TO 5 A = 0.463 * PIE B = 0.25 GO TO 7 5 A = 0.21 B = 0.50 7 PWR = 1.0 / (2.0 - B) FAC = (A * (RHOS - RHOW) * G/(RHOW * PIE**B))**PWR FAC1 = FAC * DIAM**((1.0 - B) * PWR) T = 1.0 16 CONTINUE LD = 156.13 * (T**2) UM = FAC1 * T**(B*PWR) WRITE(61,9) DIAM, T, UM 9 FORMAT(1H0, 10X, 17HGRAIN DIAMETER = ,F6.3,1X,2HCM // 1 11X, 14HWAVE PERIOD = ,F5.2, 1X, 3HSEC // 2 11X, 22HORBITAL VELOCITY, UM = ,F6.2, 1X, 6HCM/SEC // 3 20X, 6HHEIGHT, 5X, 5HDEPTH, 8X, 3HH/L, 6X, 7HH/DEPTH // 4 22X, 2HCM, 8X, 2HCM /) C INCREMENT WAVE HEIGHT, CALCULATE DEPTH H = 10.0 DO 12 K = 1,60 SING = PIE * H / (UM * T) X = SING ASINH = X - 0.16666*X**3.0 + 0.07500* X ** 5.0 - 0.04464 * X ** 7.0 1 + 0.03038 * X ** 9.0 - 0.02237 * X ** 11.0 LI = LD * (SINH(ASINH)/COSH(ASINH)) OPTH = ASINH * LI / 6.2832 C CHECK WAVE STABILITY RATIO = H / OPTH IF(RATIO.GE.0.78) GO TO 11 STEEP = H / LI TEST = 0.142 * (SINH(ASINH)/COSH(ASINH)) IF(STEEP.GE.TEST) GO TO 11 WRITE(61,10) H, OPTH, STEEP, RATIO 10 FORMAT(1H0, 20X, F5.1, 4X, E9.3, 4X, F5.3, 4X, F4.2) 11 H = H + 10.0 12 CONTINUE T = T + 1.0 GO TO 16 END
内容的提问来源于stack exchange,提问作者aterhorst
相关产品推荐
相关产品推荐

