関数calculate_traveltime_2layers_inclined3D マニュアル

(The documentation of function calculate_traveltime_2layers_inclined3D)

Last Update: 2021/12/6


◆機能・用途(Purpose)

層境界が一定角度で傾いた2層構造のもとで2地点を結ぶ走時を計算する。 層境界の傾きと2地点の位置を3次元で与えるバージョン。
Calculate the travel time between two points in a medium of two layers separated by an inclined boundary that has a constant slope. The slope and two point locations are given in 3D.


◆形式(Format)

#include <ray/calculateLayered.h>
inline double ∗calculate_traveltime_2layers_inclined3D
(const double x1,const double y1,const double z1,
 const double x2,const double y2,const double z2,
 const double v1,const double v2,
 const double ref_xb,const double ref_yb,const double ref_zb,
 const double slope_x,const double slope_y)


◆引数(Arguments)

x1 走時を計算する一方の地点の\(x\)座標(\(x_1\); 水平方向)。
The \(x\)-coordinate (\(x_1\); horizontal) of one point for the travel time calculation.
y1 \(x_1\)に対応する地点の\(y\)座標(\(y_1\); 水平方向)。
The \(y\)-coordinate (\(y_1\); horizontal) of the point corresponding to \(x_1\).
z1 \(x_1\)に対応する地点の標高(\(z_1\))。
The elevation (\(z_1\)) of the point corresponding to \(x_1\).
x2 走時を計算する他方の地点の\(x\)座標(\(x_2\))。
The \(x\)-coordinate (\(x_2\)) of the other point for the travel time calculation.
y2 \(x_2\)に対応する地点の\(y\)座標(\(y_2\); 水平方向)。
The \(y\)-coordinate (\(y_2\); horizontal) of the point corresponding to \(x_2\).
z2 \(x_2\)に対応する地点の標高(\(z_2\))。
The elevation (\(z_2\)) of the point corresponding to \(x_2\).
v1 第1層の速度(\(v_1\))。
The velocity (\(v_1\)) of the 1st layer.
v2 第2層の速度(\(v_2\))。
The velocity (\(v_2\)) of the 2nd layer.
ref_xb 層境界の標高が定義されている地点の\(x\)座標(\(x_b^{ref}\))。
The \(x\)-coordinate (\(x_b^{ref}\)) of the point where the elevation of the layer boundary is defined.
ref_yb 層境界の標高が定義されている地点の\(y\)座標(\(y_b^{ref}\))。
The \(y\)-coordinate (\(y_b^{ref}\)) of the point where the elevation of the layer boundary is defined.
ref_zb \((x_b^{ref}, y_b^{ref})\)における層境界の標高(\(z_b^{ref}\))。
The elevation (\(z_b^{ref}\)) of the layer boundary at \((x_b^{ref}, y_b^{ref})\).
slope_x 層境界の\(x\)方向の傾き\({\theta}_x\)(°)。 \(x\)の値を増やしたときに標高が高く(浅く)なる場合に正。
The slope \({\theta}_x\) (°) of the layer boundary in the \(x\)-direction; positive when the elevation increases (i.e., the boundary becomes shallower) as the \(x\)-coordinate increases.
slope_y 層境界の\(y\)方向の傾き\({\theta}_y\)(°)。 \(y\)の値を増やしたときに標高が高く(浅く)なる場合に正。
The slope \({\theta}_y\) (°) of the layer boundary in the \(y\)-direction; positive when the elevation increases (i.e., the boundary becomes shallower) as the \(y\)-coordinate increases.


◆戻り値(Return value)

面\(S\)よりも上で速度\(v_1\)、面\(S\)よりも下で速度\(v_2\)の 2層から成る媒質を介して \((x_1, y_1, z_1)\)から\((x_2, y_2, z_2)\)まで波が伝搬するのに要する時間。 ここで面\(S\)は \[\begin{equation} z=z_b^{ref}+\tan({\theta}_x)(x-x_b^{ref})+\tan({\theta}_y)(y-y_b^{ref}) \label{eq.S} \end{equation}\] で定義する。
The travel time of the wave propagating from \((x_1, y_1, z_1)\) to \((x_2, y_2, z_2)\) through a 2-layer medium for which the velocity is \(v_1\) and \(v_2\) below and above a plane \(S\), respectively. Here, the plane \(S\) is defined by eq. (\ref{eq.S}).


◆使用例(Example)

double T=calculate_traveltime_2layers_inclined3D
     (0.0,0.0,0.0,1000.0,2000.0,0.0,2000.0,5000.0,0.0,0.0,-500.0,10.0,5.0);


◆計算方法(Computation method)

