Project

General

Profile

Z-axis not yet enabled

Added by Manoel Junior almost 6 years ago

Hi all,

We are trying to transform an ocean model output file's from our coupled model (BESM v2.5) into CMIP5 standart using cdo cmor2.

For surface variables, like zos, tos, etc ... worked well.

But for 3d variables (like SO) we are having always the same error message. (bellow)
Exactly the same occurs for the atmospheric variables.

By any chance would anyone have any suggestions on how to solve this?

Thanks in advance.

It happens when executing the command:
cdo -v cmor,mon,cn=so,mt=mapping_table_exp200.txt cgcm2.2_tempsalt_2007_03.nc

the command is aborted with the following message:

cdo cmor (Abort): Z-axis type 1 with name 'st_ocean' not yet enabled.

Our settings goes like this...

MIP_table:
CMIP5_Omon

Mapping_table_exp200.txt file:
&parameter cmor_name=so name="salt" units="psu" cell_methods="m" project_mip_table=Omon z_axis="st_ocean"

info_table:
*EXPERIMENT_ID="piControl"
MEMBER=r1i1p1
PROJECT_ID=CMIP5
PRODUCT=output
COMMENT=""
#HISTORY="Model raw output"
PARENT_EXPERIMENT="N/A"
PARENT_EXPERIMENT_RIP="N/A"
PARENT_EXPERIMENT_ID="N/A"
FORCING="GHG Sl"
REQUIRED_TIME_UNITS="days since 2007-1-1 00:00:00"
#BRANCH_TIMES=(00000000,00000000) #yyyymmdd

#model info: #
  1. only variable MAPPING_TABLE and model GRID_FILE can be set in the command line #
    MODEL_ID=BESM-OA2-5
    #REFERENCES=""
    SOURCE="BESM-OA2-5;2014 atmosphere: CPTEC (T62L28); ocean: MOM (mom4p1_pubrel_18dec2009, 0.25-2xL50); land: SSIB;"
    CALENDAR=proleptic_gregorian
    #MAPPING_TABLE=BESM_CMIP5.txt
    #GRID_FILE=BESM_T62_grid.nc
  2. institution and contact info: #
  3. none of these can be set in the command line #
    INSTITUTE_ID=INPE
    INSTITUTION="National Institute for Space Reearch"
    CONTACT="Dr. Paulo Nobre <>"
    #MIP_TABLE_DIR=/stornext/home/manoel.baptista/exp/cpld/run/CMIP5/Tables
    MIP_TABLE_DIR=/stornext/online12/ocean/manoel.baptista/cdo_cmor2/cmip5_mip_tables*

The output of the ncdump -h command from the cgcm2.2_tempsalt_2007_03.nc file:

*netcdf cgcm2.2_tempsalt_2007_03 {
dimensions:
xt_ocean = 360 ;
yt_ocean = 252 ;
time = UNLIMITED ; // (1 currently)
nv = 2 ;
st_ocean = 50 ;
st_edges_ocean = 51 ;
variables:
double xt_ocean(xt_ocean) ;
xt_ocean:long_name = "tcell longitude" ;
xt_ocean:units = "degrees_E" ;
xt_ocean:cartesian_axis = "X" ;
double yt_ocean(yt_ocean) ;
yt_ocean:long_name = "tcell latitude" ;
yt_ocean:units = "degrees_N" ;
yt_ocean:cartesian_axis = "Y" ;
double time(time) ;
time:long_name = "time" ;
time:units = "days since 1948-01-01 00:00:00" ;
time:cartesian_axis = "T" ;
time:calendar_type = "JULIAN" ;
time:calendar = "JULIAN" ;
time:bounds = "time_bounds" ;
double nv(nv) ;
nv:long_name = "vertex number" ;
nv:units = "none" ;
nv:cartesian_axis = "N" ;
double st_ocean(st_ocean) ;
st_ocean:long_name = "tcell pstar" ;
st_ocean:units = "dbars" ;
st_ocean:cartesian_axis = "Z" ;
st_ocean:positive = "down" ;
st_ocean:edges = "st_edges_ocean" ;
double st_edges_ocean(st_edges_ocean) ;
st_edges_ocean:long_name = "tcell pstar edges" ;
st_edges_ocean:units = "dbars" ;
st_edges_ocean:cartesian_axis = "Z" ;
st_edges_ocean:positive = "down" ;
float eta_t(time, yt_ocean, xt_ocean) ;
eta_t:long_name = "surface height on T cells [non-Boussinesq (mass conserving) model" ;
eta_t:units = "meter" ;
eta_t:valid_range = -1000.f, 1000.f ;
eta_t:missing_value = -1.e+20f ;
eta_t:cell_methods = "time: mean" ;
eta_t:time_avg_info = "average_T1,average_T2,average_DT" ;
eta_t:coordinates = "geolon_t geolat_t" ;
float temp(time, st_ocean, yt_ocean, xt_ocean) ;
temp:long_name = "Potential temperature" ;
temp:units = "degrees C" ;
temp:valid_range = -10.f, 100.f ;
temp:missing_value = -1.e+20f ;
temp:cell_methods = "time: mean" ;
temp:time_avg_info = "average_T1,average_T2,average_DT" ;
temp:coordinates = "geolon_t geolat_t" ;
temp:standard_name = "sea_water_potential_temperature" ;
float salt(time, st_ocean, yt_ocean, xt_ocean) ;
salt:long_name = "Salinity" ;
salt:units = "psu" ;
salt:valid_range = -10.f, 100.f ;
salt:missing_value = -1.e+20f ;
salt:cell_methods = "time: mean" ;
salt:time_avg_info = "average_T1,average_T2,average_DT" ;
salt:coordinates = "geolon_t geolat_t" ;
salt:standard_name = "sea_water_salinity" ;
double average_T1(time) ;
average_T1:long_name = "Start time for average period" ;
average_T1:units = "days since 1948-01-01 00:00:00" ;
double average_T2(time) ;
average_T2:long_name = "End time for average period" ;
average_T2:units = "days since 1948-01-01 00:00:00" ;
double average_DT(time) ;
average_DT:long_name = "Length of average period" ;
average_DT:units = "days" ;
double time_bounds(time, nv) ;
time_bounds:long_name = "time axis boundaries" ;
time_bounds:units = "days" ;

// global attributes:
:filename = "cgcm2.2_tempsalt_2007_03.nc" ;
:title = "global_inpe_acp" ;
:grid_type = "regular" ;
:grid_tile = "N/A" ;
}*

