Hi Tim,
It looks like your dataset falls under what we call in Ferret a
"curvilinear grid" . Ferret has capabilities for visualizing data on
these grids, and there are LAS scripts that work with data on
curvilinear grids.
In Ferret, you would say, for instance,
yes? use efdcout
yes? shade water_elevation, lon_rho, lat_rho
The Ferret Users Guide has documentation about curvilinear grids and
special forms of the graphics commands that work with data on these
grids. Ferret doesn't (yet) automatically recognize the coordinates
attribute of the data field, though we have discussed doing that.
In LAS, you can add information about the coordinate variables lon_rho,
lat_rho to the xml configuration of the need to look at this
documentation, inside of the "installer documentation"
http://ferret.pmel.noaa.gov/LAS/documentation/installer-documentation/adding-curvilinear-data/
Let us know how it goes.
Ansley
Tim Cera wrote:
Trying
if visualize a NetCDF file within LAS. I create the NetCDF file from a
hydrodynamic model called EFDC.
Here is the dump of the header from my NetCDF file:
----
netcdf efdcout {
dimensions:
i_rho = 259 ;
j_rho = 121 ;
wet_cells = 3013 ;
nv = 4 ;
time = UNLIMITED ; // (24 currently)
variables:
int i_rho(i_rho) ;
int j_rho(j_rho) ;
int i_wet_cells(wet_cells) ;
int j_wet_cells(wet_cells) ;
float lat_rho(j_rho, i_rho) ;
lat_rho:long_name = "latitude" ;
lat_rho:units = "degrees_north" ;
lat_rho:standard_name = "latitude" ;
lat_rho:bounds = "lat_rho_bounds" ;
float lon_rho(j_rho, i_rho) ;
lon_rho:long_name = "longitude" ;
lon_rho:units = "degrees_east" ;
lon_rho:standard_name = "longitude" ;
lon_rho:bounds = "lon_rho_bounds" ;
float mask_rho(j_rho, i_rho) ;
mask_rho:long_name = "mask on RHO-points" ;
mask_rho:option_0 = "land" ;
mask_rho:option_1 = "water" ;
mask_rho:coordinates = "lat_rho lon_rho" ;
mask_rho:grid_mapping = "transverse_mercator" ;
float water_elevation(time, j_rho, i_rho) ;
water_elevation:standard_name =
"height_above_reference_ellipsoid" ;
water_elevation:units = "m" ;
water_elevation:coordinates = "lat_rho lon_rho" ;
water_elevation:valid_min = -10.f ;
water_elevation:_FillValue = 1.e+37f ;
float lat_rho_bounds(nv, j_rho, i_rho) ;
float lon_rho_bounds(nv, j_rho, i_rho) ;
int time(time) ;
time:standard_name = "time" ;
time:units = "hours since 1995-1-1 0:0:0" ;
// global attributes:
:Conventions = "CF-1.4" ;
}
----
The cell boundaries of the water cells are 4 sided polygons defined by
'lat_rho_bounds' and 'lon_rho_bounds'. The 'lat_rho' and 'lon_rho'
variables are not used by ferret, but can be used by some NetCDF
utilities (ncview works great!).
I have a ferret script that visualizes the 'water_elevation' variable
from the above dataset. It was hard won and I obtained it by a form of
genetic algorithm that went something like this, "That didn't work,
maybe this will..."
Here it is as part of a LAS init script:
----
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! EFDC
! Execute the custom commands to initialize the data. Assumes a dataset
and
! variable symbol are defined: data_url and data_var. These are
unchanged on exit.
! data_var can be the actual variable soil_depth, soil_type, etc.
SET DATA ($data_url)
!<custom
! Define new grid
define axis/x=1:31339:1 vectoraxis
define axis/z=1:4:1 ccaxis
define axis/t=1:24:1 taxis
let llgrid = x[gx=vectoraxis] + z[gz=ccaxis]
let newlat = reshape(lat_rho_bounds, llgrid)
let newlon = reshape(lon_rho_bounds, llgrid)
let flattengrid = x[gx=vectoraxis] + t[gt=taxis]
let newdata = reshape(water_elevation, flattengrid)
polygon/hlimits=-82:-81/vlimits=30.2:30.6 newlon, newlat, newdata[t=1]
!custom>
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
----
Ferret displays what I want, but I have hard coded limits in the
polygon command and the init script doesn't work anyway in LAS.
Here is a very small part of the LAS error:
----
Server at Revision r3974M
**TMAP ERR: non-existent or not on line
efdc_polygon_init_script (.jnl)
GO efdc_polygon_init_script 0
Command file, command group, or REPEAT execution aborted
STOP -script mode, ERROR RUNNING SCRIPT statement executed
...
----
Questions:
How do you give the ferret script the horizontal and vertical limits
within LAS?
Am I just thinking about this all wrong?
Is there an easier way?
Typical curvilinear approach wasn't working within Ferret/LAS because I
do not have the coordinates for the land cells. Even if the values are
masked, seemingly all NetCDF utilities require all cells to have
coordinates. I stumbled on the polygon command and not only does it
visualize what I want, because it is actually using the coordinates of
each cell corner it honors what the model is using rather than an
interpolation.
Kindest regards,
Tim Cera
|