2017/08/12

JAGURS on Mac

JAGURS(高性能津波計算コード)の作者の馬場さんから,Macで動いたなら手順を公開して欲しいという依頼がありましたので,まとめておきます.
(シリアル版かつ手抜きなので順次更新します)
(追記:シリアル版といいつつ,OpenMPは有効に出来るようでした.というわけで,MacOSな1台のマシンでやるにはOpenMPで十分.)

【試した環境】

【依存ライブラリ】
NetCDF,PROJ4,FFTW3が必要ということなので,MacPorts でお手軽に入れました.なので,インストール先は全て /opt/local になりますので,それに合わせてMakefileを修正して下さい.NetCDFはFortranから使えるようにするため,netcdf-fortranパッケージもインストールして下さい.かつ,FFTW3もFortranから使えるようにするため,gfortran variant などを付けておいて下さい.
(というのを考えるのが面倒なので,コンパイルする手順も別途作成します)
  • NetCDF
    •   netcdf @4.4.1.1_0+dap+netcdf4 (active)
      • sudo port install netcdf +dap +netcdf4
    •   netcdf-fortran @4.4.4_0+gcc6 (active)
      • sudo port install netcdf-fortran +gcc6
      • (High) Sierraは HPC compilerがgcc7なので +gcc7 かも
  • PROJ4
    • proj @4.9.3_0 (active)
      • sudo port install proj
  • FFTW3
    • fftw-3 @3.3.5_0+gfortran (active)
      • sudo port install fftw-3 +gfortran 2018.11.12加筆(書き漏れ)
あと,少なくとも私の環境では, -lsz (szip) が無いと言われたので,
  % port install szip
しました.

【コンパイル】
まずは,シリアル版.Makefile.SC_ICEをベースにするようにマニュアルに書いてあるけど,Makefileと同じ内容なので,Makefileでスタートする.

【罠】
フォートランのプログラムファイルが .f90 で提供されています.一方,gnu系(?)のコンパイラでは,.f90の場合,preprocessorが動いてくれません!

#ifdef MULTI
  1
Warning: Illegal preprocessor directive

とか言われます.これは, .F90 にすることで解決するそうです.まさか...
というわけで,ファイル名を .F90 にしてあげて(厳密には,preprocessorを使うソースだけで良いですが面倒なので全部),Makefileの %.o: %.f90 を  %.o: %.F90 にします.
(gfortran に -cpp オプションを渡してあげれば良いだけでした)

【Makefile修正箇所】

  • gfortran で .F90 なファイル(.f90と区別される)にpreprocessorを適用するには, -cpp オプションを指定する.
  • gfortran で OpenMP を使うには, -fopenmp オプションを指定する.

FC=/usr/local/bin/gfortran
PROJ4_DIR=/opt/local
CC=/usr/local/bin/gcc
CFLAGS=-g -I${PROJ4_DIR}/include
BASE=-cpp
FFTW3_INCLUDE_DIR=/opt/local/include
FFTW3_LIB=-lfftw3
OPT=-O2 -fopenmp
NETCDF=/opt/local
LIBS=-L$(NETCDF)/lib -lnetcdff -lnetcdf -L/opt/local/lib -lhdf5_hl -lhdf5 -lcurl -lsz -lproj $(FFTW3_LIB)
# MPI=ON

修正済Makefileはここに置いておきます

*追加注(2017/10/04)
% make
/usr/local/bin/gcc -c -g -I/opt/local/include mapproject.c
FATAL:/opt/local/bin/../libexec/as/x86_64/as: I don't understand 'm' flag!
make: *** [mapproject.o] Error 1

HPC compilerの /usr/local/bin/gcc を使う場合,as が /opt/local/bin/ になってしまうと,この不具合に当たるようです.PATHの順番を /usr/bin の方が先になっている必要があります.

2017/08/05

「君の名は。」の月

「君の名は。」DVDも発売されましたね♪
書こう書こうと思っていたネタ帳がどこかに紛失してしまったので書き直し.

まず,なんか,もう気に入りすぎちゃって,片手じゃ足りないくらい見ちゃってました.両手では足りる回数でしたが・・・.

んで,何を書こうと思ったかというと,月.
深海監督は,リアルな描写を旨とされているということなんだけど,天文屋からするとちょっとねぇ〜というところがちらほら.
あの描写(進行方向)がされている彗星が地球に落下することは無いんですよね.基本,自分のところに落ちてくる流星(隕石)は,静止流星として見えてないとね...まぁ,これはマニアックな話.
惜しいのは,月齢.3年間時間がずれていて日付が同じ.その日に月の形が同じになるかは月齢が同じかどうかということになる.これは,ちょっと気合いを入れて調べると分かる.例えば,ここで月齢の計算が出来る.ただ,まぁ,ちょっと気合がいると思います.このこよみのページによると,2013年10月で新月だったのは5日.そうすると,三日月(に見える)の日は,10月8日〜10日位なんですね.

んだども,ど〜〜しても,見た瞬間に気になっちゃったのは(そして,何度も確認したのは),2台のクレーン車の上に居た半月.こちらのサイトのように,意味深な解釈もありそうなのですが,自分としては,気になってしょうがないのはこの半月.こればっかりは,何の調べも必要なく,あり得ない.と分かってしまう.何かというと,,,月が光っている向き(半分)が逆.もしくは,昼夜が逆.なんでかって言うと,半月ということは,月と地球と太陽が90度の角度を成しているわけで,もうちょっとわかり易い表現に変えると,光っている側の90度向こう側に太陽が居ることを意味してます.月は太陽に照らされているので当然ですね.
そうすると,何がおかしいかというと,半月で「上」側が光っている場合,太陽は月の上側に居るわけなので,昼間じゃなきゃおかしいのです.か,「下」半分が光ってて,夜.別にそんな話はどうでもいいって?ま,良いです.でも,これは「ウソ」って分かる描写なら別に気にもならないのですが,リアルっぽくあり得ないから気になっちゃいました.虫が食ったような三日月モドキとかはあり得ないって分かるし.

更なる蛇足ですが,1200年周期で彗星が戻ってくることはあるわけですが,,,,同じ場所に落ちるってのはなぁ...でも,「あり得ない」と断言できるものではない.

でも,面白くて何度も観たし,DVDも買いましたで!

(追記)
彗星の分裂というのは,木星に衝突したシューメーカーレビー第9彗星(SL9)に限らず,頻繁に発生している現象です.私の最初の研究はSL9の木星衝突時の近赤外(OASIS)観測記録の解析.卒論は,百武彗星の分裂片の運動解析でした.どっちもちゃんと論文化していないのは,,,反省.