投稿指南
一、本刊要求作者有严谨的学风和朴实的文风,提倡互相尊重和自由讨论。凡采用他人学说,必须加注说明。 二、不要超过10000字为宜,精粹的短篇,尤为欢迎。 三、请作者将稿件(用WORD格式)发送到下面给出的征文信箱中。 四、凡来稿请作者自留底稿,恕不退稿。 五、为规范排版,请作者在上传修改稿时严格按以下要求: 1.论文要求有题名、摘要、关键词、作者姓名、作者工作单位(名称,省市邮编)等内容一份。 2.基金项目和作者简介按下列格式: 基金项目:项目名称(编号) 作者简介:姓名(出生年-),性别,民族(汉族可省略),籍贯,职称,学位,研究方向。 3.文章一般有引言部分和正文部分,正文部分用阿拉伯数字分级编号法,一般用两级。插图下方应注明图序和图名。表格应采用三线表,表格上方应注明表序和表名。 4.参考文献列出的一般应限于作者直接阅读过的、最主要的、发表在正式出版物上的文献。其他相关注释可用脚注在当页标注。参考文献的著录应执行国家标准GB7714-87的规定,采用顺序编码制。

外企招聘中的各类题型

来源:试题与研究 【在线投稿】 栏目:期刊导读 时间:2020-11-10 13:24
作者:网站采编
关键词:
摘要:第37卷第3期2007年5月吉林大学学报(地球科学版)JournalofJilinUniversity(EarthScienceEdition)Vol-37NO.

