HAPI使用方法总结(HITRAN数据库,HITEMP数据库)

之前我计算高温气体光谱特性是自己写的算法部分,查了好多文献,最后计算的结果也还算比较满意。后来我才发现原来HITRAN官网上已经提供了HAPI,只需要调用HAPI就可以直接计算气体的光谱特性,而无需自己写具体的光谱特性计算方法。

HAPI (HITRAN Application Programming Interface) 是HITRAN online网站(https://hitran.org/)提供的python接口,可以实现远程访问HITRAN数据库,并可以逐行下载、过滤和处理分子和原子上的光谱数据的功能。

使用方法:

1. 直接从官网上下载hapi.py

2. 导入hapi模块

from hapi import *

3. 建立文件夹,并指定该文件夹

首先,建立文件夹用于本地数据库的存放。例如,文件夹名为data_hitemp。

然后使用下列语句选中该文件夹。

db_begin('data_hitemp')

每次启动Python项目时,都必须显式指定数据库文件夹的名称。

4.  数据的获取

4.1 HITRAN数据库的获取:远程连接HITRAN网站下载

通过fetch()可以从HITRAN online自动下载HITRAN数据库的谱线数据。

fetch(TableName, M, I, numin, numax, ParameterGroups=[], Parameters=[]),其中TableName表示本地存放的文件名;M表示HITRAN上分子的编号,如H2O的编号是1,CO2的编号是2,N2O的编号是4,等等;I表示HITRAN上同位素的编号;numin表示波数下限;numax表示波数上限;例如:

fetch('COC', 2, 1, 2000, 2100)

上面代码表示将波数2000-2100(cm-1)的CO2的光谱数据存放在名为“COC”的文件中。此时可以在data_hitemp文件夹中看到 一个COC.data和一个COC.header文件。

4.2 HITEMP数据库的获取:直接下载HITEMP数据库

另一种方法是直接下载好HITEMP数据库中的光谱数据,然后将其手动存放到data_hitemp文件夹中。从HITEMP数据库下载的数据格式是.par。

 在使用下列语句之后

db_begin('data_hitemp')

可以看到,data_hitemp文件夹中的数据格式出现了.header

5. 计算光谱特性

根据气体的温度,压力,光路长度,可以计算得到如下光谱特性:a)吸收系数(Absorption coefficient);b)光谱吸收率(Absorption spectrum);c)光谱透过率(Transmittance spectrum);d)光谱辐射亮度(Radiance spectrum)。HAPI提供的线形(line shape)包括:Gaussian (Doppler)线形,Lorentzian线形,Voigt线形,Rautian线形,Speed-dependent Voigt线形,speed-dependent Rautian线形以及Hartmann-Tran线形。

5.1 吸收系数

计算吸收系数可以使用下列函数,分别代表不同的线形:

absorptionCoefficient_HT
absorptionCoefficient_Voigt
absorptionCoefficient_Lorentz
absorptionCoefficient_Doppler
absorptionCoefficient_SDVoigt

下面以洛伦兹线形为例计算吸收系数:

nu,coef = absorptionCoefficient_Lorentz(SourceTables='02_2000-2125_HITEMP2010',HITRAN_units=False,Diluent={'air':1.0})
plot(nu,coef)

 其中,nu代表中心波数;coef代表吸收系数;Diluent表示气体混合物的比例,Diluent={'self':A, 'air':B, 'CO2':C, ...},且满足A+B+C+...=1。其中self用于计算自增宽半宽,air用于计算空气增宽半宽。

数据库里只有空气增宽半宽和自增宽半宽,所以其他组分除了浓度外物质种类没有影响。
#若CO2含量为100%,则设置'self':1,另一个参数设置air=0
#若CO2含量为1%,则设置'self'=0.01,另一个设置为'air'=0.99

此时需要增加下面的代码

coef *= xco2 #xco2代表CO2的含量

#若为纯空气环境,设置'air'=1,即可

HITRAN_units: 如果为True,单位 cm^2/molec ;如果为False, 单位cm-1 。 为了后续计算其他光谱特性如光谱吸收系数,光谱透过率,光谱辐射亮度,必须将 HITRAN_units设为 False。

下左图 是HITRAN_units=True,下右图 是HITRAN_units=False.

 

完整的absorptionCoefficient_Lorentz参数如下:

absorptionCoefficient_Lorentz(SourceTables, Environment={'T':296.,'p':1.}, OmegaRange, OmegaStep, OmegaWing, IntensityThreshold, OmegaWingHW, GammaL='gamma_air', HITRAN_units, LineShift, File, Format, OmegaGrid, WavenumberRange, WavenumberStep, WavenumberWing, WavenumberWingHW, WavenumberGrid, Diluent={}, EnvDependences)

Environment={'T':296,'p':1},默认温度T=296K,p=1atm,可根据实际温度和压力进行设置;

5.2 光谱吸收率,光谱透过率,光谱辐射亮度

光谱吸收率,光谱透过率,光谱辐射亮度的计算必须设置传输路径长度,默认的长度是1m。光谱吸收率和光谱透过率的默认参数是 Environment={'l': 100.0},路径长度单位是cm。

光谱辐射亮度的默认参数是Environment={'l': 100.0, 'T': 296.0},除了路径长度外,还有温度,这里的温度设置必须与之前在absorptionCoefficient设置的温度保持一致。

nu,absorp = absorptionSpectrum(nu,coef)
nu,trans = transmittanceSpectrum(nu,coef)
nu,radi = radianceSpectrum(nu,coef)

需要注意的是,HAPI用户手册中出现了笔误,默认参数是Environment={'l': 100.0, 'T': 296.0}的应该为光谱辐射亮度而非光谱透过率。

计算结果如下:

光谱吸收率: 

 

光谱透过率: 

 

光谱辐射亮度:单位是W/cm^2/sr/cm^(-1) 

 

希望能帮到需要的人,由于我接触HAPI的时间也很短,很多地方的理解可能不到位,希望能和大家交流,促进我们共同进步。

更多关于HAPI的使用方法可以下载用户使用手册。

参考文章:

方巍HAPI——HITRAN数据库python接口 - 知乎 (zhihu.com)

评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值