[ncl-talk] linint1: warning:linint1: xi and xo must be monotonically increasing

Guiting Song guitingsong at gmail.com
Sun Jul 26 19:27:10 MDT 2015


Dear All,

I made a depth interpolation by applying linint1 function for ROMS results,
howvever, I keep getting the warning as follows:

warning:linint1: xi and xo must be monotonically increasing

Does anybody meet the same problem? Appreciated if anyone can give me some
suggestions.

my scripts are as follows, I also attached a revised
roms_depth_interp_ratio.ncl function for your reference.

Tony

______________________________________________

;*************************************************
; roms_5.ncl
;
; Concepts illustrated:
;   - Plotting ROMS data
;   - Loading NCL functions from another script
;   - Changing the reference annotation string for vectors
;   - Overlaying vectors and filled contours on a map
;
; roms depth slice using roms_3d_interp with velocity overlay
; note: roms_3d_interp is working on "rho" coords
; if you specify variable "u" or "v" it is transfering them
; first to the "rho" and than interpolate.
;
;*************************************************
load
"/home/arnold/software/ncl_ncarg/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load
"/home/arnold/software/ncl_ncarg/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "/home/arnold/software/ncl_ncarg/lib/ncarg/nclscripts/ROMS_utils.ncl"
load
"/home/arnold/software/ncl_ncarg/lib/ncarg/nclscripts/roms_depth_interp_ratio.ncl"
begin
;************************************************
; User settings
;************************************************
   fhis  = "/home/arnold/ROMS_AGRIF_MLCS/Roms_tools/Run/FORECAST/
