領域気象モデルWRF-ARWのインストール【macOS】

自分のホームページ（google site）を整理しようとしたところ、新しいgoogle siteが使いにくくなっていたため、一旦qiitaに整理する。笑
macでWRFをインストールする手順。

#1 環境
##1.1 動作環境
OS:macOS High Sierra
プロセッサ：3.5 GHz Intel Core i7
メモリ：32 GB 1600 MHz DDR3
※Library関連は省略。全てmacportsでインストール。
※Libraryは、全て同じバージョンのコンパイラでインストールしたものを使う。

##1.2 並列計算について
コンパイル時に4パターンから選択する必要がある。
①serial：For a single processor job (serial)
②smpar：For using OpenMP shared-memory parallelization：共有メモリ型 [OpenMPなど]
③dmpar：For using distributed-memory parallelization (dmpar) options：分散メモリ型 [MPIなど, フリーではMPICH, LAMなど] 
smparとdmparはmultiple processors用
④dm+sm：For combination of shared-memory and distributed memory options

##1.3 インストールに成功したWRFとコンパイラのバージョンの関係表
| コンパイラ/WRF ver. | 並列計算 | 3.2 | 3.2.1 | 3.3 | 3.3.1 | 3.4 | 3.4.1 | 3.5 | 3.5.1 | 3.6 | 3.6.1 | 3.7 | 3.7.1 | 3.8 | 3.8.1 | 3.9 | 3.9.1 | 3.9.1.1 | 4 |
|:---------:|:---------:|:---------:|:---------:|:---------:|:---------:|:---------:|:---------:|:---------:|:---------:|:---------:|:---------:|:---------:|:---------:|:---------:|:---------:|:---------:|:---------:|:---------:|:---------:|
| MacPorts gcc5 5.5.0_1 | serial |  |  |  |  |  |  |  |  |  |  |  |  |  | ◯ |  |  | ◯ |  |
|  | sm |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
|  | dm |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
|  | dm+sm |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | ◯ |  |  |
| コンパイラ/WPS ver. | 並列計算 | 3.2 | 3.2.1 | 3.3 | 3.3.1 | 3.4 | 3.4.1 | 3.5 | 3.5.1 | 3.6 | 3.6.1 | 3.7 | 3.7.1 | 3.8 | 3.8.1 | 3.9 | 3.9.1 | 3.9.1.1 | 4 |
| MacPorts gcc5 5.5.0_1 | serial |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
|  | sm |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
|  | dm |  |  |  |  |  |  |  |  |  |  |  |  |  | ◯ |  |  | ◯ |  |
|  | dm+sm |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |

#2 インストール手順
##2.1 ソースコードのダウンロード
```:terminal
$ wget -nc http://www2.mmm.ucar.edu/wrf/src/WRFV3.9.1.TAR.gz
$ wget -nc http://www2.mmm.ucar.edu/wrf/src/WPSV3.9.1.TAR.gz
$ tar -zxf WRFV3.9.1.TAR.gz
$ tar -zxf WPSV3.9.1.TAR.gz
```
※バージョンは適宜書き換える。
※macのデフォルトtarコマンドで解凍すると、うまくコンパイルできない。gnutarでないといけない模様？
※アカウントを持っていない場合は、ソースをダウンロードする前に登録すること。
WRF Modeling System Download: New User Registration http://www2.mmm.ucar.edu/wrf/users/download/wrf-regist.php

##2.2 WRFのインストール
###2.2.1 .wrfrcの作成
.profileとか.bash_profileとかに書き込んでも問題はないが、基本的にはWRFをインストールする時だけ読ませれば良いので、.wrfrcを作成して読み込ませるようにしている。

