Yamamoto's Laboratory
 
 
入力
  座標変換
 
電磁場取り込み
 
User elemetns
 
 
Python
 
 
 
 
 
 
 
 

はじめに

GPT のエレメントは,それにとって都合の座標系で定義できます.ソレノイドであれば,その中心を原点にとり磁場を定義できます.実際にエレメントを配置する場合,回転と平行移動により任意の場所に配置できます.エレメントの座標系を Element Coordinate System (ECS),機器を配置する座標系を World Coordinate System (WCS) と呼びます.

平行移動のベクトルを $\boldsymbol{o}$,回転の行列を $\boldsymbol{M}$ とすると,ECS と WCS の位置ベクトル $\boldsymbol{r}_{ECS}, \boldsymbol{r}_{WCS}$ の関係は,次のようになります.

\begin{align} \boldsymbol{r}_{WCS}=\boldsymbol{M}\boldsymbol{r}_{ECS}+\boldsymbol{o} \end{align}

さらに付け加えると,電磁場のベクトルは次のように変換されます.

\begin{align} \boldsymbol{E}_{WCS}&=\boldsymbol{M}\boldsymbol{E}_{ECS}\\ \boldsymbol{B}_{WCS}&=\boldsymbol{M}\boldsymbol{B}_{ECS} \end{align}

座標を回転させたとき,ベクトルを変換させる行列は座標変換の行列と同じです.これは,ベクトルの定義そのものです.

この辺りについては,GPT の User Manual に書いてありますので,一度読んでください.

三次元座標の回転

ここでは,三次元座標の回転の行列 $\boldsymbol{M}$ を求めます.平行移動のベクトル $\boldsymbol{o}$ は簡単なので,いまさら説明する必要は無いでしょう.

いきなり三次元の回転を表す行列を求めるのは難しいので,二次元の回転の結果を利用します.

二次元座標の回転

三次元座標の回転といっても,実は簡単で,二次元座標の回転の組み合わせです.昔,学習したように図1に示す二次元座標の回転は,

\begin{align} \begin{pmatrix} x^\prime \\ y^\prime \end{pmatrix} = \begin{pmatrix} \cos \theta & \sin\theta \\ -\sin\theta & \cos\theta \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} \end{align}

となります.二次元は以上で終わりです.

図1: 二次元の座標変換 (回転)

三次元座標の回転

三次元の座標の回転の表し方は,いろいろ有ります.ここでは,図2に示す方法を使います.この図が示す座標の回転は,

  1. $Z$ 軸周りに $\phi$ 回転させます.これにより $(x,\,y,\,z)\rightarrow(x^\prime,\,y^\prime,\,z^\prime)$と変換されます.
  2. $Y^\prime$ 軸周りに $\theta$ 回転させます.これにより $(x^\prime,\,y^\prime,\,z^\prime)\rightarrow(x^{\prime\prime},\,y^{\prime\prime},\,z^{\prime\prime})$ と変換されます.
  3. $X^{\prime\prime}$ 軸周りに $\psi$ 回転させます.これにより $(x^{\prime\prime},\,y^{\prime\prime}, z^{\prime\prime})\rightarrow(x^{\prime\prime\prime},\,y^{\prime\prime\prime}, z^{\prime\prime\prime})$ と変換されます.

の三つの部分に分けることができます.力学の Euler の角に似ていますが,少し異なります.ここまで書いて,Eular の角で考えたほうが良いかもと思ってきましたが,絵も書いたことだしこれで進めます.

それぞれの回転の行列を $\boldsymbol{M}_z, \boldsymbol{M}_y, \boldsymbol{M}_x$ とします.これらは,先ほどの二次元の座標回転から,次のように書き表せます.

\begin{align} \boldsymbol{M}_z &= \begin{pmatrix} \cos\phi & \sin\phi & 0 \\ -\sin\phi & \cos\phi & 0 \\ 0 & 0 & 1 \end{pmatrix}\\ \boldsymbol{M}_y &= \begin{pmatrix} \cos\theta & 0 & -\sin\theta \\ 0 & 1 & 0 \\ \sin\theta & 0 & \cos\theta \end{pmatrix}\\ % \boldsymbol{M}_x &= \begin{pmatrix} 1 & 0 & 0 \\ 0 & \cos\psi & \sin\psi \\ 0 & -\sin\psi & \cos\psi \end{pmatrix} \end{align}

それぞれの変換行列が分かったので,$(x, y, z)\rightarrow(x^{\prime\prime\prime}, y^{\prime\prime\prime}, z^{\prime\prime\prime})$ はそれぞれの積になります.

\begin{equation} \begin{aligned} \boldsymbol{M}&=\boldsymbol{M}_x\boldsymbol{M}_y\boldsymbol{M}_x\\ &= \begin{pmatrix} \cos\theta\cos\phi & \cos\theta\sin\phi & -\sin\theta \\ -\cos\psi\sin\phi+\cos\phi\sin\theta\sin\psi & \cos\phi\cos\psi+\sin\theta\sin\phi\sin\psi & \cos\theta\sin\psi \\ \cos\phi\cos\psi\sin\theta+\sin\phi\sin\psi & \cos\psi\sin\theta\sin\phi-\cos\phi\sin\psi & \cos\theta\cos\psi \end{pmatrix} \end{aligned} \label{eq:rot_matirix_3D} \end{equation}

座標の変換行列も分かったので,後は GPT に適用するだけです.実際には,この変換行列の第一行と第二行が GPT の入力になります.後述する「具体例」の xx が一行一列,xy が一行二列,xz が一行三列,yx が二行一列,yy が二行二列,yz が二行三列です.

