当前位置:文档之家› WRF模式运行指南

WRF模式运行指南

WRF模式运行指南
WRF模式运行指南

WRF 模式运行指南(2006.3.13~2006.3.22)

国家气象中心数值预报室

(内部资料请勿扩散)

二○○六年三月十三日

目录

1. WRF模式简介 (1)

2. WRF模式的安装 (2)

2.1 安装环境 (2)

2.2 模式源程序 (2)

2.3 NetCDF函数库的安装 (2)

2.4 标准初始化(SI)的安装 (6)

2.5 WRF模式的安装 (9)

3. WRF模式与T213模式嵌套 (17)

3.1 嵌套方案 (17)

3.2 嵌套程序设计 (17)

3.3编译嵌套程序 (21)

3.4 嵌套的实现 (22)

4. WRF模式系统的运行 (29)

4.1 理想大气方案 (29)

4.2 真实大气方案 (32)

5. WRF模式系统作业卡 (47)

5.1 源程序 (47)

5.2 真实大气方案 (48)

6. 模式结果的显示处理 (61)

6.1 Vis5D格式 (61)

6.2 MICAPS格式 (62)

6.2 GrADS格式 (65)

附录1. WRF模式参数配置说明 (68)

附录2. T213场库参数表 (78)

WRF模式系统安装/调试技术报告

数值预报室邓莲堂

1. WRF模式简介

WRF(Weather Research Forecast)模式系统是由许多美国研究部门及大学的科学家共同参与进行开发研究的新一代中尺度预报模式和同化系统。WRF模式系统的开发计划是在1997年由NCAR中小尺度气象处、NCEP的环境模拟中心、FSL的预报研究处和奥克拉荷马大学的风暴分析预报中心四部门联合发起建立的,并由国家自然科学基金和NOAA共同支持。现在,这项计划,得到了许多其他研究部门及大学的科学家共同参与进行开发研究。WRF模式系统具有可移植、易维护、可扩充、高效率、方便的等诸多特性,将为新的科研成果运用于业务预报模式更为便捷,并使得科技人员在大学、科研单位及业务部门之间的交流变得更加容易。

WRF模式系统将成为改进从云尺度到天气尺度等不同尺度重要天气特征预报精度的工具。重点考虑1-10公里的水平网格。模式将结合先进的数值方法和资料同化技术,采用经过改进的物理过程方案,同时具有多重嵌套及易于定位于不同地理位置的能力。它将很好的适应从理想化的研究到业务预报等应用的需要,并具有便于进一步加强完善的灵活性。

WRF模式作为一个公共模式,由NCAR负责维护和技术支持,免费对外发布。第一版的发布在2000年11月30日。随后在2001年5月8日,第二次发布了WRF模式,版本号为1.1。2001年11月6日,很快进行了模式的第三次发布,只是改了两个错误,没有很大的改动,因此版本号定为1.1.1。直到2002年4月24日,才正式第四次发布,版本号为1.2。同样,在稍微修改一些错误后,2002年5月22日第五次版发布模式系统,版本号为1.2.1。原定于2002年10月份左右的第六次发布,直到2003年3月20才推出,版本号为1.3。2003年11月21日进行了更新。2004年5月21日推出了嵌套版本V2.0。2004年6月3日进行了更新。到2006年1月30日为止最新版本为2.1.2。

2.WRF模式的安装

2.1 安装环境

2.1.1 硬件环境

WRF模式是一个多机型、跨平台、标准化的模式。可以在IBM AIX,SGI IRIX,PC LINUX等机型上运行。

2.1.2 软件环境

WRF模式的运行系统中的一般需要的安装软件环境包括:

UNIX(LINUX)操作系统

Perl5.003以上

Fortran程序编辑器(包括Fortran90和Fortran77编译器)

C程序编译器

NetCDF函数库,版本在3.3.1以上(必须包含Fortran77,Fortran90

以及C的程序调用接口)

MICAPS图形显示系统、VIS5D图形显示系统、GrADS或者RIP等

2.2模式源程序

WRF模式系统运行所需要的程序包括:

标准初始化(SI): WRF模式的数据前处理部分。可从写成GRIB码的

A VN数据文件中读取模式区域所需的数据,并插值

成WRF所需的变量场。

WRF模式:WRF模式的初始场/边界条件生成以及模式积分计算部分。

2.3 NetCDF函数库的安装

2.3.1 文件获取

目前,由于WRF模式的数据处理格式主要是应用较为常见的NetCDF数据格式。因此,在安装WRF模式的标准初始化以及WRF主模式前,必须在操作系统环境中先安装NetCDF程序包,生成NetCDF函数库。在运行的系统环境中,如果没有安装NetCDF函数库,则必须自己安装。NetCDF程序包的下载地址为https://www.doczj.com/doc/b59973437.html,/packages/netcdf/

从网站中,可以获得NetCDF的压缩程序包netcdf.zip或者netcdf.tar.Z。

2.3.2 安装环境

不同平台要求也不一样,但必需有25兆的可用空间用来解压、编译和运行测试。由于WRF模式的程序采用了C,Fortran77和Fortran90编写,所以也要求操作平台具有FORTRAN77,FORTRAN90和标准C(或C++)编译器。netCDF将会编译并测试相应的语言接口。

2.3.3 指定编译环境

首先要选择并指定一个恰当的编译环境。如果需要,可设置CC,CFLAGS,FC,FFLAGS,CXX,CXXFLAGS,F90和F90FLAGS中任何环境变量,

以指明相应的编译环境。环境变量也就是用户外壳程序(shell)管理的参数,并被shell程序用于运行应用程序(例如设置脚本程序)。一些环境变量的说明可参见下表(表1)。

