RTTOV12.2 (Radiative Transfer for TOVS) 研究环境搭建(一)on WSL Ubuntu LTS 18.04

RTTOV12.2 (Radiative Transfer for TOVS) 研究环境搭建(一)on WSL Ubuntu LTS 18.04_第1张图片
RTTOV依赖库关系

前言

RTTOV v12 官网 https://www.nwpsaf.eu/site/software/rttov/rttov-v12/

RTTOV 是EUMETSAT (European Organisation for the Exploitation of Meteorological Satellites)旗下的NWP/SAF (Numerical Weather Prediction / Satellite Application Facilities)开发的一款快速辐射传输模式软件包,引用官网Overview的原话:

RTTOV (Radiative Transfer for TOVS) is a very fast radiative transfer model for passive visible, infrared and microwave downward-viewing satellite radiometers, spectrometers and interferometers. It is a FORTRAN 90 code for simulating satellite radiances, designed to be incorporated within user applications.

RTTOV 目前广泛应用于各类数值的同化模块, 主要用于被动探测的卫星的可见光、红外、微波通道的卫星数据的同化。

笔者安装RTTOV主要是为了了解RTTOV-SCATT模块对微波通道的水凝物(包括冰晶,云滴, 液态和固态降水粒子)相关的辐射传输特性的模拟。接下来几篇文章会介绍一个粒子光学特性数据库——ARTS, 主要是ARTS数据库和RTTOV-SCATT的接口。

RTTOV目前主要支持类Unix系统, 目前网上几乎没有现成的预编译版本,安装必须要手动编译,由于其安装依赖的库包关系相对比较复杂, 加之笔者先前对于Linux系统不够熟悉,自然踩了不少坑。因此特意记录下来以备忘。

本文主要参考一篇安装WRF的文章:https://www.jianshu.com/p/b0d1a39b0c5c

废话少说,开始动手吧。


一. 基本环境配置

1.1 系统环境

这一部分是面向WSL小白的,大佬可以直接忽略

笔者使用的是自己的win10微机上通过UWP应用商店下载的最新的Ubuntu长期维护版本 Ubuntu LTS 18.04。强烈推荐安装最新的LTS 18.04, 因为这个WSL发行版本解决了之前的应用商店版本中终端滚动距离过短,无法查看之前的记录的问题。代码高亮的功能也做了优化,使用体验有明显的提升。

笔者的主系统和子系统之间使用Xmanager旗下的Xshell/Xftp进行文件通信,Xming显示图形窗口,配置方案如下:

1.1.1 Ubuntu 下搭建 SSH 服务器

重新安装openssh-server
$ sudo apt-get remove openssh-server
$ sudo apt-get install openssh-server
修改ssh server 配置
$ sudo vim /etc/ssh/sshd_config
修改一下ssh配置文件
Port 2222  #默认的是22,但是windows有自己的ssh服务,也是监听的22端口,所以这里要改一下
UsePrivilegeSeparation no
PasswordAuthentication yes
AllowUsers youusername # 这里改成你登陆WSL用的

配置完成后每次需要使用Xshell或Xftp连接子系统前,在终端中输入:

$ sudo service ssh --full-restart

需要注意,重启openssh-server后配置文件方才生效,现在就可以通过Xftp连接本机的子系统服务端口127.0.0.1:2222. 如果Xftp/Xshell连接失败,很大可能是因为你的Xmanager版本太低,不支持最新的openssh-server的加密协议,需要下载最新的openssh-server

RTTOV12.2 (Radiative Transfer for TOVS) 研究环境搭建(一)on WSL Ubuntu LTS 18.04_第2张图片
Xftp成功建立连接

如果觉得每次启动子系统时都要输入一次open-ssh 启动命令比较麻烦,可以把openssh的启动命令加入 ~/.bashrc 文件

1.1.1 WSL 搭建图形界面显示窗口Xming

之所以要搭建图形界面显示窗口, 是因为RTTOV12.2有一个依赖 wxpython 的 GUI,可以实时可视化辐射传输模式的结果(当然你可以选择不依赖python GUI编译)WSL目前只支持字符界面,如果想要显示图形界面,目前最简单的办法就是配置一下Xming了。