図2: 三次元の座標変換 (回転)

GPT の座標の回転

GPTの入力について

先ほど求めた三次元の座標の回転を使えば,エレメントを任意の角度に回転できます.GPT では,$3\times3$ の行列の9個の要素を入力するのではなく,式\eqref{eq:rot_matirix_3D}の $M_{11}, M_{12}, M_{13}, M_{21}, M_{22}, M_{23}$ をデータとして入力するようになっています.即ち,入力データは次のような形になっています.

エレメント名("wcs", $\Delta x,\,\Delta y,\,\Delta z,\, M_{11},\, M_{12},\, M_{13},\, M_{21},\, M_{22},\, M_{23},\, \cdots$)

オフセットはどうでも良いとして,続く6個の行列の要素で回転を表しています.ここで,式\eqref{eq:rot_matirix_3D}の各行は,直交した単位ベクトルになっていることが分かります.ということは,座標を回転させた場合,その行ベクトルが新しい座標のx方向とy方向,z方向の単位ベクトルになることを意味しています.要するに,それぞれの行ベクトルが新しい座標の各軸になるわけです.6個の行列の要素で,新しい座標のx軸とy軸を決めることができます.そして,z軸は

\begin{align} \hat{\boldsymbol{z}}=\hat{\boldsymbol{x}}\times\hat{\boldsymbol{y}} \end{align}

から決めることができます.$\hat{\boldsymbol{x}}$ と $\hat{\boldsymbol{y}}$,$\hat{\boldsymbol{z}}$ は,それぞれの軸の単位ベクトルです.座標系が右手系と決められているので,ベクトル積で計算可能ということです.

要するに,新たな$x$軸になる座標を $(M_{11},\,M_{12},\,M_{13})$,新たなる$y$軸になる座標を $(M_{21},\,M_{22},\,M_{23})$ を入力データとすればよいわけです.

ここで,1つ疑問が湧くと思います.もし,入力データのベクトル $(M_{11},\,M_{12},\,M_{13})$ が $(M_{21},\,M_{22},\,M_{23})$ が単位ベクトルでなかったり,各々が直交していなかったりする場合どうなるか? という疑問です.この場合,x軸,y軸,z軸の順でシュミットの直交化を行うことになっています.この辺のことは,GPT の User Manual に書いてあります.

y 軸回転

加速器のエレメントは,y軸の回転が多いです.その回転角度を $\theta$ とします.また,x軸やz軸は回転させませんので先ほどの $\phi$ と $\psi$ はゼロとします.すると,回転の行列 $\boldsymbol{M}$ は,

\begin{align} \boldsymbol{M} &= \begin{pmatrix} \cos\theta & 0 & -\sin\theta \\ 0 & 1 & 0 \\ \sin\theta & 0 & \cos\theta \end{pmatrix} \end{align}

となります.この行列の要素 $M_{11},\,M_{12},\,M_{13},\,M_{21},\,M_{22},\,M_{23}$ が GPT の入力データになります.次節では,これらは (xx, xy, xz, yx, yy, yz) に対応します.

GPT の入力 (座標)

GPT のエレメントの座標の設定方法を示します.

基本

GPT のほとんどのエレメントの最初のパラメーターはエレメント座標 (ECS) です.この ECS は二つの部分で構成されます.

座標の名前 エレメントが配置されている座標です.通常は「wcs」です.カスタム座標の場合もあります.
オフセット $\boldsymbol{o}$ と回転 $\boldsymbol{M}$ 座標変換を表すベクトルや行列です.

表1に,こらの指定方法を示します.GPT では,三通りの入力が可能です.次節に具体例を示します.

GPT のエレメント座標の定義."wcs" カスタム座標になることもある.
ECS の定義 オフセット $\boldsymbol{o}$ 回転 $\boldsymbol{M}$
"wcs", "I" (0, 0, 0) 単位行列
"wcs", "z", oz (0, 0, oz) 単位行列
”wcs”, ox, oy, oz, xx, xy, xz, yx, yy, yz (ox, oy, oz)

具体例

恒等変換 ("wcs", "I")

これは「"wcs", "I"」と記述するだけで,座標変換を行いません.エレメントが screen() の場合,この変換を使います.以下が具体例です.

screen("wcs", "I", 0, 1, 0.01);

この設定では座標変換は行われませんので,wcs の座標系で粒子情報が出力されます.

z オフセット変換 ("wcs", "z", oz)

エレメントを z 方向にオフセットさせるために使います.以下の例は,シングルターンのソレノイド (半径: 0.1 m,電流: 500 A) を wcs の z=0.55 m に設置した場合です.

solenoid("wcs", "z", 0.55, 0.1, 500);

フル変換 (”wcs”, ox, oy, oz, xx, xy, xz, yx, yy, yz)

エレメントの三次元オフセットと任意の回転が可能です.以下の例は,シングルターンのソレノイド (半径: 0.02 m,電流: 500 A) を y軸で 45 度回転させて,wcs 座標の x=0.1 m,y=0 m,z=0.5 m に設置します.

theta = 45.0/180*pi;
solenoid("wcs", 0.1, 0.0, 0.5,
                cos(theta), 0.0, -sin(theta),
                0.0, 1.0, 0.0,
                0.02, 500);

ページ作成情報

参考資料

  1. GPT のユーザーマニュアル

更新履歴

2021年09月04日 ページの新規作成


no counter