We are presently running both a GrADS DODS Server (GDS) and a THREDDS
Server (TDS); the former due to it's ability to serve a wide variety
of formats (and we have a lot of GrADS users here). I'm trying to
configure output from a local implementation of ROMS via GDS, but the
format of the output files are complex, and GDS has a hard time with
"non-standard" x/y co-ordinate specifications. I can get around this
by using a GrADS data descriptor file (so-called control file to map
variables), and I was wondering if there was any experience with this
in the group. In short, I would like to serve ROMS output via GDS.
Thanks,
Jim
-------------- ncdump -h
roms-30days.nc ----------------------
netcdf roms-30days {
dimensions:
tracer = 2 ;
s_rho = 30 ;
s_w = 31 ;
ocean_time = UNLIMITED ; // (31 currently)
eta_u = 194 ;
xi_u = 293 ;
eta_v = 193 ;
xi_v = 294 ;
boundary = 4 ;
eta_rho = 194 ;
xi_rho = 294 ;
eta_psi = 193 ;
xi_psi = 293 ;
variables:
double Akk_bak ;
Akk_bak:long_name = "background vertical mixing
coefficient for turbulent energy" ;
Akk_bak:units = "meter2 second-1" ;
double Akp_bak ;
Akp_bak:long_name = "background vertical mixing
coefficient for length scale" ;
Akp_bak:units = "meter2 second-1" ;
double Akt_bak(tracer) ;
Akt_bak:long_name = "background vertical mixing
coefficient for tracers" ;
Akt_bak:units = "meter2 second-1" ;
double Akv_bak ;
Akv_bak:long_name = "background vertical mixing
coefficient for momentum" ;
Akv_bak:units = "meter2 second-1" ;
double Cs_r(s_rho) ;
Cs_r:long_name = "S-coordinate stretching curves at
RHO-points" ;
Cs_r:valid_min = -1. ;
Cs_r:valid_max = 0. ;
Cs_r:field = "Cs_r, scalar" ;
double Cs_w(s_w) ;
Cs_w:long_name = "S-coordinate stretching curves at W-
points" ;
Cs_w:valid_min = -1. ;
Cs_w:valid_max = 0. ;
Cs_w:field = "Cs_w, scalar" ;
float DU_avg1(ocean_time, eta_u, xi_u) ;
DU_avg1:long_name = "time averaged u-flux for 2D
equations" ;
DU_avg1:units = "meter3 second-1" ;
DU_avg1:time = "ocean_time" ;
DU_avg1:coordinates = "lon_u lat_u ocean_time" ;
DU_avg1:field = "DU_avg1, scalar, series" ;
float DU_avg2(ocean_time, eta_u, xi_u) ;
DU_avg2:long_name = "time averaged u-flux for 3D
equations coupling" ;
DU_avg2:units = "meter3 second-1" ;
DU_avg2:time = "ocean_time" ;
DU_avg2:coordinates = "lon_u lat_u ocean_time" ;
DU_avg2:field = "DU_avg2, scalar, series" ;
float DV_avg1(ocean_time, eta_v, xi_v) ;
DV_avg1:long_name = "time averaged v-flux for 2D
equations" ;
DV_avg1:units = "meter3 second-1" ;
DV_avg1:time = "ocean_time" ;
DV_avg1:coordinates = "lon_v lat_v ocean_time" ;
DV_avg1:field = "DV_avg1, scalar, series" ;
float DV_avg2(ocean_time, eta_v, xi_v) ;
DV_avg2:long_name = "time averaged v-flux for 3D
equations coupling" ;
DV_avg2:units = "meter3 second-1" ;
DV_avg2:time = "ocean_time" ;
DV_avg2:coordinates = "lon_v lat_v ocean_time" ;
DV_avg2:field = "DV_avg2, scalar, series" ;
double FSobc_in(boundary) ;
FSobc_in:long_name = "free-surface inflow, nudging
inverse time scale" ;
FSobc_in:units = "second-1" ;
double FSobc_out(boundary) ;
FSobc_out:long_name = "free-surface outflow, nudging
inverse time scale" ;
FSobc_out:units = "second-1" ;
double Falpha ;
Falpha:long_name = "Power-law shape barotropic filter
parameter" ;
double Fbeta ;
Fbeta:long_name = "Power-law shape barotropic filter
parameter" ;
double Fgamma ;
Fgamma:long_name = "Power-law shape barotropic filter
parameter" ;
double M2nudg ;
M2nudg:long_name = "2D momentum nudging/relaxation
inverse time scale" ;
M2nudg:units = "day-1" ;
double M2obc_in(boundary) ;
M2obc_in:long_name = "2D momentum inflow, nudging
inverse time scale" ;
M2obc_in:units = "second-1" ;
double M2obc_out(boundary) ;
M2obc_out:long_name = "2D momentum outflow, nudging
inverse time scale" ;
M2obc_out:units = "second-1" ;
double M3nudg ;
M3nudg:long_name = "3D momentum nudging/relaxation
inverse time scale" ;
M3nudg:units = "day-1" ;
double M3obc_in(boundary) ;
M3obc_in:long_name = "3D momentum inflow, nudging
inverse time scale" ;
M3obc_in:units = "second-1" ;
double M3obc_out(boundary) ;
M3obc_out:long_name = "3D momentum outflow, nudging
inverse time scale" ;
M3obc_out:units = "second-1" ;
double Tcline ;
Tcline:long_name = "S-coordinate surface/bottom layer
width" ;
Tcline:units = "meter" ;
double Tnudg(tracer) ;
Tnudg:long_name = "Tracers nudging/relaxation inverse
time scale" ;
Tnudg:units = "day-1" ;
double Tobc_in(boundary, tracer) ;
Tobc_in:long_name = "tracers inflow, nudging inverse
time scale" ;
Tobc_in:units = "second-1" ;
double Tobc_out(boundary, tracer) ;
Tobc_out:long_name = "tracers outflow, nudging inverse
time scale" ;
Tobc_out:units = "second-1" ;
double Znudg ;
Znudg:long_name = "free-surface nudging/relaxation
inverse time scale" ;
Znudg:units = "day-1" ;
double Zob ;
Zob:long_name = "bottom roughness" ;
Zob:units = "meter" ;
double Zos ;
Zos:long_name = "surface roughness" ;
Zos:units = "meter" ;
double angle(eta_rho, xi_rho) ;
angle:long_name = "angle between XI-axis and EAST" ;
angle:units = "radians" ;
angle:coordinates = "lon_rho lat_rho" ;
angle:field = "angle, scalar" ;
double dstart ;
dstart:long_name = "time stamp assigned to model
initilization" ;
dstart:units = "days since 2000-01-01 00:00:00" ;
double dt ;
dt:long_name = "size of long time-steps" ;
dt:units = "second" ;
double dtfast ;
dtfast:long_name = "size of short time-steps" ;
dtfast:units = "second" ;
double el ;
el:long_name = "domain length in the ETA-direction" ;
el:units = "meter" ;
float evaporation(ocean_time, eta_rho, xi_rho) ;
evaporation:long_name = "evaporation rate" ;
evaporation:units = "kilogram meter-2 second-1" ;
evaporation:negative_value = "downward flux,
freshening (condensation)" ;
evaporation:positive_value = "upward flux, salting
(evaporation)" ;
evaporation:time = "ocean_time" ;
evaporation:coordinates = "lon_rho lat_rho
ocean_time" ;
evaporation:field = "evaporation, scalar, series" ;
double f(eta_rho, xi_rho) ;
f:long_name = "Coriolis parameter at RHO-points" ;
f:units = "second-1" ;
f:coordinates = "lon_rho lat_rho" ;
f:field = "coriolis, scalar" ;
double gamma2 ;
gamma2:long_name = "slipperiness parameter" ;
double gls_Kmin ;
gls_Kmin:long_name = "minimum value of specific
turbulent kinetic energy" ;
double gls_Pmin ;
gls_Pmin:long_name = "minimum Value of dissipation" ;
double gls_c1 ;
gls_c1:long_name = "shear production coefficient" ;
double gls_c2 ;
gls_c2:long_name = "dissipation coefficient" ;
double gls_c3m ;
gls_c3m:long_name = "buoyancy production coefficient
(minus)" ;
double gls_c3p ;
gls_c3p:long_name = "buoyancy production coefficient
(plus)" ;
double gls_cmu0 ;
gls_cmu0:long_name = "stability coefficient" ;
double gls_m ;
gls_m:long_name = "turbulent kinetic energy
exponent" ;
double gls_n ;
gls_n:long_name = "turbulent length scale exponent" ;
double gls_p ;
gls_p:long_name = "stability exponent" ;
double gls_sigk ;
gls_sigk:long_name = "constant Schmidt number for
TKE" ;
double gls_sigp ;
gls_sigp:long_name = "constant Schmidt number for
PSI" ;
double h(eta_rho, xi_rho) ;
h:long_name = "bathymetry at RHO-points" ;
h:units = "meter" ;
h:coordinates = "lon_rho lat_rho" ;
h:field = "bath, scalar" ;
double hc ;
hc:long_name = "S-coordinate parameter, critical
depth" ;
hc:units = "meter" ;
double lat_psi(eta_psi, xi_psi) ;
lat_psi:long_name = "latitude of PSI-points" ;
lat_psi:units = "degree_north" ;
lat_psi:field = "lat_psi, scalar" ;
double lat_rho(eta_rho, xi_rho) ;
lat_rho:long_name = "latitude of RHO-points" ;
lat_rho:units = "degree_north" ;
lat_rho:field = "lat_rho, scalar" ;
double lat_u(eta_u, xi_u) ;
lat_u:long_name = "latitude of U-points" ;
lat_u:units = "degree_north" ;
lat_u:field = "lat_u, scalar" ;
double lat_v(eta_v, xi_v) ;
lat_v:long_name = "latitude of V-points" ;
lat_v:units = "degree_north" ;
lat_v:field = "lat_v, scalar" ;
float latent(ocean_time, eta_rho, xi_rho) ;
latent:long_name = "net latent heat flux" ;
latent:units = "watt meter-2" ;
latent:negative_value = "upward flux, cooling" ;
latent:positive_value = "downward flux, heating" ;
latent:time = "ocean_time" ;
latent:coordinates = "lon_rho lat_rho ocean_time" ;
latent:field = "latent heat flux, scalar, series" ;
double lon_psi(eta_psi, xi_psi) ;
lon_psi:long_name = "longitude of PSI-points" ;
lon_psi:units = "degree_east" ;
lon_psi:field = "lon_psi, scalar" ;
double lon_rho(eta_rho, xi_rho) ;
lon_rho:long_name = "longitude of RHO-points" ;
lon_rho:units = "degree_east" ;
lon_rho:field = "lon_rho, scalar" ;
double lon_u(eta_u, xi_u) ;
lon_u:long_name = "longitude of U-points" ;
lon_u:units = "degree_east" ;
lon_u:field = "lon_u, scalar" ;
double lon_v(eta_v, xi_v) ;
lon_v:long_name = "longitude of V-points" ;
lon_v:units = "degree_east" ;
lon_v:field = "lon_v, scalar" ;
double mask_psi(eta_psi, xi_psi) ;
mask_psi:long_name = "mask on psi-points" ;
mask_psi:option_0 = "land" ;
mask_psi:option_1 = "water" ;
mask_psi:coordinates = "lon_psi lat_psi" ;
double mask_rho(eta_rho, xi_rho) ;
mask_rho:long_name = "mask on RHO-points" ;
mask_rho:option_0 = "land" ;
mask_rho:option_1 = "water" ;
mask_rho:coordinates = "lon_rho lat_rho" ;
double mask_u(eta_u, xi_u) ;
mask_u:long_name = "mask on U-points" ;
mask_u:option_0 = "land" ;
mask_u:option_1 = "water" ;
mask_u:coordinates = "lon_u lat_u" ;
double mask_v(eta_v, xi_v) ;
mask_v:long_name = "mask on V-points" ;
mask_v:option_0 = "land" ;
mask_v:option_1 = "water" ;
mask_v:coordinates = "lon_v lat_v" ;
int nAVG ;
nAVG:long_name = "number of time-steps between time-
averaged records" ;
int nHIS ;
nHIS:long_name = "number of time-steps between history
records" ;
int nRST ;
nRST:long_name = "number of time-steps between restart
records" ;
nRST:cycle = "only latest two records are
maintained" ;
int ndefAVG ;
ndefAVG:long_name = "number of time-steps between the
creation of average files" ;
int ndefHIS ;
ndefHIS:long_name = "number of time-steps between the
creation of history files" ;
int ndtfast ;
ndtfast:long_name = "number of short time-steps" ;
int ntimes ;
ntimes:long_name = "number of long time-steps" ;
int ntsAVG ;
ntsAVG:long_name = "starting time-step for
accumulation of time-averaged fields" ;
double ocean_time(ocean_time) ;
ocean_time:long_name = "time since initialization" ;
ocean_time:units = "seconds since 2000-01-01
00:00:00" ;
ocean_time:calendar = "gregorian" ;
ocean_time:field = "time, scalar, series" ;
double pm(eta_rho, xi_rho) ;
pm:long_name = "curvilinear coordinate metric in XI" ;
pm:units = "meter-1" ;
pm:coordinates = "lon_rho lat_rho" ;
pm:field = "pm, scalar" ;
double pn(eta_rho, xi_rho) ;
pn:long_name = "curvilinear coordinate metric in
ETA" ;
pn:units = "meter-1" ;
pn:coordinates = "lon_rho lat_rho" ;
pn:field = "pn, scalar" ;
float rain(ocean_time, eta_rho, xi_rho) ;
rain:long_name = "rain fall rate" ;
rain:units = "kilogram meter-2 second-1" ;
rain:negative_value = "upward flux, salting (NOT
POSSIBLE)" ;
rain:positive_value = "downward flux, freshening
(precipitation)" ;
rain:time = "ocean_time" ;
rain:coordinates = "lon_rho lat_rho ocean_time" ;
rain:field = "rain, scalar, series" ;
double rdrg ;
rdrg:long_name = "linear drag coefficient" ;
rdrg:units = "meter second-1" ;
double rdrg2 ;
rdrg2:long_name = "quadratic drag coefficient" ;
double rho0 ;
rho0:long_name = "mean density used in Boussinesq
approximation" ;
rho0:units = "kilogram meter-3" ;
double s_rho(s_rho) ;
s_rho:long_name = "S-coordinate at RHO-points" ;
s_rho:valid_min = -1. ;
s_rho:valid_max = 0. ;
s_rho:standard_name = "ocean_s_coordinate" ;
s_rho:formula_terms = "s: s_rho eta: zeta depth: h a:
theta_s b: theta_b depth_c: hc" ;
s_rho:field = "s_rho, scalar" ;
double s_w(s_w) ;
s_w:long_name = "S-coordinate at W-points" ;
s_w:valid_min = -1. ;
s_w:valid_max = 0. ;
s_w:standard_name = "ocean_s_coordinate" ;
s_w:formula_terms = "s: s_w eta: zeta depth: h a:
theta_s b: theta_b depth_c: hc" ;
s_w:field = "s_w, scalar" ;
float salt(ocean_time, s_rho, eta_rho, xi_rho) ;
salt:long_name = "salinity" ;
salt:time = "ocean_time" ;
salt:coordinates = "lon_rho lat_rho s_rho
ocean_time" ;
salt:field = "salinity, scalar, series" ;
float sensible(ocean_time, eta_rho, xi_rho) ;
sensible:long_name = "net sensible heat flux" ;
sensible:units = "watt meter-2" ;
sensible:negative_value = "upward flux, cooling" ;
sensible:positive_value = "downward flux, heating" ;
sensible:time = "ocean_time" ;
sensible:coordinates = "lon_rho lat_rho ocean_time" ;
sensible:field = "sensible heat flux, scalar,
series" ;
char spherical ;
spherical:long_name = "grid type logical switch" ;
spherical:option_T = "spherical" ;
spherical:option_F = "Cartesian" ;
float sustr(ocean_time, eta_u, xi_u) ;
sustr:long_name = "surface u-momentum stress" ;
sustr:units = "newton meter-2" ;
sustr:time = "ocean_time" ;
sustr:coordinates = "lon_u lat_u ocean_time" ;
sustr:field = "surface u-momentum stress, scalar,
series" ;
float svstr(ocean_time, eta_v, xi_v) ;
svstr:long_name = "surface v-momentum stress" ;
svstr:units = "newton meter-2" ;
svstr:time = "ocean_time" ;
svstr:coordinates = "lon_v lat_v ocean_time" ;
svstr:field = "surface v-momentum stress, scalar,
series" ;
float temp(ocean_time, s_rho, eta_rho, xi_rho) ;
temp:long_name = "potential temperature" ;
temp:units = "Celsius" ;
temp:time = "ocean_time" ;
temp:coordinates = "lon_rho lat_rho s_rho
ocean_time" ;
temp:field = "temperature, scalar, series" ;
double theta_b ;
theta_b:long_name = "S-coordinate bottom control
parameter" ;
double theta_s ;
theta_s:long_name = "S-coordinate surface control
parameter" ;
double tnu2(tracer) ;
tnu2:long_name = "Laplacian mixing coefficient for
tracers" ;
tnu2:units = "meter2 second-1" ;
float 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:coordinates = "lon_u lat_u s_rho ocean_time" ;
u:field = "u-velocity, scalar, series" ;
float ubar(ocean_time, eta_u, xi_u) ;
ubar:long_name = "vertically integrated u-momentum
component" ;
ubar:units = "meter second-1" ;
ubar:time = "ocean_time" ;
ubar:coordinates = "lon_u lat_u ocean_time" ;
ubar:field = "ubar-velocity, scalar, series" ;
float 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:coordinates = "lon_v lat_v s_rho ocean_time" ;
v:field = "v-velocity, scalar, series" ;
float vbar(ocean_time, eta_v, xi_v) ;
vbar:long_name = "vertically integrated v-momentum
component" ;
vbar:units = "meter second-1" ;
vbar:time = "ocean_time" ;
vbar:coordinates = "lon_v lat_v ocean_time" ;
vbar:field = "vbar-velocity, scalar, series" ;
double visc2 ;
visc2:long_name = "Laplacian mixing coefficient for
momentum" ;
visc2:units = "meter2 second-1" ;
float w(ocean_time, s_w, eta_rho, xi_rho) ;
w:long_name = "vertical momentum component" ;
w:units = "meter second-1" ;
w:time = "ocean_time" ;
w:coordinates = "lon_rho lat_rho s_w ocean_time" ;
w:field = "w-velocity, scalar, series" ;
double xl ;
xl:long_name = "domain length in the XI-direction" ;
xl:units = "meter" ;
float zeta(ocean_time, eta_rho, xi_rho) ;
zeta:long_name = "free-surface" ;
zeta:units = "meter" ;
zeta:time = "ocean_time" ;
zeta:coordinates = "lon_rho lat_rho ocean_time" ;
zeta:field = "free-surface, scalar, series" ;
// global attributes:
:type = "ROMS/TOMS history file" ;
:Conventions = "CF-1.0" ;
:title = "HI-POOIS ISLAND GRID (4km)" ;
:var_info = "varinfo.dat" ;
:rst_file = "
hiig_rst.nc" ;
:his_file = "
hiig_his.nc" ;
:avg_file = "
hiig_avg.nc" ;
:grd_file = "/share/observer/powellb/hioos/grid/roms-
hiig-grid-ncom.nc" ;
:ini_file = "
ini.nc" ;
:frc_file_01 = "/share/observer/powellb/hioos/frc/ncep/
hiig_ncep_pair.nc" ;
:frc_file_02 = "/share/observer/powellb/hioos/frc/ncep/
hiig_ncep_swrad.nc" ;
:frc_file_03 = "/share/observer/powellb/hioos/frc/ncep/
hiig_ncep_lwrad.nc" ;
:frc_file_04 = "/share/observer/powellb/hioos/frc/ncep/
hiig_ncep_rain.nc" ;
:frc_file_05 = "/share/observer/powellb/hioos/frc/ncep/
hiig_ncep_tair.nc" ;
:frc_file_06 = "/share/observer/powellb/hioos/frc/ncep/
hiig_ncep_qair.nc" ;
:frc_file_07 = "/share/observer/powellb/hioos/frc/ncep/
hiig_ncep-cora_wind.nc" ;
:bry_file = "/share/observer/powellb/hioos/clim/ncom/
ncom-bry-2006.nc" ;
:clm_file = "/share/observer/powellb/hioos/clim/ncom/
ncom-clim-2006.nc" ;
:script_file = "/share/observer/powellb/hioos/nlm-
ncom3/work/
ocean.in" ;
:svn_url = ;
:svn_rev = "1" ;
:code_dir = "/share/observer/powellb/roms/src" ;
:header_dir = "/share/observer/powellb/hioos/nlm-
ncom3" ;
:header_file = "hiig.h" ;
:os = "Linux" ;
:cpu = "x86_64" ;
:compiler_system = "ifort" ;
:compiler_command = "/usr/mpi/intel/openmpi-2.2/bin/
mpif90" ;
:compiler_flags = " -ip -O3 -i_dynamic -xT -free" ;
:tiling = "008x007" ;
:history = "Thu Mar 19 16:30:33 2009: ncks -d
ocean_time,60,90
hiig_his_2192.nc /share/observer/dmac/today/ocn/
roms-30days.nc\n",
"ROMS/TOMS, Version 3.0, Tuesday - March 10,
2009 - 7:38:54 PM" ;
:ana_file = "/share/observer/powellb/hioos/nlm-
ncom3/../include/ana_btflux.h, /share/observer/powellb/hioos/nlm-
ncom3/../include/ana_nudgcoef.h" ;
:CPP_options = "hiig, ANA_BSFLUX, ANA_BTFLUX,
ASSUMED_SHAPE, AVERAGES, AVERAGES_FLUXES, BULK_FLUXES, CURVGRID,
DJ_GRADPS, DOUBLE_PRECISION, EAST_FSCHAPMAN, EAST_M2FLATHER,
EAST_M3NUDGING, EAST_M3RADIATION, EAST_TNUDGING, EAST_TRADIATION,
EMINUSP, FORWARD_WRITE, GLS_MIXING, KANTHA_CLAYSON, LONGWAVE_OUT,
M2CLIMATOLOGY, M2CLM_NUDGING, M3CLIMATOLOGY, M3CLM_NUDGING, MASKING,
MIX_GEO_TS, MIX_S_UV, MPI, NONLINEAR, NONLIN_EOS, NORTH_FSCHAPMAN,
NORTH_M2FLATHER, NORTH_M3NUDGING, NORTH_M3RADIATION, NORTH_TNUDGING,
NORTH_TRADIATION, N2S2_HORAVG, POWER_LAW, PROFILE, K_GSCHEME,
RADIATION_2D, !RST_SINGLE, SALINITY, SOLAR_SOURCE, SOLVE3D,
SOUTH_FSCHAPMAN, SOUTH_M2FLATHER, SOUTH_M3NUDGING, SOUTH_M3RADIATION,
SOUTH_TNUDGING, SOUTH_TRADIATION, SPLINES, TCLIMATOLOGY, TCLM_NUDGING,
TS_U3HADVECTION, TS_C4VADVECTION, TS_DIF2, UV_ADV, UV_COR,
UV_U3HADVECTION, UV_C4VADVECTION, UV_QDRAG, UV_VIS2, VAR_RHO_2D,
WEST_FSCHAPMAN, WEST_M2FLATHER, WEST_M3NUDGING, WEST_M3RADIATION,
WEST_TNUDGING, WEST_TRADIATION, ZCLIMATOLOGY, ZCLM_NUDGING," ;
}