def test_dewpoint_to_relative_humidity(self): """Ensures correct output from dewpoint_to_relative_humidity.""" these_relative_humidities = ( moisture_conversions.dewpoint_to_relative_humidity( DEWPOINTS_KELVINS, TEMPERATURES_KELVINS, TOTAL_PRESSURES_PASCALS)) self.assertTrue( numpy.allclose(these_relative_humidities, RELATIVE_HUMIDITIES, atol=TOLERANCE))
def test_dewpoint_to_relative_humidity(self): """Ensures correct output from dewpoint_to_relative_humidity.""" these_relative_humidities = moisture_conv.dewpoint_to_relative_humidity( dewpoints_kelvins=DEWPOINTS_KELVINS, temperatures_kelvins=TEMPERATURES_KELVINS, total_pressures_pascals=PRESSURES_PASCALS) self.assertTrue( numpy.allclose(these_relative_humidities, RELATIVE_HUMIDITIES_FIXED, atol=TOLERANCE))
def _specific_to_relative_humidity(example_dict): """Converts profiles of specific humidity to relative humidity. :param example_dict: Dictionary of examples (in the format returned by `read_file`). :return: example_dict: Same as input but with extra predictor variable. """ specific_humidity_matrix_kg_kg01 = example_utils.get_field_from_dict( example_dict=example_dict, field_name=example_utils.SPECIFIC_HUMIDITY_NAME) temperature_matrix_kelvins = example_utils.get_field_from_dict( example_dict=example_dict, field_name=example_utils.TEMPERATURE_NAME) pressure_matrix_pascals = example_utils.get_field_from_dict( example_dict=example_dict, field_name=example_utils.PRESSURE_NAME) dewpoint_matrix_kelvins = moisture_conv.specific_humidity_to_dewpoint( specific_humidities_kg_kg01=specific_humidity_matrix_kg_kg01, temperatures_kelvins=temperature_matrix_kelvins, total_pressures_pascals=pressure_matrix_pascals) relative_humidity_matrix = moisture_conv.dewpoint_to_relative_humidity( dewpoints_kelvins=dewpoint_matrix_kelvins, temperatures_kelvins=temperature_matrix_kelvins, total_pressures_pascals=pressure_matrix_pascals) vector_predictor_names = ( example_dict[example_utils.VECTOR_PREDICTOR_NAMES_KEY]) found_rh = example_utils.RELATIVE_HUMIDITY_NAME in vector_predictor_names if not found_rh: vector_predictor_names.append(example_utils.RELATIVE_HUMIDITY_NAME) rh_index = (vector_predictor_names.index( example_utils.RELATIVE_HUMIDITY_NAME)) example_dict[example_utils.VECTOR_PREDICTOR_NAMES_KEY] = ( vector_predictor_names) if found_rh: example_dict[example_utils.VECTOR_PREDICTOR_VALS_KEY][ ..., rh_index] = (relative_humidity_matrix) else: example_dict[example_utils.VECTOR_PREDICTOR_VALS_KEY] = numpy.insert( example_dict[example_utils.VECTOR_PREDICTOR_VALS_KEY], obj=rh_index, values=relative_humidity_matrix, axis=-1) return example_dict
} SOUNDING_TABLE_SHARPPY_ORIG = pandas.DataFrame.from_dict(THIS_SOUNDING_DICT) # The following constants are used to test _sounding_to_sharppy_units. MB_TO_PASCALS = 100 UNITLESS_TO_PERCENT = 100 KT_TO_METRES_PER_SECOND = 1.852 / 3.6 THESE_TEMPERATURES_KELVINS = temperature_conversions.celsius_to_kelvins( THESE_TEMPERATURES_DEG_C) THESE_DEWPOINTS_KELVINS = temperature_conversions.celsius_to_kelvins( THESE_DEWPOINTS_DEG_C) THESE_SPECIFIC_HUMIDITIES = moisture_conversions.dewpoint_to_specific_humidity( THESE_DEWPOINTS_KELVINS, THESE_PRESSURES_MB * MB_TO_PASCALS) THESE_RH_PERCENT = moisture_conversions.dewpoint_to_relative_humidity( THESE_DEWPOINTS_KELVINS, THESE_TEMPERATURES_KELVINS, THESE_PRESSURES_MB * MB_TO_PASCALS) * UNITLESS_TO_PERCENT THESE_U_WINDS_M_S01 = KT_TO_METRES_PER_SECOND * THESE_U_WINDS_KT THESE_V_WINDS_M_S01 = KT_TO_METRES_PER_SECOND * THESE_V_WINDS_KT THIS_SOUNDING_DICT = { soundings.PRESSURE_COLUMN_FOR_SHARPPY_INPUT: THESE_PRESSURES_MB, nwp_model_utils.HEIGHT_COLUMN_FOR_SOUNDING_TABLES: THESE_HEIGHTS_M_ASL, nwp_model_utils.TEMPERATURE_COLUMN_FOR_SOUNDING_TABLES: THESE_TEMPERATURES_KELVINS, nwp_model_utils.SPFH_COLUMN_FOR_SOUNDING_TABLES: THESE_SPECIFIC_HUMIDITIES, nwp_model_utils.U_WIND_COLUMN_FOR_SOUNDING_TABLES: THESE_U_WINDS_M_S01, nwp_model_utils.V_WIND_COLUMN_FOR_SOUNDING_TABLES: THESE_V_WINDS_M_S01, soundings.IS_SURFACE_COLUMN_FOR_SHARPPY_INPUT: THESE_SURFACE_FLAGS } SOUNDING_TABLE_RAP_UNITS = pandas.DataFrame.from_dict(THIS_SOUNDING_DICT)
1.17068292, 1.16533351, 1.16002338, 1.15475212 ], [ 1.14711999, 1.14127126, 1.13546837, 1.12971083, 1.12399816, 1.11832989, 1.11270554, 1.14711999, 1.14127126, 1.13546837, 1.12971083, 1.12399816, 1.11832989, 1.11270554 ]]) # The following constants are used to test _specific_to_relative_humidity. DEWPOINT_MATRIX_KELVINS = moisture_conv.specific_humidity_to_dewpoint( specific_humidities_kg_kg01=HUMIDITY_MATRIX_KG_KG01, temperatures_kelvins=TEMPERATURE_MATRIX_KELVINS, total_pressures_pascals=PRESSURE_MATRIX_PASCALS) RELATIVE_HUMIDITY_MATRIX = moisture_conv.dewpoint_to_relative_humidity( dewpoints_kelvins=DEWPOINT_MATRIX_KELVINS, temperatures_kelvins=TEMPERATURE_MATRIX_KELVINS, total_pressures_pascals=PRESSURE_MATRIX_PASCALS) EXAMPLE_DICT_SANS_RH = copy.deepcopy(EXAMPLE_DICT_SANS_DENSITY) THESE_VECTOR_PREDICTOR_NAMES = [ example_utils.SPECIFIC_HUMIDITY_NAME, example_utils.TEMPERATURE_NAME, example_utils.PRESSURE_NAME, example_utils.RELATIVE_HUMIDITY_NAME ] THIS_VECTOR_PREDICTOR_MATRIX = numpy.stack( (HUMIDITY_MATRIX_KG_KG01, TEMPERATURE_MATRIX_KELVINS, PRESSURE_MATRIX_PASCALS, RELATIVE_HUMIDITY_MATRIX), axis=-1) EXAMPLE_DICT_WITH_RH = { example_utils.VECTOR_PREDICTOR_VALS_KEY: THIS_VECTOR_PREDICTOR_MATRIX,
273.15, 278.15, 283.15, 288.15, 298.15 ]) THESE_U_WINDS_M_S01 = numpy.array([-10, -5, 0, 5, 10]) THESE_V_WINDS_M_S01 = numpy.array([20, 30, -40, 15, 7.2]) THESE_SPEC_HUMIDITIES_KG_KG01 = 0.001 * numpy.array([0.1, 1., 5., 10., 20.]) THESE_PRESSURES_PASCALS = numpy.array([99000, 100000, 101000, 102000, 103000]) PRESSURE_MATRIX_PASCALS = numpy.reshape(THESE_PRESSURES_PASCALS, (1, 5)) THESE_DEWPOINTS_KELVINS = moisture_conversions.specific_humidity_to_dewpoint( specific_humidities_kg_kg01=THESE_SPEC_HUMIDITIES_KG_KG01, total_pressures_pascals=THESE_PRESSURES_PASCALS) DEWPOINT_MATRIX_KELVINS = numpy.reshape(THESE_DEWPOINTS_KELVINS, (1, 5)) THESE_RELATIVE_HUMIDITIES = moisture_conversions.dewpoint_to_relative_humidity( dewpoints_kelvins=THESE_DEWPOINTS_KELVINS, temperatures_kelvins=THESE_TEMPERATURES_KELVINS, total_pressures_pascals=THESE_PRESSURES_PASCALS) THESE_RELATIVE_HUMIDITIES_PERCENT = 100 * THESE_RELATIVE_HUMIDITIES THESE_FIELD_NAMES = [ nwp_model_utils.HEIGHT_COLUMN_FOR_SOUNDINGS, nwp_model_utils.RH_COLUMN_FOR_SOUNDINGS, nwp_model_utils.TEMPERATURE_COLUMN_FOR_SOUNDINGS, nwp_model_utils.U_WIND_COLUMN_FOR_SOUNDINGS, nwp_model_utils.V_WIND_COLUMN_FOR_SOUNDINGS ] THIS_SOUNDING_MATRIX = numpy.full((1, 5, 5), numpy.nan) THIS_SOUNDING_MATRIX[0, :, 0] = THESE_HEIGHTS_METRES THIS_SOUNDING_MATRIX[0, :, 1] = THESE_RELATIVE_HUMIDITIES_PERCENT THIS_SOUNDING_MATRIX[0, :, 2] = THESE_TEMPERATURES_KELVINS