[ncl-talk] grid_area_avg

Helen Macintyre Helen.Macintyre at phe.gov.uk
Tue Oct 24 05:16:20 MDT 2017


You are trying to delete a variable that has not been assigned.

Using “:=” tries to delete aot_subset when it doesn’t exist yet.

More info here:
http://www.ncl.ucar.edu/Document/Language/varb_assign.shtml



From: ncl-talk [mailto:ncl-talk-bounces at ucar.edu] On Behalf Of Kunal Bali
Sent: 24 October 2017 06:28
To: ncl-talk at ucar.edu
Subject: Re: [ncl-talk] grid_area_avg

I am not able to sort out the query regarding

fatal:Variable (aot_subset) is undefined
fatal:["Execute.c":8640]:Execute: Error occurred at or near line 38 in file extract1.ncl
I have attached my script. please let me know how to solve it (the file regarding this script is attached in the previous mail).

sorry for the inconvenience.


regards
Kunal Bali





On Sat, Oct 21, 2017 at 1:53 PM, Kunal Bali <kunal.bali9 at gmail.com<mailto:kunal.bali9 at gmail.com>> wrote:
thanks for providing this information. I am positive that the given variable in the data is a 2D array and the error is coming on 38 line as I mentioned earlier.
I am trying to debug this problem accordingly as you mentioned.
However, I have attached the data (size =30mb, tried via ftp but facing some error while uploading) and the full script for extracting the grid box mean value.

