WRF进阶:使用ERA5-land数据驱动WRF/WRF撰写Vtable文件添加气象场

想用WRF模拟地气交换过程,对于WRF的地表数据,尤其是土壤温湿度数据要求便会很大,传统使用ERA5-singledata数据精度也许不足以满足需求,为此,本文尝试使用ERA5-land数据替换驱动WRF。

数据下载

ERA5-land的数据下载与ERA5其他数据并无不同,只不过需要注意一点:当下载grib格式时,部分变量是以grib2形式储存。而有些则是以grib1格式,下载时请注意分开下载,切勿混合,否则将无法解码与读取。
关于变量的格式,请参看:ERA5-landParameterlistings

同时还请注意:在ungrib解码时,地面数据与高空数据存在重合,即地面气温、10m风速、10m相对湿度等(写作UU VV TT RH)解码时是一起解码的,这就要求它们之间的分辨率等匹配,换句话说,在使用ERA5-land数据时,我们不使用它的地面温湿度数据,而是只使用精度更高更准确的土壤温湿度数据,其他数据依然使用ERA5-single,否则极有可能出现WRF无法运行的情况。
数据下载脚本如下:

import cdsapi
import calendar
from subprocess import call


def idmDownloader(task_url, folder_path, file_name):
    """
    IDM下载器
    :param task_url: 下载任务地址
    :param folder_path: 存放文件夹
    :param file_name: 文件名
    :return:
    """
    # IDM安装目录
    idm_engine = "C:\\Program Files (x86)\\Internet Download Manager\\IDMan.exe"
    # 将任务添加至队列
    call([idm_engine, '/d', task_url, '/p', folder_path, '/f', file_name, '/a'])
    # 开始任务队列
    call([idm_engine, '/s'])


if __name__ == '__main__':
    c = cdsapi.Client()  # 创建用户

    # 数据信息字典
    dic = {
        'product_type': 'reanalysis',  # 产品类型
        'format': 'grib',  # 数据格式
        'variable':  [
            'soil_temperature_level_1', 'soil_temperature_level_2', 'soil_temperature_level_3',
            'soil_temperature_level_4', 'surface_latent_heat_flux', 'surface_net_solar_radiation',
            'surface_net_thermal_radiation', 'surface_pressure', 'surface_sensible_heat_flux',
            'surface_solar_radiation_downwards', 'surface_thermal_radiation_downwards', 'volumetric_soil_water_layer_1',
            'volumetric_soil_water_layer_2', 'volumetric_soil_water_layer_3', 'volumetric_soil_water_layer_4',],
        'year': [],  # 年,设为空
        'month': [],  # 月,设为空
        'day': [],  # 日,设为空
        'time': [  # 小时
             '00:00', "03:00","06:00",'12:00','15:00',"18:00","21:00"
        ],
        'area': [90, -180, 45, 180],
    }

grib2=[]
 # 通过循环批量下载1979年到2020年所有月份数据

    for y in range(2020, 2021):  # 遍历年
        for m in range(1, 13):  # 遍历月
        
            day_num = calendar.monthrange(y, m)[1]  # 根据年月,获取当月日数
            # 将年、月、日更新至字典中
            dic['year'] = str(y)
            dic['month'] = str(m).zfill(2)
            dic['day'] = [str(d).zfill(2) for d in range(1, day_num + 1)]
            r = c.retrieve('reanalysis-era5-land', dic, )  # 文件
            url = r.location  # 获取文件下载地址
            path = 'F:\\ERA5\\hf\\'  # 存放文件夹
            filename = 'land'+str(y) + str(m).zfill(2) + '.grib'  # 文件名
            idmDownloader(url, path, filename)  # 添加进IDM中下载

#day_num = calendar.monthrange(2018, 5)[1]  # 根据年月,获取当月日数
#dic['day'] = [str(d).zfill(2) for d in range(1, day_num + 1)]


#day_num = calendar.monthrange(2018, 5)[1]  # 根据年月,获取当月日数
#dic['day'] = [str(d).zfill(2) for d in range(1, day_num + 1)]

修改VTABLE文件

WRF主要是使用ungrib解码数据,而ungrib文件的解码依赖于Vtable文件中描述的grib数据格式,当我们想添加新的气象场时,一定要链接正确的Vtable文件。
对于ERA5-land而言,直接使用默认的Vtable-ECWMF,需要注意的是,有时我们还下载了地面温湿度等数据,但我们并不需要使用它,为了避免ungrib将不需要的数据解码,我们只需删除Vtable文件中对应的部分,只保留需要的数据描述即可,比如这是我新建的Vtable-land文件:

