第4期,和大家一起交流一下如何使FVCOM输出自定义的变量。 前几日,针对第1期“FVCOM结果在Google Earth中的可视化”(点击回顾),有网友问可否将画图使用的flooding_cell变量直接输出到FVCOM的结果NetCDF文件中。所以,今天,在国内春节假期的最后一天,我们来讨论些轻松一点的内容,插入关于FVCOM输出自定义变量的问题。 目前,无论是output文件,还是restart和nesting,FVCOM是以NetCDF文件格式输出的,这样的好处是便于对结果数据识别和后处理。比如,我们可以直接使用VisIt软件(www.52ocean.cn)快速出图,查看某变量在各时次的分布状况;或者,我们可以使用MATLAB进行数据处理,对结果数据进行分析。 我们可通过修改nml文件的NML_STARTUP和NML_NETCDF部分,来改变输出文件的设置,各个设置的具体用法,请参考FVCOM Manual。 FVCOM已尽可能的设置各个与输出相关的参数来满足用户的不同需要。然而,有时我们需要的变量仍没有在结果文件中输出,或者,我们需要的变量并没有直接在FVCOM中计算。这时,我们就需要通过修改FVCOM代码,自定义所需要的变量,计算并输出该变量到结果文件。 我们就以第1期中的淹水模型为例,我们需要的变量是flooding_cell,即某时刻网格是否被淹没,淹没为1,未淹没或非陆地网格为0,该变量应为1维变量,维长为三角形个数(nele)。flooding_cell并没有在FVCOM中计算,我们给它的定义是该三角形本是陆地点,但被淹没。我们可以通过已有变量H1和ISWETC来计算得到flooding_cell。具体分三步,即声明,计算和输出。 第一,声明。在mod_wd.F中声明flooding_cell变量为一维整型动态数组,并分配空间,赋初始值: 第二,计算。根据定义,flooding_cell为1需要有两个条件:原本为陆地(H1<0.0)和该时刻被淹没(ISWETC==0)。由于计算中需要用到ISWETC,所以我们可以把flooding_cell的计算放在ISWETC的计算之后,即mod_wd.F中subroutine WET_JUDGE里。 第三,输出。修改都在mod_ncdio,F中的WET_DRY_FILE_OBJECT,分两部分。首先,在开始部分给该变量分配空间: 然后,添加该变量的具体信息(维和对应输出变量)和attribute: 至此,我们完成了输出自定义变量flooding_cells的修改。重新编译之后,FVCOM就会输出该变量到NetCDF结果文件中。 . \6 N0 C! [' |* v% L6 H; p& F
|