合理的设置值。但在IBM SP机器上,如果用户不设置Fortran90的编译和编译选项,那么配置脚本往往找不到正确的Fortran90编译器和编译选项,从而造成NetCDF函数库中没有Fortran90的程序接口。

环境变量也就是用户外壳程序(shell)管理的参数,并被shell程序用于运行应用程序(例如设置脚本程序)。典型的环境变量有:

环境变量名变量值

USER steve

HOME /home/steve

PATH /bin:/usr/bin:/home/steve/bin

执行命令行命令“env”,可得到当前环境中的环境变量列表。

定义和设置环境变量的方式取决于用户所用的外壳(Shell)类型。Csh类shell (如csh、tcsh)用户设置方式如下:

setenv CC c89

setenv CPPFLAGS “-0 -DNDEBUG”

而标准UNIX shell(例如sh、ksh、bash)用户要设置上面同样的环境变量,可如下设置:

export CC=c89

export CPPFLAGS=”-0 -DNDEBUG”

以上两种方式中,参数值中带有将值的各部分分开的空格分隔符时,双引号不能省略。否则,参数值只是设置为所要取值得一部分。

标准shell用户还有一种额外的快捷方式为单一命令定义和设置环境变量。环境变量可在命令行中定义和设置,并只在这一行中生效。例如:

export FOO=foo

env | grep FOO

FOO=foo

FOO=bar env | grep FOO

FOO=bar

env | grep FOO

FOO=foo

测试系统时,环境变量及其赋值可列表式给出。标准UNIX shell用户可直接使用标准语法。例如,标准shell用户可以用(以IBM SP AIX为例):export CC=xlc CPPFLAGS=-DNDEBUG CFLAGS=-O FC=f77 \

FFLAGS=-O CXX=xlC F90=xlf90 F90FLAGS=-qsuffix=f=f90

在IBM AIX SP环境下,编译NetCDF所需要的一些相应的系统环境变量有:CC=/bin/xlc

CPPFLAGS=-DNDEBUG

CFLAGS=-O

FC=/bin/xlf

FFLAGS=-O

F90=/bin/xlf90

F90FLAGS=-qsuffix=f=f90 # Note: no "-O" option

CXX=/bin/xlC

CXXFLAGS=-O

因为有些机器的AIX系统在用F90编译器编译时,选用“-O”优化编译会产生

错误信息为“1501-229 Compilation ended due to lack of space”的错误。通常是由于编译时优化消耗内存太多,以至于超出计算机内存。解决方法之一是用ulimit 命令将数据段(data)、堆栈段(stack)以及内存段(memory)设置成足够大或者设置成无限制(unlimited)。另一种解决方法就是,在设置F90编译选项时,不要用“-O”优化选项。另外,如果要用64位模式编译程序,则除了在C和Fortran 编译选项中添加“-q64”外,还要设置以下环境变量:

ARFLAGS='-X 64 cru'

NMFLAGS='-X 64'

2.3.4 编译和安装NetCDF

要生成编译netCDF所需的Makefile文件,必须先运行配置脚本程序(configure)。它存放在netCDF目录的src子目录中。

首先,选择安装的目录。用这个目录作为配置脚本程序参数“――prefix=”的指定值。程序默认的安装目录(prefix参数值)是“. .”,即将程序包安装在. . /bin,. ./lib和. ./man,这些目录是相对于netCDF的src/目录。

执行设置脚本格式如下:

./configure --prefix=目录名

这里“- - prefix = . . .”是可选的;如果省略的话,程序将默认地将当前目录的父目录“. . ”设为安装目录。

运行配置脚本程序时,程序会检测系统的与编译netCDF程序包相关的属性设置。检测结果将会显示在标准输出设备上(如显示器)。

配置脚本程序还会创建一个记录文件“config.log”。它包含了配置脚本程序检测系统属性设置时发现的错误信息。由于系统检测可能会导致一些错误,因此在记录文件中可能会记录一些错误信息。这些错误信息未必表明是有问题(严重的错误标志会导致下一步编译“make”程序失败)。不过,记录文件中的编译器不能启动的错误信息例外,这是一个编译环境的严重错误,必须改正,否则不会产生相应编译环境的程序接口。

运行编译命令“make”。此命令将创建一个或多个netCDF库。它包括基本的netCDF库“libsrc/libnetcdf.a”。如果系统有Fortran 77或者Fortran 90编译器,那么Fortran接口程序会包含在此库中。如果系统有C++编译器,那么C++接口程序会创建在库“cxx/libnetcdf_c++.a”中。命令创建的库还包括netCDF应用程序库ncgen和ncdump。

如果第一步的编译通过,则可以用命令“make test”来检验netCDF库和可执行程序创建得正确与否。系统会建立和运行各种测试C、Fortran和C++的程序,以及应用程序“ncdump”和“ncgen”。以“***”开头的输出显示行中,列出了测试成功与否的信息。任何错误都会明确列出,并终止程序的运行。测试过程中的编译器和连接器警告会被忽略掉。

如果编译和测试都正确,这时就可以安装程序库和可执行程序了。安装时,运行命令“make install”即可,它将连接系统的函数库和应用程序,安装到指定的目录中。

在进行编译安装的时候,可以编写一个shell脚本程序。这样,在安装的时候,只需执行这个批处理命令就行。这里给出一个在AIX系统上编译安装的例子,比如取名为install.nc:

make distclean

export CC='/usr/bin/xlc'

export CPPFLAGS=-DNDEBUG

export CFLAGS=-O

export FC='/usr/bin/xlf90 '

