【问题标题】:Extract NetCDF Variable and create New NetCDF提取 NetCDF 变量并创建新的 NetCDF
【发布时间】:2022-02-26 23:37:44
【问题描述】:

我需要一些有关操作 NetCDF 文件的帮助。我总共有 10 个文件,分别为 10 年。每年都有多个(相同的)变量,其中一些还涵盖每日值。在这里,我向您展示一个结构示例:

(base) thess2ice@local:rhone_smb_modelling $ ncdump -h Rhone_AWS_1990.nc
netcdf Rhone_AWS_1990 {
dimensions:
    x = 402 ;
    y = 852 ;
    time = 1460 ;
variables:
    double x(x) ;
        x:_FillValue = NaN ;
        x:standard_name = "x" ;
        x:long_name = "longitude" ;
        x:units = "degrees_east" ;
    double y(y) ;
        y:_FillValue = NaN ;
        y:standard_name = "y" ;
        y:long_name = "latitude" ;
        y:units = "degrees_north" ;
    float HGT(y, x) ;
        HGT:_FillValue = -9999.f ;
        HGT:units = "m" ;
        HGT:long_name = "Elevation" ;
    float ASPECT(y, x) ;
        ASPECT:_FillValue = -9999.f ;
        ASPECT:units = "degrees" ;
        ASPECT:long_name = "Aspect of slope" ;
    float SLOPE(y, x) ;
        SLOPE:_FillValue = -9999.f ;
        SLOPE:units = "degrees" ;
        SLOPE:long_name = "Terrain slope" ;
    float MASK(y, x) ;
        MASK:_FillValue = -9999.f ;
        MASK:units = "boolean" ;
        MASK:long_name = "Glacier mask" ;
    int64 time(time) ;
        time:units = "hours since 1990-01-01 00:00:00" ;
        time:calendar = "proleptic_gregorian" ;
    double T2(time, y, x) ;
        T2:_FillValue = NaN ;
        T2:units = "K" ;
        T2:long_name = "Temperature at 2 m" ;
    double RRR(time, y, x) ;
        RRR:_FillValue = NaN ;
        RRR:units = "mm" ;
        RRR:long_name = "Total precipitation (liquid+solid)" ;
    double ACC(y, x) ;
        ACC:_FillValue = -9999. ;
        ACC:units = "mm yr^-1" ;
        ACC:long_name = "Accumulation from RRR_solid" ;
    double MELT_I(y, x) ;
        MELT_I:_FillValue = -9999. ;
        MELT_I:units = "mm yr^-1" ;
        MELT_I:long_name = "Melt from PDD" ;
    double MELT_S(y, x) ;
        MELT_S:_FillValue = -9999. ;
        MELT_S:units = "mm yr^-1" ;
        MELT_S:long_name = "Melt from PDD" ;
    double SMB(y, x) ;
        SMB:_FillValue = -9999. ;
        SMB:units = "mm yr^-1" ;
        SMB:long_name = "SMB from PDD" ;

我需要将数据作为模型的输入进行操作。我需要从 10 个 NetCDF 文件中提取的变量是 SMB 变量,它只是每个网格单元的年度值。所以我想构建一个 NetCDF 的形式:

(year, y, x) for the SMB variable

我知道 ncks 命令只提取 SMB 变量,但我无法一次将它应用于多个文件(假设当前目录中的所有 nc 文件)并将它们放入一个 NetCDF 文件,随后跨越所有10 年。

有人可以帮我吗? 会很棒!

特蕾莎

【问题讨论】:

  • 只是想知道为什么时间维度的大小为 1460。这是从另一个 6 小时数据集派生的吗?如果是这样,您最好返回源数据并使用cdo yearmeancdo mergetime
  • 你是对的,数据已经在时间方面被操纵为 6 小时值。我需要一些仍然在这个时间分辨率中的变量。我使用了 10 年的 NetCDF 一切都很好。我只需要另一个从十个 NetCDF 中获取 SMB 年度值并将其合并到另一个 NetCDF 中。
  • 由于您只有 10 个文件,因此应该可以执行 10x ncks 命令来提取 SMB 变量。 (或者写一个 bash 循环)。然后你需要添加一个时间维度,使其成为一个记录维度,并连接起来,类似于这个stackoverflow.com/questions/66117320/…

标签: extract netcdf ncks


【解决方案1】:

NCO ncecat 命令,记录在案的 here,完全符合您的要求:

ncecat -u time -v SMB Rhone_AWS_199*.nc out.nc

【讨论】:

  • 好的,谢谢。它按照你的建议工作:)
猜你喜欢
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-27
  • 2013-11-16
相关资源
最近更新 更多