使用 cdo(气候数据运算符)以每日时间步长存储的变量的每月总和
Monthly sum of of a variable stored at daily timesteps using cdo (Climate Data Operators)
我有一个 40 年的 nc 文件,用于以每日时间分辨率记录的变量。我想按月对这些进行总结,并尝试了以下方法:
cdo monsum inputfile.nc outputfile.nc
虽然这运行没有错误,但我在输出文件中只得到一帧。我希望有一个更大的文件。
我认为这可能是输入文件中的时间问题。
从ncdump-h input file
复制信息:
dimensions:
time = UNLIMITED ; // (14975 currently)
longitude = 40 ;
latitude = 66 ;
variables:
double time(time) ;
time:standard_name = "time" ;
time:units = "days since 1979-1-1 00:00:00" ;
time:calendar = "proleptic_gregorian" ;
time:axis = "T" ;
double longitude(longitude) ;
longitude:standard_name = "projection_x_coordinate" ;
longitude:long_name = "longitude" ;
longitude:units = "degrees_east" ;
longitude:axis = "X" ;
double latitude(latitude) ;
latitude:standard_name = "projection_y_coordinate" ;
latitude:long_name = "latitude" ;
latitude:units = "degrees_north" ;
latitude:axis = "Y" ;
int crs ;
crs:proj4 = "+proj=longlat +datum=WGS84" ;
float variable(time, latitude, longitude) ;
variable :grid_mapping = "crs" ;
variable :_FillValue = -3.4e+38f ;
variable :missing_value = -3.4e+38f ;
variable :proj4 = "+proj=longlat +datum=WGS84" ;
variable :min = 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0. ;
variable :max = 6.5701843261719, 8.62581787109377, 6.24334106445315, 8.29082641601565, 7.59359130859377, 10.0182434082031, 9.76052246093752, 9.95830688476565, 10.3648010253906, 12.8482604980469, 13.1276489257813, 13.1267333984375, 10.9829345703125, 9.82497558593752, 10.1014953613281, 11.8195434570313, 13.9579711914063, 10.0517211914063, 9.37850341796877, 11.3964782714844, 13.0114074707031, 14.4672180175781, 11.4755798339844, 10.6639953613281, 11.3891540527344, 11.9616943359375, 13.7388854980469, 5.56426391601565, 7.07705078125002, 7.64479980468752, 8.25527343750002 ; // global attributes:
:CDI = "Climate Data Interface version 1.9.10 (https://mpimet.mpg.de/cdi)" ;
:Conventions = "CF-1.4" ;
:created_by = "R, packages ncdf4 and raster (version 3.4-10)" ;
:date = "2021-10-06 11:52:06" ;
:history = "Mon Oct 18 13:50:40 2021: cdo setreftime,1979-01-01,00:00:00 kdd_AR_1979_2019.nc kdd_AR_1979_2019_adj.nc\n",
非常感谢您的帮助。很抱歉没有提供一个简单的可重现的例子。如果需要,我可以通过 we-transfer 等方式共享数据。谢谢!
CDO 使用属性 proj_params 来识别项目参数。您文件中的相应属性是 proj4。您需要重命名此属性以自动应用项目参数:
ncrename -a crs@proj4,proj_params file.nc
I found this answer here from Uwe Schulzweida
完成后,我希望您可以正确地使用 cdo 处理文件,如果它有效,请告诉我。如果不满意 post cdo showdate file.nc 的结果,因为这有助于了解 CDO 是否可以正确处理日期格式
编辑:此解决方案无法解决由 OP post 编辑的时间处理问题,但我将保留它,因为无论如何都需要对这些文件进行任何空间处理。使用坐标参考系统 (CRS) 的 NetCDF 文件需要确保它们与 CF 兼容,以便 CDO 能够正确处理它们。
感谢阿德里安·汤普金斯 (Adrian Tompkins) 带领我直接找到了答案。我必须修复此处用作输入的合并文件的时间轴。这可以使用
settaxis operator
。这是完整命令的示例:
cdo settaxis,date,time[,inc] infile outfile
我有一个 40 年的 nc 文件,用于以每日时间分辨率记录的变量。我想按月对这些进行总结,并尝试了以下方法:
cdo monsum inputfile.nc outputfile.nc
虽然这运行没有错误,但我在输出文件中只得到一帧。我希望有一个更大的文件。
我认为这可能是输入文件中的时间问题。
从ncdump-h input file
复制信息:
dimensions:
time = UNLIMITED ; // (14975 currently)
longitude = 40 ;
latitude = 66 ;
variables:
double time(time) ;
time:standard_name = "time" ;
time:units = "days since 1979-1-1 00:00:00" ;
time:calendar = "proleptic_gregorian" ;
time:axis = "T" ;
double longitude(longitude) ;
longitude:standard_name = "projection_x_coordinate" ;
longitude:long_name = "longitude" ;
longitude:units = "degrees_east" ;
longitude:axis = "X" ;
double latitude(latitude) ;
latitude:standard_name = "projection_y_coordinate" ;
latitude:long_name = "latitude" ;
latitude:units = "degrees_north" ;
latitude:axis = "Y" ;
int crs ;
crs:proj4 = "+proj=longlat +datum=WGS84" ;
float variable(time, latitude, longitude) ;
variable :grid_mapping = "crs" ;
variable :_FillValue = -3.4e+38f ;
variable :missing_value = -3.4e+38f ;
variable :proj4 = "+proj=longlat +datum=WGS84" ;
variable :min = 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0. ;
variable :max = 6.5701843261719, 8.62581787109377, 6.24334106445315, 8.29082641601565, 7.59359130859377, 10.0182434082031, 9.76052246093752, 9.95830688476565, 10.3648010253906, 12.8482604980469, 13.1276489257813, 13.1267333984375, 10.9829345703125, 9.82497558593752, 10.1014953613281, 11.8195434570313, 13.9579711914063, 10.0517211914063, 9.37850341796877, 11.3964782714844, 13.0114074707031, 14.4672180175781, 11.4755798339844, 10.6639953613281, 11.3891540527344, 11.9616943359375, 13.7388854980469, 5.56426391601565, 7.07705078125002, 7.64479980468752, 8.25527343750002 ; // global attributes:
:CDI = "Climate Data Interface version 1.9.10 (https://mpimet.mpg.de/cdi)" ;
:Conventions = "CF-1.4" ;
:created_by = "R, packages ncdf4 and raster (version 3.4-10)" ;
:date = "2021-10-06 11:52:06" ;
:history = "Mon Oct 18 13:50:40 2021: cdo setreftime,1979-01-01,00:00:00 kdd_AR_1979_2019.nc kdd_AR_1979_2019_adj.nc\n",
非常感谢您的帮助。很抱歉没有提供一个简单的可重现的例子。如果需要,我可以通过 we-transfer 等方式共享数据。谢谢!
CDO 使用属性 proj_params 来识别项目参数。您文件中的相应属性是 proj4。您需要重命名此属性以自动应用项目参数:
ncrename -a crs@proj4,proj_params file.nc
I found this answer here from Uwe Schulzweida
完成后,我希望您可以正确地使用 cdo 处理文件,如果它有效,请告诉我。如果不满意 post cdo showdate file.nc 的结果,因为这有助于了解 CDO 是否可以正确处理日期格式
编辑:此解决方案无法解决由 OP post 编辑的时间处理问题,但我将保留它,因为无论如何都需要对这些文件进行任何空间处理。使用坐标参考系统 (CRS) 的 NetCDF 文件需要确保它们与 CF 兼容,以便 CDO 能够正确处理它们。
感谢阿德里安·汤普金斯 (Adrian Tompkins) 带领我直接找到了答案。我必须修复此处用作输入的合并文件的时间轴。这可以使用
settaxis operator
。这是完整命令的示例:
cdo settaxis,date,time[,inc] infile outfile