kuang@master/nas1/camxruns/2016_v7/outputs$cat./Annual_F2/base/bnd-in.pyfromPseudoNetCDF.camxfiles.Memmapsimportuamiv...#read the interio point indices
fname='/nas1/cmaqruns/2016base/data/land/epic_festc1.4_20180516/gridmask/TWN_CNTY_3X3.nc'...idx=np.where(var>0.)...#boundary indices
S,N,W,E=[(1,i)foriinrange(1,ncol-1)],[(nrow-2,i)foriinrange(1,ncol-1)],[(i,ncol-2)foriinrange(1,nrow-1)],[(i,ncol-2)foriinrange(1,nrow-1)]Sb,Nb=np.array(S).flatten().reshape(81,2),np.array(S).flatten().reshape(81,2)Wb,Eb=np.array(W).flatten().reshape(135,2),np.array(E).flatten().reshape(135,2)lenBC=sum([len(i)foriin[S,N,W,E]])seq='SNWE'
#the avrg files were processed by dmavrg, 8 hr daily max O3 is highlighted
v="O3eD"#initalized the dataframe
df=DataFrame({})forminrange(1,13):fname='16{:02d}baseEF3.S.grd01D'.format(m)conc=uamiv(fname,'r+')nt,nlay,nrow,ncol=(conc.variables[v].shape[i]foriinrange(4))# surface daily mean UV10 were also been prepared by dmavrg
fmet='/nas1/camxruns/2016_v7/met/16{:02d}d4.2dD'.format(m)uv10=uamiv(fmet,'r')#inward time and location indices at each boundaries
Si=np.where(uv10.variables['V10_MpSD'][:,0,Sb[:,0],Sb[:,1]]>0)Ni=np.where(uv10.variables['V10_MpSD'][:,0,Nb[:,0],Nb[:,1]]<0)Wi=np.where(uv10.variables['U10_MpSD'][:,0,Wb[:,0],Wb[:,1]]>0)Ei=np.where(uv10.variables['U10_MpSD'][:,0,Eb[:,0],Eb[:,1]]<0)bc=np.zeros(shape=(4,nt))forsinseq:o3bc=[]exec('ii='+s+'i')fortinrange(nt):iftinset(ii[0]):idxs=np.where(ii[0]==t)ifs=='S':avg=np.mean(conc.variables[v][t,0,1,Si[1][idxs[0]]])ifs=='N':avg=np.mean(conc.variables[v][t,0,nrow-2,Ni[1][idxs[0]]])ifs=='W':avg=np.mean(conc.variables[v][t,0,Wi[1][idxs[0]],1])ifs=='E':avg=np.mean(conc.variables[v][t,0,Ei[1][idxs[0]],ncol-2])o3bc.append(avg)else:o3bc.append(0.)js=seq.index(s)bc[js,:]=np.array(o3bc)
計算島內最大lenBC值
逐時進行島內值之排序、篩選最大432個值、進行平均、儲存成序列o3in
將當月逐時結果儲存在資料表df中
#sort the max. 400 pts among interio points and take mean
o3in=[]fortinrange(nt):a=list(conc.variables[v][t,0,idx[0],idx[1]])a.sort()o3in.append(np.mean(a[-lenBC:]))DD={'JDATE':np.array(conc.variables['TFLAG'][:,0,0]),'o3in':o3in}forsinseq:js=seq.index(s)DD.update({s:bc[js,:]})df=df.append(DataFrame(DD),ignore_index=True)