Regards,

Manoel Baptista and André Lanfer


Replies (8)

RE: Z-axis not yet enabled - Added by Fabian Wachsmann almost 6 years ago

Dear Manoel,

Variable "so" is requested on dimension "olevel".
CMIP5_Omon includes axis_entries which can be used for dimension "olevel".
Despite from XY and scalar axes, these are:
axis_entry: depth_coord
axis_entry: rho
axis_entry: ocean_double_sigma
axis_entry: ocean_sigma_z
axis_entry: ocean_s
axis_entry: ocean_sigma
I am actually not sure if one of these corresponds to st_ocean in your file. So the first step may be to use one of the allowed Z-axis for Olevel for variable salt. The name of this axis_entry is actually the one you would need to specify as "zaxis" in the mapping table (however, in this case in contrast to the surface variables, it should not be necessary at all).

Additionally, the operator also needs to identify the type of the zaxis with the help of the attributes of the coordinate variable (this may be simplified in upcoming versions).
This is done by evaluating "standard_name" and "units". Right now, the type of st_ocean is unknown - maybe you can provide a simple explanation. This leads to the occured error. So as a second step, you would need to modify attribute "units" and add attribute "standard_name" to the vertical axis coordinate variable.

Also note that an attribute "coordinates" of variable salt points to variables that are not included in the infile. If xt_ocean and yt_ocean are the correct grid coordinate variables, this can be neglected.

Best regards,
Fabi

RE: Z-axis not yet enabled - Added by Manoel Junior almost 6 years ago

Dear Fabi

In our case, the st_ocean corresponds to depth_coord, so we specified the "zaxis" in the mapping table, as "depth_coord".

Also, we modifyed the attribute "units" and created the attribute "standart_name", as can be seen in the ncdump -h bellow.

Unfortunally, the same error continuous to appear.

Additionally we changed the var and dimension name to depth_coord, but continuous the same.

What we are doing wrong?

Best whises,

Manoel

