RTTOV模式学习笔记:(四) RTTOV 变量和结构体
本笔记属于RTTOV辐射传输模式学习笔记专栏,包含以下文章:
© 2023-2030, Jiheng Hu. 本专栏内容禁止转载。理解和熟悉RTTOV的工程结构和变量含义是我们使用模型的第一步。RTTOV的示例和源码可以帮助我们快速搭建起自己的模拟项目。
RTTOV工程结构
这里介绍一下最重要的源码和示例文件,这是使用RTTOV的基础。
$ tree |
RTTOV变量及其结构
类型定义
模式的运行需要提前声明和创建一系列变量来作为输入量和输出量。这些变量和结构体在使用时需要先声明其类型,形式为:
! RTTOV variables/structures |
这些TYPE在rttov_types.F90
中被定义,我们特别看一下这些结构体的内容。
首先,nchanels
和nprof
分别为模拟的通道数和廓线条数,nchanprof = nchannels * nprof
指定了进行模拟的次数。
rttov_options RT方案、插值开关
!> RTTOV options structure |
其中:
rt_all
结构体设定了RT的算法大气和地表设定方案开关;(参见 TYPE rttov_opts_rt_all的定义);rt_mw
结构体设定了MWRT的算法选项,如算法版本,云参数化方案等(参见 TYPE rttov_opts_rt_mw的定义);默认的MW模拟时不考虑cloud liquid water的吸收作用的。fortran!> MW-only radiative transfer options
TYPE rttov_opts_rt_mw
......
LOGICAL(jplm) :: clw_data = .FALSE. !< Switch to enable input of cloud liquid water profile
INTEGER(jpim) :: clw_scheme = 2 !< MW CLW scheme: 1 => Liebe, 2 => Rosenkranz, 3 => TKC
......
END TYPEinterpolation
结构体定义了廓线插值的设定,包括插值开关opts%interpolation%addinterp = .True.
(参见rttov_opts_interp的定义);
rttov_chanprof 模拟量
TYPE rttov_chanprof |
包含两个一维integer数组变量:chan
,prof
,其size决定于nchanels*nprof,也就是说,对于每个通道和每条廓线,都要定义其channe index和profile index,注意,这里的变量存储的应该是RTTOV内置的卫星表对应的通道表中的通道序号,而不是实际的频率。
赋值示例:
nch = 0_jpim |
rttov_coefs 大气参数
coefs是用来读取和缓存RTTOV的核心–internal Optical depth coefs的变量类型。
!> @internal Optical depth coefs |
id_platform
,id_sat
,id_inst
确定了用来读取的快速辐射参数的文件名,这些ID见下一篇《RTTOV辐射传输模式实践:RTTOV V13.2 约定和方案》的表格介绍,当然了你可直接看文档。rttov_fast_coef
类型用来读取和缓存多种气体的快速辐射传输FAST RT系数廓线:
!> @internal Actual storage for gas fast coefficients |
所以,到目前为止,你应该明白了,RTTOV的全部模式中是不存在具体的频率信息作为输入的,对于不同仪器不同通道的模拟体现在上述coefs大气散射和消光参数的设定。这些参数文件可以在官网下载,其使用辐射传输和机器学习方法提前计算的大气光学参数数据集,所有的散射和吸收计算已经在应用先行数据集中进行了电磁学计算(介电常数计算,Mie, Reyleigh, Lieb等方案)。那么到RTTOV中,只需要将Coefs廓线和插值以后的大气水汽和水凝物廓线含量信息进行简单的计算(个人理解),计算出各层的optical depth等宏观辐射参数,再次插值回到user level
,最后再进行辐射值的逐层计算;个人理解,有很大问题,比如辐射传输的变量其实包含了很多因子,不是就简单的两三个光学参数就概括的。
INTEGER(jpim) :: nlevels ! number of levels(pres/absorber) same for all gases |
这里的Level指的是大气廓线层,对于绝大部分的大气辐射传输模式来说,所有气体的浓度、气压分层、风场、水汽湿度和对应气体的RT参数都是在Level层上;而Layer是Level的夹层,这样nlayer= nlevels-1, Layer一般是云水、云冰、雨、雪、霰等水凝物的分层。
打开rtcoef_rttov13/rttov13pred54L/rtcoef_fy3_4_mwri.dat
你会发现,最底层存储了三种气体的FASTEM 透射系数廓线 coef(ncoef, levels)
FAST_COEFFICIENTS |
rttov_profile 大气廓线
这里的profile指的是大气气体和水汽、温压风的大气廓线,用于晴空大气的微波辐射传输(当然了,本笔记只考虑被动微波模拟,所以理解会狭隘一些)。
结构体定义如下:
!> Atmospheric profiles on model pressure levels |
可以看出,这里不仅考虑了大气物理参数,还提供过了多种气体分子的浓度廓线。包括O3, CO2, NO2, CO, CH4和 SO2。并且考虑了云水/冰和气溶胶。注意,这里的设置兼顾了IR和VIS等波段的模拟,所以考虑的气体较多,实际上很多非极性分子对微波辐射传输不起作用。
这里的云水设置在MW模拟时用于计算云的的Absorption,而散射则由MW_SCAT modelue 负责(见下文):
!-------------------------------------------------------------------------- |
profile 结构体还包含了地表参数的输入,分别由rttov_skin
,rttov_s2m
子结构体来定义,包含的参数有:地表类型、水体盐度、土壤湿度、积雪分数、skin temperature; 2m 温压湿风和抽样浓度。
此外,profile还包含了必要的时间和经纬度变量。
对于profile的输入,example.fwd.F90
是通过读取给定文件的方式读取的,后面的章节我们会介绍到。
四个辐射参数类型
- rttov_emissivity emis_out:地表模式或atlas输出的Emissivity数据集,作为RTTOV大气辐射传输的地表背景输入。fortran
!> Input/output surface emissivities, declare as array of size nchanprof,
!! also used to specify per-channel specularity parameter for use with do_lambertian option
TYPE rttov_emissivity
REAL(jprb) :: emis_in = 0._jprb !< Input emissivity (0-1)
REAL(jprb) :: emis_out = 0._jprb !< Output emissivity, value used by RTTOV (0-1)
REAL(jprb) :: specularity = 0._jprb !< Mix of specular/Lambertian for do_lambertian option (0-1, 0=Lambertian/1=specular)
REAL(jprb) :: tskin_eff = 0._jprb !< Effective skin temperature per channel (if use_tskin_eff true)
END TYPE - rttov_reflectance微波段不使用,可以理解为1-emissivity;
- rttov_transmission 各层的透过率输出;
- rttov_radiance:天顶出射的模拟辐亮度及对应的亮温和BRFfortran
!> Output radiances and corresponding brightness temperatures and reflectances (BRFs)
!! Radiance unit: mW/m2/sr/cm-1; BT unit: K; BRFs are unitless.
!! Array sizes are (nchannels) or (nlayers,nchannels)
TYPE rttov_radiance
REAL(jprb), POINTER :: clear(:) => NULL() !< Clear sky radiance
REAL(jprb), POINTER :: total(:) => NULL() !< Cloudy radiance for given cloud
REAL(jprb), POINTER :: bt_clear(:) => NULL() !< Brightness temp equivalent to clear radiance
REAL(jprb), POINTER :: bt(:) => NULL() !< Brightness temp equivalent to total radiance
REAL(jprb), POINTER :: refl_clear(:) => NULL() !< Reflectance calculated from clear radiance
REAL(jprb), POINTER :: refl(:) => NULL() !< Reflectance calculated from total radiance
REAL(jprb), POINTER :: overcast(:,:) => NULL() !< Overcast radiance for opaque cloud at level bounding
!! bottom of each layer
REAL(jprb), POINTER :: cloudy(:) => NULL() !< 100% cloudy radiance for given cloud (simple cloud scheme)
!! or same as total (addclouds/addaerosl true)
......
END TYPE rttov_radiance
MW-SCAT 变量
除了上述的变量类型,RTTOV还包含用于MW-SCAT模块散射计算特有的变量。
rttov_scatt_coef hydrotable系数表
定义了用来缓存水凝物辐射传输系数的变量:
!> @internal RTTOV-SCATT coefs |
这里水凝物Hydrotable参数表考虑的FAST RT 参数包括消光系数
,单散反照率
和不对称因子
。熟悉辐射传输的同学应该知道,这是在一定的形状(如球形)假设和散射理论(Mie)计算下, 水凝物粒子的散射计算的结果。这些参数辅以一定的粒径谱假设(如Gamma分布)就可以进一步计算出光学厚度,散射系数等介质的单层光学系数。不对称因子则描述了散射项函数的不对称性,在二流近似的情形下决定了前向和后向散射强度的比值。
MW-SCATT Cloud/hydrometeor profile
MW-SCAT模块的水凝物廓线变量:
!> Additional atmospheric cloud/hydrometeor profile input for RTTOV-SCATT |
反演相关变量类型
(Baordo and Geer, 2016)反演方案实例中使用的中间变量类型,其思想是通过才cfrac将dirct和和SCAT的模拟进行加权,以实现对云天的散射和吸收效应的考量。
!> Output variables from RTTOV-SCATT enabling emissivity retrievals |
变量分配
从src/test/exmaple_rttovscatt_fwd.F90
和src/test/example_fwd.F90
两个正向模拟示例来看,上述变量的分配(allocate)任务交给了rttov_alloc_direct.F90
的同名函数来完成的: Allocate/deallocate any/all arrays and structures for RTTOV or RTTOV-SCATT direct models
。并且对于大部分变量结构的输入是可选的(optional)。
小结
本节对RTTOV direct和mw-scat两个模块涉及到的主要变量类型和结构体进行了介绍,穿插了自己的理解。
后面的章节会分别对于上述的两种module进行介绍,主要着眼与应用,不会有太多源码的解读,
再次声明,本系列笔记是个人理解,希望在记录学习过程的同时能抛砖引玉,共同进步。
参考:1. 源码;2. user guide.