沙尘传输模拟教程(基于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在游戏开发中的卓越表现。 …...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
