沙尘传输模拟教程(基于wrf-chem)
沙尘传输模拟教程(基于wrf-chem)
文章目录
- 沙尘传输模拟教程(基于wrf-chem)
- 简介
- 实验目的
- wrf-chem简介
- 软件准备
- wps、wrf-chem安装
- conda安装
- ncl安装
- ncap安装
- 数据准备
- 气象数据准备
- 下垫面数据准备
- WPS数据预处理
- namelist.wps的设置
- geogrid.exe下垫面处理
- ungrib.exe气象数据预处理
- metgrid.exe气象插值
- WRF模型运行
- 参数设置
- 沙尘模式选择
- real.exe生成气象场
- wrf-chem进行沙尘侵蚀和传输模拟
- 后处理与结果展示
- 数据后处理
- 结果图
- 参考
简介
实验目的
本实验的目的是使用 WRF-Chem 模拟和分析地表(沙漠)区域产生的沙尘的侵蚀和传输过程。通过构建一个包含沙尘侵蚀图的 WRF 域domain,研究沙尘在大气中的输送和扩散情况。
我们的实验区域为中国黄河附近的沙漠,研究时间为2024年7月11日-7月16日,最后得到这段时间的沙尘侵蚀和传输情况。

wrf-chem简介
WRF(Weather Research and Forecasting Model)是一个用于大气研究和天气预报的数值模型。

