Previous ToC Next

1. Abstract

この文書は 2025年実習E(計算惑星)N体計算部分の資料です。

Contents

2. 作成状況

2.1. 2022/9/14

総研大資料から全面改訂。 WSL2 を前提にする。

3. 準備

この章では、実習当日までにしておくべき準備について述べます。。これができて いないと当日の実習は無意味になるので、必ずやっておいて下さい。

この実習では、基本的に受講生の計算機の上で作業します。こ のため、使用するソフトウェアをあらかじめインストールする必要があります。 以下、 OS が Windows、 WSL 2 を利用することを前提に インストールするべきソフトウェアとその作業手順 を述べます。

インストールするべきソフトウェアは、「nemo」です。 Nemo はメリーランド 大学の Peter Teuben が30年以上にわたって開発・メンテナンスをしている、 主に無衝突 体系用(ですが、衝突系にも使えるし SPH 等へのサポートも ある)のシミュレーションをサポートする様々なツールの複合体です。沢山のプ ログラムが共通のユーザーインターフェースやファイル形式をもつことで、色々 便利なことができるようになっています。

nemo のインストールには、グラフィックパッケージ pgplot のインストール が必要ですが、これは nemo のインストールスクリプトの中で自動的に行われ るはずなので、上手くいっていればこれは気にする必要はないはずですが、 今回は先に別途インストールします。 今回の実習では

といったツールを使いますが、これらも必要に応じてインストー ルします。

glnemo はマルセイユ天文台の Jean-Charles Lambert が開発している、 nemo のファイル用に作られた3次元可視化プログラムです。Linux(Qt が動く UNIX 全般) と Windows の両方で動きますスナップショットファイルの3次元表示や簡単なアニメーション作 成には十分に使え、ズーム、回転等を非常に高速に行うことができます。

GalacTICS はバルジ・ディスク・ハローからなる銀河モデルの作成パッケージ です。WIP は PGPLOT をインタラクティブに利用するためのプログラムです。

3.1. nemo インストールの前にすること

nemo インストールのためにには、 OS によって、いくつか別の用意が必要になります。ここではまずそれらにつ いて述べます。とはいえ今回 Windows/Linux を前提にします。

MacOS の場合には Nemo の github の Installation のセクション に 書いてあるようにやってみて下さい。

3.1.1. Windows/Linux の場合

Windows の場合、 WSL2 上での Linux (Ubuntu 20 または22) の利用が前提になるので、 WSL2 のインストール について述べます。 なお、Ubuntu に X11 およびコンパイラ等がはいっていることが必要 なので、 既に WSL/Ubuntu を使っている、という人でも、特に X11 が動いて いない場合には再度インストールが簡単です。 ここ が詳しいです。

Windows 10 だと OpenGL 関係が古いのか、上手く動かないものがでてくるので、可能な限り Windows 11 にして下さい。

3.1.1.1. コンパイラ等のインストール

wsl の bash が動いているところで

 sudo apt update
 sudo apt upgrade 
 sudo apt install build-essential coreutils ruby curl  openssh-client
 sudo apt install x11-apps libx11-dev  libxext-dev  gfortran tcsh

3.2. pgplot のインストール

本来、 nemo のインストール中にグラフィックライブラリ pgplot (の最新版の giza-pgplot)がインストールされるのですが、ちょっと上手く動かないので今回は古い pgplot を使います。

まず、nemo をインストールするディレクトリを作ります。これは /home/${USER}/work (${USER} は wsl での自分の user id に置き換わります) とか、適当な ものを作って下さい。

実習用の Mattermost から pgplot.tgz をダウンロードし、上の /home/${USER}/work におきます。

  https://mmost.jmlab.jp/jisshuu-e/pl/xejh7banbtbjpbupanm4uz9b7a
からダウンロードできるはずです。

