def getVertVars(self): u = wrf.unstaggerX(np.squeeze(self.readNCVariable('U'))) v = wrf.unstaggerY(np.squeeze(self.readNCVariable('V'))) w = wrf.unstaggerZ(np.squeeze(self.readNCVariable('W'))) ph = np.squeeze(self.readNCVariable('PH')) phb = np.squeeze(self.readNCVariable('PHB')) p = np.squeeze(self.readNCVariable('P')) pb = np.squeeze(self.readNCVariable('PB')) press = (p + pb) / 100. height = wrf.unstaggerZ((ph + phb) / 9.81) / 1000. return u, v, w, press, height
def shear0_6km(self): #get the height array in reference to ground level height = wrf.unstaggerZ(self.height) - wrf.unstaggerZ(self.height)[0,:,:] u = self.dataSet.readNCVariable('U') v = self.dataSet.readNCVariable('V') ref_val = 6000. # meters self.u10, self.v10, var1 = wrf.get_shear(u, v, height, ref_val) self.var = wrf.convertWind_MStoKT(var1) self.var2 = self.var self.varTitle = "0-6km Shear (knots)\n" + self.dataSet.getTime() #Set short variable title for time series self.sTitle = "0-6km Shear (knots)"
def bulk_rich(self): u = self.dataSet.readNCVariable('U') v = self.dataSet.readNCVariable('V') qv = self.dataSet.readNCVariable('QVAPOR') u_corr = wrf.unstaggerX(u) v_corr = wrf.unstaggerY(v) tv = self.temp*(1+0.611*qv) thetav = self.theta*(1+0.611*qv) height = wrf.unstaggerZ(self.height) #compute the vertical gradient of theta dtheta = np.gradient(thetav)[0] dz = np.gradient(height)[0] du = np.gradient(u_corr)[0] dv = np.gradient(v_corr)[0] print(np.min(dtheta),np.max(dtheta),np.min(dz),np.max(dz)) print(np.mean(du),np.mean(dv)) print(np.min(du),np.max(du),np.min(dv),np.max(dv)) #compute bulk richardson number self.u10 = u_corr self.v10 = v_corr self.var = ((self.g/tv)*(dtheta)*dz)/((du)**2+(dv)**2) self.var2 = self.var self.varTitle = 'Bulk Richardson number\n' + self.dataSet.getTime() #Set short variable title for time series self.sTitle = 'Bulk Richardson number'
def froude(self): u = self.dataSet.readNCVariable('U') v = self.dataSet.readNCVariable('V') u_corr = wrf.unstaggerX(u) v_corr = wrf.unstaggerY(v) self.u10 = u_corr self.v10 = v_corr wind = (u_corr*u_corr + v_corr*v_corr)**(0.5) height = wrf.unstaggerZ(self.height) #compute the vertical gradient of theta dtheta = np.gradient(self.theta)[0] dz = np.gradient(height)[0] #calculate the Brunt-Vaisala Frequency dtheta_dz = dtheta/dz dims = dtheta_dz.shape N = np.zeros((dims[0],dims[1],dims[2])) #Account for statically unstable and neutral conditions N[dtheta_dz<=0] = 0.00001 N[dtheta_dz>0] = ((self.g/self.theta[dtheta_dz>0])*(dtheta_dz[dtheta_dz>0]))**(0.5) self.var = wind/(height*N) self.var2 = self.var self.varTitle = "Froude Number\n" + self.dataSet.getTime() #Set short variable title for time series self.sTitle = "Froude Number"
def cape_MU(self): #Switched to Cython #self.var, self.var2 = wrf.get_cape(self.temp,self.qvapor, # self.press,self.height,'most_unstable') height = wrf.unstaggerZ(self.height) self.var, self.var2 = wrf_cython.cape_mu(self.temp,self.qvapor, self.press,height) self.varTitle = "Most Unstable CAPE (J kg$^{-1}$)\n"+ self.dataSet.getTime() #Set short variable title for time series self.sTitle = "Most Unstable CAPE (J kg$^{-1}$)"
def cin_ML(self): #Sitched to Cython #self.var2, self.var = wrf.get_cape(self.temp,self.qvapor, # self.press,self.height,'mixed_layer') height = wrf.unstaggerZ(self.height) self.var2, self.var = np.array(wrf_cython.cape_ml(self.temp,self.qvapor, self.press,height)) self.var *= -1 self.varTitle = "Mixed Layer CIN (J kg$^{-1}$)\n"+ self.dataSet.getTime() #Set short variable title for time series self.sTitle = "Mixed Layer CIN (J kg$^{-1}$)"
def cin_SB(self): #Switched to Cython #self.var2, self.var = wrf.get_cape(self.temp,self.qvapor, # self.press,self.height,'surface_based') height = wrf.unstaggerZ(self.height) self.var2, self.var = np.array(wrf_cython.cape_sb(self.temp,self.qvapor, self.press,height)) self.var *= -1 self.varTitle = "Surface-Based CIN (J kg$^{-1}$)\n"+ self.dataSet.getTime() #Set short variable title for time series self.sTitle = "Surface-Based CIN (J kg$^{-1}$)"
def mean_layer_temp(self): height = wrf.unstaggerZ(self.height) pblh = self.dataSet.readNCVariable('PBLH') #Calculate mean layer temperature #Switch to Cython #self.var = wrf.mean_layer(self.temp,height,0,pblh) points = pblh.shape ref1 = np.zeros((points[1],points[0]),dtype=np.float32) self.var = wrf_cython.mean_layer(self.temp,height,ref1,pblh) self.var2 = self.var self.varTitle = "Mean Layer Temperature (K) \n"+ self.dataSet.getTime() #Set short variable title for time series self.sTitle = "Mean Layer Temperature (K)"
def refl(self): if 'REFL_10CM' not in self.dataSet.variableList: qrain = self.dataSet.readNCVariable('QRAIN') qsnow = self.dataSet.readNCVariable('QSNOW') qgraup = self.dataSet.readNCVariable('QGRAUP') height = wrf.unstaggerZ(self.height) self.var = wrf.get_refl(qrain, qgraup, qsnow, self.rho, self.temp, self.height) self.var2 = self.var if 'REFL_10CM' in self.dataSet.variableList: tmp = self.dataSet.readNCVariable('REFL_10CM') if self.dataSet.dx[self.dataSet.currentGrid-1] < 12000.: #get the index 1.5-km AGL height = wrf.unstaggerZ(self.height) diff = (self.height) - (self.height[0,:,:]+1500.) zz = min(np.where(diff > 0)[0]) self.var = np.amax(tmp[0:zz,:,:], axis=0) else: self.var = np.amax(tmp,axis=0) self.var2 = self.var self.varTitle = "0-1km Simulated Radar Reflectivity (dBZ)\n" + self.dataSet.getTime() #Set short variable title for time series self.sTitle = "0-1km Simulated Radar Reflectivity (dBZ)"
def hgt_500mb(self): u = self.dataSet.readNCVariable('U') v = self.dataSet.readNCVariable('V') u_corr = wrf.unstaggerX(u) v_corr = wrf.unstaggerY(v) height = wrf.unstaggerZ(self.height) ref_val = 50000. #Switched to Cython #self.u10 = wrf.loglinear_interpolate(u_corr, self.press, ref_val) #self.v10 = wrf.loglinear_interpolate(v_corr, self.press, ref_val) self.u10 = np.array(wrf_cython.loglinear_interpolate(u_corr, self.press, ref_val)) self.v10 = np.array(wrf_cython.loglinear_interpolate(v_corr, self.press, ref_val)) #self.var = wrf.hypsometric(height,self.press, ref_val, self.temp) self.var = np.array(wrf_cython.hypsometric(height, self.press, ref_val, self.temp)) self.var2 = self.var self.varTitle = "500-mb Geopotential Height (m)\n" + self.dataSet.getTime() #Set short variable title for time series self.sTitle = "500-mb Geopotential Height (m)"
def winds_300mb(self): u = self.dataSet.readNCVariable('U') v = self.dataSet.readNCVariable('V') u_corr = wrf.unstaggerX(u) v_corr = wrf.unstaggerY(v) height = wrf.unstaggerZ(self.height) ref_val = 30000. #Switched to Cython #self.u10 = wrf.loglinear_interpolate(u_corr, self.press, ref_val) #self.v10 = wrf.loglinear_interpolate(v_corr, self.press, ref_val) self.u10 = np.array(wrf_cython.loglinear_interpolate(u_corr, self.press, ref_val)) self.v10 = np.array(wrf_cython.loglinear_interpolate(v_corr, self.press, ref_val)) var1 = wrf.get_bulk_wind(self.u10,self.v10) self.var = wrf.convertWind_MStoKT(var1) #self.var2 = wrf.hypsometric(height, self.press, ref_val, self.temp) self.var2 = np.array(wrf_cython.hypsometric(height, self.press, ref_val, self.temp)) self.varTitle = "300-mb Wind\n" + self.dataSet.getTime() #Set short variable title for time series self.sTitle = "300-mb Wind"
def richardson(self): u = self.dataSet.readNCVariable('U') v = self.dataSet.readNCVariable('V') u_corr = wrf.unstaggerX(u) v_corr = wrf.unstaggerY(v) wind = (u_corr*u_corr + v_corr*v_corr)**(0.5) height = wrf.unstaggerZ(self.height) #compute the vertical gradient of theta dtheta = np.gradient(self.theta)[0] du = np.gradient(wind)[0] dz = np.gradient(height)[0] #compute the richardson number self.u10 = u_corr self.v10 = v_corr self.var = ((self.g/self.theta)*(dtheta/dz))/(du/dz)**(2) self.var2 = self.var self.varTitle = "Richardson Number\n" + self.dataSet.getTime() #Set short variable title for time series self.sTitle = "Richardson Number"
def temp_500mb(self): u = self.dataSet.readNCVariable('U') v = self.dataSet.readNCVariable('V') u_corr = wrf.unstaggerX(u) v_corr = wrf.unstaggerY(v) height = wrf.unstaggerZ(self.height) ref_val = 50000. #Switched to Cython #var1 = wrf.loglinear_interpolate(self.temp, self.press, ref_val) #self.u10 = wrf.loglinear_interpolate(u_corr, self.press, ref_val) #self.v10 = wrf.loglinear_interpolate(v_corr, self.press, ref_val) var1 = np.array(wrf_cython.loglinear_interpolate(self.temp, self.press, ref_val)) self.u10 = np.array(wrf_cython.loglinear_interpolate(u_corr, self.press, ref_val)) self.v10 = np.array(wrf_cython.loglinear_interpolate(v_corr, self.press, ref_val)) self.var = wrf.convertT_KtoC(var1) #self.var2 = wrf.hypsometric(height, self.press, ref_val, self.temp) self.var2 = np.array(wrf_cython.hypsometric(height, self.press, ref_val, self.temp)) self.varTitle = "500-mb Temperature ($^{\circ}$C)\n" + self.dataSet.getTime() #Set short variable title for time series self.sTitle = "500-mb Temperature ($^{\circ}$C)"
def vort_500mb(self): u = self.dataSet.readNCVariable('U') v = self.dataSet.readNCVariable('V') u_corr = wrf.unstaggerX(u) v_corr = wrf.unstaggerY(v) height = wrf.unstaggerZ(self.height) ref_val = 50000. #Switched to Cython #self.u10 = wrf.loglinear_interpolate(u_corr, self.press, ref_val) #self.v10 = wrf.loglinear_interpolate(v_corr, self.press, ref_val) self.u10 = np.array(wrf_cython.loglinear_interpolate(u_corr, self.press, ref_val)) self.v10 = np.array(wrf_cython.loglinear_interpolate(v_corr, self.press, ref_val)) self.var = wrf.rel_vort(self.u10, self.v10, self.dataSet.dx[self.dataSet.currentGrid-1], self.dataSet.dy[self.dataSet.currentGrid-1]) #self.var2 = wrf.hypsometric(height, self.press, ref_val, self.temp) self.var2 = np.array(wrf_cython.hypsometric(height, self.press, ref_val, self.temp)) self.varTitle = "500-mb Relative Vorticity ($10^{-5}$ $s^{-1}$)\n" +\ self.dataSet.getTime() #Set short variable title for time series self.sTitle = "500-mb Relative Vorticity ($10^{-5}$ $s^{-1}$)"