WRF-Chem 是 WRF 模型的一个扩展版本,它集成了大气化学和气溶胶过程的模拟功能。WRF-Chem可用于:
- 化学过程模拟:包括气态污染物、气溶胶和化学反应。
- 气溶胶过程:模拟气溶胶的生成、增长、凝结、沉降和输送。
- 污染物传输:模拟污染物在大气中的水平和垂直输送过程。
- 反馈机制:化学成分和气溶胶对气象过程的反馈,如辐射和云微物理过程。
软件准备
wps、wrf-chem安装
本教程这是官方例子(https://ruc.noaa.gov/wrf/wrf-chem/tutorialexercises.htm)的扩充,我们使用官方推荐的wrf 3.9和wps 3.9版本,熟悉这个过程后,可以切换为WRF V4版本。
前往网站:https://www2.mmm.ucar.edu/wrf/users/download/get_sources.html下载。

参考网站:https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compilation_tutorial.php
按照网站给出的8个步骤,依次进行测试、安装好netcdf、mpich等包,最后再安装wps和wrf。

安装注意事项:
(1)WPS安装
安装wps3.9版本在configure后,会有一个configure.wps文件,需要手动修改WRF_DIR参数,改为wrf安装目录的相对路径。

(2)wrf-chem安装
安装wrf时,打开bashrc设置安装过程中编译wrf-chem(wrf默认是不安装的,需要手动开启)
#先打开环境变量
vim ~/.bashrc
然后在环境变量中添加以下参数,开启wrf-chem:
# 启用WRF-Chem
export WRF_EM_CORE=1
export EM_CORE=1
export NMM_CORE=0
export WRF_CHEM=1
export EM_CORE=1
这样wrf安装完毕后wrf-chem也同时编译完成了。
conda安装
在Linux系统中安装conda,前往网站:https://docs.anaconda.com/miniconda/ 下载miniconda,

安装过程参考官网,可以选择离线和在线两种安装方式,安装完成后,新建一个环境:
conda create -n nco_ncl_env
conda activate nco_ncl_env
设置频道优先级,优先使用 conda-forge 提供的包:
conda config --add channels conda-forge
conda config --set channel_priority strict
ncl安装
NCL(The NCAR Command Language)是由美国国家大气研究中心(NCAR)开发的一种专门用于气象数据展示的一门语言。有多种方式可以安装,我们选择最方便的conda进行安装。
conda install -c conda-forge ncl

ncap安装
我们后面还需要用到ncap处理wrfout数据(把不同颗粒大小的沙尘汇总)。
ncap 是 NCO (NetCDF Operators) 工具包中的一个命令行工具,用于处理 NetCDF 文件中的变量及其数据。这里我们依然可以偷懒,使用conda快速安装。
conda install -c conda-forge nco
数据准备
气象数据准备
前往FNL数据的官网:https://rda.ucar.edu/datasets/ds083.2/,选择Complete File List全气象要素(包含70多种气象要素)。

选择时间下载气象数据:

这里我下载了2024.07.11到2024.07.16的气象数据,请按照你的时间要求下载。
下垫面数据准备
前往网站:https://www2.mmm.ucar.edu/wrf/users/download/get_sources_wps_geog_V3.html,下载wrf v3的下垫面数据:

这个下垫面数据包含有全球的地表特征,包括地形高度、土地利用、土壤类型、植被指数、水体覆盖和地表反照率等,也有我们这次实验需要模拟的沙尘侵蚀erodibility数据。下垫面数据大概是3G,解压后大概是20个G。
WPS数据预处理
namelist.wps的设置
可以根据自己的区域和时间段进行调整,下面是我的设置:
&sharewrf_core = 'ARW',max_dom = 1,start_date = '2024-07-11_00:00:00',end_date = '2024-07-16_00:00:00',interval_seconds = 21600io_form_geogrid = 2,
/&geogridparent_id = 1, parent_grid_ratio = 1, i_parent_start = 1, j_parent_start = 1, e_we = 41, e_sn = 41, dx = 100000,dy = 100000,map_proj = 'lambert',ref_lat = 38.00,ref_lon = 104.00,truelat1 = 35.0,truelat2 = 45.0,stand_lon = 104.0,geog_data_path = '/WRF3_GEOG/geog'
/&ungribout_format = 'WPS',prefix = 'FILE',
/&metgridfg_name = 'FILE'io_form_metgrid = 2,
/
geogrid.exe下垫面处理
cd geogridln -svf GEOGRID.TBL.ARW_CHEM GEOGRID.TBLcd .../geogrid.exe

文件夹中会多一个geo_em.d0*.nc 的文件,这个包含了研究区域的下垫面数据,
ungrib.exe气象数据预处理
使用ungrib.exe处理数据:

metgrid.exe气象插值

WRF模型运行
参数设置
namelist的具体参数可以参考官方说明,由于太多,这里不做说明,可查看官方网站的说明:https://www2.mmm.ucar.edu/wrf/users/namelist_best_prac_wrf.html

&time_controlrun_days = 2,run_hours = 0,run_minutes = 0,run_seconds = 0,start_year = 2024,start_month = 07,start_day = 13,start_hour = 00,start_minute = 00,start_second = 00,end_year = 2024,end_month = 07,end_day = 15,end_hour = 00,end_minute = 00,end_second = 00,interval_seconds = 21600,input_from_file = .true.,history_interval = 60,frames_per_outfile = 72,restart = .false.,restart_interval = 0,io_form_history = 2,io_form_restart = 2,io_form_input = 2,io_form_boundary = 2,auxinput6_inname = 'wrfbiochemi_d01',auxinput7_inname = 'wrffirechemi_d<domain>',auxinput8_inname = 'wrfchemi_gocart_bg_d<domain>',auxinput12_inname = 'wrf_chem_input',auxinput5_interval_m = 86400,auxinput7_interval_m = 86400,auxinput8_interval_m = 86400,io_form_auxinput2 = 2,io_form_auxinput5 = 0,io_form_auxinput6 = 0,io_form_auxinput7 = 0,io_form_auxinput8 = 0,io_form_auxinput12 = 0,debug_level = 0,auxinput1_inname = "met_em.d<domain>.<date>",
/auxinput13_inname = 'wrfchemv_d<domain>',auxinput13_interval_m = 86400,io_form_auxinput13 = 0,&dfi_control
/&domainstime_step = 600,time_step_fract_num = 0,time_step_fract_den = 1,max_dom = 1,s_we = 1,e_we = 41,s_sn = 1,e_sn = 41,e_vert = 31,num_metgrid_levels = 42,num_metgrid_soil_levels = 4,dx = 100000,dy = 100000,grid_id = 1,parent_id = 0,i_parent_start = 1,j_parent_start = 1,parent_grid_ratio = 1,parent_time_step_ratio = 1,p_top_requested = 5000,feedback = 1,smooth_option = 0,p_top_requested = 5000,zap_close_levels = 50,interp_type = 1,t_extrap_type = 2,force_sfc_in_vinterp = 0,use_levels_below_ground = .true.,use_surface = .true.,lagrange_order = 1,/sfcp_to_sfcp = .true.,&physicsnum_land_cat = 21,mp_physics = 4,progn = 0,ra_lw_physics = 1,ra_sw_physics = 2,radt = 30,sf_sfclay_physics = 1,sf_surface_physics = 2,bl_pbl_physics = 1,bldt = 0,cu_physics = 5,cu_diag = 1,cudt = 0,ishallow = 0,isfflx = 1,ifsnow = 1,icloud = 1,surface_input_source = 1,num_soil_layers = 4,sf_urban_physics = 0,mp_zero_out = 2,mp_zero_out_thresh = 1.e-12,maxiens = 1,maxens = 3,maxens2 = 3,maxens3 = 16,ensdim = 144,cu_rad_feedback = .true.,/&fdda/&dynamicsrk_ord = 3,w_damping = 1,diff_opt = 1,km_opt = 4,diff_6th_opt = 0,diff_6th_factor = 0.12,base_temp = 290.damp_opt = 0,zdamp = 5000.,dampcoef = 0.01,khdif = 0,kvdif = 0,non_hydrostatic = .true.,moist_adv_opt = 2,scalar_adv_opt = 2,chem_adv_opt = 2,tke_adv_opt = 2,time_step_sound = 4,h_mom_adv_order = 5,v_mom_adv_order = 3,h_sca_adv_order = 5,v_sca_adv_order = 3,/&bdy_controlspec_bdy_width = 5,spec_zone = 1,relax_zone = 4,specified = .true.,nested = .false.,/&grib2/&namelist_quiltnio_tasks_per_group = 0,nio_groups = 1,/&chemkemit = 1,chem_opt = 401,bioemdt = 0,photdt = 0,chemdt = 10,io_style_emissions = 0,emiss_opt = 3,emiss_opt_vol = 0,emiss_ash_hgt = 20000.,chem_in_opt = 0,phot_opt = 0,gas_drydep_opt = 0,aer_drydep_opt = 1,bio_emiss_opt = 0,ne_area = 0,dust_opt = 1,dmsemis_opt = 0,seas_opt = 0,depo_fact = 0.25,gas_bc_opt = 0,gas_ic_opt = 0,aer_bc_opt = 1,aer_ic_opt = 1,gaschem_onoff = 0,aerchem_onoff = 1,wetscav_onoff = 0,cldchem_onoff = 0,vertmix_onoff = 1,chem_conv_tr = 0,conv_tr_wetscav = 0,conv_tr_aqchem = 0,biomass_burn_opt = 0,plumerisefire_frq = 30,have_bcs_chem = .false.,aer_ra_feedback = 0,aer_op_opt = 0,opt_pars_out = 0,diagnostic_chem = 0,/
沙尘模式选择
也可以试试其他沙尘传输模型,在namelist.input中修改,这里我选择的是dust_opt=1:

- GOCART 沙尘方案(dust_opt=1)
- 使用 GOCART(Goddard Chemistry Aerosol Radiation and Transport)沙尘排放方案。
- AFWA 沙尘方案(dust_opt=3)
- 使用 AFWA(Air Force Weather Agency)沙尘排放方案。
- UoC 沙尘方案(dust_opt=4)
- 使用 UoC(University of Cologne)沙尘排放方案。
real.exe生成气象场
使用命令:
#使用mpich并行运行,并用nohup后台运行
nohup mpirun -np 8 ./real.exe >&realexe.log &
#或者直接run
./real.exe#查看进度
tail -f rsl.out.0000
如果计算量比较大,可以用sbatch提交到超算平台进行计算。
wrf-chem进行沙尘侵蚀和传输模拟
mpirun -np 8 ./wrf.exe
#wrf.exe也可以用sbatch提交作业到超算平台上
tail rsl.out.0000
运行完成。
后处理与结果展示
数据后处理
我们模拟的,不同大小的沙尘相加:

使用ncap2进行汇总:
ncap2 -v -s "total_dust=DUST_1+DUST_2+DUST_3+DUST_4+DUST_5" wrfout_d01_2024-07-13_00:00:00 dust1_all.nc
结果图
我们可以用ncl直接出图,也可以下载到本地用panoply查看。
(1)地中海区域的沙尘传输浓度图(2010年某时刻)

(1)部分中国区域的沙尘浓度分布情况(2024年7月某时刻)

自此,实验完毕
(由于我还在入门,难免有不周到之处,后续还会继续更新这方面的教程)。
参考
官方实验地址:https://ruc.noaa.gov/wrf/wrf-chem/tutorialexercises.htm
WRF/WPS V3版本:https://www2.mmm.ucar.edu/wrf/users/download/get_sources.html
WRF安装指南:https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compilation_tutorial.php
WPS的namelist制作与出图:https://zhuanlan.zhihu.com/p/705431890
下垫面数据:https://www2.mmm.ucar.edu/wrf/users/download/get_sources_wps_geog_V3.html
conda下载地址:https://docs.anaconda.com/miniconda/
NCL出图:https://www.ncl.ucar.edu/Download/
namelist.wps的设置:https://www2.mmm.ucar.edu/wrf/users/namelist_best_prac_wps.html
namelist.input的设置:https://www2.mmm.ucar.edu/wrf/users/namelist_best_prac_wrf.html
相关文章:
沙尘传输模拟教程(基于wrf-chem)
沙尘传输模拟教程(基于wrf-chem) 文章目录 沙尘传输模拟教程(基于wrf-chem)简介实验目的wrf-chem简介 软件准备wps、wrf-chem安装conda安装ncl安装ncap安装 数据准备气象数据准备下垫面数据准备 WPS数据预处理namelist.wps的设置geogrid.exe下垫面处理ungrib.exe气象数据预处理…...
使用 Python 进行测试(8)纯净测试
原文:Testing with Python (part 8): purity test 总结 如果你要使用综合测试(integrated tests): def test_add_new_item_to_cart(product, cart):new_product Product.objects.create(nameNew Product, price15.00)new_cart…...
python的tkinter、socket库开发tcp的客户端和服务端
一、tcp通讯流程和开发步骤 1、tcp客户端和服务端通讯流程图 套接字是通讯的利器,连接时要经过三次握手建立连接,断开连接要经过四次挥手断开连接。 2、客户端开发流程 1)创建客户端套接字 2)和服务端器端套接字建立连接 3&#x…...
Python面试题:Python中的异步编程:详细讲解asyncio库的使用
Python 的异步编程是实现高效并发处理的一种方法,它使得程序能够在等待 I/O 操作时继续执行其他任务。在 Python 中,asyncio 库是实现异步编程的主要工具。asyncio 提供了一种机制来编写可以在单线程内并发执行的代码,适用于 I/O 密集型任务。…...
【信号频率估计】MVDR算法及MATLAB仿真
目录 一、MVDR算法1.1 简介1.2 原理1.3 特点1.3.1 优点1.3.2 缺点 二、算法应用实例2.1 信号的频率估计2.2 MATLAB仿真代码 三、参考文献 一、MVDR算法 1.1 简介 最小方差无失真响应(Mininum Variance Distortionless Response,MVDR)算法最…...
HarmonyOS NEXT零基础入门到实战-第二部分
HarmonyOS NEXT零基础入门到实战-第二部分 Swiper 轮播组件 Swiper是一个 容器 组件,当设置了多个子组件后,可以对这些 子组件 进行轮播显示。(文字、图片...) 1、Swiper基本语法 2、Swiper常见属性 3、Swiper样式自定义 4、案例&…...
《小程序02:云开发之增删改查》
一、前置操作 // 一定要用这个符号包含里面的${}才会生效 wx.showToast({title: 获取数据成功:${colorLista}, })1.1:初始化介绍 **1、获取数据库引用:**在开始使用数据库 API 进行增删改查操作之前,需要先获取数据库的引用 cons…...
SQL执行流程、SQL执行计划、SQL优化
select查询语句 select查询语句中join连接是如何工作的? 1、INNER JOIN 返回两个表中的匹配行。 2、LEFT JOIN 返回左表中的所有记录以及右表中的匹配记录。 3、RIGHT JOIN 返回右表中的所有记录以及左表中的匹配记录。 4、FULL OUTER JOIN 返回左侧或右侧表中有匹…...
【前端】JavaScript入门及实战41-45
文章目录 41 嵌套的for循环42 for循环嵌套练习(1)43 for循环嵌套练习(2)44 break和continue45 质数练习补充 41 嵌套的for循环 <!DOCTYPE html> <html> <head> <title></title> <meta charset "utf-8"> <script type"…...
更加深入Mysql-04-MySQL 多表查询与事务的操作
文章目录 多表查询内连接隐式内连接显示内连接 外连接左外连接右外连接 子查询 事务事务隔离级别 多表查询 有时我们不仅需要一个表的数据,数据可能关联到俩个表或者三个表,这时我们就要进行夺标查询了。 数据准备: 创建一个部门表并且插入…...
基于最新版的flutter pointycastle: ^3.9.1的AES加密
基于最新版的flutter pointycastle: ^3.9.1的AES加密 自己添加pointycastle: ^3.9.1库config.dartaes_encrypt.dart 自己添加pointycastle: ^3.9.1库 config.dart import dart:convert; import dart:typed_data;class Config {static String password 成都推理计算科技; // …...
K8S内存资源配置
在 Kubernetes (k8s) 中,资源请求和限制用于管理容器的 CPU 和内存资源。配置 CPU 和内存资源时,使用特定的单位来表示资源的数量。 CPU 资源配置 CPU 单位:Kubernetes 中的 CPU 资源以 “核” (cores) 为单位。1 CPU 核心等于 1 vCPU/Core…...
【多任务YOLO】 A-YOLOM: You Only Look at Once for Real-Time and Generic Multi-Task
You Only Look at Once for Real-Time and Generic Multi-Task 论文链接:http://arxiv.org/abs/2310.01641 代码链接:https://github.com/JiayuanWang-JW/YOLOv8-multi-task 一、摘要 高精度、轻量级和实时响应性是实现自动驾驶的三个基本要求。本研究…...
数学建模--灰色关联分析法
目录 简介 基本原理 应用场景 优缺点 优点: 缺点: 延伸 灰色关联分析法在水质评价中的具体应用案例是什么? 如何克服灰色关联分析法在主观性强时的数据处理和改进方法? 灰色关联分析法与其他系统分析方法(如A…...
NetSuite Saved Search迁移工具
我们需要在系统间迁移Saved Search,但是采用Copy To Account或者Bundle时,会有一些Translation不能迁移,或者很多莫名其妙的Dependency,导致迁移失败。因此,我们想另辟蹊径,借助代码完成Saved Search的迁移…...
Java IO模型深入解析:BIO、NIO与AIO
Java IO模型深入解析:BIO、NIO与AIO 一. 前言 在Java编程中,IO(Input/Output)操作是不可或缺的一部分,它涉及到文件读写、网络通信等方面。Java提供了多种类和API来支持这些操作。本文将从IO的基础知识讲起ÿ…...
《从C/C++到Java入门指南》- 9.字符和字符串
字符和字符串 字符类型 Java 中一个字符保存一个Unicode字符,所以一个中文和一个英文字母都占用两个字节。 // 计算1 .. 100 public class Hello {public static void main(String[] args) {char a A;char b 中;System.out.println(a);System.out.println(b)…...
Adobe国际认证详解-视频剪辑
在数字化时代,视频剪辑已成为创意表达和视觉传播的重要手段。随着技术的不断进步,熟练掌握视频剪辑技能的专业人才需求日益增长。在这个背景下,Adobe国际认证应运而生,成为全球创意设计领域的重要标杆。 Adobe国际认证是由Adobe公…...
昇思25天学习打卡营第19天|MindNLP ChatGLM-6B StreamChat
文章目录 昇思MindSpore应用实践ChatGML-6B简介基于MindNLP的ChatGLM-6B StreamChat Reference 昇思MindSpore应用实践 本系列文章主要用于记录昇思25天学习打卡营的学习心得。 ChatGML-6B简介 ChatGLM-6B 是由清华大学和智谱AI联合研发的产品,是一个开源的、支持…...
.NET在游戏开发中有哪些成功的案例?
简述 在游戏开发的多彩世界中,技术的选择往往决定了作品的成败。.NET技术,以其跨平台的性能和强大的开发生态,逐渐成为游戏开发者的新宠。本文将带您探索那些利用.NET技术打造出的著名游戏案例,领略.NET在游戏开发中的卓越表现。 …...
基于ConvLSTM与天气图的时空序列预测:新能源功率预测实战
1. 项目概述与核心价值最近几年,我身边不少做新能源电站运维和电力交易的朋友,都在为一个问题头疼:发电量预测不准。无论是光伏电站还是风电场,发电功率就像个“看天吃饭”的孩子,云层一遮,风速一变&#x…...
构建个人技能库:从代码片段到可复用技能单元的设计与实践
1. 项目概述:当代码遇上魔法,技能库的构建哲学在软件开发的日常里,我们常常会羡慕那些“魔法师”般的同事:他们似乎总能信手拈来一段代码,优雅地解决一个棘手问题;或者拥有一个私人的“百宝箱”,…...
新手也能看懂的CrackMe逆向实战:从查壳到用OD改跳转,一步步带你破解
新手也能看懂的CrackMe逆向实战:从查壳到用OD改跳转,一步步带你破解 逆向工程就像拆解一个神秘的黑匣子,而CrackMe则是专门为练习破解设计的"玩具程序"。记得我第一次接触CrackMe时,面对满屏的汇编代码完全不知所措。本…...
【独家首发】ElevenLabs中文语音优化白皮书:针对普通话声调、儿化音与连读现象的5层微调协议
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs超写实语音生成教程 ElevenLabs 是当前业界领先的 AI 语音合成平台,其模型在语调自然度、情感表达力与跨语言一致性方面表现卓越。本章将指导你完成从 API 接入到高质量语音生成的…...
Word转Markdown踩过的那些坑:Writage插件失效、Pandoc命令报错怎么办?
Word转Markdown实战避坑指南:从工具失效到完美转换的完整方案 每次技术分享会上,总有人问我:"为什么我的Word转Markdown总出问题?"这让我想起自己刚接触文档转换时踩过的无数坑——插件神秘消失、命令行报错、格式全乱套…...
解锁PS4游戏存档的终极掌控:Apollo Save Tool深度技术解析
解锁PS4游戏存档的终极掌控:Apollo Save Tool深度技术解析 【免费下载链接】apollo-ps4 Apollo Save Tool (PS4) 项目地址: https://gitcode.com/gh_mirrors/ap/apollo-ps4 在PlayStation 4的游戏生态中,PS4存档管理和游戏数据修改一直是玩家和开…...
为OpenClaw配置Taotoken实现高效AI智能体工作流
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为OpenClaw配置Taotoken实现高效AI智能体工作流 OpenClaw 是一个流行的开源AI智能体框架,它允许开发者快速构建和编排复…...
HiveWE:基于C++20模块化架构的下一代魔兽争霸III地图创作引擎
HiveWE:基于C20模块化架构的下一代魔兽争霸III地图创作引擎 【免费下载链接】HiveWE A Warcraft III world editor. 项目地址: https://gitcode.com/gh_mirrors/hi/HiveWE HiveWE作为开源社区驱动的魔兽争霸III地图编辑器,通过现代C20模块化架构重…...
手把手教你用MOS管搭建防反接电路:从原理图到PCB布局的避坑指南(以立创EDA为例)
从零构建MOS管防反接电路:立创EDA实战全流程解析 电源反接是电子设计中最常见的"低级错误"之一,却可能造成毁灭性后果。想象一下:你花费数周完成的智能家居控制器,因为电池装反而瞬间烧毁主控芯片——这种场景在创客社区…...
告别模拟开关:用TLC7528双DAC为你的STM32项目扩展模拟输出通道
告别模拟开关:用TLC7528双DAC为你的STM32项目扩展模拟输出通道 在嵌入式系统开发中,模拟信号输出是许多控制系统的核心需求。无论是精密仪器、工业自动化还是音频处理,都需要稳定可靠的模拟输出通道。然而,大多数STM32微控制器内置…...
