.. _[t-wwg]: [ T-WWG ] セクション ================================================== **[t-wwg]** は、**[weight window]** セクションのパラメータを出力するタリーです。 想定している3次元体系に対して、weight window 機能が効果的に動作するパラメータを自動で得ることができる Weight Window Generator (WWG) です。 基本的には、まず **[t-wwg]** を設定したインプットで仮計算を行い、次に、得られた **[weight window]** のパラメータを加えたインプットで本計算を行う、という流れで本タリーを利用します。 **mesh=reg** の場合は **[volume]** セクション等により各セルの体積を与えておく必要があります。 また、再開始計算機能や sumtally 機能を利用したい場合は、**wwg** 以外の **axis** を定義した上で、**[parameters]** セクションで **ireschk=1** とする必要があります。 ただし、粒子誘導機能を利用して **chwei(i)** パラメータを指定した場合は、再開始計算機能や sumtally 機能は使えません。 出力する **[weight window]** の下限値 :math:`W_{klm,{\rm low}}` は、仮計算で得られた各メッシュのフルエンス :math:`\Sigma_j\Phi_{jklm}` に基づいて次式で決定します。ここで、:math:`j` はヒストリー、:math:`k` は粒子、:math:`l` はエネルギーメッシュ、:math:`m` は幾何学メッシュを表します。 .. math:: :label: eq-wlow W_{klm,{\rm low}} = C_{kl} \left[ \left( \Sigma_j \Phi_{jklm} \right)_{k,l,x{\rm \%ile}} + \Sigma_j \Phi_{jklm} \right]. ここで :math:`\left( \Sigma_j \Phi_{jklm} \right)_{k,l,x{\rm \%ile}}` は、粒子 :math:`k`、エネルギーメッシュ :math:`l` に対するフルエンスの下限 :math:`x` パーセンタイル値を表し、:math:`x` の値は **pedestal** パラメータより指定可能です。初期値は 10 パーセンタイルです。 Version 3.34 までは自動的に最小値を選ぶようにしていましたが、:math:`\Sigma_j\Phi_{jklm}` が 0 の場合が多いと粒子の無限増殖が頻発してしまうため、ある程度の大きさの値を設定するように変更しました。 式 :eq:`eq-wlow` の :math:`C_{kl}` は規格化定数で、**normww** パラメータに応じて次式で決定します。 .. math:: :label: eq-ckl C_{kl} = \begin{cases} \frac{W_{\rm max}}{ \left( \Sigma_j \Phi_{jklm} \right)_{m,{\rm max}} } & {\rm for \, normww=0} \\ \frac{W_{\rm max}}{ \left( \Sigma_j \Phi_{jklm} \right)_{lm,{\rm max}} } & {\rm for \, normww=1} \\ \frac{W_{\rm max}}{ \left( \Sigma_j \Phi_{jklm} \right)_{klm,{\rm max}} } & {\rm for \, normww=2} \\ \frac{W_{\rm max}}{ \left( \Sigma_j \Phi_{jklm} \right)_{m,{\rm max}} } \frac{ \left( \Sigma_{jm} \Phi_{jklm} \right) } {\left( \Sigma_{jm} \Phi_{jklm} \right)_{l,{\rm min}}} & {\rm for \, normww=-1} \\ \frac{W_{\rm max}}{ \left( \Sigma_j \Phi_{jklm} \right)_{m,{\rm max}} } \frac{ \left( \Sigma_{jm} \Phi_{jklm} \right) } {\left( \Sigma_{jm} \Phi_{jklm} \right)_{kl,{\rm min}}} & {\rm for \, normww=-2} \end{cases} ここで添字の :math:`m,max, lm,max, klm,max` は、それぞれの添字に対する最大値、 :math:`l,min, lm,min` はそれぞれの添字に対する最小値を示します。 例えば、 :math:`\left( \Sigma_j \Phi_{jklm} \right)_{lm,{\rm max}}` は全てのエネルギー群l及び空間メッシュmの中で最大となる :math:`\left( \Sigma_j \Phi_{jklm} \right)` という意味で、粒子kごとに異なる値となります。 **normww** が 0, 1, 2 の場合は、それぞれ m、lm、klm のメッシュ点において最大となるフルエンスに基づいて規格化が行われます。 一方、 **normww** が -1, -2 の場合は、m に関する和、すなわち空間全体にわたる総フルエンス量が最小となるエネルギー群(-1 の場合)あるいは粒子・エネルギー群(-2 の場合)を基準とした補正項が加えられます。 これにより、エネルギー群ごとの総フルエンス量の偏り(-1 の場合)や、粒子・エネルギー群ごとの総フルエンス量の偏り(-2 の場合)が補正され、空間的にモンテカルロ粒子の分布がより均衡するようなウェイトウインドウ値が得られます。 :math:`W_{\rm max}` は **wwmax** パラメータで指定する :math:`W_{klm,{\rm low}}` の最大値で、デフォルトは 0.99 です。 :math:`W_{\rm max}` のデフォルト値が 1 でない理由は、桁落ちの関係でウェイト 1 の線源が発生した際にいきなり分割されてしまうのを防ぐためです。 通常の設定では、指定した領域内のモンテカルロ粒子ができる限り均等になるような **[weight window]** を生成します。 一方、遮へい体後方における特定領域の線量を短時間で精度良く評価したい場合などは、ヒストリーカウンターと **chwei(i)** パラメータで指定する誘導強度 :math:`B_{\rm max}` を組み合わせることにより、その領域にモンテカルロ粒子が届きやすくなるようバイアスを掛けた粒子誘導型の **[weight window]** を生成することができます。 各領域のバイアスファクター :math:`B_{klm}` は、その領域のモンテカルロ粒子フルエンス :math:`\varphi_{jklm}` より次式で決定します。 .. math:: :label: eq-bklm B_{klm} = \frac{\Sigma_j H_{ij} \varphi_{jklm}} {\left( \Sigma_j H_{ij} \varphi_{jklm} \right)_{k,l,{\rm max}} } \left[ B_{\rm max} -1 \right] +1. ここで :math:`H_{ij}` は、:math:`j` 番目のヒストリーにおけるカウンター番号 :math:`i` のヒストリーカウンター値を表します。 :math:`B_{klm}` は、:math:`\Sigma_j H_{ij} \varphi_{jklm}` が最大となる領域で :math:`B_{\rm max}=\textbf{chwei(i)}` となり最も大きくなります。 本機能を用いた場合、式 :eq:`eq-wlow` 及び :eq:`eq-ckl` の :math:`\Sigma_j \Phi_{jklm}` が :math:`\Sigma_j \Phi_{jklm}/B_{klm}` に置換され、:math:`B_{klm}` が大きい領域ほど :math:`W_{klm,{\rm low}}` が小さくなります。 詳細は、文献 [#wwg-paper]_ や講習会資料 [#wwg-note]_ を参照してください。 **[t-wwg]** の入力書式は、以下の通りです。 .. rst-class:: no-caption-number .. list-table:: **mesh** :header-rows: 0 * - value - explanation * - **reg, xyz, tet** - メッシュ型。メッシュ型サブセクションが必要です。 **reg**, **xyz** と **tet** のみ指定可能です。 .. rst-class:: no-caption-number .. list-table:: **part** :header-rows: 0 * - value - explanation * - **all** (省略時), 粒子名 - タリーする粒子。 .. include:: ./commontally/material.rst .. include:: ./commontally/e-type.rst .. include:: ./commontally/t-type.rst .. rst-class:: no-caption-number .. list-table:: **unit** :header-rows: 0 * - value - explanation * - **1** (省略可) - **1**: [1/cm^2/source]。1 のみ指定可。 .. rst-class:: no-caption-number .. list-table:: **axis** :header-rows: 0 * - value - explanation * - **eng, reg, tet, xy, yz, xz, t, wwg** - 出力データの x 軸。 **wwg** 以外は **[t-track]** と同じです。 再開始計算が必要な場合は、2つ以上の **axis** を定義し、最初の1つを **wwg** 以外で指定します。 このタリーでは、**mesh** は **reg**、**xyz**、**tet** のみ指定可能で、**r-z** は指定できません。これは、**[weight window]** セクションのパラメータが **r-z** の形式に対応していないためです。 **mesh=xyz** を指定した場合は、x, y, z メッシュの面と cell の面が一致しないよう注意してください。特に、パラメータを使ってジオメトリと **xyz** メッシュ範囲を連動させている場合は注意が必要です。 なお、Version 3.34 より、**[weight window]** 及び **[t-wwg]** の **xyz** メッシュ最大値・最小値が整数で定義された場合は、その整数から最小値は **-1*deltxyz**、最大値は **+2*deltxyz** ずらすようにしています。:ref:`faq-j-lostparticle` も参照してください。 **mesh=tet** は連続四面体形状を含む体系でしか使用できません。連続四面体形状を構成する各四面体要素の値を出力することができます。 出力の **axis** には、基本的に **[weight window]** セクションのパラメータを出力する **wwg** を指定してください。 この他に **eng**、**reg**、**tet**、**xy**、**yz**、**xz**、**t** も指定できますが、これらは **[t-track]** で指定した場合と同じ結果しか得られず、**[weight window]** に関係する値は得られません。 また、**xy**、**yz**、**xz** を選択した場合、誤差ファイルが出力されないため再開始計算を行うことができません。 .. include:: ./commontally/file.rst .. include:: ./commontally/resfile.rst .. include:: ./commontally/factor.rst .. include:: ./commontally/title.rst .. include:: ./commontally/angel.rst .. rst-class:: no-caption-number .. list-table:: **rshow** :header-rows: 0 * - value - explanation * - **0** (省略時), **1, 2, 3** - **mesh=reg**, **axis=xy,yz,xz** の時、領域境界(1)、物質番号(2)、領域番号(3)を表示します。 この下に xyz のメッシュ型サブセクションが必要です。 .. include:: ./commontally/resol.rst .. include:: ./commontally/width.rst .. rst-class:: no-caption-number .. list-table:: **volume** :header-rows: 0 * - value - explanation * - (省略可) - **reg** メッシュの時に、各領域の体積を定義します。 この行の下に **volume** 定義文が必要です。 省略した場合、**[volume]** セクションで定義された体積の値が使用されます。 また、**reg=** において **( )** 等により特殊な領域指定を行った場合は、volume を省略すると、 インプットエコーに PHITS 内部で与えられた領域番号が出力されます。 * - **reg vol** - volume 定義文。書式は **[volume]** を参照。 .. include:: ./commontally/epsout.rst .. include:: ./commontally/ph5out.rst .. include:: ./commontally/trcl.rst .. include:: ./commontally/gslat.rst .. include:: ./commontally/stdcut.rst .. rst-class:: no-caption-number .. list-table:: **pedestal** :header-rows: 0 * - value - explanation * - (省略可、D=0.1) - フラックスが 0 の領域における weight window の下限値を決定するパーセンタイル値 (式 :eq:`eq-wlow` の :math:`x`)÷100。 .. rst-class:: no-caption-number .. list-table:: **normww** :header-rows: 0 * - value - explanation * - (省略可、D=-2) - 粒子、エネルギー群間でモンテカルロ粒子数の調整の有無を決めるオプション。 0: 調整を行わない。 +/-1: 各エネルギー群のモンテカルロ粒子数が等しくなるように調整する。 +/-2: 各粒子・エネルギー群のモンテカルロ粒子数が等しくなるように調整する。 **normww** を正値で指定した場合は、全体的にウェイトウィンドウ値が低くなるため、主に粒子分割により各粒子のウェイトをコントロールします。 一方、負値で指定した場合は、全体的にウェイトウィンドウ値が高くなるため、ロシアンルーレットが頻繁に行われるようになります。 幅広いエネルギー分布を持つ線源の場合など、ヒストリ毎の分散が大きい計算条件に対しては、1 ヒストリあたりの計算時間が短くなる負値の方が単位計算時間当たりの統計が良くなります。したがって、**normww** のデフォルト値は **-2** としています。 ただし、**normww=-2** かつ各粒子・各エネルギー群の中で 1 つでも粒子フルエンスが極端に低い群がある場合、それ以外の群に属するほとんどの粒子がロシアンルーレットによりカットされてしまいますので、粒子やエネルギー群の設定には十分注意してください。 **part** に関しては、**all** もしくは **neutron photon** を設定することを推奨します。エネルギー群に関しては、最大でも 2 から 3 群程度とし、タリーへの寄与の大きいエネルギー帯の群幅を少し狭く設定してください。 どのような設定が最適か不明な場合は、**part=all**、**ne=1** を推奨します。その場合、計算結果は **normww** には依存しません。 .. rst-class:: no-caption-number .. list-table:: **wwmax** :header-rows: 0 * - value - explanation * - (省略可、D=0.99) - 規格化定数。 :math:`W_{klm,{\rm low}}` の最大値に相当します。( :eq:`eq-ckl` 参照) .. include:: ./commontally/ctmin.rst .. include:: ./commontally/ctmax.rst .. include:: ./commontally/chmin.rst .. include:: ./commontally/chmax.rst .. rst-class:: no-caption-number .. list-table:: **chwei(i)** :header-rows: 0 * - value - explanation * - (省略可、D=0) - 粒子誘導型 **[t-wwg]** を利用する際の誘導強度(式 :eq:`eq-bklm` の :math:`B_{\rm max}` )。 i はカウンター番号です。 このパラメータは、カウンター番号に関わらず 1 つの **[t-wwg]** に対して 1 つしか 定義することはできません。 このパラメータを定義した場合、再開始計算や sumtally による結果の合算ができなくなります。 .. rst-class:: no-caption-number .. list-table:: **chplane** :header-rows: 0 * - value - explanation * - (省略可、**D=all**) - 式 :eq:`eq-bklm` の最大値を決定する際に最大値を検索する面。 デフォルト値は **all** で、全ての領域から最大値を検索します。 **xy**, **yz**, **xz** を指定した場合は、それらの面毎に最大値を決定して規格化します。 このパラメータは、**mesh=xyz** かつ **chwei** が定義された場合のみ有効です。 .. rst-class:: no-caption-number .. list-table:: **elowthre** :header-rows: 0 * - value - explanation * - (省略可、**D=0**) - 低エネルギー・アンバイアス法のしきい値エネルギー [MeV]。 このエネルギー以下の weight window 下限値を定数倍することにより、人為的に 低エネルギー側のモンテカルロ粒子密度を下げて計算時間を短縮することができます。 0 の場合は使いません。 また、この機能を使う場合は **ne=1** としてください。 .. rst-class:: no-caption-number .. list-table:: **elowbias** :header-rows: 0 * - value - explanation * - (省略可、**D=5.0**) - 低エネルギー・アンバイアス法を利用する場合の低エネルギー群 weight window 下限値の倍率。 wwg の出力例を以下に示します。 .. code-block:: text :caption: wwg の出力例 [ Weight Window ] mesh = reg set: c71[0.0] c72[c71+2.13496E-08] c73[1.25478E-04] set: c74[0.0] c75[c74+9.29569E-09] c76[2.08987E-04] part = neutron eng = 2 1.00000E-03 1.00000E+03 reg ww1 ww2 1 (8.94092E-05+c71)/c73 (2.08987E-04+c74)/c76 2 (1.25478E-04+c71)/c73 (1.26817E-04+c74)/c76 3 (8.53835E-05+c71)/c73 (5.78131E-05+c74)/c76 ここでは、中性子に対して、2 群のエネルギービンの weight window のパラメータが定義されています。 パラメータの定義には ``c**`` で表される定数が使われています。 この場合、**c71-c73** が第 1 エネルギー群、**c74-c76** が第 2 エネルギー群に対するパラメータです。 これらのパラメータの中でユーザー自身が変更する可能性があるのは、各群に対して左端で定義される初期設定値が 0 のパラメータ **c71** や **c74** などです。 これらのパラメータは、各群の weight window にある一定値を加える際に利用します。 .. [#wwg-paper] Sato et al. Nucl. Instr. and Meth. B, 2024; 557: 165535. .. [#wwg-note] ``phits/lecture/advanced/weightB`` や ``phits/lecture/advanced/shielding``