[ncl-talk] Extracting temperature from specific grids where LU_INDEX = 2

Guido Cioni guidocioni at gmail.com
Wed Mar 15 01:06:01 MDT 2017


Imran,
you should read the documentation carefully. 
Look here http://www.ncl.ucar.edu/Document/Functions/Contributed/dim_avg_n_Wrap.shtml <http://www.ncl.ucar.edu/Document/Functions/Contributed/dim_avg_n_Wrap.shtml>

[…] Computes the average of all elements of the dimensions indicated by dims for each index of all other dimensions and retains metadata. A wrapper <http://www.ncl.ucar.edu/Document/Functions/Contributed/wrapper.shtml> function. Missing values <http://www.ncl.ucar.edu/Document/Language/fillval.shtml> are ignored.[…]

So Missing Values are NOT used to compute the average. Generally in NCL most of the functions are designed to ignore missing values. If you check the description of a function there is always a note that tells you how missing values are handled.

If you want to check whether the mask function worked you have many options:

with the print(T2_masked) statement you should get a list of numbers and False;
with the ismissing (https://www.ncl.ucar.edu/Document/Functions/Built-in/ismissing.shtml <https://www.ncl.ucar.edu/Document/Functions/Built-in/ismissing.shtml>) function you can count the number of _FillValue elements in a multidimensional array;
with a simple gsn_csm_contour_map you can plot T2_masked and see whether it contains grey rectangles (the default way of indicating missing values) over a map.

Please read the available documentation before writing to NCL-list next time ;) 

 <>