Xming的配置相对比较简单
Xming for windows 官网:https://sourceforge.net/projects/xming/

下载安装成功后, 每次启动时设置一下Xming 的 Display Number,其他启动配置选择缺省值即可。


RTTOV12.2 (Radiative Transfer for TOVS) 研究环境搭建(一)on WSL Ubuntu LTS 18.04_第3张图片
Xming.PNG

笔者这里Display Number没有选择缺省值,是因为Xmanager Suite有一个自带的阉割版图形显示工具Xserver的缺省Display Number就是0,如果把Xming的缺省值也设置为0,两者可能会引起冲突。

接下来要配置一下子系统的Display number:

$ vim ~/.bashrc

在末尾加入一行:

export DISPLAY=:3 # 把这个数字设置为之前给Xming设置的Display number即可

使之生效

$ source  ~/.bashrc

OK,现在所有子系统中的GUI都会映射到主系统的Xming上显示。
如果觉得不放心可以下一个Grads运行一下试试看

$ sudo apt-get install grads
$ grads

1.2 编译环境

现在我们关注一下官网上这个 Requests for RTTOV12

Requirements for RTTOV v12

  • Computer running Linux/Unix or Apple Mac OS X
  • Fortran 90 compiler (e.g. gfortran)
  • gzip compression utility
  • GNU make utility
  • 500+ MB free disk space required for full install (including bundled coefficients and test and reference data). Additional space is required for larger coefficient files that are not included with the RTTOV package.
  • RTTOV can be compiled and run without any external dependencies, but some features require external libraries or software.
  • Optionally RTTOV can be compiled against the HDF5 library (v1.8.8 or later) which enables reading of HDF5-format coefficients, emissivity/BRDF atlases and use of the RTTOV GUI.
  • To use the RTTOV GUI and/or Python wrapper you must have f2py (part of NumPy) installed.
  • To run the HTFRTC fast model through RTTOV requires the NetCDF v4 library.

现在我们先重点关注第二条和第四条,这两条关系到编译环境

*. Fortran 90 compiler (e.g. gfortran)
*. GNU make utility

首先,我们要明白,RTTOV是一款快速传输模式,也就是说,这个软件包并不是走传统的物理模型模拟光学厚度的计算方法,整个软件的核心是coefficient文件,也就是通过机器学习生成的回归架构的因子和回归系数(当然学习的样本是通过物理模型计算得到的)在快速传输模式中不需要引入物理模型,只需要用现成的回归模型提取大气廓线的因子,就可以直接通过矩阵运算得到大气的光学厚度。这样的大规模矩阵运算就体现出Fortran的优势了。因此为了保证大规模矩阵运算的效率主要的源码是由Fortran编写的,当然RTTOV也为不熟悉Fortran的使用者提供了python和C++的wrapper。 笔者在之后的文章中也许会提到。

因此,我们下一步编译RTTOV时需要 fortran语言, C语言, C++语言的编译器
当前Linux平台下的主流的Fortran, C++编译器套件有GCC(GNU Compiler Collection, 包括gcc, gfortran)和 Intel的 ICFC(Intel C++ & Fortran compiler, 包括 icc, ifortran).两者相比各有优缺点:

  • 首先GCC是为GNU系统开发的自由软件, 而ICFC是要收费的, 但是学生的邮箱可以申请到学生版的 Parallel Studio XE(至少笔者的浙大邮箱可以)
    学生认证URL:https://software.intel.com/en-us/parallel-studio-xe/choose-download#students
  • 然而,值得注意的是GNU作为一款自由软件,对于Fortran编译的优化做得不是非常到位, 相比之下 ICFC 的 ifortran 对 fortran 对自家芯片做过指令级的优化,在运行速度上比gfortran要快上很多。尤其在用Intel自家芯片的机器上,在对运行速度有要求的情况下,推荐可以试试ifortran; 至于icc, 口碑不是非常好, 各方褒贬不一,可以参考一下知乎上的讨论。
  • 不过笔者目前知识用RTTOV做一些初步的研究,对运行速度要求不高,就偷个懒简单安装gcc和gfortran吧 ==.. (其实GCC包括了C、C++、fortran、Objective C、java、ada、go 语言的前端,再装一个gfortran和g++只是一个用户接口而已)

