实用标准文档
获取调用场库的起止时间后,就可以初始化计算时间。初始化时间时,调用子程序build_hdate。每一次调用后都会返回一个格式为“yyyy-mm-dd_hh:mm:ss”的时间串。以起始时间为开始,在场库中找符合条件的时次,进行场库资料的读取,直到用户定义的调用终止时间为止。 在每一个要读取场库资料的有效时次内,遍历从变量列表中获取得每一个变量。但由于地形、海温和水陆标志信息特殊,要进行特殊处理。另外,由于T213场库中,有一些要素场保存的量仍为高斯格点场资料,故要求将其内插转换到经纬网格点上。这部分功能是调用子程序GAUSS2LATLON来完成的(这个子程序是在陈启英、姚明明提供的转换程序的基础上修改而成)。
最后模式的输出是根据用于定义的输出格式来输出的。在namelist.input文件中定义的OUT_TYPE就是定义输出格式的量。当OUT_PUT=1时,输出为SI程序中grib_prep.exe能识别处理的格式,当然,grib_prep.exe的程序源代码要稍加修改,这在后面将会讲到。输出时调用子程序out_pregrid,输出文件名为“avn_*”;当OUT_TYPE=2时,输出为SI程序中hinterp.exe能识别处理的格式,调用输出子程序out_hinterp,输出文件名为“AVN_FILE:*”;当OUT_TYPE=3时,输出为MM5的前处理程序能识别处理的格式。输出时调用子程序out_mm5来输出,输出文件名为“MM5_FILE:*”。
3.3 嵌套的实现
根据嵌套方案设计以及程序设计的具体实施,嵌套过程的实现可以通过三种具体方案来实现。实现的流程示意图如图11所示。
3.3.1 方案一
(1) 首先运行readt213.exe程序读取场库资料,将场库资料输出为
grib_prep.exe能够识别处理的格式。
(2) 在运行WRF SI前必须配置SI的参数列表文件namelist.input。
(3) 执行脚本文件grib_prep.pl ,它会调用grib_prep.exe程序。由于
grib_prep.exe程序处理的数据格式为GRIB码压缩格式,为了方便,可以将grib_prep.exe的源程序代码稍作修改,使其能直接读取文本格式的数据。具体做法是直接修改WRF SI源程序目录./src/grib_prep/grib.misc/目录下的rd_grib.F文件。将rd_grib.F中打开数据文件、读写数据的语句注释掉,然后添加相应的Fortran中打开文本格式文件的语句和相应的读写数据的语句。
? 打开文件:
源代码:
if (iuarr(iunit).eq.0) then if (iprint.eq.1) then
call copen(iunit, nunit, gribflnm, 1, ierr, iprint) else
call copen(iunit, nunit, gribflnm, 1, ierr, -1) endif
文案大全
if (ierr.ne.0) then call deallogrib ierr = 2 return endif
iuarr(iunit) = nunit endif
修改为:
实用标准文档
if (iuarr(iunit).eq.0) then open(iunit, file=gribflnm, status='old', iostat=ierr) nunit = iunit
if (ierr.ne.0) then
if (iprint==1) print*, 'Open file error code: ', ierr
call deallogrib ierr = 2 return endif
iuarr(iunit) = nunit endif
? 读变量场头信息: 源代码: read(iunit,*,end=9112)(ksec1(i), call get_sec1(ksec1) i=1,24) call get_sec2(ksec2) read(iunit,*,end=9112)(ksec2(i), call get_gridinfo(infogrid, i=1,4) ginfo) read(iunit,*,end=9112)(ginfo(i), i=1,24)修改为:
? 读变量场数据:
源程序:call gribdata(DataArray,map%nx*map%ny) 修改为:read(iunit,*,end=9112)(DataArray(i),i=1,ii)
为了程序的安全运行,还必须修改grib_prep.F程序源代码,将文件
关闭语句作相应的修改:
源代码:call cclose(iuarr(nunit1), iprint, ierr) 修改为:close(iuarr(nunit1))
做完修改后,重新编译安装WRF SI源程序或者单独编译
grib_prep.exe程序。 (4)执行interp.pl脚本文件,它会依次调用hinterp.exe和vinterp.exe程序。如果
是第一次运行或者重新计算新的区域时,则在运行hinterp.exe程序前还会运行gridgen_model.exe程序。
运行成功后,会生成WRF所需要的预处理数据文件real_input* 。
3.3.2 方案二
(1) 首先运行readt213.exe程序,读取场库资料,将场库资料输出为
hinterp.exe能够识别处理的格式。
此格式要求格式文件为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:
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
数据块中气象要素所处的垂直等压面值,单位为帕。如果是地面气象要素,则此记录值为200100.0帕;如果是海平面气象要素,则此记录值为201300.0帕。
INTEGER*4 :: nx
二维数据块的x方向的范围大小。
INTEGER*4 :: ny
二维数据块的x方向的范围大小。
INTEGER*4 :: proj_flag
地图投影的标志变量。其中:
0:圆柱等距投影(经/纬格点) 1: 麦卡托投影 3:兰勃特等角投影
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
投影不变形的第二纬度值,只有兰勃特投影时才有第二不变形纬度值。
(2) 设置WRF SI的参数列表文件namelist。 (3) 执行interp.pl脚本文件,它会依次调用hinterp.exe和vinterp.exe程序。如果是
第一次运行或者重新计算新的区域时,则在运行hinterp.exe程序前还会运行gridgen_model.exe程序。
运行成功后,会生成WRF所需要的预处理数据文件real_input* 。
3.3.3 方案三
(1)首先运行readt213.exe,读取场库资料,将场库资料输出为MM5前处理程序能够识别处理的格式。
此格式要求格式文件为Fortran的顺序读取的无格式数据文件。文件中
的数据都是写出三个记录数据和一个二维数据块的形式。二维数据块总是二维(nx,ny)实型数组。而前两个记录数据包括的记录元是固定不变的,第三个记录数据包括记录元则随数据本身采用地图投影不同而不同。具体的记录成员及其说明如下:
记录1:version
记录2:hdate, xfcst, field, units, decription, level 如果 proj_flag=0那么
记录3:startlat, startlon, deltalat, deltalon 如果 proj_flag=1那么
记录3:startlat, startlon, dx, dy, truelat1 如果 proj_flag=3那么
文案大全
实用标准文档
记录3:startlat, startlon, dx, dy, orient, truelat1, truelat2 如果 proj_flag=5那么
记录3:startlat, startlon, dx, dy, orient, truelat1
记录1:
INTEGER*4 :: version
数据的版本号,此版本号为3。 记录2:
CHARACTER(LEN=24) :: hdate
数据的有效时间,格式为YYYY-MM-DD-HH:mm:ss:ssss。 REAL*4 :: xfcst 数据块的预报时效,单位为小时。 CHARACTER(LEN=9) :: field
气象要素场的变量名称。这个变量名为对应于变量列表文件Vtable中的变量名称,而且必须是模式能够识别的名称。
CHARACTER(LEN=25) :: units
数据块中气象要素的单位。此记录只是用于文本信息描述要素场的,而模式本身不会根据此单位来实行自动转换。
CHARACTER(LEN=46) :: description
数据块中气象要素的详细描述信息。
REAL*4 :: level
数据块中气象要素所处的垂直等压面值,单位为帕。如果是地面气象要素,则此记录值为200100.0帕;如果是海平面气象要素,则此记录值为201300.0帕。
INTEGER*4 :: nx
二维数据块的x方向的范围大小。
INTEGER*4 :: ny
二维数据块的x方向的范围大小。
INTEGER*4 :: proj_flag
地图投影的标志变量。其中:
0:圆柱等距投影(经/纬格点) 1: 麦卡托投影 3:兰勃特等角投影
5:极射赤面投影 (Polar Stereographic)
记录3:
REAL*4 :: startlat
起始点的纬度。
REAL*4 :: startlon
起始点的经度。
REAL*4 :: deltalat
经纬格点的纬度增量
REAL*4 :: deltalon
经纬格点的经度增量
REAL*4 :: dx
文案大全