使用 CDO 从 netcdf 计算降水量的月平均值和年总和
Calculate monthly average and annual sum of precipitation from netcdf with CDO
我正在使用 CRU ts_4.04 数据学习 netCDF 和 CDO。我想计算伦敦降水量的月平均值和年总和。我写道:
#!/usr/bin/bash
lon=-0.11
lat=51.49
PREFNAME="/myHD/CRU4.04/pre/cru_ts4.04.1901.2019.pre.dat.nc"
OUTFNAME="outfile-"
echo "1970-2000 monthly average and annual sum of precipitations in London"
cdo remapnn,lon=$lon/lat=$lat $PREFNAME $OUTFNAME"place.nc"
cdo selvar,pre $OUTFNAME"place.nc" $OUTFNAME"var.nc"
cdo selyear,1970/2000 $OUTFNAME"var.nc" $OUTFNAME"years.nc"
cdo ymonmean $OUTFNAME"years.nc" $OUTFNAME"yearsmean.nc"
cdo timcumsum $OUTFNAME"yearsmean.nc" $OUTFNAME"yearsum.nc"
cdo info $OUTFNAME"yearsum.nc"
cdo info $OUTFNAME"yearsmean.nc"
exit
我得到:
MyPC:~/workbench01$ ./gotit2.sh
1970-2000 monthly average and annual sum of precipitations in London
cdo remapnn: Nearest neighbor weights from lonlat (720x360) to lonlat (1x1) grid, with source mask (67420)
cdo remapnn: Processed 2 variables over 1428 timesteps [2.64s 60MB].
cdo selname: Processed 2 variables over 1428 timesteps [0.01s 52MB].
cdo selyear: Processed 1 variable over 1428 timesteps [0.00s 51MB].
cdo ymonmean: Processed 1 variable over 372 timesteps [0.00s 51MB].
cdo timcumsum: Processed 1 variable over 12 timesteps [0.00s 51MB].
-1 : Date Time Level Gridsize Miss : Minimum Mean Maximum : Parameter ID
1 : 2000-01-16 00:00:00 0 1 0 : 81.229 : -1
2 : 2000-02-15 00:00:00 0 1 0 : 132.26 : -1
3 : 2000-03-16 00:00:00 0 1 0 : 189.70 : -1
4 : 2000-04-16 00:00:00 0 1 0 : 244.82 : -1
5 : 2000-05-16 00:00:00 0 1 0 : 298.52 : -1
6 : 2000-06-16 00:00:00 0 1 0 : 356.92 : -1
7 : 2000-07-16 00:00:00 0 1 0 : 402.39 : -1
8 : 2000-08-16 00:00:00 0 1 0 : 456.03 : -1
9 : 2000-09-16 00:00:00 0 1 0 : 527.19 : -1
10 : 2000-10-16 00:00:00 0 1 0 : 605.04 : -1
11 : 2000-11-16 00:00:00 0 1 0 : 682.58 : -1
12 : 2000-12-16 00:00:00 0 1 0 : 762.59 : -1
cdo info: Processed 1 variable over 12 timesteps [0.00s 50MB].
-1 : Date Time Level Gridsize Miss : Minimum Mean Maximum : Parameter ID
1 : 2000-01-16 00:00:00 0 1 0 : 81.229 : -1
2 : 2000-02-15 00:00:00 0 1 0 : 51.032 : -1
3 : 2000-03-16 00:00:00 0 1 0 : 57.439 : -1
4 : 2000-04-16 00:00:00 0 1 0 : 55.116 : -1
5 : 2000-05-16 00:00:00 0 1 0 : 53.700 : -1
6 : 2000-06-16 00:00:00 0 1 0 : 58.400 : -1
7 : 2000-07-16 00:00:00 0 1 0 : 45.471 : -1
8 : 2000-08-16 00:00:00 0 1 0 : 53.642 : -1
9 : 2000-09-16 00:00:00 0 1 0 : 71.161 : -1
10 : 2000-10-16 00:00:00 0 1 0 : 77.845 : -1
11 : 2000-11-16 00:00:00 0 1 0 : 77.545 : -1
12 : 2000-12-16 00:00:00 0 1 0 : 80.006 : -1
cdo info: Processed 1 variable over 12 timesteps [0.00s 51MB].
它看起来非常好,但它们与 https://climatecharts.net/ 1970-2000 年间使用 CRU ts4.04 的伦敦显示的结果不同。
我的问题是:我计算的是降水量的月平均值和年总和吗?
感谢您的帮助。
cdo 函数:
ymonmean
计算每个日历月的平均值,即所有一月的平均值、所有二月的平均值等...生成的文件将有 12 个时间步长。
timcumsum
然后生成这 12 个步骤的累计和。所以第1步仍然是你的1月平均值,然后第2步有1月和2月平均值的总和等等,结果文件仍然有12个时间步长,你需要的结果应该是最后一步。
不过,如果你只是想知道平均年降雨量是多少,那么你可以直接用
计算
cdo yearsum in.nc out.nc # calculate total for each year
cdo timmean out.nc year_average.nc # average over the totals
或使用一行管道:
cdo timmean -yearsum in.nc year_average.nc
以上警告,请确保您的系列有完整的日历年。如果第一年开始于例如7月,那么当年的总和显然只有6个月的降雨量,这会影响你的统计,最后一年的最后一个月也是如此。
最后,我在 climatecharts 的数据页面上看到它直接使用观测值而不是网格化的 cru,所以无论如何你不能期望结果完全相同。
编辑 2021:我现在制作了关于这些主题的视频指南:
我正在使用 CRU ts_4.04 数据学习 netCDF 和 CDO。我想计算伦敦降水量的月平均值和年总和。我写道:
#!/usr/bin/bash
lon=-0.11
lat=51.49
PREFNAME="/myHD/CRU4.04/pre/cru_ts4.04.1901.2019.pre.dat.nc"
OUTFNAME="outfile-"
echo "1970-2000 monthly average and annual sum of precipitations in London"
cdo remapnn,lon=$lon/lat=$lat $PREFNAME $OUTFNAME"place.nc"
cdo selvar,pre $OUTFNAME"place.nc" $OUTFNAME"var.nc"
cdo selyear,1970/2000 $OUTFNAME"var.nc" $OUTFNAME"years.nc"
cdo ymonmean $OUTFNAME"years.nc" $OUTFNAME"yearsmean.nc"
cdo timcumsum $OUTFNAME"yearsmean.nc" $OUTFNAME"yearsum.nc"
cdo info $OUTFNAME"yearsum.nc"
cdo info $OUTFNAME"yearsmean.nc"
exit
我得到:
MyPC:~/workbench01$ ./gotit2.sh
1970-2000 monthly average and annual sum of precipitations in London
cdo remapnn: Nearest neighbor weights from lonlat (720x360) to lonlat (1x1) grid, with source mask (67420)
cdo remapnn: Processed 2 variables over 1428 timesteps [2.64s 60MB].
cdo selname: Processed 2 variables over 1428 timesteps [0.01s 52MB].
cdo selyear: Processed 1 variable over 1428 timesteps [0.00s 51MB].
cdo ymonmean: Processed 1 variable over 372 timesteps [0.00s 51MB].
cdo timcumsum: Processed 1 variable over 12 timesteps [0.00s 51MB].
-1 : Date Time Level Gridsize Miss : Minimum Mean Maximum : Parameter ID
1 : 2000-01-16 00:00:00 0 1 0 : 81.229 : -1
2 : 2000-02-15 00:00:00 0 1 0 : 132.26 : -1
3 : 2000-03-16 00:00:00 0 1 0 : 189.70 : -1
4 : 2000-04-16 00:00:00 0 1 0 : 244.82 : -1
5 : 2000-05-16 00:00:00 0 1 0 : 298.52 : -1
6 : 2000-06-16 00:00:00 0 1 0 : 356.92 : -1
7 : 2000-07-16 00:00:00 0 1 0 : 402.39 : -1
8 : 2000-08-16 00:00:00 0 1 0 : 456.03 : -1
9 : 2000-09-16 00:00:00 0 1 0 : 527.19 : -1
10 : 2000-10-16 00:00:00 0 1 0 : 605.04 : -1
11 : 2000-11-16 00:00:00 0 1 0 : 682.58 : -1
12 : 2000-12-16 00:00:00 0 1 0 : 762.59 : -1
cdo info: Processed 1 variable over 12 timesteps [0.00s 50MB].
-1 : Date Time Level Gridsize Miss : Minimum Mean Maximum : Parameter ID
1 : 2000-01-16 00:00:00 0 1 0 : 81.229 : -1
2 : 2000-02-15 00:00:00 0 1 0 : 51.032 : -1
3 : 2000-03-16 00:00:00 0 1 0 : 57.439 : -1
4 : 2000-04-16 00:00:00 0 1 0 : 55.116 : -1
5 : 2000-05-16 00:00:00 0 1 0 : 53.700 : -1
6 : 2000-06-16 00:00:00 0 1 0 : 58.400 : -1
7 : 2000-07-16 00:00:00 0 1 0 : 45.471 : -1
8 : 2000-08-16 00:00:00 0 1 0 : 53.642 : -1
9 : 2000-09-16 00:00:00 0 1 0 : 71.161 : -1
10 : 2000-10-16 00:00:00 0 1 0 : 77.845 : -1
11 : 2000-11-16 00:00:00 0 1 0 : 77.545 : -1
12 : 2000-12-16 00:00:00 0 1 0 : 80.006 : -1
cdo info: Processed 1 variable over 12 timesteps [0.00s 51MB].
它看起来非常好,但它们与 https://climatecharts.net/ 1970-2000 年间使用 CRU ts4.04 的伦敦显示的结果不同。
我的问题是:我计算的是降水量的月平均值和年总和吗?
感谢您的帮助。
cdo 函数:
ymonmean
计算每个日历月的平均值,即所有一月的平均值、所有二月的平均值等...生成的文件将有 12 个时间步长。
timcumsum
然后生成这 12 个步骤的累计和。所以第1步仍然是你的1月平均值,然后第2步有1月和2月平均值的总和等等,结果文件仍然有12个时间步长,你需要的结果应该是最后一步。
不过,如果你只是想知道平均年降雨量是多少,那么你可以直接用
计算cdo yearsum in.nc out.nc # calculate total for each year
cdo timmean out.nc year_average.nc # average over the totals
或使用一行管道:
cdo timmean -yearsum in.nc year_average.nc
以上警告,请确保您的系列有完整的日历年。如果第一年开始于例如7月,那么当年的总和显然只有6个月的降雨量,这会影响你的统计,最后一年的最后一个月也是如此。
最后,我在 climatecharts 的数据页面上看到它直接使用观测值而不是网格化的 cru,所以无论如何你不能期望结果完全相同。
编辑 2021:我现在制作了关于这些主题的视频指南: