Fortran应用程序的输入及输出只针对WIS格式的文件,用参数卡片加以控制。处理参数卡采用PE机上的参数卡格式,并添加以下特殊功能: 曲线输入重定向: 如DEN<DEN1,用曲线DEN1代替DEN作为输入曲线。 曲线输出重定向: 如POR>POR1,程序运行完成后,生成POR1曲线。 采样间距重定向: 如RLEV<0.1, 全部输出曲线的采样间距均为0.1,这里只能用“RLEV”。缺省采用输入曲线中第一条存在曲线的采样间距作为处理时采样间距。 确定处理层段: 一对深度对,中间应以“,”或“ ”分隔。 层段处理参数: 采用自由格式,有继续行应以“,”结尾,最后一行不能有“,”。本段参数是在隐含参数的基础上继承上段参数,经修改得到本段参数。 确定处理井段: 所有处理层段的最小和最大深度构成了处理井段。 在Forward.NET平台上,Fortran程序、C程序和C++处理程序采用相同格式的参数卡。 Fortran应用程序编写应遵循以下规则:
公共块及变量说明
3700程序公共块及变量说明
说明:在以下公共块的变量中,除特别说明,“I-N”开头的变量均为4字节整型。
COMMON /HD/DEP,DEPO,SDEP,EDEP,
ECC,ICO(20),IWELL(20),NUMLOG,IZ,
LOG(20),STDEP,ENDEP,RLEV,IDC(2),FEET,
LOG1(59)
功能:
记录数据文件的标题信息。
变量:
DEP、DEPO 当前曲线数据输入、输出深度(Real)。
SDEP、EDEP 当前处理层段的起、止始深度(Real)。
ECC 成果号(Real)。
ICO 公司名(Integer*4 x 20)。
IWELL 井名(Integer*4 x 20)。
NUMLOG 曲线条数(Integer*2)。
IZ 填充数(Integer*2)。
LOG 曲线名(Character*4 x 20)。
STDEP、ENDEP 处理井段的起、止始深度(Real)。
RLEV 处理用采样间距。
IDC 填充数(Integer*2 x 2)。
FEET 每记录块的采样点数。
LOG1 曲线名(Character*4 x 59)。
调用:
CONST,IN,OUT
COMMON /DSKID/IFLNM,IPARM
功能: 传递处理所使用的xxx.wis 文件及参数名。
变量:
IFLNM 盘文件名(Character*128)如果不在当前目录下应带全路径名。
IPARM 参数名(Character*128)只能在xxx.wis文件中存在。
调用:
CONST,IN,RDFLNM
COMMON /INP/XX(NOI)
功能: 调用 IN以后,传递DEP 深度点的每条输入曲线值。
变量:
XX(I) 第I条输入曲线的DEP深度点的曲线值(Real)。
调用:
IN

COMMON /OUTP/YY(NOO)
功能: 调用OUT以后,传递DEPO 深度点的每条输出曲线值。
变量:
YY(I) 第I条输出曲线DEPO深度点的曲线值(Real)。
调用:
OUT
COMMON /CON/ZZ(NOC)
功能: 传递处理参数。
变量:
ZZ(I) 第I个参数值(Real)。
调用:
CONST,IN

