[ncl-talk] Problem with ESMF_regrid
Tomoko Koyama
Tomoko.Koyama at Colorado.EDU
Mon Feb 27 22:15:31 MST 2017
Hello,
I am trying to regrid MIROC5 Sea Ice Area Fraction (and other CMIP5 output) to EASE 100km grid.
The following script works for NorESM1-M sic data, but it doesn’t work for MIROC5.
==============================
…
…
…
(0) ESMF_regrid_with_weights: retrieving interpolation weights ...
(0) ESMF_regrid_with_weights: calling sparse_matrix_mult to apply weights...
(0) ESMF_regrid_with_weights: putting interpolated values back onto larger 2D grid...
fatal:reshape_ind: the number of indexes must be the same as the rightmost dimension of x
fatal:["Execute.c":8567]:Execute: Error occurred at or near line 2797 in file $NCARG_ROOT/lib/ncarg/nclscripts/esmf/ESMF_regridding.ncl
fatal:["Execute.c":8567]:Execute: Error occurred at or near line 3489 in file $NCARG_ROOT/lib/ncarg/nclscripts/esmf/ESMF_regridding.ncl
fatal:["Execute.c":8567]:Execute: Error occurred at or near line 92 in file MIROC5_regrid_ice.ncl
==============================
Does anyone see why this might be?
Thank you in advance,
Tomoko
;;----------------------------------------------------------------------
;; A test routine to regrid MIROC5 to EASE 100km grid
;;
;; 2017-02-27 Tomoko Koyama
;;----------------------------------------------------------------------
;; This code is based on "ESMF_regrid_12.ncl"
;; (http://www.ncl.ucar.edu/Applications/Scripts/ESMF_regrid_12.ncl <http://www.ncl.ucar.edu/Applications/Scripts/ESMF_regrid_12.ncl>)
;;----------------------------------------------------------------------
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"
load "$NCARG_ROOT/lib/ncarg/nclscripts/esmf/ESMF_regridding.ncl"
method = "bilinear"
model = "MIROC5"
gridtype = "latlon"
doplot = 0
rdiri = "/Users/tomoko/CMIP5/data"
in_diri = "/Users/tomoko/CMIP5/data/input"
esmf_diri = in_diri + "/" + model
begin
; Source grid
srcGridDiri = rdiri + "/" + model
fili = systemfunc("cd " + srcGridDiri + " ; ls sic_*.nc")
nfil = dimsizes(fili)
; Destination grid
dstGridDiri ="/Users/tomoko/CMIP5/data/grid_coord"
dstFileName = "NRims180x180.nc"
dstGridFili = dstGridDiri + "/" + dstFileName
dfile = addfile(dstGridDiri + "/" + dstFileName, "r")
lat2d = dfile->latitude
lon2d = dfile->longitude
do ifil = 0, nfil-1
srcGridFili = fili(ifil)
sfile = addfile(srcGridDiri + "/" + srcGridFili, "r")
dSizes = getfiledimsizes(sfile)
var = sfile->sic
;printVarSummary( var )
lat1d = ndtooned(lat2d)
lon1d = ndtooned(lon2d)
lon1d = where(lon1d.lt.0,360.0+lon1d,lon1d)
latlon_dims = dimsizes(lat2d) ; 180x180
Indexes = ind(.not.ismissing(lon1d))
Opt = True
Opt at SrcFileName = esmf_diri + "/" + model +"_SCRIP.nc" ; output file names
Opt at DstFileName = esmf_diri + "/" + "EASE_ESMF.nc"
Opt at WgtFileName = esmf_diri + "/" + model +"_2_EASE_"+method+".nc"
Opt at ForceOverwrite = True
Opt at SrcInputFileName = srcGridFili ; optional, but good idea
Opt at DstInputFileName = dstGridFili
Opt at SkipSrcGrid = True ;False
Opt at SkipDstGrid = True ;False
Opt at SkipWgtGen = True ;False
Opt at DstESMF = True
Opt at DstGridType = "unstructured" ; Destination grid
Opt at DstGridLat = lat1d(Indexes) ; Strip off missing data
Opt at DstGridLon = lon1d(Indexes)
delete(lat1d)
delete(lon1d)
Opt at RemapIndexes = True ; This is necessary to remap
Opt at Indexes = Indexes ; regridded values back to
Opt at IndexesDims = latlon_dims ; locations on destination grid
Opt at InterpMethod = method
Opt at Debug = True
Opt at PrintTimings = True
Opt at NoPETLog = True
Opt at CopyVarCoords = False ; we can't copy the coords because
; the weights on the file are only
; for the non-missing lat/lon values.
Opt at SrcMask2D = where(ismissing(var(0,:,:)),0,1)
var_regrid = ESMF_regrid(var,Opt) ; Regrid var
copy_VarAtts(var,var_regrid)
var_regrid at _FillValue = var at _FillValue
var_regrid!0 = "time"
var_regrid!1 = "i"
var_regrid!2 = "j"
time = ispan(1,dSizes(0),1)
time!0 = "time"
time at long_name = "time"
time at units = "month"
time&time = time
var_regrid&time = time
var_regrid&i = lat2d&i
var_regrid&j = lat2d&j
delete( var_regrid at lat1d )
delete( var_regrid at lon1d )
if ( isatt( var_regrid, "lat2d" ) ) then
delete( var_regrid at lat2d )
end if
if ( isatt( var_regrid, "lon2d" ) ) then
delete( var_regrid at lon2d )
end if
;;----------------------------------------------------------------------
;; Write regridded data to file
;;----------------------------------------------------------------------
str = str_split(srcGridFili, ".")
filo = str(0) + ".rgrd.nc"
if ( isfilepresent(filo) .eq. True ) then
system( "rm " + filo )
end if
setfileoption("nc","Format","LargeFile")
fo = addfile( srcGridDiri + "/" + filo,"c")
fo->sic = var_regrid
;fo->plev = plev
fo->lat = lat2d
fo->lon = lon2d
;;----------------------------------------------------------------------
;; Plot results
;;----------------------------------------------------------------------
if ( doplot .eq. 1 ) then
printMinMax( var, True )
var = where( var .le. 0.0, var at _FillValue, var )
var_regrid = where( var_regrid .le. 0.0, var_regrid at _FillValue, var_regrid )
print ( "% esmf_regrid_test: Plotting results...." )
wks = gsn_open_wks("png","monitor/" + model + "_all_regrid")
gsn_define_colormap(wks,"amwg")
res = True
res at gsnMaximize = True ; Maximize plot
res at gsnDraw = False
res at gsnFrame = False
res at cnLevelSelectionMode = "ManualLevels"
res at cnMinLevelValF = 230.
res at cnMaxLevelValF = 300.
res at cnLevelSpacingF = 10.
res at cnFillOn = True ; color plot desired
res at cnLinesOn = False ; turn off contour lines
res at cnFillMode = "RasterFill"
res at lbLabelBarOn = False
res at gsnPolar = "NH" ; specify the hemisphere
res at mpMinLatF = 60.
res at trGridType = "TriangularMesh" ; allow missing coordinates
;---Plot original data
res at tiMainString = "Original "+model +" grid (" + \
str_join(tostring(dimsizes(var))," x ") + ")"
plot_orig1 = gsn_csm_contour_map_polar(wks,var(2,:,:),res)
plot_orig2 = gsn_csm_contour_map_polar(wks,var(8,:,:),res)
;---Plot regridded data
res at gsnAddCyclic = False
res at sfXArray = lon2d
res at sfYArray = lat2d
res at tiMainString = "Regridded to EASE grid (" + \
str_join(tostring(dimsizes(var_regrid))," x ") + ")"
plot_regrid1 = gsn_csm_contour_map_polar(wks,var_regrid(2,:,:),res)
plot_regrid2 = gsn_csm_contour_map_polar(wks,var_regrid(8,:,:),res)
;---Panel these two plots
pres = True
pres at gsnMaximize = True
pres at gsnPanelLabelBar = True
pres at pmLabelBarWidthF = 0.9
pres at lbLabelFontHeightF = 0.01
gsn_panel(wks,(/plot_orig1,plot_regrid1,plot_orig2,plot_regrid2/),(/2,2/),pres)
delete( res )
delete( pres )
end if
;; Clean up
delete( var )
delete( sfile )
delete( dSizes )
delete( Opt )
delete( time )
delete( filo )
delete( fo )
delete( var_regrid )
end do
delete( dfile )
delete( lat2d )
delete( lon2d )
end
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20170227/d51ee03c/attachment.html
More information about the ncl-talk
mailing list