Пример #1
0
    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"
Пример #2
0
    def readNCVariable(self,
                       vname,
                       barbs=None,
                       vectors=None,
                       contour2=None,
                       varonly=False):
        variable = self.dsets[vname][self.currentTimeIndex]
        if varonly == False:
            if (hasattr(self.dsets[vname], 'description')):
                self.description = self.dsets[vname].description
            if (hasattr(self.dsets[vname], 'units')):
                self.units = self.dsets[vname].units
            if vname != 'Times':
                if len(self.dsets[vname].dimensions) == 4:
                    if len(self.dsets[vname].shape) >= 3:
                        tmp = np.arange(1, self.nz[self.currentGrid - 1] + 1,
                                        1)
                        self.levelList = ["%2d" % x for x in tmp]
                    else:
                        tmp = [1]
                        self.levelList = ["%2d" % x for x in tmp]
                else:
                    self.levelList = ['NA']

        if barbs == True or vectors == True:
            if len(self.dsets[vname].shape) == 4:
                tmp = self.dsets['U'][self.currentTimeIndex]
                self.u10 = wrf.unstaggerX(tmp)
                tmp = self.dsets['V'][self.currentTimeIndex]
                self.v10 = wrf.unstaggerY(tmp)
            else:
                self.u10 = self.dsets['U10'][self.currentTimeIndex]
                self.v10 = self.dsets['V10'][self.currentTimeIndex]

        return variable
Пример #3
0
    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'
Пример #4
0
    def getVertVars(self):
        u = wrf.unstaggerX(np.squeeze(self.readNCVariable('UU')))
        v = wrf.unstaggerY(np.squeeze(self.readNCVariable('VV')))
        height = np.squeeze(self.readNCVariable('GHT')) / 1000.
        press = np.squeeze(self.readNCVariable('PRES')) / 100.
        w = None

        return u, v, w, press, height
Пример #5
0
    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
