def simple_reco(ber,gp, lvl): #load data Re=6371.0*1000.0 rad_at_radar=Re*sin(pi/2.0 -abs(gp['zero_loc'][0]*pi/180.0))#ax_radius(float(lat_cpol), units='degrees') lons=gp['zero_loc'][1]+360.0*gp['xar']/(rad_at_radar*2.0*pi) lats=gp['zero_loc'][0] + 360.0*gp['yar']/(Re*2.0*pi) ber_loc=[-12.457, 130.925] gp_loc= [-12.2492, 131.0444] angs=array(propigation.make_lobe_grid(ber_loc, gp_loc, lats,lons)) wts_ang=zeros(angs.shape, dtype=float) for i in range(angs.shape[0]): for j in range(angs.shape[1]): if (angs[i,j] < 150.0) and (angs[i,j] > 30.0): wts_ang[i,j]=1.0 #create a weighting grid mask_reflect=10.0#dBZ mask=(gp['CZ'][:,:,lvl]/mask_reflect).round().clip(min=0., max=1.0) mask_vel_ber=(ber['VR'][:,:,lvl]+100.).clip(min=0., max=1.) #run gracon print 'Into fortran' nx,ny=ber['CZ'][:,:,lvl].shape f=0.0 gv_u=zeros(ber['CZ'][:,:,lvl].shape, dtype=float) gv_v=zeros(ber['CZ'][:,:,lvl].shape, dtype=float) igu=ones(ber['CZ'][:,:,lvl].shape, dtype=float)*0.0 igv=ones(ber['CZ'][:,:,lvl].shape, dtype=float)*0.0 gv_u,gv_v,f,u_array,v_array = gracon_vel2d.gracon_vel2d(gv_u,gv_v,f,igu,igv,ber['i_comp'][:,:,lvl],ber['j_comp'][:,:,lvl],gp['i_comp'][:,:,lvl],gp['j_comp'][:,:,lvl], ber['VR'][:,:,lvl],gp['VR'][:,:,lvl],mask*mask_vel_ber*wts_ang, nx=nx,ny=ny) Re=6371.0*1000.0 print gracon_vel2d.vel_2d_cost(gv_u*0.0,gv_v*0.0,0.0,u_array,v_array,ber['i_comp'][:,:,lvl], ber['j_comp'][:,:,lvl], gp['i_comp'][:,:,lvl], gp['j_comp'][:,:,lvl], ber['VR'][:,:,lvl], gp['VR'][:,:,lvl],mask*mask_vel_ber*wts_ang)[2] return u_array, v_array, mask*mask_vel_ber*wts_ang
def test_gracon(): #setup noise_level=0.0#m/s nx=40 ny=40 fw=0.1 m_bump=10.00 t0=systime() lats=linspace(-13.5, -12.0, 40) lons=linspace(130.5, 131.5, 40) ber_loc=[-12.4, 130.85] #location of Berrimah radar gp_loc=[-12.2492, 131.0444]#location of CPOL at Gunn Point h=2.5*1000.0 print 'calculating berimah UV', systime()-t0 i_ber, j_ber, k_ber=propigation.unit_vector_grid(lats, lons, h, ber_loc) print 'calculating gp UV', systime()-t0 i_gp, j_gp, k_gp=propigation.unit_vector_grid(lats, lons, h, gp_loc) #make winds u,v=simul_winds.unif_wind(lats, lons, 10.0, 75.0) up,vp=array(simul_winds.vortex(lats, lons, [-12.5, 131.1], fw))*m_bump #make V_r measurements vr_ber=i_ber*(up+u)+j_ber*(vp+v) + (random.random([nx,ny])-0.5)*(noise_level*2.0) vr_gp=i_gp*(up+u)+j_gp*(vp+v)+ (random.random([nx,ny])-0.5)*(noise_level*2.0) #try to reconstruct the wind field igu, igv= simul_winds.unif_wind(lats, lons, 0.0, 90.0) gv_u=zeros(u.shape) gv_v=zeros(v.shape) f=0.0 print igu.mean() angs=array(propigation.make_lobe_grid(ber_loc, gp_loc, lats,lons)) wts=zeros(angs.shape, dtype=float)+1.0 #for i in range(angs.shape[0]): # for j in range(angs.shape[1]): # if (angs[i,j] < 150.0) and (angs[i,j] > 30.0): wts[i,j]=1.0 print 'Into fortran' gv_u,gv_v,f,u_array,v_array = gracon_vel2d.gracon_vel2d(gv_u,gv_v,f,igu,igv,i_ber,j_ber,i_gp,j_gp,vr_ber,vr_gp,wts, nx=nx,ny=ny) print u_array.mean() print f bnds=[0.,20.] f=figure() mapobj=pres.generate_darwin_plot() pres.quiver_contour_winds(mapobj, lats, lons, (up+u),(vp+v), bounds=bnds) savefig(os.getenv('HOME')+'/bom_mds/output/orig_winds_clean.png') close(f) f=figure() mapobj=pres.generate_darwin_plot() pres.quiver_contour_winds(mapobj, lats, lons, (wts*u_array +0.001),(wts*v_array +0.001), bounds=bnds) savefig(os.getenv('HOME')+'/bom_mds/output/recon_winds_clean.png') close(f) f=figure() mapobj=pres.generate_darwin_plot() pres.quiver_contour_winds(mapobj, lats, lons, (wts*u_array - (up+u)),(wts*v_array -(vp+v))) savefig(os.getenv('HOME')+'/bom_mds/output/errors_clean.png') close(f)
def simple_reconstruction(tim, lvl_str): #load data srm=array([15.0, 5.0])/sqrt(2.0) ber, gp=netcdf_utis.load_cube('/bm/gdata/scollis/cube_data/20060122_'+tim+'_ver1.nc') lvl=int(lvl_str) print gp['levs'][lvl] Re=6371.0*1000.0 rad_at_radar=Re*sin(pi/2.0 -abs(gp['zero_loc'][0]*pi/180.0))#ax_radius(float(lat_cpol), units='degrees') lons=gp['zero_loc'][1]+360.0*gp['xar']/(rad_at_radar*2.0*pi) lats=gp['zero_loc'][0] + 360.0*gp['yar']/(Re*2.0*pi) ber_loc=[-12.457, 130.925] gp_loc= [-12.2492, 131.0444] angs=array(propigation.make_lobe_grid(ber_loc, gp_loc, lats,lons)) wts_ang=zeros(angs.shape, dtype=float) for i in range(angs.shape[0]): for j in range(angs.shape[1]): if (angs[i,j] < 150.0) and (angs[i,j] > 30.0): wts_ang[i,j]=1.0 #create a weighting grid mask_reflect=10.0#dBZ mask=(gp['CZ'][:,:,lvl]/mask_reflect).round().clip(min=0., max=1.0) mask_vel_ber=(ber['VR'][:,:,lvl]+100.).clip(min=0., max=1.) #run gracon print 'Into fortran' nx,ny=ber['CZ'][:,:,lvl].shape f=0.0 gv_u=zeros(ber['CZ'][:,:,lvl].shape, dtype=float) gv_v=zeros(ber['CZ'][:,:,lvl].shape, dtype=float) igu=ones(ber['CZ'][:,:,lvl].shape, dtype=float)*srm[0] igv=ones(ber['CZ'][:,:,lvl].shape, dtype=float)*srm[1] gv_u,gv_v,f,u_array,v_array = gracon_vel2d.gracon_vel2d(gv_u,gv_v,f,igu,igv,ber['i_comp'][:,:,lvl],ber['j_comp'][:,:,lvl],gp['i_comp'][:,:,lvl],gp['j_comp'][:,:,lvl], ber['VR'][:,:,lvl],gp['VR'][:,:,lvl],mask*mask_vel_ber*wts_ang, nx=nx,ny=ny) Re=6371.0*1000.0 rad_at_radar=Re*sin(pi/2.0 -abs(gp['zero_loc'][0]*pi/180.0))#ax_radius(float(lat_cpol), units='degrees') lons=gp['zero_loc'][1]+360.0*gp['xar']/(rad_at_radar*2.0*pi) lats=gp['zero_loc'][0] + 360.0*gp['yar']/(Re*2.0*pi) wts=mask*mask_vel_ber*wts_ang f=figure() mapobj=pres.generate_darwin_plot(box=[130.8, 131.2, -12.4, -12.0]) pres.reconstruction_plot(mapobj, lats, lons, gp, lvl, 'CZ',u_array,v_array, angs, wts) #pres.quiver_contour_winds(mapobj, lats, lons, (wts*u_array).clip(min=-50, max=50),(wts*v_array).clip(min=-50, max=50)) t1='Gunn Point CAPPI (dBZ) and reconstructed winds (m/s) at %(lev)05dm \n 22/01/06 ' %{'lev':gp['levs'][lvl]} title(t1+tim) ff=os.getenv('HOME')+'/bom_mds/output/recons_22012006/real_%(lev)05d_' %{'lev':gp['levs'][lvl]} savefig(ff+tim+'_2d.png') close(f)