\((x_1, y_1, z_1)\)から\((x_2, y_2, z_2)\)に向かうベクトルを 境界面\(S\)に投影した方向に\(x’\)軸、 \(S\)上でそれに直交する方向に\(y’\)軸、 境界面\(S\)に直交する方向(上向き)に\(z’\)軸を取り、 \((x’, y’, z’)\)座標系で走時を考えれば良い。
Let \(x’\)-axis be the direction from \((x_1, y_1, z_1)\) to \((x_2, y_2, z_2)\) projected onto the plane \(S\), \(y’\)-axis be orthogonal to it on \(S\), and \(z’\)-axis be orthogonal to the plane \(S\) (upward). Then the travel time can be computed along the \((x’, y’, z’)\) coordinate system.

まず\(z’\)軸の方向ベクトルを求める。 (\ref{eq.S})式は \[\begin{equation} -\tan({\theta}_x)(x-x_b^{ref})-\tan({\theta}_y)(y-y_b^{ref})+(z-z_b^{ref})=0 \label{eq.S.arrange1} \end{equation}\] と変形できるので、ベクトル形式で \[\begin{equation} \begin{bmatrix} -\tan({\theta}_x), & -\tan({\theta}_y), & 1 \end{bmatrix} \cdot \left\{ \begin{bmatrix} x \\ y \\ z \end{bmatrix} - \begin{bmatrix} x_b^{ref} \\ y_b^{ref} \\ z_b^{ref} \end{bmatrix} \right\}=0 \label{eq.S.vector} \end{equation}\] と書ける。 \((x_b^{ref}, y_b^{ref}, z_b^{ref})\)は\(S\)上の1つの点であり、 \((x, y, z)\)は\(S\)上の任意の点であるので、 \([x, y, z]^{T}-[x_b^{ref}, y_b^{ref}, z_b^{ref}]^{T}\) は\(S\)に平行な任意のベクトルを表す。 したがって(\ref{eq.S.vector})式が意味するところは \([-\tan({\theta}_x), -\tan({\theta}_y), 1]^{T}\)が \(S\)に平行な任意のベクトルと直交するということであり、 このことから面\(S\)の法線ベクトル(すなわち\(z’\)軸の方向ベクトル)は \[\begin{equation} \myvector{e_{z’}}=\frac{1}{L_{z’}} \begin{bmatrix} -\tan({\theta}_x) \\ -\tan({\theta}_y) \\ 1 \end{bmatrix} \label{eq.ezdash} \end{equation}\] \[\begin{equation} L_{z’}=\sqrt{\tan^2({\theta}_x)+\tan^2({\theta}_y)+1} \label{eq.Lzdash} \end{equation}\] と表されることが分かる。
To implement this idea, let us derive the direction vector of \(z’\). Eq. (\ref{eq.S}) is arranged as (\ref{eq.S.arrange1}), which can further be rewritten in the vector format as (\ref{eq.S.vector}). Since \((x_b^{ref}, y_b^{ref}, z_b^{ref})\) is on \(S\) and \((x, y, z)\) is an arbitrary point on \(S\), \([x, y, z]^{T}-[x_b^{ref}, y_b^{ref}, z_b^{ref}]^{T}\) represents any vectors parallel to \(S\). Therefore eq. (\ref{eq.S.vector}) means that the vector \([-\tan({\theta}_x), -\tan({\theta}_y), 1]^{T}\) is orthogonal to any vectors parallel to \(S\). Therefore the normal vector of \(S\) (i.e., the direction vector along \(z’\)) is calculated by eqs. (\ref{eq.ezdash}) and (\ref{eq.Lzdash}).