GRIB | Level| Level| Level| metgrid  |  metgrid | metgrid                                  |
Code | Code |   1  |   2  | Name     |  Units   | Description                              |
-----+------+------+------+----------+----------+------------------------------------------+

 139 | 112  |   0  |   7  | ST000007 | K        | T of 0-7 cm ground layer                 |
 170 | 112  |   7  |  28  | ST007028 | K        | T of 7-28 cm ground layer                |
 183 | 112  |  28  | 100  | ST028100 | K        | T of 28-100 cm ground layer              |
 236 | 112  | 100  | 255  | ST100289 | K        | T of 100-289 cm ground layer             |
  39 | 112  |   0  |   7  | SM000007 | fraction | Soil moisture of 0-7 cm ground layer     |
  40 | 112  |   7  |  28  | SM007028 | fraction | Soil moisture of 7-28 cm ground layer    |
  41 | 112  |  28  | 100  | SM028100 | fraction | Soil moisture of 28-100 cm ground layer  |
  42 | 112  | 100  | 255  | SM100289 | fraction | Soil moisture of 100-289 cm ground layer |
@                                                                                                                                         1,1           Top

指解码土壤温湿度。

修改METGRID.TBL

WRF前处理时需要将输入的数据插值到对应的模拟域,此时使用的便是metgrid.exe,metgrid.exe则通过METGRID.TBL文件中规定的变量特点:如,缺失值、覆盖、层数、变量描述等对各种变量进行插值。
当我们使用ERA5-land中的土壤温湿度数据时,我们的土壤温湿度数据变量名称与ERA5-single中不同,而在METGRID.TBL中,缺少对于缺失值missing_value的描述,导致直接插值时为误将缺失值插值从而出现异常值导致无法完成初始化,在此,我们需要在METGRID.TBL文件中添加缺失值信息。
打开METGRID.TBL,找到变量ST SM开头的对应部分,查看是否缺失miss_value这一行,如果缺失就添加:` missing_value=-1.E30,如下图:

`在这里插入图片描述

修改namelist.wps

由于我们的ERA5-land是独立于single和pressure输入的,此时我们最好将其作为单独的中间文件输入,打开namelist.wps&ungrib部分,修改解码输出前缀为SOIL,并添加读取前缀名,如:

&ungrib
 out_format = 'WPS',
 prefix = 'SOIL',
/

&metgrid
 fg_name = 'FILE','SEAICE','ALBSI','ICEDEPTH','SNOWSI','SNOW',"SOIL"
 opt_output_from_metgrid_path="/public/home/zhangzilu/Build_WRF/WPS-4.3/met_2020/"
/


这样ungirb解码是会单独输出以SOIL开头ERA5-LAND土壤数据,metgird插值时也会读取包含ERA5-single和ERA5-PRESSURE的FILE和ERA5-LAND的SOIL文件插值。
之后metgrid.exe,得到met_em*。提交WRF初始化运行即可。
需要注意的是:我个人虽然可以正常运行,但是对应的计算时间却长了很多,这可能与我的分辨率>ERA5-LAND的0.1°有关,如果对分辨率要求高的人可以另外试试看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/28762.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springboot第27集:springboot-mvc,WxPay

在数据库中,DISTINCT 关键字用于查询去重后的结果集。它用于从查询结果中去除重复的行,只返回唯一的行。 要使用 DISTINCT 关键字,可以将其放置在 SELECT 关键字之前,指示数据库返回去重后的结果。 请注意,DISTINCT 关…

day07--java高级编程:JDK8的新特性,JDK9的新特性,JDK10的新特性,JDK11的新特性,JDK15的新特性

1 JDK8的其它新特性 说明:一些8中的新特性在,java高级部分学习的同时顺便讲过了。 1.1 JDK8新特性的总体结构 1.2 Java 8新特性简介 1.3 Lambda表达式 1.3.1 出现背景 1.3.2 Lambda表达式的使用举例 package com.atguigu.java1;import org.junit.Tes…

AntDB 企业增强特性介绍——AntDB在线数据扩容关键技术

数据库集群安装完成后,其数据存储容量是预先规划并确定的。随着时间的推移以及业务量的增加,数据库集群中的可用存储空间不断减少,面临数据存储容量扩充的需求。 传统的在线扩容的流程大致如下。 (1)在集群中加入新的 …

数据库迁移 | Oracle数据迁移方案之技术两三点

今年Oracle似乎又火了,火得要下掉,目前中国大概有240数据库企业,在国产信创的大趋势下,一片欣欣向荣,国库之春已然来临。到今天为止,Oracle依旧是市场份额最大的数据库,天下苦秦久矣&#xff0c…

【JVM 监控工具】JVisualVM的使用

文章目录 前言二、启动JVisualVM三、安装插件四、使用 前言 JVisualVM是一个Java虚拟机的监控工具,要是需要对JVM的性能进行监控可以使用这个工具哦 使用这个工具,你就可以监控到java虚拟机的gc过程了 那么,这么强大的工具怎么下载呢&…

顶奢好文:3W字,穿透Spring事务原理、源码,至少读10遍

