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