NOAA

Geophysical Fluid
Dynamics Laboratory

Skip to: [content] [navigation]
search gfdl:

If you are using Navigator 4.x or Internet Explorer 4.x, this site will not render correctly!

Back to faq


[NOAA bullet] How can I visualize the GFDL CM2.x ocean and sea ice models' tripolar grids using the Ferret analysis package?

The following examples can be followed to aid in the visualization of GFDL CM2.x ocean and sea ice north of 65N Note: the ocean and sea ice models' grids are regular (rectangular in latitude and longitude) south if one 65N, so if one is only dealing with the model output from points south of 65N, Ferret and other analysis packages should handle those points without needing to employ special treatments, such as the examples provided below.)

Please note that the .gif images can be viewed at their full size by right-clicking (control-click for Macintosh users) on the image and selecting "View image".

Setup for tracer examples:

! Download and use a dataset containing a tripolar tracer.
can dat/all
sp wget -N "ftp://nomads.gfdl.noaa.gov/gfdl_cm2_1/CM2.1U-D4_1860-2000-AllForc_H1/pp/ocean_tripolar/ts/annual/so_O0.1991-2000.nc"
use "so_O0.1991-2000.nc"

! Convenient variable and grid for displaying grid checkerboard.
let checker_t = missing(0*so,2) + mod(i+j,2)
def grid/x=so/y=so g_t

! Longitudes, latitudes, and associated vertices
let x_t  = geolon
let y_t  = geolat
let xv_t = geolon_vertex
let yv_t = geolat_vertex

palette land_sea

Longitude/latitude checkerboard of tracer cells

When setting a region, always include n+1 vertices to bracket your n gridpoints. Each limit of the region should extend just beyond a cell center without including the next vertex. Ferret will then automatically include the bracketing cell vertices, because their edges sit at the cell centers. If you fail to set the region properly, Ferret may plot the cells displaced a half-cell away from their actual locations.
can region; set region/k=1/l=1/y=60.01n:89.99n
shade/nokey/hl=0:360 checker_t, xv_t, yv_t
shade/ov/lev/nolab checker_t, xv_t-360, yv_t
go land 7

Stereographic checkerboard of tracer cells

can region; set region/k=1/l=1/y=60.01n:89.99n

go mp_stereographic_north 350
let mp_lambda = xv_t * deg2rad
let mp_phi = yv_t * deg2rad
set grid g_t

go mp_aspect
shade/noax/nokey checker_t, x_page, y_page

ppl color 6 100 100 100
go mp_graticule 0 360 20 60 80 10 6
go mp_land 7

Orthographic checkerboard of tracer cells

can region; set region/k=1/l=1

go mp_orthographic 260 60
let mp_lambda = xv_t * deg2rad
let mp_phi = yv_t * deg2rad
set grid g_t

go mp_aspect
shade/noax/nokey checker_t*mp_mask[g=checker_t], \
   x_page, y_page

ppl color 6 100 100 100
go mp_graticule 0 360 20 -80 80 10 6
go mp_land 7

Setup for all u/v examples:

! Download and use a dataset containing the tripolar i-velocities,
! i.e. the velocities along this OM3 model's quasi-east direction.
can dat/all
sp wget -N ftp://nomads.gfdl.noaa.gov/gfdl_cm2_1/CM2.1U-D4_1860-2000-AllForc_H1/pp/ocean_tripolar/ts/annual/uo_O0.1991-2000.nc
use "uo_O0.1991-2000.nc"

! Convenient variable and grid for displaying grid checkerboard.
let checker_u = missing(0*uo,2) + mod(i+j,2)
def grid/x=uo/y=uo g_u

! Longitudes, latitudes, and associated vertices
let x_u  = geolon
let y_u  = geolat
let xv_u = geolon_vertex
let yv_u = geolat_vertex

palette land_sea

Stereographic checkerboard of u/v cells

can region; set region/k=1/l=1/y=59.51n:90.49n

go mp_stereographic_north 350
let mp_lambda = xv_u * deg2rad
let mp_phi = yv_u * deg2rad
set grid g_u

go mp_aspect
shade/noax/nokey checker_u, x_page, y_page