Windows/WSL の関係で、 Windows 側の Edge 等のブラウザでダウンロードす ると、 Windows 側の 「ダウンロード」フォルダにファイルがあるはずです。 この時は

  cd /home/${USER}/work
  cp /mnt/c/Users/yourid_on_win11/Downloads/pgplot.tgz .
でコピーできるはずです。yourid_on_win11 は Windows 側での user id で、 wsl 側と違うかもしれないので注意して下さい。

  ls /mnt/c/Users
で id がなにか確認して下さい。さて、正しく /home/${USER}/work にもってこれたら、 まず、

 export PGPLOT_DIR=/home/${USER}/work/pgplot/pgplot-5.2
 export PGPLOT_FONT=/home/${USER}/work/pgplot/pgplot-5.2/grfont.dat
 export PGPLOT_DEV=/xserve
 export LD_LIBRARY_PATH=${PGPLOT_DIR}
を実行し、また、/home/${USER}/.bashrc (bash の場合)に上の4行を追加して 下さい。それから

  cd /home/${USER}/work
  tar xvzf pgplot.tgz
  cd pgplot/pgplot-5.2
  make clean
  make
  make cpg
を実行して、

  ./cpgdemo
を実行して下さい。上手くいっていれば

 Graphics device/type (? to see list, default /NULL):
と聞いてくるので

 /xs
といれて下さい。これでそれらしい出力が画面にでれば pgplot のインストールは成功です。

 ./cpgdemo
でエラーがでた時も、とりあえず上の export なんとかを実行して、それで上 手くいくかどうか確認してみて下さい。

3.3. nemo のインストール

ターミナルウインドウで、/home/${USER}/work に移動し、 以下を実行します。

 wget https://teuben.github.io/nemo/install_nemo.sh
 chmod +x install_nemo.sh
 ./install_nemo.sh nemo=$HOME/opt/nemo
これは結構時間かかります。

  (cd src;make -i -j  clean install) >> install.log 2>&1
とでたら Ctrl-C で止めて、

 cd ../opt/nemo
 ./configure --with-yapp=pgplot --with-pgplot-prefix=/home/${USER}/work/pgplot/pgplot-5.2
  make build1;  make build2;   make build3;   make build4;   make check; make bench5
  source nemo_start.sh
