; Jatin - get wrf grid 2 output ppt, tmax and tmin from 4 seasons load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRFUserARW.ncl" begin ;-------------- Inputs ----------------------------------------------------------- ;Define season start and end dates start_DJF = "2009-11-30_01:00:00" end_DJF = "2010-02-28_01:00:00" start_MAM = "2010-02-28_01:00:00" end_MAM = "2010-05-31_01:00:00" start_JJA = "2010-05-31_01:00:00" end_JJA = "2010-08-31_01:00:00" start_SON = "2010-08-31_01:00:00" end_SON = "2010-11-30_01:00:00" filo = "GRID2-OUT/WRF_OUT.nc" ;------------------------------------------------------------------------------- ;--------get list of files and index of start and end dates ------------------- list_of_files = systemfunc("ls wrfout_d02*") do i = 0,dimsizes(list_of_files)-1,1 s_DJF = isStrSubset(list_of_files(i),start_DJF) e_DJF = isStrSubset(list_of_files(i),end_DJF) s_MAM = isStrSubset(list_of_files(i),start_MAM) e_MAM = isStrSubset(list_of_files(i),end_MAM) s_JJA = isStrSubset(list_of_files(i),start_JJA) e_JJA = isStrSubset(list_of_files(i),end_JJA) s_SON = isStrSubset(list_of_files(i),start_SON) e_SON = isStrSubset(list_of_files(i),end_SON) if (s_DJF .eq.1) ind_s_DJF = i end if if (e_DJF .eq.1) ind_e_DJF = i end if if (s_MAM .eq. 1) ind_s_MAM = i end if if (e_MAM .eq. 1) ind_e_MAM = i end if if (s_JJA .eq. 1) ind_s_JJA = i end if if (e_JJA .eq. 1) ind_e_JJA = i end if if (s_SON .eq. 1) ind_s_SON = i end if if (e_SON .eq. 1) ind_e_SON = i end if end do print(list_of_files(ind_s_DJF)) print(list_of_files(ind_e_DJF)) print(list_of_files(ind_s_MAM)) print(list_of_files(ind_e_MAM)) print(list_of_files(ind_s_JJA)) print(list_of_files(ind_e_JJA)) print(list_of_files(ind_s_SON)) print(list_of_files(ind_e_SON)) ;------------ Now get WRF ppt for 4 seasons ------------------------------------------------------------ ;-note that WRF outputs accumulated ppt, so only need to take difference from start and end dates ;DJF open_wrf_start_DJF = addfile(list_of_files(ind_s_DJF) + ".nc","r") wrf_start_DJF_exp = wrf_user_getvar(open_wrf_start_DJF,"RAINNC",0) wrf_start_DJF_con = wrf_user_getvar(open_wrf_start_DJF,"RAINC",0) wrf_start_DJF_tot = wrf_start_DJF_exp + wrf_start_DJF_con delete(open_wrf_start_DJF) delete(wrf_start_DJF_con) delete(wrf_start_DJF_exp) open_wrf_end_DJF = addfile(list_of_files(ind_e_DJF) + ".nc","r") wrf_end_DJF_exp = wrf_user_getvar(open_wrf_end_DJF,"RAINNC",0) wrf_end_DJF_con = wrf_user_getvar(open_wrf_end_DJF,"RAINC",0) wrf_end_DJF_tot = wrf_end_DJF_exp + wrf_end_DJF_con delete(open_wrf_end_DJF) delete(wrf_end_DJF_con) delete(wrf_end_DJF_exp) wrf_DJF_ppt = wrf_end_DJF_tot - wrf_start_DJF_tot delete(wrf_end_DJF_tot) delete(wrf_start_DJF_tot) ;MAM open_wrf_start_MAM = addfile(list_of_files(ind_s_MAM) + ".nc","r") wrf_start_MAM_exp = wrf_user_getvar(open_wrf_start_MAM,"RAINNC",0) wrf_start_MAM_con = wrf_user_getvar(open_wrf_start_MAM,"RAINC",0) wrf_start_MAM_tot = wrf_start_MAM_exp + wrf_start_MAM_con delete(open_wrf_start_MAM) delete(wrf_start_MAM_con) delete(wrf_start_MAM_exp) open_wrf_end_MAM = addfile(list_of_files(ind_e_MAM) + ".nc","r") wrf_end_MAM_exp = wrf_user_getvar(open_wrf_end_MAM,"RAINNC",0) wrf_end_MAM_con = wrf_user_getvar(open_wrf_end_MAM,"RAINC",0) wrf_end_MAM_tot = wrf_end_MAM_exp + wrf_end_MAM_con delete(open_wrf_end_MAM) delete(wrf_end_MAM_con) delete(wrf_end_MAM_exp) wrf_MAM_ppt = wrf_end_MAM_tot - wrf_start_MAM_tot delete(wrf_end_MAM_tot) delete(wrf_start_MAM_tot) ;JJA open_wrf_start_JJA = addfile(list_of_files(ind_s_JJA) + ".nc","r") wrf_start_JJA_exp = wrf_user_getvar(open_wrf_start_JJA,"RAINNC",0) wrf_start_JJA_con = wrf_user_getvar(open_wrf_start_JJA,"RAINC",0) wrf_start_JJA_tot = wrf_start_JJA_exp + wrf_start_JJA_con delete(open_wrf_start_JJA) delete(wrf_start_JJA_con) delete(wrf_start_JJA_exp) open_wrf_end_JJA = addfile(list_of_files(ind_e_JJA) + ".nc","r") wrf_end_JJA_exp = wrf_user_getvar(open_wrf_end_JJA,"RAINNC",0) wrf_end_JJA_con = wrf_user_getvar(open_wrf_end_JJA,"RAINC",0) wrf_end_JJA_tot = wrf_end_JJA_exp + wrf_end_JJA_con delete(open_wrf_end_JJA) delete(wrf_end_JJA_con) delete(wrf_end_JJA_exp) wrf_JJA_ppt = wrf_end_JJA_tot - wrf_start_JJA_tot delete(wrf_end_JJA_tot) delete(wrf_start_JJA_tot) ;SON open_wrf_start_SON = addfile(list_of_files(ind_s_SON) + ".nc","r") wrf_start_SON_exp = wrf_user_getvar(open_wrf_start_SON,"RAINNC",0) wrf_start_SON_con = wrf_user_getvar(open_wrf_start_SON,"RAINC",0) wrf_start_SON_tot = wrf_start_SON_exp + wrf_start_SON_con delete(open_wrf_start_SON) delete(wrf_start_SON_con) delete(wrf_start_SON_exp) open_wrf_end_SON = addfile(list_of_files(ind_e_SON) + ".nc","r") wrf_end_SON_exp = wrf_user_getvar(open_wrf_end_SON,"RAINNC",0) wrf_end_SON_con = wrf_user_getvar(open_wrf_end_SON,"RAINC",0) wrf_end_SON_tot = wrf_end_SON_exp + wrf_end_SON_con delete(open_wrf_end_SON) delete(wrf_end_SON_con) delete(wrf_end_SON_exp) wrf_SON_ppt = wrf_end_SON_tot - wrf_start_SON_tot delete(wrf_end_SON_tot) delete(wrf_start_SON_tot) ;--- now get WRF max and min temps --------------------------------- ;DJF ; get all hourly temps and put in array wrf_size_array_DJF = dimsizes(wrf_DJF_ppt) wrf_DJF_temps = new((/(ind_e_DJF-ind_s_DJF+1),wrf_size_array_DJF(0),wrf_size_array_DJF(1)/),"float") counter = 0; do i = ind_s_DJF,ind_e_DJF,1 open_wrf_DJF_temps = addfile(list_of_files(i) + ".nc","r") wrf_DJF_temps(counter,:,:) = wrf_user_getvar(open_wrf_DJF_temps,"T2",0) counter = counter + 1 delete(open_wrf_DJF_temps) end do ; loop through every 24 hours and extract max and min temps size_temp_array_DJF = dimsizes(wrf_DJF_temps) hour_index_start_DJF = ispan(0,(size_temp_array_DJF(0)-25),24) hour_index_end_DJF = ispan(24,(size_temp_array_DJF(0)-1),24) ; pre-allocate max and min temp arrays all_max_temps_DJF = new((/dimsizes(hour_index_start_DJF),wrf_size_array_DJF(0),wrf_size_array_DJF(1)/),float) all_min_temps_DJF = new((/dimsizes(hour_index_start_DJF),wrf_size_array_DJF(0),wrf_size_array_DJF(1)/),float) do i = 0,dimsizes(hour_index_start_DJF)-1,1 int_24_temps = wrf_DJF_temps(hour_index_start_DJF(i):hour_index_end_DJF(i),:,:) wrf_max_temps = dim_max_n(int_24_temps,0) wrf_min_temps = dim_min_n(int_24_temps,0) all_max_temps_DJF(i,:,:) = wrf_max_temps all_min_temps_DJF(i,:,:) = wrf_min_temps delete(int_24_temps) delete(wrf_max_temps) delete(wrf_min_temps) end do delete(wrf_DJF_temps) ; take mean all_mean_tmax_DJF = dim_avg_n(all_max_temps_DJF,0) all_mean_tmin_DJF = dim_avg_n(all_min_temps_DJF,0) delete(all_max_temps_DJF) delete(all_min_temps_DJF) delete(wrf_size_array_DJF) delete(size_temp_array_DJF) delete(hour_index_start_DJF) delete(hour_index_end_DJF) ;MAM ; get all hourly temps and put in array wrf_size_array_MAM = dimsizes(wrf_MAM_ppt) wrf_MAM_temps = new((/(ind_e_MAM-ind_s_MAM+1),wrf_size_array_MAM(0),wrf_size_array_MAM(1)/),"float") counter = 0; do i = ind_s_MAM,ind_e_MAM,1 open_wrf_MAM_temps = addfile(list_of_files(i) + ".nc","r") wrf_MAM_temps(counter,:,:) = wrf_user_getvar(open_wrf_MAM_temps,"T2",0) counter = counter + 1 delete(open_wrf_MAM_temps) end do ; loop through every 24 hours and extract max and min temps size_temp_array_MAM = dimsizes(wrf_MAM_temps) hour_index_start_MAM = ispan(0,(size_temp_array_MAM(0)-25),24) hour_index_end_MAM = ispan(24,(size_temp_array_MAM(0)-1),24) ; pre-allocate max and min temp arrays all_max_temps_MAM = new((/dimsizes(hour_index_start_MAM),wrf_size_array_MAM(0),wrf_size_array_MAM(1)/),float) all_min_temps_MAM = new((/dimsizes(hour_index_start_MAM),wrf_size_array_MAM(0),wrf_size_array_MAM(1)/),float) do i = 0,dimsizes(hour_index_start_MAM)-1,1 int_24_temps = wrf_MAM_temps(hour_index_start_MAM(i):hour_index_end_MAM(i),:,:) wrf_max_temps = dim_max_n(int_24_temps,0) wrf_min_temps = dim_min_n(int_24_temps,0) all_max_temps_MAM(i,:,:) = wrf_max_temps all_min_temps_MAM(i,:,:) = wrf_min_temps delete(int_24_temps) delete(wrf_max_temps) delete(wrf_min_temps) end do delete(wrf_MAM_temps) ; take mean all_mean_tmax_MAM = dim_avg_n(all_max_temps_MAM,0) all_mean_tmin_MAM = dim_avg_n(all_min_temps_MAM,0) delete(all_max_temps_MAM) delete(all_min_temps_MAM) delete(wrf_size_array_MAM) delete(size_temp_array_MAM) delete(hour_index_start_MAM) delete(hour_index_end_MAM) ;JJA ; get all hourly temps and put in array wrf_size_array_JJA = dimsizes(wrf_JJA_ppt) wrf_JJA_temps = new((/(ind_e_JJA-ind_s_JJA+1),wrf_size_array_JJA(0),wrf_size_array_JJA(1)/),"float") counter = 0; do i = ind_s_JJA,ind_e_JJA,1 open_wrf_JJA_temps = addfile(list_of_files(i) + ".nc","r") wrf_JJA_temps(counter,:,:) = wrf_user_getvar(open_wrf_JJA_temps,"T2",0) counter = counter + 1 delete(open_wrf_JJA_temps) end do ; loop through every 24 hours and extract max and min temps size_temp_array_JJA = dimsizes(wrf_JJA_temps) hour_index_start_JJA = ispan(0,(size_temp_array_JJA(0)-25),24) hour_index_end_JJA = ispan(24,(size_temp_array_JJA(0)-1),24) ; pre-allocate max and min temp arrays all_max_temps_JJA = new((/dimsizes(hour_index_start_JJA),wrf_size_array_JJA(0),wrf_size_array_JJA(1)/),float) all_min_temps_JJA = new((/dimsizes(hour_index_start_JJA),wrf_size_array_JJA(0),wrf_size_array_JJA(1)/),float) do i = 0,dimsizes(hour_index_start_JJA)-1,1 int_24_temps = wrf_JJA_temps(hour_index_start_JJA(i):hour_index_end_JJA(i),:,:) wrf_max_temps = dim_max_n(int_24_temps,0) wrf_min_temps = dim_min_n(int_24_temps,0) all_max_temps_JJA(i,:,:) = wrf_max_temps all_min_temps_JJA(i,:,:) = wrf_min_temps delete(int_24_temps) delete(wrf_max_temps) delete(wrf_min_temps) end do delete(wrf_JJA_temps) ; take mean all_mean_tmax_JJA = dim_avg_n(all_max_temps_JJA,0) all_mean_tmin_JJA = dim_avg_n(all_min_temps_JJA,0) delete(all_max_temps_JJA) delete(all_min_temps_JJA) delete(wrf_size_array_JJA) delete(size_temp_array_JJA) delete(hour_index_start_JJA) delete(hour_index_end_JJA) ;SON ; get all hourly temps and put in array wrf_size_array_SON = dimsizes(wrf_SON_ppt) wrf_SON_temps = new((/(ind_e_SON-ind_s_SON+1),wrf_size_array_SON(0),wrf_size_array_SON(1)/),"float") counter = 0; do i = ind_s_SON,ind_e_SON,1 open_wrf_SON_temps = addfile(list_of_files(i) + ".nc","r") wrf_SON_temps(counter,:,:) = wrf_user_getvar(open_wrf_SON_temps,"T2",0) counter = counter + 1 delete(open_wrf_SON_temps) end do ; loop through every 24 hours and extract max and min temps size_temp_array_SON = dimsizes(wrf_SON_temps) hour_index_start_SON = ispan(0,(size_temp_array_SON(0)-25),24) hour_index_end_SON = ispan(24,(size_temp_array_SON(0)-1),24) ; pre-allocate max and min temp arrays all_max_temps_SON = new((/dimsizes(hour_index_start_SON),wrf_size_array_SON(0),wrf_size_array_SON(1)/),float) all_min_temps_SON = new((/dimsizes(hour_index_start_SON),wrf_size_array_SON(0),wrf_size_array_SON(1)/),float) do i = 0,dimsizes(hour_index_start_SON)-1,1 int_24_temps = wrf_SON_temps(hour_index_start_SON(i):hour_index_end_SON(i),:,:) wrf_max_temps = dim_max_n(int_24_temps,0) wrf_min_temps = dim_min_n(int_24_temps,0) all_max_temps_SON(i,:,:) = wrf_max_temps all_min_temps_SON(i,:,:) = wrf_min_temps delete(int_24_temps) delete(wrf_max_temps) delete(wrf_min_temps) end do delete(wrf_SON_temps) ; take mean all_mean_tmax_SON = dim_avg_n(all_max_temps_SON,0) all_mean_tmin_SON = dim_avg_n(all_min_temps_SON,0) delete(all_max_temps_SON) delete(all_min_temps_SON) delete(wrf_size_array_SON) delete(size_temp_array_SON) delete(hour_index_start_SON) delete(hour_index_end_SON) ;---------get lat lon grids------------------- open_file_ll = addfile(list_of_files(0) + ".nc","r") wrf_lat2d = open_file_ll->XLAT(0,:,:) wrf_lon2d = open_file_ll->XLONG(0,:,:) ;---- write to a netcdf file to plot later on --------- system("/bin/rm -f " + filo) fout = addfile(filo,"c") fout->wrf_lat2d = (/wrf_lat2d/) fout->wrf_lon2d = (/wrf_lon2d/) fout->wrf_DJF_ppt = (/wrf_DJF_ppt/) fout->wrf_MAM_ppt = (/wrf_MAM_ppt/) fout->wrf_JJA_ppt = (/wrf_JJA_ppt/) fout->wrf_SON_ppt = (/wrf_SON_ppt/) fout->wrf_DJF_tmax = (/all_mean_tmax_DJF/) fout->wrf_DJF_tmin = (/all_mean_tmin_DJF/) fout->wrf_MAM_tmax = (/all_mean_tmax_MAM/) fout->wrf_MAM_tmin = (/all_mean_tmin_MAM/) fout->wrf_JJA_tmax = (/all_mean_tmax_JJA/) fout->wrf_JJA_tmin = (/all_mean_tmin_JJA/) fout->wrf_SON_tmax = (/all_mean_tmax_SON/) fout->wrf_SON_tmin = (/all_mean_tmin_SON/) end