Example #1
0
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
Example #2
0
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
Example #3
0
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
Example #4
0
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
Example #5
0
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
Example #6
0
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