阳光石油网|石油技术交流|石油人论坛

 找回密码
 欢迎注册
查看: 2451|回复: 6

[forward] Forward.NET 开发之Fortran应用

[复制链接]
  • TA的每日心情
    郁闷
    2019-11-17 16:24
  • 签到天数: 243 天

    [LV.8]以坛为家I

    发表于 2013-9-21 23:07:14 | 显示全部楼层 |阅读模式

    马上注册,下载丰富资料,享用更多功能,让你轻松玩转阳光石油论坛。

    您需要 登录 才可以下载或查看,没有账号?欢迎注册

    x
    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
    &#58853;&#58853;&#58853;&#58853;&#58853;&#58853;&#58853;&#58853;&#58853;&#58853;&#58853;
    COMMON /OUTP/YY(NOO)
    功能:  
        调用OUT以后,传递DEPO 深度点的每条输出曲线值。
    变量:
        YY(I) 第I条输出曲线DEPO深度点的曲线值(Real)。
    调用:
        OUT

    COMMON /CON/ZZ(NOC)
    功能:  
        传递处理参数。
    变量:
        ZZ(I) 第I个参数值(Real)。
    调用:
        CONST,IN
    &#58853;&#58853;
    COMMON /INPC/NOI,NAMEI(NOI)
    功能: 传递输入曲线条数及输入曲线名。
    变量:
    NOI&#58853; 输入曲线条数(Integer*4)。
    NAMEI 输入曲线名(Character*4 x NOI)。
    调用:
    CONST,IN

    COMMON /OUTC/NOO,NAMEO(NOO)
    功能:  
        传递输出曲线条数及输出曲线名。
    变量:
        NOO&#58853; 输出曲线条数(Integer*4)。
        NAMEO 输出曲线名(Character*4 x NOO)。
    调用:
        CONST,OUT

    COMMON /CONC/NOC,NAMEC(NOC)
    功能:  
        传递参数个数及参数名。
    变量:
        NOC&#58853; 参数个数(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
    &#58853;&#58853;&#58853;&#58853;&#58853;&#58853;&#58853;&#58853;&#58853;&#58853;&#58853;
    COMMON /OUTP/YY(NOO)
    功能:  
        调用OUTDATA以后,传递DEPO 深度点的每条输出曲线值。
    变量:
        YY(I) 第I条输出曲线DEPO深度点的曲线值(Real)。
    调用:
        OUTDATA

    COMMON /CON/ZZ(NOC)
    功能:  
        传递处理参数。
    变量说明:
        ZZ(I) 第I个参数值(Real)。
    调用情况:
        PARAME,VPARAM,INHEAD,OUTHEAD
    &#58853;&#58853;
    COMMON /INPC/NOI,NAMEI(NOI)
    功能:  
        传递输入曲线条数及输入曲线名。
    变量说明:
        NOI&#58853; 输入曲线条数(Integer*4)。
        NAMEI 输入曲线名(Character*8 x NOI)。
    调用情况:
        PARAME,INDATA

    COMMON /OUTC/NOO,NAMEO(NOO)
    功能:  
        传递输出曲线条数及输出曲线名。
    变量:
        NOO&#58853; 输出曲线条数(Integer*4)。
        NAMEO 输出曲线名(Character*8 x NOO)。
    调用:
        PARAME,OUTDATA

    COMMON /CONC/NOC,NAMEC(NOC)
    功能:  
        传递参数个数及参数名。
    变量说明:
        NOC&#58853; 参数个数(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&#58853;&#58853;

    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&#58853;&#58853;

    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&#58853;&#58853;

    INDATA
    功能:
        读入由DEP指定的曲线数据。
    调用:
        COMMON /DSKID/IFLNM*128,IPARM*128
        COMMON /HD/DEP,DEPO,SDEP,EDEP,STDEP,ENDEP,RLEV
        COMMON /INP/XX(NOI)

        CALL INDATA&#58853;&#58853;

    OUTDATA
    功能:
        输出由DEPO深度点指定的曲线数据。
    调用:
        COMMON /HD/DEP,DEPO,SDEP,EDEP,STDEP,ENDEP,RLEV
        COMMON /OUTP/YY(NOO)

        CALL OUTDATA&#58853;&#58853;

    OUTHEAD
    功能:
        保存处理结果并关闭井文件。
    调用:
        COMMON /HD/DEP,DEPO,SDEP,EDEP,STDEP,ENDEP,RLEV
        COMMON /OUTP/YY(NOI)

        CALL OUTHEAD&#58853;&#58853;

    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




  • TA的每日心情

    昨天 19:34
  • 签到天数: 3662 天

    [LV.Master]伴坛终老

    发表于 2013-9-22 08:55:55 | 显示全部楼层
    卡片是什么?
  • TA的每日心情
    开心
    2017-6-29 23:59
  • 签到天数: 620 天

    [LV.9]以坛为家II

    发表于 2013-9-22 09:48:50 | 显示全部楼层
    这些在forward的官方网站都有,不要只是简单的复制粘贴,那样的话看官方的文档比看论坛里的更好。希望能有好的个人意见

    点评

    是呀,这种剪刀浆糊文字建议直接删掉吧  发表于 2013-12-26 11:09
  • TA的每日心情
    开心
    2016-11-7 12:13
  • 签到天数: 486 天

    [LV.9]以坛为家II

    发表于 2013-12-2 11:28:16 | 显示全部楼层
    学习学习
  • TA的每日心情
    开心
    2022-10-11 10:31
  • 签到天数: 189 天

    [LV.7]常住居民III

    发表于 2014-5-27 17:35:38 | 显示全部楼层
    感谢分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-9-21 07:51
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    发表于 2014-9-21 09:10:52 | 显示全部楼层
    感谢分享
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 欢迎注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|阳光石油网 ( 鲁ICP备2021003870号-1 )

    GMT+8, 2024-6-5 18:08 , Processed in 0.093480 second(s), 27 queries .

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2021, Tencent Cloud.

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