说在前面 在40岁老架构师 尼恩的读者社区(50)中,最近有小伙伴拿到了一线互联网企业如阿里、美团、极兔、有赞、希音的面试资格,Spring事务源码的面试题,经常遇到: (1) spring什么情况下进行事务回滚? (2) spring 事务…

Transformer在CV领域有可能替代CNN吗?

目前已经有基于Transformer在三大图像问题上的应用:分类(ViT),检测(DETR)和分割(SETR),并且都取得了不错的效果。那么未来,Transformer有可能替换CNN吗&#…

索尼RSV视频修复方法论视频文件修复时样本文件的三同

索尼RSV类的文件修复案例有很多,程序操作也很简单没什么可说的,这次这个索尼ILCE-7SM3的案例就是为了让大家更好的认识视频修复中我称之为“三同“的重要性,想要恢复的效果好必须要把准备工作做到位。 故障文件:45.1G RSV文件 故障现象: 索…

工具篇--4 消息中间件-RabbitMq 模型介绍

1 介绍: RabbitMQ 是一个开源的消息中间件,它实现了 AMQP(高级消息队列协议)标准,并且支持多种语言和操作系统,包括 Java、Python、Ruby、PHP、.NET、MacOS、Windows、Linux 等等。RabbitMQ 提供了可靠的消息传递机制…

竞赛无人机搭积木式编程(三)---用户自定义航点自动飞行功能(全局定位,指哪打哪)

竞赛无人机搭积木式编程(三)---用户自定义航点自动飞行功能(全局定位,指哪打哪) 无名小哥 2023年6月10日 用户通过对前面两讲中全国大学生电子设计竞赛真题植保无人机(2021)、送货无人机&#…

【UE 从零开始制作坦克】2-控制坦克移动(简单的移动效果)

效果 步骤 1. 新建蓝图类,父类选择“VehicleWheel(载具车轮)” 这里就命名为“TankWheel” 双击打开“TankWheel”,设置形状半径为40 2. 打开 “BP_West_Tank_M1A1Abrams” 选中“网格体(VehicleMesh)&…

JMeter参数化4种实现方式

目录 前言: 1 参数化释义 2 参数化实现 CSV实例 注意事项 前言: 在使用JMeter进行测试时,参数化允许您模拟不同的用户、不同的数据、不同的操作等,从而增加了测试的灵活性和复用性 1 参数化释义 什么是参数化?…

设计模式(十八):行为型之观察者模式

设计模式系列文章 设计模式(一):创建型之单例模式 设计模式(二、三):创建型之工厂方法和抽象工厂模式 设计模式(四):创建型之原型模式 设计模式(五):创建型之建造者模式 设计模式(六):结构型之代理模式 设计模式…

分布式数据库HBase

大数据基础-分布式数据库HBase 概述HBase简介HBase与传统关系数据库的对比分析 HBase数据模型数据模型概述数据模型相关概念数据坐标 HBase的实现原理HBase功能组件表和RegionRegion的定位HBase框架结构HMasterRegionServerHBase协作组件RegionColumnFamilyKeyValue小结 HBase运…

STM32单片机(六)TIM定时器 -> 第二节:TIM定时中断练习(定时器定时中断和定时器外部时钟)

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

docker数据管理---数据卷,数据卷容器

在Docker中,数据卷(data volumes)和数据卷容器(data volume containers)是用于在容器之间共享和持久化数据的两种不同的机制。 一、数据卷 数据卷是一个特殊的目录或目录,可以绕过容器文件系统的常规层&a…

【RabbitMQ教程】第六章 —— RabbitMQ - 延迟队列

💧 【 R a b b i t M Q 教程】第六章—— R a b b i t M Q − 延迟队列 \color{#FF1493}{【RabbitMQ教程】第六章 —— RabbitMQ - 延迟队列} 【RabbitMQ教程】第六章——RabbitMQ−延迟队列💧 🌷 仰望天空,妳我亦是行人…

2023年前端面试高频考点HTML5+CSS3

目录 浏览器的渲染过程⭐⭐⭐ CSS 、JS 阻塞 DOM 解析和渲染 回流(重排)和重绘⭐⭐ 选择器 ID选择器、类选择器、标签选择器(按优先级高到低排序)⭐⭐ 特殊符号选择器(>,,~,空格&#xff0…

Stopwatch工具类计时器探究

搬砖的我们 特别是Java开发的童鞋们, 经常需要通过记录开始时间和结束时间,然后通过计算差值,得到时间差,如下面的代码: long start System.currentTimeMillis(); long end System.currentTimeMillis(); System.out.println(…

医疗设备都在用哪些晶振?

医疗设备是指用于医疗诊断、治疗、监测等方面的各种设备。随着科技的不断发展,医疗设备的功能不断增强,精度和稳定性也得到了大幅提升。在这些医疗设备中,晶振是非常重要的元件之一。本文将介绍医疗设备中常用的晶振类型及其特点。 一、晶振…