Fortran Coder

查看: 16676|回复: 6
打印 上一主题 下一主题

[求助] 关于Chemkin III源程序中数组越界问题

[复制链接]

19

帖子

4

主题

0

精华

入门

F 币
91 元
贡献
49 点

规矩勋章

跳转到指定楼层
楼主
发表于 2019-12-1 11:47:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请求帮助!最近为了能够使用chemkinIII开源软件,学习了Fortran语言,但遇到如下问题。所用为intel Fortran+IVS
forrtl: severe (408): fort: (3): Subscript #1 of the array SWORK has value -858993460 which is less than the lower bound of 1
调试过程中,发现LDTEM,LEMAT始终为-858993460.
看到别人的贴子,采用SAVE命令,该值变为0,就出现 Value 0 which is less than the lower bound of 1。
从初始为-858993460后,在运行过程中,这两个值始终未改变。在调试的时候我将他们的值赋为1,又出现其他问题。
由于该源程序是从网上下载,不清楚别人有没有调整过。请大家提提意见,谢谢。

[Fortran] 纯文本查看 复制代码
 SUBROUTINE DDASAC (RES,NSYS,T,Y,YPRIME,TOUT,
* INFO,ISEN,RTOL,ATOL,IDID,SWORK,LSW,
* RWORK,LRW,IWORK,LIW,RPAR,IPAR,
* JAC,DRES,DFDYP)
IMPLICIT DOUBLE PRECISION (A-H,O-Z), INTEGER (I-N)
C*****END precision > double
C-------------------------------------------------------------------
C This code solves a system of differential/algebraic
C equations of the form f(t,y,yprime;p)=0. where p is a
C parameter vector of time independent constants.
C If requested the code will also solve the following system
C of equations for the parametric sensitivity functions W(t) :
C
C (df/dyprime)*W'(t)+(df/dy)*W(t)+df/dp=0.
C
C where W(t):=dy/dp
C--------------------------------------------------------------------
LOGICAL DONE
EXTERNAL RES,JAC,DRES,DFDYP
DOUBLE PRECISION SWORK
DIMENSION Y(*), YPRIME(*), INFO(15),ISEN(5)
DIMENSION RWORK(*), IWORK(*), SWORK(*),RTOL(*), ATOL(*)
DIMENSION RPAR(*), IPAR(*)
COMMON/DDA001/NPD,NTEMP,
* LML,LMU,LMXORD,LMTYPE,
* LNST,LNRE,LNJE,LETF,LCTF,LIPVT
COMMON/DDA002/INDEX,NALG,IDFDP,ICALC,NPAR
DATA LTSTOP,LHMAX,LH,LTN,
* LCJ,LCJOLD,LHOLD,LS,LROUND,
* LALPHA,LBETA,LGAMMA,
* LPSI,LSIGMA,LDELTA
* /1,2,3,4,
* 5,6,7,8,9,
* 11,17,23,
* 29,35,41/

C
C First see if parametric sensitivity calculations
C have been requested by the user.
C
ICALC=ISEN(1)



[Fortran] 纯文本查看 复制代码
  CALL DDASTP(TN,Y,YPRIME,NEQ,NSYS,
     *   RES,JAC,H,RWORK(LWT),INFO(1),IDID,RPAR,IPAR,
     *   RWORK(LPHI),RWORK(LDELTA),RWORK(LE),
     *   RWORK(LWM),IWORK(LIWM),
     *   RWORK(LALPHA),RWORK(LBETA),RWORK(LGAMMA),
     *   RWORK(LPSI),RWORK(LSIGMA),
     *   RWORK(LCJ),RWORK(LCJOLD),RWORK(LHOLD),
     *   RWORK(LS),HMIN,RWORK(LROUND),
     *   IWORK(LPHASE),IWORK(LJCALC),IWORK(LK),
     *   IWORK(LKOLD),IWORK(LNS),INFO(10),
     *   SWORK(LDTEM),SWORK(LEMAT),DRES,DFDYP)
    在调试后,发现此行出现问题。



