1. 以下の説明で用いる記号
(Notation used in the description below)
軸を鉛直下向きに取り、深さにおける速度を、
波線が軸となす角をとする。
速度の定義点の深さを、
それらの深さでの速度をとする。
このとき
である。 ()における速度勾配を
とする。またにおける速度勾配を、
における速度勾配をとする。
波線パラメータを
とする。
We assume the axis to lie downward,
and and be
the velocity and the angle between the ray and the axis, respectively.
We assume the velocities to be given at
depths of , suggesting eq. ().
Let () be
the velocity slope in
given by eq. (),
and and be the velocity slopes
in and , respectively.
We denote the ray parameter by , which satisfies eq. ().
以上の記号とプログラムで用いている変数との関係は
下表の通りである。
The table below represents the relation between
the notation in this documentation and variables in the program code.
本マニュアルでの記号
Notation in this documentation
プログラム中の記号
Variables in the program code
structure.N
()
structure.depths[n-1]
()
structure.velocities[n-1]
structure.slope_shallow
structure.slope_deep
p
2. 波線の最大到達深度
(The maximum depth of the ray)
波線の最大到達深度はとなるとして定義される。
()式より、この条件は
と等価である。
, という条件を付けていることで
は0からまでの全範囲の値を取るので、
どのような波線パラメータについても
()式を満たすが最低1つは存在することが保証される。
()式の解が複数存在する場合は
その中の一番小さいを波線の最大到達深度と見なす。
なぜならば、ひとたび角度が90°になったら
それ以上深くは潜れないからである。
The maximum depth of the ray is defined as
the solution of ,
which is equivalent to eq. () because of eq. ().
Since and ,
takes all values from 0 to ,
which ensure that at least one solution of eq. () exists
for an arbitrary ray parameter.
When two or more solutions of eq. () exists,
the smallest among these solutions is adopted as the maximum depth
because once the angle becomes 90°,
the ray does not go deeper.
波線の最大到達深度は関数ray_max_depth_1Dscalarにおいて
以下の3つのケースに場合分けして計算される。
The maximum depth of the ray
is computed by function ray_max_depth_1Dscalar
switching for the following three cases.
のとき、()式の最小解はの範囲にある。
この範囲の速度は
と表され、この関係を()式に代入してについて解くと
が得られる。
When , the minimum solution of eq. ()
lies in a region .
The velocity in this region is represented by eq. (),
and inserting this relation into eq. ()
and solving for gives eq. ().
となる最初のが()のとき、
()式の最小解はの範囲にある。
この範囲の速度は
と表され、この関係を()式に代入してについて解くと
が得られる。
When first occurs for , where ,
the minimum solution of eq. ()
lies in a region .
The velocity in this region is represented by eq. (),
and inserting this relation into eq. ()
and solving for gives eq. ().
いかなるについてものとき、
()式の最小解はの範囲にある。
この範囲の速度は
と表され、この関係を()式に代入してについて解くと
が得られる。
When for all ,
the minimum solution of eq. ()
lies in a region .
The velocity in this region is represented by eq. (),
and inserting this relation into eq. ()
and solving for gives eq. ().
3. 速度が深さの1次関数で表される2つの深さの間の
波線に沿った水平距離・実距離・走時
(Horizontal distance, travel distance,
and travel time along the ray
from one depth to another between which
the velocity is a linear function of depth)
2つの深さ, ()があり、
の範囲では
速度が深さの1次関数(速度勾配)で与えられているとする。
また、波線の最大到達深度はの範囲にあるものとする。
この場合にを出発した波線が最初にに到達するまでの
波線に沿った水平距離および実距離と走時を求めることを考える。
Let and be two depths (), between which
the velocity is a linear function of depth with the slope ,
We assume the maximum depth of the ray to be .
Then, let us calculate the horizontal and travel distances
as well as the travel time along the ray
as it travels from and first reaches .
3.1. 水平距離
(Horizontal distance)
一般に、深さにおいて波線が微小距離だけ深さ方向に進むときの
水平方向距離は
と表される。この関係は()式を用いると
と変形できるので、これをからまで積分することにより、
水平距離の計算式として
を得る。
In general, the horizontal distance along the ray
as it moves a small vertical distance at a depth
is given by eq. ().
Inserting eq. () into () results in (),
and integrating this equation from to gives ()
as the formula for the horizontal distance.
この積分を実行するにあたり、の範囲で
がの1次関数で書けることを利用する。
, とおき、
速度勾配がであることを用いると
と積分を解析的に計算できる。
Now, remember that is a linear function
of in the range.
Using , , and the velocity slope ,
the integral of eq. () can be analytically calculated
as eq. ().
()式はのときに0/0の不定値になってしまう。
これを避けるため、であることを用いて変形を行うと
を得る。
この式ならばの場合も適用可能であり、
()式で(定数)とおいて直接得られる式と一致する。
Eq. () gives 0/0 when .
This problem is avoided by arranging the equation as (),
where was used.
Eq. () is applicable to the case of ,
and is consistent with the direct result from eq. ()
assuming (constant).
関数ray_horizontal_distance_1Dscalar_linearでは
()式を用いて水平距離の計算を行う。
Function ray_horizontal_distance_1Dscalar_linear computes
the horizontal distance using eq. ().
3.2. 実距離
(Travel distance)
深さにおいて波線が微小距離だけ深さ方向に進むとき、
水平方向を考慮に入れた波線に沿った微小距離は
と表される。()式を代入すると
となる。これをからまで積分すれば、
を出発した波線が最初にに到達するまでの波線に沿った実距離は
と書ける。
The total distance along the ray
as it moves a small vertical distance at a depth
is given by eq. ().
Inserting () into () results in ().
Integrating this equation from to yields ()
as the formula for the travel distance of the ray
that propagates from the depth to .
この積分を実行するにあたり、の範囲で
がの1次関数で書けることを利用する。
, とおき、
速度勾配がであることを用いると
と変形できる。更に, とおき、
の変数変換を施すと
となり、積分を解析的に計算できる。
Now, remember that is a linear function of
in the range.
Using , , and the velocity slope ,
the integral of eq. ()
can be arranged as ().
Further converting the integral variable from to
using a relation ,
with defining and ,
the integral can be analytically calculated.
The result is ().
()式はのときに0/0の不定値になってしまう。
これを避けるため、であることを用いて変形を行うと
となる。とした極限では
となり、このとき
よりとなって
波線を直線にした場合の式と一致する。
Eq. () gives 0/0 when .
This problem is avoided by arranging the equation as ().
At the limit of ,
asymptotic behaviours
and () hold,
thus giving ,
which is consistent with the direct result assuming a straight ray.
関数ray_travel_distance_1Dscalar_linearでは
()式を用いて波線に沿った実距離の計算を行う。
Function ray_travel_distance_1Dscalar_linear computes
the travel distance along the ray using eq. ().
3.3. 走時
(Travel time)
深さにおいて波線が微小距離だけ深さ方向に進むとき、
水平方向を考慮に入れた波線に沿った微小距離は()で表される。
この微小距離を進むのにかかる時間は
と書ける。これをからまで積分すれば、
を出発した波線が最初にに到達するまでの所要時間は
と書ける。
The total distance along the ray
as it moves a small vertical distance at a depth
is given by eq. ().
The time needed for the wave to propagate by this distance is given by
eq. ().
Integrating this equation from to yields ()
as the formula for the travel time of the ray
that propagates from the depth to .
この積分を実行するにあたり、の範囲で
がの1次関数で書けることを利用する。
, とおき、
速度勾配がであることを用いると
と変形できる。更に, とおき、
の変数変換を施すと
となり、積分を解析的に計算できる。
Now, remember that is a linear function of
in the range.
Using , , and the velocity slope ,
the integral of eq. ()
can be arranged as ().
Further converting the integral variable from to
using a relation ,
with defining and ,
the integral can be analytically calculated.
The result is ().
()式はの場合に0/0の不定値になってしまう。
また0/0が現れない形に変形するのも容易ではない。
そこで、()式において
とした極限での振る舞いを考える。
そのために関数
を定義するのが便利である。この関数の微分形は
と書ける。関数を用いると()式は
と書けるので、の極限では
となる。これは()式においてをによらない定数と見なして
積分した形になっている。
ここでは速度が深さの線形関数で書ける場合を考えているのであるから
の極限では速度は定数となる。
したがって()式でとした極限
()が
()式でを定数と見なした場合の式と一致するのは
妥当な結果である。
Eq. () yields 0/0 when ,
and arranging this equation to avoid 0/0 is difficult.
Thus, let us consider an approximate form of eq. ()
at the limit of .
A function defined by eq. () is convenient for this purpose.
Differential forms of this function are given by
eqs. (), (), and ().
Using this function, the travel time is given by (),
yielding ()
at the limit of .
This equation is equivalent to the expression obtained by ()
assuming that is not dependent on .
Remember that our formulation here assumed
a linear velocity change with depth.
Thus the limit means a constant velocity.
It is therefore reasonable that
the limit of eq. () at ,
given by (),
is equivalent to the expression obtained by assuming a constant velocity
in eq. ().
ところでプログラミングでは一般に2つの実数の等号比較は不安定の原因であり、
のときとそうでないときで場合分けするのは良いコードとは言えない。
ある幅を持たせてとが十分に近い場合とそうでない場合で場合分けする方が
より安定な計算ができる。
そのためにはがと「完全には一致しないが十分近い」場合に成り立つ
近似式が必要になる。
そこで、をのまわりでテイラー展開して3次の項まで残すと
と書ける。このとき()式より
となり、()-()を代入して
を得る。この最後の項を無視できる条件は
であり、共通因子を消去すると
整理して
を得る。この条件が成り立つとき、()式の
最後の項を無視した近似式
を利用できる。
In the computer programs, two real numbers should not be compared
by an equal sign because it would result in a numerical instability.
Thus branching based on whether or not is not a good code.
Rather, the branching should be based on whether
and are sufficiently close or not.
To implement this branching, an approximated equation for the travel time
that is valid when and are
``sufficiently close to each other but not exactly same'' is needed.
We now derive this equation.
A Taylor expansion of with respect to ,
remaining until the 3rd-order term, results in eq. ().
Using this relation, eq. ()
reduces to (),
and inserting eqs. ()-() into it gives
().
The final term of this equation can be neglected when
() holds.
Removing the common factors
from the both hand sides of ()
results in (),
which can further be arranged as ().
When this condition is met,
it is valid to neglect the final term of (),
resulting in ().
()式と()式の比較の例を
図1に示す。
ここでは()式に基づいて計算した走時を
、
()式に基づいて計算した走時を
、
()式の左辺を右辺で割った値を
とする。
理論上はであれば近似が成り立ち、
の値が小さいほど理論上の近似精度が良い。
またと
が近いほど
実際の近似精度が良い。
これらを比較することで、実際にがどの程度小さければ
がどれくらい良い近似になるのかを評価できる。
図1cはと近似式の誤差
との関係を示したものであり、であれば
近似式の誤差はのオーダーになることが分かる。
この誤差レベルは波線パラメータや層厚にも依存すると思われるので、
プログラムでは安全側に余裕を見てのときに
近似式を用いるようにしている。
Fig. 1 is a comparison of the travel times
computed by eqs. () and ().
Here,
and are
the travel times based on
eqs. () and (), respectively,
and is the ratio of left- to right-hand-side
of eq. ().
The approximation is theoretically valid when ;
theoretically, the smaller the , the better the approximation.
The real precision of the approximation is evaluated by comparing
and .
In Fig. 1c,
a relation between the theoretical goodness
of the approximation ()
and the real goodness of the approximation
()
is shown, indicating that a value of results in
a travel time error in order of by the approximation.
This error level may depend on the ray parameter
and the layer thickness .
To have a margin for the safety side,
the program switches the exact and approximate equations
at .
図1. m, m,
s m, m s
のときの()式と()式の比較。
を1800 m sから2200 m sまで
0.1 m s刻みで動かして計算した。
(a)との関係。
赤線は()式による厳密解、
青線は()式による
近似解。
(b)と理論上の近似精度との関係。
この値が小さいほど理論上の近似精度が良い。
(c)と
との関係。
Fig. 1. A comparison of travel times computed by
eqs. () and ()
for a case of m, m, s m,
m s, and moving
from 1800 m s to 2200 m s at an interval of 0.1 m s.
(a) A relation between and .
The red and blue lines represent
the exact solution
from eq. ()
and an approximate form
based on eq. (), respectively.
(b) A relation between and .
The value of represents
a theoretical goodness of the approximation;
smaller values correspond to better approximations.
(c) A relation between and
.
4. 速度定義点をまたぐ2つの深さの間の波線に沿った水平距離
(Horizontal distance along the ray
between two depths over a velocity definition point)
前節ではにおいて速度が深さの1次関数で表される場合を考えた。
これはの範囲に速度定義点が存在しない状況に対応する。
の範囲に速度定義点が含まれる場合、その地点で速度勾配が変わる。
このようなケースではの範囲を速度定義点で小区間に分割し、
それらの小区間ごとに()式を適用すれば良い。
In the previous section, the velocity was assumed to be a linear function
in the range, which corresponds to a situation where
there is no velocity definition point in this range.
If the velocity definition points are present in ,
the velocity slope changes at these points.
In this case, eq. () is applicable to
subsections bounded by the velocity definition points.
いま、よりも深部側のに最も近い速度定義点を、
よりも浅部側のに最も近い速度定義点をとする。
の間に少なくとも1つの速度定義点が含まれる状況を考えれば
となる。
このとき、水平距離は
となる。この式の個々の項(など)は
()式によって計算できる。
Let and be the nearest velocity definition points
downward from and upward from , respectively.
When at least one velocity definition point exists in ,
holds.
In this case, the horizontal distance is calculated by
eq. ().
Individual terms in this equation (, etc.)
can be calculated with eq. ().
関数ray_horizontal_distance_1Dscalarでは
()式と()式を組み合わせて
水平距離の計算を行う。
Function ray_horizontal_distance_1Dscalar
computes the horizontal distance
using eqs () and ().