Объедините два файла nc4 с разным временным интервалом

Предположим, что два файла netCDF (в моем случае nc4), каждая из которых имеет одну переменную с тремя измерениями: широта, долгота и время (год). Они имеют разные временные интервалы (например, 1700–2005 и 2005–2100 годы - они перекрываются в 2005 году). Как я могу объединить их, чтобы получить один файл nc4, охватывающий 1700-2100?

Простая попытка оператора NCO ncrcat file1.cn4 file2.nc4 result.nc4 дает файл размером [1700-2005, 1700-1795]. При запуске строки предупреждает: nco_cln_clc_dff<><> failed to initialize UDUnits2 library. Согласно этому сообщению, мне не о чем беспокоиться.

Я также использовал добавление, как описано в руководстве NCO _3 _ . Я получаю результирующий промежуток времени [2005-2310,2005-2100] и предупреждение: ncrcat: WARNING Intra-file non-monotonicity. Record coordinate “time” does not monotonically decrease between input file file2.nc4 record indices: 94,95 output file1.nc4 record indices 400,401 ... (индексы здесь менее важны, так как я получаю предупреждение для каждого из них)

Обратите внимание, что я мог объединить без проблемы с промежутком времени с CDO в Linux: cdo mergetime file1.cn4 file2.nc4 result.nc4 (или cdo -z zip_3 mergetime file1.cn4 file2.nc4 result.nc4, чтобы получить степень сжатия 3). Также обратите внимание, что мне пришлось использовать export SKIP_SAME_TIME=1 перед вызовом cdo mergetime, чтобы иметь дело с перекрывающимся 2005 годом (будет только первое вхождение).

С R я пробовал следующее:

library(ncdf4)
library(ncdf.tools)
ncFile1 <- nc_open("C://file1.nc4")
nc1 <-ncvar_get(ncFile1)
ncFile2 <- nc_open("C://file2.nc4")
nc2 <-ncvar_get(ncFile2)
transNcdfMerge(c(nc1, nc2), target.name = "my_test.nc4")

Я дал ему поработать почти 2 часа, а затем остановил бег. Поскольку мне нужно проделать это с сотнями файлов nc4, я не могу ждать так долго. Во время работы не кричал ни одной ошибки, но я не уверен, правильный ли код.

Я использую Windows 7, 64-разрядную версию, 8 ГБ оперативной памяти. А для R - «R версия 3.3.0 (2016-05-03)»

Обновление: печать некоторых метаданных двух файлов с помощью R

1) file1.nc4

ncdf4::print(file1.nc4)

 1 variables (excluding dimension variables):
    float prop_crop[lon,lat,time]   (Chunking: [720,360,1])  (Compression: shuffle,level 3)
        units: percent
        _FillValue: -9999
        long_name: Proportion of landcover in crops
        missing_value: -9999

 3 dimensions:
    lat  Size:360
        units: degrees_north
        long_name: Latitude
        standard_name: latitude
    lon  Size:720
        units: degrees_east
        long_name: Longitude
        standard_name: longitude
    time  Size:306   *** is unlimited ***
        long_name: Time
        standard_name: time
        calendar: proleptic_gregorian
        units: years since 1700-01-01 00:00:00

2) file2.nc4

ncdf4::print(file2.nc4)

 1 variables (excluding dimension variables):
    float prop_crop[lon,lat,time]   (Chunking: [720,360,1])  (Compression: shuffle,level 3)
        units: percent
        _FillValue: -9999
        long_name: Proportion of landcover in crops
        missing_value: -9999

 3 dimensions:
    lat  Size:360
        units: degrees_north
        long_name: Latitude
        standard_name: latitude
    lon  Size:720
        units: degrees_east
        long_name: Longitude
        standard_name: longitude
    time  Size:96   *** is unlimited ***
        units: years since 2005-01-01 00:00:00
        long_name: Time
        standard_name: time
        calendar: proleptic_gregorian

Надеюсь, это поможет


person Valentin    schedule 05.07.2016    source источник
comment
Можете ли вы поделиться фрагментом объединяемых файлов или, по крайней мере, просмотреть их метаданные в ncdump / ncks?   -  person N1B4    schedule 06.07.2016


Ответы (3)


NCO требует, чтобы UDUnits выполнял арифметические операции с датой (называемые «перебазированием») в руководстве. Предлагаем вам установить полнофункциональный NCO с, например,

conda install -c conda-forge nco

затем повторите исходную команду.