次に\(x’\)軸の方向ベクトルを求める。 面\(S\)を\((x_1, y_1, z_1)\)を通るように平行移動した面を\(S_1\)とする。 \(S_1\)上の任意の点\((x, y, z)\)は \[\begin{equation} \begin{bmatrix} -\tan({\theta}_x), & -\tan({\theta}_y), & 1 \end{bmatrix} \cdot \left\{ \begin{bmatrix} x \\ y \\ z \end{bmatrix} - \begin{bmatrix} x_1 \\ y_1 \\ z_1 \end{bmatrix} \right\}=0 \label{eq.S1.vector} \end{equation}\] を満たす。何故ならば\((x_1, y_1, z_1)\)から\((x, y, z)\)に向かうベクトルが 上で求めた\(z’\)軸の方向と直交するからである。 (\ref{eq.S1.vector})を展開すると \[\begin{equation} -\tan({\theta}_x)(x-x_1)-\tan({\theta}_y)(y-y_1)+(z-z_1)=0 \label{eq.S1} \end{equation}\] となる。いま、\((x_2, y_2, z_2)\)からこの面\(S_1\)に投影した点を \((x_2^p, y_2^p, z_2^p)\)とおくと \[\begin{equation} -\tan({\theta}_x)(x_2^p-x_1)-\tan({\theta}_y)(y_2^p-y_1)+(z_2^p-z_1)=0 \label{eq.xyz2p.onS1} \end{equation}\] が成り立つ。\((x_2^p, y_2^p, z_2^p)\)と\((x_2, y_2, z_2)\)の間の距離は \[\begin{equation} d_2=\sqrt{(x_2^p-x_2)^2+(y_2^p-y_2)^2+(z_2^p-z_2)^2} \label{eq.d2} \end{equation}\] と書ける。(\ref{eq.xyz2p.onS1})の条件を満たしつつ \((x_2, y_2, z_2)\)からの距離\(d_2\)を最小にする点が 投影地点\((x_2^p, y_2^p, z_2^p)\)である。 したがって\((x_2^p, y_2^p, z_2^p)\)はラグランジュの未定乗数法により \[\begin{eqnarray} {D’}_2 &=& (x_2^p-x_2)^2+(y_2^p-y_2)^2+(z_2^p-z_2)^2 \nonumber \\ & & +\lambda [-\tan({\theta}_x)(x_2^p-x_1)-\tan({\theta}_y)(y_2^p-y_1)+(z_2^p-z_1)] \label{eq.D2dash} \end{eqnarray}\] を最小化することによって求められる。 ここで\(\lambda\)は未定乗数である。 \({D’}_2\)を最小化する条件を書き下すと \[\begin{equation} \PartialDiff{{D’}_2}{x_2^p}=2(x_2^p-x_2)-\lambda\tan({\theta}_x)=0 \hspace{1em} \therefore x_2^p=x_2+\frac{\lambda\tan({\theta}_x)}{2} \label{eq.D2dash.min.x2p} \end{equation}\] \[\begin{equation} \PartialDiff{{D’}_2}{y_2^p}=2(y_2^p-y_2)-\lambda\tan({\theta}_y)=0 \hspace{1em} \therefore y_2^p=y_2+\frac{\lambda\tan({\theta}_y)}{2} \label{eq.D2dash.min.y2p} \end{equation}\] \[\begin{equation} \PartialDiff{{D’}_2}{z_2^p}=2(z_2^p-z_2)+\lambda=0 \hspace{1em} \therefore z_2^p=z_2-\frac{\lambda}{2} \label{eq.D2dash.min.z2p} \end{equation}\] \[\begin{equation} \PartialDiff{{D’}_2}{\lambda}= -\tan({\theta}_x)(x_2^p-x_1)-\tan({\theta}_y)(y_2^p-y_1)+(z_2^p-z_1)=0 \label{eq.D2dash.min.lambda} \end{equation}\] となる。(\ref{eq.D2dash.min.x2p})-(\ref{eq.D2dash.min.z2p})を (\ref{eq.D2dash.min.lambda})に代入すると \[\begin{eqnarray} & & -\tan({\theta}_x)\left(x_2+\frac{\lambda\tan({\theta}_x)}{2}-x_1\right) -\tan({\theta}_y)\left(y_2+\frac{\lambda\tan({\theta}_y)}{2}-y_1\right) \nonumber \\ & & +\left(z_2-\frac{\lambda}{2}-z_1\right) =0 \label{eq.lambda.solve1} \end{eqnarray}\] となり、変形して \[\begin{eqnarray} & & -\tan({\theta}_x)(x_2-x_1)-\tan({\theta}_y)(y_2-y_1)+(z_2-z_1) \nonumber \\ &=& \frac{\tan^2({\theta}_x)+\tan^2({\theta}_y)+1}{2}\lambda \label{eq.lambda.solve2} \end{eqnarray}\] を得る。これより \[\begin{equation} \frac{\lambda}{2}= \frac{-\tan({\theta}_x)(x_2-x_1)-\tan({\theta}_y)(y_2-y_1)+(z_2-z_1)} {\tan^2({\theta}_x)+\tan^2({\theta}_y)+1} \label{eq.lambda.solution} \end{equation}\] が得られる。(\ref{eq.lambda.solution})を用いて\(\lambda/2\)を計算し、 (\ref{eq.D2dash.min.x2p})-(\ref{eq.D2dash.min.z2p})に代入すれば \((x_2^p, y_2^p, z_2^p)\)が求まる。\(x’\)軸の方向ベクトルは \[\begin{equation} \myvector{e_{x’}}=\frac{1}{L_{x’}} \begin{bmatrix} x_2^p-x_1 \\ y_2^p-y_1 \\ z_2^p-z_1 \end{bmatrix} \label{eq.exdash} \end{equation}\] \[\begin{equation} L_{x’}=\sqrt{(x_2^p-x_1)^2+(y_2^p-y_1)^2+(z_2^p-z_1)^2} \label{eq.Lxdash} \end{equation}\] である。
We next consider the direction vector for \(x’\). Let \(S_1\) be a plane parallel to \(S\) that passes through \((x_1, y_1, z_1)\). Any points \((x, y, z)\) on \(S_1\) satisfies eq. (\ref{eq.S1.vector}) because the vector from \((x_1, y_1, z_1)\) to \((x, y, z)\) is orthogonal to the \(z’\) direction obtained above. Expanding eq. (\ref{eq.S1.vector}) results in (\ref{eq.S1}). Let \((x_2, y_2, z_2)\) be the projection point of \((x_2, y_2, z_2)\) on \(S_1\). We then have (\ref{eq.xyz2p.onS1}). The distance between \((x_2^p, y_2^p, z_2^p)\) and \((x_2, y_2, z_2)\) is given by (\ref{eq.d2}). The projection point \((x_2^p, y_2^p, z_2^p)\) is obtained by minimizing the distance \(d_2\) from \((x_2, y_2, z_2)\) requiring the condition of eq. (\ref{eq.xyz2p.onS1}). Thus the point can be calculated by minimizing (\ref{eq.D2dash}) (i.e., the Lagrange multipliers method), where \(\lambda\) is the unknown multiplier. The conditions for minimizing \({D’}_2\) are expressed by eqs. (\ref{eq.D2dash.min.x2p})--(\ref{eq.D2dash.min.lambda}). Inserting eqs. (\ref{eq.D2dash.min.x2p})--(\ref{eq.D2dash.min.z2p}) into (\ref{eq.D2dash.min.lambda}) gives (\ref{eq.lambda.solve1}), which can be arranged as (\ref{eq.lambda.solve2}), the solution of which is (\ref{eq.lambda.solution}). The coordinate \((x_2^p, y_2^p, z_2^p)\) can be computed by first calculating \(\lambda/2\) by eq. (\ref{eq.lambda.solution}), and then inserting the result into (\ref{eq.D2dash.min.x2p})--(\ref{eq.D2dash.min.z2p}). The direction vector for \(x’\) is then computed by eqs. (\ref{eq.exdash}) and (\ref{eq.Lxdash}).

