郑艳萍
摘要:相对于GrADS等气象绘图软件,NCAR Command Language(简称NCL)在数据处理及可视化方面优势明显,故其用户群数量不断增加。为了更好地利用NCL工具为数值预报产品的解释应用服务,为天气预报和研究提供更实用的图形产品服务,从NCL的介绍、下载安装、数据分析处理及可视化四个方面介绍了NCL在气象业务中应用。
关键词:NCL;气象应用;数据处理;图形展示;数值预报
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2015)10-0093-03
NCAR Command Language(简称NCL)是美国国家大气研究中心专为科学数据处理及可视化而设计的高级语言[1-2],尤其是在气象数据分析处理方面优势明显,故其用户数量也不断增加。相对于GrADS等绘图软件,NCL的优势不仅表现在绘图更加细腻美观,更表现在它强大的数据处理能力,它包含了气象数据常用的分析方法,如样条插值、经验正交函数分解(EOF)、波谱分析等,此外,还可与Fortran、Shell进行混合编程,使得程序更加简洁高效,使用更加方便。这些优势使得NCL成为气象数据分析展示软件的后起之秀[3]。
数值预报产品是天气预报的重要参考依据之一[4-5],对数值预报产品的业务应用需求也越来越高。数值预报产品的数据分析及图形化就必不可少,针对这一迫切需求,本文利用NCL软件进行数值预报产品的诊断分析及图形化。主要介绍了NCL的安装、下载、编程思路,及在气象业务应用中的两部分关键技术:数据处理功能及可视化功能。
1 NCL软件的下载、安装及运行
NCL可以在AIX、Linux、Mac OS X 等系统上安装运行,对于Windows用户,可安装Cygwin/X软件后在这个软件环境中运行。NCL的官方下载地址:http://www.earthsystemgrid.org,注册之后,根据用户自身的系统选择相应的NCL版本。NCL在Unix系统上的安装不需要编译,只需要三个步骤:
1) 解压安装包
打开终端,将安装包解压到/home/yourname/ncl目录下:
# cd /home/yourname/ncl
# tar–xvfncl_ncarg-6.1.2.Linux_Debian6.0_x86_64_nodap_gcc445.tar.gz
2) 设置环境变量
用“echo $SHELL”返回当前系统所用的shell,若为C-shell(csh)则设置环境变量:
setenv NCARG_ROOT /home/yourname/ncl
setenv PATH $PATH:$NCARG_ROOT/bin
若为bash或ksh,则添加环境变量:
export NCARG_ROOT=/home/yourname/ncl
export PATH=$PATH:$NCARG_ROOT/bin
保存该文件后,运行source命令使环境变量生效。
3) 检验安装是否成功
安装好后,运行NCL自带的例子,检验下NCL是否已正确安装:
#cd /usr/ncl/lib/ncarg/nclex/xyplot
#ncl xy04n.ncl
若出现一组平面曲线图则说明测试通过。
更简便的测试可利用NCL提供了一个脚本程序“ng4ex”,运行一系列的范例,# ng4ex gsun01n,若弹出一个图形窗口显示XY坐标图,则说明安装成功。
NCL可直接在终端用命令行进行简单的测试,复杂的数据处理和图形化则用批处理脚本来实现。NCL脚本的编程思路大致分为步:1)加载NCARG库函数及共享对象,提供绘图及运算接口。2)读入需要处理的数据。3)打开一个绘图窗口。4)设置窗口图形的属性,包括绘图类型、线条颜色、底图等一系列属性。5)数据可视化。在此不作详细介绍。
2 NCL数据处理功能的业务应用
数据的加工处理是数值预报产品的解释应用的重要部分。NCL不仅支持多种数据数据格式的基本数学运算,如求平均、求最值、三角函数运算等,还具有完整的气象分析算法模块,并且具有Fortran外部代码的接口,支持用户自行编写的算法接入。这三大块构成了NCL数据处理的强大功能,为数值预报产品的诊断分析提供有效的支持。与传统的图形化工具相比,NCL在数据方面更为简洁高效,灵活多变。
2.1 NCL内置函数处理数据的方法
NCL支持多种数据格式的读写操作:NetCDF3/4,HDF4,HDF4-EOS,HDF5,HDF5-EOS,GRIB-1,GRIB-2,shapefile,ASCII和CCM History Tape format 格式,满足了不同用户对数据格式读写的需求。目前,数值预报产品种类丰富,不同的数值预报有各自不同的数据存储格式,为了能够将历史及实时资料完整、有序的存储并提供业务和研究应用,我省统一采用标准化的数据格式NetCDF存储数值预报数据[6]。
NCL内部提供了不同的数据处理方法:数组运算、基本数学运算和完整的气象分析算法模块[2]。其中气象分析算法是NCL数据处理的一大特色,它包含了经验正交函数展开法(EOF),滤波(Filters),小波分析(Wavelets)等常用的气象分析方法。此外,由于NCL是开源软件,用户也可使用NCL语言编写算法,嵌入软件使用。下面以站点到格点的插值为例介绍NCL的数据处理流程,原始数据为广东省自动站温度temp.csv,ASCII码格式,数据如下图所示:
1)读取数据
读入数据之后,将不同的要素分开并转换成需要的数据类型(部分代码):
fin = asciiread(“./temp.csv",nstn,"string")
delim = ","
sname = str_get_cols(str_get_field(fin,1,delim),1,5)
slon = stringtofloat(str_get_cols(str_get_field(stn,2,delim),1,8))
slat =......
2)插值计算
首先根据原始数据的密度,定义插值网格的分辨率为0.001°x0.001°:
resolution=0.001
nx = floattoint((max(slon)-min(slon))/resolution)
ny = floattoint((max(slat)-min(slat))/resolution)
glon = fspan(min(slon),(min(slon)+(nx+1)*resolution),nx)
glat = fspan(min(slat),(min(slat)+(ny+1)*resolution),ny)
定义好目标网格后,调用NCL内部插值函数进行插值计算:
gval = cssgrid(slat,slon,sval,glat,glon)
3)结果输出为NetCDF格式
首先打开一个输出文件:
fout= addfile ("./temp_out.nc", "c")
声明输出文件的格式定义模式:
setfileoption("nc","Format","NetCDF4Classic")
然后定义输出文件的全局属性、坐标范围、变量维数等信息,最后输出插值结果:
fout->lat= (/glat/)
fout->lon = (/glon/)
fout->temp= (/gval/)
详细的NetCDF文件定义过程请参考NCL官网,在此不做详述。
2.2外部代码接口处理数据的方法
除了运用内部算法进行数据处理外,NCL还提供了Fortran外部代码接口,用户可通过这个接口直接在NCL脚本内部调用Fortran代码。步骤也很简单,例如有代码thse.f包含计算假相当位温的算法:CAL_THSE(PLEV,STC,STD,NLEV,NSTN,THSE)
首先用NCL的WRAPIT将Fortran程序编译成共享对象:
#WRAPIT thse.f
生成共享对象thse.so,然后在NCL脚本内部加载该共享:
external FORTRAN “../thse.so”
调用thse.so计算:
FORTRAN::CAL_THSE(plev,stc,std,nlev,nstn,thse)
至此调用外部代码完成计算。需要注意的是NCL与Fortran之间的参数传递,由于NCL与Fortran的数组排列方式与数据类型有差异,数组定义时要特别小心。两者之间的数组对应关系如下图所示:
3 NCL可视化功能的业务应用
传统的气象分析中,一般先用Fortran等工具先进行数据处理后,再输入绘图软件显示。NCL将数据处理与可视化相结合,弥补了传统处理方式要分两步走的不足,为数值预报的分析展示带来了极大的便利。NCL的可视化功能同样不逊色于数据处理功能,为数值预报产品的展示提供有力支持。
3.1 NCL可绘制的图形类型
NCL支持多种图形格式:。且拥有超过40个的绘图模板,这些模板包括XY坐标图、等值线图、矢量图、流线图等,丰富的绘图模板满足了气象数据多样化的图形展示方式,为气象工作者提供更多选择。图形类型分类如下表所示:
同时,NCL还提供了丰富的色彩库[8],定义了上百种颜色搭配表供用户选择,颜色搭配表种类丰富、色彩搭配科学美观,为气象数据的可视化带来美感。我省利用NCL丰富的绘图模板及色彩库,得到了一系列美观实用的数值预报产品,如下图所示。
3.2 NCL与ImageMagick的联合应用
除了自身丰富的可视化处理,NCL还可与ImageMagick(简称IM)图像处理软件联合使用,极大得提高了图形处理能力。IM是强大的图片处理工具,可对图片进行缩放、剪切、叠加等[7]。NCL可有效利用IM的功能,实现图片的再加工:图片叠加、做成动画等。本文利用IM的叠加能力对气象场met.png和地图map.png进行叠加,代码如下:
system("composite -compose Multiply -gravity center met.png map.png met_map.png")
这样避免了批量画图时重复画地图消耗过多时间,不仅可以大幅提高出图效率,又方便用户根据需要重新设计地图,比如加入地形高度信息等。
如果需要生动地表现气象要素的变化过程,可按时间顺序将气象要素图做成动画,其中delay为每幅图的时间间隔,pngname为一组图片,animation为输出的动画,代码如下:
system("convert -delay 100 pngname.ps animation.gif")
4 结论
NCL是集数据分析处理和可视化于一身的高级语言,利用其基本数学运算、气象分析算法模块及其Fortran接口,实现了对数值预报产品的分析加工,计算诊断分析物理量,进行插值计算等,进一步挖掘了数值预报产品的价值;利用其丰富的绘图模板、色彩库及ImageMagick的联合使用,使可视化方式更加灵活多变,绘图速度更加快捷。目前,基于NCL平台的数值预报产品分析及可视化系统已业务化运行,每日为预报员提供上万张数值预报产品再分析图,为预报预测提供有力的保障。
参考文献:
[1] National Center for Atmospheric Reseach.NCAR Command Language Mini Graphics Manual[Z].Document Version 1.3,NCL 6.0.0,march ,2011.
[2] National Center for Atmospheric Research.NCAR Command Language Mini-Language Reference Manual[Z].Document Version 1.1.10,NCL 6.1.2,September,2014.
[3] 王继竹,王咏青,李春虎.NCL在气象数据图形化中的应用[J].山东气象,2007,27(109):33-36.
[4] 林良勋, 冯业荣, 黄忠, 等.广东省天气预报技术手册[ M]. 北京:气象出版社, 2006.
[5] 温之平,吴乃庚,冯业荣,等.定量诊断华南春旱的形成机理[J].大气科学, 2007,31(6):1223-1236.
[6] 李永生,刘修伟,杨玉红.气象大数据跨平台分析与应用技术研究[J].电脑知识与技术,2013,9(31):6943-6947.
[7]ImageMagick:Convert,Edit,Or Compose Bitmap Images[EB/OL]. http://www.imagemagick.org/.
[8]Color Table Gallery[EB/OL].http://www.ncl.ucar.edu/Document/Graphics/color_table_gallery.shtml.