Fortran Coder

查看: 238|回复: 4

[求助] (fortran77,程序修改)新手将主程序改写为子程序调用遇到....

[复制链接]

4

帖子

1

主题

0

精华

入门

F 币
44 元
贡献
26 点

规矩勋章

发表于 2018-7-6 15:31:45 | 显示全部楼层 |阅读模式
本帖最后由 q11tao 于 2018-7-6 18:17 编辑

Fortran90刚入门不久,之前使用的是其他语言,现在想将一个经典的Fortran77热力学计算软件修改为可调用的子程序,对fortran语言并不熟练,能力不足,故求助论坛各位大神,希望能得到指教,多多学习。
程序文件为CEA2,为NASA发布的计算燃烧产物热力学参数的程序。
原程序使用逻辑是编译运行cea2.f程序后,命令行提示输入输入卡名字,之后程序自动搜索文件夹中同名输入卡,计算并输出输出卡文件。
以下是程序开头部分代码,完整代码已上传附件。计划修改为subroutine子程序,当在主程序中调用时,输入与输入卡一致的字符串,返回输出卡中字符串。
当前主程序中可以看出,输入卡地址由infile生成,IOINP通过open打开输入卡并接收输入卡内容后传入主程序中进行字符串解析并计算,之后输出结果字符串,并在最终写入ofile中。

目前问题是:
1、怎么修改IOINP为接收输入的字符串;
2、怎么修改ofile中字符串输出至主程序中;
3、怎么完好地修改源程序为子程序,便于调用。
希望得到大家的帮助指正。

[Fortran] 纯文本查看 复制代码
 
PROGRAM CEA2
IMPLICIT NONE
      INCLUDE 'cea.inc'
C LOCAL VARIABLES
      CHARACTER*15 ensert(20)
      CHARACTER*200 infile,ofile
      CHARACTER*196 prefix
      LOGICAL caseok,ex,readok
      INTEGER i,inc,iof,j,ln,n
      INTEGER INDEX
      REAL*8 xi,xln
      REAL*8 DLOG
      SAVE caseok,ensert,ex,i,inc,infile,iof,j,ln,n,ofile,prefix,readok,
     &  xi,xln
C
      WRITE (*,99001)
      READ (*,99002) prefix
      ln = INDEX(prefix,' ') - 1
      infile = prefix(1:ln)//'.inp'
      ofile = prefix(1:ln)//'.out'
      Pfile = prefix(1:ln)//'.plt'
      INQUIRE (FILE=infile,EXIST=ex)
      IF ( .NOT.ex ) THEN
        PRINT *,infile,' DOES NOT EXIST'
        GOTO 400
      ENDIF
      OPEN (IOINP,FILE=infile,STATUS='old',FORM='formatted')
      OPEN (IOOUT,FILE=ofile,STATUS='unknown',FORM='formatted')
      OPEN (IOSCH,STATUS='scratch',FORM='unformatted')
      OPEN (IOTHM,FILE='thermo.lib',FORM='unformatted')
      OPEN (IOTRN,FILE='trans.lib',FORM='unformatted')
      WRITE (IOOUT,99006)
      WRITE (IOOUT,99007)
      WRITE (IOOUT,99006)
      readok = .TRUE.
      Newr = .FALSE.
 100  Iplt = 0
      Nplt = 0
      CALL INPUT(readok,caseok,ensert)

cea2.f (200.51 KB, 下载次数: 2)
回复

使用道具 举报

260

帖子

1

主题

0

精华

宗师

F 币
1462 元
贡献
989 点
发表于 2018-7-6 17:05:24 | 显示全部楼层
附件缺少cea.inc文件,不能调试。仅需修改如下4句:
L01: subroutine CEA2(prefix)
L07: character(*) prefix
L16: 注释掉
L17: 注释掉

4

帖子

1

主题

0

精华

入门

F 币
44 元
贡献
26 点

规矩勋章

 楼主| 发表于 2018-7-6 18:01:52 | 显示全部楼层
li913 发表于 2018-7-6 17:05
附件缺少cea.inc文件,不能调试。仅需修改如下4句:
L01: subroutine CEA2(prefix)
L07: character(*) pref ...

谢谢帮忙!!稍后我将程序所需文件全部上传。我想把程序修改成:主程序中预先定义infile和ofile,通过子程序subroutine CEA2(infile,ofile),输入infile字符串,程序生成字符串结果通过ofile接收,所以需要修改IOINP等。

459

帖子

3

主题

0

精华

大宗师

F 币
3094 元
贡献
1836 点

水王勋章元老勋章热心勋章

发表于 2018-7-6 21:10:35 | 显示全部楼层
lz为啥不愿去GitHub上面找找封装好的现成Python库呢?
譬如
https://github.com/nespinoza/pyCEA
https://github.com/corriander/thermodata
https://github.com/sonofeft/RocketCEA

4

帖子

1

主题

0

精华

入门

F 币
44 元
贡献
26 点

规矩勋章

 楼主| 发表于 2018-7-9 08:02:28 | 显示全部楼层
pasuka 发表于 2018-7-6 21:10
lz为啥不愿去GitHub上面找找封装好的现成Python库呢?
譬如
https://github.com/nespinoza/pyCEA

谢谢回复!github我找过,这个程序是打算在其他软件中调用的,其他软件目前不兼容python,所以使用fortran调整,正好也多研究一下fortran
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2018-9-25 16:44

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

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