これらの方向ベクトルを用いて走時は以下のように計算できる。 \((x’, y’, z’)\)座標系において、 境界面の位置は\(x’\), \(y’\)に依存せず \(z’\)のみを用いて表され、その値は \[\begin{equation} {z’}_b= \begin{bmatrix} x_b^{ref}, & y_b^{ref}, & z_b^{ref} \end{bmatrix} \cdot \myvector{e_{z’}} \label{eq.zbdash} \end{equation}\] である。\(z’>{z’}_b\)では速度\(v_1\)、 \(z’<{z’}_b\)では速度\(v_2\)となる。 また\((x_1, y_1, z_1)\)の\(x’\)座標と\(z’\)座標はそれぞれ \[\begin{equation} {x’}_1= \begin{bmatrix} x_1, & y_1, & z_1 \end{bmatrix} \cdot \myvector{e_{x’}} \label{eq.x1dash} \end{equation}\] \[\begin{equation} {z’}_1= \begin{bmatrix} x_1, & y_1, & z_1 \end{bmatrix} \cdot \myvector{e_{z’}} \label{eq.z1dash} \end{equation}\] と書ける。同様に\((x_2, y_2, z_2)\)の\(x’\)座標と\(z’\)座標はそれぞれ \[\begin{equation} {x’}_2= \begin{bmatrix} x_2, & y_2, & z_2 \end{bmatrix} \cdot \myvector{e_{x’}} \label{eq.x2dash} \end{equation}\] \[\begin{equation} {z’}_2= \begin{bmatrix} x_2, & y_2, & z_2 \end{bmatrix} \cdot \myvector{e_{z’}} \label{eq.z2dash} \end{equation}\] と書ける。このようにして\(x’\)-\(z’\)座標系における 境界面の位置\({z’}_b\)と 波線の出発地点\(({x’}_1, {z’}_1)\)、 到達地点\(({x’}_2, {z’}_2)\)が求まれば、 これらの値を関数calculate_traveltime_2layersに入力することで走時を計算できる。 なお\((x_1, y_1, z_1)\)と\((x_2, y_2, z_2)\)が 共通の\(x’\)-\(z’\)面内に入るように\(x’\)軸を定義したので \(y’\)方向は考えなくて良い。
Using the direction vectors obtained above, the travel time can be computed as follows. In the \((x’, y’, z’)\) coordinate system, the boundary plane is independent of \(x’\) and \(y’\). Thus the plane is expressed only by \(z’\), the value of which is given by (\ref{eq.zbdash}). The velocity is \(v_1\) for \(z’>{z’}_b\), and \(v_2\) for \(z’<{z’}_b\). The \(x’\) and \(z’\) coordinates for \((x_1, y_1, z_1)\) are represented by eqs. (\ref{eq.x1dash}) and (\ref{eq.z1dash}), respectively, and those for \((x_2, y_2, z_2)\) are represented by (\ref{eq.x2dash}) and (\ref{eq.z2dash}), respectively. Once the boundary location \({z’}_b\), origin \(({x’}_1, {z’}_1)\), and destination \(({x’}_2, {z’}_2)\) of the wave in the \(x’\)-\(z’\) coordinate system are obtained, the travel time can be computed by using function calculate_traveltime_2layers. Note that \(y’\) coordinates are not necessary because the \(x’\) axis direction was defined such that \((x_1, y_1, z_1)\) and \((x_2, y_2, z_2)\) are on the same \(x’\)-\(z’\) plane.


