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

Guiting Song guitingsong at gmail.com
Sun Jul 26 19:51:00 MDT 2015


BTW, I upload the necessary sample data into the ftp.cgd.ucar.edu.


Best regards,
Tony



On Mon, Jul 27, 2015 at 9:27 AM, Guiting Song <guitingsong at gmail.com> wrote:

> 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/6b993546/attachment.html 


More information about the ncl-talk mailing list