[ncl-talk] do loop and rtest problem

Dennis Shea shea at ucar.edu
Thu Aug 14 06:25:11 MDT 2014


Ditto what Alan has written.
======================
If you are new to NCL, please read the 'Mini-Reference Manual' at:
http://www.ncl.ucar.edu/Document/Manuals/
=======================

You must have had error message indicating that 'escar' was undefined.
Error messages should be read, they often will tell you the exact problem.

That said:

[1]
The *autocorrelation* function 'esacr' *may* be what you want to use.

      https://www.ncl.ucar.edu/Document/Functions/Built-in/esacr.shtml

Please read the documentation. In particular, that associated with 'mxlag'

-----
*mxlag*

A scalar integer. It is recommended that 0 <= mxlag <= N/4. This is because
the correlation

algorithm(s) use N rather than (N-k) values in the denominator (Chatfield
Chapter 4).

-----
REPLACE

      do LAG=0,dimsizes(indx_sst)-1
          crr_indx=escar(indx_sst,LAG)
          crr_DJF=escar(rr_DJF,LAG)
      end do

WITH (NOTE: *no do loop used* ; NCL is an array language; ;     again,
please read documentation, carefully)

     LAGMX = dimsizes(indx_sst)/4
     acr_indx = esacr(indx_sst, LAGMX)
     acr_DJF =esacr(rr_DJF, LAGMX)

 **Use 'printVarSummary' often and carefully look** at the dimensions sizes
and
    shape of the resultant variables.

     printVarSummary(acr_indx)     ; acr_indx(LAGMX)
     printVarSummary(acr_DJF)     ; acr_DJF(nlat,mlon,LAGMX)
                                                      ;
0     1         2
     print(acr_indx)

[2]
**After you have carefully examined the output from the above statements**,
you will note that
the array shapes are different (one-dimension & three-dimension).

You can not directly multiply 1D and 3D arrays. You must use the 'conform'
function:

     https://www.ncl.ucar.edu/Document/Functions/Built-in/conform.shtml
<https://www.ncl.ucar.edu/Document/Functions/Built-in/conform.shtml>

After reading the documentation including examples, you will do the
following:

     acr_indx_3d = conform(acr_DJF, acr_indx, 2)
     printVarSummary(acr_indx_3d)                         ;
acr_indx_3d(nlat,mlon,LAGMX)


Now you want to sum the LAGMX auto-correlations  at each grid point. No 'do
loop' necessary.

    https://www.ncl.ucar.edu/Document/Functions/Built-in/dim_sum_n.shtml
<https://www.ncl.ucar.edu/Document/Functions/Built-in/dim_sum_n.shtml>

     c = dim_sum_n(acr_indx_3d*acr_DJF, 2)
     printVarSummary(c)                                             ;
c(nlat,mlon)

[3]
     d = 1+ 2*c
     printVarSummary(d)                                             ;
d(nlat,mlon)

     df = dimsizes(indx_sst)/d
     printVarSummary(df)                                            ;
df(nlat,mlon)
     print("df: min="+min(df)+"   max="+max(df))        ; does this look
reasonable?


rtest requires that the 'df' to be integer

    https://www.ncl.ucar.edu/Document/Functions/Built-in/rtest.shtml

Further, as previously noted, 'rtmp' is nowhere to be seen, presumably
rtmp(nlat,mlon)

    r_test=rtest(rtmp, toint(df), 0) ; presumably 'rtmp' is defined
'somewhere'

    printVarSummary(r_test)                                            ;
r_test(nlat,mlon)
    print("r_test: min="+min(r_test)+"   max="+max(dr_test))



On Wed, Aug 13, 2014 at 7:59 AM, Alan Brammer <abrammer at albany.edu> wrote:

>
> Marcia,
> See some of my comments for each line below.  Next time send the list the
> specific error messages and/or the whole ncl code.  The error messages are
> usually very specific about the problem, which would save the list from
> trying to guess at the problem.
>
>
> You may just have a typo with respect to esacr() / escar()  but the other
> comments I think are still valid.
>
>
>
> ;====  rtest ====================================
>  ;==== dimension : sst_DJF_anom(time,lat,lon), indx_sst(time)
> ;=============================================
>
>
> rr_DJF=sst_DJF_anom(lat|:,lon|:,time|:)
>
>
> do LAG=0,dimsizes(indx_sst)-1 ; Is this the whole code ? Where was
> indx_sst defined?
>  crr_indx=escar(indx_sst,LAG) ; Do you mean for crr_indx to just keep
> being over written ?
>  crr_DJF=escar(rr_DJF,LAG) ; Also what is escar()  It doesn’t appear to
> be an NCL supported function?
>
>   ; Do you mean to be using esccr ()  or esacr () ?
>
> end do
>
> c =0
> do i=1,dimsizes(indx_sst)
>  c= c+crr_indx*crr_DJF ; Again is you’re just multiplying by 2 scalar
> values and incrementing c. Not sure what the point of this is.
> end do
>
> d = 1+ 2*c
>
>
> df = dimsizes(indx_sst)/d
>
>  r_test=rtest(rtmp, df, 0) ;  Where was rtmp defined?   Was it defined ?
>
>
>
> Alan.
>
>
>
>
>
>
>
> ##############################
> Alan Brammer,
> PhD candidate,
>
> Department of Atmospheric and Environmental Sciences,
> University at Albany, State University of New York, Albany, NY, 12222
> abrammer at albany.edu
> ##############################
>
> _______________________________________________
> ncl-talk mailing list
> List instructions, subscriber options, unsubscribe:
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20140814/9d224591/attachment.html 


More information about the ncl-talk mailing list