◆検証(Validation)

この関数の計算コードのチェックは以下の条件にて行った。 \(v_1=500\), \(v_2=2000\)とし、\(z=0\)に水平な層境界を設定する。 点\(O(0, 0, 500)\)から\(A(5000, 0, 1000)\)および\(B(5000, 0, -1000)\)までの 走時を計算する。 \(O\)から\(A\)までの走時\(T_a\)は両地点が第1層の側にある場合、 \(O\)から\(B\)までの走時\(T_b\)は一方が第2層の側にある場合に相当する。 これらは以下のコード(Code 1)によって計算できる。
// [Code 1]
double Ta=calculate_traveltime_2layers
    (0.0,500.0,5000.0,1000.0,500.0,2000.0,0.0);
double Tb=calculate_traveltime_2layers
    (0.0,500.0,5000.0,-1000.0,500.0,2000.0,0.0);
なお\(O\)から\(A\)までの走時は 直達波が10.049876、屈折波が5.404738であるので \(T_a\)は屈折波の走時である。
The program code of this function was examined by the following condition. We used \(v_1=500\) and \(v_2=2000\) throughout. A horizontal layer boundary was set at \(z=0\), and travel times from \(O(0, 0, 500)\) to \(A(5000, 0, 1000)\) and \(B(5000, 0, -1000)\) were computed. The travel time \(T_a\) from \(O\) to \(A\) corresponds to a case where the both points are in the layer 1 side, whereas the travel time \(T_b\) from \(O\) to \(B\) does a case where one point is in the layer 2 side. These travel times are computed by the [Code 1] above. Since the travel times of the direct and refracted waves from \(O\) to \(A\) are 10.049876 and 5.404738, respectively, \(T_a\) is a travel time for the refracted wave.

次に、\(z=0\)に水平な層境界を置いたまま Oは動かさずに\(A\)を\((4000, 3000, 1000)\), \(B\)を\((4000, 3000, -1000)\)に 動かした場合を考える。 \(OA\)間、\(OB\)間の水平距離は変わらないので このときの走時は上で求めた\(T_a\), \(T_b\)と完全に一致するはずである。
Next, the layer boundary is kept horizontal at \(z=0\) and \(A\) and \(B\) are moved to \((4000, 3000, 1000)\) and \((4000, 3000, -1000)\), respectively, without moving \(O\). Since the distances from \(OA\) and \(OB\) do not change, the travel times for this case would be exactly same as \(T_a\), \(T_b\).

いま、この系全体を\(xz\)面内で反時計回りに30°回転させる。 座標系を回転するのではなく、座標系は水平・鉛直に固定したまま 層境界や\(O\), \(A\), \(B\)の位置を回転させる。 回転前の位置を\((x, y, z)\)、 回転後の位置を\((x’, y’, z’)\)とすると \[\begin{equation} x’=x\cos 30^{\circ}-z\sin 30^{\circ} =\frac{\sqrt{3}x-z}{2} \label{eq.x_xdash_relation.examine} \end{equation}\] \[\begin{equation} y’=y \label{eq.y_ydash_relation.examine} \end{equation}\] \[\begin{equation} z’=x\sin 30^{\circ}+z\cos 30^{\circ} =\frac{x+\sqrt{3}z}{2} \label{eq.z_zdash_relation.examine} \end{equation}\] の関係が成り立つ。この関係を用いると \(O\)は\(O’(-250, 0, 250\sqrt{3})\)に、 \(A\)は\(A’(2000\sqrt{3}-500, 3000, 2000+500\sqrt{3})\)に、 \(B\)は\(B’(2000\sqrt{3}+500, 3000, 2000-500\sqrt{3})\)に 移動することが分かる。
Now, we rotate the entire system of this problem by 30° counterclockwise within the \(xz\) plane. Not the coordinate system is rotated but the locations of the layer boundary, \(O\), \(A\), and \(B\) are rotated with the coordinate system fixed as horizontal and vertical. This rotation is expressed by eqs. (\ref{eq.x_xdash_relation.examine})-(\ref{eq.z_zdash_relation.examine}), where \((x, y, z)\) and \((x’, y’, z’)\) are the positions before and after the rotation, respectively. These relations indicate that \(O\) moves to \(O’(-250, 0, 250\sqrt{3})\), \(A\) moves to \(A’(2000\sqrt{3}-500, 3000, 2000+500\sqrt{3})\), and \(B\) moves to \(B’(2000\sqrt{3}+500, 3000, 2000-500\sqrt{3})\).

