如果WPS要处理的区域太大,无法容纳在单个CPU的内存中,那么可以在分布式内存配置中运行geogrid和metgrid程序。为了编译geogrid和metgrid以执行分布式内存,用户必须在计算机上安装MPI库,并且必须使用“DMparallel”配置选项编译WPS。编译成功后,geogrid和metgrid程序可以使用mpirun或mpiexec命令运行,也可以通过批处理队列系统运行,具体取决于机器。
如前所述,ungrib程序不适用于并行化,而且,ungrib处理的内存需求独立于geogrid和metgrid的内存需求;因此,不管配置期间是否采用“DMparallel”配置选项,ungrib总是为单个处理器编译并在单个CPU上运行。
每个标准WRFI/OAPI格式(NetCDF、GRIB1、binary)都有一个对应的并行格式,其编号是通过将标准格式的io_form值(即io_form_geogrid和io_form_metgrid的值)加100来给出的。不必使用并行io_form,但当使用并行io_form形式时,每个CPU都会将其输入/输出读/写到一个单独的文件中,该文件的名称就是是“串行执行期间使用的名称”+“四位的处理器ID”。例如,在io_form_geogrid=102的四个处理器上运行geogrid将为粗网格创建名为geo_em.d01.nc.0000、geo_em.d01.nc.0001、geo_em.d01.nc.0002和geo_em.d01.nc.0003的输出文件。
在分布式内存执行期间,模型域被分解为矩形块(patches),每个处理器处理单个块。当从WRFI/OAPI格式读/写时,每个处理器只读/写各自对应的块。因此,如果geogrid的输出选择的是并行io形式,那么运行metgrid时也必须选择相同数量的处理器。类似地,如果为metgrid输出文件选择了并行io形式,则运行real程序时必须使用相同数量的处理器。当然,当在多个处理器上运行时,仍然可以使用标准的io_form,在这种情况下,模型域的所有数据都将在输入/输出时分发/收集。最后,当在多个处理器上运行geogrid或metgrid时,每个处理器都将编写自己的日志文件,日志文件名将附加与用于I/oAPI文件的相同的四位处理器ID号。
在运行WPS时,检查程序生成的输出可能会有所帮助。例如,在确定嵌套的位置时,查看插值的静态地理数据和纬度/经度变量可能会有所帮助。另一个例子是,在将新的数据源(静态数据或气象数据)导入WPS时,检查生成的插值场通常是有帮助的,以便对geogrid或metgrid使用的插值方法进行调整。
如果把geogrid和metgridI/O格式设置成NetCDF格式,就可以使用各种读取NetCDF数据的可视化工具来检查geogrid处理的区域文件或metgrid生成的水平插值气象场。为了将geogrid和metgrid的文件格式设置为NetCDF,用户应将WPSnamelist文件中的io_form_geogrid和io_form_metgrid设置成2(注意:2是这些选项的默认设置):
&shareio_form_geogrid=2,/&metgridio_form_metgrid=2,/在这些可用的工具中,ncdump、ncview和新的RIP4程序可能会引起兴趣。ncdump程序是一个与NetCDF库一起分发的实用小工具,它能输出NetCDF文件中的变量和属性。这对于检查geogrid区域文件中的网格参数(例如,东西向维度、南北向维度或域中心点)尤其有用。ncview程序提供了一种交互式方式来查看NetCDF文件中的变量。此外,希望生成适合出版的图的用户可能会对新版的RIP4程序的感兴趣。新版的RIP4能够绘制水平等高线,地图背景,并在同一个绘图叠加多个变量。
ungrib程序的输出文件总是以简单的二进制格式(‘WPS’、‘SI’或‘MM5’)编写的,因此无法使用查看NetCDF文件的软件查看。但是,随WPS源代码一起,提供了基于NCAR图形的实用程序plotfmt。这个实用程序可以绘制的等高线图。如果正确安装了NCAR图形库,则在编译WPS时,plotfmt程序将与其他实用程序一起自动编译。(注意:plotfmt和plotgrids程序在WRF4.2.1中不是自动编译的,需要执行./compileplotfmt和./compileplotgrids命令手动编译)
除了三个主要的WPS程序geogrid、ungrib和metgrid之外,还有许多WPS附带的实用程序,它们被编译在util目录中。这些实用程序可用于检查数据文件、可视化嵌套域的位置、计算气压场和计算平均表面温度场。
mod_levs.exe程序用于从中间格式文件中删除数据的层次。在namelist.wps文件中有一个新的变量,用来说明哪些层次需要保留。
&mod_levspress_pa=201300,200100,100000,95000,90000,85000,80000,75000,70000,65000,60000,55000,50000,45000,40000,35000,30000,25000,20000,15000,10000,5000,1000/在&mod_levsnamelist记录中,变量press_pa用于指定要保留的层次列表;指定的层次应与中间格式文件中xlvl的值匹配(有关中间文件场的更多信息,请参阅WPS中间格式的说明)。mod_levs程序采用两个命令行参数作为输入。第一个参数是要操作的中间文件的名称,第二个参数是要写入的输出文件的名称。
mod_levs实用程序是解决容纳两个或更多具有不同垂直级别数的数据集的问题的一种临时解决方案。如果用户选择使用mod_levs,应该注意的是,虽然在数据集之间的垂直层次的位置不需要匹配,所有数据集应该有一个地面层的数据,并且,当运行real.exe和wrf.exe时,p_top的值必须位于在数据集最低的顶层以下。
在垂直插值气象场的过程中,real程序要求三维气压和位势高度场与其他大气场在同一层次上。calc_ecmwf_p.exe实用程序可用于创建这些场,以便与ECMWF-sigma层次数据集一起使用。给定地面气压场(或地面压力场的对数)和系数a和B的列表,calc_ecmwf_p.exe就可以计算网格点(i,j)在ECMWF-sigma层的第k层处的压力:Pijk=Ak+Bk*Psfcij。计算气压中使用的系数可以从一个合适的表中复制,该表适用于以下链接之一的数据集中的sigma层次数:
此表应以纯文本形式写入当前工作目录中的文件ecmwf_coeffs;例如,对于16层sigma层次,文件ecmwf_coeffs将包含以下内容:
00.0000000.00000000015000.0000000.00000000029890.5195310.001720764314166.3046880.013197623417346.0664060.042217135519121.1523440.093761623619371.2500000.169571340718164.4726560.268015683815742.1835940.384274483912488.0507810.510830879108881.8242190.638268471115437.5390630.756384850122626.2578130.85561275513783.2966310.928746223140.0000000.972985268150.0000000.992281914160.0000001.000000000此外,如果有土壤高度(或土壤位势)、三维温度场和三维比湿场这些变量,calc_ecmwf_p.exe将计算三维位势高度场,这是在real程序中获得精确垂直插值所需的。
real程序需要三维气压和位势高度场来垂直插值metgrid程序的输出;然而,来自UKMO统一模型的数据集包含一个三维气压场,但不包含一个位势高度场。因此,可以使用height_ukmo.exe程序计算UKMOUnifiedModel数据集的位势高度场。height_ukmo.exe程序不需要命令行参数,但读取namelist中的&metgrid记录以获得ungrib.exe创建的中间文件的前缀;由namelist中的&metgrid记录的fg_name变量的第一个前缀表示的中间文件预计将包含一个SOILHGT变量,hight_ukmo.exe程序在辅助表的帮助下从该变量计算三维位势高度变量。计算的高度变量被写入一个新的中间文件,该文件的前缀为HGT,然后应该在运行metgrid.exe之前将前缀'HGT'添加到namelist中的&metgrid部分中的fg_name变量中。包含辅助表的文件的名称目前硬连接在height_ukmo.exe程序的源代码中,用户负责将WPS/util/src/height_ukmo.F中的文件名更改为与ungrib.exe处理的GRIB数据具有相同层次数目的表名;WPS/util目录中提供了38、50和70层的数据表,文件名分别为vertical_grid_38_20m_G3.txt,vertical_grid_50_20m_63km.txt,和vertical_grid_70_20m_80km.txt。
plotgrids.ncl程序是一个基于NCAR图形的实用程序,其目的是绘制namelist.wps文件中定义的所有嵌套的位置。程序对namelist.wps文件进行操作,因此,可以在不运行任何三个WPS主程序的情况下运行。成功完成后,plotgrids将生成一个选定格式的图形文件(有关对输出格式的更改,请参见plotgrids.ncl脚本),绘制粗网格域占整个绘图框,在网格上绘制带有政治边界的地图轮廓,任何嵌套域都被绘制为矩形,勾勒出每个嵌套的范围。这个实用程序可能非常有用,特别是在域的初始设置期间,此时用户可以通过迭代“编辑namelist.wps文件调整嵌套的位置,运行plotgrid.ncl”,从而确定对巢位置的一组调整。要运行这个程序,只需在命令行中WPS/目录中键入'nclutil/plotgrids.ncl'。目前,此实用程序不适用于使用经纬度投影的ARW网格(例如,当map_proj='lat-on')。
g1print.exe程序的输入参数是GRIBEdition1文件的名称,程序打印出文件中数据的变量、层次和日期的列表。
类似于类似于g1print.exe,g2print.exe程序将GRIBEdition2文件的名称作为它唯一的命令行参数。程序打印出文件中数据的字段、级别和日期的列表。,g2print.exe程序将GRIBEdition2文件的名称作为它唯一的命令行参数。程序打印出文件中数据的字段、级别和日期的列表。
在命令行中给定一个单一中间格式文件的名称,rd_intermediate.exe程序将打印关于文件中包含的字段的信息。
ungrib程序的作用是将GRIB数据集解码为metgrid能够理解的简单中间格式。如果气象数据不能使用GRIB第1版或GRIB第2版格式,用户有责任将其写入中间文件格式。幸运的是,中间格式相对简单,由一系列未格式化的Fortran写入组成。需要注意的是,这些未格式化的写操作使用大端字节顺序,这通常可以用编译器标记来指定。下面,我们描述WPS中间格式;对SI或MM5中间格式感兴趣的用户可以先熟悉WPS格式,WPS格式非常类似,然后再研究读写所有这三种中间格式的Fortran子例程(metgrid/src/read_met_module.F和metgrid/src/write_met_module.F)。
TheroleoftheungribprogramistodecodeGRIBdatasetsintoasimpleintermediateformatthatisunderstoodbymetgrid.IfmeteorologicaldataarenotavailableinGRIBEdition1orGRIBEdition2formats,theuserisresponsibleforwritingsuchdataintotheintermediatefileformat.Fortunately,theintermediateformatisrelativelysimple,consistingofasequenceofunformattedFortranwrites.Itisimportanttonotethattheseunformattedwritesusebig-endianbyteorder,whichcantypicallybespecifiedwithcompilerflags.Below,wedescribetheWPSintermediateformat;usersinterestedintheSIorMM5intermediateformatscanfirstgainfamiliaritywiththeWPSformat,whichisverysimilar,andlaterexaminetheFortransubroutinesthatreadandwriteallthreeintermediateformats(metgrid/src/read_met_module.Fandmetgrid/src/write_met_module.F,respectively).
WhenwritingdatatotheWPSintermediateformat,2-dimensionalfieldsarewrittenasarectangulararrayofrealvalues.3-dimensionalarraysmustbesplitacrosstheverticaldimensioninto2-dimensionalarrays,whicharewrittenindependently.Itshouldalsobenotedthat,forglobaldatasets,eitheraGaussianorcylindricalequidistantprojectionmustbeused,andforregionaldatasets,eitheraMercator,Lambertconformal,polarstereographic,orcylindricalequidistantmaybeused.Thesequenceofwritesusedtowriteasingle2-dimensionalarrayintheWPSintermediateformatisasfollows(notethatnotallofthevariablesdeclaredbelowareusedforagivenprojectionofthedata).
Fieldnameinintermediatefile
Units
Description
Notes
TT
K
3-dairtemperature
RH
%
3-drelativehumidity
NotneededifSPECHUMDisavailable
SPECHUMD
kgkg-1
3-dspecifichumidity
NotneededifRHisavailable
UU
ms-1
3-dwindu-component
VV
3-dwindv-component
GHT
m
3-dgeopotentialheight
PRESSURE
Pa
3-dpressure
Onlyneededfornon-isobaricdatasets
PSFC
Surfacepressure
PMSL
Meansea-levelpressure
SKINTEMP
Skintemperature
SOILHGT
Soilheight
2-meterairtemperature
2-meterrelativehumidity
2-meterspecifichumidity
10-meterwindu-component
10-meterwindv-component
LANDSEA
fraction
Land-seamask(0=water,1=land)
SMtttbbb
m3m-3
Soilmoisture
'ttt'isthelayertopdepthincm,and'bbb'isthelayerbottomdepthincmSTtttbbb
Soiltemperature
SOILMmmm
kgm-3
'mmm'istheleveldepthincm,notneededifSMtttbbbavailableSOILTmmm
当运行MPAS模拟时,输出流必须设置为包含初始化WRF模拟所需的最小字段集。对于MPASv5,下面的输出流应该足够了。x和以后的代码。WhenrunninganMPASsimulation,anoutputstreammustbesetuptocontaintheminimumsetoffieldsnecessarytoinitializeaWRFsimulation.ThefollowingoutputstreamshouldbesufficientwiththeMPASv5.xandlatercode.
&metgridconstants_name=‘mpas:static.nc’fg_name=‘mpas:MPAS’/Intheaboveexample,themetgrid.exeprogramwouldfirstreadtheMPAS‘static.nc’filetoreadmeshinformationandcomputeremappingweightsfromtheMPASmeshtotheWRFdomaindefinedbythegeogrid.exeprogram,thenalltimeperiodsoftheMPASfileswithaprefixof‘MPAS’(andasuffixofYYYY-MM-DD_HH.nc)wouldbeprocessed.Thereal.exeprogramcanthenberunasusual.
Datafromintermediatefilescreatedbytheungrib.exeprogramcanbecombinedwithMPASdatabythemetgridprogram.Thismaybeuseful,e.g.,touseSST,seaice,orland-surfacefieldsfromanothersource.AnexampleofcombiningMPASdatawithERA-Interimintermediatefileswithsoildata(withtheprefix‘ERAI_SOIL’)isshownbelow.
&metgridconstants_name=‘mpas:static.nc’fg_name=‘mpas:MPAS’,‘ERAI_SOIL’/BecausetheMPAS‘zgrid’fielddoesnotchangeintime,itcanbeomittedfromtheMPASperiodicoutputstream;inthiscase,however,the‘zgrid’fieldmustbeplacedinitsownnetCDFfilethatmustalsodefinethedimension‘Time’asanetCDFunlimiteddimension.Then,thisfile(say,‘zgrid.nc’)canbesuppliedtothemetgridprogramusingtheconstants_namenamelistvariable,e.g.,
&metgridconstants_name=‘mpas:static.nc’,‘mpas:zgrid.nc’fg_name=‘mpas:MPAS’/Placingthe‘zgrid’fieldinitsownfilecansaveconsiderablespacewhenlongMPASsimulationsarerun,orwhentheoutputstreamtobeusedasWRFinitialandboundaryconditionsiswrittenoutathightemporalfrequency.Thepythonscript,below,mayserveasanexampleofhowtoextractthe‘zgrid’fieldtoitsownnetCDFfile.
fromnetCDF4importDatasetfin=Dataset('init.nc')fout=Dataset('zgrid.nc','w',format='NETCDF3_64BIT')nCells=fin.dimensions['nCells'].sizenVertLevelsP1=fin.dimensions['nVertLevelsP1'].sizefout.createDimension(dimname='Time',size=None)fout.createDimension(dimname='nCells',size=nCells)fout.createDimension(dimname='nVertLevelsP1',size=nVertLevelsP1)fout.createVariable(varname='zgrid',datatype='f',dimensions=('nCells','nVertLevelsP1'))fout.variables['zgrid'][:]=fin.variables['zgrid'][:]fout.close()fin.close()ItisworthnotingthattheuseofnativeMPASoutputwithmetgrid.exehasnotbeenthoroughlytestedforparallel(i.e.,“dmpar”)buildsoftheWPS;asoftheWPSv4.0release,itisthereforerecommendedtorunmetgrid.exeinserialwhenprocessingMPASdatasets.
Also,incasesoflargeMPASmeshes,itmaybenecessarytoincreasethevalueoftwoconstantsinthemetgridcodethatareusedtostaticallyallocateseveraldatastructuresusedinthecomputationofremappingweightsfromtheMPASmeshtotheWRFdomain.Thesetwoconstants,shownbelow,arelocatedintheWPS/src/metgrid/remapper.Ffile.
!shouldbeatleast(earthcircumference/minimumgriddistance)integer,parameter::max_queue_length=2700!shouldbeatleast(nCells/32)integer,parameter::max_dictionary_size=82000Afterchangingthevalueoftheseconstants,metgridmustberecompiled.
ungrib程序的作用是将GRIB数据集解码为metgrid能够读取的简单中间格式。如果气象数据不是GRIB1或GRIB2版的格式,用户应当将自行其写入中间文件格式。幸运的是,中间格式相对简单,由一系列未格式化的Fortran写操作完成。需要注意的是,这些未格式化的写操作使用大端字节序,这通常可以用编译器标记来指定。下面,我们描述WPS中间格式;对SI或MM5中间格式感兴趣的用户可以先熟悉WPS格式(这与它们非常类似),然后再研究读写所有这三种中间格式的Fortran子程序(metgrid/src/read_met_module.F和metgrid/src/write_met_module.F)。
当运行MPAS模拟时,输出流必须设置为包含WRF模拟初始化所需的最小变量的集合。对于MPASv5.x和以后的版本的代码,下面的输出流应该足够了。
fromnetCDF4importDatasetfin=Dataset('init.nc')fout=Dataset('zgrid.nc','w',format='NETCDF3_64BIT')nCells=fin.dimensions['nCells'].sizenVertLevelsP1=fin.dimensions['nVertLevelsP1'].sizefout.createDimension(dimname='Time',size=None)fout.createDimension(dimname='nCells',size=nCells)fout.createDimension(dimname='nVertLevelsP1',size=nVertLevelsP1)fout.createVariable(varname='zgrid',datatype='f',dimensions=('nCells','nVertLevelsP1'))fout.variables['zgrid'][:]=fin.variables['zgrid'][:]fout.close()fin.close()值得注意的是,还没有彻底测试使用并行(即“dmpar”)编译的WPS程序,用metgrid.exe程序中使用本地MPAS输出;从WPSv4.0版本开始,建议在处理MPAS数据集时串行运行metgrid.exe。
此外,在大型MPAS网格的情况下,可能需要增加metgrid代码中两个常量的值,这两个常量用于静态分配几个数据结构,这些数据结构用于计算从MPAS网格到WRF域的重映射权值。下面显示的这两个常量位于WPS/src/metgrid/remapper.F文件中。
!shouldbeatleast(earthcircumference/minimumgriddistance)integer,parameter::max_queue_length=2700!shouldbeatleast(nCells/32)integer,parameter::max_dictionary_size=82000