480 likes | 657 Vues
FOCUS 系统编程培训. CNOOC EDRC AUG. 09, 2005. FOCUS 处理系统介绍. FOCUS 处理系统开发于上世纪九十年代初,是在 DISCO 处理系统上增加了交互界面。 DISCO 起源于 1969 年,属于 DIGICON 公司,后来分家到 CSD ,由 CSD 到 PARADIGM 。 FOCUS 系统在处理地震数据上是灵活和模块化的。每一个处理功能都做成分开的模块,无论从解编到偏移,一个地震作业是靠选择模块来完成希望的工作。而且由于不需要考虑读写和显示,所以加一个模块很容易。. FOCUS 处理系统特点.
E N D
FOCUS系统编程培训 CNOOC EDRC AUG. 09, 2005
FOCUS处理系统介绍 FOCUS处理系统开发于上世纪九十年代初,是在DISCO处理系统上增加了交互界面。DISCO起源于1969年,属于DIGICON公司,后来分家到CSD,由CSD到PARADIGM。 FOCUS系统在处理地震数据上是灵活和模块化的。每一个处理功能都做成分开的模块,无论从解编到偏移,一个地震作业是靠选择模块来完成希望的工作。而且由于不需要考虑读写和显示,所以加一个模块很容易。 TJ ESH
FOCUS处理系统特点 1.容易加一个模块到系统中: 采用模块化设计,模块功能相对单一,编写格式标准化。 2.写一个新模块时不考虑FOCUS系统的详细内容: 如怎样读作业,怎样管理参数及界面与操作系统的关系等。共享显示、输入和输出。 TJ ESH
FOCUS处理系统特点 3.标准作业参数卡: 每行8域,每域8个字符,分为全局参数、列表卡、列表参数和重复卡。 4.一个模块完成一个地震处理功能: 依靠模块的组合来完成作业任务。模块级编程。 TJ ESH
FOCUS处理系统特点 5.参数输入和信息以模块为单位管理: 在记录文件中以模块为单位显示,容易查找错误信息位置和原因。 6.专用的输入和输出模块: 用输入模块读输入数据,任何模块的结果都可用输出模块记录。 TJ ESH
MONITOR的用途 作业中的模块是怎样运行的呢?就在系统监控程序(MONITOR)下执行的。用户提交的作业包含很多模块,系统监控程序将这些模块连接成一个执行文件,然后控制其完成相应功能。主要作用有三个方面: TJ ESH
MONITOR的用途 1.通过模块中的相关信息来控制数据流和并行。 模块信息有四种方式: ENSMBLE: 道集 STACK: 叠后数据 SINGLETRACE: 单道数据 MULTTRACE: 多道数据 数据流标志有三种方式: MON_NORMAL: 单道输入与输出 MON_MULTI: 多道输入 MON_MULTO: 多道输出 TJ ESH
MONITOR的用途 2.控制作业的运行阶段 六个阶段: Pre_Link 连接前阶段 Link 连接阶段 Edit 编辑阶段 Process 处理阶段 End_Of_File 文件结束阶段 Post_Process 处理结束阶段 Abort 中断阶段 TJ ESH
MONITOR的用途 3.阵列机和设备管理 阵列机 磁带机 内存管理 TJ ESH
标准应用模块编写步骤 1、建立目录 2、写IPD文件 3、处理IPD文件 4、编写子程序 5、编译子程序 6、测试模块 7、优化 1、建立目录 2、写IPD文件 3、编写编辑阶段子程序 4、编写公共块文件 5、编写处理阶段子程序 6、编译模块(make) 7、测试模块 8、优化 TJ ESH
标准应用模块编写步骤 1、建立目录 使用mkdir命令建立一个目录,最好使用模块名作为目录名字。 TJ ESH
标准应用模块编写步骤 2、写IPD文件 IPD文件是FOCUS的参数描述文件,来源于IP子系统,它是处理数据结构的包,IPD文件使用其下的IPDL(描述语言)来定义FOCUS的输入参数,它可以定义某一项的逻辑类型,顺序,缺省值和有效范围。每个模块形成一个类图,所有模块构成类库,即disco.ipl。 TJ ESH
标准应用模块编写步骤 IPD文件格式 module NAME /*ATT class attribute information */ /* REL release information */ /* DOC over all documentation */ { parameters { atomic items and structure groups } examples { example information } } TJ ESH
标准应用模块编写步骤 ATT说明内容 为disco的执行提供类属性信息,用关键字为索引来组织,有多个值时用空格和逗号分开。 • SUBTITLE 简短功能描述 • SHORT_NAME 模块的短名 • VERSION disco的版本号 • DATAFLOW 数据流标示 • WEIGHT 模块优先级 • CATEGORIES 归类表 TJ ESH
标准应用模块编写步骤 REL说明内容 版本信息和模块修改信息,没有格式要求。 • Release_date 释放日期打印在文本的页脚 • Release_history 模块更改历史 • Release_level 释放版本号打印在文本的页眉 • Release_system 系统名打印在文本的页眉 TJ ESH
标准应用模块编写步骤 DOC说明内容 模块详细说明 • 功能简述 • 原理介绍 • 应用说明(参数使用说明、注意事项和输出等) TJ ESH
标准应用模块编写步骤 parameters文件格式 parameters { global parameters … selector { case listname1 [] { local parameters … struct { repeat parameters … } repeats [1:*]; } case lisname2 [] { local parameters … struct { repeat parameters … } repeats [1:*]; } other lists … } lists [*:*:0]; } TJ ESH
标准应用模块编写步骤 EXAMPLES文件格式 examples { /*DOC \dsubsection{Example One} \begin{dedeck} {*CALL} \> COHERE \> 53 \> 25 \> 1 \> 1 \> ACROSS \> CDP \\ PASS \\ FILTERS \\ 1 \> -10 \> +10 \end{dedeck} A filter calculated with 53 time samples and 25 stacked traces is designed for CDP 1 and applied to all the data. All dipping outside the range of -10 to +10 milliseconds of dip per trace is filtered. The filter coefficients and the Fourier transform of the filter are printed in the job listing. */ TJ ESH
标准应用模块编写步骤 与IPD文件有关的命令 ipc:IPD文件编译命令 Ipdlib:ipd库操作命令 Pdftoipd:批量参数文件到交互参数文件的转换 % ipc -o module_name.ipo module_name.ipd % ipdlib c module_name.ipl % ipdlib i module_name.ipl module_name.ipo To generate pdflbr.pdl from module_name.ipd, enter: % ipc -p module_name.pdf module_name.ipd % pdfcmp /object=module_name.pdo module_name.pdf % pdflbr module_name.pdl /create % pdflbr module_name.pdl /insert module_name.pdo TJ ESH
标准应用模块编写步骤 3、写EDITP子程序 模块开始运行的第一部是编辑阶段,为了做初始化工作和作业参数的检查,编辑阶段的入口点调用每一个模块。编辑阶段的任务是: • 找出模块的选项 • 读入参数并检查 • 错误检查 • 资源分配 如果有错误,当最后一个模块完成编辑阶段后,作业中断,列出出错模块的原因。每个模块在编辑阶段只被调用一次。 TJ ESH
标准应用模块编写步骤 命名规则 编辑阶段子程序名:editp.f 程序内部名称:模块名_EDITP 编辑阶段调用的子程序名:模块名_子程序名 注:保证程序名的唯一性,防止出现重复定义错误。 TJ ESH
标准应用模块编写步骤 模块选项 调用格式为: CALL MON_SETOPT(OPTIONS) OPTIONS选项: • MON_AUXTR 模块处理辅助道。 • MON_EDITO 模块只在编辑阶段被调用。 • MON_EOF 模块在文件结束阶段被调用。 • MON_INP 模块是输入模块。 • MON_RENT 模块可重复调用。 • MON_APMAP 模块影射到AP中运行。 CALL MON_VARSAVR(11,ST1,STN,DY1,DYN) TJ ESH
标准应用模块编写步骤 模块参数的读入 调用参数输入子程序读取作业的模块参数: 1、输入结构子程序列表: • MON_SETGBL 全局参数 • MON_SETLST 列表 • MON_NXTLST 列表组 • MON_SETREP 重复卡参数 2、读取参数值子程序列表: TJ ESH
标准应用模块编写步骤 • MON_CPARM • MON_CPARMNJ • MON_CPARMCS • MON_FPARM • MON_IFPARM • MON_IPARM • MON_KEYPARM • MON_IHDR • MON_TGLPARM • MON_TGPARM TJ ESH
标准应用模块编写步骤 3、参数值标记: 字符型参数:1位数字(缺省值) IDENT = MON_CPARM('IDENT',1,'VELDEFN') 数字型参数:3位数字(下限、上限、缺省值) • 0:没有 • 1:有 RPINC=MON_FPARM('RPINC',001,0.,0.,2.) MAXTR=MON_IPARM('MAXTR',111,3,MAXNTR,MAXNTR) TJ ESH
标准应用模块编写步骤 地震道属性 编辑阶段可得到属性: • LENGTH:数据道长 • THDRLEN:道头长 • DT:采样率 • ORDER:分选主键名 • DIRECTION:分选方向 • MAXNTR:道集中的最大道数 TJ ESH
标准应用模块编写步骤 必须定义的道头 所有模块必须定义以下三个道头字: • SEQNO:道集内排序值 • LASTTR:道集内最后一道标记 0:非道集内最后一道 1:道集内最后一道 • TYPE:输入数据类型 0:数据道 1:辅助道 TJ ESH
标准应用模块编写步骤 内存分配 内存分配分为暂时和永久两类: • MON_GETTCOR 暂时内存 • MON_GETPCOR 永久内存 • MON_MEMLCL 为处理阶段预定大块内存 • MEM_VMGET *处理阶段申请内存 • MEM_VMREL *处理阶段释放内存 TJ ESH
标准应用模块编写步骤 磁盘分配 当一个模块需要暂存空间或内存不够用时可申请磁盘空间,命令格式: MON_DSKLCL(LREC,NREC,ID) TJ ESH
标准应用模块编写步骤 其他资源分配 磁带机、阵列机等 输出列表信息 作业处理历史文件记录以下信息 IULIST:表示一般信息输出 IUERR:表示有错误,作业中断 IUWARN:表示有错误,但在/nowarn下可执行 IUTABLE:输出有规律的信息 TJ ESH
标准应用模块编写步骤 4、公共块文件 因为编辑阶段和处理阶段子程序是分开的,编辑阶段只执行一次,如何将得到的输入参数值、申请的内存指针、初始化变量和其他信息传入到处理阶段———公共块。 TJ ESH
标准应用模块编写步骤 公共块命名: 模块名CB.FIN 公共块分类: • STVAR:静态变量 • DYVAR:动态变量 TJ ESH
标准应用模块编写步骤 公共块举例: 模块名CB.FIN LOGICAL FIRST INTEGER STARTP,NUMRP,ITRIN,ITROUT,OUTFLG INTEGER IXR_VL,NTM,ITRORG INTEGER IXTR,IXHDR,IXH_LASTTR REAL RPINC,RRPINC,RDTMS,MNOFFS,MXOFFS COMMON / RADINV_STVAR / STARTP,NUMRP,RPINC,RRPINC,RDTMS, 1 IXR_VL,NTM,IXH_LASTTR COMMON / RADINV_DYVAR / ITRIN,ITROUT,OUTFLG,IXTR,IXHDR, 1 MNOFFS,MXOFFS,ITRORG,FIRST TJ ESH
标准应用模块编写步骤 5、写PROCP子程序 地震数据实际被计算是在处理阶段。系统监控在处理阶段调用三个自变量,即TRACE(地震道)、THDR(道头)和IFLAG(数据流标志),当开始处理时: 单道:把第一道数据传送到地震道数组中,把需要的道头值放在道头数组,然后开始计算。当前道完成后,将处理后的数据放回地震道数组中,置数据流标志,最后返回到系统监控中,当前道输出,同时下一道输入进来。 多道:把第一道数据传送到地震道数组中,把需要的道头值放在道头数组,在模块内部将地震道和道头信息保存在申请的内存中,置数据流标志,返回到MONITOR读下一道进来,直到满足要求为止。开始计算,将处理后的数据放回地震道数组中,再置数据流标志,循环至EOF阶段时进行剩余道处理。 TJ ESH
标准应用模块编写步骤 TRACE 地震道的数据部分,浮点值,从1开始: • DT 采样率,单位:微妙 • LENGTH 数据道长 DT*LENGTH=NS,单位:毫秒 TJ ESH
标准应用模块编写步骤 THDR 地震道的道头部分,描述数据部分的属性,整型 值,从1开始: • THDRLEN 道头长 MON_THDRDEF 定义新道头 MON_THDRGET 获得道头索引 道头值一般为整型值,如果需要浮点值需使用等价语句。 TJ ESH
标准应用模块编写步骤 IFLAG 数据流标记,在RETURN语句之前指出,整型值: • MON_NORM 一道进,一道出 • MON_MULTI 多道输入 • MON_MULTO 多道输出 TJ ESH
标准应用模块编写步骤 数据流组织图解: 分为三类:单道、多道和道集。 TJ ESH
标准应用模块编写步骤 6、模块的编译 使用Makefile文件编译,优点: • 它只编译修改过的文件 • 方便于替换命令 命令格式: %make TJ ESH
标准应用模块编写步骤 7、调试 使用DBX工具可进行程序追踪,编译时加-g选项。 命令格式: %newproj test %disco /debug xxx.dat %dbx>设置断点 %dbx>run tmp2 TJ ESH
标准应用模块编写步骤 8、优化 编译时加-O选项,此时-g选项失效。 命令格式: %make TJ ESH
FOCUS库函数介绍 FOCUS库分类 MONINC 监控子程序库 OSIINC Paradigm库 SDBDEF 与数据库相关子程序库 TAPDEF 与磁带相关子程序库 TJ ESH
FOCUS库函数介绍 MONINC 监控子程序库 CHR 字符操作库(*) CIO 非同步的逻辑文件的输入/输出库 CMD 命令检查库 CNV 格式转换库 UTL 工具库和C/FORTRAN映射库 DTR 数字化采集库 FIL 文件输入/输出库(*) ITP 内插库(*) MEM 内存库(*) MON 监控库(*) MTH 数学库(*) PLT 绘图库 QUE 队列库 THDR 道头库(*) VDS 输入/输出磁盘文件库(*) TJ ESH
FOCUS库函数介绍 SDBDEF 数据库子程序库 SDB 数据库操作库 TJ ESH
FOCUS库函数介绍 TAPDEF 磁带子程序库 TAP 磁带操作库 TJ ESH
FORTRAN与C互调 FORTRAN调C *.f: call c_wptefc( TRACE, THDR,NREAD, PARA, 1 ) *.c: extern int c_wptefc_(trace,theader,count,para,calflag) C 调FORTRAN *.c: extern int f_wptefc_(trace,theader,count,para,calflag) f_wptefc_( TRACE, THDR,NREAD, PARA, 1 ) *.f: subroutine f_wptefc( TRACE, THDR,NREAD, PARA, 1 ) TJ ESH
FORTRAN与C互调 TJ ESH
祝您健康! TJ ESH