更にこの後、系全体を\(yz\)面内で反時計回りに45°回転させる。 回転後の位置を\((x”, y”, z”)\)とすると \[\begin{equation} x”=x’ \label{eq.xdash_xdashdash_relation.examine} \end{equation}\] \[\begin{equation} y”=y’\cos 45^{\circ}-z’\sin 45^{\circ} =\frac{\sqrt{2}}{2}(y’-z’) \label{eq.ydash_ydashdash_relation.examine} \end{equation}\] \[\begin{equation} z”=y’\sin 45^{\circ}+z’\cos 45^{\circ} =\frac{\sqrt{2}}{2}(y’+z’) \label{eq.zdash_zdashdash_relation.examine} \end{equation}\] の関係が成り立つ。この関係を用いると \(O’\)は\(O”(-250, -125\sqrt{6}, 125\sqrt{6})\)に、 \(A’\)は \(A”(2000\sqrt{3}-500, 500\sqrt{2}-250\sqrt{6}, 2500\sqrt{2}+250\sqrt{6})\)に、 \(B’\)は \(B”(2000\sqrt{3}+500, 500\sqrt{2}+250\sqrt{6}, 2500\sqrt{2}-250\sqrt{6})\)に 移動することが分かる。
Then the entire system is further rotated by 45° counterclockwise within the \(yz\) plane. This rotation is expressed by eqs. (\ref{eq.ydash_ydashdash_relation.examine})- (\ref{eq.zdash_zdashdash_relation.examine}), where \((x”, y”, z”)\) is the position after the rotation. These relations indicate that \(O’\) moves to \(O”(-250, -125\sqrt{6}, 125\sqrt{6})\), \(A’\) moves to \(A”(2000\sqrt{3}-500, 500\sqrt{2}-250\sqrt{6}, 2500\sqrt{2}+250\sqrt{6})\), and \(B’\) moves to \(B”(2000\sqrt{3}+500, 500\sqrt{2}+250\sqrt{6}, 2500\sqrt{2}-250\sqrt{6})\).

