PDA

View Full Version : Ncep/ncar реанализ



koldunovn
6th April 2005, 09:12 PM
Коллеги, ежели кто сталкивался с этим страшным зверем, реанализом, подскажите какой программкой лучше всего переводить его данные из кошмара под названием NetCDF во что ни будь более удобоваримое типа ASCII ? А то нашёл я их много (программок) но не охота случайно выбрать самую дурацкую :cool:

tookitook
15th April 2005, 08:23 PM
ТАм у них действительно какое то безобразие творится с форматом, тому кто его придумал я бы ухи пообрывал :D Попробуй старый добрый ODV :rolleyes:

koldunovn
17th May 2005, 08:19 AM
Уже давно Галина прислала мне программу которая переводит бинарники .nc в ASCII. с таким текстом:

"Насчет Netcdf - я делала такой переход, только не для реанализа, а для данных проекта палеоклиматического моделирования PMIP. После глубокомысленного изучения многочисленных скачанных рекомендованных блоков Netcdf для разных операционных систем сухой остаток вылился в одну командную строку, которую можно засунуть в .bat - файл при мануфактурном исполнении, и 1 исполняемый ехе-шник.

Строка для исполнения прозрачна (ncdumps.ехе входной файл nc формата> выходной файл с нужным именем .txt формата), например:

ncdumps.exe input.nc > output.txt "

От себя добавлю что на данных по приземному давлению всё отлично работает, поэтому предположение Галины об универсальности данной программы - полностью оправдалось :) Спасибо огромное!

Pavel
9th June 2005, 02:46 PM
команда ncdumps.exe input.nc > output.txt "

к сожалению не работает для остальных данных - например для приводной температуры, потока коротковолновой радиации и пр.
например - когда пытался преобразовать значения температуры воздуха таким образом:
ncdumps.exe air.sig995.1980.nc > output.txt
в результате получается файл вроде бы нужного формата, но все данные температуры принимают значение, близкое к -24310 (хотя по идее должны принимать от 240 до 300)
облачность - значения которой лежат в пределах от 0 до 100 при помощи ncdumps.exe после преобразования равна -32240
вопрос - почему так? недостатки конвертера?

koldunovn
10th June 2005, 09:47 AM
Очень странная история... С моим приземным давлением вроде всё в порядке - всё переводится и значения нормальные получаются. Вообще по большому счёту по барабану должно быть какие данные переводить - формат стандартный. Глупо было бы для каждого вида данных какую ни будь свою загадочную структуру придумывать.
Попробуй посмотреть на сайте unidata - описание формата CDL (того который получается после перевода из .nc http://www.unidata.ucar.edu/content/software/netcdf/guide_12.html
там же есть описание программы ncdump - которая по моему близнец ncdumps :)
А вот здесь http://www.unidata.ucar.edu/content/software/netcdf/software.html лежат ссылки на кучу софтин которые различные чудеса с NetCDF проделывают- причём большинство из них бесплатны. Наверняка во многих есть встроенная функция перевода из .nc в приличный вид:thumbsup:.

Кстати, а что за температура у тебя такая 240-300? :D

Pavel
10th June 2005, 02:35 PM
Кстати, а что за температура у тебя такая 240-300?

это температура в Кельвинах
спасибо большое за совет!!!!

koldunovn
11th June 2005, 01:04 PM
Мда... мозг уже ничего меньше -2С не воспринимает :BangHead: Пора на природу :icon_flow

koldunovn
13th June 2005, 07:50 PM
Pavel!
Кстати, если не очень сложно, напиши, пожалуйста, что у тебя получилось и получилось ли вообще :rolleyes:

Pavel
14th June 2005, 04:45 PM
Pavel!
Кстати, если не очень сложно, напиши, пожалуйста, что у тебя получилось и получилось ли вообще :rolleyes:после долгих мучений наконец то осенило.
суть решения моей проблемы в следующем:
скачиваем из ftp://ftp.cdc.noaa.gov/Datasets/ncep.reanalysis.dailyavgs/surface/ файл air.sig995.1980.nc, содержащий данные температуры приводного воздуха (или надземного на суше)
дальше - как по инструкции в командной строке набираем:
ncdumps.exe air.sig995.1980.nc > output.txt
в результате получаем текстовый файл output.txt
файл представляет из себя следующее:



netcdf air.sig995.1980 {
dimensions:
lon = 144 ;
lat = 73 ;
time = UNLIMITED ; // (366 currently)
variables:
float lat(lat) ;
lat:units = "degrees_north" ;
lat:actual_range = 90.f, -90.f ;
lat:long_name = "Latitude" ;
float lon(lon) ;
lon:units = "degrees_east" ;
lon:long_name = "Longitude" ;
lon:actual_range = 0.f, 357.5f ;
double time(time) ;
time:units = "hours since 1-1-1 00:00:0.0" ;
time:long_name = "Time" ;
time:actual_range = 17347584., 17356344. ;
time:delta_t = "0000-00-01 00:00:00" ;
time:avg_period = "0000-00-01 00:00:00" ;
short air(time, lat, lon) ;
air:long_name = "mean Daily Air temperature at sigma level 995" ;
air:valid_range = 185.16f, 331.16f ;
air:actual_range = 194.46f, 318.1f ;
air:units = "degK" ;
air:add_offset = 512.81f ;
air:scale_factor = 0.01f ;
air:missing_value = 32766s ;
air:precision = 2s ;
air:least_significant_digit = 1s ;
air:GRIB_id = 11s ;
air:GRIB_name = "TMP" ;
air:var_desc = "Air temperature\n",
"A" ;
air:dataset = "NCEP Reanalysis Daily Averages\n",
"AJ" ;
air:level_desc = "Surface\n",
"0" ;
air:statistic = "Mean\n",
"M" ;
air:parent_stat = "Individual Obs\n",
"I" ;
// global attributes:
:Conventions = "COARDS" ;
:title = "mean daily NMC reanalysis (1980)" ;
:base_date = 1980s, 1s, 1s ;
:history = "created 95/02/06 by Hoop (netCDF2.3)" ;
:description = "Data is from NMC initialized reanalysis\n",
"(4x/day). These are the 0.9950 sigma level values." ;
:platform = "Model" ;
data:
lat = 90, 87.5, 85, 82.5, 80, 77.5, 75, 72.5, 70, 67.5, 65, 62.5, 60, 57.5,
55, 52.5, 50, 47.5, 45, 42.5, 40, 37.5, 35, 32.5, 30, 27.5, 25, 22.5, 20,
17.5, 15, 12.5, 10, 7.5, 5, 2.5, 0, -2.5, -5, -7.5, -10, -12.5, -15,
-17.5, -20, -22.5, -25, -27.5, -30, -32.5, -35, -37.5, -40, -42.5, -45,
-47.5, -50, -52.5, -55, -57.5, -60, -62.5, -65, -67.5, -70, -72.5, -75,
-77.5, -80, -82.5, -85, -87.5, -90 ;
lon = 0, 2.5, 5, 7.5, 10, 12.5, 15, 17.5, 20, 22.5, 25, 27.5, 30, 32.5, 35,
37.5, 40, 42.5, 45, 47.5, 50, 52.5, 55, 57.5, 60, 62.5, 65, 67.5, 70,
72.5, 75, 77.5, 80, 82.5, 85, 87.5, 90, 92.5, 95, 97.5, 100, 102.5, 105,
107.5, 110, 112.5, 115, 117.5, 120, 122.5, 125, 127.5, 130, 132.5, 135,
137.5, 140, 142.5, 145, 147.5, 150, 152.5, 155, 157.5, 160, 162.5, 165,
167.5, 170, 172.5, 175, 177.5, 180, 182.5, 185, 187.5, 190, 192.5, 195,
197.5, 200, 202.5, 205, 207.5, 210, 212.5, 215, 217.5, 220, 222.5, 225,
227.5, 230, 232.5, 235, 237.5, 240, 242.5, 245, 247.5, 250, 252.5, 255,
257.5, 260, 262.5, 265, 267.5, 270, 272.5, 275, 277.5, 280, 282.5, 285,
287.5, 290, 292.5, 295, 297.5, 300, 302.5, 305, 307.5, 310, 312.5, 315,
317.5, 320, 322.5, 325, 327.5, 330, 332.5, 335, 337.5, 340, 342.5, 345,
347.5, 350, 352.5, 355, 357.5 ;
time = 17347584, 17347608, 17347632, 17347656, 17347680, 17347704, 17347728,
17347752, 17347776, 17347800, 17347824, 17347848, 17347872, 17347896,
17347920, 17347944, 17347968, 17347992, 17348016, 17348040, 17348064,
17348088, 17348112, 17348136, 17348160, 17348184, 17348208, 17348232,
17348256, 17348280, 17348304, 17348328, 17348352, 17348376, 17348400,
17348424, 17348448, 17348472, 17348496, 17348520, 17348544, 17348568,
17348592, 17348616, 17348640, 17348664, 17348688, 17348712, 17348736,
17348760, 17348784, 17348808, 17348832, 17348856, 17348880, 17348904,
17348928, 17348952, 17348976, 17349000, 17349024, 17349048, 17349072,
17349096, 17349120, 17349144, 17349168, 17349192, 17349216, 17349240,
17349264, 17349288, 17349312, 17349336, 17349360, 17349384, 17349408,
17349432, 17349456, 17349480, 17349504, 17349528, 17349552, 17349576,
17349600, 17349624, 17349648, 17349672, 17349696, 17349720, 17349744,
17349768, 17349792, 17349816, 17349840, 17349864, 17349888, 17349912,
17349936, 17349960, 17349984, 17350008, 17350032, 17350056, 17350080,
17350104, 17350128, 17350152, 17350176, 17350200, 17350224, 17350248,
17350272, 17350296, 17350320, 17350344, 17350368, 17350392, 17350416,
17350440, 17350464, 17350488, 17350512, 17350536, 17350560, 17350584,
17350608, 17350632, 17350656, 17350680, 17350704, 17350728, 17350752,
17350776, 17350800, 17350824, 17350848, 17350872, 17350896, 17350920,
17350944, 17350968, 17350992, 17351016, 17351040, 17351064, 17351088,
17351112, 17351136, 17351160, 17351184, 17351208, 17351232, 17351256,
17351280, 17351304, 17351328, 17351352, 17351376, 17351400, 17351424,
17351448, 17351472, 17351496, 17351520, 17351544, 17351568, 17351592,
17351616, 17351640, 17351664, 17351688, 17351712, 17351736, 17351760,
17351784, 17351808, 17351832, 17351856, 17351880, 17351904, 17351928,
17351952, 17351976, 17352000, 17352024, 17352048, 17352072, 17352096,
17352120, 17352144, 17352168, 17352192, 17352216, 17352240, 17352264,
17352288, 17352312, 17352336, 17352360, 17352384, 17352408, 17352432,
17352456, 17352480, 17352504, 17352528, 17352552, 17352576, 17352600,
17352624, 17352648, 17352672, 17352696, 17352720, 17352744, 17352768,
17352792, 17352816, 17352840, 17352864, 17352888, 17352912, 17352936,
17352960, 17352984, 17353008, 17353032, 17353056, 17353080, 17353104,
17353128, 17353152, 17353176, 17353200, 17353224, 17353248, 17353272,
17353296, 17353320, 17353344, 17353368, 17353392, 17353416, 17353440,
17353464, 17353488, 17353512, 17353536, 17353560, 17353584, 17353608,
17353632, 17353656, 17353680, 17353704, 17353728, 17353752, 17353776,
17353800, 17353824, 17353848, 17353872, 17353896, 17353920, 17353944,
17353968, 17353992, 17354016, 17354040, 17354064, 17354088, 17354112,
17354136, 17354160, 17354184, 17354208, 17354232, 17354256, 17354280,
17354304, 17354328, 17354352, 17354376, 17354400, 17354424, 17354448,
17354472, 17354496, 17354520, 17354544, 17354568, 17354592, 17354616,
17354640, 17354664, 17354688, 17354712, 17354736, 17354760, 17354784,
17354808, 17354832, 17354856, 17354880, 17354904, 17354928, 17354952,
17354976, 17355000, 17355024, 17355048, 17355072, 17355096, 17355120,
17355144, 17355168, 17355192, 17355216, 17355240, 17355264, 17355288,
17355312, 17355336, 17355360, 17355384, 17355408, 17355432, 17355456,
17355480, 17355504, 17355528, 17355552, 17355576, 17355600, 17355624,
17355648, 17355672, 17355696, 17355720, 17355744, 17355768, 17355792,
17355816, 17355840, 17355864, 17355888, 17355912, 17355936, 17355960,
17355984, 17356008, 17356032, 17356056, 17356080, 17356104, 17356128,
17356152, 17356176, 17356200, 17356224, 17356248, 17356272, 17356296,
17356320, 17356344 ;
air =
-26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883,
-26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883,
-26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883,
-26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883,
-26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883,
-26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883,
-26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883,
-26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883,
-26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883,
-26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883,
-26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883,
-26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883,
-26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883,
-26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883,
-26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883,
-26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883, -26883,
-26840, -26843, -26848, -26855, -26863, -26868, -26873, -26883, -26891,
-26895, -26906, -26910, -26920, -26925, -26931, -26935, -26935, -26938,
-26945, -26945, -26945, -26945, -26943, -26940, -26940, -26933, -26933,
-26928, -26923, -26923, -26915, -26908, -26908, -26901, -26898, -26895,
.................................................. .................................................. ...................
и так далее еще 30 мегабайт данных температуры воздуха, средние значения которой достигают -27000 Кельвинов, что противоречит всем законам физики.

разгадка обнаружилась просто
в шапке файла есть два интересных значения:
air:add_offset = 512.81f ;
air:scale_factor = 0.01f ;
все нереальные значения температуры умножаем на scale_factor и прибавляем к результату умножения add_offset
в результате получаем реальность

koldunovn
14th June 2005, 09:58 PM
Интересно.... а на кой они так сделали? Может ради экономии места? Может -27000 в двоичном формате меньше места занимает чем 242,81?

zarva
29th October 2005, 11:20 PM
Интересно.... а на кой они так сделали? Может ради экономии места? Может -27000 в двоичном формате меньше места занимает чем 242,81?
Этот формат довольно хорошо сжимает гидрометеоданные именно потому, что хранит ЦЕЛОЧИСЛЕННЫЕ (как правило short а не с плавающей точкой) данные оптимально и подбирает что добавить и на что домножить. Поэтому -27000 действительно занимают меньше места, чем 242,81.

Если кому нужно могу выслать декодер netCDF для NCEP/NCAR реанализа.
Могу помочь и c ECMWF, но там немного сложнее.

zarva@hotbox.ru

koldunovn
30th October 2005, 08:24 PM
А какой декодер? ncdump который или что то другое?
Вообще есть куча програмулек для матлаба которые работают прямо с напрямую с netCDF как я понимаю...

Pavel
11th November 2005, 03:00 AM
я был бы очень благодарен если бы вы выложили декодер.
и еще вопрос - где можно скачать данные Ecmwf? дайте ссылку пожалуста

koldunovn
22nd November 2005, 08:11 PM
декодер есть на предидущей странице. Это просто экзешник. матлабовских декодеров по моему тьма тьмущая.

dvolkov
18th May 2007, 07:39 PM
Коллеги, ежели кто сталкивался с этим страшным зверем, реанализом, подскажите какой программкой лучше всего переводить его данные из кошмара под названием NetCDF во что ни будь более удобоваримое типа ASCII ? А то нашёл я их много (программок) но не охота случайно выбрать самую дурацкую :cool:

Коля, есть хороший тулбокс для матлаба, которым я все время пользуюсь, как на окнах, так и на линуксе :thumbsup: - http://mexcdf.sourceforge.net/. Удачи!

42d3e78f26a4b20d412==