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
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
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
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
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