.. _sec-surface: [ Surface ] セクション ================================================== このセクションでは [cell] セクションでセルを定義するために使用する面(surface)を定義します。 PHITSで定義できる面には平面、球面、円柱面などがあり、各形状に対応した方程式のパラメータを指定することで、それぞれの面を定義します。 コメント文字として **$** の他に、行頭の **c** (直後に半角スペースがある場合)も使用できます。 ファイルのインクルード文や定数定義などは、セクションの途中でも用いることができます。 継続行には、先頭に5桁の空白が必要です。 書式は以下の通りです。 面番号、座標変換番号、面記号、面定義数値の順番で、各面を定義します。 .. code-block:: text [ Surface ] 面番号 座標変換番号 面記号 面定義数値 .. list-table:: 面記述書式 :header-rows: 1 * - 項目 - 説明 * - 面番号 - 1 から 999999 まで使用できます。 * - 座標変換番号 - 座標変換を行わない場合は指定しません。座標変換がある場合は **[transform]** セクションで定義する **TRn** の番号 **n** を指定します。 * - 面記号 - 下表の方程式で定義される面、またはマクロボディーの記号を指定します。 * - 面定義数値 - 定義する面により1個から15個の入力値を指定します。 面記号は、方程式で表現できる面や、複数の面を組み合わせたマクロボディーの記号により指定します。 面定義数値では定数や数式が使えます。 また、面番号の前に **\*** をつけると全反射面、**+** をつけると白色反射面を定義できます。 例えば、無限に拡がる繰り返し構造を模擬する場合は、全反射面の機能を使うと便利です。 ただし、四面体メッシュ体系内では反射面は動作しません。 四面体メッシュ体系内で反射面を使いたい場合は、物理的に無視できる薄い四面体メッシュ体系外領域を内部に定義し、その中に反射面を定義すれば、反射を実現できます。 方程式で定義される面 -------------------------------------------------- .. list-table:: 方程式で定義される面 :header-rows: 1 * - 面記号 - 型式 - 解説 - 方程式 - 入力数値 * - **P** - 平面 - 汎用 - :math:`Ax+By+Cz-D=0` - :math:`A, B, C, D` * - **PX** - 平面 - X軸に垂直 - :math:`x-D=0` - :math:`D` * - **PY** - 平面 - Y軸に垂直 - :math:`y-D=0` - :math:`D` * - **PZ** - 平面 - Z軸に垂直 - :math:`z-D=0` - :math:`D` * - **P** - 平面 - 3点を通る面 - - :math:`x_1,y_1,z_1,\ x_2,y_2,z_2,\ x_3,y_3,z_3` * - **SO** - 球 - 中心が原点 - :math:`x^2+y^2+z^2-R^2=0` - :math:`R` * - **S** - 球 - 汎用 - :math:`(x-x_0)^2+(y-y_0)^2+(z-z_0)^2-R^2=0` - :math:`x_0, y_0, z_0, R` * - **SX** - 球 - 中心がX軸上 - :math:`(x-x_0)^2+y^2+z^2-R^2=0` - :math:`x_0, R` * - **SY** - 球 - 中心がY軸上 - :math:`x^2+(y-y_0)^2+z^2-R^2=0` - :math:`y_0, R` * - **SZ** - 球 - 中心がZ軸上 - :math:`x^2+y^2+(z-z_0)^2-R^2=0` - :math:`z_0, R` * - **C/X** - 円柱 - X軸に平行 - :math:`(y-y_0)^2+(z-z_0)^2-R^2=0` - :math:`y_0, z_0, R` * - **C/Y** - 円柱 - Y軸に平行 - :math:`(x-x_0)^2+(z-z_0)^2-R^2=0` - :math:`x_0, z_0, R` * - **C/Z** - 円柱 - Z軸に平行 - :math:`(x-x_0)^2+(y-y_0)^2-R^2=0` - :math:`x_0, y_0, R` * - **CX** - 円柱 - X軸上 - :math:`y^2+z^2-R^2=0` - :math:`R` * - **CY** - 円柱 - Y軸上 - :math:`x^2+z^2-R^2=0` - :math:`R` * - **CZ** - 円柱 - Z軸上 - :math:`x^2+y^2-R^2=0` - :math:`R` * - **K/X** - 円錐 - X軸に平行 - :math:`\sqrt{(y-y_0)^2+(z-z_0)^2} \mp |t|(x-x_0)=0` - :math:`x_0, y_0, z_0, |t|^2, k` * - **K/Y** - 円錐 - Y軸に平行 - :math:`\sqrt{(x-x_0)^2+(z-z_0)^2} \mp |t|(y-y_0)=0` - :math:`x_0, y_0, z_0, |t|^2, k` * - **K/Z** - 円錐 - Z軸に平行 - :math:`\sqrt{(x-x_0)^2+(y-y_0)^2} \mp |t|(z-z_0)=0` - :math:`x_0, y_0, z_0, |t|^2, k` * - **KX** - 円錐 - X軸上 - :math:`\sqrt{y^2+z^2} \mp |t|(x-x_0)=0` - :math:`x_0, |t|^2, k` * - **KY** - 円錐 - Y軸上 - :math:`\sqrt{x^2+z^2} \mp |t|(y-y_0)=0` - :math:`y_0, |t|^2, k` * - **KZ** - 円錐 - Z軸上 - :math:`\sqrt{x^2+y^2} \mp |t|(z-z_0)=0` - :math:`z_0, |t|^2, k` * - **SQ** - 楕円面・双曲面・放物面 - X, Y, またはZ軸に平行な軸 - :math:`A(x-x_0)^2+B(y-y_0)^2+C(z-z_0)^2+2D(x-x_0)+2E(y-y_0)+2F(z-z_0)+G=0` - :math:`A, B, C, D, E, F, G, x_0, y_0, z_0` * - **GQ** - 円柱・円錐・楕円面・双曲面・放物面 - X, Y, Z軸に平行でない軸 - :math:`Ax^2+By^2+Cz^2+Dxy+Eyz+Fzx+Gx+Hy+Jz+K=0` - :math:`A, B, C, D, E, F, G, H, J, K` * - **TX** - 楕円環体・円環体 - X軸回り - :math:`(x-x_0)^2/B^2+(\sqrt{(y-y_0)^2+(z-z_0)^2}-A)^2/C^2-1=0` - :math:`x_0, y_0, z_0, A, B, C` * - **TY** - 楕円環体・円環体 - Y軸回り - :math:`(y-y_0)^2/B^2+(\sqrt{(x-x_0)^2+(z-z_0)^2}-A)^2/C^2-1=0` - :math:`x_0, y_0, z_0, A, B, C` * - **TZ** - 楕円環体・円環体 - Z軸回り - :math:`(z-z_0)^2/B^2+(\sqrt{(x-x_0)^2+(y-y_0)^2}-A)^2/C^2-1=0` - :math:`x_0, y_0, z_0, A, B, C` **[surface]** セクションで定義した面を **[cell]** セクションで使用する際、基本的にはその面によって作られる形状の内側をマイナス側、外側をプラス側として指定してください。 ただし、平面などの閉じた形状でない面の場合は、その面を表す方程式 :math:`f(x,y,z)=0` に対して、任意の座標 :math:`(x_0,y_0,z_0)` を代入して判別してください。 左辺の値 :math:`f(x_0,y_0,z_0)` が正であれば座標 :math:`(x_0,y_0,z_0)` が含まれる領域がプラス側、負であればマイナス側となります。 例えば、 **PY** で :math:`D=5` とした場合、方程式が :math:`f(x,y,z)=y-5=0` となるため、原点 :math:`(0,0,0)` を含む領域は :math:`f(0,0,0)=0-5=-5` のマイナス側となります。 面記号 **P** を用いて、3つの座標を与えることにより平面を定義できます。 この場合、座標原点を含む領域がマイナス側として定義されますので、 **[cell]** セクションで使用する際はご注意ください。 円錐の場合、 :math:`x_0, y_0, z_0` 等で指定する頂点を中心に、中心軸に沿ってプラス側とマイナス側の両方に円錐面が定義されます。 :math:`k` の入力を1とすると軸のプラス側に広がる面のみを指定し、 :math:`k=-1` とすると軸のマイナス側に広がる面のみを指定します。 :math:`k` に何の値も与えない場合はその両方を指定します。 マクロボディー -------------------------------------------------- .. list-table:: マクロボディー :header-rows: 1 * - 面記号 - 型式 - 入力数値 - 解説 * - **BOX** - 任意のBOX平面 - :math:`x_0,y_0,z_0, A_x,A_y,A_z, B_x,B_y,B_z, C_x,C_y,C_z` - 基点の座標と3つのベクトル。 * - **RPP** - 直方体 - :math:`x_{\min}, x_{\max}, y_{\min}, y_{\max}, z_{\min}, z_{\max}` - 各面が :math:`x,y,z` 軸に垂直な直方体。 * - **SPH** - 球 - :math:`x_0, y_0, z_0, R` - 中心座標と半径。 * - **RCC** - 円柱 - :math:`x_0, y_0, z_0, H_x, H_y, H_z, R` - 底面中心の座標、上面中心へのベクトル、半径。 * - **RHP** / **HEX** - 任意の6角柱 - :math:`x_0, y_0, z_0, H_x, H_y, H_z, A_x, A_y, A_z, B_x, B_y, B_z, C_x, C_y, C_z` - 基点、高さベクトル、第1面から第3面へのベクトル。 * - **REC** - 楕円柱 - :math:`x_0, y_0, z_0, H_x, H_y, H_z, A_x, A_y, A_z, B_x, B_y, B_z` - 底面中心、高さベクトル、長軸ベクトル、短軸ベクトル。 * - **TRC** - カットされた円錐 - :math:`x_0, y_0, z_0, H_x, H_y, H_z, R_1, R_2` - 円錐底面の中心座標、高さベクトル、底面半径、上面半径。 * - **ELL** - 楕円体 - :math:`R>0` のとき :math:`x_1,y_1,z_1, x_2,y_2,z_2, R` - 第1焦点、第2焦点、長軸半径。 * - **ELL** - 楕円体 - :math:`R<0` のとき :math:`x_0,y_0,z_0, A_x,A_y,A_z, R` - 楕円体の中心、長軸ベクトル、短軸半径。 * - **WED** - くさび形 - :math:`x_0, y_0, z_0, A_x, A_y, A_z, B_x, B_y, B_z, H_x, H_y, H_z` - 頂点の座標、底面三角形を定義する2つのベクトル、高さベクトル。 カットされた円錐 ( **TRC** ) を用いる際、上面の半径 ( :math:`R_2` ) を 0にすると、自動的にR2=1.0e-5に変更されます。 例えば、 **TRC** を用いてカットされていない(頂点をもつ)円錐を定義する場合は、 :math:`R_2` の値に小さな値を入れてください。 くさび形 **WED** は、その底面が直角三角形である必要があります。 任意の三角形は直角三角形を組み合わせて作成してください。 面の記述方法 -------------------------------------------------- 本節では、各面とマクロボディーについて、例題を用いて説明します。 .. _ex-surface-ex1: .. code-block:: text :caption: 平面の例題(1) [surface] 1 PY 5 **PX**, **PY**, **PZ** はそれぞれ :math:`x,y,z` 軸に垂直な平面を定義します。 この例題では、面記号に **PY**、面定義数値に5を指定することで、面番号1の面を :math:`y` 軸に垂直な :math:`y=5` の平面として定義しています。 この面は、 :numref:`fig-surface-ex1` の破線で示した面のようになります。 .. figure:: surface-plane1.png :width: 20em :name: fig-surface-ex1 :alt: 平面の例題1 例題(1)で定義した :math:`y=5` の平面。 .. _ex-surface-ex2: .. code-block:: text :caption: 平面の例題(2) [surface] 1 P 2 2 1 10 2 P 5 0 0 0 5 0 0 0 10 任意の面を定義する際は、面記号に **P** を指定します。 この場合、面定義数値の指定方法には2種類あり、方程式 :math:`Ax+By+Cz-D=0` を満たす :math:`A,B,C,D` を指定する方法と、平面を通る3つの座標 :math:`(x_1,y_1,z_1),(x_2,y_2,z_2),(x_3,y_3,z_3)` を指定する方法があります。 前者の方法は、定義したい面に垂直な法線ベクトル :math:`(s,t,u)` とその面が通る点の座標 :math:`(x_0,y_0,z_0)` がわかっている場合に利用できます。 .. math:: s(x-x_0)+t(y-y_0)+u(z-z_0)=0 これを変形すると、 .. math:: sx+ty+uz-(sx_0+ty_0+uz_0)=0 となるため、 :math:`A=s, B=t, C=u, D=sx_0+ty_0+uz_0` を指定することで、目的の面を定義できます。 例題(2)に示した面番号1は、法線ベクトルを :math:`(2,2,1)` とし、座標 :math:`(5,0,0)` を通る面です。 この面は、 :numref:`fig-surface-ex2` の破線で示した面のようになります。 後者の方法では、定義したい面が通過する3つの座標を指定します。 例題(2)の面番号2は、座標 :math:`(5,0,0),(0,5,0),(0,0,10)` を通る面となっており、面番号1の面と同じものです。 .. figure:: surface-plane2.png :width: 20em :name: fig-surface-ex2 :alt: 平面の例題2 例題(2)で定義した面。 .. _ex-surface-ex3: .. code-block:: text :caption: 球面の例題 [surface] 1 SO 5 2 SZ 10 3 3 S 10 10 0 3 球面を定義する際は、 **SO**, **SX**, **SY**, **SZ**, **S** を指定します。 **SO** は座標原点を中心とする球面を定義する場合に指定し、面定義数値としてその半径 :math:`R` を指定します。 この例題では、2行目において、原点を中心として半径を5 cmとする球面を面番号1の面として定義しています。 **SX**, **SY**, **SZ** は、それぞれ :math:`x,y,z` 軸上に中心をもつ球面を定義する際に指定します。 面定義数値は、各軸上の値と半径 :math:`R` を指定します。 例題の3行目では、 :math:`z` 軸上の座標 :math:`(0,0,10)` を中心とする半径3 cmの球面を面番号2の面として定義しています。 任意の座標 :math:`(x_0,y_0,z_0)` を中心とする球面を定義する場合は **S** を指定します。 この場合、面定義数値には、球の中心を示す座標 :math:`(x_0,y_0,z_0)` と半径 :math:`R` を指定します。 例題では、 :math:`(10,10,0)` を中心とする半径3 cmの球面を面番号3の面として定義しています。 例題で定義した面番号1,2,3の面は :numref:`fig-surface-ex3` に示す3つの球面のようになります。 .. figure:: surface-sphere.png :width: 30em :name: fig-surface-ex3 :alt: 球面の例題 例題で定義した3つの球面。 .. _ex-surface-ex4: .. code-block:: text :caption: 円柱側面の例題 [surface] 1 CY 5 2 C/Y 15 0 3 :math:`x,y,z` 軸を中心軸とする円柱の側面を定義する際には、それぞれ **CX**, **CY**, **CZ** を指定します。 この場合、面定義数値には円柱の半径 :math:`R` を指定します。 例題の2行目では、 :math:`y` 軸を中心軸とする半径5 cmの円柱の側面を定義しています。 これは :numref:`fig-surface-ex4` の右上に示す円柱の側面に対応しています。 次に、 **C/X**, **C/Y**, **C/Z** は、それぞれ :math:`x,y,z` 軸に平行な直線を中心軸とする円柱の側面を定義する際に指定します。 この場合、円柱の半径 :math:`R` の他に、中心軸が通る点の座標を指定する必要があります。 例題の3行目では、 :math:`y` 軸に平行で座標 :math:`(15,0,0)` を通る直線を中心軸とする円柱の側面を定義しています。 :math:`x_0=15,z_0=0` の値を面定義数値の1,2番目のそれぞれで指定しており、最後に半径3 cmを与えています。 この面は、 :numref:`fig-surface-ex4` の左下に示す円柱の側面に対応します。 :math:`x,y,z` 軸に平行でない直線を中心軸とする円柱は面記号 **GQ** を用いて定義できますが、 **[transform]** を使った座標変換を利用する方が便利です。 .. figure:: surface-cylinder.png :width: 20em :name: fig-surface-ex4 :alt: 円柱側面の例題 例題で定義した2つの円柱の側面。 .. _ex-surface-ex5: .. code-block:: text :caption: 円錐面の例題 [surface] 1 KZ 0 1 2 K/Z 0 20 0 1/3 1 :math:`x,y,z` 軸を中心軸とする円錐面を定義する際は、 **KX**, **KY**, **KZ** を指定します。 面定義数値には、各軸上の頂点の座標、円錐の角度に関するパラメータ :math:`|t|^2` および円錐の広がる方向に関するパラメータ :math:`k` を指定します。 例題の2行目に **KZ** を指定した例を示しており、面定義数値の1番目に頂点の :math:`z` 座標 :math:`z_0=0`、2番目に :math:`|t|^2=1` を指定しています。 面記号 **KZ** の方程式は、 .. math:: \sqrt{x^2+y^2} \mp |t|(z-z_0) = 0 なので、各面定義数値の値を代入すると、 .. math:: \sqrt{x^2+y^2} - z = 0,\,(z > 0) .. math:: \sqrt{x^2+y^2} + z = 0,\,(z < 0) となります。 この場合、面番号1の面は、円錐の頂点を :math:`(0,0,0)` とし、 :math:`z` 軸を中心軸とする円錐面となり、 :numref:`fig-surface-ex5` の左側に示す面のようになります。 これらはそれぞれ面定義数値の最後に :math:`k=1` あるいは :math:`k=-1` を指定することで定義できますが、例題の2行目では :math:`k` を未指定としており、この場合は両方の面を定義することになります。 また、面定義数値の2番目は、円錐の中心軸と母線のなす角度 :math:`\theta` と :math:`|t|^2=\tan^2\theta` の関係にあります。よって、面番号1の場合は :math:`\theta=45^\circ` となります。 次に、 :math:`x,y,z` 軸に平行な中心軸をもち、座標 :math:`(x_0,y_0,z_0)` を頂点とする円錐面を定義する場合は、 **K/X**, **K/Y**, **K/Z** を指定します。 例題の3行目に、 **K/Z** を指定した例を示します。 頂点は :math:`(0,20,0)` であり、 :math:`z` 軸に平行な中心軸をもつ円錐面を定義しています。 :math:`|t|^2=1/3` であることから、 :math:`\theta=30^\circ` となります。 また、 :math:`k=1` とすることで、プラス側の円錐面のみを定義しています。 なお、 :math:`k=\pm1` を定義した場合、斜め方向への回転ができなくなってしまいます。 そのような場合は、 :math:`k` は定義せずに両側に広がる円錐面を定義した上で、別の面を定義して片側のみに広がる円錐面を表現してください。 .. figure:: surface-cone.png :width: 30em :name: fig-surface-ex5 :alt: 円錐面の例題 例題で定義した円錐面。 .. _ex-surface-ex6: .. code-block:: text :caption: 楕円面の例題 [surface] 1 SQ 1/9**2 1/6**2 1/3**2 0 0 0 -1 0 0 0 :numref:`fig-surface-ex6` に示すような楕円面を定義する場合は、 **SQ** を指定します。 楕円面の方程式は、 :math:`x,y,z` 軸方向の半径がそれぞれ :math:`a,b,c` の場合に、 .. math:: \frac{x^2}{a^2} + \frac{y^2}{b^2} + \frac{z^2}{c^2} = 1 と書けます。 よって、 **SQ** の面定義数値の1,2,3番目にそれぞれ :math:`A=1/a^2,B=1/b^2,C=1/c^2` を指定し、4,5,6番目には :math:`D=E=F=0`、7番目には :math:`G=-1` を指定することで、楕円面を定義できます。 例題では、 :math:`x,y,z` 軸方向の半径がそれぞれ 9, 6, 3 cm の場合の楕円面を定義しています。 楕円を回転させて定義される回転楕円体を指定する場合は、回転軸以外の軸方向の径の長さを一致させます。 例えば、 :math:`x` 軸を回転軸とする場合は、 :math:`b=c` すなわち :math:`B=C` と指定します。 また、面定義数値の8,9,10番目で、楕円体の中心の座標 :math:`(x_0,y_0,z_0)` を指定します。 例題では、座標原点 :math:`(0,0,0)` を楕円体の中心としています。 なお、 :math:`D,E,F` に0以外の値を指定すると、楕円面以外の2次曲面を表すことになるのでご注意ください。 .. figure:: surface-ellipsoid.png :width: 20em :name: fig-surface-ex6 :alt: 楕円面の例題 例題で定義した楕円面。 .. _ex-surface-ex7: .. code-block:: text :caption: 双曲面の例題 [surface] 1 SQ 1/6**2 1/3**2 -1/5**2 0 0 0 -1 0 0 0 2 SQ -1/6**2 -1/3**2 1/5**2 0 0 0 -1 0 20 0 :numref:`fig-surface-ex7` の中央と右側に示したような双曲面を定義する場合は、面記号に **SQ** を指定します。 中央に示したものは一葉双曲面、右側に示したものは二葉双曲面と呼ばれており、それぞれ次の方程式によって定義されます。 .. math:: \frac{x^2}{a^2} + \frac{y^2}{b^2} - \frac{z^2}{c^2} = 1 .. math:: -\frac{x^2}{a^2} - \frac{y^2}{b^2} + \frac{z^2}{c^2} = 1 ただし、これらは :math:`z` 軸を中心軸としたものです。 また、 :math:`a=b` の場合は回転双曲面となります。 例題の2行目で定義している面番号1が、 :numref:`fig-surface-ex7` の中央にある一葉双曲面となります。 面定義数値の1,2,3番目にそれぞれ :math:`A=1/6^2,B=1/3^2,C=-1/5^2` を指定し、4,5,6番目には :math:`D=E=F=0`、7番目には :math:`G=-1` を指定しています。 中心軸は :math:`z` 軸であり、面定義数値の8,9,10番目に :math:`(0,0,0)` を指定することで、中心軸が座標原点を通ります。 この双曲面と :math:`z` 軸に垂直な平面の交線は楕円となります。 :numref:`fig-surface-ex7` の左側に示したのが、 :math:`z=0` の平面上で面番号1の面を見た図です。 :math:`x,y` 軸方向の半径がそれぞれ :math:`a=6,b=3` cm の楕円となっています。 例題の3行目で定義しているのが、 :numref:`fig-surface-ex7` の右側に示す二葉双曲面です。 面番号1とは :math:`a,b,c` の符号を逆転させており、面定義数値の4,5,6番目を0、7番目を :math:`G=-1` とすることで、二葉双曲面を定義しています。 ただし、面定義数値の8,9,10番目において :math:`(x_0,y_0,z_0)=(0,20,0)` と指定することで、中心軸が :math:`(0,20,0)` を通過する面となっています。 また、二葉双曲面を用いて **[cell]** セクションで領域を定義する際は、座標 :math:`(x_0,y_0,z_0)` を含む領域がマイナス側、含まない方がプラス側となります。 図の右下にある双曲面の内側の領域もプラス側として指定することになりますので、ご注意ください。 .. figure:: surface-hyperboloid.png :width: 40em :name: fig-surface-ex7 :alt: 双曲面の例題 例題で定義した双曲面。 .. _ex-surface-ex8: .. code-block:: text :caption: 放物面の例題 [surface] 1 SQ 1 1/2**2 0 0 0 -1 0 0 0 0 :numref:`fig-surface-ex8` の中央に示したような放物面を定義する場合には、 :numref:`ex-surface-ex8` のように面記号 **SQ** を用いて指定します。 一般に :math:`z` 軸を中心軸とする放物面の式は次のようになります。 .. math:: z = \frac{x^2}{a^2} + \frac{y^2}{b^2} よって、面定義数値の1,2,3番目にそれぞれ :math:`A=1/a^2,B=1/b^2,C=0` を指定し、4,5,6番目には :math:`D=E=0,F=-1`、7番目には :math:`G=0` を指定することで、 :math:`z` 軸を中心軸とする放物面を定義できます。 例題では :math:`a=1,b=2` の放物面を定義しています。 この放物面と :math:`z` 軸を含む平面の交線は放物線となり、 :math:`y=0` と :math:`x=0` の平面上で見ると、それぞれ :numref:`fig-surface-ex8` の左側と右側に示す放物線となります。 また、放物面の頂点 :math:`(x_0,y_0,z_0)` は面定義数値の8,9,10番目で指定します。 .. figure:: surface-paraboloid.png :width: 40em :name: fig-surface-ex8 :alt: 放物面の例題 例題で定義した放物面。 .. _ex-surface-ex9: .. code-block:: text :caption: GQの例題 [surface] set: c1[30] set: c2[cos(c1/180*pi)] set: c3[sin(c1/180*pi)] 1 GQ c2**2 1/2**2 c3**2 0 0 -2*c2*c3 -c3 0 -c2 0 面記号 **GQ** は、 :math:`x,y,z` の2次式で表現される曲面を定義する場合に使用します。 同様に2次式で表現される **CX** 等、 **KX** 等、 **SQ** との違いは、中心軸が :math:`x,y,z` 軸と平行でない曲面に対しても定義できる点です。 ただし、単純な1次変換であれば、 **CX**, **KX**, **SQ** 等で定義した面に対して **[transform]** セクションで定義した座標変換を適用する方が便利です。 :numref:`ex-surface-ex9` では、 :numref:`ex-surface-ex8` で取り扱った放物面を :math:`y` 軸回りに :math:`30^\circ` だけ回転させた例を示しており、 :numref:`fig-surface-ex9` のような面を定義できます。 この例題で指定した面定義数値は、下記の計算により求めたものです。 座標 :math:`(x,y,z)` を :math:`y` 軸周りに :math:`\theta` 回転させた座標を :math:`(x',y',z')` とすると、これらの関係は、 .. math:: \begin{pmatrix} x' \\ y' \\ z' \end{pmatrix} = \begin{pmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{pmatrix} \begin{pmatrix} x \\ y \\ z \end{pmatrix} と書けます。この関係式より、 .. math:: \begin{pmatrix} x \\ y \\ z \end{pmatrix} = \begin{pmatrix} \cos\theta & 0 & -\sin\theta \\ 0 & 1 & 0 \\ \sin\theta & 0 & \cos\theta \end{pmatrix} \begin{pmatrix} x' \\ y' \\ z' \end{pmatrix} = \begin{pmatrix} x'\cos\theta-z'\sin\theta \\ y' \\ x'\sin\theta+z'\cos\theta \end{pmatrix} が求まるので、これを :numref:`ex-surface-ex8` の放物面の式に代入すると、 .. math:: x'\sin\theta+z'\cos\theta = \frac{\left(x'\cos\theta-z'\sin\theta\right)^2}{a^2} + \frac{{y'}^2}{b^2} .. math:: 0 = \frac{\cos^2\theta}{a^2}{x'}^2 + \frac{1}{b^2}{y'}^2 + \frac{\sin^2\theta}{a^2}{z'}^2 - \frac{2\cos\theta\sin\theta}{a^2}x'z' - x'\sin\theta - z'\cos\theta と :math:`x',y',z'` の方程式が得られます。 この式と上表にある **GQ** の方程式を比べ、各面定義数値を指定すると、放物面を :math:`y` 軸周りに :math:`\theta` だけ回転させた面を定義できます。 この例題では、 :math:`\theta=30^\circ` を **c1** として定数定義しており、これを用いた :math:`\sin\theta,\cos\theta` をそれぞれ **c2**, **c3** として定数定義しています。 .. figure:: surface-GQ.png :width: 20em :name: fig-surface-ex9 :alt: GQの例題 例題で定義した放物面。 .. _ex-surface-ex10: .. code-block:: text :caption: 楕円環面(トーラス面)の例題 [surface] 1 TZ 0 0 0 10 3 5 :numref:`fig-surface-ex10` の中央に示すような楕円環面(トーラス面)は、楕円をその円の外側にある軸を中心に回転させて得られる面です。 面記号 **TX**, **TY**, **TZ** を用いて定義することができ、それぞれ :math:`x,y,z` 軸を回転軸とする楕円環面を定義します。 :math:`z` 軸を回転軸とする楕円環面の方程式は、 .. math:: \frac{\left(\sqrt{x^2+y^2}-R\right)^2}{a^2} + \frac{z^2}{b^2} = 1 と書くことができます。 この場合の楕円は長軸方向に :math:`2a`、短軸方向に :math:`2b` の大きさをもち、楕円の中心と回転軸の距離は :math:`R` となります。 :numref:`ex-surface-ex10` では楕円環体の中心を原点としており、面定義数値の1,2,3番目は全て0と指定しています。 面定義数値の4番目に :math:`A=R=10` cm、5番目に :math:`B=b=3` cm、6番目に :math:`C=a=5` cmを指定することで、長軸方向に10 cm、短軸方向に6 cmの大きさをもつ楕円を :math:`z` 軸から10 cm離れた位置で回転させた楕円環面を定義しています。 :numref:`fig-surface-ex10` の左側に示したのが :math:`z=0` の平面との交線です。原点と環の中心との距離は10 cm、環の大きさは :math:`5 \cdot 2 = 10` cmとなります。 :numref:`fig-surface-ex10` の右側に示したのが :math:`y=0` の平面との交線です。ただし、 :math:`x` 軸のプラス側のみ示しています。 環の断面図となっており、楕円が長軸方向に10 cm、短軸方向に6 cmの大きさをもっていることがわかります。 .. figure:: surface-torus.png :width: 40em :name: fig-surface-ex10 :alt: トーラス面の例題 例題で定義した楕円環面。 .. _ex-surface-ex11: .. code-block:: text :caption: BOXの例題 [surface] 1 BOX 5 5 0 9 0 0 0 6 0 0 0 3 任意の直方体の面を定義する場合は、面記号 **BOX** を指定します。 面定義数値には、基点の座標 :math:`P(x_0,y_0,z_0)` と、直方体を形作る3つのベクトル :math:`\mathbf{A}(A_x,A_y,A_z)`, :math:`\mathbf{B}(B_x,B_y,B_z)`, :math:`\mathbf{C}(C_x,C_y,C_z)` の各成分を指定します。 これらの関係は :numref:`fig-surface-ex11` のようになります。 :numref:`ex-surface-ex11` では、点 :math:`(5,5,0)` を頂点の1つとし、 :math:`\mathbf{A}=(9,0,0)`, :math:`\mathbf{B}=(0,6,0)`, :math:`\mathbf{C}=(0,0,3)` の3つのベクトルが示す方向に広がった直方体の面を定義しています。 任意の直方体の面を定義する際、 :math:`\mathbf{A},\mathbf{B},\mathbf{C}` は :math:`x,y,z` 軸に平行である必要はありませんが、各々のベクトルの関係は垂直である必要があります。 .. figure:: surface-box.png :width: 25em :name: fig-surface-ex11 :alt: BOXの例題 例題で定義した直方体の面。 .. _ex-surface-ex12: .. code-block:: text :caption: RPPの例題 [surface] 1 RPP 5 14 5 11 0 3 面記号 **RPP** は、 :math:`xy,yz,zx` 平面に平行な各々2つずつの平面で囲まれる直方体の面を定義する場合に指定します。 よって、 **BOX** とは違い、各軸に対して任意の傾きをもつ直方体は定義できません。 面定義数値として、 :math:`x,y,z` に関するそれぞれの最小値と最大値を与えます。 :numref:`ex-surface-ex12` では、面定義数値の1から6番目に、 :math:`x_{\rm min}=5, x_{\rm max}=14`, :math:`y_{\rm min}=5, y_{\rm max}=11`, :math:`z_{\rm min}=0, z_{\rm max}=3` を指定しており、 :numref:`ex-surface-ex11` で定義したものと同じ直方体の面を定義しています。 .. figure:: surface-rpp.png :width: 25em :name: fig-surface-ex12 :alt: RPPの例題 例題で定義した直方体の面。 .. _ex-surface-ex13: .. code-block:: text :caption: SPHの例題 [surface] 1 SPH 5 5 5 5 面記号 **SPH** を指定することで、任意の点を中心とする球面を定義できます。 面定義数値には、球の中心の座標 :math:`(x_0,y_0,z_0)` を1,2,3番目に指定し、球の半径を4番目に指定します。 :numref:`ex-surface-ex13` では、点 :math:`(5,5,5)` を中心とし、半径を :math:`R=5` cmとする球面を定義しています。 なお、任意の球面 **S** との違いはありません。 .. figure:: surface-sph.png :width: 20em :name: fig-surface-ex13 :alt: SPHの例題 例題で定義した球面。 .. _ex-surface-ex14: .. code-block:: text :caption: RCCの例題 [surface] 1 RCC 5 5 0 0 0 10 5 面記号 **RCC** を指定することで、円柱面を定義できます。 面定義数値として、円柱の底面の中心座標 :math:`P(x_0,y_0,z_0)` の各成分、その点から上面中心へのベクトル :math:`\mathbf{H}(H_x,H_y,H_z)` の各成分と半径 :math:`R` を指定します。 これらの関係は :numref:`fig-surface-ex14` のようになります。 例題では、 :math:`P(5,5,0)` を円柱底面の中心とし、上面中心へのベクトルを :math:`\mathbf{H}=(0,0,10)`、半径を :math:`R=5` cmとしています。 **CX** や **C/X** 等とは違い、 :math:`x,y,z` 軸に平行ではない直線を中心軸とする円柱面を定義する際に便利です。 .. figure:: surface-rcc.png :width: 25em :name: fig-surface-ex14 :alt: RCCの例題 例題で定義した円柱面。 .. _ex-surface-ex15: .. code-block:: text :caption: RHPの例題 [surface] 1 RHP 0 0 0 0 0 10 5 0 0 2 -5 0 -2 -5 0 :numref:`fig-surface-ex15` の右側に示すような六角柱の面を定義する場合は、面記号 **RHP** あるいは **HEX** を指定します。 面定義数値には、六角形となる底面の中心の座標 :math:`P(x_0,y_0,z_0)` の各成分と、その点から上面中心へのベクトル :math:`\mathbf{H}(H_x,H_y,H_z)` の各成分の他、六角形を定義するための3つのベクトル :math:`\mathbf{A}(A_x,A_y,A_z)`, :math:`\mathbf{B}(B_x,B_y,B_z)`, :math:`\mathbf{C}(C_x,C_y,C_z)` の各成分を指定します。 六角形の中心 :math:`P` と3つのベクトル :math:`\mathbf{A},\mathbf{B},\mathbf{C}` の関係は、 :numref:`fig-surface-ex15` の左側に示すようになります。 すなわち、点 :math:`P` から六角形の連続する3つの辺に下ろした垂線の大きさと方向を3つのベクトルとして与えます。 :numref:`ex-surface-ex15` では、原点を底面の中心とし、 :math:`z` 軸方向に10 cmの高さをもつ六角柱の面を定義しています。 面定義数値の1,2,3番目には原点 :math:`(0,0,0)` の各成分を指定し、4,5,6番目では :math:`\mathbf{H}=(0,0,10)` の各成分を指定しています。 7番目から15番目までは :math:`\mathbf{A},\mathbf{B},\mathbf{C}` の :math:`x,y,z` 成分をそれぞれ順番に指定し、 :numref:`fig-surface-ex15` の左側に示す :math:`y` 軸に関して対称な六角形を定義しています。 .. figure:: surface-rhp.png :width: 40em :name: fig-surface-ex15 :alt: RHPの例題 例題で定義した六角柱の面。 .. _ex-surface-ex16: .. code-block:: text :caption: RECの例題 [surface] 1 REC 0 0 0 0 0 10 5 0 0 0 2 0 :numref:`fig-surface-ex16` の右側に示すような楕円柱の面を定義する場合は、面記号 **REC** を指定します。 面定義数値には、底面の中心の座標 :math:`P(x_0,y_0,z_0)` の各成分と、その点から上面中心へのベクトル :math:`\mathbf{H}(H_x,H_y,H_z)` の各成分の他、楕円を定義するための2つのベクトル :math:`\mathbf{A}(A_x,A_y,A_z)`, :math:`\mathbf{B}(B_x,B_y,B_z)` の各成分を指定します。 楕円の中心 :math:`P` と2つのベクトル :math:`\mathbf{A},\mathbf{B}` の関係は、 :numref:`fig-surface-ex16` の左側に示すようになります。 楕円の中心を始点として、図のように長軸ベクトル :math:`\mathbf{A}` と短軸ベクトル :math:`\mathbf{B}` を定義します。 :numref:`ex-surface-ex16` では、原点を底面の中心とし、 :math:`z` 軸方向に10 cmの高さをもつ楕円柱の面を定義しています。 面定義数値の1,2,3番目には原点 :math:`(0,0,0)` の各成分を指定し、4,5,6番目では :math:`\mathbf{H}=(0,0,10)` の各成分を指定しています。 7から12番目までは :math:`\mathbf{A}` と :math:`\mathbf{B}` の :math:`x,y,z` 成分をそれぞれ順番に指定し、 :numref:`fig-surface-ex16` の左側に示す楕円を定義しています。 .. figure:: surface-rec.png :width: 40em :name: fig-surface-ex16 :alt: RECの例題 例題で定義した楕円柱の面。 .. _ex-surface-ex17: .. code-block:: text :caption: TRCの例題 [surface] 1 TRC 0 0 0 0 0 10 5 2 :numref:`fig-surface-ex17` に示すようなカットされた円錐の面を定義する場合は、面記号 **TRC** を指定します。 面定義数値には、底面の中心の座標 :math:`P(x_0,y_0,z_0)` の各成分と、その点から上面中心へのベクトル :math:`\mathbf{H}(H_x,H_y,H_z)` の各成分に加えて、底面の円の半径 :math:`R_1` と上面の円の半径 :math:`R_2` を指定します。 :numref:`ex-surface-ex17` では、原点を底面の中心とし、 :math:`z` 軸方向に10 cmの高さをもつカットされた円錐の面を定義しています。 面定義数値の1,2,3番目には原点 :math:`(0,0,0)` の各成分を指定し、4,5,6番目では :math:`\mathbf{H}=(0,0,10)` の各成分を指定しています。 底面の半径は :math:`R_1=5` cm、上面の半径は :math:`R_2=2` cmとしており、これらを面定義数値の7,8番目のそれぞれで指定しています。 なお、上面の半径 :math:`R_2` を0に設定した場合、自動的に :math:`R_2=1.0 \times 10^{-5}` となります。 これは、 **TRC** を用いて頂点を持つ円錐面を定義できないためです。 .. figure:: surface-trc.png :width: 25em :name: fig-surface-ex17 :alt: TRCの例題 例題で定義したカットされた円錐の面。 .. _ex-surface-ex18: .. code-block:: text :caption: ELLの例題(1) [surface] 1 ELL 3 3 0 -3 -3 0 9 面記号 **ELL** を用いて、任意の位置に回転楕円体の面を定義できます。 楕円の焦点の座標や中心の座標を指定することで楕円を定義し、その楕円を長軸周りに回転させることで、楕円面を定義します。 ただし、この面記号は面定義数値の7番目に指定する :math:`R` の符号によって、1から6番目に指定する値の意味が変わります。 :numref:`ex-surface-ex18` では :math:`R` が正の場合を扱っており、この場合は、楕円を形作る2つの焦点と長軸の半径を指定します。 面定義数値の1,2,3番目で楕円の第1焦点の座標 :math:`P_1(x_1,y_1,z_1)` を与え、4,5,6番目で第2焦点の座標 :math:`P_2(x_2,y_2,z_2)`、7番目の値 :math:`R` には長軸の半径を与えます。 :numref:`fig-surface-ex18` の右側に示したのが、 :numref:`ex-surface-ex18` により定義された楕円面です。 楕円の第1,2焦点の座標はそれぞれ :math:`P_1=(3,3,0)`, :math:`P_2=(-3,-3,0)` としており、 :math:`xy` 平面上に定義しています。 また、長軸の方向は :math:`xy` 平面上で :math:`x` 軸から :math:`45^\circ` 傾けた方向としており、 :numref:`fig-surface-ex18` の左側に示すような楕円となっています。 長軸の長さは :math:`2R=18` cmであり、この軸を回転軸とする回転楕円体の面が定義されます。 面記号 **SQ** で定義する楕円面との違いは、回転軸を傾けることが容易である点です。 ただし、 **ELL** は、楕円体の2つの軸の長さが等しい回転楕円体のみを定義する変数であることに注意してください。 .. figure:: surface-ell1.png :width: 30em :name: fig-surface-ex18 :alt: ELLの例題1 例題(1)で定義した楕円面。 .. _ex-surface-ex19: .. code-block:: text :caption: ELLの例題(2) [surface] 1 ELL 0 0 0 6 6 0 -6 :numref:`ex-surface-ex19` では面記号 **ELL** の7番目の面定義数値 :math:`R` が負の場合を扱っています。 この場合は、楕円を定義するために、中心の座標 :math:`P` と長軸ベクトル :math:`\mathbf{A}` および短軸の半径を指定します。 例題では楕円の中心を原点としており、定義数値の1,2,3番目でその座標を :math:`P(x_0,y_0,z_0)=(0,0,0)` と与えています。 4,5,6番目では :math:`\mathbf{A}` を :math:`(A_x,A_y,A_z)=(6,6,0)` と与えており、 :numref:`fig-surface-ex19` の左側に示すような楕円を定義しています。 7番目の値 :math:`R` はその絶対値が6 cmとなっており、これが楕円の短軸の半径となります。 :numref:`fig-surface-ex19` の右側が、左側の楕円を長軸を回転軸として回転させて求めた楕円面です。 .. figure:: surface-ell2.png :width: 30em :name: fig-surface-ex19 :alt: ELLの例題2 例題(2)で定義した楕円面。 .. _ex-surface-ex20: .. code-block:: text :caption: WEDの例題 [surface] 1 WED 0 0 0 10 0 0 0 10 0 0 0 5 面記号 **WED** を用いて、 :numref:`fig-surface-ex20` に示すようなくさび形の面を定義できます。 ただし、定義できるくさび形はその底面と上面が直角三角形となる三角柱のみです。 :numref:`ex-surface-ex20` では、面定義数値の1,2,3番目で底面の1つの頂点の座標 :math:`P(x_0,y_0,z_0)=(0,0,0)` を指定しており、これを始点とする2つのベクトル :math:`\mathbf{A}(A_x,A_y,A_z)=(10,0,0)` と :math:`\mathbf{B}(B_x,B_y,B_z)=(0,10,0)` を4,5,6番目と7,8,9番目で指定することで、直角三角形を定義しています。 面定義数値の10,11,12番目では、ベクトル :math:`\mathbf{H}(H_x,H_y,H_z)=(0,0,5)` を指定しており、三角柱の高さを決定しています。 .. figure:: surface-wed.png :width: 30em :name: fig-surface-ex20 :alt: WEDの例題 例題で定義したくさび形の面。 マクロボディーの面定義 -------------------------------------------------- マクロボディーで定義した面をセル定義文で使うときは、マイナス記号がマクロボディーの内側、プラス記号が外側を表します。 また、マクロボディーを構成するそれぞれの面もセル定義文で使うことができます。 **[surface]** で定義した面番号の後にピリオド **.** を入れ、その後にマクロボディー面番号を付けます。 .. _tbl-surface-mbodynumber: .. list-table:: マクロボディー面番号 :header-rows: 1 * - 記号 - マクロボディー面番号 - 解説 * - **BOX** - 1 - :math:`(A_x,\ A_y,\ A_z)` の終点に垂直な面 * - - 2 - :math:`(A_x,\ A_y,\ A_z)` の始点に垂直な面 * - - 3 - :math:`(B_x,\ B_y,\ B_z)` の終点に垂直な面 * - - 4 - :math:`(B_x,\ B_y,\ B_z)` の始点に垂直な面 * - - 5 - :math:`(C_x,\ C_y,\ C_z)` の終点に垂直な面 * - - 6 - :math:`(C_x,\ C_y,\ C_z)` の始点に垂直な面 * - **RPP** - 1 - :math:`x_{\rm max}` の面 * - - 2 - :math:`x_{\rm min}` の面 * - - 3 - :math:`y_{\rm max}` の面 * - - 4 - :math:`y_{\rm min}` の面 * - - 5 - :math:`z_{\rm max}` の面 * - - 6 - :math:`z_{\rm min}` の面 * - **SPH** - - 定義した面番号の面のみ。 * - **RCC** - 1 - 半径 :math:`R` の円柱の側面 * - - 2 - :math:`(H_x,\ H_y,\ H_z)` の終点に垂直な面 * - - 3 - :math:`(H_x,\ H_y,\ H_z)` の始点に垂直な面 * - **RHP** / **HEX** - 1 - :math:`(A_x,\ A_y,\ A_z)` の終点に垂直な面 * - - 2 - 面1の対面 * - - 3 - :math:`(B_x,\ B_y,\ B_z)` の終点に垂直な面 * - - 4 - 面3の対面 * - - 5 - :math:`(C_x,\ C_y,\ C_z)` の終点に垂直な面 * - - 6 - 面5の対面 * - - 7 - :math:`(H_x,\ H_y,\ H_z)` の終点に垂直な面 * - - 8 - :math:`(H_x,\ H_y,\ H_z)` の始点に垂直な面 * - **REC** - 1 - 楕円柱の側面 * - - 2 - :math:`(H_x,\ H_y,\ H_z)` の終点に垂直な面 * - - 3 - :math:`(H_x,\ H_y,\ H_z)` の始点に垂直な面 * - **TRC** - 1 - 円錐面 * - - 2 - :math:`(H_x,\ H_y,\ H_z)` の終点に垂直な面 * - - 3 - :math:`(H_x,\ H_y,\ H_z)` の始点に垂直な面 * - **ELL** - - 定義した面番号の面のみ。 * - **WED** - 1 - 底面と上面の斜辺を含む面 * - - 2 - :math:`\mathbf{B}` と :math:`\mathbf{H}` を含む面 * - - 3 - :math:`\mathbf{A}` と :math:`\mathbf{H}` を含む面 * - - 4 - :math:`\mathbf{A}` と :math:`\mathbf{B}` および :math:`\mathbf{H}` の終点を含む面 * - - 5 - :math:`\mathbf{A}` と :math:`\mathbf{B}` および :math:`\mathbf{H}` の始点を含む面