.. _sec-expandhashall: [ Expand Hash-all ] セクション ================================================== このセクションは、 **#all** を含むセル(主に空気や真空などで構成されるバックグランド領域)を自動で分割してから展開する前処理機能です。 **#all** はこの機能を使わなくても PHITS 内部で自動的に展開されますが、その自動展開によって1つのセルから除外される領域数が多くなりすぎて、メモリ不足や計算時間の増大が生じる場合があります。 そのような場合には、 **[expand hash-all]** を含む入力ファイルを **icntl=18** で実行してください。バックグランド領域が自動で分割され、分割後の各領域に含まれるセルのみ除外する形式で **#all** が展開された結果が出力されます。 使用手順 -------------------------------------------------- 基本的な使用手順は次の通りです。 #. **[cell]** セクションで **#all** を含むセルを定義する。 #. **[expand hash-all]** セクションで mesh と出力ファイル名を指定する。 #. **icntl=18** で PHITS を実行する。 #. 生成された ``*_surface`` ファイルおよび ``*_cell`` ファイルを ``infl`` コマンドを用いて **[surface]** セクションおよび **[cell]** セクションに挿入する。 #. 元のバックグランド領域( **#all** を含むセル)の定義をコメントアウトする。 #. **icntl=0** に戻し、通常の粒子輸送計算モードで PHITS を実行する。 入力形式 -------------------------------------------------- .. code-block:: text [ Expand Hash-all ] mesh = xyz x-type = ... nx = ... xmin = ... xmax = ... y-type = ... ny = ... ymin = ... ymax = ... z-type = ... nz = ... zmin = ... zmax = ... file = expand_all.out margin = 1.0 reg xmin xmax ymin ymax zmin zmax ... .. rst-class:: no-caption-number .. list-table:: 主なパラメータ :header-rows: 1 * - 項目 - 説明 * - **mesh** - 現状では **xyz** のみ指定可能です。 * - **x-type**, **nx**, **xmin**, **xmax** - x 方向の mesh 指定です。 * - **y-type**, **ny**, **ymin**, **ymax** - y 方向の mesh 指定です。 * - **z-type**, **nz**, **zmin**, **zmax** - z 方向の mesh 指定です。 * - **file** - 出力する基準ファイル名を指定します。 * - **margin** - 推定した bounding box を各方向に広げる余裕幅です。既定値は **1.0** です。 mesh の各方向パラメータは、通常の xyz mesh と同様に指定します。 一方、 **mesh=xyz** と **file** は必須です。 初期 bounding box 表 -------------------------------------------------- 必要に応じて、セクション末尾に初期 bounding box を表形式で与えることができます。 .. code-block:: text reg xmin xmax ymin ymax zmin zmax 10 -5.0 5.0 -2.0 2.0 0.0 10.0 15 0.0 1.0 0.0 1.0 0.0 1.0 この表は、細い領域やサンプリングで見つかりにくい領域に対して、初期値を与えたい場合に有効です。 列は **reg xmin xmax ymin ymax zmin zmax** の順で、 **reg** には対象セル番号を指定します。 出力ファイル -------------------------------------------------- **file** で指定した名前を基準として、次の3種類のファイルが生成されます。 1. bounding box 表を書き出す基準ファイル 2. surface 定義を書き出す ``*_surface`` ファイル 3. cell 定義を書き出す ``*_cell`` ファイル surface ファイルには、推定した bounding box から作成した **px**, **py**, **pz** 面が出力されます。 cell ファイルには、 **#all** を含むセルを展開したセル定義が出力されます。 制限事項と注意 -------------------------------------------------- - この機能は **icntl=18** のときだけ有効です。 - 現状では **MPI 並列では使用できません**。single または OpenMP 実行をご利用ください。 - 対象となるセル探索は **u=0** のセルを対象とします。universe 内部のセルは自動探索の対象外です。 - **#all** を含むセル自身は bounding box 推定の対象から除外されます。 - **margin** の設定が小さすぎると、境界付近の領域を十分に覆えない可能性があります。 入力例 -------------------------------------------------- .. code-block:: text [ parameters ] icntl = 18 [ cell ] 1 0 -10 2 -1 #all [ expand hash-all ] mesh = xyz x-type = 1 nx = 20 xmin = -100.0 xmax = 100.0 y-type = 1 ny = 20 ymin = -100.0 ymax = 100.0 z-type = 1 nz = 20 zmin = -100.0 zmax = 100.0 file = expand_all.out margin = 1.0 この入力では、 **#all** を展開するために必要な bounding box と include 用ファイルが生成されます。