Esempio n. 1
0
def run_calcs(station, logfile, plots=False, diagnostics=False):
    '''
    Run the humidity calculations and add the attributes to the station file

    :param object station: station object
    :param file logfile: logfile to store outputs
    :param boolean diagnostics: output diagnostic information
    :param boolean plots: make a plot

    :returns: station - updated with humidity variables
    '''

    temperatures = utils.apply_flags_to_mask(station, "temperatures")
    dewpoints = utils.apply_flags_to_mask(station, "dewpoints")

    # adjust from sea-level to station-level
    station_pressure = get_station_level_pressure(station)

    e_v = utils.set_MetVar_attributes("vapor_pressure",
                                      "Vapor pressure calculated w.r.t water",
                                      "water_vapor_pressure", "hPa",
                                      temperatures.mdi, np.dtype('float64'))
    e_s = utils.set_MetVar_attributes(
        "saturation_vapor_pressure",
        "Saturation vapor pressure calculated w.r.t. water",
        "water_vapor_pressure", "hPa", temperatures.mdi, np.dtype('float64'))
    Tw = utils.set_MetVar_attributes(
        "wet_bulb_temperature",
        "Wet bulb temperatures nearest to reporting hour",
        "wet_bulb_temperature", "C", temperatures.mdi, np.dtype('float64'))
    q = utils.set_MetVar_attributes("specific_humidity", "Specific humidity",
                                    "specific_humidity", "g/kg",
                                    temperatures.mdi, np.dtype('float64'))
    rh = utils.set_MetVar_attributes("relative_humidity", "Relative humidity",
                                     "relative_humidity", "%rh",
                                     temperatures.mdi, np.dtype('float64'))

    # sort the vapour pressures and wet-bulb --> ice or water?
    e_v.data, e_s.data, Tw.data = fix_wrt_ice_or_water(temperatures.data,
                                                       dewpoints.data,
                                                       station_pressure)

    # get relative and specific humidity
    q.data = calculate_q(e_v.data, station_pressure)
    rh.data = calculate_rh(e_v.data, e_s.data)

    if plots or diagnostics:
        print "Humidity variables calculated, setting attributes\n"
    else:
        logfile.write("Humidity variables calculated, setting attributes\n")

    setattr(station, "vapour_pressure", e_v)
    setattr(station, "saturation_vapour_pressure", e_s)
    setattr(station, "wetbulb_temperature", Tw)
    setattr(station, "specific_humidity", q)
    setattr(station, "relative_humidity", rh)

    station = utils.append_history(station, "Humidity Calculations")

    return station  # run_calcs
Esempio n. 2
0
def run_calcs(station, logfile, plots=False, diagnostics=False):
    '''
    Run the heat stress calculations and add the new attributes to the station

    :param obj station: station object
    :param file logfile: logfile to store outputs
    :param boolean diagnostics: output diagnostic information
    :param boolean plots: make a plot

    :returns: updated station object with heat stress values.
    '''

    temperatures = utils.apply_flags_to_mask(station, "temperatures")
    rh = getattr(station, "relative_humidity")  # no separate flags using fdi
    e_v = getattr(station, "vapour_pressure")  # no separate flags using fdi
    windspeeds = utils.apply_flags_to_mask(station, "windspeeds")

    thi = utils.set_MetVar_attributes("temperature_humidity_index",
                                      "Temperature Humidity Index (THI)",
                                      "temperature_humidity_index", "1",
                                      temperatures.mdi, np.dtype('float64'))
    wbgt = utils.set_MetVar_attributes("wet_bulb_globe_temperature",
                                       "Wet Bulb Globe Temperature (WBGT)",
                                       "wet_bulb_globe_temperature", "C",
                                       temperatures.mdi, np.dtype('float64'))
    humidex = utils.set_MetVar_attributes("humidex", "Humidex", "humidex",
                                          "1", temperatures.mdi,
                                          np.dtype('float64'))
    apparent_t = utils.set_MetVar_attributes("apparent_temperature",
                                             "Apparent Temperature",
                                             "apparent_temperature", "C",
                                             temperatures.mdi,
                                             np.dtype('float64'))
    heat_index = utils.set_MetVar_attributes("heat_index", "Heat Index",
                                             "heat_index", "C",
                                             temperatures.mdi,
                                             np.dtype('float64'))

    thi.data = calculate_thi(temperatures.data, rh.data)
    wbgt.data = calculate_wbgt(temperatures.data, e_v.data)
    humidex.data = calculate_humidex(temperatures.data, e_v.data)
    apparent_t.data = calculate_apparent_t(temperatures.data, e_v.data,
                                           windspeeds.data)
    heat_index.data = calculate_heat_index(temperatures.data, rh.data)

    if plots or diagnostics:
        print "Heat stress variables calculated, setting attributes\n"
    else:
        logfile.write("Heat stress variables calculated, setting attributes\n")

    setattr(station, "THI", thi)
    setattr(station, "WBGT", wbgt)
    setattr(station, "humidex", humidex)
    setattr(station, "apparent_t", apparent_t)
    setattr(station, "heat_index", heat_index)

    station = utils.append_history(station, "Heat Stress Calculations")

    return station  # run_calcs