roms_his_forecast.nc"
;***********************************************
system("/bin/rm -f /home/arnold/ROMS_AGRIF_MLCS/Roms_tools/Run/FORECAST/
roms_interpolation2.nc")   ; remove any pre-existing file
ncdf = addfile("/home/arnold/ROMS_AGRIF_MLCS/Roms_tools/Run/FORECAST/
roms_interpolation2.nc" ,"c")  ; open output netCDF file
 ;===================================================================
    ; create global attributes of the file (optional)
    ;===================================================================
       fAtt               = True            ; assign file attributes
       fAtt at title         = "NCL Simple Approach to netCDF Creation"
       fAtt at source_file   =  "roms_his_forecast.nc"
       fAtt at Conventions   = "None"
       fAtt at creation_date = systemfunc ("date")
       fileattdef( ncdf, fAtt )            ; copy file attributes

;***********************************************
; Read data
;***********************************************
   his   =  addfile (fhis,"r")
   lon2d = his->lon_rho
   lat2d = his->lat_rho
   times = his->time
   ZETA  = his->zeta
   h = his->h
   hc = his->hc
   Cs_r = his->Cs_r
   Sc_r = his->s_rho
   s = his->salt
   if(isfilevar(his,"Vtransform"))
        vtransform = his->Vtransform
   else
        print("Do not have Vtransform in file needed for depth
calculations, using 2 as default")
        vtransform = 2
        return
   end if
   lev   = his->s_rho
   lev_v = (/1.0, 0.75, 0.5, 0.25, 0.0/)
   T = his->temp
   salt = his->salt
   dim_T=dimsizes(T)
   U1 = his->u
   U=u2rho(U1)
   V1 = his->v
   V  = v2rho(V1)
  ntim  = dimsizes(times) ; get dimension sizes
    nlev  = dimsizes(lev_v)
    nlat1 = dimsizes(lat2d)
    nlat  = nlat1(0)
    nlon1 = dimsizes(lon2d)
    nlon  = nlon1(1)
    dimSizes = (/ ntim, nlev, nlat, nlon /)
  dimSizes2 = (/ ntim, nlat, nlon /)
  U_out = new(dimSizes,typeof(U))
    V_out = new(dimSizes,typeof(V))
    T_out = new(dimSizes,typeof(T))
    IST_out = new(dimSizes,typeof(T))
    S_out = new(dimSizes,typeof(T))
    P_out = new(dimSizes,typeof(T))

;---------- depth calculation ----------------------------------
    depth = new(dim_T,typeof(U))
    hinv=1./h
  N=dimSizes(1)
  M=dimSizes(0)
if (vtransform.eq.2)
 do it=0,M-1
 do k=0,N-1
    cff = 1./(hc + h);
    cffr = hc*Sc_r(k) + h*Cs_r(k);
    depth(it,k,:,:)=ZETA(it,:,:) + ( ZETA(it,:,:) + h )*cffr*cff
 end do
 end do
 end if

 if (vtransform.eq.1)
 do it=0,M-1
 do k=0,N-1
    cffr = hc*(Sc_r(k) - Cs_r(k))
    depth(it,k,:,:)=cffr+Cs_r(k)*h + ZETA(it,:,:)*(1+(cffr+Cs_r(k)*h)*hinv)
 end do
 end do
 end if

;-------------- Depth calculation ------------------------------


;-----------in situ temp calculation ---------------------------
;pre   = depth_to_pres(depth,False)*10
pre=abs(depth)*0.01*10
pre at units = "dbar"

pref = 0.0               ; user specified reference pressure (dbars)
pref at units = "dbar"   ; must be decibar units

;istemp = new(dim_T,typeof(T))
;istemp  = potmp_insitu_ocn(T,s,pre, pref, 1 ,True) ;
pot(ntim,klev,nlat,nlon)

;------------- in situ temp calculation ---------------------------

    T_out(:,nlev-1,:,:) = T(:,dim_T(1)-1,:,:)
    U_out(:,nlev-1,:,:) = U(:,dim_T(1)-1,:,:)
    V_out(:,nlev-1,:,:) = V(:,dim_T(1)-1,:,:)
    S_out(:,nlev-1,:,:) = salt(:,dim_T(1)-1,:,:)
  IST_out(:,nlev-1,:,:) = T(:,dim_T(1)-1,:,:)
  IST_out at units = "Degrees C"
  IST_out at standard_name =  "sea_water_potential_temperature"
  IST_out at long_name = "In Situ Temperature"
  ;IST_out at _FillValue = 9.96921e+36

    do it = 0,ntim-1            ; TIME LOOP
;  print("Working on time: " + times(it) )
      do il = 0,nlev-2
         do i=0,dimSizes(2)-1
          do j=0,dimSizes(3)-1

;      out = roms_depth_interp_ratio(his,"temp",it,lev_v(il))
;      printVarSummary(out)
    x=depth(it,:,i,j)
    min_x = min(x)*lev_v(il)

    T_out(it,il,i,j) = linint1(x,T(it,:,i,j),False,min_x,0);
    S_out(it,il,i,j) = linint1(x,salt(it,:,i,j),False,min_x,0);
    U_out(it,il,i,j) = linint1(x,U(it,:,i,j),False,min_x,0);
    V_out(it,il,i,j) = linint1(x,V(it,:,i,j),False,min_x,0);
    P_out(it,il,i,j) = linint1(x,pre(it,:,i,j),False,min_x,0);
    IST_out(it,il,i,j)=
potmp_insitu_ocn(T_out(it,il,i,j),S_out(it,il,i,j),P_out(it,il,i,j), pref,
0 ,True)
;   T_out(it,il,:,:) = (/roms_depth_interp_ratio(his,"temp",it,lev_v(il))/)
;   S_out(it,il,:,:) = (/roms_depth_interp_ratio(his,"salt",it,lev_v(il))/)
;   U_out(it,il,:,:) = (/roms_depth_interp_ratio(his, "u", it,lev_v(il))/)
; they are automatically put to "rho"
;   V_out(it,il,:,:) = (/roms_depth_interp_ratio(his, "v",
it,lev_v(il))/)
            end do
          end do
       end do
     end do
    U_out!0="time"
    U_out!1="lev"
    U_out!2="lat"
    U_out!3="lon"
    V_out!0="time"
    V_out!1="lev"
    V_out!2="lat"
    V_out!3="lon"
    T_out!0="time"
    T_out!1="lev"
    T_out!2="lat"
    T_out!3="lon"
    IST_out!0="time"
    IST_out!1="lev"
    IST_out!2="lat"
    IST_out!3="lon"


;    printVarSummary(T_out)
;    printVarSummary(U_out)
  ;=====================================================================

       ncdf->T = T_out
       ncdf->U = U_out
         ncdf->V = V_out
         ncdf->Time = times
       ncdf->lat_rho = lat2d
       ncdf->lon_rho = lon2d
       ncdf->lev = lev_v
       ncdf->zeta = ZETA
       ncdf->istemp = IST_out
end
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20150727/c7b66d90/attachment.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: roms_5_ratio_copy2.ncl
Type: application/octet-stream
Size: 6377 bytes
Desc: not available
Url : http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20150727/c7b66d90/attachment.obj 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: roms_depth_interp_ratio.ncl
Type: application/octet-stream
Size: 3573 bytes
Desc: not available
Url : http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20150727/c7b66d90/attachment-0001.obj 


More information about the ncl-talk mailing list