另外不要忘记安装make工具, 它的作用是确定编译时各个对象文件的依赖关系,在使用RTTOV时编译自己的Fortran程序也需要用到Make工具,以确定和依赖的RTTOV库、HDF5库、NETCDF库的依赖关系。

$ sudo apt-get install gcc
$ sudo apt-get install gfortran
$ sudo apt-get install g++
$ sudo apt-get install make

二. 依赖库的编译和安装

我们来看一下 User-guide.pdf 文档中关于安装依赖库关系的描述

  1. UNIX or Linux operating system
  2. Fortran 90 compiler
  3. Perl v5.6 or later
  4. make utilities
  5. gzip and gunzip
  6. About 100 Mbytes of free disk space is the minimum required (although more is necessary for hyperspectral IR sounder coefficient files and atlas data files).
  7. Memory requirements are strongly dependent on the instrument being simulated and the kind of simulations being performed: the simplest clear-sky direct model simulations require of the order of 10Mbytes.
  8. It is recommended to compile RTTOV against the HDF5 library (v1.8.8 or higher) so that all RTTOV features are available (see section 5.2 below).
  9. The Python interface and the RTTOV GUI require that f2py is installed. The GUI has additional requirements: see the GUI user guide in the docs/ directory.
  10. HTFRTC requires RTTOV to be compiled against the NetCDF v4 library.
  • 推荐编译时依赖HDF5库,这样可以激活RTTOV读取高光谱红外通道系数文件的.H5文件功能,否则只能读取ASCII系数文件,缺点是比较慢,系数文件会比较大
  • 推荐编译时依赖NETCDF库, 这样可以激活RTTOV的HTFRTC功能
  • 有条件可以安装 f2py, 并在Miniconda环境下配置图形界面的python环境, 需要安装几个科学计算和绘图有关的python库,这样可以激活RTTOV的GUI功能

我这里用一张PPT截图总结一下就是:

RTTOV12.2 (Radiative Transfer for TOVS) 研究环境搭建(一)on WSL Ubuntu LTS 18.04_第4张图片
2018-08-30.png

放出这几个库的下载连接

zlib-1.2.11: http://www.zlib.net/

hdf5-1.8.20: https://support.hdfgroup.org/HDF5/

netcdf-4.6.1(C/fortran): http://www.unidata.ucar.edu/downloads/netcdf/index.jsp

创建一个目录用来放压缩包和编译中的文件 /usr/package, 把下载的五个压缩包(包括RTTOV12.2)上传到该目录下:

$ sudo mkdir /usr/packge/
$ cd /usr/package 
$ sudo chmod o+w ../package # 放开这个文件夹的写权限, 方便接下来编译操作

笔者这里是

  1. zlib-1.2.11.tar.gz
  2. hdf5-1.8.20.tar.gz
  3. netcdf-4.6.1.tar.gz
  4. netcdf-fortran-4.4.4.tar.gz
  5. rttov122.tar.gz

好了,了解依赖库之间的拓扑结构后,我们可以开始安装了:

2.1 zlib-1.2.11

$ tar -zxvf zlib-1.2.11.tar.gz
$ cd -zxvf zlib-1.2.11/

--prefix 配置安装路径,笔者安装在 /usr/local/zlib下

$ ./configure --prefix=/usr/local/zlib
$ make
$ make check
$ sudo make install

将编译好的二进制动态链接库添加到环境变量中列表中

$ vim ~/.bashrc 

加入一行:

$ export LD_LIBRARY_PATH=/usr/local/zlib/lib:$LD_LIBRARY_PATH

每次改动 ~/.bashrc不要忘记 source 使之生效

再安装一个附属工具zlib*

$ sudo apt-get install zlib*

2.2 hdf5-1.8.20

$ tar -zxvf hdf5-1.8.20.tar.gz
$ cd hdf5-1.8.20/

需要几点特别注意:

  • hdf5库需要依赖zlib库编译
  • hdf5库要把C++和fortran的编译器都打开,否则编译出来的库只有c库,
    之后安装NETCDF和RTTOV会报错显示动态链接库缺失!!
