Skip to content
q1qip123 edited this page Jul 24, 2020 · 7 revisions

Inroduction

STFlow是一個用來做三維震波層析成像的DSL。震波層析成像是個用來求得地表下結構的技巧,根據使用資料、處理過程的不同可以再進一步細分。 震波層析成像在給予速度模型的情況下,使用有限差分法(Finite Difference)求得預測走時(Travel Time)。將預測走時與測站收到的觀測走時相減得到走時殘差(Residual),並且利用走時殘差去逆推(Inversion)地球內部速度構造。

How to use

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)作說明

Example :

TomographyBuilder() \
    .Environment(environment) \
    .Event(event) \
    .Station(station) \
    .VelocityModel(CoarseVpModel3D, CoarseVsModel3D, fineVpModel3D, fineVsModel3D) \
    .execute(mode = 'Omp', count = 1)
Clone this wiki locally