netcdf cgcm2.2_tempsalt_2007_03 {
dimensions:
xt_ocean = 360 ;
yt_ocean = 252 ;
time = UNLIMITED ; // (1 currently)
nv = 2 ;
depth_coord = 50 ;
st_edges_ocean = 51 ;
variables:
double xt_ocean(xt_ocean) ;
xt_ocean:long_name = "tcell longitude" ;
xt_ocean:units = "degrees_E" ;
xt_ocean:cartesian_axis = "X" ;
double yt_ocean(yt_ocean) ;
yt_ocean:long_name = "tcell latitude" ;
yt_ocean:units = "degrees_N" ;
yt_ocean:cartesian_axis = "Y" ;
double time(time) ;
time:long_name = "time" ;
time:units = "days since 1948-01-01 00:00:00" ;
time:cartesian_axis = "T" ;
time:calendar_type = "JULIAN" ;
time:calendar = "JULIAN" ;
time:bounds = "time_bounds" ;
double nv(nv) ;
nv:long_name = "vertex number" ;
nv:units = "none" ;
nv:cartesian_axis = "N" ;
double depth_coord(depth_coord) ;
depth_coord:long_name = "tcell pstar" ;
depth_coord:units = "m" ;
depth_coord:cartesian_axis = "Z" ;
depth_coord:positive = "down" ;
depth_coord:edges = "st_edges_ocean" ;
depth_coord:standart_name = "depth" ;
depth_coord:axis = "Z" ;
double st_edges_ocean(st_edges_ocean) ;
st_edges_ocean:long_name = "tcell pstar edges" ;
st_edges_ocean:units = "dbars" ;
st_edges_ocean:cartesian_axis = "Z" ;
st_edges_ocean:positive = "down" ;
float eta_t(time, yt_ocean, xt_ocean) ;
eta_t:long_name = "surface height on T cells [non-Boussinesq (mass conserving) model" ;
eta_t:units = "meter" ;
eta_t:valid_range = -1000.f, 1000.f ;
eta_t:missing_value = -1.e+20f ;
eta_t:cell_methods = "time: mean" ;
eta_t:time_avg_info = "average_T1,average_T2,average_DT" ;
eta_t:coordinates = "geolon_t geolat_t" ;
float temp(time, depth_coord, yt_ocean, xt_ocean) ;
temp:long_name = "Potential temperature" ;
temp:units = "degrees C" ;
temp:valid_range = -10.f, 100.f ;
temp:missing_value = -1.e+20f ;
temp:cell_methods = "time: mean" ;
temp:time_avg_info = "average_T1,average_T2,average_DT" ;
temp:coordinates = "geolon_t geolat_t" ;
temp:standard_name = "sea_water_potential_temperature" ;
float salt(time, depth_coord, yt_ocean, xt_ocean) ;
salt:long_name = "Salinity" ;
salt:units = "psu" ;
salt:valid_range = -10.f, 100.f ;
salt:missing_value = -1.e+20f ;
salt:cell_methods = "time: mean" ;
salt:time_avg_info = "average_T1,average_T2,average_DT" ;
salt:coordinates = "geolon_t geolat_t" ;
salt:standard_name = "sea_water_salinity" ;
double average_T1(time) ;
average_T1:long_name = "Start time for average period" ;
average_T1:units = "days since 1948-01-01 00:00:00" ;
double average_T2(time) ;
average_T2:long_name = "End time for average period" ;
average_T2:units = "days since 1948-01-01 00:00:00" ;
double average_DT(time) ;
average_DT:long_name = "Length of average period" ;
average_DT:units = "days" ;
double time_bounds(time, nv) ;
time_bounds:long_name = "time axis boundaries" ;
time_bounds:units = "days" ;

// global attributes:
:filename = "cgcm2.2_tempsalt_2007_03.nc" ;
:title = "global_inpe_acp" ;
:grid_type = "regular" ;
:grid_tile = "N/A" ;
}

RE: Z-axis not yet enabled - Added by Fabian Wachsmann over 5 years ago

Sorry, I was on holidays.
Instead of

 depth_coord:standart_name = "depth" ;

try:
 depth_coord:standard_name = "depth" ;

I hope that works. Best regards,
Fabi

RE: Z-axis not yet enabled - Added by Manoel Junior over 5 years ago

Dear Fabi,

Thanks for your reply, but you sent me the same definition.
Could you please send your suggestion again?

Best wishes,

Manoel/André

RE: Z-axis not yet enabled - Added by Fabian Wachsmann over 5 years ago

Note that little difference in

standard

Best regards,
Fabi

RE: Z-axis not yet enabled - Added by Manoel Junior over 5 years ago

Hi Fabi,
Unfortunally it didn't work again :(

I made the change to standard_name, but a new error message appeared to me.

*******Succesfully checked attribute 'required_time_units'.*******
*******Start to retrieve requested variables.******
*******Succesfully retrieved requested variables*******
*******Start to define variable with ID: '2' and name: 'so'*******
*******Start to register a time axis*******
*******Succesfully handled time axis registration*******
*******Start to register a grid*******
*******Succesfully handled grid registration*******
*******Start to register a zaxis*******

C Traceback:
In function: cmor_axis

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!                                                                !
! Error: Could not find a matching axis for name: 'depth_coord'
 !
!                                                                !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Whatelse may I be missing?

Thanks again,

Manoel