この2度の回転に伴う層境界の勾配は以下のように計算できる。 2度回転させた後の境界面が 点\(P”(1, 0, {h”}_p)\), \(Q”(0, 1, {h”}_q)\)にあるとする。 \(yz\)面内での45°の回転を元に戻す(すなわち系全体を\(-45^{\circ}\)回転させる)。 この変換は \[\begin{equation} x’=x” \label{eq.xdashdash_xdash_relation.examine} \end{equation}\] \[\begin{equation} y’=y”\cos 45^{\circ}+z”\sin 45^{\circ} =\frac{\sqrt{2}}{2}(y”+z”) \label{eq.ydashdash_ydash_relation.examine} \end{equation}\] \[\begin{equation} z’=-y”\sin 45^{\circ}+z”\cos 45^{\circ} =\frac{\sqrt{2}}{2}(-y”+z”) \label{eq.zdashdash_zdash_relation.examine} \end{equation}\] と書けるので、\(P”\)は \[\begin{equation} P’\left(1, \frac{\sqrt{2}}{2}{h”}_p, \frac{\sqrt{2}}{2}{h”}_p\right) \label{eq.Pdash.examine} \end{equation}\] に、\(Q”\)は \[\begin{equation} Q’\left(0, \frac{\sqrt{2}}{2}(1+{h”}_q), \frac{\sqrt{2}}{2}(-1+{h”}_q)\right) \label{eq.Qdash.examine} \end{equation}\] に移動する。 ここから更に\(xz\)面内での30°の回転を元に戻す (すなわち系全体を\(-30^{\circ}\)回転させる)。 この変換は \[\begin{equation} x=x’\cos 30^{\circ}+z’\sin 30^{\circ} =\frac{\sqrt{3}x’+z’}{2} \label{eq.xdash_x_relation.examine} \end{equation}\] \[\begin{equation} y=y’ \label{eq.ydash_y_relation.examine} \end{equation}\] \[\begin{equation} z=-x’\sin 30^{\circ}+z’\cos 30^{\circ}X =\frac{-x’+\sqrt{3}z’}{2} \label{eq.zdash_z_relation.examine} \end{equation}\] と書けるので、\(P’\)は \[\begin{equation} P\left(\frac{2\sqrt{3}+\sqrt{2}{h”}_p}{4}, \frac{\sqrt{2}}{2}{h”}_p, \frac{-2+\sqrt{6}{h”}_p}{4}\right) \label{eq.P.examine} \end{equation}\] に、\(Q’\)は \[\begin{equation} Q\left(\frac{\sqrt{2}(-1+{h”}_q)}{4}, \frac{\sqrt{2}}{2}(1+{h”}_q), \frac{\sqrt{6}}{4}(-1+{h”}_q)\right) \label{eq.Q.examine} \end{equation}\] に移動する。 点\(P\), \(Q\)は回転前の境界面上の点であるので\(z=0\)でなければならない。 このことから\({h”}_p=2/\sqrt{6}\), \({h”}_q=1\)であることが分かる。 すなわち、\(P”(1, 0, 2/\sqrt{6})\), \(Q”(0, 1, 1)\)が 回転後の境界面上の点となることが分かる。 \((0, 0, 0)\)も境界面上の点であったことを思い出せば、 \(x\)方向の勾配は\(\tan^{-1}(2/\sqrt{6})\), \(y\)方向の勾配は\(\tan^{-1}1=45^{\circ}\)であることが分かる。
The slopes of the layer boundary after these two rotations are evaluated as follows. Let \(P”(1, 0, {h”}_p)\), \(Q”(0, 1, {h”}_q)\) be two points on the boundary after the two rotations. Let us cancel out the 45° rotation within the \(yz\) plane, by rotating the entire system by \(-45^{\circ}\). This operation is represented by eqs. (\ref{eq.xdashdash_xdash_relation.examine})- (\ref{eq.zdashdash_zdash_relation.examine}). Therefore \(P”\) and \(Q”\) move to \(P’\) (eq. \ref{eq.Pdash.examine}) and \(Q’\) (eq. \ref{eq.Qdash.examine}), respectively. Then, let us further cancel out the 30° rotation within the \(xz\) plane, by rotating the entire system by \(-30^{\circ}\). This operation is represented by eqs. (\ref{eq.xdash_x_relation.examine})-(\ref{eq.zdash_z_relation.examine}), indicating that \(P’\) and \(Q’\) move to \(P\) (eq. \ref{eq.P.examine}) and \(Q\) (eq. \ref{eq.Q.examine}), respectively. Since \(P\) and \(Q\) are two points on the boundary before the rotation, their \(z\) coordinates must be zero. This requirement gives \({h”}_p=2/\sqrt{6}\) and \({h”}_q=1\), showing that \(P”(1, 0, 2/\sqrt{6})\) and \(Q”(0, 1, 1)\) are two points on the boundary after the rotation. Remembering that \((0, 0, 0)\) is also on the boundary, the slopes of the boundary in \(x\) and \(y\) directions are now evaluated as \(\tan^{-1}(2/\sqrt{6})\) and \(\tan^{-1}1=45^{\circ}\), respectively.

ここでは単に系全体を回転させただけであるので走時は変わらないはずである。 すなわち\((0, 0, 0)\)を通り \(x\)方向の勾配が\(\tan^{-1}(2/\sqrt{6})\)、\(y\)方向の勾配が45° の境界面を境にそれよりも上が速度\(v_1\), 下が速度\(v_2\)の構造中において \(O”\)から\(A”\)までの走時は\(T_a\)、 \(O”\)から\(B”\)までの走時は\(T_b\)となるはずである。 関数calculate_traveltime_2layers_inclined3Dを用いると、 走時は以下のコード(Code 2)によって計算できる。
// [Code 2]
double Ta_dashdash=calculate_traveltime_2layers_inclined3D
    (-250.0,-125.0*sqrt(6.0),125.0*sqrt(6.0),
      2000.0*sqrt(3.0)-500.0,500.0*sqrt(2.0)-250.0*sqrt(6.0),
     2500.0*sqrt(2.0)+250.0*sqrt(6.0),
     500.0,2000.0,0.0,0.0,0.0,
     atan(2.0/sqrt(6.0))*180.0/pi,45.0);
double Tb_dashdash=calculate_traveltime_2layers_inclined3D
    (-250.0,-125.0*sqrt(6.0),125.0*sqrt(6.0),
      2000.0*sqrt(3.0)+500.0,500.0*sqrt(2.0)+250.0*sqrt(6.0),
     2500.0*sqrt(2.0)-250.0*sqrt(6.0),
     500.0,2000.0,0.0,0.0,0.0,
     atan(2.0/sqrt(6.0))*180.0/pi,45.0);