```:.wrfrc
### jasper-1.900.1
export JASPERBIN="/opt/local/bin"
export JASPERINC="/opt/local/include"
export JASPERLIB="/opt/local/lib"

### NetCDF 
export NETCDF="/opt/local/" 
export LD_LIBRARY_PATH=$NETCDF/lib:

### Compiler 
export FC=gfortran
export F90=gfortran
export F77=gfortran
export CC=gcc
export CXX=g++

### WRF
export WRF_EM_CORE=1 
export WRFIO_NCD_LARGE_FILE_SUPPORT=1 
export OMP_NUM_THREADS=4 

### macOS
export MACOSX_DEPLOYMENT_TARGET=10.13
```
※OSによって、MACOSX_DEPLOYMENT_TARGETの数字は書き換える。

階層は

```:ディレクトリ
WRFv3.9.1/
　├ WPS/
　├ WRF/
　└ .wrfrc
```
のようになる。ので、.wrfrcをsourceする。

```:terminal
$ source .wrfrc
```

###2.2.2 netcdf4を使うために、Makefileを書き換える
```:terminal
$ source .wrfrc
$ cd ./WRFV3
$ vi external/io_netcdf/makefile
```

```:WRFV3/external/io_netcdf/makefile
書き換え前
(7行目) LIBS = -L$(NETCDFPATH)/lib -lnetcdf
書き換え後
(7行目) LIBS = -L$(NETCDFPATH)/lib -lnetcdff -lnetcdf
```
※行数は参考。

###2.2.3 configureの実行

```:terminal
$ ./configure
（前略）
------------------------------------------------------------------------
Please select from among the following Darwin ARCH options:

  1. (serial)   2. (smpar)   3. (dmpar)   4. (dm+sm)   PGI (pgf90/pgcc)
  5. (serial)   6. (smpar)   7. (dmpar)   8. (dm+sm)   INTEL (ifort/icc)
  9. (serial)  10. (smpar)  11. (dmpar)  12. (dm+sm)   INTEL (ifort/clang)
 13. (serial)               14. (dmpar)                GNU (g95/gcc)
 15. (serial)  16. (smpar)  17. (dmpar)  18. (dm+sm)   GNU (gfortran/gcc)
 19. (serial)  20. (smpar)  21. (dmpar)  22. (dm+sm)   GNU (gfortran/clang)
 23. (serial)               24. (dmpar)                IBM (xlf90_r/cc)
 25. (serial)  26. (smpar)  27. (dmpar)  28. (dm+sm)   PGI (pgf90/pgcc): -f90=pgf90
 29. (serial)  30. (smpar)  31. (dmpar)  32. (dm+sm)   INTEL (ifort/icc): Open MPI
 33. (serial)  34. (smpar)  35. (dmpar)  36. (dm+sm)   GNU (gfortran/gcc): Open MPI

Enter selection [1-36] : 36
------------------------------------------------------------------------
Compile for nesting? (1=basic, 2=preset moves, 3=vortex following) [default 1]: 1

Configuration successful! 
------------------------------------------------------------------------

（後略）
```
※バージョンや並列計算の選択によって、表示される組み合わせが多少異なる。

###2.2.4 コンパイル
```:terminal
$  ./compile em_real &> compile_serial.log
（時間がかかる）
$  ls test/em_real
CAM_ABS_DATA                           RRTM_DATA                namelist.input.fire              ozone_plev.formatted
CAM_AEROPT_DATA                     SOILPARM.TBL             namelist.input.global         real.exe
ETAMPNEW_DATA                        URBPARM.TBL              namelist.input.jan00          run_1way.tar
ETAMPNEW_DATA.expanded_rain VEGPARM.TBL              namelist.input.jun01         run_2way.tar
GENPARM.TBL                              examples.namelist       namelist.input.ndown_1    run_restart.tar
LANDUSE.TBL                               grib2map.tbl               namelist.input.ndown_2     sample.txt
MPTABLE.TBL                               gribmap.txt                 namelist.input.ndown_3     tc.exe
README.grid_fdda                       landFilenames             namelist.input.volc             tr49t67
README.namelist                        namelist.input              ndown.exe                         tr49t85
README.obs_fdda                       namelist.input.4km      nup.exe                              tr67t85
RRTMG_LW_DATA                        namelist.input.chem    ozone.formatted                 wrf.exe
RRTMG_SW_DATA                        namelist.input.diags    ozone_lat.formatted
```
※wrf.exeなどが実行できる状態であれば成功。

