2

I am running an idealized experiment with a atmospheric model with output in the format of netcdf. But the netcdf file header does not describe the variable and and dimension clearly. for example :

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                                                                  " ;
}

there are 4 dimensions, Time(Time), zc(bottom_top), yc(south_north), xc(west_east) and 5 variable in which first 4 variables should be the dimension of the fifth variable, so called qc. But it seems not. The dimension is just a series number index from 1 to 45, 32 ...whatever else.

I would like to calculate some variable which is the function of pressure. in the CDO the script is like this

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

(this code is from here)

but I just obtain a series of index like 1 ,2 ,3 ... not the real pressure level when I use this function, clev(qv). So how can I rewrite the variable dimension like qc from qc(Time, bottom_top, south_north, west_east) ; to qc(Time, zc, yc, xc) ; I think it's possible for me to finish this in matlab, but I just don't want to open this dataset because it's size is too large... so I am trying to find some tools like ncks or cdo, but still failed to do this.

thanks a lot.

Jen
  • 339
  • 1
  • 2
  • 12

1 Answers1

3

With NCO try

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

ncap2 documentation

extending answer to cover additional question below:

first use ncap2 to explicitly set zc to the values in the ascii file:

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

(assuming zc is size 4 dimension). then define pottemp based on that zc.

Charlie Zender
  • 5,929
  • 14
  • 19
  • thank you!! I think this works. another problem is that "zc" is vertical height in the unit of meter, but what I need is pressure level. Unfortunately, I don't have any nc file is this type of pressure level. what I have is a ascii file which describe the vertical index and its responding pressure level, height and density. is there any way to rewrite the ncfile variable from a list of an ascii file ? thank you~~ – Jen Mar 18 '16 at 18:55