【メモ】Windows Subsystem for LinuxでJAGURSを実行

iowa manさんの下記の記事をもとに、津波伝播・浸水計算プログラムであるJAGURSをWindows Subsystem for Linuxで実行してみました。

qiita.com

実行してみるには直接iowa manさんの記事を読むのが間違いなく良いのですが、Linux力がない自分の試行錯誤を晒しておくのも、何かの役に立つかもしれないと思って記事を書きます。結構誤りを含んでいる可能性があるので、ご注意ください。また、お気づきになった場合は、ご指摘いただけると助かります。

ここでは自分の環境でうまくいかなかったことや覚え書きのみを記すので、基本的な手順についてはiowa manさんの記事をご参照ください。

なおテキストエディタについては、私はviの使い方を覚えていないので、もともとWindowsに入れてたものを使いました。

ライブラリの導入

HDF5

NetCDFを入れるのに必要らしいのですが、NetCDFを入れるときにzlibも必要だと言われて困ったので、zlibを入れてからHDF5も導入することにしました(HDF5を入れる際に必須なのかは不明)。

導入には、下記の記事を参考にさせていただきました。

Ubuntu/Install_HDF5 - Takuya Miyashita

tar -zxf zlib-1.2.11.tar.gz
cd -zxf zlib-1.2.11
./configure --prefix=/home/(ユーザー名)/zlib
make
make install

zlibを導入したあとは、iowa manさんの記事のとおりHDF5を入れました。
.bashrcに加筆&sourceで反映、という作業はこの後のソフトのインストール後にも行いました。

NetCDF-C

最近のバージョンでは、NetCDFはCとFortranに分離していているようですが、NetCDF-Fortranを入れるのにはNetCDF-Cが必要らしいので、こちらからインストールしました。

下記のサイトを参考にさせていただきました。

https://www.unidata.ucar.edu/software/netcdf/docs/getting_and_building_netcdf.html
NetCDF: Building the NetCDF-4.2 and later Fortran libraries
Ubuntu/Install_NetCDF - Takuya Miyashita

configure実行時以降で、

CPPFLAGS='-I/home/(ユーザー名)/hdf5/include -I/home/(ユーザー名)/zlib/include' LDFLAGS='-L/home/(ユーザー名)/hdf5/lib -L/home/(ユーザー名)/zlib/lib' \
./configure --prefix=/home/(ユーザー名)/netcdf-c --disable-dap
make && make check
make install

とすると、make check時にdo_comps.shはPASSされましたが、ひとまずインストールはできました。どういう問題があるのかは、分からずじまいです。

ちなみに、permission deniedでエラーが出ることがあったのですが、下記のようにフォルダ全体に実行権限を与えると解決しました。
sudo chmod -R 774 netcdf-c-4.7.3

NetCDF-Fortran

NCDIR=/home/(ユーザー名)/netcdf-c
NFDIR=/home/(ユーザー名)/netcdf-fortran
CPPFLAGS=-I${NCDIR}/include LDFLAGS=-L${NCDIR}/lib \
./configure --prefix=${NFDIR}
make check
としましたが、"FAIL: nf03_test FAIL: f03tst_open_mem"というエラーが出ました。
sudo make install
一応、インストールはできました。問題はありますが…

FFTW3

Ver.3.3.8を導入しました。make時に、"makeinfo"がないというエラーが出たので、下記を実行してインストールしました。
sudo apt-get install texinfo

PROJ4

Ver.7.0.0を導入しようとしたのですが、make時に、"aclocal-1.16"がないと言われてしましました。自分の環境にインストールされているaclocalがVer1.15のようなので、自分でビルドしてみようとするもうまくいかず。
仕方ないので、aclocal-1.15を使っている古いバージョンのPROJ4(Ver.4.9.3)を導入しました。

Open MPI

なくても動くらしいので、とりあえず今回は入れないことにしました。

JAGURS

コンパイル

iowa manさんの記事を参考にしつつ、srcフォルダ内にgfortran用のmakefileのサンプルがあったので、そちらも見て編集しました。デフォルトではszipとcurlも利用するように設定しているようなのですが、今回は入れてないので削除しています。

curlはリモートアクセス用らしいのですが、szipがどういうときに使用されるようになっているのかは分かりません。

# FC: Specify Fortran90 compiler command.
FC=gfortran

# Added for displacement.
# PRJ4_DIR: Specify PROJ.4 install directory.
# CC&CFLAGS: Specify C compiler command and flags.
PROJ4_DIR=/home/(ユーザー名)/proj4
CC=gcc
CFLAGS=-g -I$(PROJ4_DIR)/include

# BASE: Specify basic compiler options.
BASE=-cpp -fconvert=big-endian

# FFTW3_INCLUDE_DIR: Specify FFTW3 include directory.
FFTW3_INCLUDE_DIR=/home/(ユーザー名)/fftw3/include

# FFTW3_LIB: Specify linker options to link FFTW3.
FFTW3_LIB=-L/home/(ユーザー名)/fftw3/lib -lfftw3

# OPT: Specify compiler options about optimization level.
OPT=-O2 -fopenmp -I$(FFTW3_INCLUDE_DIR)

# NETCDF: Specify the path to NetCDF-c library.
NETCDF=/home/(ユーザー名)/netcdf-c
# NETCDF: Specify the path to NetCDF-fortran library.
NETCDFF=/home/(ユーザー名)/netcdf-fortran

# LIBS: Specify linker options.
LIBS=-L$(NETCDFF)/lib -lnetcdff -L$(NETCDF)/lib -lnetcdf -L/home/(ユーザー名)/hdf5/lib -lhdf5_hl -lhdf5 -L$(PROJ4_DIR)/lib -lproj $(FFTW3_LIB)

# EXEC: Specify the name of executable.
EXEC=jagurs

################################################################################
### Set parameters here! ###
################################################################################
# PREC=REAL_DBLE: All calc. (except file I/O) is performed with double precision.
# DBLE_MATH: Only intrinsic math functions are performed with double precision.
# Else, all calc. is performed with single precision.
#PREC=DBLE_MATH
PREC=REAL_DBLE

# MPI=ON: MPI version is made.
# Else, serial version is made.
MPI=OFF

実行

f:id:sfuno:20200504090716j:plain


計算終了後の画面です。かなり遅いので、やはりOpen MPIを使用したほうが良いのでしょうか…

可視化してみたところ、一応ちゃんと動いてるように見えましたが、NetCDF導入時のエラーが気になるところです。