By NOAA / Satellite and Information Service [Public domain], via Wikimedia Commons
前言
WRF,對於天氣預報研究從業人員來說一定是一個非常熟悉的詞彙,WRF 是一個天氣數值預報(Numerical Weather Prediction, NWP)模型,大體上使用 Fortran 撰寫,因為涉及多個數值求解(例如 Runge-Kutta 法求常微分方程),費力耗時,實務上使用超級電腦運算;隨著 GPU 運算興起,WRF 也一度改寫為 CUDA 版本加速運算。
安裝前言
安裝真的非常非常的麻煩,有些東西不可以裝太新,有些東西不可以裝太舊(很生氣),看到網路上也沒什麼太多的教學,而我又常常忘記,就來寫這一篇 Guide。
此次使用的系統為 Ubuntu 16.04;CPU 為何,RAM 多少,其實都不會妨害安裝,但是會妨礙你算資料;你會發現為了預報下三個小時的資料花了半天去算,預報都不預報了,而且事後校驗還不準,真的想哭。
安裝
申請 WRF 官網的帳號
說是申請帳號,也只是讓你填填 E-mail 一些資料驗驗證,就行的
進入到 Download Page,若是新使用者,點按 New Users;若是先前已申請過,填寫先前的 E-mail 即可驗證進入到下載頁面。
下載頁面
他有提到如果你是第一次使用 WRF 的使用者的話,可以看看他的線上教學(If you are a first-time WRF user, learn how to run the programs via the online tutorial.)根據官網所述,自 WRF 4.0 開始,WRF 安裝包裡面就含有 ARW、NMM、Chemistry、WRFDA 和 WRFPLUS 的原始碼了。我們這次以 WRF 4.0 為主。
官方其實有提供手把手的教學文件以及(我覺得寫的比較好的)教學文件之 2,奈何是我資質不夠還是如何,在編譯上總是會出現一些相依性等等的錯誤。
要裝什麼?
為了方便我們編譯以及環境變數的設置,我們先在這裡新建一個資料夾,名叫Build_WRF
:
mkdir Build_WRF
我們這次要裝的是具備分析實際案例(Real Cases)的 WRF 程式,他比起理想化(Idealized)案例的 WRF 程式還需要一個資料前處理程式(WRF Preprocessing System, WPS),所以請確認你已經具備兩個程式而且放置在我們剛剛新建的資料夾Build_WRF
裡頭:
WRFV4.0.TAR.gz
WPSV4.0.TAR.gz
接下來請將這兩個檔案解壓縮,*.tar.gz
的解壓縮方法如下:
tar zxvf <your_filename>.tar.gz
理論上,解壓縮完WRFV4.0.TAR.gz
與WPSV4.0.TAR.gz
你會得出兩個資料夾:
WRF/
WPS/
基本上,我們其實可以進行編譯了,但是編譯之前必須要檢視系統環境是否符合 WRF 的需求,這也是我這邊常常碰壁的地方:
系統環境
我們這邊一律採用 Ubuntu 16.04 LTS 的版本
SHELL 環境
由於 WRF 編譯指令是由csh
組成,若單純使用sh
系列的,會導致編譯失敗;為了讓我們編譯順利方便,我們需要安裝csh
,安裝及啟用方法如下:
安裝 CSH
sudo apt-get install csh
裝完就好,就可以讓 WRF 自己取用來編譯。
編譯程式
先檢查是否有以下三項編譯程式:
which gfortran
which cpp
which gcc
任何一項必須要有相對回應該程式的存放位置才算通過,回應範例如下:
~ $ which gfortran
/usr/bin/gfortran
若是返回結果如下,則表示未安裝(可能性較大)或是未設定環境變數妥當:
~ $ which gfortran
~ $
相依套件
先在我們剛剛開的資料夾Build_WRF
內再開一個新資料夾名叫LIBRARIES
,以備編譯時存取 Library 用:
mkdir LIBRARIES
請下載下列程式至上述資料夾,並解壓縮:
mpich-3.0.4
netcdf-4.1.3
Jasper-1.900.1
libpng-1.2.50
zlib-1.2.7
hdf5-1.8.13
下載點為:
安裝 HDF5
環境變數設置
在教學文件中,此環境變數限定使用在csh
setenv HDF5 /usr/local
若是使用sh
請改為:
export HDF5=/usr/local
編譯安裝
請確認你的 hdf5 已經解壓縮完畢,並進入到 hdf5 資料夾內:
cd hdf5-1.8.13
開始進行組態(Configure):
./configure --prefix=$HDF5 --enable-fortran --enable-fortran2003
Configure 後,若沒有錯誤,請接續:
make
Make 後,若沒有錯誤,請接續:
make install
安裝 NETCDF
環境變數設置
在教學文件中,此環境變數限定使用在csh
setenv DIR path_to_directory/Build_WRF/LIBRARIES
setenv CC gcc
setenv CXX g++
setenv FC gfortran
setenv FCFLAGS -m64
setenv F77 gfortran
setenv FFLAGS -m64
若是使用sh
請改為:
export DIR=path_to_directory/Build_WRF/LIBRARIES
export CC=gcc
export CXX=g++
export FC=gfortran
export FCFLAGS=-m64
export F77=gfortran
export FFLAGS=-m64
編譯安裝
請確認你的 netcdf 已經解壓縮完畢,並進入到 netcdf 資料夾內:
cd netcdf-4.1.3
開始進行組態(Configure):
./configure --prefix=$DIR/netcdf --disable-dap \
--disable-netcdf-4 --disable-shared
Configure 後,若沒有錯誤,請接續:
make
Make 後,若沒有錯誤,請接續:
make install
編譯後,請確認是否成功;若成功,設置環境變數(csh
):
setenv PATH $DIR/netcdf/bin:$PATH
setenv NETCDF $DIR/netcdf
bash
版本環境變數:
export PATH=$DIR/netcdf/bin:$PATH
export NETCDF=$DIR/netcdf
安裝 MPICH
請確認你的 mpich 已經解壓縮完畢,並進入到 mpich 資料夾內:
cd mpich-3.0.4
開始進行組態(Configure):
./configure --prefix=$DIR/mpich
Configure 後,若沒有錯誤,請接續:
make
Make 後,若沒有錯誤,請接續:
make install
編譯後,請確認是否成功;若成功,設置環境變數(csh
):
setenv PATH $DIR/mpich/bin:$PATH
bash
版本環境變數:
export PATH=$DIR/mpich/bin:$PATH
安裝 ZLIB
環境變數設置
在教學文件中,此環境變數限定使用在csh
setenv LDFLAGS -L$DIR/grib2/lib
setenv CPPFLAGS -I$DIR/grib2/include
若是使用bash
請改為:
export LDFLAGS=-L$DIR/grib2/lib
export CPPFLAGS=-I$DIR/grib2/include
編譯安裝
請確認你的 zlib 已經解壓縮完畢,並進入到 zlib 資料夾內:
cd zlib-1.2.7
開始進行組態(Configure):
./configure --prefix=$DIR/grib2
Configure 後,若沒有錯誤,請接續:
make
Make 後,若沒有錯誤,請接續:
make install
退出該資料夾:
cd ..
安裝 LIBPNG
請確認你的 mpich 已經解壓縮完畢,並進入到 mpich 資料夾內:
cd libpng-1.2.50
開始進行組態(Configure):
./configure --prefix=$DIR/grib2
Configure 後,若沒有錯誤,請接續:
make
Make 後,若沒有錯誤,請接續:
make install
退出該資料夾:
cd ..
安裝 JASPER
請確認你的 jasper 已經解壓縮完畢,並進入到 jasper 資料夾內:
cd jasper-1.900.1
開始進行組態(Configure):
./configure --prefix=$DIR/grib2
Configure 後,若沒有錯誤,請接續:
make
Make 後,若沒有錯誤,請接續:
make install
退出該資料夾:
cd ..
開裝 WRF
感動的時候來了,我們即將開裝 WRF,我們先離開資料家LIBRARIES
退回到資料夾Build_WRF
中。
請進入到WRF
資料夾:
cd WRF
由於 NETCDF 在版本 4 以上的時候就預設不支援 IO 功能,導致無法順利產出configure.wrf
檔案導致接下來編譯失敗,所以請大家加上一個環境變數使其能順利產生該檔案:
setenv NETCDF_classic 1
sh
版本
export NETCDF_classic=1
並執行:
./configure
若無意外,一開始我們會看到大約 75 種選項,大致分四大類:serial、smpar、dmpar、dm+sm,官網敘述如下:
serial : single processor
smpar : shared memory option (OpenMP)
dmpar : distributed memory option (MPI)
dm+sm : Distributed Memory with Shared Memory (for example, MPI across nodes with OpenMP within a node) - usually better performance is through dmpar only
在此我們是 smpar 較為妥適,再看第五個 column,列出許多編譯器的選項;在此,我們是gfortran/gcc
的編譯器,所以交叉比對我們選擇33
接下來,會詢問是否要編譯nesting
的選項,一共有四種:
Compile for nesting? (0=no nesting, 1=basic, 2=preset moves, 3=vortex following) [default 0]:
官網表示 1 是最為普遍的選項,而 3 主要是用來追蹤氣旋用;在此我們選擇1
。
接下來我們要開始編譯了,編譯選項有這些:
em_real (3d real case)
em_quarter_ss (3d ideal case)
em_b_wave (3d ideal case)
em_les (3d ideal case)
em_heldsuarez (3d ideal case)
em_tropical_cyclone (3d ideal case)
em_hill2d_x (2d ideal case)
em_squall2d_x (2d ideal case)
em_squall2d_y (2d ideal case)
em_grav2d_x (2d ideal case)
em_seabreeze2d_x (2d ideal case)
em_scm_xy (1d ideal case)
由於我們要分析實際資料,所以我們選用em_real
,所以請鍵入以下指令:
./compile em_real >& log.compile
編譯時較久,取決於你電腦的速度;編譯完後,在WRF/main
資料夾下,你應該要能看到這幾個檔案:
ndown.exe
real.exe
tc.exe
wrf.exe
開裝 WPS
請進入到WPS
資料夾:
cd WPS
官網建議先執行./clean
指令,確保無先前編譯內容,再來執行:
./configure
會出現一堆列表,但是我們剛剛選了smpar
但是這裡卻沒有類似的選項;在此,請選擇1. Linux x86_64, gfortran (serial)
請確保你不是選到NO_GRIB2
後綴的選項,沒有GRIB2
就是自廢武功。
按理,這樣就可以執行編譯,但是實際上因為我們這次選的是serial
而非smpar
會導致錯誤,所以我們必須更改configure.wps
內的指令,請先打開configure.wps
,在此我們使用vim
的文字編輯器:
vim configure.wps
以下是指令稿的內容,請找到此片段(約略於第 52 行左右):
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
請在-lnetcdf
後方加上-lgomp
,改完之後應該像這樣:
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 -lgomp
存檔後離開,此舉可避免 WPS 在編譯時找不到 GOMP 的函式庫導致失敗。由於 WPS 編譯需要 WRF,故預設 WRF 應該與 WPS 在同級資料夾,請你先行確認 WPS 與 WRF 是否存在同一個、同一層的資料夾內,再接下來進行編譯:
./compile
編譯完後,在WPS
資料夾下,你應該要能看到這幾個檔案:
geogrid.exe
ungrib.exe
metgrid.exe
由於這些只是 Symbolic Link 不是一個真正的程式檔案(像捷徑),請確認這些檔案大小是否為非零:
ls -ls geogrid/src/geogrid.exe
ls -ls ungrib/src/ungrib.exe
ls -ls metgrid/src/metgrid.exe
08/24 待續,遠端電腦掛掉沒辦法裝。
08/27 終於寫完,好累;會再確認一次安裝說明是不是有問題。
Some References:
编译WRF时报错ld: cannot find -lhdf5_fortran
Compiling and Testing WRF Model
Share this post
Twitter
Google+
Facebook
Reddit
LinkedIn
Pinterest
Email