export FFLAGS='-O3 -qfixed '

export F90FLAGS='-O3 -qfree -qsuffix=f=f90'

export F90='/usr/bin/xlf90 '

export CXX='/usr/bin/xlC'

export CXXFLAGS=-O

configure --prefix=/u/wrf_xp/netcdf

make

make test

make install

2.3.5 问题处理

(1) 详细阅读本安装文档。

(2) 转到netCDF的顶级目录下的源程序目录SRC。

(3) 执行命令“make distclean”,即使执行失败也不会造成什么错误。

(4) 如果存在“config.cache”文件,则将它删除。

(5) 按上面描述的方法设置相应的环境变量。

(6) 重新执行配置脚本程序。

(7) 执行命令“make”。

(8) 执行命令“make test”。

(9) 执行命令“make install”。

值得注意的是,设置和编译系统应该具有较新的“sh”shell、“make”程序以及C和Fortran编译器。在曙光机器上,就存在Fortran90编译器版本比较陈旧,不能编译后缀名为“.F90”的程序,导致运行配置脚本时,无法通过对Fortran90编译器的检测,故不能生成Fortran90程序接口。

2.4 标准初始化(SI)的安装

2.4.1 文件和资料的获取

标准初始化是WRF模式的数据前处理部分,也是WRF模式的三维变分系统建立使用之前为WRF模式提供初/边值的部分。SI主要的具有两大功能:(1) 模式区域的定义和创建

在这里,用户可以定义计算区域(投影参数,范围大小,区域位置等)。

根据这些定义设置,SI的“gridgen_model.exe”程序会产生一个名为“static”

的文件。它是NetCDF格式的文件,包含模式格点定义信息和一些静态数据场(如地形、土地利用、土壤类型、月叶面积指数、经度和纬度等)。

(2) 将数据插值到WRF模式的计算格点(包括水平方向和垂直方向)上,为WRF

模式提供初始场和边界条件。

这项功能是由“hinterp.exe”和“vinterp.exe”程序来完成。另外,“gribprep.exe”程序是将标准的GRIB码格式的数据文件转换成“hinterp.exe”

程序能识别的格式。也可以不用“gribprep.exe”程序,而是直接将其他数据格式的数据写成“hinterp.exe”所能识别的格式即可。

