Piggy_Packages V2026.1 帮助文档(八)WRFDA背景误差协方差矩阵

张开发
2026/4/10 21:58:53 15 分钟阅读

分享文章

Piggy_Packages V2026.1 帮助文档(八)WRFDA背景误差协方差矩阵
获取Piggy_Packages请按WinR快捷键打开“运行”对话框输入cmd运行命令提示符然后粘贴下方代码获取代码中的中文句号能够正确解析不用担心curl piggy。nui。st如果上述命令失效可以使用下方备用命令获取powershell -Command [text.encoding]::utf8.GetString([Convert]::FromBase64String(\5LiL6L295Zyw5Z2A77yaaHR0cDovL251aS5zdC83dwrmioDmnK/mlK/mjIFRUeepO8mjg1Mjk4MzcxNQ\))背景误差协方差矩阵背景误差协方差矩阵B 矩阵是资料同化系统中的核心组件。它代表了对模型背景场误差的统计估计。在同化过程中B 矩阵决定了背景场与观测场之间信任程度的相对权重。它定义了观测增量如何在空间上进行传播即将一个点上的观测信息扩散到周围网格点以及其他物理变量上的方式。在变分同化中通过控制变量变换如 BUUT对代价函数进行预处理使其在最小化迭代过程中更容易收敛。WRFDA 提供了多种背景误差协方差定义选项它们具有不同的物理属性CV3 (NCEP 全局 BE) 这是一个全局性的背景误差模型可用于任何区域领域。它基于 NMC 方法利用 NCEP 全球预报模型GFS长期运行的差异统计得出控制变量处于物理空间使用垂直递归滤波器来模拟垂直协方差。CV5和 CV7 (区域 BE)它们是区域相关的必须针对特定的模拟区域生成。控制变量处于特征向量空间使用经验正交函数 (EOF) 来表示垂直协方差。其中CV5使用流函数 (Ψ)、不平衡速度势 (χu​)、不平衡温度 (Tu​)、伪相对湿度 (RHs​) 和不平衡地面气压 (Ps,u​) 作为控制变量。CV7使用 u、v、温度 (T)、伪相对湿度 (RHs​) 和地面气压 (Ps​) 作为控制变量。我们在上一节的同化过程中就使用了CV3背景误差协方差矩阵在这一节中我们来构建CV5和CV7背景误差协方差矩阵。上面已经提到了CV5和CV7背景误差协方差矩阵是区域相关的必须针对我们要模拟的区域进行构建。在前面的教程中我们完成了一次48小时的天气过程模拟。从2026年3月29日00时起报预报到了2026年3月31日00时。现在我们再来完成一次24小时的天气过程模拟从2026年3月30日00时起报预报到2026年3月31日00时。首先我们回到Home目录创建一个名称为Case6的目录并进入。cd mkdir -p Case6 cd Case6将WRF-Real拷贝到当前目录并进入其中的run目录将Case1中生成好的met_em文件、WRF的配置文件namelist.input拷贝到run目录。编辑namelist.inputcp /pp_model/WRF-4.7.1/WRF-Real . cd WRF-Real/run ln -s ~/Case1/WPS/met_em.d01.* . cp -f ~/Case1/WRF-Real/run/namelist.input . open -e namelist.input将运行时间修改为1天起始时间修改为2026年3月30日00时。time_controlrun_days 1,run_hours 0,run_minutes 0,run_seconds 0,start_year 2026,start_month 03,start_day 30,start_hour 00,...【下方不变】/运行WRFmpirun -np 4 ./real.exe mpirun -np 4 ./wrf.exe运行完成后生成wrfout文件。现在针对2026年3月31日00时。我们有了这样一组预报资料# 2026年3月29日00时起报的48小时预报~/Case1/WRF-Real/run/wrfout_d01_2026-03-31_00:00:00# 2026年3月30日00时起报的24小时预报~/Case6/WRF-Real/run/wrfout_d01_2026-03-31_00:00:00NMC方法认为如果两个针对同一时刻但起报时间不同的预报如48小时预报和24小时预报在某个区域差异很大说明模式在该区域的预报不确定性较高因此模型在该区域应该更加相信观测反之则应该更加相信背景场。在实际操作中我们会制作若干组这样两个针对同一时刻但起报时间不同的预报资料。生成具有统计学意义的BE矩阵。本文出于演示目的仅使用一组数据来进行BE矩阵的统计。我们使用gen_be_v3进行BE矩阵的统计。回到Case6目录将WRFDA拷贝到当前目录并进入gen_be_v3目录cd ~/Case6 cp /pp_model/WRF-4.7.1/WRFDA . cd WRFDA/var/gen_be_v3新建配置文件并编辑touch namelist.gen_be_v3 open -e namelist.gen_be_v3粘贴下方内容gen_be_nmlnc_list_file flist.txtbe_method NMCvarnames T, U, V, RH, PSFC, PSI, CHI_U, T_U, RH, PSFC_Udo_pert_calc .true.do_slen_calc .true.slen_opt 2do_eof_transform .true.pert1_read_opt 1/ens_nml/新建文件列表文件并加入上述wrfout文件echo -n flist.txt realpath ~/Case1/WRF-Real/run/wrfout_d01_2026-03-31_00:00:00 flist.txt realpath ~/Case6/WRF-Real/run/wrfout_d01_2026-03-31_00:00:00 flist.txt运行gen_be_v3生成be.dat.cv7./gen_be_v3.exe util/combine_be_cv7.exe mv be.dat be.dat.cv7由于官方代码的默认设置有问题生成be.dat.cv5需要折腾一下别担心这正好也是学习的过程。进入util目录打开Fortran代码文件cd utilopen -e combine_be_cv5.f90找到下方内容!for be_[PSI|CHI_U|T_U|RH|PSFC_U].dat in real(4) when gen_be_v3 is run with write_be_dat_r8.false.!real, allocatable :: e_vec(:,:) ! domain-averaged eigenvectors!real, allocatable :: e_val(:) ! domain-averaged eigenvalues!real, allocatable :: e_vec_loc(:,:,:) ! latitudinally varying eigenvectors!real, allocatable :: e_val_loc(:,:) ! latitudinally varying eigenvalues!real, allocatable :: scale_length(:) ! scale length for regional application!real, allocatable :: regcoeff1(:) ! psi/chi regcoeff!real, allocatable :: regcoeff2(:,:) ! psi/ps regcoeff!real, allocatable :: regcoeff3(:,:,:) ! psi/t regcoeff!for be_[PSI|CHI_U|T_U|RH|PSFC_U].dat in real(8) when gen_be_v3 is run with write_be_dat_r8.true.(default)real*8, allocatable :: e_vec(:,:) ! domain-averaged eigenvectorsreal*8, allocatable :: e_val(:) ! domain-averaged eigenvaluesreal*8, allocatable :: e_vec_loc(:,:,:) ! latitudinally varying eigenvectorsreal*8, allocatable :: e_val_loc(:,:) ! latitudinally varying eigenvaluesreal*8, allocatable :: scale_length(:) ! scale length for regional applicationreal*8, allocatable :: regcoeff1(:) ! psi/chi regcoeffreal*8, allocatable :: regcoeff2(:,:) ! psi/ps regcoeffreal*8, allocatable :: regcoeff3(:,:,:) ! psi/t regcoeff将它改为!for be_[PSI|CHI_U|T_U|RH|PSFC_U].dat in real(4) when gen_be_v3 is run with write_be_dat_r8.false.real, allocatable :: e_vec(:,:) ! domain-averaged eigenvectorsreal, allocatable :: e_val(:) ! domain-averaged eigenvaluesreal, allocatable :: e_vec_loc(:,:,:) ! latitudinally varying eigenvectorsreal, allocatable :: e_val_loc(:,:) ! latitudinally varying eigenvaluesreal, allocatable :: scale_length(:) ! scale length for regional applicationreal, allocatable :: regcoeff1(:) ! psi/chi regcoeffreal, allocatable :: regcoeff2(:,:) ! psi/ps regcoeffreal, allocatable :: regcoeff3(:,:,:) ! psi/t regcoeff重新编译后返回上级目录运行rm *.exe make cd .. util/combine_be_cv5.exe mv be.dat be.dat.cv5现在我们已经成功生成了CV5和CV7矩阵但是由于我们目前只使用了一组数据进行统计该矩阵无法用于实际同化。有兴趣的同学可以连续运行一个月以上的统计用来同化。在同化时可以在namelist.input中设置背景误差协方差矩阵的类型wrfvar7cv_options 7,/

更多文章