LoginSignup
3
3

More than 1 year has passed since last update.

wgrib2 v3.0.0 を macOS Catalina にインストールする

Last updated at Posted at 2020-11-05

注意

最新版のwgrib2 v3.1.1 だとトラブルなくインストールできました。以下の記事を参照ください。

TL;DR

makefileの123,124行目をコメントアウトを外す。

export CC=gcc
export FC=gfortran

145行目でOpenMPを使わない設定にする。

USE_OPENMP=0

409行目と410行目の間に以下の行を追加

FTN_LEGACY:="-std=legacy -Wno-argument-mismatch"

はじめに

wgrib2とは、GRIB2形式のファイルの情報を見たり、プレーンバイナリやNetCDF等の他の形式に変換するプログラムです。2020年のメジャーアップデートでv3.0.0になったということで、「wgrib2 を macOS Mojave (v10.14) にインストールする」という記事をもとにインストールしようとしたところ、いくつか苦労する点があったので記録を残しておきます。

こちらのOSのバージョンは macOS Catalina v10.15.7 です。
gccとgfortranはHomeBrewでインストールしました:gcc version 10.2.0 (Homebrew GCC 10.2.0)

手順

指示通りに実行

はじめに、https://www.ftp.cpc.ncep.noaa.gov/wd51we/wgrib2/のページからwgrib2.tgz.v3.0.0をダウンロードします。v2.0.8が25Mなのに対して、v3.0.0が173Mとファイルサイズが大きくなっており、その分ダウンロードに時間がかかります。

ファイルを解凍し、生成したgrib2フォルダに移動します。

$ tar xvf wgrib2.tgz.v3.0.0
$ cd grib2

makefileを書き換えます。まずgccとgfortranを設定する行(123,124行目)をコメントアウトを外します。

#
# can uncomment following two lines to use gcc/gfortran
export CC=gcc
export FC=gfortran
#
# for OS-X: uncomment line for makefile -f scripts/makefile.darwin
#

v2の場合はこれで良かったのですが、v3の場合はまだ終わりません。下の行になにやらmacOSの場合はコメントを外せとの指示があります。darwinでファイル内を検索すると773行目に該当する行が見つかるので、これもコメントアウトを外します。

# for OSX
export LDFLAGS="-L${lib}" && cd "${pngdir}" && export CPPFLAGS="${wCPPFLAGS}" && ${MAKE} -f scripts/makefile.darwin

エラー発生その1 (-fopenmp)

いったんこの設定でmakeしてみます。

$ make

# (略)
export LDFLAGS="-L/Users/ytakano/Downloads/grib2/lib" && cd "/Users/ytakano/Downloads/grib2/libpng-1.2.57" && export CPPFLAGS=" -I/Users/ytakano/Downloads/grib2/include -Wall -Wmissing-prototypes -Wold-style-definition -Werror=format-security -ffast-math -O3 -DGFORTRAN -fopenmp -fPIC -g -I/Users/ytakano/Downloads/grib2/jasper-1.900.1/src/libjasper/include " && make -f scripts/makefile.darwin
cc -I../zlib -W -Wall -O -funroll-loops  -I/Users/ytakano/Downloads/grib2/include -Wall -Wmissing-prototypes -Wold-style-definition -Werror=format-security -ffast-math -O3 -DGFORTRAN -fopenmp -fPIC -g -I/Users/ytakano/Downloads/grib2/jasper-1.900.1/src/libjasper/include   -c -o png.o png.c
clang: error: unsupported option '-fopenmp'
make[1]: *** [png.o] Error 1
make: *** [/Users/ytakano/Downloads/grib2/lib/libpng.a] Error 2

-fopenmpがないというエラーが出ます。よく見るとコンパイラがgccではなくccになっています。本来ならコンパイラを正しく設定すべきですが、該当箇所が見つからなかったので、makefileの145行目でOpenMPを使わないように設定します。wgrib2の処理はIOメインであり、手元のMacbookで使う分にはそこまで影響はないと思っています。

USE_OPENMP=0 # 1

エラー発生その2 (Type mismatch)

もう一度makeします。

$ make clean
$ make

# (略)
gfortran  -c -O3 -fPIC -g -fdefault-real-8 -fdefault-double-8  fftpack.f
# (略)
Error: Type mismatch in argument 'ifac' at (1); passed REAL(8) to INTEGER(4)
fftpack.f:22:72:

   22 |       CALL RFFTB1 (N,R,WSAVE,WSAVE(N+1),WSAVE(2*N+1))
      |                                                                        1
Error: Type mismatch in argument 'ifac' at (1); passed REAL(8) to INTEGER(4)
fftpack.f:28:72:

   28 |       CALL RFFTI1 (N,WSAVE(N+1),WSAVE(2*N+1))
      |                                                                        1
Error: Type mismatch in argument 'ifac' at (1); passed REAL(8) to INTEGER(4)
make[1]: *** [fftpack.o] Error 1
make: *** [/Users/ytakano/Downloads/grib2/lib/libsp_v2.0.2_d.a] Error 2

型のミスマッチでエラーになりました。検索してみるとwgrib2 compile questionsというページに、参考になりそうな記述があります。

Question: Warnings about parameter type mismatch in fftpack.f"?

Answer:
The file fftpack.f is was written to an old fortran standard
before you had an allocatable array and memory was at a premium.
To save space, a real work array was defined and used in some parts
of the code. The same array was used in other parts of the code
which needed an integer work array. You save memory by using the
same array in both places. It was common practice and the old
compilers didn't complain. Ignore the warnings.

fftpack.fはFORTRAN77で書かれている古いコードなので、警告が出るけど無視してねということだそうです。今回は警告ではなくエラーが出ているので、FORTRAN77用のコンパイルオプションを付ければ動く気がします。sp_v2.0.2_d/Makefileの中身を見てみるとFTN_LEGACYというそれっぽいオプションが見当たります。

fftpack.o:      fftpack.f
        $(FC) $(FFLAGS) ${FTN_REAL8} ${FTN_LEGACY} $<

残念なことに、実行時のログを見ると中身は空のようです。このFTN_LEGACY
makefileの342行目と373行目で見つかります。

    FTN_LEGACY:="-std=legacy -Wno-argument-mismatch"

これらの行はifeq節の中に書かれており、COMP_SYSgnu_linuxまたはcygwin_winの場合に実行され、gnu_macの場合は実行されません。それでは困るので、409行目と410行目の間にこの文を追記します。

私の環境では、以上の設定でmakeに成功しました。

 $ ./wgrib2/wgrib2 -version
v3.0.0 9/2020  Wesley Ebisuzaki, Reinoud Bokhorst, John Howard, Jaakko Hyvätti, Dusan Jovic, Daniel Lee, Kristian Nilssen, Karl Pfeiffer, Pablo Romero, Manfred Schwarb, Gregor Schee, Arlindo da Silva, Niklas Sondell, Sam Trahan, George Trojan, Sergey Varlamov
3
3
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
3
3