3
1

More than 1 year has passed since last update.

WRF(Version 4.4)のコンパイル

Last updated at Posted at 2022-10-14

目次

1. はじめに
2. 事前準備
3. WRFのコンパイル
4. まとめ
5. 参考文献

1. はじめに

WRF(Weather Research and Forecasting Model)は,NCAR(National Center for Atmospheric Research)が開発している領域気象モデルです.誰でも簡単に計算機にインストールできて,誰でも簡単に気象モデルを動かすことができるのが魅力です.しかし,インストールしようとしても,ネット上には古い情報が多く,日本語で書かれているものや情報がよくまとめられているものが少ないと感じています."誰でも簡単に"と書いたものの,LinuxやFortranで書かれたプログラムの扱いに慣れていない人には厳しいとろこがあるのかなと思います.私は大学4年でLinuxやWRFを触り始め,楽しみ(苦しみ?)ながら研究をしてきました.難しいことから逃げずに勉強してほしいなと思いながらも,そういう人たちの一助にばればと,まずはWRFのコンパイルについてまとめようとおもいます.
ってのは建前で,本音は最近環境の整理で最新バージョンのWRFをコンパイルし,よくわからないエラーに困った(2年前に頑張って対処した?)ため,忘れる前にメモっておこうというものです.

2. 事前準備

環境

Linux(私の環境ではCentOS,他でも問題ないかと)でCLIでの使用と断っておきます.改めて調べてみたところ,どうやらGUIでも動くようですが,設定でテキストファイルをいじっていくソフトなのでCLIが相性がいいと思います.

必要なパッケージ

WRFのソースコードはver4.0より最新のものはGitHubにあります.よってgitコマンドが必要なためaptやらyumやらで入れてください.私が4年生のころはGitHubとかよくわかんなくて本家のサイトから落とせるver4.0を最近までずっと使ってました......

WRFのコンパイルに必要なパッケージは5つくらいあって,

  • netcdf
  • mpich
  • Jasper
  • libpng
  • zlib
    です.

netcdf以外はaptやらyumやらで入れれるはず.netcdfは自分でいれるということをしたことがないのでわからないのですが,WRFをコンパイルする時に使うC,Fortranのコンパイラと同じコンパイラを使う必要があるそうです.
上であげた5つのパッケージは,以下のコマンドで*-develがついたやつがあるといいみたい.
$ rpm -qa | grep [PACKAGENAME]
参考までに,自分の環境の場合を以下に示しておきます.

bash
$ rpm -qa | grep jasper
jasper-libs-1.900.1-33.el7.x86_64
jasper-1.900.1-33.el7.x86_64
jasper-devel-1.900.1-33.el7.x86_64

$ rpm -qa | grep png
libpng-1.5.13-7.el7_2.x86_64
libpng-devel-1.5.13-7.el7_2.x86_64

$ rpm -qa | grep zlib
zlib-1.2.7-18.el7.i686
zlib-1.2.7-18.el7.x86_64
zlib-static-1.2.7-18.el7.x86_64
zlib-devel-1.2.7-18.el7.x86_64

$ rpm -qa | grep mpich
hdf5-mpich-static-1.8.12-11.el7.x86_64
mpich-3.0-3.0.4-10.el7.x86_64
hdf5-mpich-1.8.12-11.el7.x86_64
mpich-3.0-devel-3.0.4-10.el7.x86_64
hdf5-mpich-devel-1.8.12-11.el7.x86_64

$ rpm -qa | grep netcdf
netcdf-devel-4.3.3.1-5.el7.x86_64
netcdf-4.3.3.1-5.el7.x86_64

2022-10-20追記----------------

環境変数

NetCDFとJasperからみの環境変数を設定します.

bash
$ export NETCDF=/usr/local/netcdf4_ifort
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib:/usr/lib64:/usr/local/lib:/usr/local/lib64:/usr/local/netcdf4_ifort/lib
$ export JASPERLIB=/usr/lib64
$ export JASPERINC=/usr/include

上記は自分の例で,インストールしたpathが違う場合は適宜変えてください.
追記ここまで-------------------

登録

下のリンクから登録してあげてください.便宜上登録してからじゃないと見えない部分まで書いてしまっているので......
< https://www2.mmm.ucar.edu/wrf/users/download/get_source.html >

3. WRFのコンパイル

ディレクトリ構造

適当な場所(私はホームディレクトリ)にbuild_wrfというディレクトリを作り,その中にWRF関連のものを入れます.
~/build_wrf
|-WRF
|-WPS
`-WPS_GEOG

ソースをダウンロード

bash
$ pwd
~
$ mkdir build_wrf
$ cd build_wrf
$ pwd
~/build_wrf
$ git clone --recurse-submodules https://github.com/wrf-model/WRF
$ git clone https://github.com/wrf-model/WPS

WRFWPSといディレクトリができます.

WRFコンパイル

WRFディレクトリに移動しましょう.$ ./configure したら,コンパイラや並列計算の有無を選択する必要があります.私は,ifortのsmparを選びました.番号は忘れました......

bash
$ cd WRF
$ pwd
~/build_wrf/WRF
$ ./configure 

私の環境ではconfigure.wrfを編集してコンパイルする必要がありました(編集しなくても問題なくコンパイルできるが,大きな領域の計算ができない.).

configure.wrf
178c178
< CFLAGS_LOCAL    =       -w -O3 -ip -DRPC_TYPES=1 #-xHost -fp-model fast=2 -no-prec-div -no-prec-sqrt -ftz -no-multibyte-chars # -DRSL0_ONLY
-------------------------------------------------------
> CFLAGS_LOCAL    =       -w -O3 -heap-arrays -ip -DRPC_TYPES=1 #-xHost -fp-model fast=2 -no-prec-div -no-prec-sqrt -ftz -no-multibyte-chars # -DRSL0_ONLY
182c182
< FCOPTIM         =       -O3
------------------------------------------
> FCOPTIM         =       -O3 -heap-arrays

CFLAGS_LOCALFCOPTIMに,-heap-arraysオプションをつけるだけです.編集したらコンパイルします.

bash
$ ./compile em_real >& compile.log
$ ls ./main/*.exe
./main/ndown.exe  ./main/real.exe  ./main/tc.exe  ./main/wrf.exe

コンパイルには50分ほどかかりました.4つのexeファイルができていたら成功です.失敗していたら,$ ./clean -aして対策して$ ./configureからやり直し.

WPSコンパイル

WPSディレクトリに移動しましょう.こちらも$ ./configureしたら,コンパイラや並列計算の有無を選択する必要があります.私は,ifortのserialを選びました.WRFはsmparなのに,WPSはserialじゃないとうまくコンパイルできませんでした.
2022-10-20追記----------------
WRFをsmparでコンパイルした場合,$ ./configureの後にできるconfigure.wpsを編集する必要があります.

configure.wps
44,48c44,48
< WRF_LIB         =       -L$(WRF_DIR)/external/io_grib1 -lio_grib1 \
<                         -L$(WRF_DIR)/external/io_grib_share -lio_grib_share \
<                         -L$(WRF_DIR)/external/io_int -lwrfio_int \
<                         -L$(WRF_DIR)/external/io_netcdf -lwrfio_nf \
<                         -L$(NETCDF)/lib -lnetcdff -lnetcdf
-------------------------------------------------------
> WRF_LIB         =       -L$(WRF_DIR)/external/io_grib1 -lio_grib1 -qopenmp \
>                         -L$(WRF_DIR)/external/io_grib_share -lio_grib_share -qopenmp \
>                         -L$(WRF_DIR)/external/io_int -lwrfio_int -qopenmp \
>                         -L$(WRF_DIR)/external/io_netcdf -lwrfio_nf -qopenmp \
>                         -L$(NETCDF)/lib -lnetcdff -lnetcdf -qopenmp

追記ここまで-------------------

bash
$ cd ../WPS
$ pwd
~/build_wrf/WPS
$ ./configure
# 2022-10-20追記----------------
# 上記のようにconfigure.wpsを編集
# 追記ここまで-------------------
$ ./compile >& compile.log
$ ls ./*.exe
./geogrid.exe  ./metgrid.exe  ./ungrib.exe

3つのexeファイルができていたら成功です.失敗していたら,$ ./clean -aして対策して$ ./configureからやり直し.

地形データダウンロード

WPSgeogrid.exeに必要なデータをダウンロードします.

bash
$ cd ..
$ pwd
~/build_wrf
$ wget https://www2.mmm.ucar.edu/wrf/src/wps_files/geog_high_res_mandatory.tar.gz
$ tar -xvzf geog_high_res_mandatory.tar.gz

WPS_GEOGというディレクトリができているはずです.

4. まとめ

今回はWRFのコンパイルについての備忘録的な記事を書いてみました.あと,実ははじめての記事なんですよね.大気,海洋の研究に関するデータ解析についての記事とかを上げていきたいなと思ってますので,今後ともよろしくお願いします.需要があればWRFの使い方も紹介したいなぁ.

5. 参考文献

3
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
3
1