によって計算できる。 得られた走時が\(T_a\), \(T_b\)と一致することを確かめれば良い。 実際にプログラムで計算してみたところ、 回転前後どちらにおいても\(T_a=5.404738\), \(T_b=3.519027\)となり、 関数calculate_traveltime_2layers_inclined3Dにおいて 正しい計算が行われていることを確認できた。
Since only the rotations of the entire system were applied above, the travel times would not change; the travel times from \(O”\) to \(A”\) and from \(O”\) to \(B”\) would be \(T_a\) and \(T_b\), respectively, in a medium consisting of two layers of velocities \(v_1\) and \(v_2\) separated by a boundary that passes through \((0, 0, 0)\) and has slopes \(\tan^{-1}(2/\sqrt{6})\) and 45° along \(x\)- and \(y\)- directions, respectively. The travel times from \(O”\) to \(A”\) and from \(O”\) to \(B”\) can be computed by the [Code 2] above, which uses the function calculate_traveltime_2layers_inclined3D. The results should be equal to \(T_a\) and \(T_b\). We confirmed that both [Code 1] and [Code 2] (before and after the rotation) yielded the same travel times (\(T_a=5.404738\), \(T_b=3.519027\)), showing that the function calculate_traveltime_2layers_inclined3D gives correct travel times.

上の例では層境界が\((0,0,0)\)を通るという特殊な条件であった。 より一般的な条件で計算が正しく動くことのチェックのため、 回転後の系全体を\((1000,2000,3000)\)だけ平行移動させる。 すなわち、\((1000, 2000, 3000)\)を通り \(x\)方向の勾配が\(\tan^{-1}(2/\sqrt{6})\)、\(y\)方向の勾配が45° の境界面を境にそれよりも上が速度\(v_1\), 下が速度\(v_2\)の構造中において、 \(O{'''}(750, 2000-125\sqrt{6}, 3000+125\sqrt{6})\)から \[\begin{equation} A{'''}(2000\sqrt{3}+500, 2000+500\sqrt{2}-250\sqrt{6}, 3000+2500\sqrt{2}+250\sqrt{6}) \label{eq.Adash3} \end{equation}\] および \[\begin{equation} B{'''}(2000\sqrt{3}+1500, 2000+500\sqrt{2}+250\sqrt{6}, 3000+2500\sqrt{2}-250\sqrt{6}) \label{eq.Bdash3} \end{equation}\] までの走時を計算し、これらが\(T_a\)、\(T_b\)となることを確かめる。 これは以下のコード(Code 3)によって計算できる。
// [Code 3]
double Ta_dashdashdash=calculate_traveltime_2layers_inclined3D
     (750.0,2000.0-125.0*sqrt(6.0),3000.0+125.0*sqrt(6.0),
      2000.0*sqrt(3.0)+500.0,2000.0+500.0*sqrt(2.0)-250.0*sqrt(6.0),
      3000.0+2500.0*sqrt(2.0)+250.0*sqrt(6.0),
      500.0,2000.0,1000.0,2000.0,3000.0,
      atan(2.0/sqrt(6.0))*180.0/pi,45.0);
double Tb_dashdashdash=calculate_traveltime_2layers_inclined3D
     (750.0,2000.0-125.0*sqrt(6.0),3000.0+125.0*sqrt(6.0),
      2000.0*sqrt(3.0)+1500.0,2000.0+500.0*sqrt(2.0)+250.0*sqrt(6.0),
      3000.0+2500.0*sqrt(2.0)-250.0*sqrt(6.0),
      500.0,2000.0,1000.0,2000.0,3000.0,
      atan(2.0/sqrt(6.0))*180.0/pi,45.0);
実際にこの計算を行い、結果が一致することを確かめた。
The example above used a special condition in that the layer boundary passed through \((0,0,0)\). To examine the program in more general condition, we move the entire system after the rotation by \((1000,2000,3000)\). The problem is then to compute the travel times from \(O{'''}(750, 2000-125\sqrt{6}, 3000+125\sqrt{6})\) to \(A{'''}\) and \(B{'''}\) given by (\ref{eq.Adash3}) and (\ref{eq.Bdash3}), respectively, in a medium consisting of two layers of velocities \(v_1\) and \(v_2\) separated by a boundary that passes through \((1000, 2000, 3000)\) and has slopes \(\tan^{-1}(2/\sqrt{6})\) and 45° along \(x\)- and \(y\)- directions, respectively. The [Code 3] above is available for this examination. We performed this test, the results of which were just same as \(T_a\) and \(T_b\).