內(nèi)容摘要:在番外篇1的時候幢妄,我們曾經(jīng)談到了Tesseroid的單元定義着裹。但是沒有提到怎么生成該單元的網(wǎng)格。該類型網(wǎng)格單元可以直接采用經(jīng)緯度坐標來剖分瑰妄,對于解決大尺度的問題更方便陷嘴,因此我們說說網(wǎng)格生成批處理方法,TesseroidMesh類的使用间坐。
1灾挨、Tesseroid網(wǎng)格
在Geosit中的inversion模塊mesh.py里的TesseroidMesh類邑退,實現(xiàn)了Tesseroid單元的自動網(wǎng)格剖分。在球坐標系下劳澄,Tesseroid形式的單元地技,直接經(jīng)緯度剖分網(wǎng)格即可,不用變換為直角坐標秒拔。這對大尺度模型解釋時候常常是有用的莫矗,圖1是該網(wǎng)格的示意圖。
2砂缩、網(wǎng)格數(shù)據(jù)生成
在Geoist中作谚,inversion模塊下geometry.py定義了各種幾何單元類型,mesh.py是以不同單元剖分網(wǎng)格的批處理類實現(xiàn)庵芭。已經(jīng)實現(xiàn)的幾種類型見下表妹懒。
單元 | 網(wǎng)格 | 類型 |
---|---|---|
Prism | PrismMesh | 六面體 |
Tesseroid | TesseroidMesh | 球面六面體 |
Prism | PrismRelief | 起伏界面 |
Square | SquareMesh | 2D正方形 |
Sphere | PointGrid | 點源-球體 |
實例化后的網(wǎng)格對象,都可以通過addprop的方法添加屬性双吆。同時眨唬,如果需要得到這個網(wǎng)格對象中每個單元的幾何屬性,也可以使用for循環(huán)通過遍歷實現(xiàn)(for cell in mesh: ...)伊诵。
下面是定義一個TesseroidMesh单绑,并添加每個單元屬性的過程。具體代碼如下:
from geoist import gridder
from geoist.pfm import giutils
from geoist.inversion import mesh
w, e = -2, 2
s, n = -2, 2
bounds = (w, e, s, n, 500000, 0)
x, y = gridder.regular((w, e, s, n), (50, 50))
height = (250000 +
-100000 * giutils.gaussian2d(x, y, 1, 5, x0=-1, y0=-1, angle=-60) +
250000 * giutils.gaussian2d(x, y, 1, 1, x0=0.8, y0=1.7))
mesh = mesh.TesseroidMesh(bounds, (20, 50, 50))
mesh.addprop('density', (2670 for i in range(mesh.size)))
mesh.carvetopo(x, y, height)
一句話總結(jié):今天以TesseroidMesh入手曹宴,簡單總結(jié)了一下場源剖分常用的單元定義和離散化(網(wǎng)格)剖分方法。地球物理以場求源的過程中歉提,經(jīng)常需要將場源進行離散化處理笛坦,進一步計算格林函數(shù)矩陣,然后再求解苔巨,以上這些內(nèi)容都非嘲胬基礎(chǔ),萬丈高樓平地起侄泽,明白原理和邏輯后礁芦,很快你就可以寫出非常優(yōu)秀的代碼啦。