|
本帖最后由 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, 下载次数: 3)
CEA2(1).zip
(189.04 KB, 下载次数: 8)
CEA2(2).zip
(705.74 KB, 下载次数: 8)
|
|