[ncl-talk] Problem with ESMF_regrid

Tomoko Koyama Tomoko.Koyama at Colorado.EDU
Sat Nov 11 20:50:34 MST 2017


Hello,

I am trying to regrid Sea Ice Area Fraction and Sea Ice Thickness data from some CMIP5 daily data to EASE 100km grid. 
The following script works for Sea Level Pressure, Near-Surface Temperature, Geopotential Height etc. but not for those ice parameters.

The error message is “Assignment type mismatch, right hand side can't be coerced to type of left hand side” occurring at regridding; 
var_regrid = ESMF_regrid(var,Opt)

Does anyone see why this might be???

Thank you in advance,
Tomoko


+++++++++++++++++
+ Error message +
+++++++++++++++++

Copyright (C) 1995-2015 - All Rights Reserved
 University Corporation for Atmospheric Research
 NCAR Command Language Version 6.3.0
 The use of this software is governed by a License Agreement.
 See http://www.ncl.ucar.edu/ for more details.
(0)     get_src_grid_info: source lat dims = (384)
(0)     get_src_grid_info: source lon dims = (320)
(0)     get_src_grid_info: source grid type is 'rectilinear'
(0)     curvilinear_to_SCRIP: calculating grid corners...
(0)     curvilinear_to_SCRIP: one or more lat values are at the
(0)            poles, so calculating grid corners using
(0)            calc_SCRIP_corners_boundaries...
(0)     calc_SCRIP_corners_boundaries
(0)          min/max original lat: 1/384
(0)          min/max original lon: 1/320
fatal:Assignment type mismatch, right hand side can't be coerced to type of left hand side
^Mfatal:["Execute.c":8575]:Execute: Error occurred at or near line 770 in file $NCARG_ROOT/lib/ncarg/nclscripts/esmf/ESMF_regridding.ncl

^Mfatal:["Execute.c":8575]:Execute: Error occurred at or near line 1744 in file $NCARG_ROOT/lib/ncarg/nclscripts/esmf/ESMF_regridding.ncl

^Mfatal:["Execute.c":8575]:Execute: Error occurred at or near line 1822 in file $NCARG_ROOT/lib/ncarg/nclscripts/esmf/ESMF_regridding.ncl

^Mfatal:["Execute.c":8575]:Execute: Error occurred at or near line 3851 in file $NCARG_ROOT/lib/ncarg/nclscripts/esmf/ESMF_regridding.ncl

^Mfatal:["Execute.c":8575]:Execute: Error occurred at or near line 3983 in file $NCARG_ROOT/lib/ncarg/nclscripts/esmf/ESMF_regridding.ncl

^Mfatal:["Execute.c":8573]:Execute: Error occurred at or near line 86

++++++++++
+ Script +
++++++++++

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       = "CCSM4"
gridtype    = "latlon"

rdiri       = "/work/koyama_sice"
in_diri     = "/home/koyama/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 ="/home/koyama/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

    lat1d = ndtooned(lat2d)
    lon1d = ndtooned(lon2d)
    lon1d = where(lon1d.lt.0,360.0+lon1d,lon1d)
    latlon_dims = dimsizes(lat2d)                 ; 180x180
  
    Opt                 = True

    Opt at ForceOverwrite  = 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 SrcInputFileName    = srcGridFili          ; optional, but good idea
    Opt at DstInputFileName    = dstGridFili

    Opt at SkipSrcGrid    = False
    Opt at SkipDstGrid    = False
    Opt at SkipWgtGen     = False
    Opt at DstESMF        = True

    Indexes = ind(.not.ismissing(lon1d))     
    Opt at DstGridType    = "unstructured"         ; Destination grid
    Opt at DstGridLat     = lat1d(Indexes)         ; Strip off missing data
    Opt at DstGridLon     = lon1d(Indexes)

    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 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 SrcGridMask      = where(ismissing(var(0,:,:)),0,1)

    var_regrid = ESMF_regrid(var,Opt)   ; Regrid var

    copy_VarAtts(var,var_regrid)
    var_regrid at _FillValue = 1.e+20
    var_regrid at missing_value = 1.e+20
    var_regrid at _FillValue = var at _FillValue

    var_regrid!0 = "time"
    var_regrid!1 = "i"
    var_regrid!2 = "j"

    time    = ispan(1,dSizes(3),1)	; CCSM4
    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(srcGridDiri+"/"+filo) .eq. True ) then
      system( "rm " + filo )
    end if

    setfileoption("nc","Format","LargeFile")
    fo = addfile( srcGridDiri + "/" + filo,"c")
    fo->var = var_regrid
    fo->lat = lat2d
    fo->lon = lon2d

    ;; Clean up
    delete( var )
    delete( sfile )
    delete( Opt )
    delete( filo )
    delete( fo )
    delete( var_regrid )

  end do

  delete( dfile )
  delete( lat2d )
  delete( lon2d )

end




More information about the ncl-talk mailing list