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

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

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,其他启动配置选择缺省值即可。


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截图总结一下就是:

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
编译器打开

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

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

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


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
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库


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349