def compute_OMEGA(ivar, inc, onc, bf, plevs): """ Calculate approximate omega, based on vertical velocity w (dz/dt). It is approximate because it cannot take into account the vertical motion of pressure surfaces. """ temp = bf.temp pres = bf.pres_field qvapor = bf.qvapor wobj = inc.variables["W"] vel_w = de_stagger(wobj, wobj[:]) grav = 9.81 rgas = 287.04 eps = 0.622 omega = -grav*pres/(rgas*((temp*(eps + qvapor))/(eps*(1.0 + qvapor))))*vel_w ovardata = f90.interp(tr(omega), tr(bf.pres_field), plevs, tr(bf.psfc), tr(bf.hgt), tr(bf.temp), tr(bf.qvapor), linlog=1, extrapolate=1, geopt=False, missing=1.e36) dim_list = ["Time","num_metgrid_levels", "south_north", "west_east"] ovarobj = onc.createVariable(ivar, 'float32', dim_list, zlib=True, complevel=4, shuffle=True) ovarobj[:] = tr(ovardata) ovarobj.FieldType = 104 ovarobj.MemoryOrder = "XYZ" ovarobj.description = "Approximate omega" ovarobj.units = "Pa s-1" ovarobj.stagger = "" ovarobj.coordinates = "XLONG XLAT" return onc
def compute_GHT(ivar, inc, onc, bf, plevs): ovardata = f90.interp(tr(bf.ght), tr(bf.pres_field), plevs, tr(bf.psfc), tr(bf.hgt), tr(bf.temp), tr(bf.qvapor), linlog=1, extrapolate=1, geopt=True, missing=1.e36) dim_list = ["Time", "num_metgrid_levels", "south_north", "west_east"] ovarobj = onc.createVariable(ivar, 'float32', dim_list, zlib=True, complevel=4, shuffle=True) ovarobj[:] = tr(ovardata) ovarobj.FieldType = 104 ovarobj.MemoryOrder = "XZY" ovarobj.description = "Geopotential Height" ovarobj.units = "m2s-2" ovarobj.stagger = "-" ovarobj.coordinates = "XLONG XLAT" return onc
def interp2plevs(ivar, inc, onc, bf, plevs): ivarobj = inc.variables[ivar] ivardata = ivarobj[:] # # Check if the variable is staggered and de-stagger it if necessary # if is_staggered(ivarobj): logging.debug( "Variable %s is staggered, de-staggering" % ivar ) ivardata = de_stagger(ivarobj, ivardata) # # Call fortran interpolation routine # logging.debug( "Calling interpolation routine" ) ovardata = f90.interp(tr(ivardata), tr(bf.pres_field), plevs, tr(bf.psfc), tr(bf.hgt), tr(bf.temp), tr(bf.qvapor), linlog=1, extrapolate=1, geopt=False, missing=1.e36) # # Create the output variable and add data and attributes # ovarobj = onc.createVariable(ivar, ivarobj.dtype, ["Time", "num_metgrid_levels", "south_north", "west_east"], zlib=True, complevel=4, shuffle=True) ovarobj[:] = tr(ovardata) for attrname, attrvalue in ivarobj.__dict__.items(): if attrname == "stagger": ovarobj.setncattr(attrname, "") continue ovarobj.setncattr(attrname, attrvalue) return onc
def compute_RH(ivar, inc, onc, bf, plevs): ovardata = f90.interp(tr(bf.rh), tr(bf.pres_field), plevs, tr(bf.psfc), tr(bf.hgt), tr(bf.temp), tr(bf.qvapor), linlog=1, extrapolate=1, geopt=False, missing=1.e36) ovarobj = onc.createVariable( ivar, 'float32', ["Time", "num_metgrid_levels", "south_north", "west_east"], zlib=True, complevel=4, shuffle=True) ovarobj[:] = tr(ovardata) ovarobj.FieldType = 104 ovarobj.MemoryOrder = "XZY" ovarobj.description = "Relative Humidity" ovarobj.units = "%" ovarobj.stagger = "-" ovarobj.coordinates = "XLONG XLAT" return onc
def compute_RH(ivar, inc, onc, bf, plevs): ovardata = f90.interp(tr(bf.rh), tr(bf.pres_field), plevs, tr(bf.psfc), tr(bf.hgt), tr(bf.temp), tr(bf.qvapor), linlog=1, extrapolate=1, geopt=False, missing=1.e36) ovarobj = onc.createVariable(ivar, 'float32', ["Time", "num_metgrid_levels", "south_north", "west_east"], zlib=True, complevel=4, shuffle=True) ovarobj[:] = tr(ovardata) ovarobj.FieldType = 104 ; ovarobj.MemoryOrder = "XZY" ; ovarobj.description = "Relative Humidity" ; ovarobj.units = "%" ; ovarobj.stagger = "-" ; ovarobj.coordinates = "XLONG XLAT" ; return onc
def compute_WSPD(ivar, inc, onc, bf, plevs): # 3D wind speed # Need to destagger 3D winds uobj = inc.variables["U"] u = de_stagger(uobj, uobj[:]) vobj = inc.variables["V"] v = de_stagger(vobj, vobj[:]) wspd = np.sqrt(u**2 + v**2) ovardata = f90.interp(tr(wspd), tr(bf.pres_field), plevs, tr(bf.psfc), tr(bf.hgt), tr(bf.temp), tr(bf.qvapor), linlog=1, extrapolate=1, geopt=False, missing=1.e36) dim_list = ["Time", "num_metgrid_levels", "south_north", "west_east"] ovarobj = onc.createVariable(ivar, 'float32', dim_list, zlib=True, complevel=4, shuffle=True) ovarobj[:] = tr(ovardata) ovarobj.FieldType = 104 ; ovarobj.MemoryOrder = "XZY" ; ovarobj.description = "Wind speed" ; ovarobj.units = "m s-1" ; ovarobj.stagger = "-" ; ovarobj.coordinates = "XLONG XLAT" ; return onc