感謝氣象家園的朋友們,總結了非常多的經驗,所有的資料都是充錢換積分買的,我只是將其融合一下適應自己的環境,再次感謝。
最近因爲某些原因接觸了CMAQ這套預測模型,改模型是基於Fortran90這種語言寫的,本記錄不涉及Fortran語法。
------ 本記錄只管安不管用,因爲我看不懂裏面啥意思 =3= ------
安裝過程中前前後後試過多套系統版本: Centos6 7 ubuntu 14 16 18,整個安裝過程的難點可是就是在gcc版本和 ioapi上,在網上找了大量教程,沒有一個是能完全跑通的,只能各取所長,特將本次過程記錄一下。
先貼一下系統信息和環境信息:
沒有 gcc 和 fortran 直接 yum install 就行
安裝 CMAQ 及 所需的庫:
網盤鏈接 https://pan.baidu.com/s/1fhSKt1Mlht7ZXxK-M0vYpQ 提取碼 hqhp
庫名和版本如下
CMAQ-5.0.2 zlib-1.2.8 hdf5-1.8.14 netcdf-4.3.3.1 netcdf-cxx-4.2 netcdf-fortran-4.4.2 mpich-3.1.4 IOAPI-3.2
以下所有安裝包我都放在 ~ 下,後邊安裝路徑請嚴格注意 ,都安裝在 /usr/local/netcdf 下, 如果安在別的地方,一定記好路徑。
1. 安裝 zlib
zlib 是 數據壓縮用的函式庫
- 解壓 tar -zxvf zlib-1.2.8.tar.gz
- 配置安裝信息. ./configure --prefix=/usr/local/netcdf
- make 編譯
- make check 檢查
- make install 安裝
成功判斷條件:
安裝完成之後會在/usr/local/netcdf 這個目錄下生成三個文件 lib include share
2. 安裝 hdf5
一種設計用於存儲和組織大量數據的文件格式
- 解壓 tar -zxvf hdf5-1.8.13.tar.gz
- ./configure --prefix=/usr/local/netcdf --with-zlib=/usr/local/netcdf
- make
- make check
- make install
成功判斷條件:
安裝完成後,會被安裝進/usr/local/netcdf 目錄下的四個文件 lib include share bin 中.
3. 安裝 netcdf-c
貌似4.2版本以後分成了 c庫 和 fortran庫,需要分開編譯,3, 4,5 步驟均爲安裝,到 6 配置完變量再 7 驗證安裝是否成功
一種面向數組型並適於網絡共享的數據的描述和編碼標準
- 解壓 tar -zxvf netcdf-4.3.2.tar.gz
- 配置安裝信息 [後邊一段要一起粘到bash裏] CPPFLAGS=-I/usr/local/netcdf/include LDFLAGS=-L/usr/local/netcdf/lib ./configure --prefix=/usr/local/netcdf --disable-dap
- make
- make check
- make install
4. 安裝 netcdf c++ 庫
- 解壓 tar -zxvf netcdf- cxx4-4.3.0.tar.gz
- LDFLAGS=-L/usr/local/netcdf/lib CPPFLAGS=-I/usr/local/netcdf/include ./configure -- enable-shared --prefix=/usr/local/netcdf
- make
- make check
- make install
5. 安裝 netcdf-fortran庫
- 聲明庫文件位置.終端中輸入 export LD_LIBRARY_PATH=/usr/local/netcdf /lib:$LD_LIBRARY_PATH
- 解壓 tar -zxvf netcdf-fortran-4.4.0.tar.gz
- 配置安裝信息 CPPFLAGS=-I/usr/local/netcdf/include LDFLAGS=- L/usr/local/netcdf/lib ./configure --prefix=/usr/local/netcdf
- make
- make check
- make install
6. 配置環境變量
終端中輸入 vim ~/.bashrc 按進入插入模式,輸入如下信息
#netcdf4.4
export NETCDF=/usr/local/netcdf
export PATH=$NETCDF/bin:$PATH
export LD_LIBRARY_PATH=$NETCDF/lib:$LD_LIBRARY_PATH
export CPPFLAGS='-I/usr/local/netcdf/include'
export LDFLAGS='-L/usr/local/netcdf/lib'
輸入完成保存退出(先按 esc 鍵,然後輸入:wq 保存退出 或者 esc 然後大寫ZZ)
輸入 source ~/.bashrc 重載 配置,要是不生效,關閉終端重開。
7. 檢查是否成功
nc-config --all
nf-config --all
檢查各個參數和路徑有沒有東西,沒有就失敗了,重裝吧。
到這一步,netpdf 算是成了。
8. 安裝mpich
- tar xf mpich-3.3.tar.gz
- cd mpich-3.3
- ./configure --prefix=/usr/local/mpich
- make -j 4 [ -j 4 是多核編譯, 速度快, 別的沒啥區別]
- make -j 4 check
- make -j 4 install
9. 設置 mpich 變量
vim ~/.bashrc
export PATH=/usr/local/mpich/bin:${PATH}
export LD_LIBRARY_PATH=/usr/local/mpich/lib:${LD_LIBRARY_PATH}
export MANPATH=/usr/local/mpich/share/man:${MANPATH}
source ~/.bashrc
10. 安裝 ioapi
!!這一步是遇到問題最多的,因爲後邊CMAQ一些模塊編譯需要這個支持,這塊找了大量資料湊起來一套可行的方式
git clone https://github.com/cjcoats/ioapi-3.2 或者 解壓文件
修改 ioapi-3.2下目錄下的Makefile
BIN 請根據自己情況調整, 如果你是完全按照我的模式來的, 這個就行了
修改後 ZZ 退出
當前的 ioapi-3.2 中的 ioapi 和 m3tools 目錄下沒有 Makefile 所以需要 複製:
在 ioapi 和 m3tools 目錄下分別
cp Makefile.nocpl Makefile
完事後退回 ioapi-3.2目錄
創建 Linux2_x86_64 目錄
終端輸入
export BIN=Linux2_x86_64
mkdir $BIN
將 ./lib 複製到 Linux2_x86_64 目錄下:
cd $BIN cp /usr/local/netcdf/lib/lib* ./
注意,這裏我就是之前爲什麼將 hdf zlib 都放在 netcdf 同一個目 錄,所以 lib 也是一起粘貼過來,如果你是分開安裝,就必須把其他 的也粘過來。
然後 回到 ioapi-3.2目錄
make configure
make
make install
成功判斷條件:
在 Linux2_x86_64 下輸入
ls *.mod
ls libioapi.a
確定有沒有相關文件,有的話恭喜基本過了這關了。
11. 編譯安裝CMAQ
首先安裝庫文件: blas 和 lapack
LAPACK 的源碼可以從 http://www.netlib.org/lapack/處下載,BLAS 也包含在其中。
LAPACK 提供了豐富的工具函式,可用於諸如解多元線性方程式、線性系統方程組的 最小平方解、計算特徵向量、用於計算矩陣 QR 分解的 Householder 轉換、以及奇異值分解 等問題。BLAS,全稱 Basic Linear AlgebraSubprograms,即基礎線性代數子程序庫,裏面擁有 大量已經編寫好的關於線性代數運算的程序。
參考了 http://blog.csdn.net/mlnotes/article/details/9676269 的博客內容來安裝 blas 和 lapack,http://blog.sciencenet.cn/blog-3233813-1001369.html。
下載 blas, cblas, lapack 源代碼, 這些源碼都可以在 http://www.netlib.org 上找到,下載 並解壓。這裏提供我安裝時的下載鏈接 http://www.netlib.org/blas/blas.tgz http://www.netlib.org/blas/blast-forum/cblas.tgz http://www.netlib.org/lapack/lapack-3.4.2.tgz, 解壓之後會有三個文件夾,BLAS, CBLAS, lapack-3.4.2
11.1 編譯 blas
- 先解壓文件 tar xvf blas.tgz
- cd BLAS # BLAS 的解壓文件夾
- gfortran -c -O3 *.f #編譯生成.o 執行文件
- ar rv libblas.a *.o #鏈接所有的 .o 文件,生成 .a 文件
- cp libblas.a /usr/local/lib # 將庫文件複製到系統庫目錄
11.2 編譯cblas
- 先解壓文件 tar xvf cblas.tgz
- cd CBLAS # CBLAS 的解壓文件夾
- 將該文件夾下的某個 Makefile.xx 複製改名成 Makefile.in,其中 xx 代表了運行的環 境,我用的是 linux 系統故將 Makefile.LINUX 改成 Makefile.in
- cp ../BLAS/libblas.a testing #將上一步編譯成功的 libblas.a 複製到 CBLAS目錄 下的 testing 子目錄
- make #編譯所有的目錄
- cp lib/cblas_LINUX.a /usr/local/lib/libcblas.a # 將庫文件複製到系統庫目錄下
11.3 編譯 lapack 和 lapacke
- 先解壓文件 tar xvf lapack.tgz
- cd lapack-3.4.2 #lapack 的解壓文件夾
- 將 INSTALL 文件夾中的 make.inc.xx 複製一份到 lapack 目錄下,並且替換掉原有 的 make.inc,其中 xx 代表相應的編譯器,比如我使用的是 gfortran 故用 make.inc.gfortran 來替換。
- 隨後,我們需要對 make.inc 文件進行編輯,這一步比較重要 主要是設定好對應的 blas 和 cblas 目標文件的鏈接路徑(在系統庫目錄下的)。
- 編輯完成後,開始編譯 make #編譯所有的 lapack 文件
- cd lapacke #進入 lapacke 文件夾,這個文件夾包含 lapack 的 C 語言接口文件
- make # 編譯 lapacke
- cp include/*.h /usr/local/include #將 lapacke 的頭文件複製到系統頭文件目錄
- cd .. #返回到 lapack 目錄
- cp *.a /usr/local/lib # 將生成的所有庫文件複製到系統庫目錄
11.4編譯 CMAQ
去官網下載 CMAQv5.0.2 源代碼和 benchmark input data
官網地址: https://www.cmascenter.org/download/forms/step_1.cfm
需要先註冊,登錄,然後選擇 CMAQ
下一步選版本和環境
然後選擇
CMAQ source code and scripts
CMAQ benchmark input data
然後解壓 到 /usr/local/CMAQ-5.0.2下
後邊要進入 csh 環境,沒有的話 yum install csh
$ csh
$ cd /usr/local/CMAQ-5.0.2/scripts\
$ vim config.cmaq
保存ZZ
進入 lib:
cd $M3LIB
直接把你安裝好的/usr/local 目錄下的 netcdf、mpich、ioapi 文件夾cp過來,名字一定要是 netcdf、mpich 和 ioapi-3.2
(後面路徑設置會涉及到, 無論什麼名字自己要知道是這個路徑)
現在開始安裝模塊:
12 bldit.se 安裝
注意,從現在開始,每一個 bldit 都要用 gedit 打開看是否有 ioapi 路 徑,原代碼是默認 ioapi_3.1,一定要改!!!!!!!!!!!
cd $M3HOME/scripts/stenex
./bldit.se
./bldit.se_noop
2.3 編譯 Pario
cd $M3HOME/scripts/pario
改 ioapi 路徑:
set IOAPIEXT = ${M3LIB}/ioapi-3.2/ioapi/fixed_src
set IOAPIMOD = ${M3LIB}/ioapi-3.2/Linux2_x86_64 [後邊基本也就是這個路徑了]
保存退出然後
build ./bldit.pario
cd $M3HOME/scripts/build
./bldit.bldmak
其餘的各個模塊原理基本類似, 粘幾張圖
圖裏的 /Linux2_${system}${compiler_ext} 請改成 /Linux2_x86_64!
終端 ./run.icon看看 是不是成了