waterPMLコマンドのソースコードの概略

(4)成分を表す整数インデックス

(Outline of the source code of waterPML command; (4) Integer indices that represents a component)


◆概要 (Outline)

waterPMLコマンドでは3次元空間内での計算を行うので 1つの量について複数の成分が必要になる。 例えば速度には3成分\(V_x\), \(V_y\), \(V_z\)があり、 これらを統一的に扱うために\(V_i\) (\(i=0,1,2\))として表す。 このときの\(i\)が成分を表す整数インデックスである。 waterPMLコマンド全体を通して 0が\(x\)成分、1が\(y\)成分、2が\(z\)成分を表す。
The 3-D computation of waterPML command requires multiple components for each quantity. For example, the velocity has three components \(V_x\), \(V_y\), and \(V_z\). To uniquely treat them, the three velocity components are expressed as \(V_i\) (\(i=0,1,2\)). The number \(i\) in this case is the integer index that represents a component. Throughout the waterPML command, the values of 0, 1, and 2 in these indices represent the \(x\)-, \(y\)-, and \(z\)-components, respectively.

応力は9成分を持つが、 \(\tau_{ij}=\tau_{ji}\)であるので独立な成分は6つである。 したがって応力成分については \(i\), \(j\)の2つの整数インデックスを用いるのではなく、 独立な\((i,j)\)の組を表す1つの整数インデックスiTを用いて成分を表す。 同様に、弾性定数\(C_{ijpl}\)については \(i\), \(j\), \(p\), \(l\)の4つの整数インデックスを用いるのではなく、 独立な\((i,j,p,l)\)の組を表す1つの整数インデックスicを用いて成分を表す。
The stress has nine components; however, only six of them are independent because of \(\tau_{ij}=\tau_{ji}\). Therefore, for stress components, an integer index iT is assigned to independent combinations of \((i,j)\) instead of directly using the two indices \(i\) and \(j\). Similarly, for the elastic constant \(C_{ijpl}\), an integer index ic is assigned to independent combinations of \((i,j,p,l)\) instead of directly using the four indices \(i\), \(j\), \(p\), and \(l\).


◆応力の成分番号iT (An integer index iT that represents a stress component)

応力\(\tau_{ij}\)の成分組合せ\((i,j)\)に対して 成分番号iTを下表のように割り当てる。
An integer index iT is assigned to the combinations \((i,j)\) of stress components \(\tau_{ij}\) as shown in the table below.

\(i\) \(j\) 意味
Meaning
iT
0 0 \(xx\)成分。
\(xx\)-component.
0
1 1 \(yy\)成分。
\(yy\)-component.
1
2 2 \(zz\)成分。
\(zz\)-component.
2
0 1 \(xy\)成分。
\(xy\)-component.
3
1 0 \(yx\)成分。
\(yx\)-component.
1 2 \(yz\)成分。
\(yz\)-component.
4
2 1 \(zy\)成分。
\(zy\)-component.
2 0 \(zx\)成分。
\(zx\)-component.
5
0 2 \(xz\)成分。
\(xz\)-component.

●\((i,j)\)からiTへの変換 (Conversion from \((i,j)\) to iT)

整数演算として \[\begin{equation} iT=(i-j+3)\%3+(j-i+3)\%3+\frac{i+j}{2}+\frac{|j-i|}{2} \label{eq.ij2iT} \end{equation}\] を計算することで変換できる。 但し整数の割り算において小数部は切り捨てるものとし、 %は割り算の余りを表す。
A combination \((i,j)\) can be converted to iT by Eq. (\ref{eq.ij2iT}), where the decimal parts are dropped after a division of integers and % represents the remainder of a division.

●iTから\((i,j)\)への変換 (Conversion from iT to \((i,j)\))

