IncubatorShokuhou / EmissionPetrubation

Generate petrubated emissions for wrfchem ensemble prediction based on mt19937 code by T.Nishimura and M.Matsumoto

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

排放源扰动程序

它能在wrfchem原有的排放源的基础上,生成若干组扰动的排放源。

排放源扰动程序的原始wrfchem排放源位于./origin/文件夹下。其中1level文件夹为垂直分层为1层的排放源文件。

排放源扰动程序的主要程序位于./main/文件夹下。直接运行./run.sh脚本即可执行。在运行前,首先需要确定netcdf库的位置:

export NETCDF=你的netcdf库位置

首先,输入需要生成的排放源组的个数。该个数必须为1~999之间的整数。接着,脚本会运行文件夹下的create_dirs.pl脚本,生成若干个文件夹,并将原始wrfchem排放源复制入文件夹中。

接着,编译并运行wrfchem.f90脚本。该脚本是源扰动程序的主要部分。它使用mt19937ar.f90的Module,首先生成了一组满足标准正态分布的随机数pfactors(Nmembers),其中Nmembers为上文确定的排放源组的个数。接着,对排放源文件中各个排放源变量进行扰动。根据分布类型的不同,扰动可分为正态分布和对数正态分布两种。分布类型可在运行run.sh脚本过程中,通过屏幕输入。最后,将经过扰动的变量赋值回其原本所在的nc文件中。

需要注意的是,在运行和编译wrfchem.f90脚本之前,需要对其进行一定修改。

INTEGER(4),PARAMETER :: south_north=99 INTEGER(4),PARAMETER :: west_east=159

上述两参数需要与实际的排放源文件中的经纬度维度相同。可以使用

ncdump -h ncdump -h wrfchemi_d01_2016-11-01_00:00:00.nc

查看该nc文件的文件头,并确定该两个参数的值。

另外,当对多个不同月份,使用同样的扰动参数,同时进行扰动时,需要修改

DO NNmonthsNN=11,12,1 ! determine the start and end month here

这一行。其中11,12分别为开始和结束的月份。

当wrfchem.f90编译并执行完成后,在./目录下每个文件夹内,应当会有Nmonths个nc文件(Nmonths为上一段所述多个月份的排放源文件)。如果需要生成一个时间序列的排放源文件,则需要编译并执行changedate*.f90文件。该文件可以修改以复制多份并重命名的nc文件中的时间变量(复制和重命名的脚本位于copy*.sh中,已由上述perl脚本复制入对应文件夹中),使它能适用于当wrfchem的namelist.input中io_style_emissions=2的情景。需要说明的是,若该月份天数不足31天,需要手动删除不存在的该月31日等日期。

本程序只使用于emiss_opt= 4的源文件的扰动。如果需要对其他源进行扰动,可以参照wrfchem.f90脚本自行编写。

nc2f90.f90脚本可帮助生成读取排放源nc文件的.f90文件。编译后,执行./nc2f90 input_file即可生成名为rd_netcdf_model.f90的文件。可在此文件和wrfchemi.f90的基础上进行相应修改。

下图为生成的扰动源的空间分布的效果对比。 Image text

About

Generate petrubated emissions for wrfchem ensemble prediction based on mt19937 code by T.Nishimura and M.Matsumoto

License:GNU General Public License v3.0


Languages

Language:Fortran 72.5%Language:Shell 22.1%Language:Perl 3.9%Language:NCL 1.4%