Thank You for all the support.
​
[https://ssl.gstatic.com/docs/doclist/images/icon_10_generic_list.png] maiactaot.h00v02.20010040635-20011550640.nc.bz2<https://drive.google.com/file/d/0B6MS-JLMHECwaVh3QVVHUU1Wazg/view?usp=drive_web>
​

Kunal Bali






On Fri, Oct 20, 2017 at 9:14 PM, Mary Haley <haley at ucar.edu<mailto:haley at ucar.edu>> wrote:
Kunal,

Multiple people have tried to help you, but you continue to post error messages without trying to debug them yourself. If you don't make an effort, people are likely to stop trying to help. You are including code snippets, but this is not always enough for us to help you debug the problem. You need to include full scripts, output from print/printVarSummary commands, AND all error messages.

For example, you originally included this code:

  latv = (/ 18, 24/)     ; for extracting grid box data
  lonv = (/ 74, 78 /)
  nm   = getind_latlon2d (lat2d, lon2d, latv, lonv)
  ilt1 = nm(0,0)  ; start lat index
  ilt2 = nm(1,0)  ; start lon index
  iln1 = nm(0,1)  ; end lat index
  iln2 = nm(1,1)  ; end lon index
  lat_subset  := lat2d(ilt1:ilt2,iln1:iln2)
  lon_subset := lon2d(ilt1:ilt2,iln1:iln2)
  aot_subset := data
  aot_subset(ilt1:ilt2,iln1:iln2) := data(ilt1:ilt2, iln1:iln2)

  ;printVarSummary(aot_subset)
  aot_avg = avg(data)
  aot_subset_avg = avg(aot_subset)

and then said that you were getting an error about aot_subset being undefined. From the perspective of somebody who is just looking at the code snippet above and doesn't have access to your full script, we are going to wonder about this line:

  aot_subset := data

Since this appears to be the first time aot_subset is set, our next question is going to be "is data defined"? In the code snippet you included, we don't see where "data" is defined, so we have no way to help. This is where a "printVarSummary(data)" line would have helped.

In your last email, in which you did include some information about "data", things are still not making any sense. You said you were subsetting data as a 2D array with:

aot_subset(ilt1:ilt2,iln1:iln2) = data(ilt1:ilt2,iln1:iln2)

which you said was causing this error:

fatal:["Execute.c":7950]:Number of subscripts on right-hand-side do not match
            number of dimensions of variable: (2), Subscripts used: (3)

This error doesn't seem possible, because it's saying that you are using 3 subscripts, but the line only has 2 subscripts being used in both arrays. Are you positive that this error is coming from this line?

I have to ask you again to please include your full script next time and all error messages and all printed output, so people can see exactly what line numbers in your script the errors correspond with and what your data looks like. But don't do this until you have shown that you tried to debug the problem yourself. Use "print" and "printVarSummary" *before* the locations where the error messages are occurring, so you can see what might be causing the error.

For example, if the error says

 number of dimensions of variable: (2), Subscripts used: (3)

then this means you are subscripting a variable as if it were a 2D array, when it is actually a 3D array. Add printVarSummary statements on ALL subscripted variables that occur in that line, so you can be sure you are doing things correctly.  For example, if the error occurs on this line:

  aot_subset(ilt1:ilt2,iln1:iln2) := data(ilt1:ilt2, iln1:iln2)

then do this:

  printVarSummary(data)
  printVarSummary(aot_subset)
  aot_subset(ilt1:ilt2,iln1:iln2) := data(ilt1:ilt2, iln1:iln2)

It may also help to print the il* variables:

  printVarSummary(data)
  printVarSummary(aot_subset)
  print("ilt1 = " + ilt1)
  print("ilt2 = " + ilt2)
  print("iln1 = " + iln1)
  print("iln2 = " + iln2)
  aot_subset(ilt1:ilt2,iln1:iln2) := data(ilt1:ilt2, iln1:iln2)


Moving forward, you *must* show that you are making some effort to debug your problem.

Thank you for your consideration.

--Mary



On Wed, Oct 18, 2017 at 12:23 AM, Kunal Bali <kunal.bali9 at gmail.com<mailto:kunal.bali9 at gmail.com>> wrote:
printVarSummary(aot_subset), shows that aot_subset is undefined, which I am unable to fix this problem yet.
If I used aot_subset(ilt1:ilt2,iln1:iln2) = data(ilt1:ilt2,iln1:iln2) instead of aot_subset(ilt1:ilt2,iln1:iln2) := data(ilt1:ilt2,iln1:iln2)

then the error appeared as

fatal:["Execute.c":7950]:Number of subscripts on right-hand-side do not match
            number of dimensions of variable: (2), Subscripts used: (3)
basically, the data summary is

Variable: fnames
Type: string
Total Size: 8 bytes
            1 values
Number of Dimensions: 1
Dimensions and sizes:    [1]
Coordinates:
(0)    ./maiactaotE.h00v03.20000550525-20003660700.nc<http://maiactaotE.h00v03.20000550525-20003660700.nc>

Variable: data
Type: float
Total Size: 2545920000<tel:(254)%20592-0000> bytes
            636480000 values
Number of Dimensions: 3
Dimensions and sizes:    [time | 442] x [YDim_grid1km | 1200] x [XDim_grid1km | 1200]
Coordinates:
            time: [1301.416666666686..8767]
Number Of Attributes: 8
  coordinates :    GridLat_grid1km, GridLon_grid1km
  hdfeos_name :    Optical_Depth_055
  projection :    Albers Conical Equal_Area
  unit :    None
  long_name :    AOT at 0.55 micron
  _FillValue_original :    -28672
  _FillValue :    -28672
  valid_range :    ( -0.1,  5 )
(0)    latitude (degrees_north) : min=11.2940312768897   max=24.54921980985786
(0)    longitude (degrees_east) : min=68.08003670367275   max=81.63171349927691
fatal:["Execute.c":7776]:aot_subset is undefined, can not subscript an undefined variable
fatal:["Execute.c":8640]:Execute: Error occurred at or near line 38 in file test_extract.ncl
38 line is
aot_subset(ilt1:ilt2,iln1:iln2) = data(ilt1:ilt2,iln1:iln2)
fatal:Variable (aot_subset) is undefined






regards
Kunal Bali






On Tue, Oct 17, 2017 at 3:05 PM, Guido Cioni <guidocioni at gmail.com<mailto:guidocioni at gmail.com>> wrote:
Why did you comment this line ?

  ;printVarSummary(aot_subset)

That would have helped you in debugging the error on your own.

You are using the re-assignment operator ":=". This means that every time you make an assignment the variable is created again. Thus, you cannot make this assignment

  aot_subset(ilt1:ilt2,iln1:iln2) := data(ilt1:ilt2, iln1:iln2)

as NCL has no way to know the shape of aot_subset beforehand.

The following should be used instead (notice the assignment with "=" in the second line).

  aot_subset := data
  aot_subset = aot_subset at _FillValue
  aot_subset(ilt1:ilt2,iln1:iln2) = data(ilt1:ilt2, iln1:iln2)

Notice that this will (1) create an array which is shaped like data (2) fill it with fill values as you only want to compute the average over the subset (3) populate the array only in the lat-lon box provided. However I don't see why you would want to use such a complicated syntax when the following code would produce the same result

aot_subset_avg=avg(data(ilt1:ilt2, iln1:iln2))

If you have the right coordinate attributes you can even jump the first 7 lines and do

aot_subset_avg=avg(data({18:24},{74:78})

but I don't know your data.

As it was already suggested by Mary and others, PLEASE take time to debug the errors on your own.

Regards,

On 17. Oct 2017, at 11:25, Kunal Bali <kunal.bali9 at gmail.com<mailto:kunal.bali9 at gmail.com>> wrote:


I did the following changes but still getting an error of aot_subset which is undefined.
please let me know that how to fix or defined the aot_subset this problem.



  latv = (/ 18, 24/)     ; for extracting grid box data
  lonv = (/ 74, 78 /)
  nm   = getind_latlon2d (lat2d, lon2d, latv, lonv)
  ilt1 = nm(0,0)  ; start lat index
  ilt2 = nm(1,0)  ; start lon index
  iln1 = nm(0,1)  ; end lat index
  iln2 = nm(1,1)  ; end lon index
  lat_subset  := lat2d(ilt1:ilt2,iln1:iln2)
  lon_subset := lon2d(ilt1:ilt2,iln1:iln2)
  aot_subset := data
  aot_subset(ilt1:ilt2,iln1:iln2) := data(ilt1:ilt2, iln1:iln2)

  ;printVarSummary(aot_subset)
  aot_avg = avg(data)
  aot_subset_avg = avg(aot_subset)

  ;print(nm)
  print("-----")

  do k=0,dimsizes(latv)-1
     n = nm(k,0)
     m = nm(k,1)
     print(lat2d(n,m)+"   "+lon2d(n,m))
     print("     "+data(:,n,m))                   ; nearest grid point at all time steps
     print("-----")
  end do



regards
Kunal Bali






On Tue, Oct 17, 2017 at 12:41 PM, Kunal Bali <kunal.bali9 at gmail.com<mailto:kunal.bali9 at gmail.com>> wrote:
I have sent the ncl script and data to the incoming dir with the given names as

data = maiactaotE.h00v03.20003660525-20003660700.nc.bz2
ncl_script = extract_iiserb.ncl

I am not able to define the var_subset in the given script.
please let me know if you have received the data and script?



Kunal Bali






On Mon, Oct 16, 2017 at 11:07 PM, Mary Haley <haley at ucar.edu<mailto:haley at ucar.edu>> wrote:
Kunal,

You must make an effort to debug some of these problems on your own. The error is telling you that something is wrong around line 34 and it is telling you exactly what the problem is. Please try to fix this error.

If you continue to have problems after fixing this error, then I need to ask you to provide the full script and data via ftp:

http://www.ncl.ucar.edu/ftp_files.shtml

However, make sure you debug any other new problems that come up, instead of just emailing them to ncl-talk.  We have a page to help you understand some of NCL's errors, and what causes them:

http://www.ncl.ucar.edu/Document/Language/error_messages.shtml

The particular error you're seeing can be found here:

http://www.ncl.ucar.edu/Document/Language/error_messages.shtml#NumSubRHS

As a side note, you are running a 3-year old version of NCL. I suggest that you upgrade to NCL V6.4.0.

--Mary



On Mon, Oct 16, 2017 at 12:52 AM, Kunal Bali <kunal.bali9 at gmail.com<mailto:kunal.bali9 at gmail.com>> wrote:
I simply include the code (which you mentioned) were I was taking the avg of the data as given below (please correct me if I did wrong)


;----------------------------------------------------------------------
; Main code
;----------------------------------------------------------------------
  dir    = "./"
  fnames = systemfunc("ls " + dir + "maiactaot*.nc")
print(fnames)
  a      = addfile(fnames,"r")
  data   = short2flt(a->Optical_Depth_055_grid1km)
printVarSummary (data)
printMinMax (data, 0)
print("-----")
  nFill  = num(ismissing(data))
print("nFill="+nFill)
print("-----")

  lat2d  = a->GridLat_grid1km
  lon2d  = a->GridLon_grid1km
printMinMax (lat2d, 0)
printMinMax (lon2d, 0)
print("-----")

;---grid points of interest
;---http://www.ncl.ucar.edu/Document/Functions/Contributed/getind_latlon2d.shtml
 ; latv = (/22, 24.0, 24.0, 22.0, 22.0/)
 ; lonv = (/76, 76.0, 78.0, 78.0, 76.0/)

  latv = (/ 22, 24/)
  lonv = (/ 76, 78 /)
  nm   = getind_latlon2d (lat2d, lon2d, latv, lonv)
  ilt1 = nm(0,0)  ; start lat index
  ilt2 = nm(1,0)  ; start lon index
  iln1 = nm(0,1)  ; end lat index
  iln2 = nm(1,1)  ; end lon index
  var_subset = var(ilt1:ilt2,iln1:iln2)
  var_subset_avg = avg(var_subset)

  print(nm)
  print("-----")

  do k=0,dimsizes(latv)-1
     n = nm(k,0)
     m = nm(k,1)
     print(lat2d(n,m)+"   "+lon2d(n,m))
     print("     "+data(:,n,m))                   ; nearest grid point at all time steps
     print("-----")
  end do




But still not getting the desired output as a single square box mean value . It is showing the errors as

kunal at kunal-Vostro-1015:/media/Local Disk_/IIT_DELHI/2001/MAIACTAOT_TIME$ ncl extract1.ncl
 Copyright (C) 1995-2014 - All Rights Reserved
 University Corporation for Atmospheric Research
 NCAR Command Language Version 6.2.1
 The use of this software is governed by a License Agreement.
 See http://www.ncl.ucar.edu/ for more details.


Variable: fnames
Type: string
Total Size: 4 bytes
            1 values
Number of Dimensions: 1
Dimensions and sizes:    [1]
Coordinates:
(0)    ./maiactaot.h00v02.20010040635-20011550640.nc<http://maiactaot.h00v02.20010040635-20011550640.nc/>

Variable: data
Type: float
Total Size: 40320000 bytes
            10080000 values
Number of Dimensions: 3
Dimensions and sizes:    [time | 7] x [YDim_grid1km | 1200] x [XDim_grid1km | 1200]
Coordinates:
            time: [8862.583333333314..12486.66666666669]
Number Of Attributes: 8
  coordinates :    GridLat_grid1km, GridLon_grid1km
  hdfeos_name :    Optical_Depth_055
  projection :    Albers Conical Equal_Area
  unit :    None
  long_name :    AOT at 0.55 micron
  _FillValue_original :    -28672
  _FillValue :    -28672
  valid_range :    ( -0.1,  5 )
(0)    AOT at 0.55 micron: min=0   max=3.924
(0)    -----
(0)    nFill=6285271
(0)    -----
(0)    latitude: min=21.86737357453027   max=34.99855492029426
(0)    longitude: min=64.23634233372005   max=79.4747290253718
(0)    -----
fatal:["Execute.c":7863]:Number of subscripts on right-hand-side do not match
            number of dimensions of variable: (2), Subscripts used: (3)

fatal:["Execute.c":8578]:Execute: Error occurred at or near line 34 in file extract1.ncl

fatal:Variable (var_subset) is undefined
fatal:["Execute.c":8578]:Execute: Error occurred at or near line 35 in file extract1.ncl




Variable: nm
Type: integer
Total Size: 16 bytes
            4 values
Number of Dimensions: 2
Dimensions and sizes:    [2] x [2]
Coordinates:
Number Of Attributes: 1
  long_name :    indices closest to specified LAT/LON coordinate pairs
(0,0)    1199
(0,1)    792
(1,0)    1199
(1,1)    1041
(0)    -----
(0)    23.76603307545667   75.53995171540016
(0)         0.179
(1)         0.142
(2)         -28672
(3)         0.169
(4)         -28672
(5)         -28672
(6)         -28672
(0)    -----
(0)    24.26559325846936   77.93996773594735
(0)         -28672
(1)         0.393
(2)         -28672
(3)         0.156
(4)         0.313
(5)         -28672
(6)         -28672
(0)    -----








Kunal Bali





On Sat, Oct 14, 2017 at 12:24 AM, Mary Haley <haley at ucar.edu<mailto:haley at ucar.edu>> wrote:
Kunal,

Please include the code where you are actually taking the average of your data using the information returned from getind_latlon2d.

It's important to note that getind_latlon2d simply returns the individual index values that are closest to each of the lat/lon pairs that you gave it. It doesn't work in such a way that you give it a lat/lon box and it returns all the values in that box.

That's what I was trying to illustrate with the wrf_gsn_10.ncl I created.  I gave the function two corners of the box, and then using the two pairs of index values I got back, I was able to get all the values inside the box area of interest:

  lats = (/ min_lat, max_lat /)
  lons = (/ min_lon, max_lon /)
  nm   = getind_latlon2d (lat2d, lon2d, lats, lons)
  ilt1 = nm(0,0)  ; start lat index
  ilt2 = nm(1,0)  ; start lon index
  iln1 = nm(0,1)  ; end lat index
  iln2 = nm(1,1)  ; end lon index
  var_subset = var(ilt1:ilt2,iln1:iln2)
  var_subset_avg = avg(var_subset)

--Mary


On Thu, Oct 12, 2017 at 1:19 PM, Kunal Bali <kunal.bali9 at gmail.com<mailto:kunal.bali9 at gmail.com>> wrote:
Dear Haley Ma'am,

Thanks for providing the information and example.
But if I follow the getind_latlon2d function as I did, then it seems like I followed the same procedure as given in the example   http://www.ncl.ucar.edu/Document/Functions/Contributed/getind_latlon2d.shtml

But still I am not getting the mean of the grid box on every time step or am I reading incorrectly the result ?


regards
Kunal Bali






On Fri, Oct 13, 2017 at 12:11 AM, Mary Haley <haley at ucar.edu<mailto:haley at ucar.edu>> wrote:
Kunal,

I created an example for you, showing three ways you can subset a WRF grid (since I already had a similar example).  It shows how to use the getind_latlon2d function.

You have to be careful with subsetting curvilinear data, because specifying a lat/lon box to take an average over can mean two different things. You will be able to see the difference when you look at the graphic.

See example wrf_gsn_10.ncl at:

http://www.ncl.ucar.edu/Applications/wrfgsn.shtml#ex10

--Mary



On Wed, Oct 11, 2017 at 12:03 PM, Kunal Bali <kunal.bali9 at gmail.com<mailto:kunal.bali9 at gmail.com>> wrote:
Dear NCL users,

Single point coordinates values of 23.0 N and 77.0 E is extracted or print by using the script below

----------------------------------------------------------------------
; Main code
;----------------------------------------------------------------------
  dir    = "./"
  fnames = systemfunc("ls " + dir + "maiactaot*.nc")
print(fnames)
  a      = addfile(fnames,"r")
  data   = short2flt(a->Optical_Depth_055_grid1km)
  nFill  = num(ismissing(data))
  lat2d  = a->GridLat_grid1km
  lon2d  = a->GridLon_grid1km

;---grid points of interest
  latv = (/23.0/)
  lonv = (/77.0 /)

  nm = getind_latlon2d (lat2d,lon2d, latv, lonv)

  do k=0,dimsizes(latv)-1
     n = nm(k,0)
     m = nm(k,1)
     print(lat2d(n,m)+"   "+lon2d(n,m))   ; grid point location
     print("     "+data(:,n,m))                   ; nearest grid point at all time steps
     print("-----")
  end do

NOW, I want to extract the square grid box of 100 km around the coordinates (23N,77E) such as
   latv = (/22, 24.0, 24.0, 22.0, 22.0/)
   lonv = (/76, 76.0, 78.0, 78.0, 76.0 /)


after that I want to do the area mean of the grid box. So that I can get one single point value of that grid box.
So when I replacing
  latv = (/23.0/)
  lonv = (/77.0/)

with

   latv = (/22, 24.0, 24.0, 22.0, 22.0/)
   lonv = (/76, 76.0, 78.0, 78.0, 76.0 /)
then It's not giving mean of the square grid box.
It shows the something like that (given below), which is incorrect. So please let me know how can I get the square grid box mean and then extract as asciiwrite or print?

(0)    23.76603307545667   75.53995171540016
(0)         0.179
(1)         0.142
(2)         -28672
(3)         0.169
(4)         -28672
(5)         -28672
(6)         -28672
(0)    -----
(0)    24.00322458681621   75.99551564353467
(0)         0.171
(1)         0.16
(2)         -28672
(3)         0.17
(4)         -28672
(5)         -28672
(6)         -28672
etc..etc..


regards
Kunal Bali




_______________________________________________
ncl-talk mailing list
ncl-talk at ucar.edu<mailto:ncl-talk at ucar.edu>
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk



_______________________________________________
ncl-talk mailing list
ncl-talk at ucar.edu<mailto:ncl-talk at ucar.edu>
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk



_______________________________________________
ncl-talk mailing list
ncl-talk at ucar.edu<mailto:ncl-talk at ucar.edu>
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk



_______________________________________________
ncl-talk mailing list
ncl-talk at ucar.edu<mailto:ncl-talk at ucar.edu>
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk


Guido Cioni
http://guidocioni.altervista.org



_______________________________________________
ncl-talk mailing list
ncl-talk at ucar.edu<mailto:ncl-talk at ucar.edu>
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk




**************************************************************************
The information contained in the EMail and any attachments is confidential and intended solely and for the attention and use of the named addressee(s). It may not be disclosed to any other person without the express authority of Public Health England, or the intended recipient, or both. If you are not the intended recipient, you must not disclose, copy, distribute or retain this message or any part of it. This footnote also confirms that this EMail has been swept for computer viruses by Symantec.Cloud, but please re-sweep any attachments before opening or saving. http://www.gov.uk/PHE
**************************************************************************
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20171024/c4b911a0/attachment.html>


More information about the ncl-talk mailing list