使用python 计算位涡水平平流项

使用数据:potential vorticity、水平风场分量:U、V
数据来源:

  • ERA5
  • hourly :一天四次
  • 空间分辨率:0.5x0.5
  • 时间范围:2004-06
    使用的函数:
  • metpy.calc.advection(scalar, u=None, v=None, w=None, *, dx=None, dy=None, dz=None, x_dim=- 1, y_dim=- 2, vertical_dim=- 3)
  • metpy.calc.advection官方介绍
    与我之前的一个计算水汽散度的帖子的方法差不多:使用metpy计算水汽散度

编程需要注意的点:

  • metpy.calc.advection()中传入的变量应该是二维的(lonxlat),而我们下载的位涡数据是四维的(time x level x lat x lon),所以需要做循环计算
  • 使用metpy时需要给予各项附上响应的单位,防止计算的量纲出错
  • metpy.calc.advection()中的x_dim=- 1, y_dim=- 2,分别对应了你的经度和纬度的维度,默认是经度为最后一维,纬度是倒数第二维
  • 虽然metpy.calc.advection()提供了三个方向的计算,但是第三维的计算不太完善,因此本文以下只计算水平项
  • 需要计算出dx、dy,也就是网格点的实际距离,这里metpy也给出了对应的函数:mpcalc.lat_lon_grid_deltas

代码如下:

import xarray as xr
import numpy as np
from metpy.units import units
import metpy.constants as constants
import metpy.calc as mpcalc
#########################文件路径##################################################
path=r'D:\PV\download_pv_hourly.nc'path1=r'D:\PV\uv_0.5x0.5_2004-06.nc'
#########################读取pv############################################################
f_pv = xr.open_dataset(path)
pv   = f_pv.pv.sel(time=slice('2004-06-23','2004-06-30')).sortby('latitude')
pv_units=pv.unitslev  = pv.levelpressure = np.array(lev).reshape((1,37,1,1))*units.hPa
dpdl= np.gradient( pressure,axis=1)
##########################读取水平风场#########################################################
f = xr.open_dataset(path1).sortby('latitude').sel(time=slice('2004-06-23','2004-06-30'))f = f.transpose('time','level','latitude','longitude')
f_u = f.u
f_v = f.vlat =  f_u.latitude
lon =  f_u.longitude
time = f_u.timedx, dy = mpcalc.lat_lon_grid_deltas(lon, lat)pvadv=np.zeros((32,37,361,720))for i in range(32):for j in range(37):print(i,j)  pvadv[i,j,:,:] = mpcalc.advection(pv[i,j,:,:],u=f_u[i,j,:,:],v=f_v[i,j,:,:],dx=dx,dy=dy,x_dim=-1,y_dim=-2)pvadv=pvadv*units['K m**2 kg**-1 s**-1']/units.s
##########################计算平流垂向#####################################
# vertical
p_v=pv*units['K m**2 kg**-1 s**-1']
dpvdl=np.gradient( p_v,axis=1)pvvdv = f_w*(units.Pa/units.s)*(dpvdl/dpdl)
#########################保存数据#############################################################
pvadv_nc=xr.Dataset({'pvadv':(('time','level','lat','lon'),pvadv)},coords = {'time':time,'level':lev.data,'lat':lat.data,'lon':lon.data,})
pvadv_nc.attrs['long_name']='potential vorticity advection'
pvadv_nc.to_netcdf('pvadv.nc')
###########################保存数据##########################################################
pvvdv_nc=xr.Dataset({'pvadv':(('time','level','lat','lon'),pvvdv.data)},coords = {'time':time,'level':lev.data,'lat':lat.data,'lon':lon.data,})
pvvdv_nc.attrs['long_name']='potential vorticity vertical advection'
pvvdv_nc.to_netcdf(r'pvvdv.nc')

Tips:

  • 一般的计算结果显示的量级为10的-5次方到10的-8次方

  • 虽然ERA5提供了位涡的数据,但是还是自己根据位涡的定义重新计算以下对比验证,如研究中高纬区域可能存在一些问题

                                 一个努力学习python的ocean er水平有限,欢迎指正!!!欢迎评论、收藏、点赞、转发、关注。关注我不后悔,记录学习进步的过程~~
    

