2010年7月21日水曜日

pgs中のpythiaでUEDをつくる

エラー処理の忘備録。
(こういうことをやってるうちにUEDについて論文を書きました。よかったら読んでください http://inspirehep.net/record/918996

PGSはherwigとpythiaに対応していることが原因のエラーたち

やりたいことは、pythiaのホームページから拾ってきたpythia-6.4.23.fで

PGSの中にある、PGS/src/pythia.f

を置き換えたい。


まず、PGS/src/pythia.fを消して、pythia-6.4.23.fをpythia.fに名前を変えてPGS/src/の下にコピー。


これだけでmakeすると、

g77 -g -fno-automatic -o examples/olympics examples/pgs_olympics.f \
-L./lib -lpgslib -ltauola -lpythia -lherwig \
-lstdhep -lexthep -lFmcfio ; chmod +x examples/olympics
./lib/libherwig.a(herwig.o): In function `pdfset_':
/home/kohsaku/work/trialpgs/PGS/./src/herwig.f:62734: multiple definition of `pdfset_'
./lib/libpythia.a(pythia.o):/home/kohsaku/work/trialpgs/PGS/./src/pythia.f:79383: first defined here
./lib/libherwig.a(herwig.o): In function `structm_':
/home/kohsaku/work/trialpgs/PGS/./src/herwig.f:62871: multiple definition of `structm_'
./lib/libpythia.a(pythia.o):/home/kohsaku/work/trialpgs/PGS/./src/pythia.f:79415: first defined here
collect2: ld はステータス 1 で終了しました
chmod: `examples/olympics'にアクセスできません: No such file or directory
make: *** [examples/olympics] エラー 1

とかいうエラーがでる。

そこで書き直す場所は二箇所(ちなみにMacでも同じようなエラー処理をしようとしましたが、g77とgfortranの違いなのかうまくっていない
追記 macでも行けました。
フォートランの文字数制限をよく知らなかったので、なんのエラーなのかよくわからなかった。
一行の文字数が72文字なので、続く情報は改行ければいけない。改行したら、(gfortranの場合?)五行目に「.」なり「&」なりをつける。そうすれば解決した。結果はこちら。
1: SUBROUTINE STRUCTM_dummy
2: . (XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU)
上のはじめのスペースに注意してください。


まず79382行目で、
SUBROUTINE PDFSET(PARM,VALUE)

SUBROUTINE PDFSET_dummy(PARM,VALUE)


さらに79416行目あたりで、

SUBROUTINE STRUCTM_dummy(XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLcU)


SUBROUTINE STRUCTM_dummy
. (XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU)

に書き換える。

するとコンパイルが通る。

では、UEDを作ってみようかな。成功を祈る。

2 件のコメント:

みしょみしょ さんのコメント...

よくわからないんですけど、pythiaのオリジナルのやつとPGSのやつに入ってるのをdiffで比較したら、_dummyを2つ付加した他に、FUNCTION PYR(IDUMMY) が
REAL*8 FUNCTION PYR(IDUMMY)
real*4 pgs_ranmar
pyr = pgs_ranmar()
end
と変更されてるみたいです。乱数の生成方法を自前(pgslib.fで定義)のものに変更したものと思われます。

参考までに。

Kohsaku Tobioka さんのコメント...

指摘ありがとうございます。
まったく気づきませんでしたー

(重要な追記)
このままだとLKPをpgsで観測してしまうので、
pgslib.f中のnon-interaction particleにLKPを追加しないとやばいことになります。