Документация Engee

Среднеуровневый интерфейс

Открытие файла

# NetCDF.openFunction

NetCDF.open(fil::AbstractString,v::AbstractString)

Открывает переменную NetCDF v в файле NetCDF fil и возвращает дескриптор NcVar, реализующий интерфейс AbstractArray для чтения и записи. Имейте в виду, что за закрытие файла после использования с помощью NetCDF.close отвечает пользователь.

Именованные аргументы

  • mode: режим открытия файла; по умолчанию NC_NOWRITE; выберите NC_WRITE для доступа с целью записи

  • readdimvar: определяет, будут ли переменные измерения считаны в структуру файла; по умолчанию false

NetCDF.open(fil::AbstractString)

Открывает файл NetCDF fil и возвращает дескриптор NcFile. Имейте в виду, что за закрытие файла после использования с помощью NetCDF.close отвечает пользователь.

Именованные аргументы

  • mode: режим открытия файла; по умолчанию NC_NOWRITE; выберите NC_WRITE для доступа с целью записи

  • readdimvar: определяет, будут ли переменные измерения считаны в структуру файла; по умолчанию false

NetCDF.open(f::Function, args...;kwargs...)

Открывает файл NetCDF, применяет функцию f к полученному файлу или дескриптору переменной и надлежащим образом закрывает файл после использования. Удобно использовать с синтаксисом блока do, например:

data = open("myfile.nc","myvar") do v NetCDF.readvar(v,start=[1,1,1], count=[-1,-1,1]) end

Получение информации

Функция NetCDF.open возвращает объект типа NcFile, который содержит метаинформацию о файле и связанных переменных. К объекту NcFile можно обращаться по индексам (nc[varname]) для получения объекта NcVar и информации о нем. С помощью вызова keys(nc) можно получить список доступных переменных.

В большинстве приведенных ниже функций среднеуровневого интерфейса в качестве первого аргумента используется объект NcFile или NcVar.

Чтение данных

# NetCDF.readvarFunction

NetCDF.readvar(v::NcVar;start::Vector=ones(UInt,ndims(d)),count::Vector=size(d))

Считывает значения из файла, связанного с объектом NcVar v, и возвращает их. По умолчанию считывается вся переменная

Именованные аргументы

  • start: вектор длиной ndim(v), задающий начальный индекс для каждого измерения

  • count: вектор длиной ndim(v), задающий число значений, которые должны быть считаны по каждому измерению. Особым случаем является значение --1, при котором считываются все значения по данному измерению

Пример

Допустим, что v — это переменная NetCDF с измерениями (3,3,10).

x = NetCDF.readvar(v, start=[1,2,1], count=[3,1,-1])

Это выражение считывает все значения из первого и последнего измерений, но только второе значение из второго измерения.

NetCDF.readvar{T,N}(v::NcVar{T,N},I::Union{Integer, UnitRange, Colon}...)

Считывает данные из файла NetCDF с индексированием по типу массивов. Допустимыми индексами для каждого измерения являются Integer, UnitRange и Colon.

Запись данных

# NetCDF.putvarFunction

NetCDF.putvar(v::NcVar,vals::Array;start::Vector=ones(Int,length(size(vals))),count::Vector=[size(vals)...])

Записывает значения из массива vals в файл NetCDF. v — это дескриптор NcVar соответствующей переменной, а vals — массив с тем же измерением, что и у переменной в файле NetCDF.

Именованные аргументы

  • start: вектор длиной ndim(v), задающий начальный индекс для каждого измерения

  • count: вектор длиной ndim(v), задающий число значений, которые должны быть считаны по каждому измерению. Особым случаем является значение --1, при котором считываются все значения по данному измерению

NetCDF.putvar(v::NcVar, val, i...)

Записывает значения val в переменную v, причем индексы указываются в том же стиле, что и для массивов.

Создание файлов

