微波辐射传输PAMTRA1.0安装

参考PAMTRA官方文档:Installation — Pamtra 1.0.doc documentation

1. 本机配置

环境:Win 11 子系统WSL2(Ubuntu 22.04)
python: miniconda3 python3.8。由于采用conda安装的python3.8,故直接跳过官方文档的python安装

2. 编译pamtra

在pamtra文件目录,输入

$ make F2PY=f2py3

3. 安装pamtra

由于python采用conda环境,需修改python路径,编辑Makefile,替换

PYINSTDIR := lib/python

PYINSTDIR := /home/zoom/miniconda3/lib/python3.8/site-packages/

在命令行输入如下命令,进行安装

$ make pyinstall F2PY=f2py3 

4. 测试

import numpy as np 
import netCDF4
import matplotlib
import matplotlib.pyplot as plt
from IPython import embed
from glob import glob
import pyPamtra  # import pyPamtra
import warnings
warnings.filterwarnings("ignore")
matplotlib.rcParams['axes.unicode_minus'] = False
font = {'font.family': 'Times New Roman',
        'mathtext.fontset': 'stix',
        'font.size': 12}
matplotlib.rcParams.update(font)

pam = pyPamtra.pyPamtra()
descriptorFile = np.array([
        #['hydro_name' 'as_ratio' 'liq_ice' 'rho_ms' 'a_ms' 'b_ms' 'alpha_as' 'beta_as' 'moment_in' 'nbin' 'dist_name' 'p_1' 'p_2' 'p_3' 'p_4' 'd_1' 'd_2' 'scat_name' 'vel_size_mod' 'canting']
        ('cwc_q', -99.0,  1, -99.0,   -99.0, -99.0,  -99.0, -99.0, 3, 1, 'mono', -99.0, -99.0,   2.0,    1.0,   2.0e-6,   8.0e-5, 'disabled', 'khvorostyanov01_drops', -99.0),
        ('iwc_q', 1.0, -1, 700.0, -99.0,  -99.0,  -99.0,   -99.0, 3, 1, 'mono', -99.0, -99.0, 1.564, 0.8547, 1.744e-5, 9.369e-3, 'disabled',   'heymsfield10_particles',  -99.0),
        ('rwc_q', -99.0, 1, -99.0, -99.0, -99.0,  -99.0, -99.0, 3, 50, 'exp', 0.22, 2.2,   -99.0,    -99.0,  0.00012,   0.006, 'disabled', 'khvorostyanov01_drops',  -99.0),
        ('swc_q', 1.0, -1, -99.0, 0.069, 2.0, 0.3971,  1.88, 3, 50, 'exp', 2.0e06, 0.,  -99.0, -99.0, 2.0e-04,  0.02, 'disabled',   'heymsfield10_particles', -99.0),
        ('gwc_q', -99.,-1, -99.0, 169.6, 3.1, -99.0, -99.0, 3, 50, 'exp', -99.0, -99.0, 4.0e6, -99.0, 1.0e-10, 1.0e-2, 'disabled', 'khvorostyanov01_spheres', -99.0)],
        dtype=[('hydro_name', 'S15'), ('as_ratio', '<f8'), ('liq_ice', '<i8'), ('rho_ms', '<f8'), ('a_ms', '<f8'), ('b_ms', '<f8'), ('alpha_as', '<f8'), ('beta_as', '<f8'), ('moment_in', '<i8'), ('nbin', '<i8'), ('dist_name', 'S15'), ('p_1', '<f8'), ('p_2', '<f8'), ('p_3', '<f8'), ('p_4', '<f8'), ('d_1', '<f8'), ('d_2', '<f8'), ('scat_name', 'S20'), ('vel_size_mod', 'S30'), ('canting', '<f8')] 
        )
for hyd in descriptorFile: pam.df.addHydrometeor(hyd)
pam.readPamtraProfile('/home/zoom/pamtra/profile/example_input.lay')

# 廓线数据展示
fig = plt.figure(figsize=[12,4])
fig.add_axes([0.1,0.1,0.25,0.8])
plt.plot(pam.p['press'][0,0,:]/100.,pam.p['hgt'][0,0,:])
plt.ylabel('height [m]')
plt.xlabel('pressure [hPa]')
fig.add_axes([0.425,0.1,0.25,0.8])
plt.plot(pam.p['temp'][0,0,:],pam.p['hgt'][0,0,:])
plt.xlabel('temperature [K]')
fig.add_axes([0.75,0.1,0.25,0.8])
plt.plot(pam.p['relhum'][0,0,:],pam.p['hgt'][0,0,:])
plt.xlabel('rel. humidity [%]')
plt.show()

# 模拟10到200Ghz的天顶和地基微波辐射(被动)
freqs = np.arange(10.,200.,1.)
pam.nmlSet['active'] = False
pam.runParallelPamtra(freqs, pp_deltaX=1, pp_deltaY=1, pp_deltaF=10, pp_local_workers="auto")
print(pam.dimensions['tb'])

plt.figure()
plt.plot(freqs,pam.r["tb"][0,0,0,7,:,0],label='upwelling 52$^{\circ}$ V_pol')
plt.plot(freqs,pam.r["tb"][0,0,0,7,:,1],label='upwelling 52$^{\circ}$ H_pol')
plt.plot(freqs,pam.r["tb"][0,0,1,31,:].mean(axis=-1),label='downwelling zenith')
plt.xlabel('frequency [GHz]')
plt.ylabel('brightness temperature [K]')
plt.legend(loc=4)
plt.show()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容