と実行して下さい。

 make[1]: Entering directory '/home/yourid/opt/nemo'
 Installing scripts on Wed Sep 14 13:40:03 JST 2022
 By yourid on DESKTOP-D628L1J
 (cd /home/yourid/opt/nemo/src/scripts; make install)
 make[2]: Entering directory '/home/yourid/opt/nemo/src/scripts'
 cp Makefile.lib /home/yourid/opt/nemo/lib
 cp mknemo mkpdoc manlaser nemoman nemobench ldso nemo.version fitsedit fitsmerge nds9 shtool nemo.coverage showvar mir2nemo getline pedit wgetc yapp_query nemoplot nemopars /home/yourid/opt/nemo/bin
 utilities installed
 make[2]: Leaving directory '/home/yourid/opt/nemo/src/scripts'
 Starting at Wed Sep 14 13:40:03 JST 2022, tail -f /home/yourid/opt/nemo/install.log
 (cd src/tutor/main; rm -f maine.o; make -f /home/yourid/opt/nemo/lib/makedefs  maine.o CFLAGS="-v -c")  >> install.log 2>&1
 (cd src;make -i -j  clean  install) >> install.log 2>&1
 (cd usr/dehnen; make -i clean all) >> install.log 2>&1
 ...
 BSF: FAIL   4.865e+16 3.11891e+18 0 2e+20 4111 -
 BSF: EXPECT 4.865e+16 3.11891e+18 -1.96875 2e+20 4111 -
 BSF regressions that are not OK: 2
 TESTSUITE started Wed Sep 14 13:49:47 JST 2022
 TESTSUITE   ended Wed Sep 14 13:50:07 JST 2022
 (source nemo_start.sh; /usr/bin/time src/scripts/nemo.bench mode=5 | tee -a install.log )
 NEMOBENCH: (2022-01-21) bench26978 : nbody0=3072 nbody1=10240 nbody3=1000000 size=256 ften=1 clean=1 bsf=0 tmp=bench26978
 DESKTOP-D628L1J
 Linux DESKTOP-D628L1J 5.10.102.1-microsoft-standard-WSL2 #1 SMP Wed Mar 2 00:30:59 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
 Wed Sep 14 13:50:08 JST 2022
 Equal 5sec CPU time per code, no output files to check
 Codes:  directcode [mkplummer] gyrfalcON hackcode1 [mkorbit] orbint potcode treecode1
 Tstop: 4.28*1 5.64*1 7.89*1 787400.0*1 6.66*1 3.00*1 [5sec CPU for each on a 11th Gen Intel(R) Core(TM) i5-1135G7 up to 4.2GHz]
 .1.23
 .456.
 CPU_USAGE  directcode  :  19.87  19.86  0.01  0.00  0.00  4295757653
 CPU_USAGE  gyrfalcON   :  18.67  18.62  0.03  0.00  0.00  4295759643
 CPU_USAGE  hackcode1   :  22.45  22.44  0.01  0.00  0.00  4295761510
 CPU_USAGE  orbint      :  22.16  22.13  0.01  0.00  0.00  4295763756
 CPU_USAGE  potcode     :  20.72  20.53  0.17  0.00  0.00  4295765973
 CPU_USAGE  treecode1   :  20.34  20.32  0.02  0.00  0.00  4295768046
 NEMOBENCH5 score:   241.526
 Cleaning bench26978 (use clean=0 to prevent this)
 124.04user 0.35system 2:04.40elapsed 99%CPU (0avgtext+0avgdata 7328maxresident)k
 32inputs+4080outputs (1major+9036minor)pagefaults 0swaps
 Started: Wed Sep 14 13:39:07 JST 2022
 Ended:   Wed Sep 14 13:52:12 JST 2022
 All done.
 (ba)sh users:  source /home/yourid/opt/nemo/nemo_start.sh  to activate NEMO in your shell
 (t)csh users:  source /home/yourid/opt/nemo/nemo_start.csh to activate NEMO in your shell

というような感じで時々出力がでて、最後に All done がでたら多分大丈夫です。最後にメッセージがでているように、 bash 系のシェルであれば

  source /home/${USER}/opt/nemo/nemo_start.sh
を実行して下さい。

3.4. 簡単な動作確認

ここでは、nemo の基本的な概念の学習を兼ねて、簡単な動作確認をします。

そのために、

ということをします。

3.4.1. nemo の基本機能の確認

まず、 nemo のコマンドが使えるような環境設定をする必要があります。これ には、色々な環境変数やパスを設定する必要がありますが。 sh 系のシェル に対しては nemo_start というスクリプトが用意されているので、

 source /home/${USER}/opt/nemo/nemo_start.sh
で設定ができます。

このあと、適当な作業ディレクトリに移動します。例えば ~/work/sandbox を 使うなら、

 % cd ~work
 % mkdir sandbox
 % cd sandbox
です。次に、以下のコマンドを実行してみます。

 % mkplummer
以下のような出力がでるはずです。

 Insufficient parameters, try 'help=', 'help=?' or 'help=h',
 Usage: mkplummer out=??? nbody=??? ...
 construct a Plummer model
mkplummer に限らず、 nemo のコマンドは基本的にコマンドラインオプション で色々なパラメータを与えます。その中には必須なものがあり、それらが与え られていない、というのが出力の最初の2語 "Insufficient parameters," で いいたかったことと思われます。次に try 'help=', 'help=?' or 'help=h' とあるので次にはそれをやりますが、

 Usage: mkplummer out=??? nbody=??? ...
の行を見ると、 out=???, nbody=??? といったパラメータを指定しないといけ なさそうだとわかります。

 % mkplummer help=
 mkplummer out=??? nbody=??? mlow=0 mfrac=0.999 rfrac=22.8042468
 seed=0 time=0.0 zerocm=t scale=-1 quiet=0 massname= massexpr=pow(m,p)
 masspars=p,0.0 massrange=1,1 headline= nmodel=1 VERSION=2.8b
