Opened 4 years ago

Closed 4 years ago

#701 closed upgrade (Done)

SGRID conventions in ROMS output NetCDF files

Reported by: arango Owned by: arango
Priority: major Milestone: Release ROMS/TOMS 3.7
Component: Nonlinear Version: 3.7
Keywords: Cc:

Description

Added Staggered Grid data model (SGRID) conventions to ROMS output NetCDF files for third party post-processing tools. Check the following link for more information about SGRID conventions. If you read the information, you will notice that a new integer variable is defined in ROMS in spherical applications:

       int grid ;
               grid:cf_role = "grid_topology" ;
               grid:topology_dimension = 2 ;
               grid:node_dimensions = "xi_psi eta_psi" ;
               grid:face_dimensions = "xi_rho: xi_psi (padding: both) eta_rho: eta_psi (padding: both)" ;
               grid:edge1_dimensions = "xi_u: xi_psi eta_u: eta_psi (padding: both)" ;
               grid:edge2_dimensions = "xi_v: xi_psi (padding: both) eta_v: eta_psi" ;
               grid:node_coordinates = "lon_psi lat_psi" ;
               grid:face_coordinates = "lon_rho lat_rho" ;
               grid:edge1_coordinates = "lon_u lat_u" ;
               grid:edge2_coordinates = "lon_v lat_v" ;
               grid:vertical_dimensions = "s_rho: s_w (padding: none)" ; 

or in Cartesian applications:

       int grid ;
               grid:cf_role = "grid_topology" ;
               grid:topology_dimension = 2 ;
               grid:node_dimensions = "xi_psi eta_psi" ;
               grid:face_dimensions = "xi_rho: xi_psi (padding: both) eta_rho: eta_psi (padding: both)" ;
               grid:edge1_dimensions = "xi_u: xi_psi eta_u: eta_psi (padding: both)" ;
               grid:edge2_dimensions = "xi_v: xi_psi (padding: both) eta_v: eta_psi" ;
               grid:node_coordinates = "x_psi y_psi" ;
               grid:face_coordinates = "x_rho y_rho" ;
               grid:edge1_coordinates = "x_u y_u" ;
               grid:edge2_coordinates = "x_v y_v" ;
               grid:vertical_dimensions = "s_rho: s_w (padding: none)" ;

Currently, the integer value for the grid variable is arbitrary since it is not used. It is set to unity in ROMS so it can be used as a logical in some post-processing programs. Only the attributes for grid are relevant.

Two variable attributes grid and location are added to each state 2D or 3D variable. For example:

        double zeta(ocean_time, eta_rho, xi_rho) ;
                zeta:long_name = "free-surface" ;
                zeta:units = "meter" ;
                zeta:time = "ocean_time" ;
                zeta:grid = "grid" ;
                zeta:location = "face" ;
                zeta:coordinates = "lon_rho lat_rho ocean_time" ;
                zeta:field = "free-surface, scalar, series" ;
                zeta:_FillValue = 1.e+37f ;
        double u(ocean_time, s_rho, eta_u, xi_u) ;
                u:long_name = "u-momentum component" ;
                u:units = "meter second-1" ;
                u:time = "ocean_time" ;
                u:grid = "grid" ;
                u:location = "edge1" ;
                u:coordinates = "lon_u lat_u s_rho ocean_time" ;
                u:field = "u-velocity, scalar, series" ;
                u:_FillValue = 1.e+37f ;
        double v(ocean_time, s_rho, eta_v, xi_v) ;
                v:long_name = "v-momentum component" ;
                v:units = "meter second-1" ;
                v:time = "ocean_time" ;
                v:grid = "grid" ;
                v:location = "edge2" ;
                v:coordinates = "lon_v lat_v s_rho ocean_time" ;
                v:field = "v-velocity, scalar, series" ;
                v:_FillValue = 1.e+37f ;
        double temp(ocean_time, s_rho, eta_rho, xi_rho) ;
                temp:long_name = "potential temperature" ;
                temp:units = "Celsius" ;
                temp:time = "ocean_time" ;
                temp:grid = "grid" ;
                temp:location = "face" ;
                temp:coordinates = "lon_rho lat_rho s_rho ocean_time" ;
                temp:field = "temperature, scalar, series" ;
                temp:_FillValue = 1.e+37f ;

The global Conventions attribute is updated as:

               :Conventions = "CF-1.4, SGRID-0.3" ;

Many thanks to Rich Signell for bringing this to our attention and for his leading role in the standardization conventions used in post-processing tools.


Change History (1)

comment:1 Changed 4 years ago by arango

  • Resolution set to Done
  • Status changed from new to closed
Note: See TracTickets for help on using tickets.