python 基于metpy计算位涡平流项(水平)相关推荐

  1. python--测试使用不同的方式计算位涡平流项的差异

    python计算位涡平流项 主要为了测试计算位涡平流项的准确性,这里使用了两种方法来计算位涡的平流项. 方法1:使用metpy函数 方法2:编写代码自己计算 一般使用metpy函数的计算结果,已经是等 ...

  2. Python 基于积分原理计算定积分并可视化数值积分计算的动画过程

    文章目录 一.问题描述 二.代码实现 1.  并基于积分原理计算  ∫ 0 1 x 3 + 1  的值  1. \text { 并基于积分原理计算 } \int_{0}^{1} x^{3}+1 \te ...

  3. 高斯消元法python编程_Python基于高斯消元法计算线性方程组示例

    本文实例讲述了Python基于高斯消元法计算线性方程组.分享给大家供大家参考,具体如下: #!/usr/bin/env python # coding=utf-8 # 以上的信息随自己的需要改动吧 d ...

  4. Python基于聚类算法实现密度聚类(DBSCAN)计算

    本文实例讲述了Python基于聚类算法实现密度聚类(DBSCAN)计算.分享给大家供大家参考,具体如下: 算法思想 基于密度的聚类算法从样本密度的角度考察样本之间的可连接性,并基于可连接样本不断扩展聚 ...

  5. python中计算如何实现_基于python如何实现计算两组数据P值

    我们在做A/B试验评估的时候需要借助p_value,这篇文章记录如何利用python计算两组数据的显著性. 一.代码# TTest.py # -*- coding: utf-8 -*- ''' # C ...

  6. 妙用Python内置函数int()快速计算等比数列前n项和

    本文要点在于Python内置函数int()的用法,所以计算等比数列前n项和时没有使用数学上的公式Sn=a1*(1-q^n)/(1-q). 一般遇到这样的问题,很容易想到使用循环来实现,以计算1+2+4 ...

  7. python怎么取百位_#python计算结果百位500向下取整,(0-499取000,500-999取500)

    !/usr/bin/env python coding:utf-8 计算结果百位500向下取整,(0-499取000,500-999取500) import math calc_Amount = fl ...

  8. 基于SL773-2018计算土壤流失量的Python实现

    1.编写原因 2.实现功能 3.部分代码预览 4.写在最后 基于SL773-2018计算土壤流失量的Python实现 1.编写原因 随着SL773-2018<生产建设项目土壤流失量测算导则> ...

  9. 基于阿里云函数计算实现需要用到超大依赖包的 Python 无服务器计算

    文章目录 引言 一.阿里云函数计算是什么? 开发流程 函数计算的触发调用 函数计算运行实例的生命周期 二.示例应用的架构及简介 三.具体开发部署步骤所遇到的坑和~~避坑指南~~ 坑1. 超大依赖包的部 ...

最新文章

  1. 全域调度:云边协同在视频场景下的探索实践
  2. 谁说PCB布线不能走直角。。。
  3. DEBUG主要命令(转)
  4. wordpress插件-WP Rocket 3.10.1_去广告已授权
  5. DHCP服务器在企业里的各种应用方案
  6. 计算机vfp程序设计题,2012年计算机级VFP程序设计基础习题及答案.doc
  7. union介绍,union与struct
  8. 斐讯K3c基于frp内网穿透
  9. linux 达梦 tcp tcpv6,linux下配置ipv6地址
  10. 什么是超级立方体,HyperCube
  11. python_IED工具下载(pycharm)_windows版
  12. 分享材料(不断更新)
  13. 【ManggoDB】安装配置(伪分布式集群搭建)Replia Set
  14. linux中如果编译二进制,在linux中把汇编或c程序交叉编译成二进制文件烧录开发板过程详解...
  15. Hadoop安装与使用
  16. R笔记:全子集回归 | 最优子集筛选变量挑选
  17. webshell一句话木马大全
  18. 论文记录3_CycleGAN-损失函数部分
  19. 蓝桥杯第四日——对局匹配
  20. nodejs 下载文件

热门文章

  1. 城域网IPv6过渡技术——MAP技术
  2. 一百个最有用的网站地址
  3. python 源代码 macd双底 高 低_macd双底选股公式
  4. 使用AD8618设计ADC信号调理电路随笔
  5. 【Leetcode】1833. 雪糕的最大数量
  6. Caused by org.springframework.beans.factory.NoSuchBeanDefinitionException
  7. 3DMAX动画渲染 军舰在海中航行
  8. J2V8 -- 开始使用J2V8
  9. 细数那些年我们一起玩过的Unity3D游戏(unity开发的游戏有哪些)
  10. 网页查看计算机硬件,怎么查看电脑硬件设备的Guid值?