• python--由wrfouput的数据计算位势涡度,并插值到指定压力层


    近日,需要对wrf模式输出的数据进行计算位涡,并绘图分析。发现模式本身输出的数据中虽然不包含位涡,但wrf-python 提供了函数可以通过其他变量计算得到位涡。顺便记录一下计算的过程以及将位涡插值到压力层的过程

    位涡的计算主要通过wrf-python这个库中的wrf.pvo这个函数,官网链接如下:

    wrf-pvo

    wrf.pvo(ustag, vstag, theta, pres, msfu, msfv, msfm, cor, dx, dy, meta=True)

    计算位涡需要用到的变量包括:

    • 纬向风速U
    • 经向风速V
    • 位势温度T
    • 压力P
    • 几个其他参数:msfu、msfv、msfm、cor
    • x格点之间的距离:dx
    • y格点之间的距离:dy
      函数计算返回的就是位涡,单位为(puv)1 PVU = 1.0 x 10^(-6) m^2 s^(-1) K kg^(-1)

    比较了一下ncl中的计算函数wrf_pvo()中计算过程是需要将:位涡+300 的,但是wrf-python中的没有体现,按道理应该是以ncl中的为准。

    后来发现,通过getvar("T")得到的位温,它是perturbation potential temperature theta-t0,加上300才是 total potential temperature

    下面给出定义的函数,直接输入文件路径,即可得到计算得到的位涡:

    def cal_interp(file):
       ########################################################################
        ####通过函数计算位涡
       #######################################################################
        ncfile = Dataset(filelist[0])
        U = getvar(ncfile, "U")
        V = getvar(ncfile, "V")
        Theta = getvar(ncfile, "T")
        P = getvar(ncfile, "P")
        PB = getvar(ncfile, "PB")
        MSFU = getvar(ncfile, "MAPFAC_U")
        MSFV = getvar(ncfile, "MAPFAC_V")
        MSFM = getvar(ncfile, "MAPFAC_M")
        COR = getvar(ncfile, "F")
        DX = ncfile.DX
        DY = ncfile.DY
        THETA = Theta  + 300
        P     = P + PB
        pv = pvo(U, V, THETA, P, MSFU, MSFV, MSFM, COR, DX, DY, 0)
       ########################################################################
        ####下面将得到的位涡插值到等压面上,选取常用的27层压力层进行插值
       #######################################################################
        pre = getvar(ncfile, "pressure")
        level =np.array( [100,125,
                          150,175,200,
                          225,250,300,
                          350,400,450,
                          500,550,600,
                          650,700,750,
                          775,800,825,
                          850,875,900,
                          925,950,975,
                          1000]
                )
        level=level[::-1]
        
        plevs =level*units.hPa
        
        pv_interp = np.array(interplevel(pv, pre, plevs))
        
        potential_vorticity=pv_interp*units['K m**2 kg**-1 s**-1']
        return  potential_vorticity
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    使用函数:

    path=r'/wrfout/'
    filelist = glob.glob(path+'*')
    filelist.sort()
    pv = cal_interp(filelist[0])
    
    • 1
    • 2
    • 3
    • 4

    这样就得到一个文件的位涡啦

  • 相关阅读:
    Django 路由配置(二)
    Python 爬虫实战之爬拼多多商品并做数据分析
    对各种指针,数组的联立回顾复习(字符指针,指针数组,数组指针,函数指针,函数指针数组)
    Java日志框架Log4j 2详解
    onSaveInstanceState(),onRestoreInstanceState的掉用时机
    技术分享 | 多测试环境的动态伸缩实践
    记一次 .NET 某自动化采集软件 崩溃分析
    1136 A Delayed Palindrome
    QCN6274 VS QCN9274|QCN9074 VS QCN6122|Exploring the World of Wi-Fi 6E
    mac安装node失败
  • 原文地址:https://blog.csdn.net/weixin_44237337/article/details/126003050