6S模型简介

1986年,法国Université des Sciences et Technologies de Lille(里尔科技大学)大气光学实验室Tanré等人为了简化大气辐射传输方程,开发了太阳光谱波段卫星信号模拟程序5S(SIMULATION OF THE SATELLITE SIGNAL IN THE SOLAR SPECTRUM),用来模拟地气系统中太阳辐射的传输过程并计算卫星入瞳处辐射亮度。1997年,Eric Vemote对5S进行了改进,发展到6S(SECOND SIMULATION OF THE SATELLITE SIGNAL IN THE SOLAR SPECTRUM),6S吸收了最新的散射计算方法,使太阳光谱波段的散射计算精度比5S有所提高。

这种模式是在假定无云大气的情况下,考虑了水汽、CO2、O3和O2的吸收、分子和气溶胶的散射以及非均一地面和双向反射率的问题。6S是对5S的改进,光谱积分的步长从5nm改进到2.5nm,同5S相比,它可以模拟机载观测、设置目标高程、解释BRDF作用和临近效应,增加了两种吸收气体的计算(CO、N2O)。采用SOS(successive order of scattering) 方法计算散射作用以提高精度。缺点是不能处理球形大气和limb(临边)观测。

6S 辐射传输模式(Second Simulation of a Satellite Signal in the Solar Spectrum)可用于多种辐射传输的计算。由于这些模式都是由Fortran语言编程而来,所以使用之前都需要根据源代码自行编译为可执行程序。对于Unix以及Linux系统编译相对简单,对于Windows系统略微复杂一些,需要构建Linux环境后进行编译。

6S模型下载

6SV2.1可在官网下载https://salsa.umd.edu/6spage.html
6SV1.1可以在https://py6s.readthedocs.io/en/latest/index.html下载。
注意:如果后期需要运用到Py6S(一个6S的Python调用库)进行编程,需要选择6SV1.1版本,因为2.1版本Py6S不支持。

编译

Py6s网站https://py6s.readthedocs.io/en/latest/installation.html介绍了多种平台的安装方式,其中Windows平台的安装采用的是GNUWin32搭建Linux环境。由于本人电脑已经使用了Cygwin64 Terminal构建了Linux环境,且比较顺手,因此本博文不同于网络上基于GNUWin32编译6S,而是采用Cygwin64 Terminal构建了Linux环境对6S进行编译。

关于Cygwin64 Terminal的安装,以及相应编译环境(Fortran)的安装,在以前的几篇博文中都有详细介绍。可以参考博文Cygwin及Wget安装 以及 Windows环境安装SBDART模式及测试中涉及的Cygwin64 Terminal以及组件的安装。构建好Linux环境后,接下来着手进行编译6S。

将下载的6S压缩包解压至自己的目录,如:
在这里插入图片描述

用文本文件打开6SV1.1文件夹中的Makefile文件,做如下两处修改:
修改1:将第8行的FC = g77 $(FFLAGS)修改为FC = gfortran -std=legacy -ffixed-line-length-none -ffpe-summary=none $(FFLAGS),因为默认采用的Fortran编译器是g77,本文安装的是gfortran编译器,因此需要进行修改为如下。
在这里插入图片描述

修改2:将35行的 -lm删去,并将sixsV1.1.exe添加exe,否则编译出来的可执行程序没有exe结尾,无法运行。
在这里插入图片描述

开始编译
步骤1:打开Cygwin64 Terminal,设置路径。$ cd /cygdrive/d/6SV1.1/6SV1.1 输入后回车。这里的路径是Makefile的路径,也就是解压后的6SV1.1文件的路径。
步骤2:$ make 回车,编译结束。
在这里插入图片描述
编译结束后,可以在D:\6SV1.1\6SV1.1路径中找到编译后的6SV1.1.exe程序。
在这里插入图片描述

测试

输入命令:./sixsV1.1.exe < ..\\Examples\\Example_In_1.txt回车,这里的Example_In_1.txt文件是自带的测试输入文件。这里的代码和Py6S中的略微不同。
也可以直接把sixsV1.1.exe程序拖拽到Cygwin64 Terminal,然后加上符号<再把输入文件拖拽进去。
在这里插入图片描述

在这里插入图片描述

6SV2.1编译

编译方法一模一样,就不进行赘述了,直接把修改好的Makefile文件提供如下
在这里插入图片描述

在这里插入图片描述

Py6S安装

本来不想安装的,平时用Python比较少。鉴于Py6S安装很简单,这里也简要记录一下安装过程。安装很简单,命令窗口输入:pip install Py6S命令就可以安装了。安装后,将编译的6SV1.1.exe所在路径添加至系统路径即可。提示:这个可执行程序编译后可以拷贝至其它路径,不影响。
下面截图本人用的VSCode搭建的Python环境,如果你的是其它 IDE也没有影响。关于用VScode配置Python开发环境可以参考本人以前的博文。
在这里插入图片描述
测试1

from Py6S import *
SixS.test()

在这里插入图片描述
输出

6S wrapper script by Robin Wilson
Using 6S located at D:\6SV1.1\run\sixsV1.1.exe
Running 6S using a set of test parameters
6sV version: 1.1
The results are:
Expected result: 619.158000
Actual result: 619.158000
#### Results agree, Py6S is working correctly

测试2

# Import the Py6S module
from Py6S import *
# Python2.7不需要转编码,3.x版本需要增加这句语句,否则出现utf-8错误
encoding='unicode_escape'
# Create a SixS object
s = SixS()
# Set the wavelength to 0.675um
s.wavelength = Wavelength(0.675)
# Set the aerosol profile to Maritime
s.aero_profile = AeroProfile.PredefinedType(AeroProfile.Maritime)
# Run the model
s.run()
# Print some outputs
print(s.outputs.pixel_reflectance, s.outputs.pixel_radiance, s.outputs.direct_solar_irradiance)
# Run the model across the VNIR wavelengths, and plot the result
wavelengths, results = SixSHelpers.Wavelengths.run_vnir(s, output_name='pixel_radiance')
SixSHelpers.Wavelengths.plot_wavelengths(wavelengths, results, "Pixel radiance ($W/m^2$)")

在这里插入图片描述

from Py6S import *
s = SixS()
# Set the ground reflectance to have some sort of BRDF, or the plot will
# be really boring! In this case, we're using the Roujean model 
s.ground_reflectance = GroundReflectance.HomogeneousRoujean(0.037, 0.0, 0.133) 
# Run the model and plot the results, varying the view angle (the other
# option is to vary the solar angle) and plotting the pixel reflectance. 
SixSHelpers.Angles.run_and_plot_360(s, 'view', 'pixel_reflectance')

在这里插入图片描述

总结

编译成功。对于6S的使用,接下来可能会进行总结。对于可执行程序6SV1.1.exe、6SV2.1.exe可以通过Python以及C++或者Matlab进行调用,从而实现重复繁琐的运算过程。希望这篇博文能够帮助到入门的你。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