mkplummer "help=?" や mkplummer help=h を実行しても、今一つ暗号めいた メッセージしかでない、思ったことでしょう。しょうがないので、

 % man mkplummer
を実行してみます。途中のほうに、

       out=snapfile             Output data is  written  into  snapfile,  in
                                standard snapshot format.

       nbody=integer            Number  of  particles nobj in Nbody snapshot
                                realization of the Plummer model.
と書いてあるので、 nbody で指定した粒子数のプラマーモデルを、 out で指 定したファイルに書いてくれそうです。そこで

 % mkplummer test3 3
と実行してみます。なにもメッセージはでませんが、

 % ls -l
 合計 4
 -rw-r--r-- 1 makino makino 427  8月18日 18:45 test3
といった感じでファイルができているはずです。このファイルの中身はバイナ リなので、 cat 等で見ることはできませんが、

 % tsf test3
 char Headline[35] "init_xrandom: seed used 1250588738"
 char History[31] "mkplummer test3 3 VERSION=2.8b"
 set SnapShot
   set Parameters
     int Nobj 3 
     double Time 0.00000 
   tes
   set Particles
     int CoordSystem 66306 
     double Mass[3] 0.333333 0.333333 0.333333 
     double PhaseSpace[3][2][3] 0.789543 -0.771532 -0.263389 -0.220791 
       -0.0611593 0.391509 -0.840700 -0.120641 0.277537 0.416235 
       -0.0746009 0.219864 0.0511569 0.892173 -0.0141488 -0.195444 
       0.135760 -0.611373 
   tes
 tes
で見ることができます。nemo のファイルは単なるバイナリの数字の羅列では なく、それを作るのに実行したコマンドの履歴等のヘッダ情報と、 はいっているデータの実体からなり、実体は、さらに型+名前+データ、 という規則的な構造をもっていること、また、「型」に set、つまり「集合」 という型を準備することで、構造型のようなものも表現可能にしていることが わかります。

また、質量(Mass)、位置、速度(PhaseSpace) については、それぞれを配列に しているらしい、ということもわかるかと思います。

tsf の出力はそういうわけでなかなか高級なものですが、例えば gnuplot と か mongo とか、様々なプロットパッケージで処理するにはあまり向いていま せん。そういう出力のためにには snapprint を使います

 % snapprint test3
 ### nemo Debug Info: x y z vx vy vz 
 0.789543 -0.771532 -0.263389 -0.220791 -0.0611593 0.391509 
 -0.8407 -0.120641 0.277537 0.416235 -0.0746009 0.219864 
 0.0511569 0.892173 -0.0141488 -0.195444 0.13576 -0.611373 

 % snapprint test3 options=m,x,y,z,vx,vy,vz
 ### nemo Debug Info: m x y z vx vy vz 
 0.333333 0.789543 -0.771532 -0.263389 -0.220791 -0.0611593 0.391509 
 0.333333 -0.8407 -0.120641 0.277537 0.416235 -0.0746009 0.219864 
 0.333333 0.0511569 0.892173 -0.0141488 -0.195444 0.13576 -0.611373 
これは、粒子一つを1行にまとめています。 nemo の特徴として、粒子データ から計算したものを出力にできる、ということがあります。

 % snapprint test3 options="vx*vx+vy+vy+vz*vz"
 ### nemo Debug Info: [bodytrans_new: invoking cc +saving .o]
 ### nemo Debug Info: vx*vx+vy+vy+vz*vz 
 0.079709 
 0.0723902 
 0.683496 
この場合、粒子データに対して "vx*vx+vy+vy+vz*vz" という式を評価する関 数を作り、コンパイルして、自分自身にリンクした上で評価して出力する、と いう、なかなか気が効いたことをしています。