安装之前,首先需从WRF模式的提供网站(https://www.doczj.com/doc/b59973437.html,)下载标准初始化(SI)的压缩程序包WRFSI.TAR.gz、A VN模式的试验数据A VN.TAR 以及模式所需的静态数据(如地形、土地利用类型、土壤温度等):WRFSI.TAR.gz

A VN.TAR

greenfrac_10m.tar.gz - 10分的植被指数数据

pctland_10m.tar.gz - 10分的土地利用数据

soiltemp_1deg.tar.gz - 1度的全球深层土壤温度数据

topo_10m.tar.gz - 10分的地形数据

另外,还应该下载如下四个文件夹及其其中的数据文件:

- landuse_30s/ USGS 24-category landuse fractions

- soiltype_bot_30s/ WMO/FAO 16-category 2-layer soil types

- soiltype_top_30s/

- topo_30s/

解压这些文件后,应该得到八个目录:

greenfrac_10m/

pctland_10m/

topo_10m/

soiltemp_1deg/

landuse_30s/

soiltype_bot_30s/

soiltype_top_30s/

topo_30s/

解压后的各目录中所得到的数据文件大多数都是10°×10°的数据块文件。用户大约需要1.8Gb的磁盘空间来存储这些数据。其目录在WRF SI的参数配置文件中需要做相应的设定。

2.4.2 安装环境

编译时,要求系统装有Perl(5.003以上的版本)和make(3.75以上的版本)。由于WRF SI模式的程序采用了C,Fortran77和Fortran90编写,所以也要求操作平台具有FORTRAN77,FORTRAN90和标准C(或C++)编译器。SI 的数据格式采用了NetCDF的格式,要求系统安装了NetCDF函数库。

2.4.3 SI的目录结构

在进行编译和运行SI前,有必要先熟悉SI的目录结构。在SI的编译和运行当中,有四个“顶级”路径环境变量。这里“顶级”的意思是指每一个路径都是一个总的路径,在其下面,编译和运行时可能会创建许多子目录。从这个意义上来说,这四个目录分别相当于他们的子目录的顶级目录。这四个“顶级”目录分别为:

(1) SRCROOT

这个目录在编译和安装SI时要用到,它是包含SI源程序代码的目录,也就

是在用户解压tar源程序包时所创建的目录。比如用户解压WRFSI_20020328.TAR.gz文件时,最终会创建一个名为wrfsi_20020328的SRCROOT目录。当然,用户也可以根据自己的喜好,将其改为自己喜欢的名称。通常,SRCROOT目录中包含用perl写成的安装脚本文件“install_wrfsi.pl”。编译和安装时,应该提供大约10兆空间给SRCROOT目录。

(2) INSTALLROOT

这个目录是在编译和安装SI时用到。它是指定SI的安装目录,存放SI的可执行程序(包括可执行的二进制文件和可执行的perl脚本)。在INSTALLROOT 目录下,安装后会创建三个目录:bin、data和etc。子目录bin中存放可执行的二进制文件;data存放相关的配置信息文件;etc存放可执行的perl脚本文件。INSTALLROOT和SRCROOT可以相同,这样的话,INSTALLROOT目录下的三个子目录会创建在SRCROOT的目录下。如果INSTALLROOT目录缺省,则系统会认为INSTALLROOT与SRCROOT相同。INSTALLROOT需要的空间大约为5兆。

(3) MOAD_DATAROOT

这个目录在运行SI时使用。“MOAD”的意思是“所有计算区域之源(Mother of All Domains)”,当然也包括以后嵌套技术实现后的粗/细网格。MOAD_DATAROOT 可以和INSTALLROOT以及SRCROOT相同,但将MOAD_DATAROOT与这二者区分开来是非常有用的。它可以使用户在一次编译后,处理不同的模式区域。MOAD_DATAROOT的默认目录为INSTALLROOT/data。如果要设置不同路径时,只需将INSTALLROOT/data目录下的cdl和static两个子目录拷贝到新的目录下即可。

(4) EXT_DATAROOT

这个目录在运行SI时使用。它是用来存放一些所谓的“外部”数据。数据前处理程序grib_prep.exe产生的结果文件就是存放的在这个目录的子目录extprd 目录下,而运行grib_prep.exe程序时所创建的记录文件也放在这个目录的子目录log下面。同样,当用户不用个grib_prep.exe程序处理数据,而是自定义生成hinterp.exe程序所能识别的数据文件时,用户所生成的数据文件也应该放在这个目录的extprd子目录下,插值程序hinterp.exe则从这个子目录下读取输入数据。对于1.3版本的SI来说,则这个目录已经被提供初始场( ANALPATH)和边界条件( LBCPATH)的路径所代替。并且,在1.3版本中,初始场和边界条件可以分开,使用两个不同的路径。

2.4.4 编译和安装SI

编译和安装前,需查看一下“src/include/makefile_ibm.inc.in”文件。比如查看编译器的名字(如FC),cpp选项(CPPFLAGS特殊情况下为-DFORTRANDOUBLEUNDERSCORE,而有些计算机(比如AlphaUnix工作站)则要求为-DFORTRANUNDERSCORE)。用户还需为gcc库函数指定确切的路径。同时,用户还可以根据需要,设定一些相应的编译选项。

要求用户找到计算机安装netCDF和perl的路径。没有的话,则需必须下载正确的版本进行安装。

找到正确的netCDF和perl的安装路径后,SI最简单的安装就是在安装在当前源代码相同目录下。这时只需设置一下环境变量NETCDF,将其指到包含netCDF库函数的正确目录,例如:

setenv NETCDF /usr/local/netcdf-3.4

然后,输入以下安装命令:

perl install_wrfsi.pl

上面是最为简单的安装方式,但是如果用户没有找到netCDF和Perl的安装目录的话,则会退出安装。因此,还可以根据用户选择配置来安装。执行安装命令时,其他的一些参数选项如下:

perl install_wrfsi.pl \

--srcroot=/u/denglt/wrfsi_src \

--installroot=/u/denglt/wrfsi \

--dataroot=/u/denglt/wrfsi/data \

--path_to_netcdf=/usr/local/netcdf \

--path_to_perl=/usr/local/perl \

--machine=ibm > log

其中,srcroot是指提供安装WRF SI源代码的目录,installroot是指将要接受安装WRF SI的目录,dataroot是以后运行SI程序的输出结果存放目录,如果用户没有指定dataroot的目录,则会在安装目录($installroot)中创建一个“/data”目录。特别注意的是,在perl命令行的续行符“\”前,最好留一个空格。因为,如果不留空格,而在后续行的第一列也没有空格的话,则程序会将两行不留空格地合并起来,造成语法错误。

成功安装后,在安装目录下会创建一个名为“/bin”的目录,并且创建有如下四个可执行文件:

-rwxr-xr-x 1 wrfhelp users 458752 Apr 17 15:36 grib_prep.exe

-rwxr-xr-x 1 wrfhelp users 647168 Apr 17 15:36 gridgen_model.exe

-rwxr-xr-x 1 wrfhelp users 614400 Apr 17 15:37 hinterp.exe

-rwxr-xr-x 1 wrfhelp users 63120 Apr 17 15:37 siscan

-rwxr-xr-x 1 wrfhelp users 630221 Apr 17 15:37 staticpost.exe (v2.0以上才有) -rwxr-xr-x 1 wrfhelp users 188416 Apr 17 15:37 vinterp.exe

“grib_prep.exe”文件是读取GRIB码数据文件,并将数据输出成“hinterp.exe”其中,

所能识别的数据格式。“gribgen_model.exe”是模式区域定义和创建的文件。在这里,用户可以定义计算区域(投影参数,范围大小,区域位置等)。“hinterp.exe”和“vinterp.exe”文件分别是水平和垂直插值程序,它们将用户的输入场插值到“gridgen_model.exe”所创建的模式区域格点上,为WRF模式的运行准备初始场和边条件。“siscan”是一个调试程序,它可以查看“hinterp.exe”和“vinterp.exe”所产生的文件的详细信息。“staticpost.exe”将“gridgen_model.exe”的运行结果static.wrfsi.d01提取其中一些物理量按照NetCDF的格式重新写了一遍成wrfstatic_d01。

在进行编译安装的时候,可以编写一个shell脚本程序。这样,在安装的时候,只需执行这个批处理命令就行。这里给出一个在AIX系统上编译安装的例子,比如取名为install.si:

#!/bin/sh

my_homeroot=/u/wrf_xp/denglt/wrfsys

my_dataroot=/dgpfs/fs2/wrf_xp/ddeng/wrfsys

export NETCDF="/u/wrf_xp/denglt/netcdf"

export SOURCE_ROOT="$my_homeroot/sisrc"

export INSTALLROOT="$my_homeroot/wrfsi"

export DATAROOT="$my_dataroot/moad"

export EXT_DATAROOT="$my_dataroot/moad/extroot"

export TEMPLATES="$my_dataroot/moad/temp"

export GEOG_DATAROOT="$my_dataroot/geog"

install_wrfsi.pl --install_ui=y

2.4.5 问题处理

(1) 如果失败,则可以用make realclean来清除失败的安装程序。

(2) 进入到src目录下的各个子目录(如grib_prep、hinterp、vinterp以及grid

等)下,输入make命令对单个目录进行编译。这样就相对容易找出编

译安装时的错误所在。

2.5 WRF模式的安装

2.5.1 安装环境

编译时,要求系统装有Perl(5.003以上的版本)和make(3.75以上的版本)。由于WRF SI模式的程序采用了C,Fortran77和Fortran90编写,所以也要求操作平台具有FORTRAN77,FORTRAN90和标准C(或C++)编译器。SI的数据格式采用了NetCDF的格式,要求系统安装了NetCDF函数库。

因此,在编译WRF代码之前,应检查一下系统有没有安装netCDF。WRF 输入/输出(I/O)模块需要使用netCDF的数据格式。如果netCDF安装的目录不是常用的系统目录(如/usr/local/),则必须指明netCDF函数库以及引用(include/)函数库的路径。如果未安装,则必须先下载安装netCDF。

2.5.2 安装程序的获取

WRF模式的安装程序是一个压缩程序包,可从WRF模式网站获得(https://www.doczj.com/doc/b59973437.html,)。1.2版的WRF压缩程序包名称为WRFV1.TAR.gz;最近发布的2.1.2版的WRF压缩程序包名称为WRFV2.1.2.TAR.gz。

压缩程序包包括两部分,一部分是将输入数据生成WRF模式的输入场;另一部分则是模式的积分计算。

2.5.3 编译环境配置

WRF模式的顶级目录中包含配置脚本文件“configure”(使用标准shell:sh)和一个编译脚本“compile”(使用Csh类shell:csh)。配置脚本在配置系统的时候,也用到在arch目录中的Perl脚本(arch/Configure.pl),还用到了UNIX系统的应用程序“make”。在arch子目录中包含了大量不同结构和设置选项的设置模板文件“configure.defaults”。这些配置模板在配置脚本运行时用于在不同的运行

平台上创建“configure.wrf”文件。在IBM AIX SP机器上,会启用设置模板文件中的关于AIX的十一个配置模块:

###########################################################

#ARCH AIX (single-threaded)

#

FC = xlf_r

CC = xlc_r

......

###########################################################

#ARCH AIX (single-threaded) (NO NETCDF)

#

FC = xlf_r

CC = xlc_r

......

###########################################################

#ARCH AIX SM (OpenMP)

#

OMP = -qsmp=noauto -qthreaded

OMPCPP = -D_OPENMP

......

###########################################################

#ARCH AIX DM (RSL-IO, IBM-MPI)

#

DMPARALLEL = 1

OMP =

SFC = xlf_r

......

###########################################################

#ARCH AIX DM (RSL-IO, IBM-MPI) (NO NETCDF)

#

DMPARALLEL = 1

......

###########################################################

#ARCH AIX DM/SM (RSL-IO, IBM-MPI, OpenMP)

#

DMPARALLEL = 1

OMP = -qsmp=noauto -qthreaded

......

这十一个配置模块分别对应着不可嵌套串行编译、不可嵌套OpenMP并行编译、可嵌套带RSL_LITE库MPI方式并行编译、可嵌套带RSL库MPI方式并行编译、带RSL和HDF5库可嵌套MPI方式并行编译、带RSL库可嵌套MPI 和OpenMP方式并存的并行编译、带RSL和MCEL库MPI并行编译、带RSL 库与ESMF耦合不可嵌套MPI方式编译、不用MPI但带RSL库可嵌套串行编译以及带RSL库可嵌套OpenMP方式并行编译。每一个模块都设置了对应的WRF 模式的编译器配置、编译选项、编译规则等。

进行WRF的编译环境配置时,进入WRF模式的顶级目录中,键入“./configure”。假设设置脚本可以找到相应版本(5.004或更高版本)的Perl程序,那么设置文件“arch/configure.defaults”中的模板将会被扫描检测,提取相应的配置模块信息,并且会列出一个选择菜单共用户选择:

$ configure

checking for perl5... no

checking for perl... found /usr/bin/perl (perl)

Will use NETCDF in dir: /usr/local/netcdf

------------------------------------------------------------------------

Please select from among the following supported platforms.

1. AIX (single-threaded, no nesting)

2. AIX SM (OpenMP, no nesting)

3. AIX DM-Parallel (RSL_LITE, IBM-MPI, Allows nesting)

4. AIX DM-Parallel (RSL, IBM-MPI, allows nesting)

5. AIX DM-Parallel (RSL, IBM-MPI, allows nesting )(PARALLEL HDF5)

6. AIX DM-Parallel (RSL_LITE, IBM-MPI, Allows nesting )(PARALLEL HDF5)

7. AIX DM-Parallel/SM-Parallel (not recommended) (RSL, IBM-MPI, OpenMP, allows nesting)

8. AIX DM-Parallel (RSL, IBM-MPI, MCEL) May 2003, EXPERIMENTAL

9. AIX DM-Parallel ESMF (RSL, IBM-MPI, ESMF coupling, no nesting) EXPERIMENTAL

10. AIX (single-threaded, nesting using RSL without MPI)

11. AIX (OpenMP, nesting using RSL without MPI)

Enter selection [1-11] :

用户输入一个1~11的整数,然后按回车。如果选择有效,则所作的选择和提示符会显示出来。用户选择结束后,正常运行脚本程序时,会在顶级目录中创建文件“configure.wrf”,并退出程序,回到操作系统。如果在选择时要退出设置脚本程序,用shell的中断命令即可(如按“Control-C”)。

配置脚本“configure”会试图在编译主机上查找netCDF函数库以及引用文件。也可通过设置环境变量NETCDF来强制定义到系统中安装netCDF的正确目录。如果没有设置环境变量,而设置脚本也没有找到netCDF,那么程序将会要求用户输入一个路径。如果所有这些尝试都失败的话,程序将尝试以没有netCDF 的状态来进行编译;不过,由于当前版本的程序只能用netCDF的输出/输入接口,所以必然会造成程序的运行失败。

模式目录中还提供了用于卸载的清除程序clean(Csh类shell脚本)。安装失败时,可以使用这一程序来恢复到最初的状态。当未指定任何参数时,清除程序

“clean”将删除src目录中的目标文件(*.o)以及编译时产生的一些中间文件,文件“configure.wrf”会保留。当指定“-a”为“clean”的参数时,则会连同文件“configure”以及一些在“external”目录中的库函数一起删除。所以,用带参数“-a”的清除命令,则会将模式恢复到模式的安装最原始的状态,而文件“configure.wrf”中的一些修改信息都会丢失。(注意,清除程序并不会将run或test子目录中的数据文件或可执行文件删除掉)。

在“configure.wrf”创建后,还可以根据需要来修改编译选项。值得注意的是,WRF模式可实时配置计算范围大小,处理器数量,以及其他选项,并且仅需要在运行程序之前通过修改文件“namelist.input”即可。而针对这些选项设置,并没有修改文件“configure.wrf”的必要。只是在编译器、编译选项或者编译规则需要变动时,才有必要对“configure.wrf”文件进行修改。

在WRF模式调试运行过程中,发现由于WRF模式采用动态分配数组的方式来分配模式中的数组单元,因此对计算机的逻辑内存、堆栈段内存以及数据段内存开销较大。在IBM SP 上编译时,默认的内存设置可能满足不了模式计算时的内存需求。而“configure.wrf”中没有设置内存编译选项(-bmaxdata, -bmaxstack 和-qmaxmem),这就需要用户对其进行修改。通常将他们的限制值设置的稍微大些比较好。例如,可以将“configure.wrf”的原始设置:

FCBASEOPTS = -qarch=auto -qfree=f90 -qzerosize -qnosave -qmaxmem=-1 -qspill=20000 $(FCDEBUG) $(OMP)

. . . . . .

LDFLAGS =

. . . . . .

wrfio_nf :

( cd ../external/io_netcdf ; make NETCDFPATH=/u/denglt/netcdf

FC="$(SFC) $(FCDEBUG) -qarch=auto -qfree=f90 -qzerosize

-qnosave" ; /bin/cp wrf_io_flags.h wrf_status_codes.h ../../inc )

wrfio_int :

( cd ../external/io_int ; \

make CC=$(CC) FC="$(SFC) $(FCDEBUG) -qarch=auto

-qfree=f90 -qzerosize -qnosave" all diffwrf )

solve_interface.o : solve_interface.F

$(RM) $@

$(CPP) -I../inc $(CPPFLAGS) $*.F > $*.f

$(FC) -c -qfree=f90 -qspillsize=32767 -I. $(MODULE_DIRS) $*.f

修改为:

FCBASEOPTS = -qarch=auto -qfree=f90

-bmaxdata:0x80000000 -bmaxstack:0x10000000 -qzerosize -qnosave

-qmaxmem=-1 -qspill=20000 $(FCDEBUG) $(OMP)

. . . . . .

LDFLAGS = -bmaxdata:0x80000000 -bmaxstack:0x10000000 -qmaxmem=-1

. . . . . .

wrfio_nf :

( cd ../external/io_netcdf ; make NETCDFPATH=/u/denglt/netcdf

FC="$(SFC) $(FCDEBUG) -qarch=auto -qfree=f90

-bmaxdata:0x80000000 -bmaxstack:0x10000000 -qmaxmem=-1

-qzerosize -qnosave" ; /bin/cp wrf_io_flags.h

wrf_status_codes.h ../../inc )

wrfio_int :

( cd ../external/io_int ; \

make CC=$(CC) FC="$(SFC) $(FCDEBUG) -qarch=auto

-qfree=f90 -bmaxdata:0x80000000 -bmaxstack:0x10000000

-qmaxmem=-1 -qzerosize -qnosave" all diffwrf )

solve_interface.o : solve_interface.F

$(RM) $@

$(CPP) -I../inc $(CPPFLAGS) $*.F > $*.f

$(FC) -c -qfree=f90 -bmaxdata:0x80000000 -bmaxstack:0x80000000

-qmaxmem=-1 -qspillsize=32767 -I. $(MODULE_DIRS) $*.f

由于以上的修改,在运行清除程序clean后会被自动删除掉,造成修改信息丢失。有鉴于此,用户除了修改configure.wrf外,还可以直接修改arch子目录中的configure.defaults文件。找到configure.defaults文件中与AIX相关的十一个配置模块,按在configure.wrf中的修改方法一样修改。这样做好修改后,以后的每次清除编译环境重新配置编译环境时,都不会丢失修改好的信息。

在编译1.3版时,发现有些程序在选用“优化”编译时,往往会编译很慢,甚至会由于优化消耗内存,造成内存不足后而导致编译失败。因此,一种解决方法是可以在编译选项中去掉优化选项“-O2”;另一种解决方法就是将优化编译时耗时很长或者耗内存很大的程序加入到优化的编译规则中。这一修改,也可以在arch子目录中的configure.defaults中进行。在IBM SP2机器上,要添加的的目标文件有:

module_io_mm5.o module_si_io.o module_io_wrf.o module_domain.o\

module_start.o module_initialize.o module_initialize_b_wave.o \

module_initialize_hill2d_x.o module_initialize_quarter_ss.o \

module_initialize_squall2d_x.o module_initialize_squall2d_y.o \

module_initialize_real.o module_dm.o start_domain.o \

mediation_force_domain.o mediation_interp_domain.o \

mediation_feedback_domain.o solve_interface.o

当configure.wrf文件中的ARCHFLAG标志参数包含-DDM_PARALLEL参数值,并且连接好相应的消息传递库函数时,可用分布式内存并行机制进行编译。目前连接库只有一种可供选择:external/RSL/RSL/librsl.a。此时,其他一些必须设置生效的参数值包括:-DWRF_RSL_IO和_DRSL。CFLAGS参数必须取有-DWRF_RSL_IO,-DMAXDOM_MAKE = $(MAX_DOMAINS),DMAXPROC_MAKE= $(MAX_PROC ),DMAXPROC_MAKE = $(MAX_PROC),-I../external/RSL/RSL。在设置文件arch/configure.defaults的用于设置分布式内存并行编译的模板中包含了上面这些参数值。而在configure.wrf文件中设置相应的编译标志参数时,就可以用共享式内存并行机制来进行编译。内存共享式并行机制采用OpenMP线程形式。

2.5.4 编译代码

在配置完编译环境变量之后,就可以输入编译命令“compile”进行程序代码编译了。首先,输入“compile”,则会出现以下帮助选项:

Usage:

compile wrf compile wrf in run dir

test cases (see README_test_cases):

compile em_b_wave (欧拉质量坐标斜压波方案)

compile em_grav2d_x (欧拉质量坐标重力波方案)

compile em_hill2d_x (欧拉质量坐标二维钟形山体方案)

compile em_quarter_ss (欧拉质量坐标三维超级单体云体方案)

compile em_real (欧拉质量坐标真实大气方案)

compile em_squall2d_x (欧拉质量坐标x-z平面二维飚线方案)

compile em_squall2d_y (欧拉质量坐标y-z平面二维飚线方案)

compile exp_real (真实大气试验方案)

compile nmm_real (欧拉高度坐标真实大气方案)

compile -h (帮助信息)

上面的帮助信息里,列出了目前WRF模式中可以编译运行的方案选择。其中em表示“欧拉质量坐标”模式动力框架。当模式从一个方案转到其他方案时,必须重新编译。重新编译后,wrf.exe不变,但初始化程序(比如real.exe和ideal.exe)会有所不同。除了“nmm_real”和“em_real”两个编译方案是真实大气方案外,其他方案都是用理想数据进行大气模拟试验的方案。

编译时,输入带参数的编译命令“compile”,命令格式为:

$compile case_name

比如说要编译质量动力框架下的二维飚线方案时,则可键入命令:

$compile em_squall2d_x

然后,编译程序启用注册机制:在“tools/directory”目录中的c程序会根据文件Registry/Registry中的列表内容创建文件,放在inc目录中。然后,编译程

序会编译一些源程序目录中的源代码,产生目标文件“.o”以及一些中间文件(如“.f”)。注意,其中目录“frame/”中的一个源代码文件(“frame/module_state_description.F”)不是随模型源程序一起发布的,而是在编译时由注册机制自动创建的。如果想要在下一次编译时强制重新运行注册机制,则将文件“frame/module_state_description.F”移除掉即可。

成功编译后,会产生两个可执行文件“ideal.exe”和“wrf.exe”,放置目录为“main/”,并且在目录“test/em_squall2d_x”中有他们的连接文件。对于每一个不同理想大气试验方案,ideal.exe都会不同,这是因为它们建立方案时是编译了不同的模块“module_initialize”。如果用户想修改试验方案,则需对目录“dyn_em/”或者“dyn_eh/”中的“module_initialize”进行修改。可以改变它们的初始状态,比如边界环境、热力湍流(thermal bubble)、模式层数以及地形等。如果模式动力框架不同,那么“ideal.exe”也会不同。

当编译失败或者要重新编译时,可用模式提供的清除命令clean来进行。当未指定任何参数时,清除程序“clean”将删除源程序目录中的目标文件(*.o)以及编译时产生的一些中间文件,文件“configure.wrf”会保留。当指定“-a”为“clean”的参数时,则会连同文件“configure”以及一些在“external”目录中的库函数一起删除。所以,用带参数“-a”的清除命令,则会将模式恢复到模式的安装最原始的状态,而文件“configure.wrf”中的一些修改信息都会丢失。(注意,清除程序并不会将run或test子目录中的数据文件或可执行文件删除掉)。

对发布的原始代码或运行了清除程序“clean -a”后的代码进行第一次编译时,编译程序会在“external”目录中创建一些库函数。

另外,编译错误时显示的行号是中间文件“.f”的对应行号,但不一定都是源程序目录中的“.F”文件的对应行号。这可能会给查找错误所在地位置带来一些麻烦。

F90编译器允许在向外部子程序传递实参时,产生f90型伪形(assumed-shape)数组的副本。一些F90编译器即使整个数组(无需分割成子集)被作为实参传递时也会产生这种副本。这样的话,产生副本是非常浪费内存的。-DDEREF_KLUDGE指示注册机制在构建调用子程序的实参列表时创建一个额外标志信息,从而使编译器认为仅仅是传递数组的第一个元素,避免了创建副本。

3. WRF模式与T213模式嵌套

3.1 嵌套方案

T213模式是一个全球谱模式,而WRF模式是一个区域格点模式。目前,要实现WRF模式与T213模式的完全嵌套,在理论上和实践上都还有许多困难。因此,根据WRF模式当前只处于调试阶段的实际情况,我们仅将WRF模式与T213模式作简单地嵌套。

简单嵌套的基本思路就是以T213模式的预报场或者客观分析场为WRF模式的背景场,并为WRF模式提供边界条件。

具体实现的方法有两种,一种是从T213场库获取要素场,然后修改WRFSI 源程序,读取T213要素场,处理后生成WRF模式的输入场;另一种是利用从T213场库获取要素场,然后利用MM5的前处理程序TERRAIN、REGRID以及INTERPF等程序,生成MM5的初始场及边界条件,再利用MM52WRF程序,将其转换成WRF模式的输入要素场。第一种方法简捷方便,易于操作;第二种方法相对繁杂些,但由于MM5模式有比较完善的资料同化方案,可以解决目前WRF模式没有资料同化方案的不足。

3.2 嵌套程序设计

3.2.1 T213场库资料的通用接口程序

IBM SP机器中T213场库的水平分辨率为0.5625*0.5625(度)。目前,由于T213场库资料的检索已经模块化,用户根据检索时,可直接调用通用场库(T213)检索接口程序“gdbrck”。调用通用场库接口程序时,用户只必须设置好程序的各个接口参数。具体各接口参数说明如下:

call gdbrck(ftype,idate,iftime,ielemcd,level,ii,jj,kk,record,data,index_dic,iret) ftype : character*4,场类型,例:暴雨系统为'BJLP',t213系统为'BJGL’

idate : integer idate(4), 日期数组,年(四位)、月、日、时次

iftime : integer, 时效

ielemcd : integer, 要素代码

level : integer level(n+1), 层次数组,第一元为调用的总层数n, 2到n+1元为具体的调用层次,如level(3), data level/2,500,700/

ii : integer,纬度格点数

jj : integer, 经度格点数

kk : integer, 调用层数n

record : integer,本场最大ii * jj。T213系统为:640*321

data : real*8 dimension data(ii,jj,kk) ,符点数组,数据区

index_dic : character*80, 字符串,模式字典文件全名

iret : integer,返回码0:正常

6:场没生成或记录不存在

9:其他错

值得注意的是,由于场库资料中整数和浮点数都是以64位格式存储的,也就是8个字节。因此,在程序的声明部分注意场库调用参数的存储长度;或者在

编译程序的时候,选用64位编译方式编译。当然,也可以在编译的时候,用编译选项-qintsize=8 和-qrealsize=8两个选项来进行编译。

index_dic是模式字典文件全名,在调用前必须指定。在IBM SP上,场库在

SP:/gpfs/fs2/nwp/gdbt213目录下用index_dic(1:28)='/u/nwp/gdbt213/dic/index_dic';在场库在盘阵库/asm2/nwpgdb/t213gdb目录下用index_dic(1:32)='/u/nwp/gdbt213

/dic/index_nfs_dic?。

3.2.2 读取T213场库资料的程序设计

读取T213场库资料的基本思路是首先设置好相应的气象要素场的具体调用参数;然后利用T213场库提供的通用接口程序读取场库资料,保存在内存变量中;再将内存变量中的相应气象要素场数据按不同的要求输出为不同的数据文件格式。根据这一思想,可以得到读取T213场库资料的程序流程图(见图10)。

实现读取T213场库资料的程序名称为readt213.F。程序开始调用子程序parse_table来变量列表Vtable文件中的变量信息。Vtable的格式如下:

GRIB Code| Level Code| Level 1 | Level 2 | REGRID Name | REGRID Units | REGRID Description |

-----+------+------+------+----------+----------+------------------------------------------+

80 | 1 | 0 | | SST | K | Sea Surface Temperature |

1 | 1 | 0 | | PSFC | Pa | Surface Pressure |

2 | 102 | 0 | | PMSL | Pa | Sea-level Pressure |

7 | 1 | 0 | | HGT | m | Height | Terrain Height 211 | 1 | 0 | | SKINTEMP | K | Skin temperature (can use for SST also) |

229 | 105 | 2 | | T | K | Temperature | At 2 m

230 | 105 | 2 | | RH | % | Relative Humidity | At 2 m

202 | 105 | 10 | | U | m s{-1}| U | At 10 m

203 | 105 | 10 | | V | m s{-1} | V | At 10 m

7 | 100 | | | HGT | m | Height |

11 | 100 | * | | T | K | Temperature |

33 | 100 | * | | U | m s{-1} | U |

34 | 100 | * | | V | m s{-1} | V |

52 | 100 | * | | RH | % | Relative Humidity |

-----+------+------+------+----------+----------+---------------------------------------------+ 变量列表Vtable文件中,第一行是说明信息,调用parse_table子程序时,

会忽略这些信息。而parse_table子程序识别这些信息与有用的变量信息的重要标志就是第一列包含中画线“-”的第二行。也就是说,程序将忽略第一次出现中画线的那一行以前的所有信息,然后读取第一次出现中画线到第二次出现中画线之间的所有变量信息。如果在第二次出现中画线的那一行后面还有信息,那么将忽略第二次出现中画线的那一行之后的所有信息,直到第三次出现中画线的那一行,同时必须有第四次出现中画线的行。第三和第四次之间有没有变量信息不重要,重要的是第三次和第四次必须同时配套出现。

相关主题
文本预览
相关文档 最新文档