Matthew figured it out on his own.
--- It will not be possible to have a variable of size 124*15*800*1600 [*4 bytes] all contained in memory. Currently, NCL can handle variables of 2BG or less. Hopefully, the next release will address this issue. --- Although I did not have a YOTC file available, I created a script that 'should' work. This if for future FAC reference. [1] read the complex coefficients [2] synthesize using the shsgc procedure [3] add meta data Cheers! Matthew Janiga wrote: > Greetings, > > I am having some trouble with YOTC model data > (http://data-portal.ecmwf.int/data/d/yotc_od/levtype=pl/type=an/). > When I use ncl_filedump on the pv .grib format YOTC data I get normal > lat lon grids. However, the primary variables are packed using > spherical harmonics (I may be phrasing this wrong). These variables > have half the “lon” elements (it isn’t really lon correct?) and an > extra dimension real_imaginary. I saw some old messages pertaining to > this problem but I can’t seem to figure out how to get this into the > same coordinates as the pv. > > I’d like to read in these “packed” primary variables and covert them > to the dimensions that pv is in. Any help with this would be greatly > appreciated! > > I’ve included the results of ncl_filedump on pv and temperature data below. > > Thanks, > Matt (janiga_at_atmos.albany.edu) > > Copyright (C) 1995-2009 - All Rights Reserved > University Corporation for Atmospheric Research > NCAR Command Language Version 5.1.1 > The use of this software is governed by a License Agreement. > See http://www.ncl.ucar.edu/ for more details. > Variable: f (file variable) > > filename: pv.200807 > path: pv.200807.grib > file global attributes: > dimensions: > initial_time0_hours = 124 > lv_ISBL1 = 15 > g4_lat_2 = 800 > g4_lon_3 = 1600 > variables: > float PV_GDS4_ISBL ( initial_time0_hours, lv_ISBL1, g4_lat_2, g4_lon_3 ) > center : European Center for Medium-Range Weather > Forecasts (RSMC) > long_name : Potential vorticity > units : K m**2 kg**-1 s**-1 > _FillValue : 1e+20 > level_indicator : 100 > gds_grid_type : 4 > parameter_table_version : 128 > parameter_number : 60 > forecast_time : 0 > forecast_time_units : hours > > double initial_time0_hours ( initial_time0_hours ) > long_name : initial time > units : hours since 1800-01-01 00:00 > > double initial_time0_encoded ( initial_time0_hours ) > long_name : initial time encoded as double > units : yyyymmddhh.hh_frac > > float g4_lat_2 ( g4_lat_2 ) > long_name : latitude > GridType : Gaussian Latitude/Longitude Grid (Quasi-Regular) > units : degrees_north > N : 400 > Di : 0.225 > Lo2 : 359.775 > La2 : -89.827 > Lo1 : 0 > La1 : 89.827 > > float g4_lon_3 ( g4_lon_3 ) > long_name : longitude > GridType : Gaussian Latitude/Longitude Grid (Quasi-Regular) > units : degrees_east > N : 400 > Di : 0.225 > Lo2 : 359.775 > La2 : -89.827 > Lo1 : 0 > La1 : 89.827 > > integer lv_ISBL1 ( lv_ISBL1 ) > long_name : isobaric level > units : hPa > > string initial_time0 ( initial_time0_hours ) > long_name : Initial time of first record > units : mm/dd/yyyy (hh:mm) > > > Copyright (C) 1995-2009 - All Rights Reserved > University Corporation for Atmospheric Research > NCAR Command Language Version 5.1.1 > The use of this software is governed by a License Agreement. > See http://www.ncl.ucar.edu/ for more details. > Variable: f (file variable) > > filename: t.200807 > path: t.200807.grib > file global attributes: > dimensions: > initial_time0_hours = 124 > lv_ISBL1 = 15 > real_imaginary = 2 > g50_lat_3 = 800 > g50_lon_4 = 800 > variables: > float T_GDS50_ISBL ( initial_time0_hours, lv_ISBL1, > real_imaginary, g50_lat_3, g50_lon_4 ) > center : European Center for Medium-Range Weather > Forecasts (RSMC) > long_name : Temperature > units : K > _FillValue : 1e+20 > level_indicator : 100 > gds_grid_type : 50 > parameter_table_version : 128 > parameter_number : 130 > forecast_time : 0 > forecast_time_units : hours > > double initial_time0_hours ( initial_time0_hours ) > long_name : initial time > units : hours since 1800-01-01 00:00 > > double initial_time0_encoded ( initial_time0_hours ) > long_name : initial time encoded as double > units : yyyymmddhh.hh_frac > > integer lv_ISBL1 ( lv_ISBL1 ) > long_name : isobaric level > units : hPa > > string initial_time0 ( initial_time0_hours ) > long_name : Initial time of first record > units : mm/dd/yyyy (hh:mm) > > > > >
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
function yotc_synthesize(f:file, varName[1]:string, PV:numeric, ntStrt, ntLast)
local ccr, cci, dimsPV, x
begin
ccr = f->$varName$(ntStrt:ntLast,:,0,:,:) ; (time,lev, real, 800, 800)
cci = f->$varName$(ntStrt:ntLast,:,1,:,:) ; (time,lev, imag, 800, 800)
x = new( dimsizes(PV), "float", "No_FillValue")
shsgc(ccr,cci,x) ; synthesize
copy_VarCoords(PV, x) ; meta data
x_at_long_name = ccr_at_long_name
x_at_units = ccr_at_units
return(x)
end
begin
diri = "./" ; input directory
fili = "YOTC.ecmwf.grib"
ntStrt = 0
ntLast = 0
nlat = 800
mlon = 1600
netCDF = True ; ? create netCDF
PLOT = True ; ? PLOT sample time
f = addfile(diri+fili, "r") ; reference the file
PV = f->PV_GDS4_ISBL(ntStrt:ntLast,:,:,:) ; (time,lev,800,1600)
printVarSummary(PV)
printMinMax(PV, True)
T = yotc_synthesize(f, "T_GDS50_ISBL", PV, ntStrt, ntLast)
printVarSummary(T)
printMinMax(T, True)
U = yotc_synthesize(f, "U_GDS50_ISBL", PV, ntStrt, ntLast)
printVarSummary(U)
printMinMax(U, True)
if (netCDF) then
diro = "./"
filo = "YOTC.800x1600.nc"
system("/bin/rm -f "+diro+filo) ; remove any pre-existing file
ncdf = addfile(diro+filo ,"c") ; open output netCDF file
; make time and UNLIMITED dimension ; recommended for most applications
filedimdef(ncdf,"time",-1,True)
; output variables directly ... slow but easy
ncdf->PV = PV
ncdf->T = T
ncdf->U = U
end if
if (PLOT) then
pltDir = "./" ; directory for plot output
pltName = "SAMPLE" ; netCDF name output
pltType = "ps"
wks = gsn_open_wks(pltType, pltDir+pltName)
gsn_define_colormap(wks, "amwg")
res = True ; plot mods desired
res_at_cnFillOn = True ; turn on color fill
res_at_cnLinesOn = False ; turn of contour lines
res_at_gsnSpreadColors = True ; span color map
res_at_lbLabelAutoStride = True
res_at_mpFillOn = False
ymdh = ut_calendar(f->initial_time0_hours, -3)
level = 500
do nt=0,0
res_at_gsnCenterString = ymdh(nt)+" p="+level
plot = gsn_csm_contour_map_ce(wks,T(nt,{level},:,:), res)
plot = gsn_csm_contour_map_ce(wks,U(nt,{level},:,:), res)
end do
end if
end
_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
Received on Fri Sep 18 2009 - 14:41:22 MDT
This archive was generated by hypermail 2.2.0 : Mon Sep 21 2009 - 09:40:03 MDT