Previous | ToC | Next |
この文書は 2025年実習E(計算惑星)N体計算部分の資料です。
総研大資料から全面改訂。 WSL2 を前提にする。
この章では、実習当日までにしておくべき準備について述べます。。これができて
いないと当日の実習は無意味になるので、必ずやっておいて下さい。
この実習では、基本的に受講生の計算機の上で作業します。こ
のため、使用するソフトウェアをあらかじめインストールする必要があります。
以下、 OS が Windows、 WSL 2 を利用することを前提に
インストールするべきソフトウェアとその作業手順
を述べます。
インストールするべきソフトウェアは、「nemo」です。 Nemo はメリーランド
大学の Peter Teuben が30年以上にわたって開発・メンテナンスをしている、
主に無衝突
nemo のインストールには、グラフィックパッケージ pgplot のインストール
が必要ですが、これは nemo のインストールスクリプトの中で自動的に行われ
るはずなので、上手くいっていればこれは気にする必要はないはずですが、
今回は先に別途インストールします。
今回の実習では
glnemo はマルセイユ天文台の Jean-Charles Lambert が開発している、
nemo のファイル用に作られた3次元可視化プログラムです。Linux(Qt が動く
UNIX 全般) と Windows の両方で動きますスナップショットファイルの3次元表示や簡単なアニメーション作
成には十分に使え、ズーム、回転等を非常に高速に行うことができます。
GalacTICS はバルジ・ディスク・ハローからなる銀河モデルの作成パッケージ
です。WIP は PGPLOT をインタラクティブに利用するためのプログラムです。
nemo インストールのためにには、
OS によって、いくつか別の用意が必要になります。ここではまずそれらにつ
いて述べます。とはいえ今回 Windows/Linux を前提にします。
MacOS の場合には Nemo の github の Installation のセクション に
書いてあるようにやってみて下さい。
Windows の場合、 WSL2 上での Linux (Ubuntu 20 または22) の利用が前提になるので、 WSL2 のインストール
について述べます。
なお、Ubuntu に X11 およびコンパイラ等がはいっていることが必要
なので、 既に WSL/Ubuntu を使っている、という人でも、特に X11 が動いて
いない場合には再度インストールが簡単です。
ここ
が詳しいです。
Windows 10 だと OpenGL 関係が古いのか、上手く動かないものがでてくるので、可能な限り Windows 11 にして下さい。
wsl の bash が動いているところで
本来、 nemo のインストール中にグラフィックライブラリ pgplot (の最新版の giza-pgplot)がインストールされるのですが、ちょっと上手く動かないので今回は古い pgplot を使います。
まず、nemo をインストールするディレクトリを作ります。これは
/home/${USER}/work (${USER} は wsl での自分の user id に置き換わります) とか、適当な
ものを作って下さい。
実習用の Mattermost から pgplot.tgz をダウンロードし、上の
/home/${USER}/work におきます。
Windows/WSL の関係で、 Windows 側の Edge 等のブラウザでダウンロードす
ると、 Windows 側の 「ダウンロード」フォルダにファイルがあるはずです。
この時は
ターミナルウインドウで、/home/${USER}/work に移動し、
以下を実行します。
ここでは、nemo の基本的な概念の学習を兼ねて、簡単な動作確認をします。
そのために、
まず、 nemo のコマンドが使えるような環境設定をする必要があります。これ
には、色々な環境変数やパスを設定する必要がありますが。 sh 系のシェル
に対しては nemo_start というスクリプトが用意されているので、
このあと、適当な作業ディレクトリに移動します。例えば ~/work/sandbox を
使うなら、
また、質量(Mass)、位置、速度(PhaseSpace) については、それぞれを配列に
しているらしい、ということもわかるかと思います。
tsf の出力はそういうわけでなかなか高級なものですが、例えば gnuplot と
か mongo とか、様々なプロットパッケージで処理するにはあまり向いていま
せん。そういう出力のためにには snapprint を使います
粒子3個ではつまらないので、増やしてみます。
なお、
あと、何も起きないでコマンドが終わったように見える時には、 pgplot のウィンドウがアイコン化されていることがあります。アイコンの中に図 2 があればそれをクリックしてみて下さい。
さらに、 glnemo2 を使ってみます。
ここ
から、 Ubuntu のバージョンに合わせた .dev ファイルをダウンロードして、
書いてある通りにすればいいですが、 Windows の側で Edge でダウンロードだと
粒子っぽいものが細い縦線になって上手く表示されない時には、左側のパレットのメニューで Shaders のチェックを外すと上手くいくかもしれません。ここで粒子のサイズを変えることもできます。
これくらいが全部動くなら、基本的な機能は大丈夫なはずです。
nemo には Kuijken と Dubinski
の作った、 GalactICS という銀河モデル作成パッケージがはいっています。
そんなコマンドは知らない、といわれたら
mknemo mkkd95がうまく行かないときの対処法 (岩倉さんによる)
とかでバックアップを取る.
とあるところを,
MYFLIBS = $(FFLAFS) $(XLIBS) -L/home/${USER}/work/pgplot/pgplot-5.2 -lpgplot -lX11
のように修正する.
1. Abstract
Contents
2. 作成状況
2.1. 2022/9/14
3. 準備
体系用(ですが、衝突系にも使えるし SPH 等へのサポートも
ある)のシミュレーションをサポートする様々なツールの複合体です。沢山のプ
ログラムが共通のユーザーインターフェースやファイル形式をもつことで、色々
便利なことができるようになっています。
といったツールを使いますが、これらも必要に応じてインストー
ルします。
3.1. nemo インストールの前にすること
3.1.1. Windows/Linux の場合
3.1.1.1. コンパイラ等のインストール
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 のインストール
https://mmost.jmlab.jp/jisshuu-e/pl/xejh7banbtbjpbupanm4uz9b7a
からダウンロードできるはずです。
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 のインストール
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. 簡単な動作確認
ということをします。
3.4.1. nemo の基本機能の確認
source /home/${USER}/opt/nemo/nemo_start.sh
で設定ができます。
% 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、つまり「集合」
という型を準備することで、構造型のようなものも表現可能にしていることが
わかります。
% 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" という式を評価する関
数を作り、コンパイルして、自分自身にリンクした上で評価して出力する、と
いう、なかなか気が効いたことをしています。
% mkplummer test8k 8192
tsf や snapprint で見るにはデータが膨大過ぎるので、グラフィック表示し
てみます。
% snapplot test8k
図 1 が出れば大成功です。折角なので、少し違うこ
とをしてみます。
%PGPLOT, PGSCI: no graphics device has been selected
とかいったメッセージが大量にでて、グラフィック表示はされない、というこ
とがあるかもしれません。この時の対応は
(unknown label sect:xservertrouble) 節をみてみて下さい。
% snapplot test8k xvar=r yvar=v xrange=0:5 yrange=0:2
この場合、x 軸に , y軸に
をとり、またそ
れぞれの軸の範囲も指定しています。半径の関数としての速度分布がなんとな
くわかるプロットになっています。
3.4.2. glnemo2 の利用
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 であれば適切ばバージョンのファイルにして下さい)
そうすると、
ができるはずです。色々やってみて下さい。
3.4.3. mkkd95 のテスト
%mkkd95 testkd
を実行してみて下さい。 testkd というファイルができていれば OK です。駄
目な時には、、、色々調べてみて下さい。
%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
多分$ mknemo mkkd95が使えるようになる.
3.5. トラブルシューティング
Previous | ToC | Next |