叠加地震记录的相移波动方程正演模拟
地震波动方程方向行波波场分离正演数值模拟与逆时成像
地震波动方程方向行波波场分离正演数值模拟与逆时成像陈可洋;陈树民;李来林;吴清岭;范兴才;刘振宽【摘要】为了进一步提高对地震波传播规律的认识,将波印廷矢量引入到二维地震波动方程方向行波波场分离正演数值模拟中.根据地震波波印廷矢量的波场数值特征,实现了对全地震波场中左行波、右行波、上行波和下行波波场的自动识别与分离.以均匀介质模型、倾斜界面模型以及Marmousi模型为例,开展了相应的数值模拟实验与逆时成像处理.计算结果表明,该方法准确有效,能够实现任意时刻波场快照中方向行波的波场分离,并合成分别由左行波、右行波、上行波和下行波形成的波场快照与数值模拟记录.该方法简单易行,计算量较小,对实际地震资料中方向行波波场的识别、分离、成像及验证具有一定的应用价值.【期刊名称】《岩性油气藏》【年(卷),期】2014(026)004【总页数】7页(P130-136)【关键词】地震波动方程;正演模拟;单程波;波场分离;波印廷矢量;逆时成像【作者】陈可洋;陈树民;李来林;吴清岭;范兴才;刘振宽【作者单位】中国石油大庆油田有限责任公司勘探开发研究院,黑龙江大庆163712;中国石油大庆油田有限责任公司勘探开发研究院,黑龙江大庆163712;中国石油大庆油田有限责任公司勘探开发研究院,黑龙江大庆163712;中国石油大庆油田有限责任公司勘探开发研究院,黑龙江大庆163712;中国石油大庆油田有限责任公司勘探开发研究院,黑龙江大庆163712;中国石油大庆油田有限责任公司勘探事业部,黑龙江大庆163453【正文语种】中文【中图分类】P631.40 引言地震波正演数值模拟技术一直是国际地球物理学界的热点内容之一。
随着地震波动理论和计算机技术的不断发展,自20世纪60年代以来该项技术便得到了飞速发展,其中采用波动方程的地震波数值模拟技术能更好地保持地震波的几何学、运动学和动力学等特征,因此可达到精确模拟地震波传播规律的目的[1]。
地震波波动方程数值模拟方法(严选优质)
地震波波动方程数值模拟方法地震波波动方程数值模拟方法主要包括克希霍夫积分法、傅里叶变换法、有限元法和有限差分法等。
克希霍夫积分法引入射线追踪过程,本质上是波动方程积分解的一个数值计算,在某种程度上相当于绕射叠加。
该方法计算速度较快,但由于射线追踪中存在着诸如焦散、多重路径等问题,故其一般只能适合于较简单的模型,难以模拟复杂地层的波场信息。
傅里叶变换法是利用空间的全部信息对波场函数进行三角函数插值,能更加精确地模拟地震波的传播规律,同时,利用快速傅里叶变换(FFT)进行计算,还可以提高运算效率,其主要优点是精度高,占用内存小,但缺点是计算速度较慢,对模型的适用性差,尤其是不适应于速度横向变化剧烈的模型.波动方程有限元法的做法是:将变分法用于单元分析,得到单元矩阵,然后将单元矩阵总体求和得到总体矩阵,最后求解总体矩阵得到波动方程的数值解;其主要优点是理论上可适宜于任意地质体形态的模型,保证复杂地层形态模拟的逼真性,达到很高的计算精度,但有限元法的主要问题是占用内存和运算量均较大,不适用于大规模模拟,因此该方法在地震波勘探中尚未得到广泛地应用。
相对于上述几种方法,有限差分法是一种更为快速有效的方法。
虽然其精度比不上有限元法,但因其具有计算速度快,占用内存较小的优点,在地震学界受到广泛的重视与应用。
声波方程的有限差分法数值模拟对于二维速度-深度模型,地下介质中地震波的传播规律可以近似地用声波方程描述:)()(2222222t S zu x u v t u +∂∂+∂∂=∂∂ (4-1) (,)v x z 是介质在点(x , z )处的纵波速度,u 为描述速度位或者压力的波场,)(t s 为震源函数。
为求式(4-1)的数值解,必须将此式离散化,即用有限差分来逼近导数,用差商代替微商。
为此,先把空间模型网格化(如图4-1所示)。
设x 、z 方向的网格间隔长度为h ∆,t ∆为时间采样步长,则有:z∆,i j1,i j +2,i j+1,i j-h i x ∆= (i 为正整数)h j z ∆= (j 为正整数)t n t =∆ (n 为正整数)k j i u , 表示在(i,j)点,k 时刻的波场值。
地震模型正演
地震模型正演与反演简介一、地震模型正演(seismic forward modeling)的概念如果我们已知地下的地质模型,它的地震响应如何?地震模型正演就是通过室内模拟得到地质模型对于地震波的响应。
地震模型正演包括物理模拟和数值模拟,数值模拟就是应用相应的地球物理方程和数值计算求解已知的地质模型在假定激发源的作用下的地震相应。
通常,我们针对特定的勘探区块,应用期望或实际的采集参数通过地震正演模拟野外地震采集,得到单炮记录,再通过速度分析、动校正、叠加、偏移等处理得到成像数据。
图1为Marmousi速度模型,图2为正演得到的炮集记录,图3为正演得到的叠加剖面。
图1 Marmousi模型图2正演炮集图3 正演叠加剖面二、数值模型正演方法通常,我们提到的模型正演为数值模拟的模型正演,目前常用的数值模拟地震模型正演方法包括基于射线原理的射线追踪法,以及基于波动方程的有限差分法、有限元法、积分方程法、快速傅里叶变换法和拟谱法等。
射线追踪法主要反映地震波的运动学特征,有限差分、有限元法则适合复杂地质构造的正演模拟,积分方程法涉及复杂的数学推导,快速傅里叶变换法在频率域计算得到正演数据。
三、数值模型正演的步骤数值模拟求解地震模型正演问题的步骤主要包括以下三个方面:1) 地质建模,根据研究对象和问题建立地球物理或地质模型;2) 数学建模,根据应用的物理手段和地球物理模型建立相应的数学模型;3) 模拟计算,选择正演计算方法,编写计算程序进行数值模拟计算。
四、什么是地震反演地震反演技术就是充分利用测井、钻井、地质资料提供的丰富的构造、层位、岩性等信息,从常规的地震剖面推导出地下地层的波阻抗、密度、速度、孔隙度、渗透率、沙泥岩百分比、压力等地球物理信息。
反演就是由地震数据得到地质模型,进行储层、油藏研究。
地震资料反演可分为两部分:1)通过有井(绝对)、无井(相对)波阻抗反演得到波阻抗、速度数据体。
2)利用测井、测试资料结合波阻抗、速度数据进行岩性反演,得到孔隙度、渗透率、砂泥百分比、压力等物理数据。
声波波动方程正演模拟分析研究
Δt
c
在数值计算中,生 成 的 强 边 界 反 射 会 对 中 心 波
其中:
σ0 =l
og
1
R
3
x
δ
2
(
11)
3Vp
,
R 是 理 论 反 射 系 数;
δ
2δ
是 PML 的厚 度;Vp 为 速 度;在 此 基 础 上 可 推 演 由
PML 边界条件进行交错网格的有限差分格式。
理论上,
PML 法对各种入射角和频率下的地震
弥散,产生数值频散现象 [9],严重影响正演模拟的精
度。为了减轻数值频散,通常可采用以下方式:① 调
整恰当的时间和空 间 离 散 步 长,尤 其 空 间 步 长 不 宜
过大过小,而时间步长相对越小越好,但会受到实际
计算效率的限制。 ② 通 过 提 高 差 分 阶 数,其 中 提 高
空间差分阶数易实 现 且 能 有 效 降 低 频 散,但 随 着 空
2023 年 7 月
第 13 期 总第 527 期
Ju
l
y2023
No.
13 To
t
a
lNo.
527
内 蒙 古 科 技 与 经 济
I
nne
r Mongo
l
i
aSc
i
enc
eTe
chno
l
ogy & Ec
onomy
声波波动方程正演模拟分析研究
朱晓洁
(中国石化胜利油田分公司海洋采油厂,山东 东营 257237)
波的吸收效果良好,吸 收 效 率 强 于 传 统 的 吸 收 边 界
条件法 [14]。因此在计算区域加入吸 收 边 界 后,可 以
基于边界元和离散元的地震波动方程正演模拟
标题:基于边界元和离散元的地震波动方程正演模拟一、引言地震波动方程正演模拟是地震学和岩土工程领域中的重要研究内容,它可以有效地模拟地震波在地下介质中的传播过程,对地震灾害的预测和防范具有重要意义。
在地震波动方程正演模拟中,边界元方法和离散元方法因其适用于不规则边界和非均质介质的特点而备受关注。
本文将从边界元和离散元两个方面深入探讨地震波动方程正演模拟的相关内容。
二、边界元法在地震波动方程正演模拟中的应用1. 边界元方法的基本原理边界元法是一种边界积分方程方法,它通过将求解区域的边界离散化,将问题转化为在边界上求解积分方程的方法,因此适用于不规则边界的地震波动方程正演模拟。
2. 地震波动方程正演模拟中的边界元法在地震波动方程正演模拟中,边界元法可以用于模拟地震波在地下介质中的传播过程,通过求解边界上的位移或应力边界条件,可以得到地震波在介质中的传播规律和能量分布情况。
3. 边界元法的优点和局限性边界元法能够有效地处理不规则边界和复杂地震波传播情况,但在处理非线性介质和大变形情况下存在一定的局限性,需要进一步改进和发展。
三、离散元法在地震波动方程正演模拟中的应用1. 离散元法的基本原理离散元法是一种数值模拟方法,它将介质离散为多个小单元,通过计算单元之间的相互作用来模拟地震波在介质中的传播过程,适用于非均质介质和复杂边界条件。
2. 地震波动方程正演模拟中的离散元法离散元法可以模拟地震波在非均质介质中的传播过程,包括波的折射、反射和散射等,对于研究地震波与岩土工程结构的相互作用具有重要意义。
3. 离散元法的优点和局限性离散元法对于非线性介质和大变形情况有较好的适用性,但在处理完全三维问题和计算效率方面存在一定的挑战,需要进一步改进和优化。
四、总结与展望地震波动方程正演模拟是地震学和岩土工程领域中的重要研究内容,边界元法和离散元法作为两种重要的数值模拟方法,在地震波动方程正演模拟中具有重要的应用前景。
从理论研究到工程应用,这两种方法在模拟地震波传播、地下介质响应和地震灾害预测方面都有着重要的意义。
叠前地震全波形反演实际应用的关键影响因素
叠前地震全波形反演实际应用的关键影响因素苗永康【摘要】Pre⁃stack seismic full waveform inversion ( FWI) is based on wave equation forward modeling technology to describe the propagation characteristics of seismic wave,using non⁃constrained iterative local optimization method to get high resolution inversion re⁃pared with other inversion methods,FWI uses pre⁃stack common shot gather to perform inversion,in which the seismic data are free of the process of stack and preserve the features of waveform parameters variation withoffset.The inversion result is no longer simple interface and traveltime information but depth⁃domain data volume which reflects formation velocity and structural characteristics,and this is helpful to the analysis and understanding of the geological body.In this paper,the technical advantages are analyzed in the aspect of pre⁃stack full waveform inversion methods,and the key technology to do a good job of pre⁃stack full waveform inversion is also ana⁃lyzed through syntheticdata.Furthermore,the technical advantages of pre⁃stack full waveform inversion are illustrated through inversion results in migration processing and its application in reservoir description of fluvial facies,and the existing difficulties and the future de⁃velopment direction of pre⁃stack seismic full waveform inversion are also analyzed,which will provide reference for further development and application of pre⁃stack seismic full waveform inversion.%叠前地震全波形反演是利用波动方程正演模拟来描述地震波传播特征,通过非线性局部寻优方法来获取高精度反演结果的方法。
地震正演模拟
水槽约1.6m×2m×1.2m
固体约1.6m×1.2m
叠加地震记录的相移波动方程正演模拟实验
<iii>由图(11)、图(12)和图(13)可知绕射点深度h决定图形出现的垂向位置,h越小越靠上(地面),越大越靠下,h在在一定范围内波形都比较完整!
4、其它模型的正演模拟结果分析。
答:<i>由同深度,两绕射点模型:图(6);同深度,三绕射点模型:图(7)
可知多绕射点时图形形状基本不变,遵从于叠加原理!在波形相交处出现明显亮斑,是干涉增强的原理!
<ii>同x不同深度,两绕射点模型图(14)同x不同深度,三绕射点模型:图(15)
由这两个图可知随深度的增加,图形的曲率在减小信号强度也在减小!
1、 基本要求:(1) 点绕射构造和水平层状速度模型(参数如图1所示)的正演数值模拟;
1) 削波的正演;
2) 无削波的震正演;
(2) 计算中点和两个边界的信号位置,分析实验结果的正确性;
(3) 做同样模型的褶积模型数值模拟,对比分析分析两者的异同。
(4) 改变绕射点位置、速度,再做正演模拟。
2、 较高要求:
使用雷克子波做爆炸源,对三个不同的主频:25hz、50hz和75hz分别做点绕射模型的正演模拟;
主频:25hz图(16)主频:50hz图(17)主频:75hz图(18)
设计复杂反射构造模型,再做正演模拟。
二层起伏地形时的结果图
深度Iz=1*Nz/5时图(19)
深度Iz=2*Nz/5时图(20)
深度Iz=3*Nz/5时图(21)
深度Izห้องสมุดไป่ตู้4*Nz/5时图(22)
五层水平层,不同层速度模型图(23)
三维波动方程正演及模型应用研究
三维波动方程正演及模型应用研究1熊晓军,贺振华,黄德济成都理工大学油气藏地质与开发工程国家重点实验室(610059)E-mail:xiongxiaojun@摘 要:为了真实准确地反映三维地质体的波场特征,在频率-波数域将二维波场延拓算子推广到三维空间,采用三维波动方程延拓方法实现了三维地质模型的快速叠后正演。
该方法采用傅立叶变换进行计算不仅计算迅速,算法稳定,而且可以采用相位移加插值方法处理一定的横向变速的情况,为更加灵活方便地模拟地下复杂的三维地质体提供了一种有效的工具。
作为实例,首先进行了三维French 模型的数值模拟,得到了和实际物理模型实验结果相一致的正演记录,并对比分析了三维偏移剖面和二维偏移剖面的偏移效果,验证了该方法的正确性和适用性。
然后进行了三维缝洞地质模型的正演计算,得到了高信噪比的正演记录,对认识和解释三维缝洞地质体的地震波场特征很有帮助。
关键词:三维地震正演,波动方程,波场延拓,French 模型,缝洞模拟1. 引 言在地震资料采集、处理和解释中通常要进行地震波场的数值模拟,即假设已知地下的地质情况,应用地震波的运动学和动力学的基本原理,计算给定地质模型的地震响应,其对正确认识地震波的运动学和动力学特征,以及准确地分析油气藏的反射波场特征有着重要的指导意义。
常规的正演方法主要有波动方程法和几何射线法两大类[1]。
几何射线法[2]将地震波波动理论简化为射线理论,主要考虑地震波传播的运动学特征,所得的地震波的传播时间比较准确,但是计算结果很难保持地震波的动力学特征,而且对复杂的地质构造会出现盲区。
波动方程法通过求解地震波波动方程,建立地下地震波运动的波场,它包含了地震波传播的所有信息,在地震模拟中占有重要地位。
目前,常规的波动方程正演方法,如有限差分法[3]、积分法[4]以及F-K 域[5]等方法,主要进行二维地质体的数值模拟,而实际的地下构造往往是三维的,因此,十分有必要研究基于三维地质体的数值模拟方法。
波动方程正演模型的研究与应用
波动方程正演模型的研究与应用郑鸿明* 娄 兵 蒋 立(新疆油田公司勘探开发研究院地物所)摘要野外采集的地震数据是经过大地滤波后的畸变信号,处理的地震剖面只是间接地反映了地下构造和地质体的特征,虽然目前有很多方法和手段可以分析并提取相关的地质信息,但由于处理对波场的改造和噪声的存在以及方法本身的多解性问题降低了识别地质信息的可靠性。
处理中每一步对有效信息的影响有多大,对地震属性解释的影响有多大,没有一个定量的标准,只能凭经验和认识来定性地判断。
正演模型在弹性波理论指导下,遵循严格的数学公式,可以最佳模拟地下各种情况。
各种处理方法和不同的处理流程所得到的结果能否符合或最佳逼近波动方程建立的数学模型,正演模型是判断处理工作合理性的良好准则。
主题词地质模型波动方程正演模型地震响应模块测试1 引 言随着地震勘探的不断深入,地震勘探也由构造型油气藏勘探进入精细的岩性勘探阶段,要求地震勘探能够反映地下地质体岩性变化,以及识别含油、气、水的地震响应特征,分辨薄互层、低幅度构造的能力。
地球物理学家们在长期的实践中已经研究开发了很多相关的技术,虽然理论上这些方法都能够成立,这些技术应用成功的实例也很多,但也不乏有失败的教训,往往产生多解性,或与钻探的结论不符。
这里除了复杂地表和复杂地下构造形成的复杂地震波场而不满足建立在简单地质模型处理理论的因素外,与处理过程对地震波场的改造也有很大关系。
从地震数据的采集到最终处理的地震剖面,整个过程是一个系统工程,地下地质结构、地质体的岩性变化以及含流体的性质,对处理人员来说是看不见、摸不着的“黑匣子”,我们所看到的只是经过大地滤波后产生畸变的地震波场,如何从这个畸变的地震波场中去伪存真、恢复真实的构造形态、提取储层的相关地震属性信息,这是岩性处理的最终目标。
处理中的每一步环环相扣、相互影响、相互制约,而我们对处理中的每一步产生的中间结果所应达到的标准只是凭经验、感觉进行定性判定,加入了很多人为因素,这些因素或多或少影响着我们对解释成果的正确认识。
负向构造塌陷体的地震正演模拟——以塔河油田为例
负向构造塌陷体的地震正演模拟——以塔河油田为例何成江;张慧涛【摘要】位于塔里木盆地沙雅隆起阿克库勒凸起西南部的塔河油田的外扩评价揭示了负向构造区也存在油气富集区,而在地震处理与解释上,负向构造塌陷体的缝洞成像与识别难度大.通过建立垮塌岩溶储层空间分布的地质构造模型,并利用全波场交错网格差分算法开展正演模拟研究.结果表明,负向构造岩溶塌陷在正演地震剖面上的反射具有表层“下凹”、内幕串珠状及同相轴“短小”的特征,与围岩特征存在着明显的差异,与塌陷体实际的地震剖面吻合度较高;利用叠前深度偏移能够更加准确地对溶洞塌陷形成的强反射进行归位,可较为准确地成像地下岩溶系统,通过正演地震成果可指导负向构造塌陷体的识别,对进一步开展岩溶塌陷体识别与刻画具有重要意义.【期刊名称】《天然气勘探与开发》【年(卷),期】2016(039)003【总页数】5页(P21-24,40)【关键词】负向构造;塌陷体;全波场交错网格差分算法;地质模型;正演模拟;地震反射;塔里木盆地;塔河油田【作者】何成江;张慧涛【作者单位】西南石油大学;中国石化西北油田分公司勘探开发研究院;中国石化西北油田分公司勘探开发研究院【正文语种】中文塔河油田奥陶系碳酸盐岩缝洞型油藏发育于塔里木盆地沙雅隆起阿克库勒凸起的西南部,储集空间主要为溶蚀孔洞、大型洞穴和溶蚀裂缝,其中洞穴和孔洞的储集性能最好,各类岩溶储集体的空间展布具有极强的非均质性,空间形态极不规则且发育规模悬殊,故其缝洞体的预测识别难度大[1-3]。
在塔河油田的开发过程中,基于“古潜山”岩溶圈闭概念,通过准确识别“残丘”大型隆起的有利特征,实现了碳酸盐岩阿克库勒凸起轴部的高效开发。
随着开发对象向岩溶沟谷、洼地等负向构造区扩展,油田单井产能逐年降低,动用风险不断增大。
近年来塔河油田在外扩评价过程中揭示了局部岩溶沟谷、洼地区存在较大规模的岩溶塌陷缝洞,部分井获得高产油气,证实此类负向构造区也存在油气富集。
相移法波动方程正演在复杂构造分析中的应用
相移法波动方程正演在复杂构造分析中的应用地震勘探和天然地震中已经广泛的应用地震理论,相应的,地震模拟技术也逐渐出现在地震勘探中,在地震勘探中,地震波场的数值算法和地震波正演也成为地震学家研究的一个前沿领域,文章介绍了一些正演模拟方法,包括几何射线法、积分方程法、波动方程法。
文章主要讨论波动方程法以及求解波动方程的一些方法。
主要讨论相移法波动方程正演在复杂构造分析中的应用。
标签:数值模拟;法波动方程;复杂构造引言油气勘探区向着复杂地质条件方向发展,地下地质条件也越来越复杂。
在地震剖面上容易形成许多与真实构造不相符或偏离真实位置的假象。
相移法波动方程正演模拟作为一种技术方法,能够帮助解释人员正确认识地下地质构造,直观而有效地解决地震剖面中假象给解释工作带来的困扰。
近年来,随着勘探技术的发展,我们对地下地质构造的信息也要求得越来越精准,与此同时,要解决的地质问题也越来越困难,针对复杂地区的勘探问题,国内外许多地球物理学家对地震波在复杂介质中的传播问题进行了研究,针对波动方程正演的计算方法不断涌现,如有限差分法、差分方程法、频率波数域方程法、相移法等。
文章主要研究内容为相移法波动方程正演,与射线追踪法同属于数值模拟正演方法,射线追踪法是基于惠更斯原理与斯奈尔定律,反映波的运动学特征,而波动方程法是基于弹性理论和牛顿力学,反映波的动力学特征,两者相较而言,波动方程法能更加丰富的波场信息。
1 相移法波动方程正演原理震源机制模拟将地下反射界面当作具有爆炸性的物质或爆炸源,爆炸源的形态和位置与反射界面的形态和位置一致(图1),它所产生的波为脉冲,其强度、极性与界面反射系数的大小和正负一致。
并且假定在t=0时刻,所有的爆炸反射界面同时起爆,发射上行波到地面观测点,波的传播速度为v/2。
若用波动方程式将爆炸反射界面产生的波向上延拓到地面观测点加以记录,这种记录就是所求的正演信号。
根据爆炸反射界面原理,将上行波场延拓到地表所得记录就是相移法波动方程正演的结果。
波动方程正演模型及应用
波动方程正演模型及应用吴清岭 张 平 施泽龙3(大庆石油管理局勘探开发研究院)摘 要 地震资料解释经常用到正演模型。
常规的褶积模型不能模拟地震波的动力学特征。
本文采用声波方程,通过四阶有限差分近似,实现了复杂地质构造零炮检距的数值模拟。
文中同时展示了实际应用效果。
主题词 正演模型 有限差分 零炮检距剖面作者简介 吴清岭,男,1962年生,1983年毕业于华东石油学院勘探系,硕士,高级工程师,现从事地震方法研究工作。
地址:(163712)黑龙江省大庆市让胡路区勘探开发研究院。
3 参加本工作的还有杨有林同志。
在地震资料解释中,人们力图得到能够保持地震波的运动学与动力学特征的波动方程正演模型,以达到精确模拟地震波传播特性的目的。
在求解波动方程的2种数值解法(有限差分法和有限元法)中,有限差分法是一种快速有效的方法,并且地质模型的复杂程度不影响运算速度。
本文介绍了对声波方程采用四阶有限差分近似制作零炮检距剖面的基本过程及应用效果。
一、基本原理1,计算公式在二维空间域内,二维声波方程为1C 292u 9t 2=92u 9x 2+92u9z 2式中 C ———声学介质下地震波的纵波速度;u ———声压。
设Δh 为空间采样步长;Δt 为时间采样步长;m 、n 、l 分别为正整数;则有x =m ・Δh z =n ・Δh t =l ・Δt 对时间域采用二阶有限差分;对空间域采用四阶有限差分(推导过程略),其数值计算公式为u (m ,n ,l +1)=(A 2/12){16[u (m +1,n ,l )+u (m -1,n ,l )+u (m ,n +1,l )+u (m ,n -1,l )]-[u (m +2,n ,l )+u (m -2,n ,l )+u (m ,n +2,l )+u (m ,n -2,l )]}+(2-5A 2)[u (m ,n ,l )-u (m ,n ,l -1)]其中 A 2=C 2(m ,n )Δt 2/Δh 2式中 C (m ,n )———介质速度的空间离散值;Δt ———时间离散步长;Δh ———空间离散步长。
地震资料数字处理课件 6---起伏地表波动方程法叠前深度偏移
基于波动方程定基准面 (Berry Hill, 1979,1984) 的层替代技术一即在进 行波场向上外推时,用 某一层的下伏介质速度 代替该层的速度,以消 除该层与下伏层之间因 速度差异而引起的波动 传播射线的弯曲。
图2 (a)上覆层与下伏层之间的速度差使射线在 在两者之间的界面上折曲。 (b)用下伏层速度 代替上覆层速度消除射线的折曲。
{ 波动方程法: 傅里叶有限差分(FFD)法 分步富里叶(SSF)法 广义屏(PS)法
存在的问题
随着地震勘探的不断发展,油气勘探的重点正转向复杂 地表条件和复杂地质条件的区域:如山地勘探,滩海、沼泽 地区勘探。山地等复杂地表地区的地震资料叠前深度偏移技 术,已受到人们的高度重视。我国东部陆地油气勘探程度的 日趋饱和,促使我国油气勘探的战略重点也正在向西部地形 复杂地区转移,这对地震勘探工作提出了新的挑战。要做好 叠前深度偏移,达到预想的效果,就必须解决好以下几个问 题:(1)基准面问题。现有的偏移程序,大都建立在激发点 和接收点位于同一个水平面上,这与我们需要进行叠前深度 偏移处理地区的实际观测条件不相符合。(2)静校正问题: 叠前深度偏移也是一个叠加的过程,从运动学的概念上来,
解决的办法
要实现从起伏观测面直接进行深度偏移,必须首先 用射线追踪或层析成像法反演出近地表速度再进一步利 用这种速度作深度偏移,替代的一种方法先用近地表速 度作波场延拓,转化到一个平滑的基准面,再用现有的 方式作深度偏移。目前,国内外都在极力研究这个问题。 准确的方法是先用初至层析法求出近地表速度建立起近 地表速度模型,将此速度模型合并到整个总的模型中, 从起伏观测面直接进行深度偏移。
这个基准面上。然后从这个水平基准面开始做常规的偏移。 由于插入的虚拟层的速度值很小,在使用波动方程深度外 推算子进行波场外推时,地震波在这个层中几乎是直上直 下的传播,其横向传播可以忽略不计,即用波动方程的方 式“抵消了”高程校正的时移,当到达实际地层时则恢复 正 常运算。“零速层”的最大优点在于无须对偏移算法做任 何 改动,就可以实现从非水平观测面偏移的过程,达到消除 复杂地表对地下构造的影响的目的。 以二维波动方程为例说明这项技术的基本理论。
地球物理正演与反演
反演理论方法
稀疏脉冲法原理
稀疏脉冲反演假定实 际反射可以认为是由 一系列大脉冲里夹杂 有小脉冲背景.
稀疏脉冲反演假定 只 有大脉冲有意义.该方 法通过检查地震道来 寻找大脉冲的位置.
稀疏脉冲法
反演理论方法
稀疏脉冲法原理
稀疏脉冲反演 每次建立反射序列 为一个脉冲. 增加 脉冲直到地震道 被足够准确地进 行反演
PY地震剖面与地质模型
速度分析
CDP叠加
PY地质模型与其地震响应
为什要进行地震反演?
• 在时间域中的褶积就 是频率域中的乘积.
• 从右图中可以看出,子 波的作用是将地震频 谱中高频和低频都消 除了.
• 理论上讲,反演就是试 图将这些失去的频率 区域进行恢复.
为什要进行地震反演?
低频 测井资料中所包含的频带范围 高频 地震资料中所包含的频带范围
• Tesseral 2-D 包含四个主要的功能块: • Model builder — 模型建立器 • Computation Engine — 计算引擎 • Viewer — 浏览器 • Processing Block — 处理软件包
正演理论方法
• 地震正演过程
如果我们已知地下的地质模型,它的地震 响应如何?通过模拟野外地震采集,得到单炮 记录,再通过速度分析、动校正、叠加、偏移 得到合成剖面这一过程就是正演。
反演理论方法
• 递推法与稀疏脉冲反演法主要是利用反褶积方 法来恢复反射系数序列,由经过标定的反射系 数序列递推出相对波阻抗,然后加上从声波测 井和地质模型中得到的低频分量,最终得到反 演波阻抗。这两类方法的主要缺陷是选择可靠 低频信息较为困难,由反射系数递推波阻抗过 程中误差积累快,当反射系数存在较大误差时, 递推出来的波阻抗剖面会面貌全非。
波动方程正演在地震勘探设计中的应用_丁大伟
为 入 射 角 ,θ2为 透 射 角 ,v1为 入 射 波 波 速 ,v2为 透 射 波 波
速,V反为反射波单位向量,V透为透射波单位向量。其中,透
射角由Snell定律直接计算,公式如下:
θ2=sin-(1
v2sinθ1) v1
三、应用效果对比
(一)小断块发育的复杂构造区岩性勘探实例分析
某区块小断裂发育,地层破碎,储层砂体薄,地表过大 型障碍区,如何能够得到好的小断层,识别薄砂体,同时,
坠τxz =μ( 坠vx + 坠vz )
坠t
坠z 坠x
其中:τxx=τx(x x,z,t),τzz=τz(z x,z,t),τxz=τx(z x,z, t)是应力张量;ρ=ρ(x,z)是密度;vx=v(x x,z,t),vz=v(z x,z, t)是速度向量;λ=λ(x,z),μ=μ(x,z)是拉梅系数。
【教法研究】
波动方程正演在地震勘探设计中的应用
丁大伟1,柳 溪2,李 宏2
(1.河北涿州石油物探学校,河北 涿州 072750; 2.华北油田地球物理勘探研究院,河北 任丘 062552)
摘要:随着地震勘探程度的提高,勘探难度逐渐增加,勘探精度要求越来越高,针对地质目标的采集方法研究越来
越重要,利用现有的地震资料,结合地震反演建立合理的地质模型,运用波动方程正演技术设计地震勘探采集方法,研
坠 坠z
( ρ1
坠ρ 坠z
)=
1 K
坠2ρ 坠t2
+f(x,z,t)δ
(x-x0,z-z0)
在三维空间域内,声波方程为:
坠坠x(ρ1 坠坠ρx )+ 坠坠y(ρ1 坠坠ρy )+ 坠坠z(ρ1
坠坠ρz )=
1 K
坠2ρ 坠t2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本科生实验报告实验课程数值模型模拟学院名称地球物理学院专业名称勘测技术与工程(石油物探)学生姓名学生学号指导教师熊高君实验地点5417实验成绩2015年5月成都理工大学《地震数值模拟》实验报告实验报告一、实验题目叠加地震记录的相移波动方程正演模拟二、实验目的掌握各向同性介质任意构造、水平层状速度结构地质模型的相移波动方程正演模拟基本理论、实现方法与程序编制,由正演记录初步分析地震信号的分辨率。
三、原理公式1、地震波传播的波动方程设(x,z)为空间坐标,t为时间,地震波传播速度为v(x,z),则二维介质中任意位置、任意时刻的地震波场为p(z,x,t):压缩波——纵波。
则二维各向同性均匀介质中地震波传播遵循的声波方程:ð2p(x,z,t)ðx2+ð2p(x,z,t)ðz2=1v2(x,z)ð2p(x,z,t)ðt2(1)2、傅里叶变换的微分性质p(t)与其傅里叶变换的P(ω)的关系:{P(ω)=∫p(t)e−iωt dt∞−∞正傅里叶变换p(t)=12π∫P(ω)e iωt dt∞−∞逆傅里叶变换(2)则有时间微分性质:{ (iω)P (ω)=∫dp (t )dt e −iωt dt ∞−∞ 一阶微分 (iω)2P (ω)=∫d 2p (t )dt 2e −iωt dt ∞−∞二阶微分 (3) ω为频率,ω=2πT ⁄,T 为周期。
同理有空间微分性质:{ (ik)P (k )=∫dp (x )dx e −ikx dx ∞−∞ 一阶微分 (ik)2P (k )=∫d 2p (x )dx 2e −ikx dx ∞−∞二阶微分 (4) k 为波数,k=2πλ⁄, λ为波长 3、地震波传播的相移外推公式令速度v 不随x 变化,只随z 变化,则利用傅里叶变换微分性质(3)和(4)式,把波动方程(1)式变换到频率‐波数域,得:(ik )2P (k,z i ,ω)+ð2P(k,z,ω)ðz 2=(iω)2v (z )2P(k,z,ω) 或:ð2P(k,z,ω)ðz 2=−(ω2v (z )2−k 2)P (k,z,ω) (5) 令:k z 2=ω2v (z )2−k 2 则(5)式的解为: P (k,z,ω)=c 1e −ik z z +c 2e ik z z (6)包括上行波和下行波两项,正演模拟取上行波:P (k,z,ω)=c 1e −ik z z (7)若Z j和Z j+1间隔为∆z,速度v(z)为在此间隔内不随Z变的常数,(7)式实现波场从Z j+1到Z j的延拓,即:P(k,z j,ω)=c1e−ik z∆z在深度Z j+1开始向上延拓到Z j,若延拓深度为零,即:∆Z=Z j+1−Z j,则P(k,z j=z j+1,ω)=c1e−ik z(z j+1−z j)=ce−ik z×0=c (8)对于任意深度Z j+1到Z j的延拓,可得正演模拟中地震波的传播方程(延拓公式P(k,z j,ω)=P(k,z j+1,ω)c1e−ik z(z j+1−z j) (9)4、初始条件和边界条件按照爆炸界面理论,反射界面震源在t=0 时刻同时起爆,此时刻的波场就是震源。
根据不同情况,可直接使用反射系数脉冲或子波作震源。
如果直接使用反射系数作震源脉冲,则初始条件可表示为:r(x,z) t=0p0(x,z,t)={(10)0 t=其他p0(x,z,t)对时间t和空间x做二维傅立叶变换,则得频率-波数域的初始波场p0(k,z,ω)。
边界条件:p0(x,z,t)=r(x,z) t=0,x min<x<x max,z min<z<z max{(11)0 t=其他,x=其他,z=其他其他参数都是在x min<x<x max,z min<z<z max范围内定义的。
5、边界处理(1)边界反射问题把实际无穷空间区域中求解波场的问题化为有穷区域求解时,左右两边使用零边界条件。
物理上假设探区距X min与X max两个端点很远,在两个端点上收到的反射波很弱。
但是,上述条件在实际中不能成立,造成零边界条件反而成为绝对阻止波通过的强反射面。
在正演模拟的剖面上出现了边界假反射干涉正常界面的反射。
(2)边界强反射的处理镶边法、削波法、吸收边界都能有效消除边界强反射。
削波法就是在波场延拓过程中,每延拓一次,在其两侧均匀衰减到零,从而消除边界强反射的影响。
假设横向总长度为NX ,以两边Lx 道吸波为例,有以下吸波公式:{Abs (Nx −Ix )=Abs (Ix )=√sin (π2×Lx Lx−1) 0<=Ix <Lx Abs (Ix )=1. Ix =其它 (12) 6、数字化根据数字信号处理的采样定理,把连续的信号变为计算机能处理的数字信号,使相移法正演模拟得以实现。
频域抽样定理:一个频谱受限信号 f(t),如果时间只占据 −t m −t m 的范围,若在频域以不大于 1/2t m 频率间隔 ∆f ≤1/2t m 对信号f(t)的频谱F(ω)采样,则抽样到的离散信号 F 1(ω) 可以唯一表示原信号。
时域抽样定理:一个时间受限信号 f(t),如果频谱只占据−ωm −ωm 的范围,则信号 f(t)可以用等间隔的抽样值唯一表示出来,而时间 ∆t 抽样间隔必须不大于1/2f m ,ωm =2πf m ,∆t =1/2f m 。
四、实验内容削波法相位移正演模拟(1)点绕射构造和水平层状速度模型(参数如图1所示)的正演数值模拟;1)削波的正演;2)无削波的正演;(2)计算中点和两个边界的信号位置,分析实验结果的正确性;(3)做同样模型的褶积模型数值模拟,对比分析两者的异同;(4)改变绕射点位置、速度,图1 点绕射构造与水平速度模型再做正演模拟;五、方法路线1、参数初始化;2、形成边界削波数据;3、波场初始化;3、Zmax层波场延拓到深度Zmax-1;5、Zi+1层波场延拓到深度Zi;6、重复5,从Iz=Nz-1开始,直到Iz=1,得测线上的频率—空间域波场;7、频率-空间域波场对频率做反傅里叶变换,得时间-空间波场;8、使用Fimage软件显示所得结果。
六、实验结果1、结果显示及分析(点绕射结构)图2 削波(左)正演模拟结果与未削波正演模拟结果(右)由图2分析可知:削波前,由于在两个端点上收到的反射波很弱,造成零边界条件反而成为绝对阻止波通过的强反射面,在正演模拟的剖面上出现了边界假反射干涉正常界面的反射。
削波后,边界假反射的影响消除了,且曲线变得更光滑了。
a、速度V1=5000、V2=5500,深度h=2000时,改变绕射点x的位置;图3 x=Nx/4-1时,反射系数(左)与削波正演模拟结果(右)图4 x=Nx/2-1时,反射系数(左)与削波正演模拟结果(右)由图3与图4对比分析可知:当速度,深度一定时,改变绕射点的位置,曲线随绕射点位置的改变而左右移动,且移动趋势与绕射点位置的移动一致。
b 、绕射点x=Nx/2-1,深度h=2000 ,速度V 2=5500时,改变速度V 1;图5 V 1=4000时,速度模型(左)与削波正演模拟结果(右)V 1=4000V 2=5500图6 V1=6000时,速度模型(左)与削波正演模拟结果(右)由图5与图6对比分析可知:当绕射点位置固定,深度一定时,随着介质速度增大,曲线变得越平缓。
这是由于速度增大时,波的传播时间减小所致。
c、速度V1=5000、V2=5500,绕射点x=Nx/2-1,改变深度h;图7 h=1000时,反射系数(左)与削波正演模拟结果(右)V2=5500 V1=6000图8 h=3000时,反射系数(左)与削波正演模拟结果(右)由图7与图8对比分析可知:当介质速度一定,绕射点位置不变时,随着绕射点深度的增加,曲线变得越来越平滑。
显然是由于深度变大,波的传播时间变小所致。
2、结果分析(水平层速度模型)图9 未削波(左)正演模拟结果与削波正演模拟结果(右)由图9分析可知:削波前,由于在两个端点上收到的反射波很弱,造成零边界条件反而成为绝对阻止波通过的强反射面,在正演模拟的剖面上出现了边界假反射干涉正常界面的反射。
削波后,边界假反射的影响消除了,且曲线变得更光滑了。
a 、深度h=2000 ,速度V 2=5500时,改变速度V 1;图10 V 1=4000时,速度模型(左)与削波正演模拟结果(右)图11 V 1=6000时,速度模型(左)与削波正演模拟结果(右)由图10与图11对比分析可知:水平层深度不变时,随着速度的增加,结果显示的水平层向上移动。
这是由于速度增大时,波的传播时间减小的。
V 1=4000V 2=5500V 2=5500V 1=6000b、速度V1=5000、V2=5500,改变深度h;图12 h=1000时,反射系数(左)与削波正演模拟结果(右)图13 h=3000时,反射系数(左)与削波正演模拟结果(右)由图12与图13对比分析可知:当波的传播速度不改变时,随着水平层深度的增加,结果显示的水平层向下移动。
这是由于深度增加,波的传播时间增大。
七、讨论建议1、实验收获通过本次实验,对叠后相移波动方程正演模拟的过程有了更深入的理解,以及对其公式和意义都有了进一步的认识。
编程能力又有了一定提高。
2、存在问题图14 x=3*Nx/4-1时,反射系数(左)与削波正演模拟结果(右)如图14,当速度,深度一定时,绕射点位置x=3*Nx/4-1,其反射系数不能用Fimage正确显示,由显示的削波正演模拟结果可知,使用削波函数并未起到削波的作用。
3、心得体会本次实验,并不容易。
在实验中,必须要理解理论知识,才能够正确的编写程序。
在实验过程中,遇到许多问题,通过和同学讨论,向老师求解,最终才得出实验结果。
在以后的学习工作中,当一个人的力量不够时,要积极和其他人求教,共同学习,共同进步。
附程序代码:#include <stdlib.h>#include <conio.h>#include <math.h>#include <stdio.h>#include <string.h>#define Nx 128 // Trace Number#define Nt 256 // Record Number#define Nz 100 // Depth Number#define Labs 10 // Length Of Boundary Absorbing#define Dx 20 // Trace Interval#define Dt 0.004 // Record Interval#define Dz 20 // Depth Interval#define Pai 3.1415926//function01: Judge the power of 2int Po2Judge(int N){int k=0;long Ln=0;for(k=0;N-Ln>0;k++)Ln=(long)pow(2,k);Ln=(long)pow(2,k-1);if(fabs(Ln-N)>=1)return(0);return(1);}//function02: Absorb Bounderyint Absorb( ){FILE *fp_Abs;int Ix;float Abs[Nx];if((fp_Abs=fopen("Absb.dat","wb"))==NULL)printf("Connot open file ""Absb""");for(Ix=0;Ix<Nx;Ix++)Abs[Ix]=1.0;//1.Absorb Boundary Initializing ?for(Ix=0;Ix<Labs;Ix++){Abs[Ix]=sqrt(sin((Pai/2)*Ix/(Labs-1)));Abs[Nx-Ix-1]=Abs[Ix];//2.Absorb Boundary Compute?}for(Ix=0;Ix<Nx;Ix++)fwrite(&Abs[Ix],sizeof(Abs[Ix]),Nx,fp_Abs);//3.Byte Number of fclose(fp_Abs);return(1);}//function03: Form Reflect Structure Modelint Rflct( ){FILE *fp_Rflct;int Ix,Iz;float Rflct[Nz];if((fp_Rflct=fopen("Rflct.dat","wb"))==NULL)printf("Connot open file ""Reflection""");for(Ix=0;Ix<Nx;Ix++){for(Iz=0;Iz<Nz;Iz++){Rflct[Iz]=0.;if(Ix==Nx/4-1&&Iz==Nz/2-1) Rflct[Iz]=1;fwrite(&Rflct[Iz],sizeof(Rflct[Iz]),1,fp_Rflct);//4.}}fclose(fp_Rflct);return(1);}//function04: Form Velocity Modelint Vlcty( ){FILE *fp_Vlcty;int Ix,Iz;float Vlcty[Nz];if((fp_Vlcty=fopen("Vlcty.dat","wb"))==NULL)printf("Connot open file ""Vlcty""");for(Ix=0;Ix<Nx;Ix++){for(Iz=0;Iz<(int)(3*Nz/4);Iz++){Vlcty[Iz]=5000.;fwrite(&Vlcty[Iz],sizeof(Vlcty[Iz]),1,fp_Vlcty);//5.}for(Iz=(int)(3*Nz/4);Iz<Nz;Iz++){Vlcty[Iz]=5500.;fwrite(&Vlcty[Iz],sizeof(Vlcty[Iz]),1,fp_Vlcty);//6.}}fclose(fp_Vlcty);return(1);}//Fourier Transform: FFT(i=0) or IFFT(l=1)int kkfft(float pr[], float pi[], int n, int l){int it,m,is,i,j,nv,l0,il=0;float p,q,s,vr,vi,poddr,poddi;float fr[4096],fi[4096];int k=0;long Ln=0;for(k=0;n-Ln>0;k++){Ln=(long)pow(2,k);}k=k-1;for (it=0; it<=n-1; it++){m = it;is = 0;for(i=0; i<=k-1; i++){j = m/2;is = 2*is+(m-2*j);m = j;}fr[it] = pr[is];fi[it] = pi[is];}pr[0] = 1.0;pi[0] = 0.0;p = 6.283185306/(1.0*n);pr[1] = (float) cos(p);pi[1] = -(float)sin(p);if (l!=0)pi[1]=-pi[1];for (i=2; i<=n-1; i++){p = pr[i-1]*pr[1];q = pi[i-1]*pi[1];s = (pr[i-1]+pi[i-1])*(pr[1]+pi[1]);pr[i] = p-q;pi[i] = s-p-q;}for (it=0; it<=n-2; it=it+2){vr = fr[it];vi = fi[it];fr[it] = vr+fr[it+1];fi[it] = vi+fi[it+1];fr[it+1] = vr-fr[it+1];fi[it+1] = vi-fi[it+1];}m = n/2;nv = 2;for (l0=k-2; l0>=0; l0--){m = m/2;nv = 2*nv;for(it=0; it<=(m-1)*nv; it=it+nv)for (j=0; j<=(nv/2)-1; j++){p = pr[m*j]*fr[it+j+nv/2];q = pi[m*j]*fi[it+j+nv/2];s = pr[m*j]+pi[m*j];s = s*(fr[it+j+nv/2]+fi[it+j+nv/2]);poddr = p-q;poddi = s-p-q;fr[it+j+nv/2] = fr[it+j]-poddr;fi[it+j+nv/2] = fi[it+j]-poddi;fr[it+j] = fr[it+j]+poddr;fi[it+j] = fi[it+j]+poddi;}}if(l!=0){for(i=0; i<=n-1; i++){fr[i] = fr[i]/(1.0*n);fi[i] = fi[i]/(1.0*n);}}if(il!=0){for(i=0; i<=n-1; i++){pr[i] = sqrt(fr[i]*fr[i]+fi[i]*fi[i]);if(fabs(fr[i])<0.000001*fabs(fi[i])){if ((fi[i]*fr[i])>0)pi[i] = 90.0;elsepi[i] = -90.0;}elsepi[i] = atan(fi[i]/fr[i])*360.0/6.283185306;}}for(i=0;i<n;i++){pr[i]=fr[i];pi[i]=fi[i];}return ( 1 );}//function05: Form Inition Wave Field: Reflect Coefficiency //int WvFld0(){FILE *fp_Rflct,*fp_Wfld0r,*fp_Wfld0i;int Ix,Iz,It;float Rflct[Nz];float Wfld0r[Nt],Wfld0i[Nt];if((fp_Wfld0r = fopen("Wfld0r.dat","wb"))==NULL)printf("Connot open Wfld0r.dat");if((fp_Wfld0i = fopen("Wfld0i.dat","wb"))==NULL)printf("Connot open Wfld0i.dat");if((fp_Rflct = fopen("Rflct.dat", "rb"))==NULL)printf("Connot open Rflct.dat");for(Ix=0;Ix<Nx;Ix++){for(Iz=0;Iz<Nz;Iz++){fread(&Rflct[Iz],sizeof(Rflct[Iz]),1,fp_Rflct);for(It=0;It<Nt;It++){Wfld0r[It]=0.0;//7Wfld0i[It]=0.0;//8.Initial Wave field Initializing: }Wfld0r[0]=Rflct[Iz];//9.Initial Wave field Initializingif( kkfft(Wfld0r,Wfld0i,Nt,0 ) !=1 )//10.FFT or Inver FFT?{printf("FFT is error");exit(0);}for(It=0;It<Nt/2+1;It++)//{fwrite(&Wfld0r[It],sizeof(Wfld0r[It]),1,fp_Wfld0r);//11fwrite(&Wfld0i[It],sizeof(Wfld0i[It]),1,fp_Wfld0i);//12}}}fclose(fp_Rflct);fclose(fp_Wfld0r);fclose(fp_Wfld0i);return(1);}// Function06.1.1: Read In Velocity Data and Absorb Boundary Data int ReadVlctyAbsb(float Vlcty[],float Absb[]){FILE *fp_Vlcty,*fp_Absb;int Iz,Ix;if((fp_Vlcty = fopen("Vlcty.dat", "rb")) ==NULL)printf("Connot open Rflct.dat" );for(Iz=0;Iz<Nz;Iz++){fread(&Vlcty[Iz],sizeof(Vlcty[Iz]),1,fp_Vlcty);//19.}fclose(fp_Vlcty);if((fp_Absb = fopen("Absb.dat", "rb")) ==NULL)printf("Connot open Absb.dat" );for(Ix=0;Ix<Nx;Ix++){fread(&Absb[Ix],sizeof(Absb[Ix]),1,fp_Absb);//20.}fclose(fp_Absb);remove("Absb.dat");return(1);}// 06.1.2.1: Read Data From (Ix,Iz,Iw)Oder to (Iw,Iz,Ix)Oderint ReadIxIzIwToIwIzIx(FILE *fp_Wfld0r,FILE *fp_Wfld0i,floatWfld0r[],float Wfld0i[],int Iz,int Iw){int Ix,Nw=Nt;long Mgrtn;for(Ix=0;Ix<Nx;Ix++){Mgrtn=(Ix*Nz+1+Iz)*(Nt/2+1)+Iw;//25.fseek(fp_Wfld0r, sizeof(Wfld0r[Ix])*Mgrtn,0);//26fread(&Wfld0r[Ix],sizeof(Wfld0r[Ix]),1,fp_Wfld0r); //27fseek(fp_Wfld0i, sizeof(Wfld0i[Ix])*Mgrtn,0);//28fread(&Wfld0i[Ix],sizeof(Wfld0i[Ix]),1,fp_Wfld0i); //29. }return(1);}// 06.1.2: Form New Wave Fieldint FrmNewWfld(FILE *fp_Wfld0r,FILE *fp_Wfld0i,float Wfldr[],float Wfldi[],float Absb[],int Iz,int Iw){int ReadIxIzIwToIwIzIx(FILE *fp_Wfld0r,FILE *fp_Wfld0i,float Wfld0r[],float Wfld0i[],int Iz,int Iw);int Ix,Nw=Nt;float Wfld0r[Nx],Wfld0i[Nx];if(ReadIxIzIwToIwIzIx(fp_Wfld0r,fp_Wfld0i,Wfld0r,Wfld0i,Iz,Iw)!= 1){printf("exp_ikzDz is error");exit(0);}for(Ix=0;Ix<Nx;Ix++){Wfldr[Ix]+=Wfld0r[Ix];//21.Wfldi[Ix]+=Wfld0i[Ix];//22.Wfldr[Ix]=Wfldr[Ix]*Absb[Ix];//23.Wfldi[Ix]=Wfldi[Ix]*Absb[Ix];//24.}return(1);}// 06.1.3.1: Compute out PhaseShift Dataint exp_ikzDz(float eikzdz[],int Ix,float Vc,int Iw,float Dw,float Dkx) {float kz;eikzdz[0] = 0.;eikzdz[1] = 0.;kz =sqrt(pow(Iw*Dw/Vc,2)-pow(Ix*Dkx,2));//38.if(kz >0.0)//39.{eikzdz[0] = (float)cos(kz*Dz);//40.eikzdz[1] = (float)sin((-1)*kz*Dz);//41.}return(1);}// 06.1.3: Extrapolate One Depth Stepint MoveOneDz(float Wfldr[],float Wfldi[],float Vz,float Dkx,float Dw,int Iw){int Ikx,Nkx=Nx;float kz[2],Wfld_r,Wfld_i;if(kkfft(Wfldr,Wfldi,Nx,0)!=1 ) //30{printf("FFT is error");exit(0);}for(Ikx=0;Ikx<Nkx/2+1;Ikx++) //31.{if( exp_ikzDz(kz,Ikx,Vz,Iw,Dw,Dkx) !=1 ){printf("exp_ikzDz is error");exit(0);}Wfld_r =kz[0]*Wfldr[Ikx]-kz[1]*Wfldi[Ikx];//32Wfld_i =kz[0]*Wfldi[Ikx]+kz[1]*Wfldr[Ikx];//33Wfldr[Ikx] = Wfld_r;Wfldi[Ikx] = Wfld_i;if((Ikx!=0)&&(Ikx!=Nkx/2))//34{Wfld_r =kz[0]*Wfldr[Nkx-Ikx]-kz[1]*Wfldi[Nkx-Ikx];//35.Wfld_i =kz[0]*Wfldi[Nkx-Ikx]+kz[1]*Wfldr[Nkx-Ikx];//36.Wfldr[Nkx-Ikx] = Wfld_r;Wfldi[Nkx-Ikx] = Wfld_i;}}if(kkfft(Wfldr, Wfldi,Nkx,1) !=1 )//37.{printf("FFT is error");exit(0);}return(1);}//function06.1: PhaseShift calculateint PhaseShift( ){int ReadVlctyAbsb(float *,float *);int FrmNewWfld(FILE *,FILE *,float *,float *,float *,int,int);int MoveOneDz (float *,float *,float,float,float,int);FILE *fp_Wfldr,*fp_Wfldi,*fp_Wfld0r,*fp_Wfld0i;int Ix,Iz,Iw,Nw=Nt;float Vlcty[Nz],Absb[Nx];float Wfldr[Nx],Wfldi[Nx];float Dkx,Dw;Dkx=(float)(Pai/Dx)/Nx;//13.Dw =(float)(Pai/Dt)/Nt;//14.if(ReadVlctyAbsb(Vlcty,Absb)!=1){printf("ReadVlctyAbsb Error");exit(0);}if((fp_Wfld0r = fopen("Wfld0r.dat","rb")) ==NULL)printf("Connot open Wfld0r.dat");if((fp_Wfld0i = fopen("Wfld0i.dat","rb")) ==NULL)printf("Connot open Wfld0i.dat");if((fp_Wfldr = fopen("Wfldr.dat", "wb")) ==NULL)printf("Connot open Wfldr.dat" );if((fp_Wfldi = fopen("Wfldi.dat", "wb")) ==NULL)printf("Connot open Wfldi.dat" );for(Iw=0;Iw<Nw/2+1;Iw++){printf("Iw=%d\n",Iw);for(Ix=0;Ix<Nx;Ix++){Wfldr[Ix]=0.0;//15.Wfldi[Ix]=0.0;//16}for(Iz=Nz-1;Iz>0;Iz--){if( FrmNewWfld(fp_Wfld0r,fp_Wfld0i,Wfldr,Wfldi,Absb,Iz,Iw)!=1) {printf("FrmNewWfld Error");exit(0);}if(MoveOneDz(Wfldr,Wfldi,(float)(Vlcty[Iz]/2.),Dkx,Dw,Iw)!=1) {printf("WfldMoveOneStep Error");exit(0);}}for(Ix=0;Ix<Nx;Ix++){fwrite(&Wfldr[Ix],sizeof(Wfldr[Ix]),1,fp_Wfldr);//17 fwrite(&Wfldi[Ix],sizeof(Wfldi[Ix]),1,fp_Wfldi);//18 }}fclose(fp_Wfld0r); remove("Wfld0r.dat");fclose(fp_Wfld0i); remove("Wfld0i.dat");fclose(fp_Wfldr); fclose(fp_Wfldi);return(1);}// Function03: Wave Field Fourier Transform From Frequency Domain to Time Domainint Frqcy2Time( ){FILE *fp_Wfldr,*fp_Wfldi;FILE *fp_Record;int Ix,It,Iw,Nw=Nt;float Wfldtr[Nt],Wfldti[Nt];long AddFrmStrt;if((fp_Wfldr = fopen("Wfldr.dat", "rb"))==NULL){printf("Connot open Wfldr.dat" );exit(0);}if((fp_Wfldi = fopen("Wfldi.dat", "rb"))==NULL){printf("Connot open Wfldi.dat" );exit(0);}if((fp_Record = fopen("Record.dat", "wb"))==NULL){printf("Connot open Record.dat");exit(0);}for(Ix=0;Ix<Nx;Ix++){for(Iw=0;Iw<Nw/2+1;Iw++)//42.{AddFrmStrt=Iw*Nx+Ix;//43fseek(fp_Wfldr, sizeof(Wfldtr[Iw])*AddFrmStrt,0);//44fread(&Wfldtr[Iw],sizeof(Wfldtr[Iw]), 1,fp_Wfldr); //45fseek(fp_Wfldi, sizeof(Wfldti[Iw])*AddFrmStrt,0);//46fread(&Wfldti[Iw],sizeof(Wfldti[Iw]), 1,fp_Wfldi); //47if((Iw!=0)&&(Iw!=Nw/2)) //48.{Wfldtr[Nw-Iw]=Wfldtr[Iw]; //49.Wfldti[Nw-Iw]=-Wfldti[Iw]; //50.}}if(kkfft(Wfldtr,Wfldti,Nw,1)!=1) //51.{printf("FFT is error");exit(0);}for(It=0;It<Nt;It++){fwrite(&Wfldtr[It],sizeof(Wfldtr[It]),1,fp_Record);//52.}}fclose(fp_Wfldr); remove("Wfldr.dat" );fclose(fp_Wfldi); remove("Wfldi.dat" );fclose(fp_Record);return(1);}//function06: PhaseShift Forward Modelingint PsFrwd( ){int PhaseShift( );int Frqcy2Time( );if( PhaseShift( ) !=1 ){ printf("PhaseShift is error\n"); exit(0); } if( Frqcy2Time( ) !=1 ){ printf("Frqcy2Time is error\n"); exit(0); } return(1);}void main( ){if( Po2Judge(Nt) !=1 ){ printf("Nt=%d is not the Power of 2\n",Nt); exit(0); } if( Po2Judge(Nx) !=1 ){ printf("Nx=%d is not the Power of 2\n",Nx); exit(0); }if( Absorb( ) !=1 ) { printf("Absorb is error\n"); exit(0); } if( Rflct( ) !=1 ) { printf("Rflction is error\n"); exit(0); } if( Vlcty( ) !=1 ) { printf("Vlcty is error\n"); exit(0); }if( WvFld0( ) !=1 ) { printf("WvFld is error\n"); exit(0); } if( PsFrwd( ) !=1 ) { printf("PsFwrd is error\n"); exit(0); } }。