Esempio n. 3
0
def run_calcs(station, logfile, plots = False, diagnostics = False):
    '''
    Run the humidity calculations and add the attributes to the station file

    :param object station: station object
    :param file logfile: logfile to store outputs
    :param boolean diagnostics: output diagnostic information
    :param boolean plots: make a plot

    :returns: station - updated with humidity variables
    '''

    temperatures = utils.apply_flags_to_mask(station, "temperatures")
    dewpoints = utils.apply_flags_to_mask(station, "dewpoints")
   
    # adjust from sea-level to station-level
    station_pressure = get_station_level_pressure(station)
    

    e_v = utils.set_MetVar_attributes("vapor_pressure", "Vapor pressure calculated w.r.t water", "water_vapor_pressure", "hPa", temperatures.mdi, np.dtype('float64'))
    e_s = utils.set_MetVar_attributes("saturation_vapor_pressure", "Saturation vapor pressure calculated w.r.t. water", "water_vapor_pressure", "hPa", temperatures.mdi, np.dtype('float64'))
    Tw = utils.set_MetVar_attributes("wet_bulb_temperature", "Wet bulb temperatures nearest to reporting hour", "wet_bulb_temperature", "C", temperatures.mdi, np.dtype('float64'))
    q = utils.set_MetVar_attributes("specific_humidity", "Specific humidity", "specific_humidity", "g/kg", temperatures.mdi, np.dtype('float64'))
    rh = utils.set_MetVar_attributes("relative_humidity", "Relative humidity", "relative_humidity", "%rh", temperatures.mdi, np.dtype('float64'))


    # sort the vapour pressures and wet-bulb --> ice or water?
    e_v.data, e_s.data, Tw.data = fix_wrt_ice_or_water(temperatures.data, dewpoints.data, station_pressure)

    
    # get relative and specific humidity
    q.data = calculate_q(e_v.data, station_pressure)
    rh.data = calculate_rh(e_v.data, e_s.data)
    
    if plots or diagnostics:
        print "Humidity variables calculated, setting attributes\n"
    else:
        logfile.write("Humidity variables calculated, setting attributes\n")

    setattr(station, "vapour_pressure", e_v)
    setattr(station, "saturation_vapour_pressure", e_s)
    setattr(station, "wetbulb_temperature", Tw)
    setattr(station, "specific_humidity", q)
    setattr(station, "relative_humidity", rh)

    station = utils.append_history(station, "Humidity Calculations")

    return station # run_calcs
Esempio n. 4
0
def get_station_level_pressure(station):
    '''
    Convert from sea level pressure back to station level
    List, R. J.: Smithsonian Meteorological Tables, Vol. 114, 6th Edn.,
    Smithsonian Institution, Washington DC, 268 pp., 1963.

    :param object station: station object
    
    :returns: station level pressure (hPa)
    '''

    slp = utils.apply_flags_to_mask(station, "slp")
    temperatures = utils.apply_flags_to_mask(station, "temperatures")

    t_in_kelvin = temperatures.data + 273.15

    elevation = station.elev

    pressure = slp.data * np.ma.power(t_in_kelvin / (t_in_kelvin + 0.0065 * elevation), 5.625)

    return pressure # get_station_level_pressure
Esempio n. 5
0
def get_station_level_pressure(station):
    '''
    Convert from sea level pressure back to station level
    List, R. J.: Smithsonian Meteorological Tables, Vol. 114, 6th Edn.,
    Smithsonian Institution, Washington DC, 268 pp., 1963.

    :param object station: station object
    
    :returns: station level pressure (hPa)
    '''

    slp = utils.apply_flags_to_mask(station, "slp")
    temperatures = utils.apply_flags_to_mask(station, "temperatures")

    t_in_kelvin = temperatures.data + 273.15

    elevation = station.elev

    pressure = slp.data * np.ma.power(
        t_in_kelvin / (t_in_kelvin + 0.0065 * elevation), 5.625)

    return pressure  # get_station_level_pressure