G4ReplicaNavigation.patch

これらは、JUPITERを開発する上で必要になったGeant4へのpatchです。
Geant4開発者とは全く無関係です。
質問・意見等、絶対に開発者へは送らないで下さい。

使用は自由ですが、このpatchを用いて不具合が起こった場合の保証は致しませんので
必ず自己責任でお願いします。

Replica同士のboundary上で、stepが隣り合ったReplica同士を行き来してしまい、Stepが進まなくなるbugについて、4.3.2でbug fixが行われたとの開発者側からのアナウンスがあった。(ReplicaNavigationのDistanceToOutPhi関数の変更)
しかし、残念ながら我々の場合、この変更によって問題は解決せず、加えてその変更後のlogicがおかしいと思われるため、この変更をもとに戻すpatchを作った。
logicがおかしいと思われる理由は、下図の通り。

4.3.2のG4ReplicaNavigationのDistanceToOutPhi関数は、次の場合を想定して書かれていると思われる。

  1. 対象となるReplicaの形は扇形であり、local座標で扇形の中心が0(rad)になるように作られていること
  2. localpointがこの扇形の内部にあるときに呼ばれ、このときpDistSとpDistEは負の価をとる
  3. localpointが向かう方向(localdirection)が、図のS点へ向かうベクトルに対し、扇形から外に出る方向に向いているとき、compSが負の価をとる。同様に、図のE点へ向かうベクトルに対し外に出る方向に向いている時も、compEが負の価をとる。

問題の場所は、localpointが図のA点のように、S点側のboundaryよりわずか外側にあるときである。本来は扇形の中にいるというのが条件であるから、この場合はboundaryまでの距離を0とし、すみやかにその扇形を出たとみなすべきであると思われる。
4.3.2の変更では、ここでcompEの判定を行っており、compEが正ならboundaryまでの距離に無限大を返すが、上図からSのboundaryから外に出ていく場合にcompEが正になる(扇の中に入ってきてしまう)場合があることが明らかであり、この条件判定は間違っていると思われる。
この場所でのEのboundaryに対する判定は必要ないと考え、変更を元に戻した。

Patchの当て方

  1. patchファイルをとってきて、$G4INSTALL ディレクトリに置く。
  2. $G4INSTALLディレクトリ直下で
     % patch -p1 -s < Geant4.3.0-macosx.patch
    等と打つ。

HOME