v1.0 可编辑可修改 OUT_TYPE就是定义输出格式的量。当OUT_PUT=1时,输出为SI程序中能识别处理的格式,当然,的程序源代码要稍加修改,这在后面将会讲到。输出时调用子程序out_pregrid,输出文件名为“avn_*”;当OUT_TYPE=2时,输出为SI程序中能识别处理的格式,调用输出子程序out_hinterp,输出文件名为“AVN_FILE:*”;当OUT_TYPE=3时,输出为MM5的前处理程序能识别处理的格式。输出时调用子程序out_mm5来输出,输出文件名为“MM5_FILE:*”。
嵌套的实现
根据嵌套方案设计以及程序设计的具体实施,嵌套过程的实现可以通过三种具体方案来实现。实现的流程示意图如图11所示。 方案一
(1) 首先运行程序读取场库资料,将场库资料输出为能够识别处理的格式。 (2) 在运行WRF SI前必须配置SI的参数列表文件。
(3) 执行脚本文件 ,它会调用程序。由于程序处理的数据格式为GRIB码压缩
格式,为了方便,可以将的源程序代码稍作修改,使其能直接读取文本格式的数据。具体做法是直接修改WRF SI源程序目录./src/grib_prep/目录下的文件。将中打开数据文件、读写数据的语句注释掉,然后添加相应的Fortran中打开文本格式文件的语句和相应的读写数据的语句。
打开文件:
源代码:
if (iuarr(iunit). then if then
call copen(iunit, nunit, gribflnm, 1, ierr, iprint) else call
gribflnm, 1, ierr, -1) endif if then
call deallogrib ierr = 2 return
copen(iunit,
nunit,
34
endif
v1.0 可编辑可修改 iuarr(iunit) = nunit endif 修改为:
if (iuarr(iunit). then open(iunit,
file=gribflnm,
error code: ', ierr call deallogrib ierr = 2 return endif
iuarr(iunit) = nunit endif
status='old', iostat=ierr) nunit = iunit if then
if (iprint==1) print*, 'Open file
读变量场头信息: 源代码:
call get_sec1(ksec1) call get_sec2(ksec2) call ginfo)
修改为:
读变量场数据:
源程序:call gribdata(DataArray,map%nx*map%ny) 修改为:read(iunit,*,end=9112)(DataArray(i),i=1,ii)
为了程序的安全运行,还必须修改程序源代码,将文件关闭语句作相
应的修改:
源代码:call cclose(iuarr(nunit1), iprint, ierr) 修改为:close(iuarr(nunit1))
做完修改后,重新编译安装WRF SI源程序或者单独编译程序。
get_gridinfo(infogrid,
read(iunit,*,end=9112)(ksec1(i),i=1,24)
read(iunit,*,end=9112)(ksec2(i),i=1,4)
read(iunit,*,end=9112)(ginfo(i),i=1,24)
35
v1.0 可编辑可修改 (4)执行脚本文件,它会依次调用和程序。如果是第一次运行或者重新计算新的
区域时,则在运行程序前还会运行程序。
运行成功后,会生成WRF所需要的预处理数据文件real_input* 。 方案二
(1) 首先运行程序,读取场库资料,将场库资料输出为能够识别处理的格式。 此格式要求格式文件为Fortran的顺序读取的无格式数据文件。文件中
的数据都是写出三个记录数据和一个二维数据块的形式。二维数据块总是二维(nx,ny)实型数组。而前两个记录数据包括的记录元是固定不变的,第三个记录数据包括记录元则随数据本身采用地图投影不同而不同。具体的记录成员及其说明如下:
记录1:version
记录2:hdate, xfcst, source, field, units, decription, level 如果 proj_flag=0那么
记录3:startloc, startlat, startlon, deltalat, deltalon 如果 proj_flag=1那么
记录3:startloc, startlat, startlon, dx, dy, truelat1 如果 proj_flag=3那么
记录3:startloc, startlat, startlon, dx, dy, orient, truelat1,
truelat2
如果 proj_flag=5那么
记录3:startloc, startlat, startlon, dx, dy, orient, truelat1
记录1:
INTEGER*4 :: version
数据的版本号,目前此版本号为4。 记录2:
36
v1.0 可编辑可修改 CHARACTER(LEN=24) :: hdate
数据的有效时间,格式为YYYY-MM-DD-HH:mm:ss:ssss。 REAL*4 :: xfcst 数据块的预报时效,单位为小时。 CHARACTER(LEN=32) :: source 数据块的描述信息。
CHARACTER(LEN=9) :: field
气象要素场的变量名称。这个变量名为对应于变量列表文件Vtable中的变量名称,而且必须是模式能够识别的名称。
CHARACTER(LEN=25) :: units
数据块中气象要素的单位。此记录只是用于文本信息描述要素场的,而模式本身不会根据此单位来实行自动转换。
CHARACTER(LEN=46) :: description
数据块中气象要素的详细描述信息。
REAL*4 :: level
数据块中气象要素所处的垂直等压面值,单位为帕。如果是地面气象要素,则此记录值为帕;如果是海平面气象要素,则此记录值为帕。
INTEGER*4 :: nx
二维数据块的x方向的范围大小。
INTEGER*4 :: ny
二维数据块的x方向的范围大小。
INTEGER*4 :: proj_flag
地图投影的标志变量。其中:
0:圆柱等距投影(经/纬格点) 1: 麦卡托投影 3:兰勃特等角投影
37
v1.0 可编辑可修改 5:极射赤面投影 (Polar Stereographic)
记录3:
CHARACTER(LEN=8) :: startloc
描述数据块中气象要素的数据的经纬度的相对起始点位置。有效值为:
‘SWCORNER’ : 经纬度相对起始点为左下角 ‘CENTER’ : 经纬度相对起始点为投影中心
REAL*4 :: startlat
起始点的纬度。
REAL*4 :: startlon
起始点的经度。
REAL*4 :: deltalat
经纬格点的纬度增量
REAL*4 :: deltalon
经纬格点的经度增量
REAL*4 :: dx
x方向的格距,指不投影变形处的格距。
REAL*4 :: dy
y方向的格距,指不投影变形处的格距。
REAL*4 :: orient
与y轴平行的经度值,通常为投影不变形的经度值。
REAL*4 :: truelat1
投影不变形的第一纬度值。
REAL*4 :: truelat2
投影不变形的第二纬度值,只有兰勃特投影时才有第二不变形纬度值。
38
WRF模式简易操作---中文指南
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)