第37卷第3期2007年5月吉林大学学报(地球科学版)JournalofJilinUniversity(EarthScienceEdition)Vol-37NO.3May2007波前扩展有限差分地震波走时算法的C++语言描述柯昊1’2,孙建国1’2,韩复兴1’21.吉林大学地球探测科学与技术学院,长春1300262.国土资源部应用地球物理综合解释理论开放实验室,长春130026摘要:回顾了波前扩展有限差分地震波走时算法及其主要优缺点,分析了该算法在程序实现过程中存在的一些问题。针对这些问题.给出了波前扩展有限差分地震泼走时算法的C++语言描述。目的是:(1)确保程序的稳定性。使用体波、首波、散射波相结合的走时算法,在保证走时计算精度的同时,较好地解决了前述算法在局部速度差异较大的情况下可能会出现负数开平方问题;(2)提高程序的执行效率。给出一种波前点的“列队”式存储方法,有效提高了波前最小走时点的查找效率;(3)为波前扩展有限差分地震波走时算法构建一个方便、可行的程序框架。对原始速度模型增加了边界,不仅方便了程序实现,而且省去了程序用于判断和处理模型边界所花费的时问。关键词:走时;波前扩展;程函方程;列队;C“中图分类号:P63文献标识码:A文章编号:1671—5888(2007)03—0615—05AnC++LanguageProgramImplementofTraveltimeCalculationofExpandingWavefrontsFinite-DifferenceMethodYANGHa01“。SUNJian-gu01”,HANFu—xin91?21.Collegeo‘,GeoExplorationScienceandTechnology。JilinUniversity,Changchun,130026,China2.LaboratoryforIntegratedGeophysicalInterpretationTheoryofMinistryforLandandResources,Changchun,130026,ChinaAbstract:Wefirstreviewthefinite—differenceschemeproposedbyQinin1988whichsolvestheeikonalequationalongexpandingwavefrontsandanalyzeitsadvantagesanddisadvantages.Wealsoshowsomeproblemsaboutitsprogrammingimplement.ThenweshowanimplementmethodintheC++programminglanguage,whichaimsatsolvingtheproblems.(1)Toensurethestabilityoftheprogram,wealsoconsidertherefractedanddiffractedwavestocalculatethetraveltimes.Thenewmethodim—provesthelocalalgorithmicstabilitiesofQin’Smethodwithoutlosingtheprecise.(2)Toimprovetheefficiencyoftheprogram,weproposeaqueuestoragestructureofthewavefrontpoints.(3)Webuildaconvenientanddoableprogramstructurefortheexpandingwavefrontsmethod.Weappendfourbounda—riestotheoriginalvelocitymodel,whichnotonlymakesprogrammingsimplebutalsosavethetimedealingwiththemodelboundaries.Keywords:travehime;expandingwavefronts;eikonalequation;queuestructure;C++收稿日期:2006一09—28基金项目:国家自然科学基金项目(40574052);教育部骨干教师资助计划项目作者简介:杨吴(1981一),男,辽宁沈阳人,硕士研究生,主要从事地震波传播与成像方面的学习与研究,Tel:0431—88502592,E-mail:yanghao.jlu@163.com通讯联系人:孙建国(1956一),男,湖北汉川人,教授,博士生导师,主要从事地下波动理论与成像技术等方面的研究。Tel:0431—88502537。’万 方数据吉林大学学报(地球科学版)第37卷另一方面,Qin等的算法延用了Vidale算法里的差分格式,对于某些速度模型仍然可能会出现负数开平方问题,导致局部算法不稳定,体现在程序计算上就是会导致程序运行出错。其次,Qin等的算法总是要查找波前面上的最小走时点,体现在程序计算上就是常规的查找方法可能会耗费较多的时间,降低了程序的执行效率。再则,Qin等算法的差分计算扩展次序随速度模型的不同而变化,而一般算法的差分计算扩展次序都是固定的,体现在程序计算上就是程序实现相对复杂,对程序实现的技巧提出了较高的要求。2算法的C++语言描述2.1体波、首波、散射波相结合的走时算法本文使用了体波、首波、散射波相结合的走时算法,解决了Qin等算法的局部稳定性问题,进而解决了程序计算的稳定性问题。体波、首波、散射波相结合的走时算法是Podvin[31针对Vidale算法的局部稳定性问题而提出的,算法中考虑了不同波型(体波、首波、散射波)的传播情况,对一个点的走时计算可能性进行了细分,达到了局部算法稳定的目的。0引言地震波走时计算在叠前偏移、层析成像、速度分析、地震模拟等方面都有广泛应用。射线追踪方法和有限差分方法是两类比较成熟和主要的地震波走时算法。射线追踪类方法通常会涉及到3个阶段的插值问题:射线路径上的速度以及速度导数通常要用插值的方法求出;在速度变化比较强烈的区域会产生阴影区,阴影区的走时通常要用插值的方法求出;射线网格点上的走时通常要映射到矩形网格点上,映射过程中也免不了要插值;这些插值十分繁琐并且计算量很大,插值方法的好坏也直接影响着走时计算的精度。基于程函方程的有限差分地震波走时算法首先由Vidale[13提出,此后,经过不断的改进和完善,该类方法在计算精度、计算效率以及算法稳定性方面都有了很大提高。Qin[21等的波前扩展有限差分地震波走时算法是该类方法的一种,它虽然优点明显,但也存在一些问题。本文从程序实现角度出发,在一定程度上解决了这些问题,并最终给出了波前扩展有限差分地震波走时算法的C¨语言描述。1Qin等的算法以及其主要优缺点Qin等的算法延用了Vidale(1988)算法里的差分格式,但使用真正的波前传播理论来模拟波前扩展,总是把波前面上的最小走时点作为差分计算的扩展点,具体的做法是:(1)从震源点开始,根据Vidale的差分格式计算震源点周围点的旅行时,认为这些新计算出的点为波前点;(2)以波前点中走时最小的点为差分计算的扩展点(扩展后的点不再是波前点),仍然根据Vidale的差分格式计算出它周围还没有被汁算过的点的走时,认为这些点也是波前点。(3)如果没有完成全部计算,跳转到(2)步骤,否则,结束运算。~方面,Qin等的算法使用真正的波前传播理论来模拟波前扩展,尽量使差分网格点上走时的计算次序符合波前扩展因果关系,克服了Vidale算法里矩形差分计算扩展方式因果稳定性差的缺点,对于速度模型的适应能力较强,即使是速度复杂、速度差异较大的速度模型,也能得到正确的走时计算结Podvin的算法使用的是矩形差分计算扩展方式,并且离散速度被定位在网格内部,本文将这一算法引入到沿“波前”方向扩展的差分计算扩展方式中来,并给出了离散速度在网格点上时的相应算法。Podvin算法的计算精度是一阶的,而Vidale算法的计算精度是二阶的,对于绝大多数速度模型,在使用了波前扩展算法后,Vidale的算法仅在极少数点上不稳定,所以本文仍然以Vidale的算法为基础,仅在Vidale算法不稳定的点上才使用体波、首波、散射波相结合的走时算法。设Az和Ax分别为2和z方向的离散网格间距,t…和S…分别为离散网格点(m,以)的走时和慢度,离散网格坐标(优,")对应连续计算模型的(Z…+mAz,StY…+nax)点。若(m,”)点的走时已知,它tm+i,Tr+-j气一坠≯&,的上下左右4个点的走时为i一±1,J一0(1)tin+i,计,一t…+垡盟≮型Ar。计,一…+∑型型%上型。i一0,J一±1(2)万 方数据第3期杨吴,孙建国,韩复兴:波前扩展有限差分地震波走时算法的C”语言描述617体波:£铧i.抖,一t…+尾入队时都按照优先级把波前点排好,则出队时就可以从队首取出走时最小的波前点,这就是波前点C2(£州.。一tm,州)+C3JclS2一(£。+m—tm,州)’C1的“列队”式存储方法。该方法的真正优势在于它更(3)加符合波前点的传播规律,对于一个速度差异不是首波:很大的速度模型,新计算出的波前点的走时通常会£算i抖,一tm+i,n+垡立堕生毒型,(4)大于或者至少等于其他波前点中大部分点的走时,£黧州一f啪+堕业《型缸,(5)这样,按照预期,新计算出的波前点(也就是新的列£黧.州一f。,科,+∑塑塑盐≠!型缸,(5)队结点)按照优先级规则,入队时应该更靠近队尾一些,因此,若从队尾开始比较各个结点的优先级,应散射波:该能够较快的找到新结点在列队中的位置。£算i.抖,=t。.。+S ̄/(△2)2+(缸)2,(6)图1中每个小方框代表1个列队结点,它的指其中,C1一(△z)2+(At)2,C2一(△z)2一(At)2,针域存储着指向后一个结点的指针next和指向前s,一譬,S:=譬,C:24tzAz,一个结点的指针prior各1个,数据域存储着波前点的二维数组索引值X和z。列队结点的排列顺序由。。’2’△z△z相应波前点走时的大小决定,走时从队首开始依次.s:旦:!±兰丛业±是:生±兰生!:生z增大,这样才能保证每次从队首front出队时得到一。4走时最小的波前点,出队后,利用next指针可以找如果(3)式稳定,把(3)式算得的走时作为最终到新的队首;新结点的入队操作从队尾开始,依次借结果,否则,取(4)、(5)、(6)式最小者作为最终结果。助各个结点的prior指针可以找到新结点在列队中2.2波前点的“列队”式存储的合适位置,之后将其插入列队就完成了入队操作。列队是计算机科学中的一种重要数据结构,它图2描绘了一些速度模型,其中,模型(j)为是某种对象的“先进先出”有序集合‘引。在队列中,Marmousi速度模型,其网格点数为384×122,网格对象的插入和删除分别在它的两端进行,删除对象大小为24mX24m,速度范围为1500~5500m/s;的一端称为队首,插入对象的一端称为队尾。波前为了各个模型之间进行对比,其它速度模型的网格点存储和查找问题可以概括为一个优先列队问题,点数和大小都与Marmousi速度模型相同,计算时每一个波前点都是一个列队对象(或者称为列队结震源位置都取在地表的中间位置。点),各个结点的优先级由其对应波前点的旅行时决表1中,“平均波前点数”为各次新波前点入队定,旅行时越小优先级越高,越先出队。若每次从队时波前点数的平均值;“平均比较次数”为各次新波i霪季霸蘩霸蘩豢爹爹||誊辫爹誊I参黪鬻妻y黪菇蘩§磐一next2一o≯_#next,。一o一rNULLnext3一_i。NULL§入NULL#卜i:priorf}onI≥卜l。pnor:g卜_一prior3lNULL1队X,x2|x3|x4。g%X二日Uz1吐z3§z4l§Z疆爹|螽麓I霪。爹鎏麓豢萋蘩鞴谬:萋≥渗誊爹next2.0—_目next,.u.“叫一《tnext,.;nextm,.;NULL-卜_#一prlorrro.,I._一》一priors_卜2+prior.,.xjx2Xx3磐I萋黛|鬻一《NULL:%prior3x4入队后¨{}¨|z1z2Zz3二z4图1“列队”式存储的入队示意图万 方数据618吉林大学学报(地球科学版)第37卷1000m/s2000m/s3000m/sCa)3000m/s2000m/s1000m/s(e)1000m/s2000m/s(b)2000m/sl000m/s(d)3000m/s2000m/s3000m/s(g)图2速度模型Fig.2Velocitymodels前点人队时与其它波前点比较走时大小的次数的平均值;“比较次数与波前点数比的平均值”是先求比而后求平均的结果,与前两者相比,这个量更能衡量存储和查找波前点方法的好坏。从表1的统计数据可以看出,一般情况下,“比较次数与波前点数比的平均值”在0.1到0.2之间,可以证明,若采用普通的波前点存储和比较方法,该值应该为0.5,这说明“列队”式波前点存储在提高程序执行效率方面是有效的。表1Marmousi速度模型中各个速度模型的波前点“列队”存储的效果分析Table1Somestatisticdatumaboutdifferentvelocitymodels问题具有良好的抽象作用,可以较好的将本文的程序设计思路展现出来,这是本文采用C+十语言的原因之一;另外,C++语言保持了C语言的指针功能,可以灵活的操作数据地址,便于数据结构描述。整个程序包括4个类:PointInfo、TravelTime、Wave—frontNode、WavefrontLinkQueue。Pointlnfo类由PointInfo类所定义的对象用来记录某一计算点的信息,包括该点的速度、走时以及该点是否被计算过了,它们分别对应t、v、isCal—culated3个成员变量。其中isCalculated的类型是bool,它只有两个值:true和false。TraveiTime类TravelTime类是整个程序的inMarmousivelocitymodelthatshowtheadvantageofqueuestoragestructure模型(a)驼3模型(b)缸6模型(c)弘4模型(d)娼5模型(e)∞2模型(f)uO模型(g)弘O模型(h)娼8模型(i)钉O模型(j)弘42.3算法的C++语言程序框架C++语言在科学计算效率方面的表现并不出色,但它是一种面向对象的程序设计语言,对于现实一个核心部分,其最主要的两个成员函数是Travel-Time()和calculate(),TravelTime()是构造函数,用于初始化计算模型,包括模型的网格点数、网格间距、网格点速度等;calculate()函数用于计算走时。另外,TravelTime类有5个成员变量,用于记录计算模型的信息,包括水平和垂直方向的网格间距dx、dz,水平和垂直方向的网格点数咒z、以z,一个Pointlnfo类型的指针变量P。对象初始化时P将用来指向一个动态分配的Pointlnfo类型的二维数组,这个二维数组形象地描述了计算模型中各个点的空间位置和其它信息。需要说明的是这里为原始模型增加了边界,因此数组大小是(nz+2)×(眦’+2),并且,在增加的边界点上,其isCalculated值为true,代表这些点已经被计算过了,这样做的好处是限制了波前点在到达边界后的继续扩展,使得cal-culate()不用特意处理原始模型的边界点,即消除了边界点的特殊性给编写calculate()函数带来的不,便,也省去了程序用于判断和处理模型边界所花费万 方数据第3期杨吴,孙建国,韩复兴:波前扩展有限差分地震波走时算法的C”语言描述619的时间。图1中,调用了P的成员变量t,用来比较各个波前点的走时大小,并将新波前点在数组P中的索引值z和2插入到链队中的合适位置,这一操作是由WavefrontLinkQueue类的成员函数en—Queue()完成的。WavefrontNode类WavefrontNode类用来定义链队的结点对象,图1中的每一个方框都代表一个结点对象。WavefrontNode类有4个成员变量z、z、next和prior,它们的用意已经在2.2中详细描述过了。WavefrontLinkQueue类WavefrontLink-Queue类用来定义链队对象,一个链队对象是多个链队结点对象的集合。WavefrontLinkQueue类有两个WavefrontNode类型的指针成员变量front和rear,分别指向列队的队首和队尾。Wavefro-ntLinkQueue类的两个最主要的成员函数是en—Queue()和deQHeHe(),分别完成入队和出队操作。以上给出了整个程序框架的说明。计算时,只需要用TravelTime类定义一个对象,并正确初始化模型参数,然后根据需要,反复调用calculate(sourceX,sourceZ)函数,就可以得到相应震源位置的初至波走时计算结果。3计算实例图3和图4是本文的波前扩展有限差分地震波图4Marmousi速度模型的计算实例Fig.4AnillustrationofcalculateresultofMarmousive—10citymodel序算法可以适应变化复杂速度模型。4结论高精度、高效率的走时算法是保证叠前偏移、层析成像、速度分析、地震模拟等相关技术得以充分发挥作用的前提,波前扩展有限差分地震波走时算法使用了真正的波前传播理论来模拟波前扩展,具有良好的因果关系稳定性。本文从程序实现角度出发,解决了该方法的局部算法稳定性问题,提出了波前点的列队式存储方法,并用C++语言描述了该方法的一个方便、可行的程序框架。实践证明,本文的波前扩展有限差分地震波走时程序实现方法具有较高的效率和精度以及良好的稳定性。参考文献(References):[1]VidaleJ.Finite-differencecalculationoftraveltimes[J].BullSeisSocAm,1988,78:2062—2076.[2]QinF,LuoY,OlsenKB,eta1.Finite-differencesolu~tionoftheeikonalequationalongexpandingWavefront[J].Geophydies,1992,57:478—487.[3]PodvinP,LecomteI.Finitedifferencecomputionoftravetimeinverycontrastedvelocitymodels:amas~sivelyparallelapproachanditsassociatedtools[J].GeophysJInt,1991,105:271—284.陈明.数据结构(C++版)[M].北京:清华大学出版社,2005:92—97,261—269.CHENMing.Datastructure(C++Edition)[M].Bei-jing:TsinghuaUniversityPress,2005:92—97,261~269.图3层状速度模型的计算实例AnillustrationofcalculateresultFig.3走时算法的两个程序计算实例。图3是层状速度模型的计算实例,自顶到下,它的三个层的速度分别为1.5km/s、5km/s、1km/s,该图表明本文程序算法可I、f二壬忐巨搬沽离昔B坊4-曲垴嘟措删.圈A且1¨坩性,吲日P尬,又瓦才忧/\ICl,J歪,又惯堡i因‘t肛Marmousi速度模型的计算实例,该图表明本文程万 方数据[43

文章来源:《试题与研究》 网址: http://www.styyjzz.cn/qikandaodu/2020/1110/878.html



上一篇:社工师考试出题的分析与建议
下一篇:领导者集中力自我测试

试题与研究投稿 | 试题与研究编辑部| 试题与研究版面费 | 试题与研究论文发表 | 试题与研究最新目录
Copyright © 20019-2020 试题与研究 版权所有
投稿电话: 投稿邮箱: