Prepbufr introduction and decoding

Prepbufr 格式数据介绍及解码

Prepbufr的背景及介绍

PrepBUFR是NCEP在WMO BUFR格式的基础上,对码表内容进行扩充的数据格式,不仅包含观测数据,还包含观测误差、背景场等信息。该格式目前是NCEP业务模式与同化系统(GSI)所使用的常规观测资料数据格式。RAP/HRRR同样也使用了这套观测数据格式。国内也有引进RAP/HRRR区域数值预报系统,如武汉暴雨研究所,福建省局等。中国气象局数值预报中心的GRAPES模式中观测是文本文件,没有直接使用Prepbufr。

NCEP Prepbufr介绍:https://www.emc.ncep.noaa.gov/mmb/data_processing/prepbufr.doc/document.htm
GSI同化系统中Prepbufr介绍:
https://dtcenter.org/sites/default/files/community-code/gsi/downloads/BUFR/presentations/gsi-tutorial-bufr/L6-06292011-BUFRandPrepBUFR-Ruifang_Li.pdf
http://www.dtcenter.org/sites/default/files/community-code/gsi/downloads/BUFR/BUFR_PrepBUFR_User_Guide_v1.pdf

NCEP数据处理系统流程

Prepbufr由美国NCEP的质量控制系统(obsproc)生成,而质控控制系统也是结合数值模式来运行,对比和背景场的差异。当然也可以单独运行,但质量控制效果就差很多,背景场本质代表过去的观测对当前的影响。总体分为以下步骤:

  1. PREPOBS_PREPDATA
    总体质量控制

  2. GLERLADJ
    对水体周边观测的调整

  3. PREVENTS
    在气候模式分析准备观测资料时运行
    比照背景场,对地面气压进行一些粗略的质量控制检查

  4. CQCBUFR
    对探空观测的质控

  5. PROFCQC
    对飞机观测的质控

  6. PREPACQC
    对风廓线仪观测的质控

  7. OIQCBUFR
    卡住值检查
    使用所有的观测来执行独立的质控检查

obsproc对不同尺度的分析质量控制过程不一样:如全球预报系统GFS,RAP/HRRR,以及中尺度实况分析RTMA。

GFS全球预报系统:https://www.emc.ncep.noaa.gov/mmb/data_processing/prepbufr.doc/table_2.htm

RAP/HRRR区域模式:https://www.emc.ncep.noaa.gov/mmb/data_processing/prepbufr.doc/table_5.htm

NAM北美区域模式:https://www.emc.ncep.noaa.gov/mmb/data_processing/prepbufr.doc/table_4.htm

RTMA中尺度实况分析:https://www.emc.ncep.noaa.gov/mmb/data_processing/prepbufr.doc/table_19.htm
更多信息请访问:https://www.emc.ncep.noaa.gov/mmb/data_processing/prepbufr.doc/

质控码表: https://www.emc.ncep.noaa.gov/mmb/data_processing/prepbufr.doc/table_7.htm
其中质控码小于2的认为是质量比较好的观测,比如WRFDA中质控码设置的就是2。

关于NCEP质量控制的更多信息请参见上面NCEP的Prepbufr介绍。

NCEP obsproc 源代码地址: https://www.nco.ncep.noaa.gov/pmb/codes/nwprod/

安装bufrlib及其他解码程序

NCEP对bufr的编码和解码用bufrlib库,欧洲中心的eccodes也可以对bufr进行操作,但本人没尝试成功。

基于bufrlib库,目前有很多现成的解码程序使用,如:

  • GSI同化系统中的Fortan解码程序: GSI/util/bufr_tools

  • NCEP ADP BUFR 转little r程序

  • 美国卫星联合同化中心(JCSDA)开发的Python库:pyncepbufr

1. 编译bufrlib

下载bufrlib源码:https://emc.ncep.noaa.gov/emc/pages/infrastructure/bufrlib.php

1
2
3
4
5
6
7
8
9
10
11
12
tar xvf BUFRLIB_v11-3-0.tar

 CC=gcc
 FC=gfortan

 -O3 -DUNDERSCORE -w  -c `./getdefflags_C.sh` *.c

 -O3 -DUNDERSCORE -fno-second-underscore -w  -c `./getdefflags_F.sh` modv*.F moda*.F `ls -1 *.F *.f | grep -v `

ar crv bufrlib.a *.o

2. 编译GSI中bufr工具

本人在解码最新的prepbufr时有点问题,需要在src/bufr_sfc2ob.f中第267行再加一个判断,改为:
if(M1(1:1) == 'm’ .or. M1(2:2) == 'm’) then

  • 编译:修改install/install.sh第22行,改为bufrlib.a所在的路径。然后执行install/install.sh

  • 编译成功后,在exe下生成如下可执行文件:bufr_sfc2ob.x bufr_ship2ob.x dumpbufr.x runob2lit_imd_obs.x

3. 安装py-ncepbufr

解码及绘图

下载Prepbufr数据,实时的可在nomads(NOAA模式存档和分发系统)下载:https://nomads.ncep.noaa.gov/

历史的可在NCAR RDA网站可下载:https://rda.ucar.edu/datasets/ds337.0/

下面以GFS的观测数据为例做解码:https://nomads.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.20210130/00/gfs.t00z.prepbufr.nr
里面包含了,地面站,探空站,浮标船舶,GPS以及卫星风等。
单独的bufr文件如:

文件名 观测类型
gfs.t00z.adpsfc.tm00.bufr_d.nr 地面数据
gfs.t00z.adpupa.tm00.bufr_d 探空数据
gfs.t00z.aircar.tm00.bufr_d.nr 飞机报
gfs.t00z.gpsipw.tm00.bufr_d.nr GPS
gfs.t00z.satwnd.tm00.bufr_d 卫星风
还有很多其他的观测类型数据,就不一一列出了。

1. 下载Prepbufr数据

1
2
3
4
lftp -e 

mv gfs.t00z.prepbufr.nr gfs.2021013000.prepbufr

2. 使用prepbufr_decode_all_evn.exe

1
2
3
4
ln -s gfs.2021013000.prepbufr prepbufr

./prepbufr_decode_all_evn.exe > gfs.2021013000_qc.txt

gfs.2021013000_qc.txt为解码后的结果,以北京站54511为例:

解码结果,54511地面站

其中,obs为观测值,qcf为质控码。

3. 使用rda-bufr-decode-ADPsfc程序包

1
2
3
./exe/bufr_sfc2ob.x gfs.t00z.adpsfc.tm00.bufr_d.nr 2021013000

Surface2021011400.obs为解码后的结果。

1
2
3
4
Surface2021013000.obs > files.txt

./exe/runob2lit_imd_obs.x files.txt 2021013000

SURFACE_OBS:2021013000为转换后的little r格式数据。

4. 使用py-ncepbufr

读取数据和质控码程序如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
__future__  print_function
 argparse
 datetime  datetime, timedelta
 ncepbufr
 os
 sys

parser = argparse.ArgumentParser()

parser.add_argument(, , =, required=)

args = parser.parse_args()

hdstr=
obstr=
qcstr=
oestr=

bufr = ncepbufr.(args.file)
 bufr.advance() == :
    ref_time = datetime.strptime((bufr.msg_date), )
     bufr.load_subset() == :
        hdr = bufr.read_subset(hdstr).squeeze()
:
          station_id = hdr[].tostring()
         Exception  e:
          station_id =
        obs = bufr.read_subset(obstr)
        nlevs = obs.shape[-]
        oer = bufr.read_subset(oestr)
        qcf = bufr.read_subset(qcstr)
        time = ref_time + timedelta(seconds=hdr[]*)
        print( % (station_id,hdr[],hdr[],time,(hdr[]),nlevs))
        print(obs)
bufr.close()

运行解码程序:

1
python read_prepbufr.py -f gfs.2021013000.prepbufr

通过修改以上程序,可以获得个性化输出,比如输出POB QOB TOB即为气压,湿度,温度等。

此外,py-ncepbufr也提供了一些小工具,如:py-ncepbufr/utils/{prepbufr2nc,nc2prepbufr}等。

4. 使用MET画观测分布

MET是模式检验工具,全称The Model Evaluation Tools,the Developmental Testbed Center所开发。

在线文档:https://dtcenter.github.io/MET/latest/Users_Guide/index.html

MET有现成的docker镜像,可pull下来直接食用。还有相应的Python脚本程序metplus

1
docker pull dtcenter/met
  1. Prepbufr转为netcdf

