夏达忠,刘 艳,罗锡斌,蔡和荷
(1.河海大学水文水资源学院,江苏 南京 210098;2.国网重庆市电力公司,重庆 400015)
气候预报系统(CFS,Climate Forecast System)是美国国家环境预报中心(NCEP,National Centers for Environmental Prediction)开发的一个完全耦合模型,包括了大气、海洋、陆地三个模式。2011年3月30日,第二代气候预报系统(CFSv2,The NCEP Climate Forecast System Version 2)[1]在NCEP官网开始运行并且定期发布数据。CFSv2数据产品在预报模型和数据同化系统上都有改进,其大气、海洋、陆地三个模式分别采用全球预报系统模式(GFS)、第四代模块化海洋模式(MOM4)、四层陆面模式(NOAH)。
迄今为止,针对CFS预报数据展开的研究甚多。陈官军等(2010)[2]检验评估了CFS对东亚夏季的延伸预报。李春晖等(2012)[3]基于CFS预报产品对广东省季节降水统计降尺度进行预测。李永生等(2016)[4]评估了CFSv2模式在东北地区对于夏季月降水的预测能力效果相对较好。班晋等(2019)[5]基于CFSv2预测资料研究黑龙江夏季降水趋势结果优于目前业务。李浪等(2020)[6]利用CFSv2未来45 d产品数据评估其对贵州一次区域暴雨过程的预报能力在15~10 d时段较好。
中长期预报可以延长水文预报预见期,能够对流域洪水起到预警作用,以及方便制订远期水电调度规划。王留杰等(2017)[7]对中国区域地面要素数据集的降水气温数据进行了质量评估,发现气象网格数据与实测数据拟合度较高。余豪等(2020)[8]采用时间序列中长期预报方法耦合动态规划优化调度方法制定泗南江水电站的中长期预报调度方案。降雨数据的预见期对中长期预报的影响最大;因此,对具有较长预见期的CFS数据的质量评估以及水文应用研究很有必要。
由于CFSv2数据原格式解译需要一些复杂的处理过程,目前对于其可视化处理的研究还很少。因此,本次研究针对第二代CFS数据的下载到处理到绘图,设计并构建了一个实用的地理信息系统插件,利用Python将其处理为具有较好可观性的等值线图。
CFSv2模式预见期长度为9个月,时间分辨率为6 h[9]。该产品以每24小时为一个周期定时发布当天对当年(或九个月内)全球未来气候的预测情况,发布的文件格式为GRIB2格式编码。每份GRIB文件内部包含对未来某一时刻开始的6 h数据信息[10]。
GRIB对象是数据的子类,可以通过解析方法将其中的数据转换为栅格数据。其解码及可视化软件众多,本文最终采用Wingrib对其进行解码。GRIB2格式是GRIB第二版。较之前版本(GRIB1)有着支持多维数据、模块化结构、多种压缩方式、IEEE标准浮点表示法等优势[11];因此得到了广泛使用,并逐步替代了ADF文件。
由于本项目使用的数据众多,如果以直接显示的形式将不便于使用者对数据进行进一步的分析以及归纳研究;因此,本项目数据将以等值线图的方式进行呈现。
等值线是指在平面上(见图1),由某一数量指标值相等的各点连成的平滑曲线。在该曲线上的点均满足表达式F(x,y)=P。当平面内存在多个等值线时,可以比较直观的表达出该平面上P的变化规律[12]。为更高精度、高效率地绘制降水数据等值线,本次研究采用Delaunay三角网(见图2)算法进行非栅格数据的差值[13]。此外,为增强等值线图的可读性,除原本的标记等值线,还使用不同颜色来加强数据的直观程度。
图1 等值线示意
图2 三角网示意
本次研究需批量下载NECP官网所发布的最新GRIB文件并对其进行解析;之后,利用解析所得的数据生成中国降水等值线图,再对等值线图进行相关的图像处理,使其附加上项目所需的文本信息(项目名称、预报时间等);最后,对等值线图进行美化处理,以满足产品级要求。
由于本研究需一次生成大量等值线图,并为保证信息的时效性;因此,对整套流程速度要求较高,需具备较高稳定性以及工作效率。同时,考虑到实际需求,本项目开发环境需在微软Windows平台下(具体以Windows7 x86或同级别服务器系统为准),且占用较少的磁盘及运行空间。
依照现代计算机软件科学的设计理念[14](见图3),本项目可大致分为:下载模块、数据处理模块、绘图模块、配置模块以及主模块等5个模块。
图3 模块与流程
下载模块主要负责对源文件的下载与解析,以每张等值线图一个文件的形式生成可以直接读的数据文件;配置模块主要负责读取相关配置,载入配置好的资源以及流程,减少系统与外部交互的冗余部分;数据处理模块主要负责数据的处理,包括对数据的增添、删除以及网格化插值等操作;绘图模块负责将地理信息图层或图片按一定的要求进行叠加,并添加相应的文字说明,以达到美观的效果;主模块负责控制其余三个模块以及总体流程,并保障所有模块流程都能够有序高效的执行。
在绘图模块中,当进行地理信息图层的叠加操作时,由于图层中心点的位置以及比例尺可能并不相同,因此应先基于地理信息对图层进行缩放平移再进行叠加(见图4)。
图4 地理坐标与像素点的换算
流程上,主模块会首先启动配置模块并读取事先保存好的配置信息,之后根据配置信息启动下载模块,并通过下载模块下载需要的源文件并进行解析。当下载模块完成解析之后会将消息返回给主模块,此时主模块会启动数据处理以及绘图模块进行数据的处理、等值面的绘制以及部分叠加工作。在数据处理模块完成等值面的绘之后,会将等值面传递给绘图模块,绘图模块会将等值面以及其他图层信息进行叠加操作并保存到存储设备上。这样就完成了一张等值面图的生成。而主模块会多次重复这些动作直到任务完成。当全部作业完成后,主模块会更新配置模块中的配置信息,并保存到存储设备上,以方便下次启动。
数据结构是计算机存储、组织数据的方式,是指相互存在一种或多种特定关系的数据元素集合[15]。
针对软件不同模块,所使用的数据元素也是不一样的。本次插件开发共使用了6种数据元素:散点对象、栅格对象、文本对象、图像对象、地理图层对象、GRIB对象。其中,前两个对象主要位于数据处理模块,GRIB对象主要位于下载模块,其余四个对象位于绘图模块。各对象之间的相关关系和转换关系见图5。
图5 数据结构
经调试检验发现,该插件能够较为稳定高效地输出直观大方的降水等值线图,使得GRIB2文件格式的降水数据产品直观且方便用户操作,适用于投入到实际的生产实践过程中去。图6展示了2018年12月上旬CFSv2数据的处理成果。
图6 全国中长期预报降水等值线图成果示意(单位:mm)
为缩短开发时间,提升开发效率,本项目部分模块调用了第三方库(软件)。各软件名称与功能说明如下:
(1)Wgrib2。Wgrib2是GRIB的一款解析器,它可以快速地获取GRIB文件的文件头,并根据文件头所提供的信息将GRIB文件解析成文本或二进制文件。本项目将通过使用它来完成对GRIB2文件的快速解析。
(2)Numpy。Numpy是一个数值计算扩展库,比一般常见的计算结构要更加高效。其中提供了大量与矩阵处理、矢量计算等高等数值计算的相关工具。这对科学计算有着极大的帮助。本项目将利用Numpy进行高效的科学计算。
(3)PIL。PIL(Python Image Library)是Python的一个图像处理插件,主要处理以像素所构成的数字图像。可以利用其所带的众多工具简单有效的对图像进行相关编辑操作。本项目将使用其进行图层图像以及文字的叠加。
(4)Matplotlib。Matplotlib是一个矢量绘图插件,主要用于生成出版质量级别的图形。如直方图、散点图以及流程图等。本项目使用Matplotlib及其自带的一些算法进行数据的网格化并生成等值面。
本文对于CFSv2数据构建了完整的地理信息系统插件,覆盖了数据处理、绘图等流程,并利用Python得出等值线图,以方便后续水文模拟中进行中长期预报作业。在本次插件的设计过程中,主要遇到了3个问题:
一是,下载时间问题。实际测试时,发现由于网速问题,导致下载时间过长,影响系统效率。解决方法是使用多线程技术;同时下载多个文件,并采用工作流的方式进行处理,减少系统等待时间,提高效率。
二是,连接失败问题。由于CFS文件服务器距离较远,且有连接数量限制。导致存在网络连接失败而无法下载的情况。解决方法是捕捉异常,并根据异常采取相对应手段,尝试多次下载。尽可能保证文件成功下载。
三是,Wgrib2的输出问题。当对wgrib2进行无界面化封装后,程序出现报错。经查,原因为解析所生成文件的格式发送改变,于非特定位置混入了原输出信息。后尝试对wgrib2程序输出进行重定向后,故障排除。此外,在对数据进行验证时,发现数据错误。推测为wgrib2解析数据时的方向性问题。经检测,发现wgrib2的数据输出为由左到右,由下到上。对相应代码进行调整后,数据正确,故障排除。