上一期的鏈接:RTTOV12.2 (Radiative Transfer for TOVS) 研究環(huán)境搭建(一)on WSL Ubuntu LTS 18.04
三. GUI環(huán)境的準(zhǔn)備-F2PY
3.1 Miniconda
因?yàn)橹笠玫絉TTOV的GUI,配置python庫(kù)包環(huán)境的最簡(jiǎn)單方法是使用Conda包管理機(jī)制咙咽,因此這里先配置一個(gè)基礎(chǔ)的Conda環(huán)境欠拾, 安裝的python版本為2.7.15
之所以使用python2简烤,是因?yàn)槟壳碍h(huán)境的一些庫(kù)對(duì)python3的支持有一些問(wèn)題,相對(duì)來(lái)說(shuō)用python2更加保險(xiǎn)
之所以選用Miniconda, 只是因?yàn)楣?jié)省微機(jī)的存儲(chǔ)空間窒盐,就不用安裝一些不必要的科學(xué)庫(kù)了
Miniconda的官網(wǎng):
下載到一個(gè)shell可執(zhí)行文件:Miniconda2-latest-Linux-x86_64.sh
上傳到子系統(tǒng)上添加可執(zhí)行權(quán)限并執(zhí)行
$ cd ~/.Miniconda
$ chmod +x Miniconda2-latest-Linux-x86_64.sh
$ ./Miniconda2-latest-Linux-x86_64.sh
進(jìn)入文字交互界面后按照提示安裝即可
最后可以按照交互界面直接把Conda的可執(zhí)行文件目錄添加到環(huán)境變量PATH中, 否則接下來(lái)無(wú)法直接使用conda命令
不要忘記source一下
$ source ~/.bashrc
想要簡(jiǎn)要了解conda包管理的方法可以參考一下知乎上的這篇專欄, 概括得比較全面
進(jìn)入base環(huán)境
$ conda info -e
$ source activate base
退出base環(huán)境只需
$ source deactivate
base環(huán)境是conda包管理的基礎(chǔ)環(huán)境挑社,還可以創(chuàng)建其他環(huán)境,這個(gè)環(huán)境的python版本取決于你安裝的是Miniconda2 還是 Miniconda3. 需要指出的是:Miniconda 2也可以創(chuàng)建新的python3環(huán)境巡揍,只需要在創(chuàng)建新環(huán)境時(shí)指定python的版本即可滔灶。
為了方便起見,接下來(lái)筆者就直接用這個(gè)base環(huán)境管理RTTOV的GUI環(huán)境搭建了, 環(huán)境中已經(jīng)有的python庫(kù)包可以用以下命令查看
$ conda list
可以看到 pip/wheel 等一些基礎(chǔ)庫(kù)包已經(jīng)預(yù)先安裝好了
3.2 F2PY
F2PY 的官網(wǎng):
如果之后要配置GUI環(huán)境吼肥,RTTOV編譯時(shí)必須要依賴F2PY編譯
F2PY 目前是python著名的科學(xué)計(jì)算包 numpy 的一個(gè)模塊录平, 全稱為Fortran to Python interface generator,也就是一種造輪子的工具:把Fortran寫成的代碼編譯成可供python調(diào)用的動(dòng)態(tài)鏈接庫(kù)缀皱, 彌補(bǔ)python的矩陣運(yùn)算效率低下的缺陷斗这。類似的還有Cython, 有興趣的讀者可以了解下。
具體的安裝方法如下:
首先安裝numpy, 注意要先進(jìn)入base環(huán)境
$ conda install numpy
現(xiàn)在可以測(cè)試以下f2py安裝得是否正確
可以參照一篇文章進(jìn)行測(cè)試:
有一點(diǎn)要注意啤斗, 因?yàn)槭聦?shí)上F2PY是一種編譯工具表箭, 所以之前配置NETCDF時(shí)配置過(guò)的 CPPFLAGS LDFLAGS 務(wù)必要去掉, 否則測(cè)試編譯時(shí)的依賴庫(kù)會(huì)報(bào)錯(cuò)
可以用echo查看環(huán)境變量钮莲, 如果不為空設(shè)置為空
$ echo $CPPFLAGS
$ echo $LDFLAGS
測(cè)試成功免钻,F(xiàn)2PY就成功安裝了
好的, 接下來(lái)崔拥,我們先安裝RTTOV极舔, 最后配置GUI
四 RTTOV的編譯安裝
RTTOV解壓后沒有頂層文件夾,大家注意一下链瓦,先建一個(gè)文件夾放置解壓后的內(nèi)容
$ mkdir rttov12
$ tar -zxvf rttov122.tar.gz -C rttov12/
$ sudo mv rttov12/ /usr/local/
我們來(lái)看一下users-guide里對(duì)編譯安裝的介紹:
重點(diǎn)關(guān)注以下幾點(diǎn):
- RTTOV編譯有兩種方式拆魏,一種是依靠build文件夾下的腳本文件 /build/rttov_compile.sh 進(jìn)行編譯盯桦,另外一種方式是根據(jù) src/ 目錄下的Makefile手動(dòng)編譯,如果是對(duì)Makefile不熟悉的小白建議是使用前者
- RTTOV支持好多種fortran編譯器:要在腳本的ARCH參數(shù)中聲明渤刃,支持的 Fortran 編譯器有 gfortran ifortran pgf90 NAG 等拥峦, 具體可以在 build/arch 中查看
- OpenMP支持的編譯器編譯出的二進(jìn)制可執(zhí)行文件可以有多線程執(zhí)行功能, 可以大大加快計(jì)算效率
- 部分可選功能:
讀取HDF5 系數(shù)文件需要HDF5庫(kù)
發(fā)射率/雙向反射率地圖支持需要HDF5庫(kù)
python GUI 需要 HDF5庫(kù)
python wrapper / RTTOV GUI 需要 f2py
HTFRTC 需要 NetCDF v4 - 編譯前必須根據(jù)文件中的注釋修改build/Makefile.local文件指定外部依賴庫(kù)地址卖子,否則編譯腳本無(wú)法檢測(cè)到外部依賴庫(kù)的位置
- 如果編譯要依賴HDF5庫(kù)略号,編譯HDF5庫(kù)時(shí)必須打開Fortran語(yǔ)言,這在上一期已經(jīng)提到了
OK洋闽,了解之后開始操作吧
4.1 修改 build/Makefile.local
$ vim build/Makefile.local
主要修改HDF5塊和NETCDF塊以下內(nèi)容
HDF5_PREFIX = /usr/local/hdf5
FFLAGS_HDF5 = -D_RTTOV_HDF $(FFLAG_MOD)$(HDF5_PREFIX)/include
LDFLAGS_HDF5 = -L$(HDF5_PREFIX)/lib -lhdf5hl_fortran -lhdf5_hl -lhdf5_fortran -lhdf5
NETCDF_PREFIX = /usr/local/NETCDF
FFLAGS_NETCDF = -D_RTTOV_NETCDF -I$(NETCDF_PREFIX)/include
LDFLAGS_NETCDF = -L$(NETCDF_PREFIX)/lib -lnetcdff
實(shí)質(zhì)上是指明庫(kù)的依賴關(guān)系玄柠, 筆者的NETCDF 版本是4.4, 因此選擇 4.2 and later 進(jìn)行注釋
4.2 編譯 RTTOV
修改完成后喊递,按照說(shuō)明用腳本執(zhí)行編譯随闪, 注意腳本要在src/目錄下執(zhí)行
$ cd src/
$ ../build/rttov_compile.sh
確認(rèn)配置后執(zhí)行腳本即可
4.3 測(cè)試 RTTOV
編譯完成后,我們可以使用RTTOV自帶的測(cè)試模塊測(cè)試一下RTTOV是否正確地安裝了
看一下users-quick-start.pdf中的描述:
測(cè)試
$ cd rttov_test/
$ ./test_rttov12.sh ARCH=gfortran
測(cè)試結(jié)果一切正常骚勘,就可以說(shuō)RTTOV的本體已經(jīng)安裝成功了
這個(gè)測(cè)試的結(jié)果保存在目錄 rttov_test/test_rttov12.1.gfortran/下铐伴,有興趣的讀者可以先大致看看模擬結(jié)果
好, 下一步就是配置GUI了
五. GUI環(huán)境的配置
5.1 GUI依賴包安裝
GUI環(huán)境的配置主要參考官方文檔:rttov_gui_12.pdf
主要要關(guān)注以下幾點(diǎn):
- RTTOV12 gui 目前只支持 python2 環(huán)境
- conda 搭建 GUI python 環(huán)境更為方便, 不推薦直接用pip 搭建環(huán)境 , 否則要在 rttov_gui.env 中修改很多不明就里的環(huán)境變量, 不建議初學(xué)者這么做
- 主要要裝以下幾個(gè)與科學(xué)計(jì)算和圖形界面有關(guān)的python庫(kù):
wxpython/numpy/matplotlib/h5py
剩下注意事項(xiàng)裝完依賴庫(kù)以后再說(shuō)
$ conda install scipy matplotlib h5py wxpython
裝完以后用 conda list 命令查看以下包版本發(fā)現(xiàn)有問(wèn)題
文檔中要求
wxpython==2.9.5||3.0.0
h5py>=2.0
其中 wxpython 版本過(guò)高俏讹,需要降級(jí)
$ conda install wxpython=3.0.0
降級(jí)后符合要求
5.2 修改 gui/rttov_gui.env文件
vim gui/rttov_gui.env
因?yàn)槲覀兪褂胏onda環(huán)境搭建当宴, 只需要修改以下內(nèi)容
RTTOV_GUI_PREFIX=/usr/local/rttov12/gui # absolute path to the rttov/gui directory e.g. /home/user/rttov12/gui
接下來(lái)就可以測(cè)試GUI了, 別忘了啟動(dòng)你的Xming, 并設(shè)置好環(huán)境變量 DISPLAY的值泽疆,見環(huán)境搭建第一期
$ source gui/rttov_gui.env
$ cd gui
$ ./rttovgui
這時(shí)遇到了一點(diǎn)問(wèn)題:顯示wx庫(kù)無(wú)法導(dǎo)入户矢,因?yàn)槿鄙僖粋€(gè)叫做libgtk-x11-2.0.so.0的動(dòng)態(tài)鏈接庫(kù)
參考stackoverflow上的解決方案:
https://unix.stackexchange.com/questions/186347/error-while-loading-shared-libraries-libgtk-x11-2-0-so-0-cannot-open-shared-o
需要安裝包libgtk2.0-0
$ sudo apt-get libgtk2.0-0
再運(yùn)行還有報(bào)錯(cuò), 那就再裝一個(gè)庫(kù)
ImportError: libSM.so.6: cannot open shared object file: No such file or directory
$ sudo apt-get install -y python-qt4
重新嘗試,啟動(dòng)成功
具體操作見GUI文檔殉疼, 可以顯示廓線梯浪、模擬結(jié)果等等
RTTOV 安裝這個(gè)坑算是填上了, 接下來(lái)一期是ARTS數(shù)據(jù)庫(kù)和RTTOV的接口介紹瓢娜, 有空也會(huì)講講RTTOV中的一些基本概念
reference:
https://conda.io/miniconda.html
https://zhuanlan.zhihu.com/p/22678445
http://www.hedilict.com/f2py%E7%9A%84%E9%85%8D%E5%88%B6%E4%B8%8E%E4%BD%BF%E7%94%A8-windows-and-linux-platform/
https://blog.csdn.net/rumswell/article/details/7377339
https://unix.stackexchange.com/questions/186347/error-while-loading-shared-libraries-libgtk-x11-2-0-so-0-cannot-open-shared-o