応力の非対角成分について 2通りの\((i,j)\)の組に対して1つのiTを割り当てているので、 iTから\((i,j)\)への変換は一意ではない。 ここでは応力の非対角成分のうち \(xy\), \(yz\), \(zx\)成分を採用することにする。 この場合、iTを元に\(i\)を計算するにはiTを3で割った余りを求めれば良い。 また、iTを元に\(j\)を求めるには \(iT+iT/3\)(小数点以下切り捨て)を3で割った余りを求めれば良い。
The conversion from iT to \((i,j)\) is not unique because the same iT is assigned to two combinations of \((i,j)\) for off-diagonal stress components. Here, \(xy\)-, \(yz\)-, and \(zx\)-components are adopted as the off-diagonal stress components. Then \(i\) can be computed from iT by taking the remainder of the division of iT by 3, and \(j\) can be computed from iT by taking the remainder of the division of \(iT+iT/3\) by 3, where the decimal part of \(iT/3\) is dropped.


◆弾性定数の成分番号ic (An integer index ic that represents the component of an elastic constant)

弾性定数\(C_{ijpl}\)の成分組合せ\((i,j,p,l)\)は全部で81通りあるが、 \[\begin{equation} C_{ijpl} =\lambda\delta_{ij}\delta_{pl} +\mu(\delta_{ip}\delta_{jl}+\delta_{il}\delta_{jp}) \label{eq.Cijpl} \end{equation}\] であることから値がノンゼロの\((i,j,p,l)\)の組み合わせは限られる。 これらの組み合わせに対して成分番号icを下表のように割り当てる。
Although there are 81 combinations of components \((i,j,p,l)\) for an elastic constant \(C_{ijpl}\), the combinations of components that give non-zero \(C_{ijpl}\) are limited owing to Eq. (\ref{eq.Cijpl}). For these combinations of components, the integer index ic is assigned as shown in the table below.

(\ref{eq.Cijpl})式におけるノンゼロの項
Non-zero terms in Eq. (\ref{eq.Cijpl})
条件
Conditions
\(i\) \(j\) \(p\) \(l\) ic \(C_{ijpl}\)
\(\delta_{ij}\delta_{pl}\), \(\delta_{ip}\delta_{jl}\), \(\delta_{il}\delta_{jp}\) \(i=j=p=l\) 0 0 0 0 0 \(\lambda+2\mu\)
1 1 1 1 3
2 2 2 2 6
\(\delta_{ij}\delta_{pl}\) \(i=j\neq p=l\) 1 1 0 0 2 \(\lambda\)
2 2
0 0 1 1 5
2 2
0 0 2 2 8
1 1
\(\delta_{ip}\delta_{jl}\) \(i=p\neq j=l\) 1 0 1 0 1 \(\mu\)
2 2
0 1 0 1 4
2 2
0 2 0 2 7
1 1
\(\delta_{il}\delta_{jp}\) \(i=l\neq j=p\) 0 1 1 0 1 \(\mu\)
2 2
1 0 0 1 4
2 2
2 0 0 2 7
1 1

●\((i,j,p,l)\)からicへの変換 (Conversion from \((i,j,p,l)\) to ic)

整数演算として \[\begin{eqnarray} ic &=& 3l+\left[(|i-j|-1)(|i-j|-2)\right. \nonumber \\ & & \left.+\frac{(|i-p|-1)(|i-p|-2)+(|i-l|-1)(|i-l|-2)}{2}\right]\%4 \label{eq.ijpl2ic} \end{eqnarray}\] を計算することで変換できる。 但し整数の割り算において小数部は切り捨てるものとし、 %は割り算の余りを表す。
A combination \((i,j,p,l)\) can be converted to ic by Eq. (\ref{eq.ijpl2ic}), where the decimal parts are dropped after a division of integers and % represents the remainder of a division.

●icから\((i,j,p,l)\)への変換 (Conversion from ic to \((i,j,p,l)\))

icから\((i,j,p,l)\)への変換は計算の中で登場しない。
A conversion from ic to \((i,j,p,l)\) does not appear in the computation.