> Il giorno 15 mar 2017, alle ore 06:02, Imran Hosen <hosen.imran09 at gmail.com> ha scritto:
> 
> Dear Guido,
> 
> Good day!
> 
> It seems to me that "mask" function is better for me as I am extracting data for 24 hours. I don't want to use "where" function as it needs a loop. Finally, I wrote the script as follows:
> 
> T2 = f_1->T2(0:24,:,:)
> LU_INDEX = f_1->LU_INDEX(0,:,:)       ; (LU_INDEX = landuse index)
> T2_masked = mask(T2,(LU_INDEX.ne.2), False)
> print(T2_masked)
> 
> Then I am trying to get area average temperature for 24 hours and calculated area average as follows:
> 
> T2_area_avg = dim_avg_n_Wrap(T2_masked,(/1,2/))
> print(T2_area_avg)
> 
> After printing T2_area_avg, I'm getting a set of real values for 24 hours. 
> 
> But I'm not sure whether T2_area_avg accurately left all missing vales. Also, I'm not getting a way to check which values (only real or both real and missing values) are considered for T2_area_avg calculation. You said that NCL deals with missing values without problem. Could you please tell me how NCL is dealing with missing values for calculating T2_area_avg. 
> 
> Is "dim_avg_n_Wrap" function only considering the real values without missing values??? 
> 
> Ardently looking forward to your further advise.
> 
> Kind regards,
> Imran
> 
> On Wed, Mar 15, 2017 at 1:08 AM, Imran Hosen <hosen.imran09 at gmail.com <mailto:hosen.imran09 at gmail.com>> wrote:
> Hi Guido and Barry,
> 
> Thanks again for your further advices. 
> 
> Actually, in the study domain, it has 117 rows*117 columns (total 13689 grids). The grids have different land use index (LU_INDEX). I ran simulations using the WRF model for simulating different climate variables. Now, my goal is, I want to plot (XY plot) the hourly temperature difference between the grid cells whose LU_INDEX=2 and LU_INDEX=1. Therefore, I want to extract temperature seperately for the grid cells whose LU_INDEX=2. I'll do same thing for the grid cells whose LU_INDEX=1. Then I will make XY plot, although I never experinced NCL for making XY plot. Hope, now you will understand my goal.
> 
> If I use mask function as the script I wrote, then T2_masked = T2 (only for the grid cells where LU_INDEX is not equal to 2), right??? So, I made a mistake in my script, and I should follow your previous suggestion, right??
> 
> When I use mask or where function, it is showing both real and FillValue. Really, I want to extract only real values for the grid cells where LU_INDEX=2 and want to escape the FillValues.
> 
> Okay, I'll try to implement your advice and let you know the update.
> 
> Wish your uninterrupted sound health.
> 
> Kind regards,
> Imran
> 
> On Tue, Mar 14, 2017 at 8:24 PM, Guido Cioni <guidocioni at gmail.com <mailto:guidocioni at gmail.com>> wrote:
> Can you tell me what is the final goal? Otherwise it is really difficult to give you advices :) 
> 
> Are you sure that your script is working correctly? As far as I understand the mask function acts only on the values where the mask array condition is true, so in your case T2_masked should be untouched, i.e. T2_masked=T2. Have you tried printing or plotting the difference T2-T2_masked?You should instead mask all the points that DO NOT have LU_INDEX=2, as I previously suggested. Furthermore, you should set the FillValue BEFORE calling mask, otherwise the True, False conditions will not apply correctly. If you are more confident with the where syntax use something like this
> 
> where( LU_INDEX=2, T2(time_i,:,:), T2 at _FilllValue)
> 
> However you would need to do that for every time instant with a loop...
> 
> Now to the other question. Are you really sure that you want to SUBSET your data given a certain condition? If you just need to extract statistics from those data having the original array masked is the best way to go as NCL will deal with Missing Values without problems. If you instead try to subset your data you will end up with a weird shaped array, as the LU_INDEX=2 condition, I believe, is not spatially coherent like say a box or a circle. One way to go would be to convert the temperature array to a 1-D one with ndtooned (https://www.ncl.ucar.edu/Document/Functions/Built-in/ndtooned.shtml <https://www.ncl.ucar.edu/Document/Functions/Built-in/ndtooned.shtml>), apply the ind function and then convert back to a multidimensional array (Example 3 at this page is useful http://www.ncl.ucar.edu/Document/Functions/Built-in/minind.shtml <http://www.ncl.ucar.edu/Document/Functions/Built-in/minind.shtml>). But really, it is cumbersome and useless depending on what is your final goal. 
> 
> I think there are a lot of examples on the online guide.
> 
> Good Luck 
> 
> Guido Cioni
> http://guidocioni.altervista <http://guidocioni.altervista/>.org
> 
>> On 14 Mar 2017, at 10:06, Imran Hosen <hosen.imran09 at gmail.com <mailto:hosen.imran09 at gmail.com>> wrote:
>> 
>> Dear Guido and Barry,
>> 
>> Thank you so much for your heartfelt and prompt response. Yes, your suggestions are working fine for my script.
>> 
>> Guido, your assumption is absolutely right. According your suggestion I wrote the script as follows:
>> 
>> T2 = f_1->T2(:,:,:)
>> LU_INDEX = f_1->LU_INDEX(0,:,:)       ; (LU_INDEX = landuse index)
>> T2_masked = mask(T2,(LU_INDEX.eq.2), True)
>> T2_masked at _FillValue = -9999
>> print(T2_masked)
>> 
>> The script works fine and it is extracting both real values and FillValues (missing values). But, I want to extract only real values. I have seen that "ind" function can be used for extracting real values for one-dimensional array. Could you please suggest me what function I can use to extract the real values for two-dimensional array.
>> 
>> Your further suggestion will be highly appreciated.
>> 
>> Kind regards,
>> Imran
>> 
>> 
>> On Tue, Mar 14, 2017 at 6:55 PM, Guido Cioni <guidocioni at gmail.com <mailto:guidocioni at gmail.com>> wrote:
>> Hi Imran,
>> unfortunately I’m not really an expert of WRF, so I’m going to give you a general hint which may work. You should be more precise next time as generally people do not know what is LU_INDEX and what is its structure ;) 
>> 
>> I assume that you want to extract temperature, which is 3-D (time, lat, lon) using a mask array LU_INDEX which is 2-D (lat, lon). Again, if this assumption is wrong please be more specific. You have many choices, but I believe that for the sake of clarity you may want to go for an array which has the same dimensions but missing values where LU_INDEX is not 2. So you may want to do something like this:
>> 
>> T2_masked=mask(T2, LU_INDEX.ne.2, False).
>> 
>> You need to have a Missing Value attribute set for the T2 variable of course. As a result you will get an array with the same dimensions, so that it’s easier to compare with the original one, but with Missing Values where your condition is False, so that for every computation these points will not be considered. You can achieve something similar with the where function. Please have a look here (http://www.ncl.ucar.edu/Document/Functions/Built-in/mask.shtml <http://www.ncl.ucar.edu/Document/Functions/Built-in/mask.shtml>).
>> 
>> Cheers
>> 
>> 
>>> Il giorno 14 mar 2017, alle ore 04:38, Imran Hosen <hosen.imran09 at gmail.com <mailto:hosen.imran09 at gmail.com>> ha scritto:
>>> 
>>> Dear NCL users,
>>> 
>>> Good day!
>>> 
>>> I'm a new user of NCL. I want to extract temperature (T2) from wrfout file for the specific grid points where the LU_INDEX = 2.
>>> 
>>> For example,
>>> f = addfile("./wrfout.nc <http://wrfout.nc/>)
>>> T2 = f->T2(:,:,:)
>>> 
>>> It will extract temperature for whole domain for all time steps. In my case, I only want to extract temperature for all time steps but for the specific grids which grids represent LU_INDEX = 2.
>>> 
>>> Could you please suggest how to do it. I would grateful to you if anyone please share a script.
>>> 
>>> Thanks in advance.
>>> 
>>> Kind regards,
>>> Imran
>>> 
>>> _______________________________________________
>>> 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 <http://mailman.ucar.edu/mailman/listinfo/ncl-talk>
>> 
>> 
>> 
>> 
>> -- 
>> Md. Imran Hosen
>> PhD Student 
>> Victoria University
>> College of Engineering and Science
>> Footscray Park Campus
>> Victoria, Australia
>> Mob. +61470371562 <tel:+61%20470%20371%20562>
>> 
> 
> 
> 
> 
> -- 
> Md. Imran Hosen
> PhD Student 
> Victoria University
> College of Engineering and Science
> Footscray Park Campus
> Victoria, Australia
> Mob. +61470371562 <tel:+61%20470%20371%20562>
> 
> 
> 
> 
> -- 
> Md. Imran Hosen
> PhD Student 
> Victoria University
> College of Engineering and Science
> Footscray Park Campus
> Victoria, Australia
> Mob. +61470371562
> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20170315/802328fd/attachment.html 


More information about the ncl-talk mailing list