WRF(Version 4.4)のコンパイル

# 目次
[1. はじめに](#1-はじめに)
[2. 事前準備](#2-事前準備)
[3. WRFのコンパイル](#3-wrfのコンパイル)
[4. まとめ](#4-まとめ)
[5. 参考文献](#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: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: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: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
~~~
**WRF**と**WPS**といディレクトリができます．
## WRFコンパイル
**WRF**ディレクトリに移動しましょう．`$ ./configure `したら，コンパイラや並列計算の有無を選択する必要があります．私は，ifortのsmparを選びました．番号は忘れました......
~~~bash:bash
$ cd WRF
$ pwd
~/build_wrf/WRF
$ ./configure 
~~~
私の環境では**configure.wrf**を編集してコンパイルする必要がありました(編集しなくても問題なくコンパイルできるが，大きな領域の計算ができない．)．
~~~diff: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_LOCAL**と**FCOPTIM**に，**-heap-arrays**オプションをつけるだけです．編集したらコンパイルします．
~~~bash: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**を編集する必要があります．
~~~diff: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: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`からやり直し．
## 地形データダウンロード
**WPS**の**geogrid.exe**に必要なデータをダウンロードします．
~~~bash: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. 参考文献
- Ncar, How to Compile WRF:The Complete Process, https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compilation_tutorial.php, (2022-10-08)
- Ncar, WRF Source Code Registration and Download, https://www2.mmm.ucar.edu/wrf/users/download/get_sources_new.php, (2022-10-08)
- Ncar, WPS V4 Geographical Static Data Downloads Page, https://www2.mmm.ucar.edu/wrf/users/download, (2022-10-08)/get_sources_wps_geog.html#mandatory
- M.Hayasaki's web, WRF setup, http://www.hysk.sakura.ne.jp/meteorol/WRF_setup, (2022-10-08)
- 川島正行のホームページ, WRFノート, http://www.lowtem.hokudai.ac.jp/multi-sphere/cloud/kawasima/WRF/wrf_3.5.1.html, (2022-10-08)
- senooken.jp, WRFテストケースの実行, https://senooken.jp/post/2013/03/20/, (2022-10-08)
- Ncar, Chapter 2: Software Installation, https://www2.mmm.ucar.edu/wrf/users/docs/user_guide_v4/v4.4/users_guide_chap2.html, (2022-10-08)