COMMON /INPC/NOI,NAMEI(NOI)
功能: 传递输入曲线条数及输入曲线名。
变量:
NOI 输入曲线条数(Integer*4)。
NAMEI 输入曲线名(Character*4 x NOI)。
调用:
CONST,IN
COMMON /OUTC/NOO,NAMEO(NOO)
功能: 传递输出曲线条数及输出曲线名。
变量:
NOO 输出曲线条数(Integer*4)。
NAMEO 输出曲线名(Character*4 x NOO)。
调用:
CONST,OUT
COMMON /CONC/NOC,NAMEC(NOC)
功能: 传递参数个数及参数名。
变量:
NOC 参数个数(Integer*4)。
NAMEC 参数名(Character*4 x NOC)。
调用:
CONST,IN
COMMON /INPB/BUFI(2560)
功能: 数据输入缓冲区,每一条读入曲线数据点数为AMIN(2560/NOI,256)。
变量:
BUFI 输入缓冲区(Real)。
调用:
IN
COMMON /OUTB/BUFO
功能: 数据输出缓冲区,每一条读入曲线数据点数为AMIN(2560/NOO,256)。
变量:
BUFO 输出缓冲区(Real)。
调用:
OUT
COMMON /TABLE/NAME,NO,TABLE_STRUCT
功能: 传递一个记录的表项数据。
变量:
NAME 表名(Character*16)。
NO 记录号(Integer*4)如果大于最大记录,则使用最后一个记录。
TABLE_STRUCT 对应表结构的数据记录。
调用:
STRUCTURE /TABLE_STRUCT/
INTEGER*4 NO
REAL SDEP
REAL EDEP
CHARACTER*8 RESULTNO
INTEGER*4 RESULT
REAL THCK
REAL TT
END STRUCTURE
RECORD /TABLE_STRUCT/OG_TABLE
COMMON /TABLE/NAME,NO,OG_TABLE
……
INTABLE
OUTTABLE
Forward程序公共块及变量说明 说明:在以下公共块的变量中,除特别说明,“I-N”开头的变量均为4字节整型
COMMON /HD/DEP,DEPO,SDEP,EDEP,STDEP,ENDEP,RLEV
功能:
记录数据文件的标题信息。
变量:
DEP、DEPO 当前曲线数据输入、输出深度(Real)。
SDEP、EDEP 当前处理层段的起、止始深度(Real)。
STDEP、ENDEP 处理井段的起、止始深度(Real)。
RLEV 处理用采样间距。
调用:
PARAME,VPARAM,INHEAD,OUTHEAD,INDATA,OUTDATA
COMMON /DSKID/IFLNM,IPARM
功能: 传递处理所使用的xxx.wis 文件及参数名。
变量:
IFLNM 盘文件名(Character*128)如果不在当前目录下应带全路径名。
IPARM 参数名(Character*128)只能在xxx.wis文件中存在。
调用:
PARAME,VPARAM,INHEAD,OUTHEAD
COMMON /INP/XX(NOI)
功能: 调用 INDATA以后,传递DEP 深度点的每条输入曲线值。
变量:
XX(I) 第I条输入曲线的DEP深度点的曲线值(Real)。
调用:
INDATA

COMMON /OUTP/YY(NOO)
功能: 调用OUTDATA以后,传递DEPO 深度点的每条输出曲线值。
变量:
YY(I) 第I条输出曲线DEPO深度点的曲线值(Real)。
调用:
OUTDATA
COMMON /CON/ZZ(NOC)
功能: 传递处理参数。
变量说明:
ZZ(I) 第I个参数值(Real)。
调用情况:
PARAME,VPARAM,INHEAD,OUTHEAD