[Fortran] 纯文本查看 复制代码
 SUBROUTINE DDASTP(X,Y,YPRIME,NEQ,NSYS,
     *  RES,JAC,H,WT,JSTART,IDID,RPAR,IPAR,
     *  PHI,DELTA,E,WM,IWM,
     *  ALPHA,BETA,GAMMA,PSI,SIGMA,
     *  CJ,CJOLD,HOLD,S,HMIN,UROUND,
     *  IPHASE,JCALC,K,KOLD,NS,NONNEG,
     *  DTEM,EMAT,DRES,DFDYP)
C-----------------------------------------------------------------
C     DDASTP solves a system of differential and algebraic
C     equations for one step, normally from t to t+h.
C-----------------------------------------------------------------
C*****precision > double
      IMPLICIT DOUBLE PRECISION(A-H,O-Z), INTEGER (I-N)
C*****END precision > double
      LOGICAL CONVGD
      DIMENSION Y(*), YPRIME(*), WT(*), PHI(NEQ,*), DELTA(*), E(*)
      DIMENSION DTEM(*), EMAT(*), WM(*), IWM(*)
      DIMENSION PSI(*), ALPHA(*), BETA(*), GAMMA(*), SIGMA(*)
      DIMENSION RPAR(*), IPAR(*)
      EXTERNAL RES,JAC,DRES,DFDYP
      COMMON/DDA001/NPD,NTEMP,
     *   LML,LMU,LMXORD,LMTYPE,
     *   LNST,LNRE,LNJE,LETF,LCTF,LIPVT
      COMMON/DDA002/INDEX,NALG,IDFDP,ICALC,NPAR
      DATA MAXIT/4/
      DATA XRATE/0.25E0/
      DATA ZERO/0.0E0/, PT25/0.25E0/, PT5/0.5E0/, PT9/0.9E0/
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

1958

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1341 元
贡献
565 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2019-12-1 12:29:06 | 只看该作者
检查 LDTEM 的值,应该是合理的 SWORK 数组的下标范围。

你的这个代码太古老了,没有注释和说明的话,很难看懂。尝试问问作者吧~

如果作者不好联系,建议自己重写。

19

帖子

4

主题

0

精华

入门

F 币
91 元
贡献
49 点

规矩勋章

板凳
 楼主| 发表于 2019-12-1 15:42:56 | 只看该作者
fcode 发表于 2019-12-1 12:29
检查 LDTEM 的值,应该是合理的 SWORK 数组的下标范围。

你的这个代码太古老了,没有注释和说明的话,很难 ...

感谢回复
想请教一下,就是当LDTEM从最初就未被赋值,当调用它的时候,就出现了越界问题,没有解决的办法吗?是否是在调用之前就要赋值在界内才行?

1958

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1341 元
贡献
565 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

地板
发表于 2019-12-1 18:00:55 | 只看该作者
在使用之前必须赋值在界内。

19

帖子

4

主题

0

精华

入门

F 币
91 元
贡献
49 点

规矩勋章

5#
 楼主| 发表于 2019-12-2 15:38:35 | 只看该作者
fcode 发表于 2019-12-1 18:00
在使用之前必须赋值在界内。

感谢解答

1

帖子

0

主题

0

精华

新人

F 币
21 元
贡献
7 点
6#
发表于 2021-11-10 21:06:45 | 只看该作者
你好,我最近在调试CHEMKIN III的过程中也遇到数组下标<0的问题,请问你解决了吗?希望能帮忙解惑,非常感谢!

19

帖子

4

主题

0

精华

入门

F 币
91 元
贡献
49 点

规矩勋章

7#
 楼主| 发表于 2022-6-22 17:55:36 | 只看该作者
Dxx 发表于 2021-11-10 21:06
你好,我最近在调试CHEMKIN III的过程中也遇到数组下标

不好意思,有些久远了,我之前测试了一下就没采用chemkin了,抱歉。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-4-25 01:28

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表