Пример #6
0
 def theta_e(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
     self.var = wrf.get_thetae(self.temp,self.qvapor,self.press)
     self.var2 = self.var
     self.varTitle = "$\mathsf{\Theta_{e}\, (K)}$\n"+ self.dataSet.getTime()
     #Set short variable title for time series
     self.sTitle = "$\mathsf{\Theta_{e}\, (K)}$"
Пример #7
0
    def temp_3d(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
        self.var = self.temp
        self.var2 = self.var
        self.varTitle = "Temperature (K)\n"+ self.dataSet.getTime()
        #Set short variable title for time series
        self.sTitle = "Temperature (K)"
Пример #8
0
 def cloud_water(self):
     
     #3D cloud water --> qcloud, qrain
     qcloud = self.dataSet.readNCVariable('QCLOUD')
     qrain = self.dataSet.readNCVariable('QRAIN')
     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
     self.var = qcloud + qrain
     self.var2 = self.var
     self.varTitle = "Total Cloud Water Mixing Ratio (kg kg$^{-1}$)\n"+ self.dataSet.getTime()
     #Set short variable title for time series
     self.sTitle = "Total Cloud Water Mixing Ratio (kg kg$^{-1}$)"        
Пример #9
0
    def wind_3d(self):

        u = self.dataSet.readNCVariable('U')
        v = self.dataSet.readNCVariable('V')
        u_corr = wrf.unstaggerX(u)
        v_corr = wrf.unstaggerY(v)
        var1 = wrf.get_bulk_wind(u_corr,v_corr)
        #self.var = wrf.convertWind_MStoKT(var1)
        self.u10 = u_corr
        self.v10 = v_corr
        self.var = var1
        self.var2 = self.var
        #self.varTitle = "Total Wind (knots)\n"+ self.dataSet.getTime()
        self.varTitle = "Total Wind (m s$^{-1}$)\n"+ self.dataSet.getTime()
        #Set short variable title for time series
        self.sTitle = "Total Wind (m s$^{-1}$)"
Пример #10
0
    def ice_water(self):

        #3D ice water --> qice, qsnow, qgraup
        qice = self.dataSet.readNCVariable('QICE')
        qsnow = self.dataSet.readNCVariable('QSNOW')
        qgraup = self.dataSet.readNCVariable('QGRAUP')
        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
        self.var = qice + qsnow + qgraup
        self.var2 = self.var
        self.varTitle = "Total Ice Mixing Ratio (kg kg$^{-1}$)\n"+ self.dataSet.getTime()  
        #Set short variable title for time series
        self.sTitle = "Total Ice Mixing Ratio (kg kg$^{-1}$)"
Пример #11
0
    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)"
Пример #12
0
    def total_water(self):
 
        #3D water --> qrain, qcloud, qice, qsnow, qgraup
        qcloud = self.dataSet.readNCVariable('QCLOUD')
        qrain = self.dataSet.readNCVariable('QRAIN')
        qice = self.dataSet.readNCVariable('QICE')
        qsnow = self.dataSet.readNCVariable('QSNOW')
        qgraup = self.dataSet.readNCVariable('QGRAUP')
        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
        self.var = qice + qsnow + qgraup + qcloud + qrain
        self.var2 = self.var
        self.varTitle = "Total Water Mixing Ratio (kg kg$^{-1}$)\n"+ self.dataSet.getTime()
        #Set short variable title for time series
        self.sTitle = "Total Water Mixing Ratio (kg kg$^{-1}$)"
Пример #13
0
    def temp_850mb(self):

        u = self.dataSet.readNCVariable('U')
        v = self.dataSet.readNCVariable('V')
        u_corr = wrf.unstaggerX(u)
        v_corr = wrf.unstaggerY(v)
        ref_val = 85000.
        #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.loglinear_interpolate(self.temp, self.press, ref_val)
        var1 = np.array(wrf_cython.loglinear_interpolate(self.temp, self.press, ref_val))
        self.var = wrf.convertT_KtoC(var1)
        self.var2 = wrf.get_mslp(self.height, self.press, self.temp, self.qvapor)
        self.varTitle = "850-mb Temperature\n" + self.dataSet.getTime()
        #Set short variable title for time series
        self.sTitle = "850-mb Temperature"
Пример #14
0
    def rh_700mb(self):

        u = self.dataSet.readNCVariable('U')
        v = self.dataSet.readNCVariable('V')
        u_corr = wrf.unstaggerX(u)
        v_corr = wrf.unstaggerY(v)
        ref_val = 70000.
        #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_rh(self.temp, self.qvapor, self.press)
#        self.var = wrf.loglinear_interpolate(var1, self.press, ref_val)
        self.var = np.array(wrf_cython.loglinear_interpolate(var1, self.press, ref_val))
        self.var2 = self.var
        self.varTitle = "700-mb Relative Humidity (%)\n" + self.dataSet.getTime() 
        #Set short variable title for time series
        self.sTitle = "700-mb Relative Humidity (%)"
Пример #15
0
    def PotentialVorticity(self):

        #Read in variables
        u = self.dataSet.readNCVariable('U')
        v = self.dataSet.readNCVariable('V')
        f = self.dataSet.readNCVariable('F')    
 
        #Define grid spacing in meters
        dx = self.dataSet.dx[self.dataSet.currentGrid-1] 
        dy = self.dataSet.dy[self.dataSet.currentGrid-1] 

        u_corr = wrf.unstaggerX(u)
        v_corr = wrf.unstaggerY(v)
        self.u10 = u_corr
        self.v10 = v_corr
        self.var = wrf.pot_vort(u,v,f,dx,dy,self.press,self.theta)
        self.var2 = self.var
        self.varTitle = "Potential Voricity (PVU)\n"+ self.dataSet.getTime()
        #Set short variable title for time series
        self.sTitle = "Potential Voricity (PVU)"
Пример #16
0
 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"
Пример #17
0
 def vort_850mb(self):
     
     u = self.dataSet.readNCVariable('U')
     v = self.dataSet.readNCVariable('V')
     u_corr = wrf.unstaggerX(u)
     v_corr = wrf.unstaggerY(v)
     ref_val = 85000.
     #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.get_mslp(self.height, self.press, self.temp, self.qvapor)
     self.varTitle = "850-mb Relative Voriticity ($10^{-5}$ $s^{-1}$)\n" +\
                     self.dataSet.getTime()
     #Set short variable title for time series
     self.sTitle = "850-mb Relative Voriticity ($10^{-5}$ $s^{-1}$)"
Пример #18
0
    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"
Пример #19
0
 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)"
Пример #20
0
 def divergence(self):
     u = self.dataSet.readNCVariable('U')
     v = self.dataSet.readNCVariable('V')
     u_corr = wrf.unstaggerX(u)
     v_corr = wrf.unstaggerY(v)
     #For the WRF-ARW Arakawa C grid we don't need to use the unstagger winds
     # to calculate the gradient at the mass points
     #du = np.gradient(u_corr)[2]
     #dv = np.gradient(v_corr)[1]
     #Get dimensions
     dimsu = u.shape
     dimsv = v.shape
     du = u[:,:,1:dimsu[2]] - u[:,:,0:dimsu[2]-1]
     dv = v[:,1:dimsv[1],:] - v[:,0:dimsv[1]-1,:]
     dx = self.dataSet.dx[self.dataSet.currentGrid-1]
     dy = self.dataSet.dy[self.dataSet.currentGrid-1]
     self.u10 = u_corr
     self.v10 = v_corr
     self.var = (du/dx + dv/dy)*pow(10,5)
     self.var2 = self.var
     self.varTitle = "Divergence (10$^{-5}$ s$^{-1}$)\n" + self.dataSet.getTime()
     #Set short variable title for time series
     self.sTitle = "Divergence (10$^{-5}$ s$^{-1}$)"