Re: diurnal cycle over a subregion

From: <jimmyc_at_nyahnyahspammersnyahnyah>
Date: Fri, 14 Dec 2007 12:57:59 -0600 (CST)

Sorry I should have been clearer:

My file has 744 time steps (31 days times 24 hours).
So the n=n+1 statement was to try to relate the time step to the hour.
Perhaps this changes the code you provided.

Thanks for taking a look at this issue.
jimmyc

On
Fri, 14 Dec 2007, Dennis Shea wrote:

> Some approaches that might help.
> Caveat: I have not really looked at this in detail.
> I'm not sure how days fits into this.
>
> I always suggest using variables for subscripts. I makes changing regions
> easier.
>
> iyStrt = 71
> iyLast = 92
> ixStrt = 43
> ixLast = 61
>
> RAIN = rain(iyStrt:iyLast, ixStrt:ixLast) ; subset and copy meta data
> RAIN = where(RAIN.gt.0, RAIN, RAIN@_FillValue)
> nRAIN = num( .not. ismissing(RAIN) ) ; total number of rain events in
> region
> nDAYS = 31
> nHR = 8
> rdc = new( nHR, typeof(RAIN) , RAIN@_FillValue)
> cnt = new( nHR, "integer", -999)
>
> rdc = 0.0
> cnt = 0.0
>
> n = 0
> do days=0,nDAYS-1
> do hr=0,nHR-1
> n=n+1
> rdc(hr) = sum( RAIN(:,:,hr) ) + rdc(hr)
> cnt(hr) = num( .not.ismissing( RAIN(:,:,hr) ) ) ) cnt(hr)
> end do
> end do
>
>
> Please note that the dim_cumsum function could possibly be used
>
> http://www.ncl.ucar.edu/Document/Functions/Built-in/dim_cumsum.shtml
>
>
>
> Mary Haley wrote:
>> On Wed, 12 Dec 2007 jimmyc_at_iastate.edu wrote:
>>
>>> All I have a 3 dimensional array (i,j,time) of 3-hrly rain rate and want to
>>> compute the diurnal cycle.
>>>
>>> I attempted to do a loop like this
>>> n=0
>>> do days=0,30
>>> do hr=0,7
>>> n=n+1
>>> do ix=43,61
>>> do iy=71,92
>>> if(rain(iy,ix,hr) .gt. 0.0000)then
>>> rdc(hr) = rain(iy,ix,hr) + rdc(hr)
>>> cnt(hr) = cnt(hr) + 1
>>> end if
>>> end do
>>> end do
>>> end do
>>> end do
>>
>> All,
>>
>> James figured out the problem using WRAPIT and Fortran code, but I just
>> wanted to point out that you usually can avoid nested loops like this,
>> by using NCL's array syntax, and the "ind" or "where" functions.
>>
>> For example, the above loop can be partially improved by
>> removing the "hr" loop. (BTW, I'm not sure what the "days" loop
>> is doing here, because "days" is not referenced by anybody,
>> so it appears that the exact same calculations are being
>> done 31 times).
>>
>> Anyway, here's a slight (untested) code change that would help:
>>
>> do days=0,30
>> n=n+1
>> do ix=43,61
>> do iy=71,92
>> ihr = ind(rain(iy,ix,:).gt.0.0000)
>> if(.not.any(ismissing(ihr))) then
>> rdc(ihr) = rain(iy,ix,ihr) + rdc(ihr)
>> cnt(ihr) = cnt(ihr) + 1
>> end if
>> delete(ihr) ; necessary as it may be different size next time
>> end do
>> end do
>> end do
>>
>>
>> --Mary
>>
>>> Now the code gets into the if block but the value of rdc is the _FillValue
>>> of -999 . So, the documentation states that when asigning one variable to
>>> another they need to be the same shape. Is there a way to do the sum either
>>> more simply than with loops or am I stuck in Fortran language techniques?
>>>
>>> I do define the rdc,cnt,rain arrays prior to the loop.
>>> And I can printVarSummary all of them, just no values accumulate in the rdc
>>> array.
>>>
>>> Thanks for your time.
>>>
>>> --
>>> James Correia, Jr. PhD.
>>> Email: jimmyc @ iastate.edu
>>> Email: jimmyc42 @ gmail.com
>>> Web: http://bruce.agron.iastate.edu/jimmyc/
>>> *********************************************
>
>

-- 
James Correia, Jr. PhD.
Email: jimmyc @ iastate.edu
Email: jimmyc42 @ gmail.com
Web: http://bruce.agron.iastate.edu/jimmyc/
*********************************************
"Wisdom. Strength. Courage. Generosity. Each of us are born with one of
these. We must find the other three inside of us."
from "Into the West"
_______________________________________________
ncl-talk mailing list
ncl-talk_at_ucar.edu
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
Received on Fri Dec 14 2007 - 11:57:59 MST

This archive was generated by hypermail 2.2.0 : Mon Dec 17 2007 - 08:25:02 MST