当前位置: 首页 > news >正文

WRF学习——使用CMIP6数据驱动WRF/基于ncl与vdo的CMIP6数据处理

动力降尺度

国际耦合模式比较计划(CMIP)为研究不同情景下的气候变化提供了大量的模拟数据,而在实际研究中,全球气候模式输出的数据空间分辨率往往较低(>100Km,缺乏区域气候特征,为了更好地研究不同情景下,某一区域的气候变化特征,我们往往需要更高分辨率的模拟数据。此时便需要对全球模式输出的数据进行降尺度研究,将大尺度信息变量与小尺度信息变量建立联系,获得更多的小尺度的变量。通常,降尺度可分为(1)动力降尺度 (2)统计降尺度 (3)二者结合降尺度

动力降尺度通常是将全球模式输出的数据作为驱动场,输入至区域气候模式中,从而获取描述区域气候特征的更高分辨率数据。WRF作为最常用的中尺度天气预测模式,将其与最新的CMIP6全球模式数据结合,是动力降尺度最常用的方法。

下面以CMIP6数据中的MPI-ESM2-HR数据为例,展示使用CMIP6数据驱动WRF的基本步骤。

对于CMIP6驱动WRF,已有老师在github上上传了基于python的工具包,习惯在LINUX下使用python的用户可以尝试:cmip6-to-wrfnterm

基本思路都是类似的,只不过本文主要是基于服务器现有的NCL、CDO与shell脚本实现。

CMIP6数据准备

本次使用的模式为MPI-ESM2-HR数据,空间分辨率为100km,选择原因:数据全面、分辨率好、应用较多,可自己根据需求去官网下载数据。

本次所需下载并驱动的变量有:

``

v_namewrf_nameunitsdimdescnotes
psPSFCPa2dsurface pressure
pslPMSLPa2dMean sea-level pressure
zgGHTm3dgeopotential height
taTTK3dair temperature
tasTTK2d2-m temerature
uaUUm s-13du-component wind;
uasUUm s-12d`10-m u-component wind
vaVVm s-13dv-component wind
vasVVm s-12d10-m v-component wind
husSPECHUMDkg kg-13dspecific humidity
hussSPECHUMDkg kg-12d10-m specific humidity
tsSKINTEMPK2dSkin temperature
tslST000010K2d0-10cm soil temperature
tosSSTK2dSea temperatureoptional
mrsosSM000010m3 m-32d0-10cm soil moisture
snwSNOWkg m-22dsnow massoptional
sicSEAICE12dseaiceoptional

下载数据命名一般为以下格式:
在这里插入图片描述
变量名称_时间分辨率_层级_模式名称_情景名称_年份时间,在MPI-ECSM-HR变量的对应需要去自行查询变量表格、

预处理

首先由于下载的数据通常是10年一个,致使在实际使用时,我们首先要将需要对应时段的变量提取出来,同样的,为了后续使用shell脚本更好地进行批量处理,这些变量应当以一种特定的格式命名。
使用cdo 的selvar seldate功能,并结合shell脚本,便能很好的完成:

#!/bin/bash#suffix="_6hrPlevPt_MPI-ESM1-2-HR_ssp126_r1i1p1f1_gn_201501010600-202001010000.nc"
startdate=$1
enddate=$2
#date1=$1
hlist=("00" "06" "12" "18")
varlist=("ta" "ua" "va" "zg" "tas" "uas" "vas" "ts" "tsl" "snw" "hus" "huss" "psl")
var2d=("tas" "uas" "vas" "ts" "tsl" "snw" "huss" "psl")
var3d=("ta" "ua" "va" "zg" "hus")#echo ${date1}do
date1=`date -d "${startdate}" +%Y-%m-%d`
echo ${date1}for var in ${var2d[@]}doecho ${var}for hour in ${hlist[@]}doecho ${hour}out_filename=${var}_${date1}_${hour}.nc#input_filename=${var}${suffix}input_filename=`ls ${var}_*ssp*`echo ${out_filename}echo ${input_filename}cdo -seldate,${date1} -selhour,${hour} -selname,${var}  ${input_filename} ${out_filename}echo "cdo done"donedone
startdate=`date -d "+1 day ${startdate}" +%Y%m%d`
done

在运行时,输入bash run.sh startdate enddate便可将相应时间段提取并输出为变量_时间的形式,如:
在这里插入图片描述
注意:下载的CMIP6数据变量存在2D与3D区别,在处理3D变量,如ua va时,cdo还应当加上sellevel-提取对应的层数,这是由于该数据中ua va的垂直层仅有7层,而ta hus zg则有28层,在后续运行WRF时,3D数据的层次应当保持一致!!!

处理好后的数据,为了方便,根据2d与3d的不同将其合并:

#!/bin/bashvar3d=("ta" "ua" "va" "zg" "hus")
var2d=("tas" "uas" "vas" "ts" "tsl" "snw" "huss" "psl")#date1=$1
startdate=$1
enddate=$2
hlist=("00" "06" "12" "18")
while [[ ${startdate} -lt ${enddate} ]]
do
for hour in ${hlist[@]}
do
date1=`date -d "${startdate}" +%Y-%m-%d`echo ${date1}
echo ${hour}
suffix=${date1}_${hour}.nc
echo ${suffix}
outputfile=MPI_HR_${date1}_${hour}_00:00.nc
echo ${outputfile}
cdo merge ta_${suffix} ua_${suffix} va_${suffix} zg_${suffix} hus_${suffix} 3D_${outputfile}
#cdo merge tas_${suffix} uas_${suffix} vas_${suffix} ts_${suffix} huss_${suffix} tsl_${suffix} psl_${suffix} snw_${suffix} 2D_${outputfile}
done
startdate=`date -d "+1 day ${startdate}" +%Y%m%d`
echo ${startdate}
done

运行后可得到2d_MPI_HR和3dMPI_HR文件。

插值

我们应当注意的是,CMIP6的经纬度很多时候并不是等经纬度间距的,比如我下载的数据就是100km,在海洋上分辨率有时达到50km。这就使得我们在运行之前,首先要将其插值到均一的lat/lon坐标下,否则WRF将很难处理。

值得注意的是,CMIP6数据可分为大气与海洋两部分,而大气的经纬度与海洋的经纬度则存在差异,比如,大气的经纬度数据为一维数据,海洋则以二维数据给出,因此插值时需要分开处理。请在插值前弄清楚变量的经纬度网格。

在这里插入图片描述
tas经纬度,以一维表征

在这里插入图片描述
tos经纬度网格为曲线网格,经纬度为二维形式
对于两种在ncl中使用不同的插值函数即可,对一维使用rectilinear_to_SCRIP将经纬度转为映射文件,在使用ESMF_regrid_with_weights插值,对二维曲线网格,使用curvilinear_to_SCRIP函数,再使用ESMF_regrid_with_weights插值。
以下为插值的代码示例:

undef ("regrid_MPI")
function regrid_MPI(fname:string,inputv:numeric)
local regrid_var,MPI_var,lat,lon,inputf
begin
inputf=addfile(fname,"r")
lat=inputf->latitude
lon=inputf->longitudeOpt                = True
Opt@SrcRegional    = True
Opt@ForceOverwrite = True
Opt@PrintTimings   = True
Opt@Title          = "MPI-ESM1"
Opt@CopyVarAtts    = True
;Opt@GridMask       = where(.not.ismissing(zg),1,0)
Opt@CopyVarCoords  = False
srcGridName    = "SCRIP_MPI-ESM1_grid"+".nc"
curvilinear_to_SCRIP(srcGridName, lat,lon, Opt)
delete(Opt)
;----------------------------------------------------------------------
; Convert destination grid to a SCRIP convention file.
;----------------------------------------------------------------------
dstGridName = "dst_SCRIP.nc"
Opt                = True
Opt@LLCorner       = (/ -90.d,   0.d/)
Opt@URCorner       = (/  90.d,360.d/)
Opt@ForceOverwrite = True
Opt@PrintTimings   = Truelatlon_to_SCRIP(dstGridName,"1x1",Opt)
;---Clean up
delete(Opt)
;----------------------------------------------------------------------
; Generate the weights that take you from the NCEP grid to a
; 1x1 degree grid.
;----------------------------------------------------------------------wgtFileName = "MPI_2_Rect.nc"Opt                      = TrueOpt@InterpMethod         = "bilinear"     ; defaultOpt@ForceOverwrite       = TrueOpt@PrintTimings         = TrueESMF_regrid_gen_weights(srcGridName,dstGridName,wgtFileName,Opt)delete(Opt);---------------------------------
;----------------------------------------------------------------------
; Apply the weights to a given variable
;----------------------------------------------------------------------Opt                = TrueOpt@PrintTimings   = True;---In V6.1.0, coordinates and attributes are copied automatically
regrid_var = ESMF_regrid_with_weights(inputv,wgtFileName,Opt)
;printVarSummary(regrid_var)
return(regrid_var)
end

在这里定义了一个regird_mpi函数,在使用是输入文件名以及要插值的变量即可,根据经纬度网格点不同,可将该函数中的curvilinear_to_SCRIPrectilinear_to_SCRIP相互替换。

WRF中间文件撰写

最后,要将插值后的变量数据,转写为WPS的中间文件,该中间文件可直接被metgrid.exe读取,并生成met_em文件。
ncl中就有现成的函数,需要注意的是,撰写时变量的FIELD应当包括在METGRID.TBL中相同,否则metgrid无法识别。
如果数据是2d,则直接撰写,如果数据为3d,则根据层数,循环一层层写:

; for 2d variableFIELD_ICE          = "SEAICE"UNITS_ICE          = "1"DESC_ICE           = "ocean seaice"FIELD_ST          = "SST"
UNITS_ST          = "K"
DESC_ST           = "sea surface temperature"re_sic=regrid_MPI(data_filename,sic)
; re_tos=regrid_MPI(data_filename,tos)opt                   = True
opt@projection        = 0                 ; "Equidistant_Lat_Lon"
opt@date              = DATE1
opt@map_source        = "1×1"
opt@startloc          = "SWCORNER"          ; 8 chars exact
opt@startlon          = 0
opt@startlat          = -90
opt@deltalon          = 1
opt@deltalat          = 1
;opt@is_wind_earth_rel = False
opt@is_wind_earth_relative = False
opt@level             = 200100wrf_wps_write_int(WPS_IM_root_name,FIELD_ICE,UNITS_ICE,\DESC_ICE,re_sic,opt)pnew2=(/925,850,700,600,500,250,50/)*100
; For 3D variables
do jlev=0,NLEV2-1opt@level = pnew2(jlev)wrf_wps_write_int(WPS_IM_root_name,FIELD_U,UNITS_U,\DESC_U,UonP(jlev,:,:),opt)wrf_wps_write_int(WPS_IM_root_name,FIELD_V,UNITS_V,\DESC_V,VonP(jlev,:,:),opt)
end do

最后使用WPS文件夹下的util/./rd_intermediate.exe 确认是否读取成功,关于这一部分,可参考我以前的博客:撰写WPS intermediate file添加海冰场

初始化

将输出的中间文件链接至WPS文件夹,修改namelist.wps文件夹&metgrid部分的fg_name,使其读取我们撰写的中间文件。
在这里插入图片描述之后的步骤就和普通运行WRF一样了,请注意由于数据本身的性质,土壤层数与垂直层数量较少,在设置namelist时记得修改与其保持一致。

要点(坑)

主要的坑在于数据本身。

  1. 3D数据垂直层不一致,ua与va数据仅有7层,而ta hus zg等数据却又有8层,因此在撰写文件时必须注意对应层数保持一致。
  2. 经纬度格点不一致,注意经纬度各点的类别,在插值时注意区分。
  3. CMIP6数据本身并不是再分析资料,而是预测气候变化的模型输出,常常会出现数据量与WRF所需不对应的问题,请注意各个变量描述。
  4. 除了2D与2D以外,也可以使用CMIP6的2D静态数据,如LANDSEA,步骤类似,主要是通过namelist.wps中的constant_name来设置读取。

相关代码与数据已经发布在Github上,请查询:Write_CMIP_to_wps_int

相关文章:

WRF学习——使用CMIP6数据驱动WRF/基于ncl与vdo的CMIP6数据处理

动力降尺度 国际耦合模式比较计划(CMIP)为研究不同情景下的气候变化提供了大量的模拟数据,而在实际研究中,全球气候模式输出的数据空间分辨率往往较低(>100Km,缺乏区域气候特征,为了更好地研…...

机器人控制系列教程之Delta机器人动力学分析

动力学简介 机器人动力学分析是已知各运动构件的尺寸参数和惯性参数的情况下,求解末端运动状态与主驱动力矩之间的函数关系。 意义:对并联机器人动力学分析的意义体现在: 为伺服电机的选型提供理论依据;获得动力学参数为目标函数的最优问题做性能评价指标;为高精度控制提…...

VIM介绍

VIM(Vi IMproved)是一种高度可配置的文本编辑器,用于有效地创建和更改任何类型的文本。它是从 vi 编辑器发展而来的,后者最初是 UNIX 系统上的一个文本编辑器。VIM 以其键盘驱动的界面和强大的文本处理能力而闻名,是许…...

课设:选课管理系统(Java+MySQL)

在本博客中,我将介绍用Java、MySQL、JDBC和Swing GUI开发一个简单的选课管理系统。 技术栈 Java:用于编写应用程序逻辑MySQL:用于存储和管理数据JDBC:用于连接Java应用程序和MySQL数据库Swing GUI:用于构建桌面应用程…...

动态规划 剪绳子问题

给一段长度为n的绳子&#xff0c;请把绳子剪成m段&#xff0c;每段绳子的长度为k[0],k[1],k[2],k[3]....k[m].请问k[0]k[1]k[2].....*k[m]的最大乘积为多少 #include <vector> // 包含vector头文件 #include <algorithm> // 包含algorithm头文件&#xff0c;用于m…...

上位机图像处理和嵌入式模块部署(mcu项目1:实现协议)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 这种mcu的嵌入式模块理论上都是私有协议&#xff0c;因为上位机和下位机都是自己开发的&#xff0c;所以只需要自己保证上、下位机可以通讯上&…...

【NLP学习笔记】load_dataset加载数据

除了常见的load_dataset(<hf上的dataset名>)这种方式加载HF上的所有数据外&#xff0c;还有其他custom的选项。 加载HF上部分数据 from datasets import load_dataset c4_subset load_dataset("allenai/c4", data_files"en/c4-train.0000*-of-01024.js…...

企业如何选择好用的供应商管理系统

供应商管理系统软件&#xff08;SRM&#xff09;是企业用于管理供应链中各个供应商关系的重要工具。现如今竞争激烈的市场环境下&#xff0c;选择一款合适的SRM软件显得尤为重要。那么&#xff0c;如何选择一款好用的供应商管理系统呢&#xff1f; 企业在选择好用的供应商管理…...

震惊!运气竟能如此放大!运气的惊人作用,你了解吗?

芒格&#xff1a;得到你想要的东西&#xff0c;最保险的办法&#xff0c;就是让自己配得上你想要的那个东西。今天仔细想了想这句话&#xff0c;他其实说的是无数成功人士的心声 —— “我配得上&#xff01;” 美剧《绝命毒师》有个导演叫文斯吉里根&#xff08;Vince Gilliga…...

记录一次Apache Tomcat 处理返回自定义的404页面

记录工作中遇到处理访问tomcat 不存在的资源&#xff0c;返回自定义的404页面 删除webapps目录下的example、docs、manager、hta-manager目录&#xff0c;只保留 ROOT目录&#xff0c;应用部署在了这个目录 删除 manager、hta-manager 我没有发现有什么异常 制作404.jsp 或者 4…...

【piania 的用法】

piania 的用法 定义store建议使用箭头函数TypeScript插件扩展1、全局添加对象 定义store import { ref, computed } from vue import { defineStore } from pinia // pinia 以函数的形式暴露出去 export const useCounterStore defineStore(counter, () > {// 1、ref 相当…...

上海计算机考研炸了,这所学校慎报!上海大学计算机考研考情分析!

上海大学&#xff08;Shanghai University&#xff09;&#xff0c;简称“上大”&#xff0c;是上海市属、国家“211工程”重点建设的综合性大学&#xff0c;教育部与上海市人民政府共建高校&#xff0c;国防科技工业局与上海市人民政府共建高校&#xff0c;国家“双一流”世界…...

面对全球新能源汽车合作发展创维汽车如何实现共赢

由全球新能源汽车合作组织(筹)主办、中国电动汽车百人会承办的首届全球新能源汽车合作发展论坛(GNEV2024)于6月27日&#xff0c;6月28日在新加坡金沙会议展览中心召开。创维汽车国际营销公司总经理齐奎源受邀参会并作出分享。 本届大会以推动全球新能源汽车产业协同发展与合作…...

安全和加密常识(1)对称加密和非对称加密以及相应算法

文章目录 对称加密(Symmetric Encryption)非对称加密(Asymmetric Encryption)使用场景和优缺点对称加密和非对称加密是信息安全领域中两种重要的加密方式,它们分别使用不同的加密算法和密钥管理方式来保护数据的机密性。下面我来简单介绍一下它们及其相应的算法。 对称加…...

afrog-漏洞扫描(挖洞)工具【了解安装使用详细】

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将信息做其他用途&#xff0c;由Ta承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 1、afrog介绍 afrog 是一款性能卓越、快速稳定、PoC可定…...

c++类模板--无法解析的外部符号

解决办法 文章目录 解决办法方法1(推荐).在主函数包含头文件时将实现模板类的函数也包含进来方法2.将模板类的实现方法写在头文件里面方法3.函数模板声明前加inline 可能错误2&#xff0c;类内实现友元输出重载 方法1(推荐).在主函数包含头文件时将实现模板类的函数也包含进来 …...

Postman介绍

Postman 是一款流行的 API 开发和测试工具&#xff0c;它提供了一个直观的用户界面&#xff0c;使开发者可以轻松地构建、测试和修改 HTTP 请求。Postman 不仅适用于测试人员&#xff0c;也广泛应用于开发人员、产品经理和API设计者中&#xff0c;以确保API的正确性和性能。 以…...

以智能化为舵手,引领现代计算机系统架构新航向

编者按&#xff1a;如今计算机系统承载的服务和算法逻辑日益复杂&#xff0c;理解、设计并改进计算机系统已成为核心挑战。面对系统复杂度和规模的指数级增长&#xff0c;以及新的大模型驱动场景下的分布式系统形态的涌现&#xff0c;人们亟需创新方法与技术来应对。在计算机系…...

揭秘品牌成功秘诀:品牌营销策略的核心要素大公开

品牌营销作为企业战略中至关重要的一环&#xff0c;其核心是建立和传播品牌的独特魅力&#xff0c;使其在消费者心目中占据重要位置。 一个成功的品牌营销策略能够提升品牌的知名度和影响力&#xff0c;带来持续的销售和忠诚客户群体。 在当今竞争激烈的市场环境中&#xff0…...

java如何把list转换成map

不废话&#xff0c;直接上代码 public static void main(String[] args) {List<UserxVO> list new ArrayList<>();for (int i 0; i < 10; i) {list.add(new UserxVO("n" i, "dd" i));}Map<String, String> map list.stream().co…...

Qri高级功能:如何使用JSON Schema验证和描述数据集结构

Qri高级功能&#xff1a;如何使用JSON Schema验证和描述数据集结构 【免费下载链接】qri youre invited to a data party! 项目地址: https://gitcode.com/gh_mirrors/qr/qri Qri是一个强大的开源数据协作工具&#xff0c;它提供了丰富的功能来帮助用户管理、共享和验证…...

Ubuntu经常安装软件

1、垃圾清理工具stacer sudo apt updatesudo apt install stacer apt cleanapt autocleanapt autoremove 2、类似与everything的工具Fsearcch 1sudo add-apt-repository ppa:christian-boxdoerfer/fsearch-stable 2sudo apt update 3sudo apt install fsearch (注&#xf…...

Lovable电商网站搭建:如何用不到3人技术团队,72小时内上线PCI-DSS合规MVP版本?

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Lovable电商网站搭建 Lovable 是一个面向中小商户的轻量级电商解决方案&#xff0c;采用现代 Web 技术栈构建&#xff0c;强调可扩展性、用户体验与快速部署能力。本章将指导你从零开始搭建一个具备商品展示、…...

基于LSTM自编码器的家用电器功耗异常检测系统构建指南

1. 项目概述&#xff1a;从能耗洞察到智能干预我们每天都在和各种家用电器打交道&#xff0c;从清晨唤醒你的咖啡机&#xff0c;到深夜还在默默工作的路由器。你有没有想过&#xff0c;这些看似微不足道的设备&#xff0c;其背后隐藏的能耗模式&#xff0c;其实大有文章&#x…...

揭秘Midjourney云雾渲染失效真相:3大隐性提示词冲突、2类SDXL迁移兼容漏洞及实时雾浓度校准公式

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;揭秘Midjourney云雾渲染失效真相&#xff1a;3大隐性提示词冲突、2类SDXL迁移兼容漏洞及实时雾浓度校准公式 Midjourney V6 在启用云雾&#xff08;mist/fog/haze&#xff09;类视觉效果时&#xff0c;…...

终极指南:用AlwaysOnTop免费开源工具彻底改变你的Windows工作方式

终极指南&#xff1a;用AlwaysOnTop免费开源工具彻底改变你的Windows工作方式 【免费下载链接】AlwaysOnTop Make a Windows application always run on top 项目地址: https://gitcode.com/gh_mirrors/al/AlwaysOnTop 你是否经常在多个窗口间来回切换&#xff0c;浪费宝…...

星露谷物语SMAPI模组加载器:从新手到专家的完整使用指南

星露谷物语SMAPI模组加载器&#xff1a;从新手到专家的完整使用指南 【免费下载链接】SMAPI The modding API for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/smap/SMAPI 星露谷物语SMAPI模组加载器是官方推荐的模组API&#xff0c;它为玩家和开发者提供…...

Claude Mythos Preview首月揪万余漏洞、拦截150万美元电诈,网络安全格局将变?

玻璃翼计划首战告捷A厂的玻璃翼计划首战告捷&#xff0c;Mythos 30天内就挖出1万个致命漏洞&#xff0c;甚至拦截了150万美元电诈。面对雪片式的报告&#xff0c;人类程序员崩溃求饶&#xff1a;「求别挖了&#xff0c;根本修不完啊&#xff01;」就在刚刚&#xff0c;Anthropi…...

TII投稿避坑指南:LaTeX模板编译报错‘xxx-eps-converted-to.pdf not found’的终极解决方案

TII投稿LaTeX避坑实战&#xff1a;从编译报错到完美PDF生成的终极指南 凌晨三点的实验室&#xff0c;屏幕上闪烁的xxx-eps-converted-to.pdf not found错误提示仿佛在嘲笑你连续八小时的徒劳尝试。这不是科幻场景&#xff0c;而是每位用LaTeX撰写TII论文的研究者都可能遭遇的真…...

推理服务为什么一上张量并行就开始通信拖慢首 Token:从 All-Reduce 瓶颈到通信计算重叠的工程实战

一、问题的引入 部署 70B 以上大模型时&#xff0c;单卡显存往往捉襟见肘。张量并行&#xff08;TP&#xff09;把单层权重沿隐藏维度切分到多张 GPU&#xff0c;每张卡只存一部分。&#x1f3af; 不少团队上线 TP 后遇到诡异现象&#xff1a;吞吐提升&#xff0c;首 Token 时间…...