COMMON /INPC/NOI,NAMEI(NOI)
功能: 传递输入曲线条数及输入曲线名。
变量说明:
NOI 输入曲线条数(Integer*4)。
NAMEI 输入曲线名(Character*8 x NOI)。
调用情况:
PARAME,INDATA
COMMON /OUTC/NOO,NAMEO(NOO)
功能: 传递输出曲线条数及输出曲线名。
变量:
NOO 输出曲线条数(Integer*4)。
NAMEO 输出曲线名(Character*8 x NOO)。
调用:
PARAME,OUTDATA
COMMON /CONC/NOC,NAMEC(NOC)
功能: 传递参数个数及参数名。
变量说明:
NOC 参数个数(Integer*4)。
NAMEC 参数名(Character*8 x NOC)。
调用情况:
PARAME,VPARAM,INHEAD
COMMON /TABLE/NAME,NO,TABLE_STRUCT
功能: 传递一个记录的表项数据。
变量说明:
NAME 表名(Character*16)。
NO 记录号(Integer*4)如果大于最大记录,则使用最后一个记录。
TABLE_STRUCT 对应表结构的数据记录。
调用:
STRUCTURE /TABLE_STRUCT/
INTEGER*4 NO
REAL SDEP
REAL EDEP
CHARACTER*8 RESULTNO
INTEGER*4 RESULT
REAL THCK
REAL TT
END STRUCTURE
RECORD /TABLE_STRUCT/OG_TABLE
COMMON /TABLE/NAME,NO,OG_TABLE
……
INTABLE
OUTTABLE
函数及子例程的调用
3700函数及子例程的调用说明
RDFLNM 功能: 将命令行井数据文件及参数卡片名传递给IN和CONST。
调用:
COMMON /DSKID/IFLNM*128,IPARM*128
CALL RDFLNM
CONST 功能: 打开由IPARM指定的参数文件,读入要重定向的输入或输出曲线及参数卡。
调用:
COMMON /DSKID/IFLNM*128,IPARM*128
COMMON /HD/DEP,DEPO,SDEP,EDEP,
ECC,ICO(20),IWELL(20),NUMLOG,IZ,
LOG(20),STDEP,ENDEP,RLEV,IDC(2),FEET,
LOG1(59)
COMMON /INPC/NOI,NAMEI(NOI)
COMMON /OUTC/NOO,NAMEO(NOO)
COMMON /CONC/NOC,NAMEC(NOC)
COMMON /CON/ZZ(NOC)
CALL CONST
IN 功能: 第一次调用打开IFLNM 指定的井文件初始化部分参数。
第二次调用时读入由DEP指定的曲线数据。
调用:
COMMON /DSKID/IFLNM*128,IPARM*128
COMMON /HD/DEP,DEPO,SDEP,EDEP,
ECC,ICO(20),IWELL(20),NUMLOG,IZ,
LOG(20),STDEP,ENDEP,RLEV,IDC(2),FEET,
LOG1(59)
COMMON /INP/XX(NOI)
COMMON /INPB/BUFI 数据输入缓冲区
CALL IN
OUT 功能: 第一次调用初始化部分参数并创建输出曲线。
第二次调用时写出由DEPO指定的曲线数据。
调用:
COMMON /HD/DEP,DEPO,SDEP,EDEP,
ECC,ICO(20),IWELL(20),NUMLOG,IZ,
LOG(20),STDEP,ENDEP,RLEV,IDC(2),FEET,
LOG1(59)
COMMON /OUTP/YY(NOI)
COMMON /OUTB/BUFO // 数据输入缓冲区
CALL OUT
INTABLE 功能: 读入NAME指定的表项数据。
调用:
COMMON /TABLE/NAME,NO,TABLE_STRUCT
NAME = “OG_RESULT” // 油气解释结论
NO = 1
CALL INTABLE
注意: TABLE_STRUCT 的顺序是“层序号 起始深度 结束深度 层号 结论”。
OUTTABLE 功能: 写NAME指定的表项数据。
调用:
COMMON /TABLE/NAME,NO,TABLE_STRUCT
NAME = “OG_RESULT”
NO = 1
TABLE_STRUCT = “ 层序号 起始深度 结束深度 层号 结论 ”
CALL OUTTABLE
Forward函数及子例程的调用说明
PARAME 功能: 打开由IPARM指定的参数文件,读入要重定向的输入或输出曲线及参数卡。
调用:
COMMON /DSKID/IFLNM*128,IPARM*128
COMMON /HD/DEP,DEPO,SDEP,EDEP,STDEP,ENDEP,RLEV
COMMON /INPC/NOI,NAMEI(NOI)
COMMON /OUTC/NOO,NAMEO(NOO)
COMMON /CONC/NOC,NAMEC(NOC)
COMMON /CON/ZZ(NOC)
CALL PARAME
VPARAM 功能: 读入下一井段处理参数。
调用:
COMMON /HD/DEP,DEPO,SDEP,EDEP,STDEP,ENDEP,RLEV
COMMON /CONC/NOC,NAMEC(NOC)
COMMON /CON/ZZ(NOC)
CALL VPARAM
INHEAD 功能: 打开IFLNM 指定的井文件初始化部分参数。
调用:
COMMON /DSKID/IFLNM*128,IPARM*128
COMMON /HD/DEP,DEPO,SDEP,EDEP,STDEP,ENDEP,RLEV
COMMON /INP/XX(NOI)
CALL INHEAD
INDATA 功能: 读入由DEP指定的曲线数据。
调用:
COMMON /DSKID/IFLNM*128,IPARM*128
COMMON /HD/DEP,DEPO,SDEP,EDEP,STDEP,ENDEP,RLEV
COMMON /INP/XX(NOI)
CALL INDATA
OUTDATA 功能: 输出由DEPO深度点指定的曲线数据。
调用:
COMMON /HD/DEP,DEPO,SDEP,EDEP,STDEP,ENDEP,RLEV
COMMON /OUTP/YY(NOO)
CALL OUTDATA
OUTHEAD 功能: 保存处理结果并关闭井文件。
调用:
COMMON /HD/DEP,DEPO,SDEP,EDEP,STDEP,ENDEP,RLEV
COMMON /OUTP/YY(NOI)
CALL OUTHEAD
INTABLE 功能: 读入NAME指定的表项数据。
调用:
COMMON /TABLE/NAME,NO,TABLE_STRUCT
NAME = “OG_RESULT”
NO = 1
CALL INTABLE
注意: TABLE_STRUCT 的顺序是“层序号 起始深度 结束深度 层号 结论”。
OUTTABLE 功能: 写NAME指定的表项数据。
调用:
COMMON /TABLE/NAME,NO,TABLE_STRUCT
NAME = “OG_RESULT”
NO = 1
TABLE_STRUCT = “ 层序号 起始深度 结束深度 层号 结论”
CALL OUTTABLE
程序样板
3700模式程序样板 CHARACTER*4 NAMEC,NAMEO,NAMEI,IPARM*128,IFLNM*128
COMMON /HD/DEP,DEPO,SDEP,EDEP,
ECC,ICO(20),IWELL(20),NUMLOG,IZ,
LOG(20),STDEP,ENDEP,RLEV,IDC(2),FEET,
LOG1(59)
COMMON /DSKID/IFLNM,IPARM
COMMON /INPC/NOI,NAMEI(1)
COMMON /OUTC/NOO,NAMEO(1)
COMMON /CONC/NOC,NAMEC(1)
COMMON /INP /CAL
COMMON /OUTP/CALC
COMMON /CON /BITS
CALL RDFLNM // 命令行第一个参数为 xxx.wis
// 命令行第二个参数为 处理卡片名
CALL CONST // 读入输入或输出曲线的重定向,确定处理井段
CALL IN // 初始化输入曲线
CALL OUT // 初始化输出曲线
10 CONTINUE // 循环主体
CALL IN / / 读DEP深度点上的输入曲线数据
// 以下为用户算法
CALC = CAL - BITS
// 以上为用户算法
CALL OUT // 写DEPO深度点上的输出曲线数据
IF(DEP.LE.ENDEP)GO TO 10 // 继续下一个采样点
STOP
END
BLOCK DATA
CHARACTER*4 NAMEC,NAMEO,NAMEI,IPARM*128,IFLNM*128
COMMON /HD/DEP,DEPO,SDEP,EDEP,
ECC,ICO(20),IWELL(20),NUMLOG,IZ,
LOG(20),STDEP,ENDEP,RLEV,IDC(2),FEET,
LOG1(59)
COMMON /DSKID/IFLNM,IPARM
COMMON /INP /CAL
COMMON /OUTP/CALC
COMMON /INPC/NOI,NAMEI(1) // 输入曲线
COMMON /OUTC/NOO,NAMEO(1) // 输出曲线
COMMON /CONC/NOC,NAMEC(1) // 参数
COMMON /CON /ZZ(1) // 参数值
DATA NOI,NOO,NOC/1,1,1/
DATA NAMEI/'CAL '/ // 输入曲线名
DATA NAMEO/'CALC'/ // 输出曲线名
DATA NAMEC/'BITS'/ // 参数名
DATA ZZ/21./ // 隐含参数
DATA NOI,NOO,NOC/1,1,1/
END
Forward模式程序样板
CHARACTER*8 NAMEC,NAMEO,NAMEI,IPARM*128,IFLNM*128
COMMON /HD/DEP,DEPO,SDEP,EDEP,SSDEP,EEDEP,RLEV
COMMON /DSKID/IFLNM,IPARM
COMMON /INPC/NOI,NAMEI(1)
COMMON /OUTC/NOO,NAMEO(1)
COMMON /CONC/NOC,NAMEC(1)
COMMON /INP /CAL
COMMON /OUTP/CALC
COMMON /CON /BITS
CALL IGETARG(1,IFLNM) // 命令行第一个参数为 xxx.wis
CALL IGETARG(2,IPARM) // 命令行第二个参数为 处理卡片名
CALL PARAME // 读入输入或输出曲线的重定向,确定处理井段
CALL INHEAD // 初始化输入和输出曲线
10 CONTINUE // 循环主体
IF(DEP .GE. EDEP)CALL VPARAM // 转换下一段参数
CALL INDATA // 读DEP深度点上的输入曲线数据
// 以下为用户算法
CALC = CAL - BITS
// 以上为用户算法
CALL OUTDATA // 写DEPO深度点上的输出曲线数据
IF(DEP.LE.EEDEP)GO TO 10 // 继续下一个采样点
CALL OUTHEAD // 输出曲线保存并关闭井文件
STOP
END
BLOCK DATA
CHARACTER*8 NAMEC,NAMEO,NAMEI,IPARM*128,IFLNM*128
COMMON /HD/DEP,DEPO,SDEP,EDEP,SSDEP,EEDEP,RLEV
COMMON /DSKID/IFLNM,IPARM
COMMON /INP /CAL
COMMON /OUTP/CALC
COMMON /INPC/NOI,NAMEI(1) // 输入曲线
COMMON /OUTC/NOO,NAMEO(1) // 输出曲线
COMMON /CONC/NOC,NAMEC(1) // 参数
COMMON /CON /ZZ(1) // 参数值
DATA NOI,NOO,NOC/1,1,1/
DATA NAMEI/'CAL '/ // 输入曲线名
DATA NAMEO/'CALC'/ // 输出曲线名
DATA NAMEC/'BITS'/ // 参数名
DATA ZZ/21./ // 隐含参数
DATA NOI,NOO,NOC/1,1,1/
END
|
|