##2.3 WPSのインストール
###2.3.1 netcdf4を使うために、Makefileを書き換える
```:terminal
$ cd ../WPS
$ vi util/src/Makefile
```

```:WPS/util/src/Makefile
書き換え前
(43行目) -L$(NETCDF)/lib -I$(NETCDF)/include -lnetcdf
書き換え後
(43行目) -L$(NETCDF)/lib -I$(NETCDF)/include -lnetcdff -lnetcdf
```
※行数は参考。

###2.3.2 configureの実行

```:terminal
$ ./configure
（前略）
------------------------------------------------------------------------
Please select from among the following supported platforms.

   1.  Darwin Intel PGI compiler   (serial)
   2.  Darwin Intel PGI compiler   (serial_NO_GRIB2)
   3.  Darwin Intel PGI compiler   (dmpar)
   4.  Darwin Intel PGI compiler   (dmpar_NO_GRIB2)
   5.  Darwin Intel PGI compiler; optional DM -f90=pgf90   (serial)
   6.  Darwin Intel PGI compiler; optional DM -f90=pgf90   (serial_NO_GRIB2)
   7.  Darwin Intel PGI compiler; optional DM -f90=pgf90   (dmpar)
   8.  Darwin Intel PGI compiler; optional DM -f90=pgf90   (dmpar_NO_GRIB2)
   9.  Darwin Intel Intel compiler   (serial)
  10.  Darwin Intel Intel compiler   (serial_NO_GRIB2)
  11.  Darwin Intel Intel compiler   (dmpar)
  12.  Darwin Intel Intel compiler   (dmpar_NO_GRIB2)
  13.  Darwin Intel g95 compiler     (serial)
  14.  Darwin Intel g95 compiler     (serial_NO_GRIB2)
  15.  Darwin Intel g95 compiler     (dmpar)
  16.  Darwin Intel g95 compiler     (dmpar_NO_GRIB2)
  17.  Darwin Intel gfortran/gcc    (serial)
  18.  Darwin Intel gfortran/gcc    (serial_NO_GRIB2)
  19.  Darwin Intel gfortran/gcc    (dmpar)
  20.  Darwin Intel gfortran/gcc    (dmpar_NO_GRIB2)
  21.  Darwin Intel gfortran/clang    (serial)
  22.  Darwin Intel gfortran/clang    (serial_NO_GRIB2)
  23.  Darwin Intel gfortran/clang    (dmpar)
  24.  Darwin Intel gfortran/clang    (dmpar_NO_GRIB2)
  25.  Darwin PPC xlf    (serial)
  26.  Darwin PPC xlf    (serial_NO_GRIB2)
  27.  Darwin PPC xlf gcc3.3 SystemStubs   (serial)
  28.  Darwin PPC xlf gcc3.3 SystemStubs   (serial_NO_GRIB2)
  29.  Darwin PPC g95    (serial)
  30.  Darwin PPC g95    (serial_NO_GRIB2)
  31.  Darwin PPC g95    (dmpar)
  32.  Darwin PPC g95    (dmpar_NO_GRIB2)

Enter selection [1-32] : 17
------------------------------------------------------------------------
Configuration successful. To build the WPS, type: compile
------------------------------------------------------------------------
```
※バージョンによって、表示される組み合わせが多少異なる。

###2.2.4 コンパイル
```:terminal
$  ./compile &> compile_serial.log
（時間がかかる）
$  ls 
README        configure                        link_grib.csh                       namelist.wps.global 
Vtable           configure.wps                 metgrid                               namelist.wps.nmm 
arch              configure.wps.backup     metgrid.exe                        ungrib 
clean             configure_old                 namelist.wps                       ungrib.exe 
compile         geogrid                          namelist.wps.all_options     ungrib.log 
compile.log   geogrid.exe                    namelist.wps.fire                util
```
※metgrid.exeなどが実行できる状態であれば成功。