-
Notifications
You must be signed in to change notification settings - Fork 0
Home
q1qip123 edited this page Jul 24, 2020
·
7 revisions
STFlow是一個用來做三維震波層析成像的DSL。震波層析成像是個用來求得地表下結構的技巧,根據使用資料、處理過程的不同可以再進一步細分。 震波層析成像在給予速度模型的情況下,使用有限差分法(Finite Difference)求得預測走時(Travel Time)。將預測走時與測站收到的觀測走時相減得到走時殘差(Residual),並且利用走時殘差去逆推(Inversion)地球內部速度構造。
STFlow在設計上,必須以TomographyBuilder()當作開頭,然後必需要依序呼叫method:
- Environment()
- Event()
- Station()
- VelocityModel() 我們必須傳入給這些method,STFlow規定的元件,如下列程式碼:
TomographyBuilder() \
.Environment(environment) \
.Event(event) \
.Station(station) \
.VelocityModel(velocitModel3D) \
.execute(mode = 'Seq', count = 1)
而為了要讓STFlow更多的表達方式,我們希望一個method可以被替換成其它method。因此我們以元件間的相關性當作依據,判定一個method可不可以再進一步展開。
舉例來說,速度模型(velocityModel)可以被座標(coordinate)及一維速度模型(velocityModel1D)建構而成,因此我們在使用上,VelocityModel()這個method就可以改寫成Coordinate()、ReferenceModel()。
不過在使用上,我們仍然需要呼叫VelocityModel(),但是不需要給予他參數,而是給予Coordinate()、ReferenceModel()需要的資料(coordinate、velocityModel1D)即可。
這樣是希望使用者可以知道這些method之間的關係,在撰寫上時如果發生錯誤,像是method的順序發生顛倒,相對容易發現錯誤的地方,如下列程式碼:
TomographyBuilder() \
.Environment(environment) \
.Event(event) \
.Station(station) \
.VelocityModel() \
.Coordinate(coordinate) \
.ReferenceModel(velocityModel1D) \
.execute(mode = 'Seq', count = 1)
# 在使用上,各個method的參數並不一定只有一個,如下列範例,而具體每個method要傳入那些參數,在side_bar的參數(arguements)作說明
TomographyBuilder() \
.Environment(environment) \
.Event(event) \
.Station(station) \
.VelocityModel(CoarseVpModel3D, CoarseVsModel3D, fineVpModel3D, fineVsModel3D) \
.execute(mode = 'Omp', count = 1)