2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

まっさらなDebian9にRebound(N体計算コード)をインストールするお話

Last updated at Posted at 2019-10-30

#REBOUNDをインストールしよう
REBOUNDはデブにはきつい名前のN体計算コードです.
ただ,いくら自分がデブとはいえ研究に使うとなったら親でも使う勢いで何でも使わないといけません.
今回は自分のやりたいこと(小天体の時間発展を見てみたい)とマッチしそうな気がしたREBOUNDをインストールするまでの顛末を記載します.

##REBOUNDのアピールポイント
以前N体コードについて書いたページでも述べたのですが,ライブラリを必要とせず設定が簡単なようです……ってありますけれどたぶんこれ"それなりに"いろいろなことをやっているパソコンにインストールをする場合の話でしょうと思います.C版のインストールは結構大変でした

##C版のインストール

###今北産業という人向け(死後)
奮闘記込みで読みづらいので3行でまとめますと
1.GLFWを入れる
2.サンプルコードを実行する
3.(場合によっては)OpenGLの設定をする.

あとはそれぞれ手順1,2,3を見てください.

開発チームのクイックユーザーズガイドを見る限りだと

install.sh
git clone http://github.com/hannorein/rebound
cd rebound/examples/shearing_sheet
make
./rebound

だけで実行できる……らしい……のだけれども……Gitをインストールして実行すると(Gitすらない)……

Compiling shared library librebound.so ... make -C ../../src/ make[1]: Entering directory '/mnt/c/Users/Haruka/Documents/研究室/研究室/program/rebound/src' Compiling source file display.c ... cc -c -std=c99 -Wpointer-arith -D_GNU_SOURCE -O3 -Wall -g -Wno-unused-result -Wno-unknown-pragmas -fPIC -DLIBREBOUND -DOPENGL -DGITHASH=a99d3481a4e27796640e3899991f99290a02b9c9 -o display.o display.c display.c:50:24: fatal error: GLFW/glfw3.h: No such file or directory #include ^ compilation terminated. Makefile:12: recipe for target 'display.o' failed make[1]: *** [display.o] Error 1 make[1]: Leaving directory '/mnt/c/Users/Haruka/Documents/研究室/研究室/program/rebound/src' Makefile:12: recipe for target 'librebound' failed make: *** [librebound] Error 2

となってうまくいきません( ノД`)シクシク….ここからインストールにこぎつけるまでの記録を投稿していきます.

###手順1:glfwのインストール.
fatal error: GLFW/glfw3.h: No such file or directory
というエラーが出たのでまずはGLFWを入れてみました.
その際にはこちらのGLFWの設定(初回の設定)のMacOSの場合を参考にさせていただきました.
まずはcmakeも入っていなかったので"cmake"と,依存関係にあるプログラムをGLFWのCompile Guideを見てインストールをします(僕の場合は"xorg-dev").
そしてGLFWの設定(初回の設定)を参考にmake installまで実行します.

そしてまたREBOUNDのmakeを実行しようとすると……
「/usr/bin/ld: cannot find -lglfw 」ってエラーが.
なんで!?今glfw入れたじゃん!!なんでそのライブラリがないの??ってなりますよね?
ってなわけで/user/local/libにライブラリを見に行くと……「libglfw3.a」というファイルがありました.バージョンの関係かで名前に数字が入ってしまったのが原因だったのでしょうか.

user@pc:/usr/local/lib# cp libglfw3.a libglfw.a

として数字無しのライブラリファイルを生成してあげればひと段落.
あとはGLFW関係のライブラリとして"libglfw3-dev"もインストールしてあげましょう.

user@pc:directory# apt install libglfw3-dev

あとはmakeをするだけでちゃんと実行できました!!!

###手順2:ほかのサンプルも走らせる.

今はreboundディレクトリから見て/rebound/examples/shearing_sheetにいますけれどexample以下には様々なサンプルコードが入っています.

これらをぶん回してあげるといろいろな計算ができそうです.

###手順3:環境ごとにXの設定をする.(vcXsrvでのOpenGLの設定)

このままだと環境によってはopenGLがうまく立ち上がらずに軌道の絵が出てこないままプログラムが回ることがあります.
例えば自分の環境(vcXsrv+WSLからsshでDebianにインストールしたreboundを実行)で/rebound/examples/outer_solar_systemを回すときに

N_tot=  6         t=  0.000000  dt=  40.000000  cpu=  0.000000 [s]  t/tmax=  0.00%
libGL error: No matching fbConfigs or visuals found 
libGL error: failed to load driver: swrast
GLFW Error: GLX: Failed to create context: GLXBadFBConfig
Error! GLFW window creation failed.
N_tot=  6         t=  70000000.000000  dt=  40.000000  cpu=  0.170325 [s]  t/tmax= 95.89%
Done. Final time: 73000000.0000. Relative energy error: 7.188078e-11                 

というようにlibGLが立ち上がらないよと出ました.
このようにopenGLが立ち上がらないときはvcXsrvの起動時にオプションで"-nowgl"を入れてください.
そうすると軌道の絵がちゃんと描かれるようになります.
リアルタイムに粒子がどのように運動しているかわかるため計算設定がおかしくないか確認することができます.

##Python版のインストール

user@pc:directory#pip3 install rebound

以上
##反省点
よくある問題点を読みましょう!!!!
Quick Reference GuideのPossible issues when compiling REBOUNDに"libglfw3-dev"を入れようねって書いてあったのですがそれを読まずにGLFW3だけを入れて安心していたので五時間くらい詰まりました.
入れたら一瞬でmakeが通ったので楽でしたね……
困ったらよくある問題点を読むことが大事です.

##おねがい
もし自分の環境で動かなかった!とか自分もREBOUND使っている!という方がいましたらご連絡をください.
日本人ユーザーとして協力してやれたらありがたいなぁと考えます.

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?