1
pb2nc gfs.2021013000.prepbufr gdas_2021013000.nc PB2NCConfig
  1. 画地面站分布

1
plot_point_obs -msg_typ ADPSFC gdas_2021013000.nc gdas_2021013000_adpsfc.ps

全球地面站分布

  1. 画探空站分布

1
plot_point_obs -msg_typ ADPUPA gdas_2021013000.nc gdas_2021013000_adpupa.ps

全球探空站分布

写在最后:

以上解码Prepbufr我们可以获得完整的全球GTS交换数据。对于国内常常拿不到的常规观测或探空,通过解码Prepbufr获取也不失为一种“正当途径”。

原文链接:https://wangrenz.github.io/2021/01/31/Prepbufr-introduction-and-decoding/

(0)

相关推荐

  • OBS Studio 27.0.1

    前言 OBS,全称是Open Broadcaster Software,这是一款开源的直播软件.这款软件占用资源较少,对配置要求较低,深受主播的喜爱.(录制屏幕直播). 根据官方网站的介绍,软件仅可在 ...

  • obs怎么改录像保存位置?

    更改录像保存位置还是比较简单的,打开obs,点击设置.按照图中所示步骤,选择你想要保存的路径即可.

  • 基于3DSlicer和OBS的神经外科AR技术

    本视频演示了通过开源3DSlicer和开源OBS软件实现AR效果.效果的实现不同于既往手机APP,是建立在电脑摄像头之上,实际应用中,需要提前对手术室设备配置好!这种增强现实不仅可以依靠体表定位,甚至 ...

  • 【研究模型】事件研究法

    事件研究方法最早是被应用在金融领域,由Dolly在1933年提出,后经过Ball.Brown以及Fama等研究才最终成熟.该方法本质是一种针对某项经济事件对资产价格造成影响的程度和持续时间进行度量以及 ...

  • 湖南翻译名家 || 库库君:《陈逵中英诗文选》:序及Introduction

    序 弼猷先生诗语出自然,不拘绳墨,然佳句连篇,警句屡见,无不耐人吟味,启人深思,颇得魏晋风骨. 司马迁作<史记>,屈原与贾谊合传,实独具慧眼,别出心裁.后人因之,常屈贾并论,共祀一祠.二人 ...

  • 怎样写好英文论文的 Introduction 部分?

    在论文写作过程中,很多同学搞不清abstract和introduction的区别,认为这两个部分都是一样的,由于概念的模糊导致introduction的写作存在问题.那么什么是introduction ...

  • Introduction to forest plots

    Max Gordon2020-12-11TextTable of textSummary linesAdding vertices to the whiskersPositioning the gra ...

  • 学霸总结的Introduction写作小技巧

    有多少同学第一次写英语论文,开头直接就写"Introduction"? 然后,按照先后顺序Introduction→Body→Conclusion 这样老老实实规规矩矩写完,成绩下 ...

  • SCI论文写作套路(3):四段式Introduction模板!

    本文是笔者总结的SCI论文写作套路系列第三期,主要分享SCI论文Introduction部分的写作经验. 笔者也是从科研小白逐渐成长起来的,因此能够理解科研小白对SCI写作套路的需求.笔者特意选取了2 ...

  • 引言(Introduction)和研究背景(Background)有什么区别?

    首先认清一个基本事实:引言(Introduction)部分的内容包含了研究背景(Background),研究背景是引言的一个子集. 引言的功能是向读者介绍基本内容和框架.论文的引言部分通常包含以下内容 ...

  • 英文论文101系列之40 Model Essays|Introduction

    编译/Muzuer 因为本科是中文系的,在英文世界闯荡写论文,自然要遵从英文的"八股",这本40 Model Essays可以说是我在学习过程中备受教授.朋友推荐的一本浅显易懂的教 ...

  • Introduction怎么写?常用句型总结

    Introduction引言是英文论文的引言部分,也是整篇英文论文中举足轻重的部分. 我们可以从introduction部分了解论文的研究方向.过程和结果. 相比于其他部分来说,introductio ...

  • 如何轻松漂亮地写出Introduction!

    iJournal 学术期刊信息查询 217篇原创内容 Official Account 本期与大家分享SCI论文写作中的Introduction的结构写法. Introduction是论文的序幕,目的 ...