ppl color 6 100 100 100
go mp_graticule 0 360 20 60 80 10 6
go mp_land 7

Orthographic checkerboard of u/v cells

can region; set region/k=1/l=1

go mp_orthographic 260 60
let mp_lambda = xv_u * deg2rad
let mp_phi = yv_u * deg2rad
set grid g_u

go mp_aspect
shade/noax/nokey checker_u*mp_mask[g=checker_u], \
   x_page, y_page

ppl color 6 100 100 100
go mp_graticule 0 360 20 -80 80 10 6
go mp_land 7

Stereographic i-velocity

can region; set region/k=1/l=1/y=59.51n:90.49n

go mp_stereographic_north 350
let mp_lambda = xv_u * deg2rad
let mp_phi = yv_u * deg2rad
set grid g_u

go mp_aspect
shade/noax/lev=c uo, x_page, y_page

go mp_stereographic_north 350
go mp_land 7
go mp_graticule 0 360 20 60 80 10 2

let mp_lambda = x_u * deg2rad
let mp_phi = y_u * deg2rad
set grid g_u
vector/ov/noax/xs=5/ys=2/len=.1 \
   uo, 0*uo, x_page, y_page

Orthographic i-velocity

can region; set region/k=1/l=1

go mp_orthographic 260 60
let mp_lambda = xv_u * deg2rad
let mp_phi = yv_u * deg2rad
set grid g_u

go mp_aspect
shade/noax/lev=c uo*mp_mask[g=uo], x_page, y_page

go mp_orthographic 260 60
go mp_fland
go mp_land 7

let mp_lambda = x_u * deg2rad
let mp_phi = y_u * deg2rad
set grid g_u
vector/ov/noax/xs=15/ys=3/len=.1 \
   uo*mp_mask, 0*uo*mp_mask, x_page, y_page

Additional setup for lat/lon u/v examples:

  • Requires def_great_circle.jnl to compute truncated vertices at the tripolar fold.
  • Requires external function modulo.f90 to correctly handle modulo operations on negative numbers.
! Define great-circle midpoints between
! cross-fold vertices.
let jmax  = `yv_u,r=jend`
go def_great_circle \
   xv_u[j=`jmax-1`] xv_u[j=`jmax`] \
   yv_u[j=`jmax-1`] yv_u[j=`jmax`] .5
let midlon = xsequence(gc_lon)
let midlat = xsequence(gc_lat)

! Rotate the longitudes into a specific interval.
let mod_start = 70
let midlon_rot = mod_start + \
   modulo(midlon[gx=xv_u@asn]-mod_start,360)

! Ensure that each row of longitudes is monotonic.
let branch = IF midlon_rot[i=@ddb] LT -1e-3 \
   AND i[gx=xv_u] NE 1 THEN 1 ELSE 0
let shift = 360*branch[i=@rsum]
let midlon_rot_mono = midlon_rot + shift

! Replace top (overlapping) row of vertices
! with the truncated locations.
let xv_u_trunc = IF y[gy=xv_u] LE 90 \
   THEN xv_u ELSE midlon_rot_mono
let yv_u_trunc = IF y[gy=yv_u] LE 90 \
   THEN yv_u ELSE midlat[gx=yv_u@asn]

Longitude/latitude checkerboard of u/v cells

can region; set region/k=1/l=1/y=59.51n:90.49n

shade/nokey/hl=0:360 checker_u, \
   xv_u_trunc, yv_u_trunc
shade/ov/lev/nolab checker_u, \
   xv_u_trunc-360, yv_u_trunc

go land 7

Longitude/latitude i-velocity

can region; set region/k=1/l=1/y=59.51n:90.49n

shade/hl=0:360/lev=c uo, xv_u_trunc, yv_u_trunc
shade/ov/lev/nolab uo, xv_u_trunc-360, yv_u_trunc

vector/ov/xs=5/ys=1/len=.1/col=1 \
   uo, 0*uo, x_u, y_u
vector/ov/xs=5/ys=1/len=.1/col=1/nolab \
   uo, 0*uo, x_u-360, y_u

go land 7

Questions related to the GFDL CM2.x models may be directed to…


[email GFDL.Climate.Model.Info at noaa dot gov] 
last modified: June 24 2019.