【WRFDA教程第二期】运行WRFDA 3DVAR/4DVAR数据同化
目录
- 一、准备阶段:下载并解压测试数据
- 二、运行 3DVAR 教学实验
-
- 日志分析(wrfda.log)
- 进阶实验建议:对比不同设置的影响
- 输出文件说明
- 三、运行 4DVAR 教学实验
-
- 步骤1:准备工作目录与环境变量
- 步骤2:链接可执行文件与输入数据
- 步骤3:配置 namelist.input
- 步骤4:可选-使用边界条件控制变量(var4d_lbc)
- 如果使用 PREPBUFR 格式观测数据
- 运行 WRFDA 4DVAR
- 输出文件说明
- 另:运行建议与调试技巧
- 嵌套域说明
- 参考
观测预处理程序(OBSPROC)的详细介绍可参见另一博客-【WRFDA运行第一期】运行观测预处理程序(OBSPROC)。
本博客针对 WRFDA 教程中 “运行WRFDA”章节进行详细介绍。
一、准备阶段:下载并解压测试数据
WRFDA 运行需要 3 个主要输入文件:
步骤一:设置数据目录环境变量
根据系统选择适当的设置代码:
# setenv DAT_DIR /your/path/to/data# shellexport DAT_DIR=/path/to/your/dat_direxport DAT_DIR=WRFDA_input_dataexport DAT_DIR=$HOME/WRFDA/Test_data/
步骤二:下载并解压测试数据
从 WRFDA-测试数据下载页面 获取 WRFDAV4.0-testdata.tar.gz,存入 $DAT_DIR,然后:
输入以下命令:
cd $DAT_DIRgunzip WRFDAV4.0-testdata.tar.gztar -xvf WRFDAV4.0-testdata.tar
解压后应看到以下文件:
ob/2008020512/ob.2008020512 # LITTLE_R 格式观测数据rc/2008020512/wrfinput_d01 # 第一猜测场rc/2008020512/wrfbdy_d01 # 边界条件文件be/be.dat # 背景误差统计文件
获取以上三类数据(第一猜测场、LITTLE_R 格式观测数据和背景误差统计文件),并成功编译WRFDA后,可进行接下来的 3DVAR/4DVAR 教学实验。
二、运行 3DVAR 教学实验
步骤一:创建工作目录并设置环境变量
输入以下命令:
mkdir -p $HOME/WRFDA/workdirmkdir -p $WRFDA_DIR/workdircd $WRFDA_DIR/workdir# 设置环境setenv WORK_DIR $WRFDA_DIR/workdir# shell设置环境export WORK_DIR=/path/to/your/work_direxport WORK_DIR=WRFDA_input_dataexport WORK_DIR=$HOME/WRFDA/workdir
步骤二:准备文件和链接
教程中案例数据为12 UTC 5 February 2008。第一猜测场来源于NCEP FNL (Final) Operational Global Analysis data。
总结所需的文件如下:
输入以下命令:
# 进入工作环境cd $WORK_DIR# 复制文件cp $DAT_DIR/namelist.input.3dvar namelist.input# 链接文件ln -sf $WRFDA_DIR/run/LANDUSE.TBL .ln -sf $DAT_DIR/rc/2008020512/wrfinput_d01 ./fgln -sf $DAT_DIR/ob/2008020512/obs_gts_2008-02-05_12:00:00.3DVAR ./ob.asciiln -sf $DAT_DIR/be/be.dat .ln -sf $WRFDA_DIR/var/da/da_wrfvar.exe .
步骤三:编辑 namelist.input(如无特殊需求可不修改)
如是进行案例模型,无需对 namelist.input文件 进行修改。
关键设置如下:
&wrfvar1 var4d = false,/&wrfvar3 ob_format = 2, # 2 表示 ASCII 格式观测数据/&wrfvar6 max_ext_its = 1, ntmax = 50, orthonorm_gradient = true,/&wrfvar7 cv_options = 5, # 使用 CV5 背景误差选项/&wrfvar18 analysis_date=\"2008-02-05_12:00:00.0000\",/&wrfvar21 time_window_min=\"2008-02-05_11:00:00.0000\",/&wrfvar22 time_window_max=\"2008-02-05_13:00:00.0000\",/&domains e_we=90, e_sn=60, e_vert=41, dx=60000, dy=60000,/&physics mp_physics=3, ra_lw_physics=1, ra_sw_physics=1, bl_pbl_physics=1, cu_physics=1,/
📝 若使用 PREPBUFR 观测数据,请将 ob_format=1,并链接 ob.bufr 文件。
ln -fs $DAT_DIR/ob/2008020512/gdas1.t12z.prepbufr.nr ob.bufr
步骤四:执行 WRFDA
./da_wrfvar.exe >& wrfda.log# 8核并行mpirun –np 8 ./da_wrfvar.exe
成功运行后:
- 会生成 wrfvar_output(WRFDA 分析场,即新的 wrfinput)
- 会生成 namelist.output.da(完整 namelist 输出)
- 日志文件为 wrfda.log 或 rsl.out.0000
输出文件总结如下:
*** VARIATIONAL ANALYSIS *** WRFDA V4.1 DYNAMICS OPTION: Eulerian Mass Coordinate alloc_space_field: domain 1 , 499448408 bytes allocatedhybrid_opt = 0 Tile Strategy is not specified. Assuming 1D-YWRF TILE 1 IS 1 IE 89 JS 1 JE 59WRF NUMBER OF TILES = 1Domain mapping info:map_proj = 1cen_lat = 0.400000E+02cen_lon = -0.950000E+02truelat1 = 0.300000E+02truelat2 = 0.600000E+02start_lat = 0.207406E+02start_lon = -0.119501E+03pole_lat = 0.900000E+02dsm = 0.600000E+02 Set up observations (ob) Using ASCII format observation input Observation summary ob time 1 sound 86 global, 86 local synop 750 global, 750 local pilot 85 global, 85 local satem 105 global, 105 local geoamv 2499 global, 2499 local airep 221 global, 221 local gpspw 187 global, 187 local gpsrf 3 global, 3 local metar 2408 global, 2408 local ships 140 global, 140 local qscat 2126 global, 2126 local profiler 61 global, 61 local buoy 247 global, 247 local sonde_sfc 86 global, 86 local Set up background errors for regional application for cv_options = 5 Using the averaged regression coefficients for unbalanced part cloud_cv_options = 0 WRFDA dry control variables are: psi, chi_u, t_u and ps_u WRFDA Humidity control variable is rh Vertical truncation for psi = 15( 99.00%) Vertical truncation for chi_u = 20( 99.00%) Vertical truncation for t_u = 29( 99.00%) Vertical truncation for rh = 22( 99.00%) Scaling: var, len, ds: 0.100000E+01 0.100000E+01 0.600000E+05 Scaling: var, len, ds: 0.100000E+01 0.100000E+01 0.600000E+05 Scaling: var, len, ds: 0.100000E+01 0.100000E+01 0.600000E+05 Scaling: var, len, ds: 0.100000E+01 0.100000E+01 0.600000E+05 Scaling: var, len, ds: 0.100000E+01 0.100000E+01 0.600000E+05Calculate innovation vector(iv) Minimize cost function using CG method Starting outer iteration : 1Starting cost function: 5.366048535905661D+04, Gradient= 8.134548965597619D+02For this outer iteration gradient target is: 8.134548965597618D+00---------------------------------------------------------------------- Loop Iter Cost Function Gradient Stepminimize_cg 1 0 5.366048535905661D+04 8.134548965597619D+02 0.000000000000000D+00minimize_cg 1 1 4.160895118661885D+04 4.087246011996226D+02 3.642548782952763D-02minimize_cg 1 2 3.684015367850271D+04 3.371798989064126D+02 5.709227119079368D-02minimize_cg 1 3 3.374263324064368D+04 2.579817263649239D+02 5.449050389717097D-02minimize_cg 1 4 3.163760162325043D+04 1.959172950097825D+02 6.325731144809946D-02minimize_cg 1 5 3.069560214937115D+04 1.426201418835412D+02 4.908345259881822D-02minimize_cg 1 6 2.994553670826729D+04 1.016946487735333D+02 7.375091679036799D-02minimize_cg 1 7 2.963703986213524D+04 8.614527420925806D+01 5.966017496500481D-02minimize_cg 1 8 2.944840596364260D+04 5.586889886231801D+01 5.083780846639206D-02minimize_cg 1 9 2.932974897428447D+04 4.810455663750825D+01 7.602966851781012D-02minimize_cg 1 10 2.925909806811914D+04 3.154639503336832D+01 6.106260102681394D-02minimize_cg 1 11 2.922595474924949D+04 2.511864257306522D+01 6.660801879172493D-02minimize_cg 1 12 2.920702117122884D+04 1.953264766296704D+01 6.001645744010778D-02minimize_cg 1 13 2.919536455912784D+04 1.421581370380062D+01 6.110547268188220D-02minimize_cg 1 14 2.918931706353119D+04 1.000448731094664D+01 5.984971814842433D-02minimize_cg 1 15 2.918568177329574D+04 7.457040724273403D+00 7.264059789587740D-02---------------------------------------------------------------------- Inner iteration stopped after 15 iterations Final: 15 iter, J= 2.918568177329574D+04, g= 7.457040724273385D+00---------------------------------------------------------------------- Diagnostics Final cost function J = 29185.68 Total number of obs. = 37570 Final value of J = 29185.68177 Final value of Jo = 23086.99122 Final value of Jd = 0.00000 Final value of Jb = 6098.69056 Final value of Jc = 0.00000 Final value of Je = 0.00000 Final value of Jp = 0.00000 Final value of Jl = 0.00000 Final J / total num_obs = 0.77683 Jb factor used(1) = 1.00000 Jb factor used(2) = 1.00000 Jb factor used(3) = 1.00000 Jb factor used(4) = 1.00000 Jb factor used(5) = 1.00000 Jb factor used = 1.00000 Je factor used = 1.00000 VarBC factor used = 10.00000 *** WRF-Var completed successfully ***
日志分析(wrfda.log)
日志中包含:
- 观测数据类型统计(如 METAR、SHIP、GPSPW 等)
- 成本函数最小化过程(CG 迭代)
- 最终分析结果:
Final value of J = 29185.68177Final value of Jo = 23086.99122 # 观测项Final value of Jb = 6098.69056 # 背景项Total number of obs. = 37570
表示 WRFDA 成功完成,并对观测与背景信息进行最优化融合。
进阶实验建议:对比不同设置的影响
1️⃣ 收敛性测试(更严格的收敛条件)
&wrfvar6 eps = 0.0001,/
2️⃣ 激活外循环(outer loop)
&wrfvar6 max_ext_its = 2,/
⚠️ 若启用 outer loop 且使用 CV3,需要指定 as1~as5 缩放因子。
3️⃣ 控制观测类型参与同化
在 &wrfvar4 中关闭某类观测,例如关闭 SYNOP:
use_synopobs = false,
输出文件说明
三、运行 4DVAR 教学实验
目标:使用 WRFDA 4DVAR 运行 2008 年 2 月 5 日 12UTC 的教学案例, assimilate 6 小时窗口内(12UTC–18UTC) 的常规观测数据。
步骤1:准备工作目录与环境变量
setenv WRFDA_DIR /your/path/to/WRFDAmkdir -p $WRFDA_DIR/workdircd $WRFDA_DIR/workdirsetenv WORK_DIR $WRFDA_DIR/workdirsetenv DAT_DIR /your/path/to/testdata
测试数据中应包含如下子目录:
$DAT_DIR/├── ob/2008020512/├── ob/2008020513/├── ob/2008020514/├── ob/2008020515/├── ob/2008020516/├── ob/2008020517/├── ob/2008020518/├── rc/2008020512/└── be/
步骤2:链接可执行文件与输入数据
1. 链接 da_wrfvar.exe 执行文件:
ln -fs $WRFDA_DIR/var/da/da_wrfvar.exe .
2. 链接 7 个小时槽(slots)内的观测数据(ASCII 格式)
ln -fs $DAT_DIR/ob/2008020512/ob01.ascii ob01.asciiln -fs $DAT_DIR/ob/2008020513/ob02.ascii ob02.asciiln -fs $DAT_DIR/ob/2008020514/ob03.ascii ob03.asciiln -fs $DAT_DIR/ob/2008020515/ob04.ascii ob04.asciiln -fs $DAT_DIR/ob/2008020516/ob05.ascii ob05.asciiln -fs $DAT_DIR/ob/2008020517/ob06.ascii ob06.asciiln -fs $DAT_DIR/ob/2008020518/ob07.ascii ob07.ascii
3. 链接第一猜测 wrfinput、边界条件、背景误差文件等
ln -fs $DAT_DIR/rc/2008020512/wrfinput_d01 .ln -fs $DAT_DIR/rc/2008020512/wrfbdy_d01 .ln -fs wrfinput_d01 fgln -fs $DAT_DIR/be/be.dat .
4. 链接运行所需的静态表格文件
ln -fs $WRFDA_DIR/run/LANDUSE.TBL .ln -fs $WRFDA_DIR/run/GENPARM.TBL .ln -fs $WRFDA_DIR/run/SOILPARM.TBL .ln -fs $WRFDA_DIR/run/VEGPARM.TBL .ln -fs $WRFDA_DIR/run/RRTM_DATA_DBL RRTM_DATAln -fs $WRFDA_DIR/run/CAMtr_volume_mixing_ratio .
⚠️ CAMtr_volume_mixing_ratio 是从 WRFDA v4.4 开始进行 4DVAR 所需文件。
步骤3:配置 namelist.input
cp $DAT_DIR/namelist.input.4dvar namelist.input
✏️ 修改以下关键参数:
1. 开启 4DVAR 功能
&wrfvar1 var4d = true, var4d_lbc = false, ! 若不处理边界条件,请设为 false var4d_bin = 3600, ! 每小时一个槽 slot/
2. 时间设置(必须一致)
&wrfvar18 analysis_date=\"2008-02-05_12:00:00.0000\",/&wrfvar21 time_window_min=\"2008-02-05_12:00:00.0000\",/&wrfvar22 time_window_max=\"2008-02-05_18:00:00.0000\",/&time_control run_hours = 6, start_year = 2008, start_month = 02, start_day = 05, start_hour = 12, end_year = 2008, end_month = 02, end_day = 05, end_hour = 18, interval_seconds = 21600, debug_level = 0,/
✅ analysis_date、time_window_min、start_hour 必须一致,time_window_max = end_hour,run_hours 为时间窗口长度(单位小时)。
步骤4:可选-使用边界条件控制变量(var4d_lbc)
如需启用边界控制变量,请:
1、设置 var4d_lbc = true
2、链接时间窗口末尾的 wrfinput_d01 文件:
ln -fs $DAT_DIR/rc/2008020518/wrfinput_d01 fg02
⚠️ 初学者建议关闭该功能(false),直到完全理解其原理。
如果使用 PREPBUFR 格式观测数据
1、设置:
&wrfvar3 ob_format = 1,/
2、链接数据文件:
ln -fs $DAT_DIR/ob/2008020512/gdas1.t12z.prepbufr.nr ob01.bufrln -fs $DAT_DIR/ob/2008020518/gdas1.t18z.prepbufr.nr ob02.bufr
运行 WRFDA 4DVAR
单核运行:
./da_wrfvar.exe >& wrfda.log
并行运行(推荐):
mpirun -np 4 ./da_wrfvar.exe >& wrfda.log &
✅ MPI 命令依赖于平台,日志将输出至 rsl.out.0000、rsl.error.0000 等文件。
输出文件说明
另:运行建议与调试技巧
✅ 减少迭代次数(加快运行)
&wrfvar6 ntmax = 30,/
✅ 检查观测数据是否正确被读取
在日志中查找:
Observation summary ob time 1 metar = xxxx ship = xxxx pilot = xxxx ...
✅ 代价函数最小化过程示例(日志中):
Starting outer iteration : 1Starting cost function: 5.3E+04, Gradient= 8.1E+02...Final value of J = 2.91E+04
嵌套域说明
WRFDA一次只能处理一个文件/域:
- 如果想为多个文件/域运行 WRFDA,则需要为每个文件/域 分开运行WRFDA