Чтобы создать файл NetCDF, сначала нужно определить измерения и переменные, которые он может содержать. Для представления измерений и переменных NetCDF существуют предварительно определенные типы NcVar и NcDim. Объект NcDim создается следующим образом:

NcDim(dimname, dimlength, atts=Dict{Any,Any}(); values=[], unlimited=false)

Здесь dimname — это имя измерения, а dimlength — его длина. Необязательный аргумент values содержит одномерный массив значений, записываемых в переменную измерения, а необязательный аргумент atts — словарь, содержащий пары имен и значений атрибутов. Если задать unlimited=true, будет создано безграничное измерение.

Определив измерения, можно создавать объекты NcVar следующим образом:

NcVar(varname , dimlist; atts=Dict{Any,Any}(), t=Float64, compress=-1)

Здесь varname — имя переменной, dimlist — массив типа NcDim, содержащий связанные с переменной измерения, а atts — словарь, содержащий пары имен и значений атрибутов. t — это тип данных, который следует использовать для хранения переменной. Можно указать либо тип Julia (Int16, Int32, Int64, Float32, Float64), который будет преобразован в нужный тип (NC_SHORT, NC_INT, NC_INT64, NC_FLOAT, NC_DOUBLE), либо сразу указать один из типов из второго списка. Можно также задать уровень сжатия переменной, присвоив аргументу compress число в диапазоне 1—​9. Это влияет только на файлы NetCDF4.

Определив переменные, можно создать файл NetCDF следующим образом:

NetCDF.create(filename, varlist, gatts=Dict{Any,Any}(),mode=NC_NETCDF4)

Здесь filename — это имя создаваемого файла, а varlist — массив объектов NcVar, содержащих переменные, которые должны быть в файле. В необязательном аргументе gatts можно передать словарь с глобальными атрибутами, а mode — это тип файла, который нужно создать (NC_NETCDF4, NC_CLASSIC_MODEL или NC_64BIT_OFFSET).

Прочее

Обратите внимание, что начиная с версии 0.9 закрывать файлы NetCDF больше не нужно. Это делают финализаторы.

Чтобы просто синхронизировать изменения с диском, выполните команду

NetCDF.sync(nc)

где nc — дескриптор файла NetCDF.

В качестве альтернативы доступны методы NetCDF.open и NetCDF.create, принимающие функцию в первом аргументе.

Интерфейс для создания файлов

# NetCDF.NcDimType

NcDim

Представляет измерение NetCDF с именем name; может содержать значения измерения.

# NetCDF.NcVarType

NcVar

NcVar{T,N,M} представляет переменную NetCDF. Это подтип типа AbstractArray{T,N}, поэтому обычное индексирование посредством [] работает при чтении данных из файла NetCDF и записи данных в него. Объекты NcVar возвращаются при вызове NetCDF.open, при обращении к объекту NcFile по индексам (например, myfile["temperature"]) или при создании файла его конструктором. Параметр типа M означает тип данных NetCDF переменной, который может не соответствовать типу данных Julia.

# NetCDF.createFunction

NetCDF.create(name::AbstringString,varlist::Array{NcVar};gatts::Dict=Dict{Any,Any}(),mode::UInt16=NC_NETCDF4,add_finalizer = true)

Создает файл NetCDF. Здесь name —  это имя создаваемого файла, а varlist — массив объектов NcVar, содержащих переменные, которые должны быть в файле.

Именованные аргументы

  • gatts: словарь с глобальными атрибутами файла NetCDF

  • mode: тип файла NetCDF (NC_NETCDF4, NC_CLASSIC_MODEL или NC_64BIT_OFFSET); по умолчанию NC_NETCDF4

NetCDF.create(f::Function, args...;kwargs...)

Создает файл NetCDF, применяет функцию f к полученному файлу или дескриптору переменной и надлежащим образом закрывает файл после использования. Удобно использовать с синтаксисом блока do, например:

d = NcDim("time",1:10) v = NcVar("obs",d); NetCDF.create("newfile.nc",v) do nc nc["obs"][:] = rand(10) end