person Charlie Zender    schedule 06.07.2016
comment
Я установил nco-4.6.0.windows.mvs.exe для Windows из nco.sourceforge.net/#Binaries Я вижу, что ваша команда упоминается для Anaconda - мне нужно сейчас установить Anaconda? - person Valentin; 07.07.2016
comment
Да, для работы conda install необходимо установить Anaconda. К сожалению, я не думаю, что conda поддерживает NCO в Windows (но вы можете попробовать). Я понимаю, что сложно создать NCO с поддержкой UDUnits на Windows вручную, поэтому все, что я могу предложить, - это уменьшить объем данных на Mac или Linux. - person Charlie Zender; 08.07.2016
comment
Я мог справиться с операторами климатических данных (CDO) в Linux. Все еще любопытно, как я могу работать с netCDF в Windows. - person Valentin; 08.07.2016

Просто упомяну, что если по какой-либо причине значения в 2005 году не были согласованы в двух файлах, и кто-то хотел сохранить перекрывающуюся часть из второго файла, а не из первого, можно было бы использовать seldate с CDO, чтобы вырезать соответствующая часть:

cdo mergetime -seldate,17000101,20041231 file1.nc4 file2.nc4 merged_file.nc
person Adrian Tompkins    schedule 31.05.2017

nco-4.6.0.windows.mvs.exe связан с UDunits. Чтобы проверить, попробуйте это

C:\nco>ncks -r

Результат должен быть (обратите внимание на раздел UDunits). Что касается ошибки, которую вы получаете, для отладки вашей ошибки нам нужны либо исходные файлы, либо образец, сделанный с помощью ncks / ncdump

NCO netCDF Operators version "4.6.0" built by USER on HOSTNAME at May 12 2016 17:17:59
    ncks version "4.6.0"
    Linked to netCDF library version 4.3.2, compiled Feb 29 2016 01:53:06
    Configuration Option:   Active? Meaning or Reference:
    Check _FillValue        Yes     http://nco.sf.net/nco.html#mss_val
    Check missing_value     No      http://nco.sf.net/nco.html#mss_val
    DAP clients             Yes     http://nco.sf.net/nco.html#dap
    Debugging: Custom       No      Pedantic, bounds checking (slowest execution)
    Debugging: Symbols      No      Produce symbols for debuggers (e.g., dbx, gdb)
    ESMF Library            No      http://nco.sf.net/nco.html#esmf
    GNU Scientific Library  Yes     http://nco.sf.net/nco.html#gsl
    HDF4 support            Unknown http://nco.sf.net/nco.html#hdf4
    Internationalization    No      http://nco.sf.net/nco.html#i18n (pre-alpha)
    MPI parallelization     No      http://nco.sf.net/nco.html#mpi (beta)
    netCDF3 64-bit files    Yes     http://nco.sf.net/nco.html#lfs
    netCDF4/HDF5 available  Yes     http://nco.sf.net/nco.html#nco4
    netCDF4/HDF5 enabled    Yes     http://nco.sf.net/nco.html#nco4
    OpenMP SMP threading    No      http://nco.sf.net/nco.html#omp
    Optimization: run-time  No      Fastest execution possible (slowest compilation)
    Parallel netCDF3        No      http://nco.sf.net/nco.html#pnetcdf (pre-alpha)
    Regular Expressions     No      http://nco.sf.net/nco.html#rx
    Shared libraries built  No      Small, dynamically linked executables
    Static libraries built  No      Large executables with private namespaces
    UDUnits conversions     Yes     http://nco.sf.net/nco.html#udunits
    UDUnits2 conversions    Yes     http://nco.sf.net/nco.html#udunits

Обратите внимание, что ваш файл должен содержать информацию о единицах измерения в атрибутах. Это пример файла, который содержит информацию о единицах измерения для переменной lon, расположенной в группе g1.

netcdf in_grp {
group: g1 { 
   dimensions:
   lon=4;
   float lon(lon);
   lon:units = "degrees_east";  
   data:
    lon=0,90,180,270;
  }
}   

В дистрибутиве исходного кода NCO есть несколько файлов примеров, установленных в версии Windows NCO. Пытаться

C:\nco>ncks in_grp.nc -g g1 -v lon
/g1/lon
lon: type NC_FLOAT, 1 dimension, 1 attribute, compressed? no, chunked? no, packed? no
lon size (RAM) = 4*sizeof(NC_FLOAT) = 4*4 = 16 bytes
lon dimension 0: /lon, size = 4 NC_FLOAT (Coordinate is lon)
lon attribute 0: units, size = 12 NC_CHAR, value = degrees_east

/g1/lon
lon[0]=0 degrees_east
lon[1]=90 degrees_east
lon[2]=180 degrees_east
lon[3]=270 degrees_east
person Pedro Vicente    schedule 16.07.2016