$ ./configure --with-zlib=/usr/local/zlib --prefix=/usr/local/hdf5 FC=gfortran CC=gcc --enable-fortran --enable-cxx
$ make
$ make check
$ sudo make install
RTTOV12.2 (Radiative Transfer for TOVS) 研究环境搭建(一)on WSL Ubuntu LTS 18.04_第5张图片
编译器打开

再强调一遍!务必确保configure结果显示 g++ 和 gfortran 编译器都被打开后再make

这个库编译时间会有点长...

编译完成后检查一下fortran cpp的动态链接库是不是都装上了


RTTOV12.2 (Radiative Transfer for TOVS) 研究环境搭建(一)on WSL Ubuntu LTS 18.04_第6张图片
CPP/Fortran/C

HDF5库make check时的确会出现很多warning, 相关论坛上有有关讨论,开发者也只给出了一些模棱两可的答复,一般认为不予理睬没有什么问题。

配置环境变量 注意第二、三两行是配置NETCDF的编译依赖,编译完 NETCDF后最好注释掉,以后编译有需要依赖时再加上

$ gedit ~/.bashrc

$ export CPPFLAGS=-I/usr/local/hdf5/include # 编译完NETCDF后注释掉 
$ export LDFLAGS=-L/usr/local/hdf5/lib # 编译完NETCDF后注释掉
$ export LD_LIBRARY_PATH=/usr/local/hdf5/lib 

$ source ~/.bashrc

2.3 netcdf-4.6.1 C

先装一下一个小工具m4

$ sudo apt-get install m4
$ tar -zxvf netcdf-4.6.1.tar.gz
$ cd netcdf-4.6.1/

--enable-netcdf-4 表示依赖HDF5和zlib库编译

$ ./configure --prefix=/usr/local/NETCDF --enable-netcdf-4
$ make 
$ make check
$ sudo make install
RTTOV12.2 (Radiative Transfer for TOVS) 研究环境搭建(一)on WSL Ubuntu LTS 18.04_第7张图片
netcdf c 配置.PNG

make 时可能会提示错误:

fatal error: curl/curl.h: No such file or directory

这时候要用apt命令安装一个curl库

$ sudo apt-get install libcurl4-openssl-dev

参考 stackoverflow : https://stackoverflow.com/questions/11471690/curl-h-no-such-file-or-directory

Makecheck 时有几个需要网络资源的make check会无法通过,参考了论坛里的一些讨论,属于网络和远程资源的问题,可以忽略

安装成功后添加环境变量

$ gedit ~/.bashrc

$ export CPPFLAGS=-I/usr/local/NETCDF/include #编译完NETCDF fortran后注释掉
$ export LDFLAGS=-L/usr/local/NETCDF/lib #编译完NETCDF fortran后注释掉
$ export LD_LIBRARY_PATH=/usr/local/hdf5/lib 

$ source ~/.bashrc

2.4 netcdf-4.6.1 Fortran

$ tar -zxvf netcdf-fortran-4.4.4.tar.gz
$ cd netcdf-fortran-4.4.4/

FC指定你使用的Fortran编译器

$ $ ./configure --prefix=/usr/local/NETCDF FC=gfortran
$ make 
$ make check
$ sudo make install

安装完后确认一下 目标库中有C库和Fortran库


RTTOV12.2 (Radiative Transfer for TOVS) 研究环境搭建(一)on WSL Ubuntu LTS 18.04_第8张图片
NETCDF C&Fortran.PNG

因为Fortran的库的位置和C库位置一样,就不需要重复再添加环境变量了


这一期讲完了基本环境配置和依赖库的安装,下一期讲RTTOV的安装和GUI的配置

Reference:

https://blog.csdn.net/raoweijian/article/details/65661302
https://www.jianshu.com/p/b0d1a39b0c5c
http://bbs.06climate.com/forum.php?mod=viewthread&tid=44072
https://www.unidata.ucar.edu/support/help/MailArchives/netcdf/msg12453.html
https://bbs.csdn.net/topics/392256783

第二期已更新
RTTOV12.2 (Radiative Transfer for TOVS) 研究环境搭建(二)on WSL Ubuntu LTS 18.04

你可能感兴趣的:(RTTOV12.2 (Radiative Transfer for TOVS) 研究环境搭建(一)on WSL Ubuntu LTS 18.04)