;== test onset ; ss= rainfall TS ; Thres = Rainfall Total Threshold mm/day (20mm) ; Nrain = over # of days (3 days) ; Ndry = # of consecutive dry days following the onset aka true (10dys) ; rain= threshold for rainyday (1mm) ;================= ; remove one day because of NCL indxing undef("onset4") function onset4(ss:float,Thres:float,Nrain:integer,Ndry:integer,rain:float) local i0,i1,i,j,nn,ss1,ss2,ss3,ss33,in_days,ii,donset begin donset=(/-999.,-999./) ;==== TESTING ;Thres=20. ;Nrain=3 ;Ndry=5 ;rain=1. ;ss=asciiread("tt1.csv",-1,"float") nn=dimsizes(ss) ss1=new(nn+Nrain-1+Ndry,float) ;# 3 days total ss1=0.0 ss1(Nrain-1:nn+(Nrain-2))=ss ss2=new(dimsizes(ss1),float) ss3=new(dimsizes(ss1),float) ss33=new((/Ndry/),float) in_days=ind(ss1 .gt. rain) ; assuming at least one rainy day ;==CASE OF NO RAIN AT ALL if (any(ismissing(in_days))) then return(donset) ; no rainy days end if j=0 do i=0,dimsizes(in_days)-1 ;assuming j=in_days(i) ss2(j)=sum(ss1(j-(Nrain-1):j:-1)) ; 3 days sum ss33(0:Ndry-1)=ss1(j+1:j+Ndry) ss3(j)=num( ss33 .eq. 0.) ; # dry days ; print("i="+i+" J="+j+" Tot3="+ss2(j)+" CCDry5="+ss3(j)) end do i0=ind(ss2 .gt. Thres) i1=ind((ss2 .gt. Thres) .AND. (ss3 .lt. Ndry)) ;==CASE OF TRUE ONSET if (any( .not. ismissing(i1))) then donset(0)=i0(0) donset(1)=i1(0) return(donset) end if ;===CASE OF FALSE ONSET ONLY if (any( .not. ismissing(i0))) then donset(0)=i0(0) return(donset) end if ;== CASE OF RAIN BUT NOT AN ONSET return(donset) end