上一期的链接:RTTOV12.2 (Radiative Transfer for TOVS) 研究环境搭建(一)on WSL Ubuntu LTS 18.04
三. GUI环境的准备-F2PY
3.1 Miniconda
因为之后要用到RTTOV的GUI,配置python库包环境的最简单方法是使用Conda包管理机制,因此这里先配置一个基础的Conda环境, 安装的python版本为2.7.15
之所以使用python2,是因为目前环境的一些库对python3的支持有一些问题,相对来说用python2更加保险
之所以选用Miniconda, 只是因为节省微机的存储空间,就不用安装一些不必要的科学库了
Miniconda的官网:
下载到一个shell可执行文件:Miniconda2-latest-Linux-x86_64.sh
上传到子系统上添加可执行权限并执行
$ cd ~/.Miniconda
$ chmod +x Miniconda2-latest-Linux-x86_64.sh
$ ./Miniconda2-latest-Linux-x86_64.sh
进入文字交互界面后按照提示安装即可
最后可以按照交互界面直接把Conda的可执行文件目录添加到环境变量PATH中, 否则接下来无法直接使用conda命令
不要忘记source一下
$ source ~/.bashrc
想要简要了解conda包管理的方法可以参考一下知乎上的这篇专栏, 概括得比较全面
进入base环境
$ conda info -e
$ source activate base
退出base环境只需
$ source deactivate
base环境是conda包管理的基础环境,还可以创建其他环境,这个环境的python版本取决于你安装的是Miniconda2 还是 Miniconda3. 需要指出的是:Miniconda 2也可以创建新的python3环境,只需要在创建新环境时指定python的版本即可。
为了方便起见,接下来笔者就直接用这个base环境管理RTTOV的GUI环境搭建了, 环境中已经有的python库包可以用以下命令查看
$ conda list
可以看到 pip/wheel 等一些基础库包已经预先安装好了
3.2 F2PY
F2PY 的官网:
如果之后要配置GUI环境,RTTOV编译时必须要依赖F2PY编译
F2PY 目前是python著名的科学计算包 numpy 的一个模块, 全称为Fortran to Python interface generator,也就是一种造轮子的工具:把Fortran写成的代码编译成可供python调用的动态链接库, 弥补python的矩阵运算效率低下的缺陷。类似的还有Cython, 有兴趣的读者可以了解下。
具体的安装方法如下:
首先安装numpy, 注意要先进入base环境
$ conda install numpy
现在可以测试以下f2py安装得是否正确
可以参照一篇文章进行测试:
有一点要注意, 因为事实上F2PY是一种编译工具, 所以之前配置NETCDF时配置过的 CPPFLAGS LDFLAGS 务必要去掉, 否则测试编译时的依赖库会报错
可以用echo查看环境变量, 如果不为空设置为空
$ echo $CPPFLAGS
$ echo $LDFLAGS
测试成功,F2PY就成功安装了
好的, 接下来,我们先安装RTTOV, 最后配置GUI
四 RTTOV的编译安装
RTTOV解压后没有顶层文件夹,大家注意一下,先建一个文件夹放置解压后的内容
$ mkdir rttov12
$ tar -zxvf rttov122.tar.gz -C rttov12/
$ sudo mv rttov12/ /usr/local/
我们来看一下users-guide里对编译安装的介绍:
重点关注以下几点:
- RTTOV编译有两种方式,一种是依靠build文件夹下的脚本文件 /build/rttov_compile.sh 进行编译,另外一种方式是根据 src/ 目录下的Makefile手动编译,如果是对Makefile不熟悉的小白建议是使用前者
- RTTOV支持好多种fortran编译器:要在脚本的ARCH参数中声明,支持的 Fortran 编译器有 gfortran ifortran pgf90 NAG 等, 具体可以在 build/arch 中查看
- OpenMP支持的编译器编译出的二进制可执行文件可以有多线程执行功能, 可以大大加快计算效率
- 部分可选功能:
读取HDF5 系数文件需要HDF5库
发射率/双向反射率地图支持需要HDF5库
python GUI 需要 HDF5库
python wrapper / RTTOV GUI 需要 f2py
HTFRTC 需要 NetCDF v4 - 编译前必须根据文件中的注释修改build/Makefile.local文件指定外部依赖库地址,否则编译脚本无法检测到外部依赖库的位置
- 如果编译要依赖HDF5库,编译HDF5库时必须打开Fortran语言,这在上一期已经提到了
OK,了解之后开始操作吧
4.1 修改 build/Makefile.local
$ vim build/Makefile.local
主要修改HDF5块和NETCDF块以下内容
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
实质上是指明库的依赖关系, 笔者的NETCDF 版本是4.4, 因此选择 4.2 and later 进行注释
4.2 编译 RTTOV
修改完成后,按照说明用脚本执行编译, 注意脚本要在src/目录下执行
$ cd src/
$ ../build/rttov_compile.sh
确认配置后执行脚本即可
4.3 测试 RTTOV
编译完成后,我们可以使用RTTOV自带的测试模块测试一下RTTOV是否正确地安装了
看一下users-quick-start.pdf中的描述:
测试
$ cd rttov_test/
$ ./test_rttov12.sh ARCH=gfortran
测试结果一切正常,就可以说RTTOV的本体已经安装成功了
这个测试的结果保存在目录 rttov_test/test_rttov12.1.gfortran/下,有兴趣的读者可以先大致看看模拟结果
好, 下一步就是配置GUI了
五. GUI环境的配置
5.1 GUI依赖包安装
GUI环境的配置主要参考官方文档:rttov_gui_12.pdf
主要要关注以下几点:
- RTTOV12 gui 目前只支持 python2 环境
- conda 搭建 GUI python 环境更为方便, 不推荐直接用pip 搭建环境 , 否则要在 rttov_gui.env 中修改很多不明就里的环境变量, 不建议初学者这么做
- 主要要装以下几个与科学计算和图形界面有关的python库:
wxpython/numpy/matplotlib/h5py
剩下注意事项装完依赖库以后再说
$ conda install scipy matplotlib h5py wxpython
装完以后用 conda list 命令查看以下包版本发现有问题
文档中要求
wxpython==2.9.5||3.0.0
h5py>=2.0
其中 wxpython 版本过高,需要降级
$ conda install wxpython=3.0.0
降级后符合要求
5.2 修改 gui/rttov_gui.env文件
vim gui/rttov_gui.env
因为我们使用conda环境搭建, 只需要修改以下内容
RTTOV_GUI_PREFIX=/usr/local/rttov12/gui # absolute path to the rttov/gui directory e.g. /home/user/rttov12/gui
接下来就可以测试GUI了, 别忘了启动你的Xming, 并设置好环境变量 DISPLAY的值,见环境搭建第一期
$ source gui/rttov_gui.env
$ cd gui
$ ./rttovgui
这时遇到了一点问题:显示wx库无法导入,因为缺少一个叫做libgtk-x11-2.0.so.0的动态链接库
参考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
再运行还有报错, 那就再装一个库
ImportError: libSM.so.6: cannot open shared object file: No such file or directory
$ sudo apt-get install -y python-qt4
重新尝试,启动成功
具体操作见GUI文档, 可以显示廓线、模拟结果等等
RTTOV 安装这个坑算是填上了, 接下来一期是ARTS数据库和RTTOV的接口介绍, 有空也会讲讲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