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

news2024/10/6 18:29:14

想用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°有关,如果对分辨率要求高的人可以另外试试看。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023 届 Java 岗高频面试题盘点,老司机也未必全会

2023,可谓是招聘面试最难季。不少大厂,如腾讯、字节的招聘名额明显减少,面试门槛却一再拔高,如果不用心准备,很可能就被面试官怼得哑口无言。今天不谈其它,就说说我作为面试官面试的那些事儿。 从某电商项…

【笔试强训选择题】Day25.习题(错题)解析

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:笔试强训选择题 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!&#xff…

不愧是阿里大牛珍藏的“redis深度笔记(全彩版)”这细节讲解,神了

前言 说到 Redis 相信对于我们这些程序员来说太熟悉了,Redis 凭借着自己超高的超高的性能、完美的文档、简洁易懂的源码和丰富的客户端库支持,很快就在国内的互联网市场占据了一席之地,得到了广大用户的一致好评,随着国内外使用 …

反射---getattr,hasattr,setattr,delattr加插播enumerate

什么是反射? 用字符串数据类型的变量名来访问这个变量的值 反射的方法:getattr,hasattr,setattr,delattr 类:(通过类名反射类名空间里面的内容的) 类:静态属性,类方法,静…

Vue中如何进行代码高亮与语法着色?

Vue中如何进行代码高亮与语法着色? 在Vue的开发过程中,我们经常需要展示代码片段或者进行代码高亮与语法着色。Vue提供了多种方式来实现代码高亮与语法着色,本文将为你详细介绍这些方法。 1. 使用prism.js进行代码高亮与语法着色 prism.js是…

mybatis的一级缓存和二级缓存

目录 1、简介 2、Mybatis缓存 3、一级缓存 3.1、初体验测试 3.2、一级缓存失效的四种情况 4、二级缓存 4.1、使用步骤 4.2、结论 5、缓存原理 1、简介 什么是缓存 [ Cache ]? 存在内存中的临时数据。将用户经常查询的数据放在缓存(内存&…

gomod在项目中的作用

Part1gomod在golang项目中的作用 1介绍 gomod是Go语言中一个非常重要的工具,它在Golang项目的开发过程中扮演着关键的角色。gomod是模块依赖管理工具,可以帮助开发者更好地管理和组织项目的依赖关系,提供了便捷的方式来管理和升级依赖项。 2为…

gtk实现spice剪切板

重要的函数: void spice_main_channel_clipboard_selection_grab(SpiceMainChannel *channel, guint selection, guint32 *types, int ntypes); 抓取剪切板 void spice_main_channel_clipboard_selection_release(SpiceMainChannel *channel, guint selection); 剪…

软件项目管理需要具备哪些能力?

作为一名软件项目管理者,在处理许多事情时需要不断提高个人在数据分析处理、项目业务流程管理等各个领域的能力。当然作为过来人,我也很清楚很多软件项目管理新人也较为疑惑如何提高自己的能力和专业水平,以便提高工作效率。那我也想与大家唠…

【论文阅读笔记】Local Model Poisoning Attacks to Byzantine-Robust Federated Learning

个人阅读笔记,如有错误欢迎指出! 会议: Usenix 2020 [1911.11815] Local Model Poisoning Attacks to Byzantine-Robust Federated Learning (arxiv.org) 问题: 模型攻击对拜占庭鲁棒性联邦学习的攻击效果尚未清楚 创新点&…

SpringBatch从入门到实战(六):ItemReader

一&#xff1a;ListItemReader 用于简单的开发测试。 Bean public ItemReader<String> listItemReader() {return new ListItemReader<>(Arrays.asList("a", "b", "c")); }二&#xff1a;FlatFileItemReader 1.1 完全映射 当文件…

万物云原生下的服务进化 | 京东云技术团队

导读&#xff1a; 在万物云原生下的环境下&#xff0c;Java的市场份额也因耗资源、启动慢等缺点&#xff0c;导致在云原生环境里被放大而降低&#xff0c;通过这篇文章&#xff0c;读者可以更好地了解如何在云原生环境下通过升级相关版本和使用GraalVM打出原生镜像到方式&…

Linux之特殊权限

目录 Linux之特殊权限 SUID 定义 案例 原因 查找真个系统的SUID/SGID文件 SGID 定义&#xff1a; Sticky Bit 案例 设置文件和目录的特殊权限 方法一 使用 chmod命令 方法二 使用数字形式的权限模式 设置新建文件或目录的默认权限 设置修改文件的扩展性 设置文件…

MySQL连接查询——外连接

内连接查询顺序 首先看student和exam表的内容&#xff1a; 然后执行如下内连接查询&#xff1a; explain select a.*,b.* from student a inner join exam b on a.uidb.uid;查询计划如下 由于a表记录数量少为小表做全表扫描&#xff08;rows为6&#xff09;&#xff0c;然后到…

微信小程序标签知识点总结

View 标签 <scroll-view class"scroll_list" scroll-x"true"> 标签 设置 scroll-x/y是可以设置 滚动模式到底是x方向还是Y方向 &#xff08; 需要调整样式&#xff0c;请参考如下 .scroll_list{ border: 1px solid red; width: 240px; white-sp…

算法学习day21

文章目录 530.二叉搜索树的最小绝对差递归 501.二叉搜索树中的众数递归 236.二叉树的最近公共祖先递归 总结 530.二叉搜索树的最小绝对差 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值…

管理类联考——逻辑——知识篇——题型说明

管理类联考基础逻辑—逻辑规划 一、联考中逻辑部分的重要性 管理类综合能力测试的数学、逻辑、写作三个部分中&#xff0c;逻辑是毫无疑问最重要的一部分&#xff0c;体现在以下三个方面&#xff1a; 1、时间分配&#xff1a;逻辑部分的阅读量相当大&#xff0c;30道题的阅读…

2023史上最全java面试题题库大全800题含答案

如果你不停地加班。却很少冒险&#xff0c;也很少学习&#xff0c;那你极大可能会陷入到内卷中。 为什么这么说呢&#xff1f;我们先来捋清楚「内卷」的概念&#xff1a; 「内卷化」简而言之就是&#xff1a;日复一日&#xff0c;越混越掉坑里。 所谓内卷化&#xff0c;指一种社…

HTTP 网络通讯过程

1.知识点&#xff1a; 在计算机网络中&#xff0c;通信协议用于规范数据传输的格式和传送方式。下面是常见的网络通信协议&#xff1a; HTTP协议&#xff1a;超文本传输协议&#xff0c;用于在Web浏览器和Web服务器之间传输HTML文件和其他资源。 HTTPS协议&#xff1a;HTTP安…

《水经注地图服务》如何快速发布经纬度DAT缓存

概述 《水经注地图服务》的快速发布功能是一个能够帮助用户实现快速发布地图服务的功能&#xff0c;并且提供常规情况下大多数用户所需的默认配置&#xff0c;让用户在发布地图时更加便捷。 这里为大家演示如何快速发布经纬度DAT缓存以及如何在水经微图中加载。 准备工作 离…