Сайт Алексея Озерицкого

Искусственный интеллект, суперкомпьютерные системы, параллельные вычисления, численные методы, алгоритмы

NetCDF Reader

Программа предназначена для извлечения данных из файлов формата NetCDF. В таком формате распространяются, например, данные о климате.

Отличительная особенность формата NetCDF заключается в том, что в одном файле могут содержаться несколько различных многомерных данных. Поэтому файл включает в себя заголовок, по которому можно понять, какие именно данные в нем содержатся. NetCDF Reader может как читать заголовки, так и извлекать из файла данные, делая проекцию на любые измерения.

Распространяется по лицензии BSD из трех пунктов.

Скачать netcdf-reader-1.0.1.tar.bz2 (4 Кб)

Сборка

Для сборки необходомы bison и сама библиотека netcdf.

cmake -DCMAKE_BUILD_TYPE=Release .
make

Синтаксис

$ ./bin/netcdf_reader -help
./bin/netcdf_reader
	  -h|-help|--help -- help message
	  -info -- file info
	  -info -att name -- attribute 'name' info
	  -info -var name -- variable 'name' info
	  -file name -- sets netcdf file name
	  -dump [-text] -file fname -var name
			-- dumps variable 'name' to file 'fname'
	  -dump [-text] -file fname -var name -dim dn1 from total ..
			-- dumps variable 'name' to file 'fname'
						-- and sets dimentions boundaries

Примеры

Чтение заголовка

Для начала, получим сведения о файле:

./bin/netcdf_reader -file uwnd.mon.total.std.nc -info
dims/vars/atts: 4/5/5
dims:
0:      lon: 144
1:      lat: 73
2:      level: 17
3:      time: 12
vars:
0:      level
1:      lat
2:      lon
3:      time
4:      uwnd
atts:
0:      title
	   NcType: char
	   vals: 20
	   "NMC reanalysis Atlas"
1:      history
	   NcType: char
	   vals: 162
	   "Created at NOAA-CIRES Climate Diagnostics Center by CAS
STD is defined as the sum of the
sqrt((individual_daily_mean-total_mon_mean)**2) where climo is
1968-1996"
2:      description
	   NcType: char
	   vals: 143
	   "Data is from NMC initialized reanalysis
(4x/day).  It consists of most variables interpolated to
pressure surfaces from model (sigma) surfaces."
3:      platform
	   NcType: char
	   vals: 5
	   "Model"
4:      Conventions
	   NcType: char
	   vals: 6
			 "COARDS"

Таким образом, в этом файле находятся данные о компоненте u (переменная uwnd) скорости ветра, которые имеют 4 измерения: lon, lat, level и time.

Теперь, получим информацию об измерении lon:

./bin/netcdf_reader -file uwnd.mon.total.std.nc -info -var lon
dims/atts: 1/3
NcType: float
dims:
0:      lon: 144
atts:
0:      units
	   NcType: char
	   vals: 12
	   "degrees_east"
1:      long_name
	   NcType: char
	   vals: 9
	   "Longitude"
2:      actual_range
	   NcType: float
	   vals: 2
			 0, 357.5

Это долгота (longitude), и она меняется от 0 до 143 по сетке или от 0 до 357.5 градусов. Тип данных — float.

Теперь, получим сведения об измерении lat:

./bin/netcdf_reader -file uwnd.mon.total.std.nc -info -var lat
dims/atts: 1/3
NcType: float
dims:
0:      lat: 73
atts:
0:      units
	   NcType: char
	   vals: 13
	   "degrees_north"
1:      actual_range
	   NcType: float
	   vals: 2
	   90, -90
2:      long_name
	   NcType: char
	   vals: 8
			 "Latitude"

Это широта (latitude), и она меняется от 0 до 72 по сетке или от -90 до 90 градусов. Тип данных — float.

Затем сведения о переменной uwnd:

./bin/netcdf_reader -file uwnd.mon.total.std.nc -info -var uwnd
dims/atts: 4/13
NcType: float
dims:
0:      time: 12
1:      level: 17
2:      lat: 73
3:      lon: 144
atts:
0:      long_name
	   NcType: char
	   vals: 44
	   "Total Standard Deviation of U-Wind by Month"
1:      actual_range
	   NcType: float
	   vals: 2
	   0.6578583, 28.10332
2:      units
	   NcType: char
	   vals: 3
	   "m/s"
3:      add_offset
	   NcType: float
	   vals: 1
	   0
4:      scale_factor
	   NcType: float
	   vals: 1
	   1
5:      missing_value
	   NcType: float
	   vals: 1
	   -9.96921e+36
6:      precision
	   NcType: short
	   vals: 1
	   0
7:      least_significant_digit
	   NcType: short
	   vals: 1
	   0
8:      var_desc
	   NcType: char
	   vals: 8
	   "u-wind
U"
9:      dataset
	   NcType: char
	   vals: 40
	   "CDC Derived NCEP Reanalysis Products
AC"
10:     level_desc
	   NcType: char
	   vals: 17
	   "Multiple levels
F"
11:     statistic
	   NcType: char
	   vals: 27
	   "Total Standard Deviation
F"
12:     parent_stat
	   NcType: char
	   vals: 7
	   "Other
-"

В данном случае, имеются 4 компоненты: time (время наблюдения по месяцам), level (высота в миллибарах), lat (широта) и lon (долгота).

Извлечение данных

Чтобы получить, например, значения uwnd за январь и на высоте 0, нужно сделать следующее:
./bin/netcdf_reader -file uwnd.inter.eof1.nc -dump -file out.bin -var
uwnd -dim level 0 1 -dim time 1 1

В результате должен получиться файл out.bin размером 144*73*4 байт.