Как я могу изменить переменную и ее соответствующее измерение в netcdf

Я провожу идеализированный эксперимент с атмосферной моделью с выводом в формате netcdf. Но заголовок файла netcdf не описывает переменную и размерность четко. например:

netcdf qc3d {
dimensions:
    Time = UNLIMITED ; // (1453 currently)
    bottom_top = 45 ;
    south_north = 32 ;
    west_east = 12288 ;
variables:
    float Time(Time) ;
        Time:axis = "Time" ;
        Time:long_name = "Time" ;
        Time:standard_name = "Time" ;
        Time:units = "minutes since 1900-01-01 " ;
    double zc(bottom_top) ;
        zc:axis = "Z" ;
        zc:long_name = "vertical height of model layers, MSL" ;
        zc:standard_name = "altitude" ;
        zc:units = "m" ;
        zc:positive = "up" ;
    double yc(south_north) ;
        yc:axis = "Y" ;
        yc:long_name = "y-coordinate of grid cell centers in Cartesian system" ;
        yc:units = "m" ;
    double xc(west_east) ;
        xc:axis = "X" ;
        xc:long_name = "x-coordinate of grid cell centers in Cartesian system" ;
        xc:units = "m" ;
    float qc(Time, bottom_top, south_north, west_east) ;
        qc:long_name = "cloud water mixing ratio" ;
        qc:standard_name = "cloud_water_mixing" ;
        qc:units = "kg kg-1" ;
        qc:_FillValue = 9.96921e+36f ;
        qc:missing_value = 9.96921e+36f ;

// global attributes:
        :model_tag = "CSU VVM" ;
        :references = "http://kiwi.atmos.colostate.edu/pubs/joon-hee-tech_report.pdf" ;
        :contact = "jung@atmos.colostate.edu" ;
        :institution = "Colorado State University" ;
        :VVM_casename = "GATE_PHASE_III                                                                  " ;
}

Есть 4 измерения: время (время), zc(bottom_top), yc(south_north), xc(west_east) и 5 ​​переменных, в которых первые 4 переменные должны быть измерениями пятой переменной, так называемой qc. Но, похоже, нет. Размерность - это просто индекс номера серии от 1 до 45, 32 ... что угодно.

Я хотел бы рассчитать некоторую переменную, которая является функцией давления. в CDO скрипт такой

cdo expr,"pottemp=temp*((100000/clev(temp))^0.287);"  ifile pottemp.nc

(этот код отсюда)

но я просто получаю ряд индексов, таких как 1,2,3 ... не реальный уровень давления, когда я использую эту функцию, clev(qv). Так как я могу переписать размер переменной, как qc из qc(Time, bottom_top, south_north, west_east) ;вqc(Time, zc, yc, xc) ;Я думаю, что я могу закончить это в Matlab, но я просто не хочу открывать этот набор данных, потому что его размер слишком велик... поэтому я пытаюсь найти некоторые инструменты, такие как ncks или cdo, но все же не смог сделать этот.

большое спасибо.

1 ответ

Решение

С НКО попробуй

ncap2 -s 'pottemp=temp*((100000/zc)^0.287)' in.nc out.nc

документация по ncap2

ответ на дополнительный вопрос ниже:

сначала используйте ncap2, чтобы явно установить zc для значений в файле ascii:

ncap2 -s 'zc[$zc]={1.5,900,2500,3500}' in.nc out.nc

(при условии, что zc - это размер 4). затем определите pottemp на основе этого zc.

Другие вопросы по тегам