5
\ begingroup美元

在这里,我有一个区域排放清单,主要包含的变量纬度发射,发射形状是(纬度、经度)

例如:

  1. ODIAC,空间分辨率为1 * 1度,发射形状为(180360),单位:gC/m2/d;

  2. 赫斯提亚,空间分辨率为0.002 * 0.002度,发射形状为(521560)单位:千克;

现在,我必须根据地理坐标绘制排放图(纬度、经度)到WRF模型网格,它可能看起来像99 * 99网格间距为3公里,或87 * 87网格间距为1公里

在绘制地图的过程中,似乎涉及到排放清单旧网格面积的计算。

我不知道该怎么办。有什么有效的处理方法吗?

谢谢你的帮助。

\ endgroup美元
8
  • 1
    \ begingroup美元 给出了ODIAC排放清单的单位gC / m2 / d.您可以在不考虑网格单元格大小的情况下对该数据集进行插值。我做这样的重映射任务cdo.如果你想用cdo对Hestia数据集做同样的事情,也许可以使用这个选项setgridarea有帮助——但我不确定。但一般来说:是的,有人(程序或您)必须计算网格单元面积。 \ endgroup美元
    - - - - - -daniel.heydebreck
    2018年3月22日14:28
  • \ begingroup美元 @daniel。neumann,谢谢你的回复,我会努力学习的用法cdo第一。 \ endgroup美元
    - - - - - -艾伦张
    2018年3月22日15:21
  • 2
    \ begingroup美元 我建议使用Basemap模块创建一个python脚本(matplotlib.org/basemap),将模型和排放地理转换为x和y坐标,然后从那里插入数据。 \ endgroup美元
    - - - - - -BarocliniCplusplus
    2018年3月22日21:26
  • \ begingroup美元 @BarocliniCplusplus有更详细的例子吗? \ endgroup美元
    - - - - - -艾伦张
    2018年3月23日3:15
  • 1
    \ begingroup美元 Basemap用于创建映射。您可以创建与所使用的WRF网格相同的映射。Basemap常用的例子可以在这里找到:matplotlib.org/basemap/users/examples.html.然后我推荐使用scipy interp模块(docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html),将未网格化的数据插入网格。 \ endgroup美元
    - - - - - -BarocliniCplusplus
    2018年3月23日14:43

2答案2

2
\ begingroup美元

我建议使用cdo来达到你的目的。至少对于变量(其值与网格单元格大小无关),可以使用cdo。

cdo

cdo (Climate Data Operators)是一个处理netCDF和GRIB文件的命令行程序。它是由德国汉堡马克斯-普朗克气象研究所的Uwe Schulzweida及其同事开发和维护的。

Cdo提供了不同的操作符来处理数据。您可以在一个命令中链接多个操作符。你总是从呼叫cdo开始。例子:

cdo OPERATOR1 -OPERATOR2 -OPERATOR3 inputfile1。数控inputfile2。数控outputfile。nc cdo OPERATOR1 -OPERATOR2 inputfile1。nc -OPERATOR3 inputfile2。数控outputfile.nc

第一个运算符只是被追加到cdo.所有进一步追加的操作符都需要-作为后缀。

例子

假设我们有两个文件(file1.nc而且file2.nc)及部分海洋数据(风场盐度uv,……)。我们要计算的是风场两个文件。这是通过

Cdo diff -selname,sst file1。Nc -selname,sst file2。数控outfile.nc

我们也可以分四个步骤做到这一点:

Cdo selname,sst file1。数控sst_of_file1。Nc cdo selname,sst file2。数控sst_of_file2。Nc cdo diff sst_of_file1。数控sst_of_file2。数控outfile.nc

用cdo插值数据,不考虑网格单元格大小

Cdo为插值提供了不同的运算符。REMAPBIL对于双线性插值,REMAPNN用于最近邻插值,等等。它们都列在手册中。我使用remapbil这里举个例子。

cdo remapbil,NEW_GRID_DEF file_old_grid。数控file_new_grid.nc

file_old_grid.nc您的输入文件和file_new_grid.nc是您的输出文件。下面是我在GitHub工作的一个例子:

输入文件上的网格定义file_old_grid.nc需要得到cdo的认可。要测试一下,是否认不出来就可以试试

Cdo griddes file_old_grid.nc

如果它打印出正确的网格定义,那么一切都没问题。如果不是,则需要更正long - latgrid的定义。详情请参阅以下各部分。

NEW_GRID_DEF是一个文件,其中描述了目标网格。如果目标网格是一个定义良好的网格,则可以手动编写此文件。例如,它看起来像这样(复制自cdo的HTML手册):

Gridtype = lonlat xsize = 60 ysize = 30 xfirst = -177 xinc = 6 yfirst = -87 yinc = 6

有关“CDO网格”及“网格描述”,请参阅cdo HTML手册在此基础上,还可以举出更多的例子和解释。

如果您没有一个定义良好的网格,您可以生成您的NEW_GRID_DEF.这是我经常做的,因为我们的化学传输模型设置需要一个不精确定义的网格。

Cdo griddes file_with_wrf_grid_definition。nc > NEW_GRID_DEF

file_with_wrf_grid_definition.nc,需要定义模型网格,并由cdo进行识别。下面是我在GitHub工作的一个例子:

如何让cdo识别

cdo假设您的文件符合CF公约(气候及预报公约).请参阅CF公约文件的相关章节,以获得总体描述。

工作网格定义可以如下所示(作为ndump输出):

维度:时间=无限;//(1当前)lay = 1;Lat = 78;Lon = 62;变量:float lat(lat, lon);纬度:long_name = "纬度";纬度:单位=“北纬”;纬度:var_desc = "纬度(南向负)”;lat:cell_methods = "TSTEP, LAY: mean"; float lon(lat, lon) ; lon:long_name = "longitudes " ; lon:units = "degree east " ; lon:var_desc = "longitude (west negative) " ; lon:cell_methods = "TSTEP, LAY: mean" ; float DATA_VAR(time, lay, lat, lon) ; DATA_VAR:long_name = "some long var name" ; DATA_VAR:units = "some unit" ; DATA_VAR:var_desc = "some description" ; DATA_VAR:coordinates = "lat lon" ;

重要的方面是数据变量有一个属性坐标,该值包含两个lon和lat维度变量(我附上了第二个示例,以便更清楚)。此外,standard_name而且单位属性应该在维度变量处正确设置。

维度:时间=无限;//(1当前)lay = 1;Lat = 78;Lon = 62;变量:float lat_1(lat, lon);Lat_1:long_name = "latitudes ";Lat_1:standard_name = "latitudes ";Lat_1:单位=“北纬”;Lat_1:var_desc = "纬度(南向负)"”; float lon_1(lat, lon) ; lon_1:long_name = "longitudes " ; lon_1:standard_name = "longitudes " ; lon_1:units = "degree east " ; lon_1:var_desc = "longitude (west negative) " ; float DATA_VAR(time, lay, lat, lon) ; DATA_VAR:long_name = "some long var name" ; DATA_VAR:standard_name = "the standard name" ; DATA_VAR:units = "some unit" ; DATA_VAR:var_desc = "some description" ; DATA_VAR:coordinates = "lat_1 lon_1" ;

考虑网格单元大小,用cdo插值数据

不知道怎么用cdo

\ endgroup美元
3.
  • \ begingroup美元 你好,丹尼尔。当再思考这个问题时,海斯提亚的单位既然是公斤,我remapbil它是一个87 * 87直接域名的话,结果似乎有点奇怪。最大值从1698572771公斤。是因为没有考虑网格单元面积还是别的什么?然而,当我第一次使用gridboxsum 5 5命令然后remapbil时,数据的最大值才减小到124262公斤。我很困惑? \ endgroup美元
    - - - - - -艾伦张
    2018年6月11日14:04
  • \ begingroup美元 另一方面,看起来我们可以用gridarea计算cell_area,然后将其合并到文件中,然后使用exprnew_variable = original_variable / cell_area为了得到一个new_variableKg / m2 / h。但形状original_variable(时间、纬度、经度)的形状cell_area(纬度、经度)你有什么处理的经验吗? \ endgroup美元
    - - - - - -艾伦张
    2018年6月11日14:15
  • \ begingroup美元 似乎使用Cdo div文件。Nc网格区域文件。数控outfile.nc能得到通缉的价值吗new_variable,但我不确定整个过程是否正确?自后remapbil时,最大值会从4.460.073 \ endgroup美元
    - - - - - -艾伦张
    2018年6月12日7点12分
1
\ begingroup美元

使用R:

好了,

由于您有不同分辨率的数据,我建议您将数据转换为栅格,并重新采样以匹配wrf_inputs的网格单元格。注意质量守恒。然后将您的光栅转换为矩阵,data.frame,或'POLYGON'的空间特征,然后创建wrf_chemi文件

步骤:

  1. 光栅化你的排放量
  2. 栅格化你的wrf_inputs
  3. 重新取样排放
  4. 创建排放数据框架
  5. 创建wrf_chemis您的域
  6. 把你的污染物放入wrf_chemis

请阅读每个R包的文档光栅ratmos科幻小说静脉eixport

您可以通过以下方法对数据进行光栅化:

库(光栅)devtools: install_github(“ibarraespinosa / ratmos”)图书馆(ratmos)图书馆(sf)图书馆(静脉)图书馆(eixport) r <——光栅(emissions.tif) #或.nc光栅将使用gdal知道ri < - raster_wrf (wrfinput_d02) spplot (ri,鳞片=列表(画= T)) #检查图#然后它应该这样new_r < -作物(r, ri) #作物数据到新的光栅new_r < -重新取样(new_r ri) #检查选项df < - st_as_sf (rasterToPolygons (new_r)) #创建数组。检查你是否需要旋转你的数组一个<- griddemissionsarray (df cols = ncol(ri), rows = nrow(ri), rotate = T) #创建你的wrfchemi wrf_create('wrfinput', 'path_to_wrfchemi',…, '污染物')#,然后将您的排放在wrfchemi wrf_put('path_to_wrfchemi', ' name_of_污染物',a)

wrfinput

如果你需要帮助,给我发电子邮件sergio.ibarra@usp.br

最好的,塞吉奥

\ endgroup美元

    你的答案

    点击“张贴您的答案”,即表示您同意我们的服务条款隐私政策而且饼干的政策

    这不是你想要的答案?浏览带标签的其他问题问自己的问题