netcdf cgcm2.2_tempsalt_2007_03 {
dimensions:
    xt_ocean = 360 ;
    yt_ocean = 252 ;
    time = UNLIMITED ; // (1 currently)
    nv = 2 ;
    depth_coord = 50 ;
    st_edges_ocean = 51 ;
variables:
    double xt_ocean(xt_ocean) ;
        xt_ocean:long_name = "tcell longitude" ;
        xt_ocean:units = "degrees_E" ;
        xt_ocean:cartesian_axis = "X" ;
    double yt_ocean(yt_ocean) ;
        yt_ocean:long_name = "tcell latitude" ;
        yt_ocean:units = "degrees_N" ;
        yt_ocean:cartesian_axis = "Y" ;
    double time(time) ;
        time:long_name = "time" ;
        time:units = "days since 1948-01-01 00:00:00" ;
        time:cartesian_axis = "T" ;
        time:calendar_type = "JULIAN" ;
        time:calendar = "JULIAN" ;
        time:bounds = "time_bounds" ;
    double nv(nv) ;
        nv:long_name = "vertex number" ;
        nv:units = "none" ;
        nv:cartesian_axis = "N" ;
    double depth_coord(depth_coord) ;
        depth_coord:long_name = "tcell pstar" ;
        depth_coord:units = "m" ;
        depth_coord:cartesian_axis = "Z" ;
        depth_coord:positive = "down" ;
        depth_coord:edges = "st_edges_ocean" ;
        depth_coord:axis = "Z" ;
        depth_coord:standard_name = "depth" ;
    double st_edges_ocean(st_edges_ocean) ;
        st_edges_ocean:long_name = "tcell pstar edges" ;
        st_edges_ocean:units = "dbars" ;
        st_edges_ocean:cartesian_axis = "Z" ;
        st_edges_ocean:positive = "down" ;
    float eta_t(time, yt_ocean, xt_ocean) ;
        eta_t:long_name = "surface height on T cells [non-Boussinesq (mass conserving) model" ;
        eta_t:units = "meter" ;
        eta_t:valid_range = -1000.f, 1000.f ;
        eta_t:missing_value = -1.e+20f ;
        eta_t:cell_methods = "time: mean" ;
        eta_t:time_avg_info = "average_T1,average_T2,average_DT" ;
        eta_t:coordinates = "geolon_t geolat_t" ;
    float temp(time, depth_coord, yt_ocean, xt_ocean) ;
        temp:long_name = "Potential temperature" ;
        temp:units = "degrees C" ;
        temp:valid_range = -10.f, 100.f ;
        temp:missing_value = -1.e+20f ;
        temp:cell_methods = "time: mean" ;
        temp:time_avg_info = "average_T1,average_T2,average_DT" ;
        temp:coordinates = "geolon_t geolat_t" ;
        temp:standard_name = "sea_water_potential_temperature" ;
    float salt(time, depth_coord, yt_ocean, xt_ocean) ;
        salt:long_name = "Salinity" ;
        salt:units = "psu" ;
        salt:valid_range = -10.f, 100.f ;
        salt:missing_value = -1.e+20f ;
        salt:cell_methods = "time: mean" ;
        salt:time_avg_info = "average_T1,average_T2,average_DT" ;
        salt:coordinates = "geolon_t geolat_t" ;
        salt:standard_name = "sea_water_salinity" ;
    double average_T1(time) ;
        average_T1:long_name = "Start time for average period" ;
        average_T1:units = "days since 1948-01-01 00:00:00" ;
    double average_T2(time) ;
        average_T2:long_name = "End time for average period" ;
        average_T2:units = "days since 1948-01-01 00:00:00" ;
    double average_DT(time) ;
        average_DT:long_name = "Length of average period" ;
        average_DT:units = "days" ;
    double time_bounds(time, nv) ;
        time_bounds:long_name = "time axis boundaries" ;
        time_bounds:units = "days" ;

// global attributes:
        :filename = "cgcm2.2_tempsalt_2007_03.nc" ;
        :title = "global_inpe_acp" ;
        :grid_type = "regular" ;
        :grid_tile = "N/A" ;
}

RE: Z-axis not yet enabled - Added by Fabian Wachsmann over 5 years ago

Is it possible that the operator processes another MIP-table (probably Amon)?

Your call

cdo -v cmor,mon,...

should actually be
cdo -v cmor,Omon,...

Another idea would be to try it without

z_axis=depth_coord

in the mapping table.

If nothing helps, could you provide me the files and the operator call once again?

RE: Z-axis not yet enabled - Added by Manoel Junior over 5 years ago

Dear Fabian,

Thanks and sorry for the delay, we were able to run cdo with Omon, it was my mistake to read the Amon table instead of the Omon.

Thanks for your help.

    (1-8/8)