粒子3個ではつまらないので、増やしてみます。

 % mkplummer test8k 8192
tsf や snapprint で見るにはデータが膨大過ぎるので、グラフィック表示し てみます。

 % snapplot test8k
 

Figure 1: snapplot test8k の出力結果

1 が出れば大成功です。折角なので、少し違うこ とをしてみます。

なお、

 %PGPLOT, PGSCI: no graphics device has been selected
とかいったメッセージが大量にでて、グラフィック表示はされない、というこ とがあるかもしれません。この時の対応は (unknown label sect:xservertrouble) 節をみてみて下さい。

あと、何も起きないでコマンドが終わったように見える時には、 pgplot のウィンドウがアイコン化されていることがあります。アイコンの中に図 2 があればそれをクリックしてみて下さい。

Figure 2: PGPLOT のアイコン

 % snapplot test8k xvar=r yvar=v xrange=0:5 yrange=0:2
 

Figure 3: snapplot test8k xvar= ... の出力結果

この場合、x 軸に , y軸に をとり、またそ れぞれの軸の範囲も指定しています。半径の関数としての速度分布がなんとな くわかるプロットになっています。

3.4.2. glnemo2 の利用

さらに、 glnemo2 を使ってみます。

ここ から、 Ubuntu のバージョンに合わせた .dev ファイルをダウンロードして、 書いてある通りにすればいいですが、 Windows の側で Edge でダウンロードだと

  cd ~/work
  cp /mnt/c/Users/${USER}/Downloads/glnemo2-1.20.1.ubuntu20.04.x86_64.deb
  sudo apt-get install ./glnemo2-1.20.1.ubuntu20.04.x86_64.deb
でインストールされて

  glnemo2 test8k
でなにか動くはずです。 (Ubuntu 22 であれば適切ばバージョンのファイルにして下さい) そうすると、

Figure 4: glnemo2 の画面。ファイル読み込みの詳細指定

4 のウインドウがでます。ここで はとりあえず OK をクリックします。

Figure 5: glnemo2 での test8k の表示

5 のように粒子データが表示されたら、表示ウイン ドウにマウスカーソルをいれると、

ができるはずです。色々やってみて下さい。

粒子っぽいものが細い縦線になって上手く表示されない時には、左側のパレットのメニューで Shaders のチェックを外すと上手くいくかもしれません。ここで粒子のサイズを変えることもできます。

これくらいが全部動くなら、基本的な機能は大丈夫なはずです。

3.4.3. mkkd95 のテスト

nemo には Kuijken と Dubinski の作った、 GalactICS という銀河モデル作成パッケージがはいっています。

 %mkkd95 testkd
を実行してみて下さい。 testkd というファイルができていれば OK です。駄 目な時には、、、色々調べてみて下さい。

そんなコマンドは知らない、といわれたら

 %mknemo mkkd95
を実行してみて下さい。

mknemo mkkd95がうまく行かないときの対処法 (岩倉さんによる)

    /home/${USER}/opt/nemo/usr/kuijken/GalactICS-exp/srcへ移動する.エディタでMakefile.nemoを開く.この際念のため 
$ cp Makefile.nemo Makefile.nemo.origin

とかでバックアップを取る.

    Makefile.nemo 24行目の 
MYFLIBS = $(FFLAFS) $(XLIBS) -lpgplot

とあるところを, MYFLIBS = $(FFLAFS) $(XLIBS) -L/home/${USER}/work/pgplot/pgplot-5.2 -lpgplot -lX11

のように修正する.

    多分$ mknemo mkkd95が使えるようになる.

3.5. トラブルシューティング

3.5.1. PGPLOT が動かない

3.5.1.1. sh: 1: /home/yourid/work/pgplot/pgplot-5.2/pgxwin_server: Exec format error がでる

これは pgxwin_server が正しく再コンパイルされてないためなので、

  cd /home/${USER}/work/pgplot/pgplot-5.2
  make -B pgxwin_server
を実行してみて下さい。
Previous ToC Next