之前我計算高溫氣體光譜特性是自己寫的演算法部分,查了好多文獻,最后計算的結果也還算比較滿意,后來我才發現原來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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/296843.html
標籤:其他
