関数ray_z_1Dscalar_given_xz マニュアル

(The documentation of function ray_z_1Dscalar_given_xz)

Last Update: 2021/12/6


◆機能・用途(Purpose)

与えられた1次元速度構造のもとで波線パラメータを指定して波線を計算する。 終点位置を\(x\)座標と\(z\)座標で指定するバージョン。
Calculate the ray for a given ray parameter using a given 1D velocity structure. In this function, the destination point is specified by \(x\) and \(z\).


◆形式(Format)

#include <ray/calculate1Dscalar.h>
inline double ∗ray_z_1Dscalar_given_xz
(const double z0,const double p,const struct _1DvelocityStructure structure,
 const double xmax,const double destination_z,const int Nx)


◆引数(Arguments)

z0 波線の起点の深さ。
The depth of the origin of the ray.
p 波線パラメータ。
A ray parameter.
structure 1次元速度構造。
A 1D velocity structure.
xmax 波線の終点の水平位置(起点からの水平距離)。
The horizontal location of the destination point of the ray, which is the horizontal distance from the origin to the destination.
destination_z 波線の終点の深さ。
The depth of the destination point of the ray.
Nx 波線計算における水平位置の分割数。
The number of subsections of the horizontal locations for the ray computation.


◆戻り値(Return value)

計算した波線。 水平位置\(x=0\)から\(x=x_{max}\)までを 距離\(x_{max}/N_x\)の間隔で区切って 計\(N_x+1\)個の地点での波線の深さを計算し、 それらを並べた配列を返す。
The ray computed; an array composed of the depth of the ray at evenly spaced \(N_x+1\) nodes for the horizontal locations from \(x=0\) to \(x=x_{max}\) at an interval of \(x_{max}/N_x\).


◆使用例(Example)

struct _1DvelocityStructure structure;
double ∗ray_depths =ray_z_1Dscalar_given_xz(0.0,0.001,structure,10000.0,100.0,0.1);


◆補足(Additional remarks)

この関数の代表的な使用方法として、2つの観測点が与えられ、 その間の波線を計算する状況を想定している。 この場合、
  1. 関数rayParameters_1Dscalarを用いて2観測点を結ぶ波線パラメータを推定する
  2. その波線パラメータを用いて2観測点を結ぶ波線を計算する
という手順になる。 このステップ2には当初、関数ray_z_1Dscalarを用いることを想定していた。 ところが実際にこの計算を行ったところ、 観測点間距離が長い場合に到達地点付近での波線の深さが浅くなりすぎて 速度が負の領域に入ってしまうエラーが生じた。
This function is developed for a computation of the ray connecting two given station locations. This task is done by the following two steps:
  1. estimating the ray parameter connecting the two stations using function rayParameters_1Dscalar, and
  2. computing the ray between the two stations using the ray parameter estimated in the previous step.
For this step 2, function ray_z_1Dscalar was previously developed. However, that function resulted in an error; the ray went into a negative velocity zone in the shallower limit when the distance between the two stations was long.

このエラーが生じた原因は以下のように考えられる。 関数rayParameters_1Dscalarでは 水平距離に0.1%以内の誤差を許容して波線パラメータを推定する。 例えば100km離れた2点\(A\), \(B\)を結ぶ波線パラメータを 関数rayParameters_1Dscalarを用いて推定したとする。 その波線パラメータを用いて\(A\)を出発した波線を計算すると、 \(B\)の深さに到達する時点で水平方向に100m以内のずれが生じうる。 \(AB\)間の距離が200kmになれば水平方向のずれは200mになる。 ところが関数ray_z_1Dscalarでは水平方向の距離範囲しか指定しない。 つまり\(B\)の深さは与えず、\(AB\)間の水平距離に達するまで波線を計算する。 波線が鉛直入射に近い場合、この100mや200mの水平ずれが 深さ方向の数kmのずれになり、 波線が\(AB\)間の水平距離に達する前に速度が負の高度まで届いてしまうと考えられる。
This error may be explained as follows. The function rayParameters_1Dscalar requires an accuracy of 0.1% in the horizontal distance during the ray parameter estimation. For example, suppose that the ray parameter between two stations \(A\) and \(B\) that are 100 km apart was estimated by function rayParameters_1Dscalar. The ray stating from \(A\) using the estimated ray parameter could reach the depth of \(B\) with a horizontal location mismatch of within 100 m. This mismatch could be 200 m when \(A\) and \(B\) are 200 km apart. In the function ray_z_1Dscalar, only the horizontal distance is specified; the depth of \(B\) is not given to the function, and the ray is computed until the horizontal distance reachs that between \(A\) and \(B\). When the incident angle of the ray is nearly vertical, the horizontal mislocation of 100 m or 200 m could cause a vertical mislocation of several kilometers; thus the ray could reach a height of the negative velocity until it reaches the horizontal distance between \(A\) and \(B\).

そこで関数ray_z_1Dscalarの修正版として用意したのが この関数ray_z_1Dscalar_given_xzである。 この関数では目標地点(上の例での\(B\))までの水平距離だけでなく深さも指定する。 目標地点における波線が45°よりも鉛直に近い場合には \(AB\)間の水平距離ではなく\(B\)の深さに到達するまでの波線計算を行い、 これを水平方向に伸縮して\(B\)に到達するように合わせるという処理を行う。 例えば200km離れた\(AB\)間を結ぶ波線パラメータを推定し、 次にその波線パラメータを用いて波線を計算したところ、 \(A\)を出発した波線が水平距離199.999kmで\(B\)の深さに到達したとする。 このとき波線の角度が高角であれば計算をそこで打ち切り、 水平方向に200/199.999倍に伸縮させて波線が\(B\)に届くように調整する。 関数ray_z_1Dscalar_given_xzではこのような処理が行われる。
This function, ray_z_1Dscalar_given_xz, was developed to solve this problem. In this function, not only the horizontal distance but also the depth of the destination (\(B\) in the example above) is specified. When the ray angle at the destination is closer to vertical than 45°, the ray is computed until it reaches the depth of \(B\) instead of reaching the horizontal distance between \(A\) and \(B\), and then the horizontal distance is adjusted by extending the ray. For example, suppose to compute the ray between \(A\) and \(B\) that are 200 km apart. Estimate the ray parameter using function rayParameters_1Dscalar, and then compute the ray using this ray parameter. Then, suppose that the ray reached the depth of \(B\) at a horizontal distance of 199.999 km. In this case, the computation of the ray is terminated at this point, and the ray is extended by 200/199.999 times in horizontal so that the ray reaches \(B\). This is what the function ray_z_1Dscalar_given_xz does.


◆使用上の注意(Note)

\(x_{max}/N_x\)の水平距離ごとに波線を直線近似して計算を行うので \(N_x\)が小さいと誤差が大きくなる。
As the ray is approximated by a straight line in each subsection of the horizontal length \(x_{max}/N_x\), a small \(N_x\) results in a large error in the ray.