[ncl-talk] write variable in do loop

Alessandra Giannini alesall at iri.columbia.edu
Thu Sep 10 06:51:11 MDT 2015


Hi again, Ancy, 

I promise this is the last I write - promise to myself: I am teaching today, and have a homework assignment and lecture to finish preparing…

Please have a look at your variable, use 

printVarSummary
<http://www.ncl.ucar.edu/Document/Functions/Built-in/printVarSummary.shtml>

if you don't know for sure.

The error message is pretty clear

> fatal:_NclBuildArray: each element of a literal array must have the same dimension sizes, at least one item doesn't

I am guessing this pertains to your td_plane variable. In any case, it pertains to what you wrote on or around line 49.
I do not know exactly what your variable looks like. When I suggested a definition, I was hoping you would check the order of the dimensions [vertical levels, longitude, latitude], to make sure it corresponds to how you are defining it in the "new" statement.
Is it pressure levels, latitude, longitude, as you have it in the new statement that you copied and pasted from my email, or is it something else?

Try

printVarSummary(td_plane) 

and it will tell you…

Bye bye








On Sep 10, 2015, at 8:40 AM, Ancy Thomas <ancyt.thomas at gmail.com> wrote:

> No progress this side !
> 
> Included the suggested changes:
> 
>   nlat = dimsizes(xlat)
>   nlon = dimsizes(xlon)
> 
> ;;*************************
>   do it = 0,ntimes-1               ; TIME LOOP
> 
>   td = wrf_user_getvar(a,"td",it)
>   p  = wrf_user_getvar(a,"pressure",it)
> 
>   td_plane = new((/nlevels,nlat,nlon/),typeof(td))
> 
>   do level = 0,nlevels-1                 ; LOOP OVER LEVELS
>   pressure = plevs(level)
> 
>   td_plane(level,:,:) = wrf_user_intrp3d(td,p,"h",pressure,0.,False)
> 
>  end do ; end of level loop
>  end do ; end of time loop
>  end do ; end of files loop
>  end
> 
> Error: 
> fatal:_NclBuildArray: each element of a literal array must have the same dimension sizes, at least one item doesn't
> ^Mfatal:["Execute.c":8128]:Execute: Error occurred at or near line 49 in file wrf_td.ncl
> 
> Thanks,
> Ancy
> 
> On Thu, Sep 10, 2015 at 5:47 PM, Alessandra Giannini <alesall at iri.columbia.edu> wrote:
> 
> All right… Making progress!
> 
> What you need to do is define the variable td_plane BEFORE the loop, using the new command:
> 
> <http://www.ncl.ucar.edu/Document/Functions/Built-in/new.shtml>
> 
> Something like:
> 
> td_plane = new((/nlevels,nlat, nlon/),typeof(td))
> 
> 
> 
> 
> 
> 
> 
> On Sep 10, 2015, at 8:02 AM, Ancy Thomas <ancyt.thomas at gmail.com> wrote:
> 
> > Hello Madam !
> >
> > Done the changes as you suggested :
> >
> >  do it = 0,ntimes-1               ; TIME LOOP
> >   td = wrf_user_getvar(a,"td",it)
> >   p  = wrf_user_getvar(a,"pressure",it)
> >
> >   do level = 0,nlevels-1                 ; LOOP OVER LEVELS
> >   pressure = plevs(level)
> >
> >   td_plane(level,:,:) = wrf_user_intrp3d(td,p,"h",pressure,0.,False)
> >
> >  end do ; end of level loop
> >  end do ; end of time loop
> >  end do ; end of files loop
> >  end
> >
> > Still I am getting the same error:
> > fatal:Undefined identifier: (td_plane) is undefined, can't continue
> > ^Mfatal:["Execute.c":8128]:Execute: Error occurred at or near line 49 in file wrf_td.ncl
> >
> >
> > Thanks,
> > regards,
> > Ancy
> >
> >
> > On Thu, Sep 10, 2015 at 5:10 PM, Alessandra Giannini <alesall at iri.columbia.edu> wrote:
> >
> > Hi there,
> >
> > [it's a madam speaking, actually!]
> > You should always reply to ncl-talk, not just to the person who responds…
> >
> > It would help if you explained what is not working…
> > At any rate, what is the structure of the variable you call here:
> >
> > >   td = wrf_user_getvar(a,"td",it)
> >
> >
> > if it has all the levels you need, just write it out.
> >
> > It may be that these two lines that define your variables need to sit outside/before the loops:
> >
> > >   td = wrf_user_getvar(a,"td",it)
> > >   p  = wrf_user_getvar(a,"pressure",it)
> >
> >
> > Otherwise you redefine them each time.
> > Please think through what you want to accomplish, and the correct order of the steps to get there.
> >
> >
> >
> >
> >
> >
> >
> >
> > --
> > Alessandra Giannini
> > IRI for Climate and Society - The Earth Institute at Columbia University
> > P.O. Box 1000, Palisades NY 10964-8000
> > phone/fax: +1 845 680-4473/4864 - email: alesall at iri.columbia.edu
> >
> > On Sep 10, 2015, at 6:54 AM, Ancy Thomas <ancyt.thomas at gmail.com> wrote:
> >
> > > Hello Sir,
> > >
> > > Thanks for the response.
> > >
> > > Yes, I want to write the data variable for each level in a loop. The program is given below: How should I modify .
> > >
> > > ************************************************
> > > begin
> > > datadir = systemfunc("tail -1 fil")
> > > FILES = systemfunc ("ls -1 " + datadir + "wrfout_d02* " )
> > > numFILES = dimsizes(FILES)
> > > ;;***************Pressure levels **********
> > >  plevs = (/ 925., 850., 700., 600., 500., 300., 200./)   ; pressure levels to plot
> > >  nlevels         = dimsizes(plevs)     ; number of pressure levels
> > >
> > > do ifil = 0,numFILES-1
> > >    a = addfile(FILES(ifil)+".nc","r")
> > >
> > > ; What times and how many time steps are in the data set
> > > times  = wrf_user_list_times(a)  ; get times in the file
> > >   ntimes = dimsizes(times)       ; number of times in the file
> > > ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> > >
> > > ;Read in constant variables
> > >       xlat  = wrf_user_getvar(a, "XLAT",0)
> > >       xlon  = wrf_user_getvar(a, "XLONG",0)
> > >       hght   = wrf_user_getvar(a, "HGT",0)
> > >
> > > ; writing data into netcdf format
> > >     system("rm -f wrfout.nc")
> > >     fw = addfile("wrfout.nc", "c")
> > >
> > > ; writing the dimensions time, level, lat, lon
> > >   fw->xlat = xlat
> > >   fw->xlon = xlon
> > >
> > > ;;*************************
> > >   do it = 0,ntimes-1               ; TIME LOOP
> > >
> > >   do level = 0,nlevels-1                 ; LOOP OVER LEVELS
> > >
> > >   pressure = plevs(level)
> > >
> > >   td = wrf_user_getvar(a,"td",it)
> > >   p  = wrf_user_getvar(a,"pressure",it)
> > >
> > >   td_plane(level,:,:) = wrf_user_intrp3d(td,p,"h",pressure,0.,False)
> > >
> > >  end do ; end of level loop
> > >  end do ; end of time loop
> > >  end do ; end of files loop
> > >  end
> > >
> > >
> > > Thanks,
> > > Best regards,
> > > Ancy
> > >
> > >
> > >
> > > On Thu, Sep 10, 2015 at 4:04 PM, Alessandra Giannini <alesall at iri.columbia.edu> wrote:
> > >
> > > Hi there,
> > >
> > > I am not familiar with the "wrf" commands you use, but you are asking it to overwrite levels with this line:
> > >
> > > > fw->u_plane = u_plane
> > >
> > >
> > > Do you need to write the levels out separately, meaning do you need a do-loop to begin with?
> > > If you have all the data in a variable, it may be preferable to select the time and levels you want to write out with coordinate selection, and write out all in one go.
> > >
> > > warm regards
> > >
> > >
> > >
> > >
> > >
> > > --
> > > Alessandra Giannini
> > > IRI for Climate and Society - The Earth Institute at Columbia University
> > > P.O. Box 1000, Palisades NY 10964-8000
> > > phone/fax: +1 845 680-4473/4864 - email: alesall at iri.columbia.edu
> > >
> > > On Sep 10, 2015, at 12:26 AM, Ancy Thomas <ancyt.thomas at gmail.com> wrote:
> > >
> > > > Could anyone please help for this query.
> > > >
> > > >
> > > >
> > > > On Wed, Sep 9, 2015 at 6:04 PM, Ancy Thomas <ancyt.thomas at gmail.com> wrote:
> > > > Hello all,
> > > > Greetings!
> > > >
> > > > I want to write a variable in do loop. But it is writing the data only for the last level(200hpa), ie; data is getting over written for each level. How to save the u_plane data as array?
> > > >
> > > >
> > > > ;;***************Pressure levels **********
> > > >  plevs = (/ 925., 850., 700., 600., 500., 300., 200./)   ; pressure levels to plot
> > > >  nlevels         = dimsizes(plevs)     ; number of pressure levels
> > > >
> > > > ; writing data into netcdf format
> > > >     system("rm -f wrfout.nc")
> > > >     fw = addfile("wrfout.nc", "c")
> > > >
> > > >
> > > > ; writing the dimensions time, level, lat, lon
> > > >
> > > > ;  fw->xlev = xlev
> > > >   fw->xlat = xlat
> > > >   fw->xlon = xlon
> > > >
> > > >  do it = 0,ntimes-1               ; TIME LOOP
> > > >
> > > >  do level = 0,nlevels-1                 ; LOOP OVER LEVELS
> > > > u    = wrf_user_getvar(a,"U",it)
> > > >
> > > > u_plane    = wrf_user_intrp3d(u,p,"h",pressure,0.,False)
> > > >
> > > > fw->u_plane = u_plane
> > > >
> > > > end do ; level loop
> > > > end do ; time loop
> > > >
> > > > Kindly help to resolve the issue.
> > > >
> > > > Thank you,
> > > > With regards,
> > > > --
> > > > Ancy Thomas,
> > > > Computational Earth Science Group / HPC application Group
> > > > CDAC
> > > > Pune
> > > >
> > > >
> > > >
> > > >
> > > > --
> > > >
> > > > _______________________________________________
> > > > ncl-talk mailing list
> > > > ncl-talk at ucar.edu
> > > > List instructions, subscriber options, unsubscribe:
> > > > http://mailman.ucar.edu/mailman/listinfo/ncl-talk
> > >
> > >
> > >
> > >
> > >
> >
> >
> >
> >
> >
> 
> 
> 



More information about the ncl-talk mailing list