Building WPS

Building WPS

cloud_download  

WPS source code

跟安裝 WRF 或任何Linux的軟體一樣,利用 tarball 原始碼安裝需要進行編譯,或是別人 (或好心人) 已經幫你編譯成portable 的形式,讓你可以帶著走,到處複製貼上都可以執行。

助教雖然不會幫你編好,但跟 WRF 一樣,助教幫你下載好原始碼了。非修課學生可以自行從 Github 下載官方的原始碼或下載其他版本。指令也大同小異,就不多解釋。

[USER@VAPOR ***]$ tar -zxf ${dataROOT}/tarball/WPS-4.5.tar.gz[USER@VAPOR ***]$ cd WPS-4.5

Configuring

已經有編譯過 WRF 經驗的你,應該已經不陌生了。確定環境有設定正確之後,就來 configure 一下吧。這裡如果執行上出錯,通常是有環境變數沒有設到或是設錯,請練習自己看錯誤訊息,跟著錯誤訊息的指引來更改成正確的環境。

[USER@VAPOR ***]$ cd WPS-4.5[USER@VAPOR ***]$ ./configurePlease select from among the following supported platforms.  1. Linux x86_64, gfortran (serial) 2. Linux x86_64, gfortran (serial_NO_GRIB2) 3. Linux x86_64, gfortran (dmpar) 4. Linux x86_64, gfortran (dmpar_NO_GRIB2) 5. Linux x86_64, PGI compiler (serial) 6. Linux x86_64, PGI compiler (serial_NO_GRIB2) 7. Linux x86_64, PGI compiler (dmpar) 8. Linux x86_64, PGI compiler (dmpar_NO_GRIB2) 9. Linux x86_64, PGI compiler, SGI MPT (serial)10. Linux x86_64, PGI compiler, SGI MPT (serial_NO_GRIB2)11. Linux x86_64, PGI compiler, SGI MPT (dmpar)12. Linux x86_64, PGI compiler, SGI MPT (dmpar_NO_GRIB2)13. Linux x86_64, IA64 and Opteron (serial)14. Linux x86_64, IA64 and Opteron (serial_NO_GRIB2)15. Linux x86_64, IA64 and Opteron (dmpar)16. Linux x86_64, IA64 and Opteron (dmpar_NO_GRIB2)17. Linux x86_64, Intel compiler (serial18. Linux x86_64, Intel compiler (serial_NO_GRIB2)19. Linux x86_64, Intel compiler (dmpar)20. Linux x86_64, Intel compiler (dmpar_NO_GRIB2)21. Linux x86_64, Intel compiler, SGI MPT (serial)22. Linux x86_64, Intel compiler, SGI MPT (serial_NO_GRIB2)23. Linux x86_64, Intel compiler, SGI MPT (dmpar)24. Linux x86_64, Intel compiler, SGI MPT (dmpar_NO_GRIB2)25. Linux x86_64, Intel compiler, IBM POE (serial)26. Linux x86_64, Intel compiler, IBM POE (serial_NO_GRIB2)27. Linux x86_64, Intel compiler, IBM POE (dmpar)28. Linux x86_64, Intel compiler, IBM POE (dmpar_NO_GRIB2)29. Linux x86_64 g95 compiler (serial)30. Linux x86_64 g95 compiler (serial_NO_GRIB2)31. Linux x86_64 g95 compiler (dmpar)32. Linux x86_64 g95 compiler (dmpar_NO_GRIB2)33. Cray XE/XC CLE/Linux x86_64, Cray compiler (serial)34. Cray XE/XC CLE/Linux x86_64, Cray compiler (serial_NO_GRIB2)35. Cray XE/XC CLE/Linux x86_64, Cray compiler (dmpar)36. Cray XE/XC CLE/Linux x86_64, Cray compiler (dmpar_NO_GRIB2)37. Cray XC CLE/Linux x86_64, Intel compiler (serial)38. Cray XC CLE/Linux x86_64, Intel compiler (serial_NO_GRIB2)39. Cray XC CLE/Linux x86_64, Intel compiler (dmpar)40. Cray XC CLE/Linux x86_64, Intel compiler (dmpar_NO_GRIB2)
Enter selection [1-40] :

執行成功的話,會進入需要請你依照自己環境的編譯器設置選擇合適的選項,選擇跟 WRF  一樣或差不多的即可,WPS 也沒有特別列出最佳化的選項在這個階段要調整或選擇。除了選適合的編譯器以外,主要是選擇能不能跨節點平行化以及能不能支援 grib2 格式。你可以選擇將 WPS 編譯成單核執行,出錯時 debug 也會容易一些。需要使用到多核平行執行的情境,也就表示需要跟時間賽跑,需要產出有時效性的預報等等。

另外 WPS 的執行時間一般不會到很誇張,單核心的版本直接在指令列執行 WPS 三支程式,只要不長時間占用或一次調用超過一定比例以上的核心數,也不一定需要使用到 PBS shell 送 job 。但如果在國網或其他公用主機上,建議就養成好習慣。

使用 PBS shell 的好處,順便練習把整個 WPS 三支主要執行程式和一些指令串起來寫成腳本,以後就在 PBS 送出一個 job 就完成,這也是作業化 (或自動化) 需要用到的技能,總不可能每天固定時間在電腦前下指令吧。但以做研究或做這份作業來說,多等個幾分鐘讓你思考一下下一步要做什麼,也不全然是壞事啦。

Compiling

WPS 的編譯因為會使用到 NetCDF zlib libpng JasPer  這四個函式庫,所以在函式庫都沒有設定或安裝好的情況下,感覺比 WRF 還要複雜,但不要猶豫先照著步驟走一遍,看看錯誤訊息給了什麼提示,就能完成。2024年課程所有函式庫都集中安裝在 NetCDF 目錄下,所以 module load 其實該有的必要函式庫都載入完成了,需要的環境有載入且邏輯順序正確,編譯這步驟應該不會出錯。

編譯前先檢查上一步執行 configure 產出的編譯設定檔 configure.wps,使用可跨節點記憶體分散式平行化的同學,請先將 configure.wps 中 Intel MPI Library 的 C 和 Fortran 指令修改成 mpiicc mpiifort 之後,再進行編譯。這邊困難的部分就是如果環境設定不正確,需要在 configure.wps 中增加指定函式庫的路徑了。

[USER@VAPOR ***]$ cd ${WPS_DIR}[USER@VAPOR ***]$ ./compile >& log-wps
使用自己個人電腦或沒人能幫你裝函式庫的話,有 root 權限就先自行用 yum dnf zypper apt ...等等有配合套件管理的指令裝 NetCDF 吧,但應該沒辦法裝到比較高的版本。沒有 root 權限就試試看自己從原始碼開始編吧,我相信自己勇敢試過一遍,遇到各種離奇錯誤訊息並自己思考如何解決除錯,才算是有獨立解決問題的能力(就有點工程師的概念)。

若執行編譯失敗,需要檢查 logfile 中的錯誤訊息,所以重點是編譯時記得  log 要輸出成檔案,問問題才有依據,重新編譯前也要記得執行 ./clean -a 把先前編譯的結果先移除再重新 configure 和 compile。只要 WPS 目錄下有出現三支 exe 結尾的執行檔連結,就表示編譯成功囉。