[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