(fortran77,程序修改)新手将主程序改写为子程序调用遇到....
本帖最后由 q11tao 于 2018-7-6 18:17 编辑Fortran90刚入门不久,之前使用的是其他语言,现在想将一个经典的Fortran77热力学计算软件修改为可调用的子程序,对fortran语言并不熟练,能力不足,故求助论坛各位大神,希望能得到指教,多多学习。
程序文件为CEA2,为NASA发布的计算燃烧产物热力学参数的程序。
原程序使用逻辑是编译运行cea2.f程序后,命令行提示输入输入卡名字,之后程序自动搜索文件夹中同名输入卡,计算并输出输出卡文件。
以下是程序开头部分代码,完整代码已上传附件。计划修改为subroutine子程序,当在主程序中调用时,输入与输入卡一致的字符串,返回输出卡中字符串。
当前主程序中可以看出,输入卡地址由infile生成,IOINP通过open打开输入卡并接收输入卡内容后传入主程序中进行字符串解析并计算,之后输出结果字符串,并在最终写入ofile中。
目前问题是:
1、怎么修改IOINP为接收输入的字符串;
2、怎么修改ofile中字符串输出至主程序中;
3、怎么完好地修改源程序为子程序,便于调用。
希望得到大家的帮助指正。
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.
100Iplt = 0
Nplt = 0
CALL INPUT(readok,caseok,ensert)
附件缺少cea.inc文件,不能调试。仅需修改如下4句:
L01: subroutine CEA2(prefix)
L07: character(*) prefix
L16: 注释掉
L17: 注释掉 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等。 lz为啥不愿去GitHub上面找找封装好的现成Python库呢?
譬如
https://github.com/nespinoza/pyCEA
https://github.com/corriander/thermodata
https://github.com/sonofeft/RocketCEA
pasuka 发表于 2018-7-6 21:10
lz为啥不愿去GitHub上面找找封装好的现成Python库呢?
譬如
https://github.com/nespinoza/pyCEA
谢谢回复!github我找过,这个程序是打算在其他软件中调用的,其他软件目前不兼容python,所以使用fortran调整,正好也多研究一下fortran:-)
页:
[1]