diff --git a/config/obs_kind_mod.f90 b/config/obs_kind_mod.f90 deleted file mode 100644 index 9fa9f32dbdbb9fa2de4aff7663a5ee2be485b31b..0000000000000000000000000000000000000000 --- a/config/obs_kind_mod.f90 +++ /dev/null @@ -1,2700 +0,0 @@ -! DART software - Copyright UCAR. This open source software is provided -! by UCAR, "as is", without charge, subject to all terms of use at -! http://www.image.ucar.edu/DAReS/DART/DART_download - -!---------------------------------------------------------------------- -! WARNING!! The file obs_kind_mod.f90 is AUTOGENERATED by the -! 'preprocess' program. Any changes made to this file will be -! overwritten when it is regenerated. To make permanent changes in -! the code, edit DEFAULT_obs_kind_mod.F90, edit the observation -! specific obs_def_xxx_mod.f90 files, or edit the xxx_quantity.f90 files. -!---------------------------------------------------------------------- - -! FIXME: this should change to obs_qty_mod - but that is a large footprint, -! non-backwards compatible change. almost every other module in the system -! has a use statement for this module - -! module obs_qty_mod -module obs_kind_mod - -use types_mod, only : obstypelength, r8, MISSING_R8 -use utilities_mod, only : error_handler, E_ERR, E_WARN, & - logfileunit, find_namelist_in_file, log_it, & - check_namelist_read, do_output, ascii_file_format, & - string_to_real - -implicit none -private - -public :: get_name_for_type_of_obs, & - assimilate_this_type_of_obs, & - evaluate_this_type_of_obs, & - get_quantity_for_type_of_obs, & - get_index_for_type_of_obs, & - write_type_of_obs_table, & - read_type_of_obs_table, & - get_type_of_obs_from_menu, & - map_type_of_obs_table, & - use_ext_prior_this_type_of_obs, & - get_name_for_quantity, & - get_index_for_quantity, & - set_namevalue_for_quantity, & - get_num_items_for_quantity, & - get_itemname_for_quantity, & - get_itemvalue_for_quantity, & - has_bounds_for_quantity - -public :: get_num_types_of_obs, get_num_quantities - -!---------------------------------------------------------------------------- -! These lists are autogenerated by the 'preprocess' program. -! -! To add new observation types (e.g. AIRS_U_WIND_COMPONENT), edit the -! obs_def_xxx_mod.f90 files and add the filename to the 'obs_type_files' variable -! in the &preprocess_nml namelist of the model-specific work/input.nml file. -! There can be multiple filenames listed for 'obs_type_files'. -! -! To add a new fundamental quantity (e.g. QTY_TEMPERATURE), first examine -! all the xxx_quantities_mod.f90 files to be sure it does not already exist. -! If it really does not, add QTY_xxx to the most appropriate file and -! add xxx_quantities_mod.f90 to the 'quantity_files' variable in the &preprocess_nml -! namelist. There can be multiple filenames listed for 'quantity_files'. -! -! Add a descriptive comment along with expected units and any other -! helpful information. These quantities should be useable by any -! model of the same system to allow interoperability and comparisons -! between model results. -! - -!--------------------------------------------------------------------------- - -! Integer definitions for DART QUANTITIES - -integer, parameter, public :: QTY_STATE_VARIABLE = 0 -integer, parameter, public :: QTY_U_WIND_COMPONENT = 1 -integer, parameter, public :: QTY_V_WIND_COMPONENT = 2 -integer, parameter, public :: QTY_SURFACE_PRESSURE = 3 -integer, parameter, public :: QTY_TEMPERATURE = 4 -integer, parameter, public :: QTY_SPECIFIC_HUMIDITY = 5 -integer, parameter, public :: QTY_PRESSURE = 6 -integer, parameter, public :: QTY_VERTICAL_VELOCITY = 7 -integer, parameter, public :: QTY_RAINWATER_MIXING_RATIO = 8 -integer, parameter, public :: QTY_DEWPOINT = 9 -integer, parameter, public :: QTY_DENSITY = 10 -integer, parameter, public :: QTY_MEAN_SOURCE = 11 -integer, parameter, public :: QTY_VELOCITY = 12 -integer, parameter, public :: QTY_RADAR_REFLECTIVITY = 13 -integer, parameter, public :: QTY_GRAUPEL_MIXING_RATIO = 14 -integer, parameter, public :: QTY_SNOW_MIXING_RATIO = 15 -integer, parameter, public :: QTY_GPSRO = 16 -integer, parameter, public :: QTY_CLOUD_LIQUID_WATER = 17 -integer, parameter, public :: QTY_CLOUD_ICE = 18 -integer, parameter, public :: QTY_CONDENSATIONAL_HEATING = 19 -integer, parameter, public :: QTY_VAPOR_MIXING_RATIO = 20 -integer, parameter, public :: QTY_ICE_NUMBER_CONCENTRATION = 21 -integer, parameter, public :: QTY_GEOPOTENTIAL_HEIGHT = 22 -integer, parameter, public :: QTY_POTENTIAL_TEMPERATURE = 23 -integer, parameter, public :: QTY_SOIL_MOISTURE = 24 -integer, parameter, public :: QTY_SOURCE_PHASE = 25 -integer, parameter, public :: QTY_SURFACE_ELEVATION = 26 -integer, parameter, public :: QTY_GRAV_WAVE_DRAG_EFFIC = 27 -integer, parameter, public :: QTY_GRAV_WAVE_STRESS_FRACTION = 28 -integer, parameter, public :: QTY_POWER_WEIGHTED_FALL_SPEED = 29 -integer, parameter, public :: QTY_CLOUDWATER_MIXING_RATIO = 30 -integer, parameter, public :: QTY_ICE_MIXING_RATIO = 31 -integer, parameter, public :: QTY_DROPLET_NUMBER_CONCENTR = 32 -integer, parameter, public :: QTY_SNOW_NUMBER_CONCENTR = 33 -integer, parameter, public :: QTY_RAIN_NUMBER_CONCENTR = 34 -integer, parameter, public :: QTY_GRAUPEL_NUMBER_CONCENTR = 35 -integer, parameter, public :: QTY_CLOUD_FRACTION = 36 -integer, parameter, public :: QTY_ICE_FRACTION = 37 -integer, parameter, public :: QTY_RELATIVE_HUMIDITY = 38 -integer, parameter, public :: QTY_1D_PARAMETER = 39 -integer, parameter, public :: QTY_2D_PARAMETER = 40 -integer, parameter, public :: QTY_3D_PARAMETER = 41 -integer, parameter, public :: QTY_ALTIMETER_TENDENCY = 42 -integer, parameter, public :: QTY_PRECIPITABLE_WATER = 43 -integer, parameter, public :: QTY_OCCULTATION_REFRACTIVITY = 44 -integer, parameter, public :: QTY_OCCULTATION_EXCESSPHASE = 45 -integer, parameter, public :: QTY_GEOMETRIC_HEIGHT = 46 -integer, parameter, public :: QTY_INFRARED_RADIANCE = 47 -integer, parameter, public :: QTY_INFRARED_BRIGHT_TEMP = 48 -integer, parameter, public :: QTY_LANDMASK = 49 -integer, parameter, public :: QTY_EDGE_NORMAL_SPEED = 50 -integer, parameter, public :: QTY_CLW_PATH = 51 -integer, parameter, public :: QTY_CWP_PATH = 52 -integer, parameter, public :: QTY_CWP_PATH_ZERO = 53 -integer, parameter, public :: QTY_WIND_TURBINE_POWER = 54 -integer, parameter, public :: QTY_2M_SPECIFIC_HUMIDITY = 55 -integer, parameter, public :: QTY_2M_TEMPERATURE = 56 -integer, parameter, public :: QTY_10M_U_WIND_COMPONENT = 57 -integer, parameter, public :: QTY_10M_V_WIND_COMPONENT = 58 -integer, parameter, public :: QTY_SKIN_TEMPERATURE = 59 -integer, parameter, public :: QTY_NADIR_RADIANCE = 60 -integer, parameter, public :: QTY_TRACER_1_MIXING_RATIO = 61 -integer, parameter, public :: QTY_TRACER_2_MIXING_RATIO = 62 -integer, parameter, public :: QTY_TRACER_CONCENTRATION = 63 -integer, parameter, public :: QTY_TRACER_SOURCE = 64 -integer, parameter, public :: QTY_SOIL_TEMPERATURE = 65 -integer, parameter, public :: QTY_SOIL_LIQUID_WATER = 66 -integer, parameter, public :: QTY_VERTICAL_VORTICITY = 67 -integer, parameter, public :: QTY_SURFACE_ALBEDO = 68 -integer, parameter, public :: QTY_SURFACE_EMISSIVITY = 69 -integer, parameter, public :: QTY_DUST_OPACITY_7MB = 70 -integer, parameter, public :: QTY_THC = 71 -integer, parameter, public :: QTY_VORTEX_LON = 72 -integer, parameter, public :: QTY_VORTEX_LAT = 73 -integer, parameter, public :: QTY_VORTEX_PMIN = 74 -integer, parameter, public :: QTY_VORTEX_WMAX = 75 -integer, parameter, public :: QTY_EXNER_FUNCTION = 76 -integer, parameter, public :: QTY_TURBULENT_KINETIC_ENERGY = 77 -integer, parameter, public :: QTY_TOTAL_PRECIPITABLE_WATER = 78 -integer, parameter, public :: QTY_VERTLEVEL = 79 -integer, parameter, public :: QTY_MICROWAVE_BRIGHT_TEMP = 80 -integer, parameter, public :: QTY_INTEGRATED_SULFATE = 81 -integer, parameter, public :: QTY_INTEGRATED_DUST = 82 -integer, parameter, public :: QTY_INTEGRATED_SMOKE = 83 -integer, parameter, public :: QTY_INTEGRATED_SEASALT = 84 -integer, parameter, public :: QTY_INTEGRATED_AOD = 85 -integer, parameter, public :: QTY_SO2 = 86 -integer, parameter, public :: QTY_SULFATE = 87 -integer, parameter, public :: QTY_DUST = 88 -integer, parameter, public :: QTY_SMOKE = 89 -integer, parameter, public :: QTY_SEASALT = 90 -integer, parameter, public :: QTY_HAIL_MIXING_RATIO = 91 -integer, parameter, public :: QTY_HAIL_NUMBER_CONCENTR = 92 -integer, parameter, public :: QTY_GRAUPEL_VOLUME = 93 -integer, parameter, public :: QTY_HAIL_VOLUME = 94 -integer, parameter, public :: QTY_DIFFERENTIAL_REFLECTIVITY = 95 -integer, parameter, public :: QTY_SPECIFIC_DIFFERENTIAL_PHASE = 96 -integer, parameter, public :: QTY_FLASH_RATE_2D = 97 -integer, parameter, public :: QTY_RADIANCE = 98 -integer, parameter, public :: QTY_BRIGHTNESS_TEMPERATURE = 99 -integer, parameter, public :: QTY_BI_DIRECTIONAL_REFLECTANCE = 100 -integer, parameter, public :: QTY_SURFACE_TYPE = 101 -integer, parameter, public :: QTY_WIND_FETCH = 102 -integer, parameter, public :: QTY_WATER_TYPE = 103 -integer, parameter, public :: QTY_FOAM_FRAC = 104 -integer, parameter, public :: QTY_INSOLUBLE_AER = 105 -integer, parameter, public :: QTY_H2O_SOLUBLE_AER = 106 -integer, parameter, public :: QTY_SOOT = 107 -integer, parameter, public :: QTY_SEASALT_ACCUM = 108 -integer, parameter, public :: QTY_SEASALT_COARSE = 109 -integer, parameter, public :: QTY_MINERAL_NUCLEUS = 110 -integer, parameter, public :: QTY_MINERAL_ACCUM = 111 -integer, parameter, public :: QTY_MINERAL_COARSE = 112 -integer, parameter, public :: QTY_MINERAL_TRANSPORTED = 113 -integer, parameter, public :: QTY_SULPHATED_DROPS = 114 -integer, parameter, public :: QTY_VOLCANIC_ASH = 115 -integer, parameter, public :: QTY_NEW_VOLCANIC_ASH = 116 -integer, parameter, public :: QTY_ASIAN_DUST = 117 -integer, parameter, public :: QTY_BLACK_CARBON = 118 -integer, parameter, public :: QTY_DUST_BIN1 = 119 -integer, parameter, public :: QTY_DUST_BIN2 = 120 -integer, parameter, public :: QTY_DUST_BIN3 = 121 -integer, parameter, public :: QTY_AMMONIUM_SULPHATE = 122 -integer, parameter, public :: QTY_SEA_SALT_BIN1 = 123 -integer, parameter, public :: QTY_SEA_SALT_BIN2 = 124 -integer, parameter, public :: QTY_SEA_SALT_BIN3 = 125 -integer, parameter, public :: QTY_HYDROPHILIC_ORGANIC_MATTER = 126 -integer, parameter, public :: QTY_CLOUDWATER_DE = 127 -integer, parameter, public :: QTY_CLOUD_ICE_DE = 128 -integer, parameter, public :: QTY_COLUMN_CLOUD_FRAC = 129 -integer, parameter, public :: QTY_CLOUD_TOP_PRESSURE = 130 -integer, parameter, public :: QTY_ABSOLUTE_HUMIDITY = 131 -integer, parameter, public :: QTY_O3 = 132 -integer, parameter, public :: QTY_CO2 = 133 -integer, parameter, public :: QTY_N2O = 134 -integer, parameter, public :: QTY_CH4 = 135 -integer, parameter, public :: QTY_CO = 136 -integer, parameter, public :: QTY_SALINITY = 137 -integer, parameter, public :: QTY_SNOWCOVER_FRAC = 138 - - -integer, parameter, public :: MAX_DEFINED_QUANTITIES = 138 - -!--------------------------------------------------------------------------- -!--------------------------------------------------------------------------- - -! Integer definitions for DART OBS TYPES - -integer, parameter, public :: RADIOSONDE_U_WIND_COMPONENT = 1 -integer, parameter, public :: RADIOSONDE_V_WIND_COMPONENT = 2 -integer, parameter, public :: RADIOSONDE_GEOPOTENTIAL_HGT = 3 -integer, parameter, public :: RADIOSONDE_SURFACE_PRESSURE = 4 -integer, parameter, public :: RADIOSONDE_TEMPERATURE = 5 -integer, parameter, public :: RADIOSONDE_SPECIFIC_HUMIDITY = 6 -integer, parameter, public :: DROPSONDE_U_WIND_COMPONENT = 7 -integer, parameter, public :: DROPSONDE_V_WIND_COMPONENT = 8 -integer, parameter, public :: DROPSONDE_SURFACE_PRESSURE = 9 -integer, parameter, public :: DROPSONDE_TEMPERATURE = 10 -integer, parameter, public :: DROPSONDE_SPECIFIC_HUMIDITY = 11 -integer, parameter, public :: AIRCRAFT_U_WIND_COMPONENT = 12 -integer, parameter, public :: AIRCRAFT_V_WIND_COMPONENT = 13 -integer, parameter, public :: AIRCRAFT_TEMPERATURE = 14 -integer, parameter, public :: AIRCRAFT_SPECIFIC_HUMIDITY = 15 -integer, parameter, public :: ACARS_U_WIND_COMPONENT = 16 -integer, parameter, public :: ACARS_V_WIND_COMPONENT = 17 -integer, parameter, public :: ACARS_TEMPERATURE = 18 -integer, parameter, public :: ACARS_SPECIFIC_HUMIDITY = 19 -integer, parameter, public :: MARINE_SFC_U_WIND_COMPONENT = 20 -integer, parameter, public :: MARINE_SFC_V_WIND_COMPONENT = 21 -integer, parameter, public :: MARINE_SFC_TEMPERATURE = 22 -integer, parameter, public :: MARINE_SFC_SPECIFIC_HUMIDITY = 23 -integer, parameter, public :: MARINE_SFC_PRESSURE = 24 -integer, parameter, public :: LAND_SFC_U_WIND_COMPONENT = 25 -integer, parameter, public :: LAND_SFC_V_WIND_COMPONENT = 26 -integer, parameter, public :: LAND_SFC_TEMPERATURE = 27 -integer, parameter, public :: LAND_SFC_SPECIFIC_HUMIDITY = 28 -integer, parameter, public :: LAND_SFC_PRESSURE = 29 -integer, parameter, public :: SAT_U_WIND_COMPONENT = 30 -integer, parameter, public :: SAT_V_WIND_COMPONENT = 31 -integer, parameter, public :: ATOV_TEMPERATURE = 32 -integer, parameter, public :: AIRS_TEMPERATURE = 33 -integer, parameter, public :: AIRS_SPECIFIC_HUMIDITY = 34 -integer, parameter, public :: GPS_PRECIPITABLE_WATER = 35 -integer, parameter, public :: VADWND_U_WIND_COMPONENT = 36 -integer, parameter, public :: VADWND_V_WIND_COMPONENT = 37 -integer, parameter, public :: CIMMS_AMV_U_WIND_COMPONENT = 38 -integer, parameter, public :: CIMMS_AMV_V_WIND_COMPONENT = 39 -integer, parameter, public :: DOPPLER_RADIAL_VELOCITY = 40 -integer, parameter, public :: RADAR_REFLECTIVITY = 41 -integer, parameter, public :: RADAR_CLEARAIR_REFLECTIVITY = 42 -integer, parameter, public :: PRECIPITATION_FALL_SPEED = 43 -integer, parameter, public :: METAR_U_10_METER_WIND = 44 -integer, parameter, public :: METAR_V_10_METER_WIND = 45 -integer, parameter, public :: METAR_TEMPERATURE_2_METER = 46 -integer, parameter, public :: METAR_SPECIFIC_HUMIDITY_2_METER = 47 -integer, parameter, public :: METAR_SURFACE_PRESSURE = 48 -integer, parameter, public :: METAR_POT_TEMP_2_METER = 49 -integer, parameter, public :: DEWPOINT = 50 -integer, parameter, public :: DEWPOINT_2_METER = 51 -integer, parameter, public :: BUOY_DEWPOINT = 52 -integer, parameter, public :: SHIP_DEWPOINT = 53 -integer, parameter, public :: SYNOP_DEWPOINT = 54 -integer, parameter, public :: AIREP_DEWPOINT = 55 -integer, parameter, public :: AMDAR_DEWPOINT = 56 -integer, parameter, public :: PILOT_DEWPOINT = 57 -integer, parameter, public :: BOGUS_DEWPOINT = 58 -integer, parameter, public :: AIRS_DEWPOINT = 59 -integer, parameter, public :: METAR_DEWPOINT_2_METER = 60 -integer, parameter, public :: RADIOSONDE_DEWPOINT = 61 -integer, parameter, public :: DROPSONDE_DEWPOINT = 62 -integer, parameter, public :: AIRCRAFT_DEWPOINT = 63 -integer, parameter, public :: ACARS_DEWPOINT = 64 -integer, parameter, public :: MARINE_SFC_DEWPOINT = 65 -integer, parameter, public :: LAND_SFC_DEWPOINT = 66 -integer, parameter, public :: RADIOSONDE_RELATIVE_HUMIDITY = 67 -integer, parameter, public :: DROPSONDE_RELATIVE_HUMIDITY = 68 -integer, parameter, public :: AIRCRAFT_RELATIVE_HUMIDITY = 69 -integer, parameter, public :: ACARS_RELATIVE_HUMIDITY = 70 -integer, parameter, public :: MARINE_SFC_RELATIVE_HUMIDITY = 71 -integer, parameter, public :: LAND_SFC_RELATIVE_HUMIDITY = 72 -integer, parameter, public :: METAR_RELATIVE_HUMIDITY_2_METER = 73 -integer, parameter, public :: AIRS_RELATIVE_HUMIDITY = 74 -integer, parameter, public :: MESONET_RELATIVE_HUMIDITY = 75 -integer, parameter, public :: RADIOSONDE_SURFACE_ALTIMETER = 76 -integer, parameter, public :: DROPSONDE_SURFACE_ALTIMETER = 77 -integer, parameter, public :: MARINE_SFC_ALTIMETER = 78 -integer, parameter, public :: LAND_SFC_ALTIMETER = 79 -integer, parameter, public :: METAR_ALTIMETER = 80 -integer, parameter, public :: MESONET_SURFACE_ALTIMETER = 81 -integer, parameter, public :: TEMPERATURE = 82 -integer, parameter, public :: SPECIFIC_HUMIDITY = 83 -integer, parameter, public :: PRESSURE = 84 -integer, parameter, public :: GPSRO_REFRACTIVITY = 85 -integer, parameter, public :: VORTEX_LAT = 86 -integer, parameter, public :: VORTEX_LON = 87 -integer, parameter, public :: VORTEX_PMIN = 88 -integer, parameter, public :: VORTEX_WMAX = 89 -integer, parameter, public :: BUOY_U_WIND_COMPONENT = 90 -integer, parameter, public :: BUOY_V_WIND_COMPONENT = 91 -integer, parameter, public :: BUOY_SURFACE_PRESSURE = 92 -integer, parameter, public :: BUOY_TEMPERATURE = 93 -integer, parameter, public :: SHIP_U_WIND_COMPONENT = 94 -integer, parameter, public :: SHIP_V_WIND_COMPONENT = 95 -integer, parameter, public :: SHIP_SURFACE_PRESSURE = 96 -integer, parameter, public :: SHIP_TEMPERATURE = 97 -integer, parameter, public :: SYNOP_U_WIND_COMPONENT = 98 -integer, parameter, public :: SYNOP_V_WIND_COMPONENT = 99 -integer, parameter, public :: SYNOP_SURFACE_PRESSURE = 100 -integer, parameter, public :: SYNOP_SPECIFIC_HUMIDITY = 101 -integer, parameter, public :: SYNOP_TEMPERATURE = 102 -integer, parameter, public :: AIREP_U_WIND_COMPONENT = 103 -integer, parameter, public :: AIREP_V_WIND_COMPONENT = 104 -integer, parameter, public :: AIREP_PRESSURE = 105 -integer, parameter, public :: AIREP_TEMPERATURE = 106 -integer, parameter, public :: AMDAR_U_WIND_COMPONENT = 107 -integer, parameter, public :: AMDAR_V_WIND_COMPONENT = 108 -integer, parameter, public :: AMDAR_PRESSURE = 109 -integer, parameter, public :: AMDAR_TEMPERATURE = 110 -integer, parameter, public :: PILOT_U_WIND_COMPONENT = 111 -integer, parameter, public :: PILOT_V_WIND_COMPONENT = 112 -integer, parameter, public :: PILOT_PRESSURE = 113 -integer, parameter, public :: PILOT_TEMPERATURE = 114 -integer, parameter, public :: BOGUS_U_WIND_COMPONENT = 115 -integer, parameter, public :: BOGUS_V_WIND_COMPONENT = 116 -integer, parameter, public :: BOGUS_PRESSURE = 117 -integer, parameter, public :: BOGUS_TEMPERATURE = 118 -integer, parameter, public :: PROFILER_U_WIND_COMPONENT = 119 -integer, parameter, public :: PROFILER_V_WIND_COMPONENT = 120 -integer, parameter, public :: PROFILER_PRESSURE = 121 -integer, parameter, public :: SATEM_THICKNESS = 122 -integer, parameter, public :: NOAA_1_VTPR1_RADIANCE = 123 -integer, parameter, public :: NOAA_2_VTPR1_RADIANCE = 124 -integer, parameter, public :: NOAA_3_VTPR1_RADIANCE = 125 -integer, parameter, public :: NOAA_4_VTPR1_RADIANCE = 126 -integer, parameter, public :: NOAA_5_HIRS_RADIANCE = 127 -integer, parameter, public :: NOAA_5_MSU_TB = 128 -integer, parameter, public :: NOAA_5_AVHRR_RADIANCE = 129 -integer, parameter, public :: NOAA_6_HIRS_RADIANCE = 130 -integer, parameter, public :: NOAA_6_MSU_TB = 131 -integer, parameter, public :: NOAA_6_AVHRR_RADIANCE = 132 -integer, parameter, public :: NOAA_7_HIRS_RADIANCE = 133 -integer, parameter, public :: NOAA_7_MSU_TB = 134 -integer, parameter, public :: NOAA_7_AVHRR_RADIANCE = 135 -integer, parameter, public :: NOAA_8_HIRS_RADIANCE = 136 -integer, parameter, public :: NOAA_8_MSU_TB = 137 -integer, parameter, public :: NOAA_8_AVHRR_RADIANCE = 138 -integer, parameter, public :: NOAA_9_HIRS_RADIANCE = 139 -integer, parameter, public :: NOAA_9_MSU_TB = 140 -integer, parameter, public :: NOAA_9_AVHRR_RADIANCE = 141 -integer, parameter, public :: NOAA_10_HIRS_RADIANCE = 142 -integer, parameter, public :: NOAA_10_MSU_TB = 143 -integer, parameter, public :: NOAA_10_AVHRR_RADIANCE = 144 -integer, parameter, public :: NOAA_11_HIRS_RADIANCE = 145 -integer, parameter, public :: NOAA_11_MSU_TB = 146 -integer, parameter, public :: NOAA_11_AVHRR_RADIANCE = 147 -integer, parameter, public :: NOAA_12_HIRS_RADIANCE = 148 -integer, parameter, public :: NOAA_12_MSU_TB = 149 -integer, parameter, public :: NOAA_12_AVHRR_RADIANCE = 150 -integer, parameter, public :: NOAA_13_AVHRR_RADIANCE = 151 -integer, parameter, public :: NOAA_14_HIRS_RADIANCE = 152 -integer, parameter, public :: NOAA_14_MSU_TB = 153 -integer, parameter, public :: NOAA_14_AVHRR_RADIANCE = 154 -integer, parameter, public :: NOAA_15_HIRS_RADIANCE = 155 -integer, parameter, public :: NOAA_15_AMSUA_TB = 156 -integer, parameter, public :: NOAA_15_AMSUB_TB = 157 -integer, parameter, public :: NOAA_15_AVHRR_RADIANCE = 158 -integer, parameter, public :: NOAA_16_HIRS_RADIANCE = 159 -integer, parameter, public :: NOAA_16_AMSUA_TB = 160 -integer, parameter, public :: NOAA_16_AMSUB_TB = 161 -integer, parameter, public :: NOAA_16_AVHRR_RADIANCE = 162 -integer, parameter, public :: NOAA_17_HIRS_RADIANCE = 163 -integer, parameter, public :: NOAA_17_AMSUA_TB = 164 -integer, parameter, public :: NOAA_17_AMSUB_TB = 165 -integer, parameter, public :: NOAA_17_AVHRR_RADIANCE = 166 -integer, parameter, public :: NOAA_18_HIRS_RADIANCE = 167 -integer, parameter, public :: NOAA_18_AMSUA_TB = 168 -integer, parameter, public :: NOAA_18_AVHRR_RADIANCE = 169 -integer, parameter, public :: NOAA_18_MHS_TB = 170 -integer, parameter, public :: NOAA_19_HIRS_RADIANCE = 171 -integer, parameter, public :: NOAA_19_AMSUA_TB = 172 -integer, parameter, public :: NOAA_19_AVHRR_RADIANCE = 173 -integer, parameter, public :: NOAA_19_MHS_TB = 174 -integer, parameter, public :: NOAA_20_ATMS_TB = 175 -integer, parameter, public :: NOAA_20_VIIRS_RADIANCE = 176 -integer, parameter, public :: DMSP_8_SSMI_TB = 177 -integer, parameter, public :: DMSP_9_SSMI_TB = 178 -integer, parameter, public :: DMSP_10_SSMI_TB = 179 -integer, parameter, public :: DMSP_11_SSMI_TB = 180 -integer, parameter, public :: DMSP_11_SSMT2_TB = 181 -integer, parameter, public :: DMSP_12_SSMI_TB = 182 -integer, parameter, public :: DMSP_12_SSMT2_TB = 183 -integer, parameter, public :: DMSP_13_SSMI_TB = 184 -integer, parameter, public :: DMSP_14_SSMI_TB = 185 -integer, parameter, public :: DMSP_14_SSMT2_TB = 186 -integer, parameter, public :: DMSP_15_SSMI_TB = 187 -integer, parameter, public :: DMSP_15_SSMT2_TB = 188 -integer, parameter, public :: DMSP_16_SSMIS_TB = 189 -integer, parameter, public :: DMSP_17_SSMIS_TB = 190 -integer, parameter, public :: DMSP_18_SSMIS_TB = 191 -integer, parameter, public :: DMSP_19_SSMIS_TB = 192 -integer, parameter, public :: METEOSAT_1_MVIRI_RADIANCE = 193 -integer, parameter, public :: METEOSAT_2_MVIRI_RADIANCE = 194 -integer, parameter, public :: METEOSAT_3_MVIRI_RADIANCE = 195 -integer, parameter, public :: METEOSAT_4_MVIRI_RADIANCE = 196 -integer, parameter, public :: METEOSAT_5_MVIRI_RADIANCE = 197 -integer, parameter, public :: METEOSAT_6_MVIRI_RADIANCE = 198 -integer, parameter, public :: METEOSAT_7_MVIRI_RADIANCE = 199 -integer, parameter, public :: GOES_4_SOUNDER_RADIANCE = 200 -integer, parameter, public :: GOES_5_SOUNDER_RADIANCE = 201 -integer, parameter, public :: GOES_6_SOUNDER_RADIANCE = 202 -integer, parameter, public :: GOES_7_SOUNDER_RADIANCE = 203 -integer, parameter, public :: GOES_8_IMAGER_RADIANCE = 204 -integer, parameter, public :: GOES_8_SOUNDER_RADIANCE = 205 -integer, parameter, public :: GOES_9_IMAGER_RADIANCE = 206 -integer, parameter, public :: GOES_9_SOUNDER_RADIANCE = 207 -integer, parameter, public :: GOES_10_IMAGER_RADIANCE = 208 -integer, parameter, public :: GOES_10_SOUNDER_RADIANCE = 209 -integer, parameter, public :: GOES_11_IMAGER_RADIANCE = 210 -integer, parameter, public :: GOES_11_SOUNDER_RADIANCE = 211 -integer, parameter, public :: GOES_12_IMAGER_RADIANCE = 212 -integer, parameter, public :: GOES_12_SOUNDER_RADIANCE = 213 -integer, parameter, public :: GOES_13_IMAGER_RADIANCE = 214 -integer, parameter, public :: GOES_13_SOUNDER_RADIANCE = 215 -integer, parameter, public :: GOES_14_IMAGER_RADIANCE = 216 -integer, parameter, public :: GOES_14_SOUNDER_RADIANCE = 217 -integer, parameter, public :: GOES_15_IMAGER_RADIANCE = 218 -integer, parameter, public :: GOES_15_SOUNDER_RADIANCE = 219 -integer, parameter, public :: GOES_16_ABI_RADIANCE = 220 -integer, parameter, public :: GOES_17_ABI_RADIANCE = 221 -integer, parameter, public :: GOES_18_ABI_RADIANCE = 222 -integer, parameter, public :: GOES_19_ABI_RADIANCE = 223 -integer, parameter, public :: GMS_1_IMAGER_RADIANCE = 224 -integer, parameter, public :: GMS_2_IMAGER_RADIANCE = 225 -integer, parameter, public :: GMS_3_IMAGER_RADIANCE = 226 -integer, parameter, public :: GMS_4_IMAGER_RADIANCE = 227 -integer, parameter, public :: GMS_5_IMAGER_RADIANCE = 228 -integer, parameter, public :: FY2_2_VISSR_RADIANCE = 229 -integer, parameter, public :: FY2_3_VISSR_RADIANCE = 230 -integer, parameter, public :: FY2_4_VISSR_RADIANCE = 231 -integer, parameter, public :: FY2_5_VISSR_RADIANCE = 232 -integer, parameter, public :: FY2_7_VISSR_RADIANCE = 233 -integer, parameter, public :: TRMM_1_TMI_TB = 234 -integer, parameter, public :: ERS_1_ATSR_RADIANCE = 235 -integer, parameter, public :: ERS_1_MWR_TB = 236 -integer, parameter, public :: ERS_2_ATSR_RADIANCE = 237 -integer, parameter, public :: ERS_2_MWR_TB = 238 -integer, parameter, public :: EOS_1_MODIS_RADIANCE = 239 -integer, parameter, public :: EOS_1_ASTER_RADIANCE = 240 -integer, parameter, public :: EOS_2_AMSUA_TB = 241 -integer, parameter, public :: EOS_2_AIRS_RADIANCE = 242 -integer, parameter, public :: EOS_2_HSB_TB = 243 -integer, parameter, public :: EOS_2_MODIS_RADIANCE = 244 -integer, parameter, public :: EOS_2_AMSRE_TB = 245 -integer, parameter, public :: METOP_1_HIRS_RADIANCE = 246 -integer, parameter, public :: METOP_1_AMSUA_TB = 247 -integer, parameter, public :: METOP_1_AVHRR_RADIANCE = 248 -integer, parameter, public :: METOP_1_MHS_TB = 249 -integer, parameter, public :: METOP_2_HIRS_RADIANCE = 250 -integer, parameter, public :: METOP_2_AMSUA_TB = 251 -integer, parameter, public :: METOP_2_AVHRR_RADIANCE = 252 -integer, parameter, public :: METOP_2_MHS_TB = 253 -integer, parameter, public :: METOP_3_AVHRR_RADIANCE = 254 -integer, parameter, public :: ENVISAT_1_ATSR_RADIANCE = 255 -integer, parameter, public :: ENVISAT_1_MWR_TB = 256 -integer, parameter, public :: MSG_1_SEVIRI_RADIANCE = 257 -integer, parameter, public :: MSG_2_SEVIRI_RADIANCE = 258 -integer, parameter, public :: MSG_3_SEVIRI_RADIANCE = 259 -integer, parameter, public :: MSG_4_SEVIRI_RADIANCE = 260 -integer, parameter, public :: MSG_4_SEVIRI_TB = 261 -integer, parameter, public :: MSG_4_SEVIRI_BDRF = 262 -integer, parameter, public :: FY1_3_MVISR_RADIANCE = 263 -integer, parameter, public :: FY1_4_MVISR_RADIANCE = 264 -integer, parameter, public :: MTSAT_1_IMAGER_RADIANCE = 265 -integer, parameter, public :: MTSAT_2_IMAGER_RADIANCE = 266 -integer, parameter, public :: CORIOLIS_1_WINDSAT_TB = 267 -integer, parameter, public :: JPSS_0_ATMS_TB = 268 -integer, parameter, public :: JPSS_0_VIIRS_RADIANCE = 269 -integer, parameter, public :: SENTINEL3_1_SLSTR_RADIANCE = 270 -integer, parameter, public :: SENTINEL3_2_SLSTR_RADIANCE = 271 -integer, parameter, public :: MEGHATR_1_SAPHIR_TB = 272 -integer, parameter, public :: MEGHATR_1_MADRAS_TB = 273 -integer, parameter, public :: FY3_1_MWTS_TB = 274 -integer, parameter, public :: FY3_1_MWHS_TB = 275 -integer, parameter, public :: FY3_1_IRAS_RADIANCE = 276 -integer, parameter, public :: FY3_1_MWRI_TB = 277 -integer, parameter, public :: FY3_2_MWTS_TB = 278 -integer, parameter, public :: FY3_2_MWHS_TB = 279 -integer, parameter, public :: FY3_2_MWRI_TB = 280 -integer, parameter, public :: FY3_3_MWRI_TB = 281 -integer, parameter, public :: FY3_3_MWTS2_TB = 282 -integer, parameter, public :: FY3_3_MWHS2_TB = 283 -integer, parameter, public :: FY3_3_MERSI1_RADIANCE = 284 -integer, parameter, public :: FY3_4_MWRI_TB = 285 -integer, parameter, public :: FY3_4_MWTS2_TB = 286 -integer, parameter, public :: FY3_4_MWHS2_TB = 287 -integer, parameter, public :: FY3_4_MERSI2_RADIANCE = 288 -integer, parameter, public :: COMS_1_MI_RADIANCE = 289 -integer, parameter, public :: METEOR_M_1_MSUMR_RADIANCE = 290 -integer, parameter, public :: METEOR_M_2_MSUMR_RADIANCE = 291 -integer, parameter, public :: METEOR_M_2_MTVZAGY_TB = 292 -integer, parameter, public :: CALIPSO_1_IIR_RADIANCE = 293 -integer, parameter, public :: GCOM_W_1_AMSR2_TB = 294 -integer, parameter, public :: NIMBUS_3_MRIR_RADIANCE = 295 -integer, parameter, public :: NIMBUS_4_THIR_RADIANCE = 296 -integer, parameter, public :: NIMBUS_5_THIR_RADIANCE = 297 -integer, parameter, public :: NIMBUS_6_HIRS_RADIANCE = 298 -integer, parameter, public :: NIMBUS_6_SCAMS_TB = 299 -integer, parameter, public :: NIMBUS_6_THIR_RADIANCE = 300 -integer, parameter, public :: NIMBUS_7_SMMR_TB = 301 -integer, parameter, public :: NIMBUS_7_THIR_RADIANCE = 302 -integer, parameter, public :: HIMAWARI_8_AHI_RADIANCE = 303 -integer, parameter, public :: HIMAWARI_9_AHI_RADIANCE = 304 -integer, parameter, public :: MTG_1_FCI_RADIANCE = 305 -integer, parameter, public :: SARAL_1_ALTIKA_TB = 306 -integer, parameter, public :: METOPSG_1_ICI_TB = 307 -integer, parameter, public :: METOPSG_1_METIMAGE_RADIANCE = 308 -integer, parameter, public :: METOPSG_1_MWS_TB = 309 -integer, parameter, public :: METOPSG_1_MWI_TB = 310 -integer, parameter, public :: LANDSAT_4_TM_RADIANCE = 311 -integer, parameter, public :: LANDSAT_5_TM_RADIANCE = 312 -integer, parameter, public :: LANDSAT_7_TM_RADIANCE = 313 -integer, parameter, public :: LANDSAT_8_TIRS_RADIANCE = 314 -integer, parameter, public :: JASON_2_AMR_TB = 315 -integer, parameter, public :: GPM_1_GMI_TB = 316 -integer, parameter, public :: GPM_1_DPR_TB = 317 -integer, parameter, public :: INSAT3_4_IMAGER_RADIANCE = 318 -integer, parameter, public :: INSAT3_4_SOUNDER_RADIANCE = 319 -integer, parameter, public :: INSAT3_5_IMAGER_RADIANCE = 320 -integer, parameter, public :: INSAT3_5_SOUNDER_RADIANCE = 321 -integer, parameter, public :: TICFIRE_1_MBFIRI_RADIANCE = 322 -integer, parameter, public :: ISS_1_ECOSTRES_RADIANCE = 323 -integer, parameter, public :: HJ1_2_IRMSS_RADIANCE = 324 -integer, parameter, public :: GKOMPSAT2_1_AMI_RADIANCE = 325 -integer, parameter, public :: GCOM_C_1_SGLI_RADIANCE = 326 -integer, parameter, public :: SMOS_1_MIRAS_TB = 327 -integer, parameter, public :: ORS_6_COWVR_TB = 328 -integer, parameter, public :: FY4_1_AGRI_RADIANCE = 329 -integer, parameter, public :: TROPICS_0_TROPICS_TB = 330 -integer, parameter, public :: GF5_1_VIMS_RADIANCE = 331 -integer, parameter, public :: HY2_1_MWRI_TB = 332 -integer, parameter, public :: CLOUDSAT_1_CPR_TB = 333 - - -integer, parameter, public :: MAX_DEFINED_TYPES_OF_OBS = 333 - -!--------------------------------------------------------------------------- - -!---------------------------------------------------------------------------- - -character(len=*), parameter :: source = 'DEFAULT_obs_def_mod.F90' - -! integer, parameters: max_defined_types_of_obs, max_defined_quantities -! generated and inserted by preprocess. - -logical, save :: module_initialized = .false. - -character(len=512) :: msg_string, msg_string1 - -! @todo FIXME: what is the right len for a units and -! other name/value pair strings? -integer, parameter :: namelen = 256 -integer, parameter :: valuelen = 256 - -integer :: num_types_assimilate, num_types_evaluate -integer :: num_types_use_precomputed_FOs - -! Map from values of type in a TOC (e.g. the start of an obs_seq file) -! to the type index in this module. -! Initially, these are undefined and have values -1. -! In each entry, the toc_type_index value is the index in the table of -! contents (usually an input obs_sequence file), and the mod_type_index -! is the current type value in this module. - -type toc_mod_type_map_type - integer :: toc_type_index(max_defined_types_of_obs) = -1 - integer :: mod_type_index(max_defined_types_of_obs) = -1 -end type toc_mod_type_map_type - -type(toc_mod_type_map_type) :: toc_mod_type_map - -! old: -!integer :: map(2, max_defined_types_of_obs) = -1 - -! An observation type links together a unique integer index, -! a character string which matches the integer parameter name, -! what quantity this type is associated with, -! and whether observations of this type should be assimilated, -! evaluated, or neither. -! -! Name lengths are limited to 32 characters by compiler -! restrictions on the length of parameter identifiers. -type obs_type_type - integer :: index = -1 - character(len=obstypelength) :: name = '' - integer :: quantity = -1 - logical :: assimilate = .false. - logical :: evaluate = .false. - logical :: use_precomputed_FO = .false. -end type obs_type_type - -type(obs_type_type) :: obs_type_info(max_defined_types_of_obs) - -! An observation quantity type stores a unique integer index, -! a character string which matches the integer parameter name, -! and name/value pairs of metadata for this quantity. - -integer, parameter :: MAX_ITEMS = 50 - -type obs_qty_type - integer :: index = -1 - character(len=obstypelength) :: name = '' - integer :: nitems = 0 - character(len=namelen) :: itemname(MAX_ITEMS) = '' - character(len=valuelen) :: itemvalue(MAX_ITEMS) = '' -end type obs_qty_type - -! the raw quantity uses index 0, so this needs to match. -type(obs_qty_type) :: obs_qty_info(0:max_defined_quantities) - - -! Namelist array to turn on any requested observation types -character(len=obstypelength) :: assimilate_these_obs_types(max_defined_types_of_obs) = 'null' -character(len=obstypelength) :: evaluate_these_obs_types(max_defined_types_of_obs) = 'null' -character(len=obstypelength) :: use_precomputed_FOs_these_obs_types(max_defined_types_of_obs) = 'null' - - -! namelist /obs_qty_nml/ ... -namelist /obs_kind_nml/ assimilate_these_obs_types, & - evaluate_these_obs_types, & - use_precomputed_FOs_these_obs_types - -contains - -!---------------------------------------------------------------------------- - -subroutine initialize_module() - -integer :: iunit, io, i, j -character(len = 169) :: err_string -character(len=*), parameter :: routine = 'initialize_module' - -module_initialized = .true. - -! Read the namelist entry -call find_namelist_in_file("input.nml", "obs_kind_nml", iunit) -read(iunit, nml = obs_kind_nml, iostat = io) -call check_namelist_read(iunit, io, "obs_kind_nml") - - -!---------------------------------------------------------------------------- - -! These lists are autogenerated by the 'preprocess' program. -! -! To add quantities, edit the appropriate xxx_quantity_mod.f90 files -! and then add them to the 'quantity_files' variable in the -! &preprocess_nml namelist in the input.nml file in the current directory. -! -! To add types, edit the obs_def_xxx_mod.f90 files and then add them -! to the 'obs_type_files' variable of the &preprocess_nml namelist -! in the input.nml file in the current directory. -! -! Associate integer parameter names with a string of the same name. -! Also associate types of obs with the quantity. - - obs_qty_info( 0 )%index = 0 - obs_qty_info( 0 )%name = "QTY_STATE_VARIABLE" - obs_qty_info( 0 )%nitems = 1 - obs_qty_info( 0 )%itemname( 1 ) = "desc" - obs_qty_info( 0 )%itemvalue( 1 ) = "basic item in a state" - - obs_qty_info( 1 )%index = 1 - obs_qty_info( 1 )%name = "QTY_U_WIND_COMPONENT" - obs_qty_info( 1 )%nitems = 0 - - obs_qty_info( 2 )%index = 2 - obs_qty_info( 2 )%name = "QTY_V_WIND_COMPONENT" - obs_qty_info( 2 )%nitems = 0 - - obs_qty_info( 3 )%index = 3 - obs_qty_info( 3 )%name = "QTY_SURFACE_PRESSURE" - obs_qty_info( 3 )%nitems = 0 - - obs_qty_info( 4 )%index = 4 - obs_qty_info( 4 )%name = "QTY_TEMPERATURE" - obs_qty_info( 4 )%nitems = 0 - - obs_qty_info( 5 )%index = 5 - obs_qty_info( 5 )%name = "QTY_SPECIFIC_HUMIDITY" - obs_qty_info( 5 )%nitems = 0 - - obs_qty_info( 6 )%index = 6 - obs_qty_info( 6 )%name = "QTY_PRESSURE" - obs_qty_info( 6 )%nitems = 0 - - obs_qty_info( 7 )%index = 7 - obs_qty_info( 7 )%name = "QTY_VERTICAL_VELOCITY" - obs_qty_info( 7 )%nitems = 0 - - obs_qty_info( 8 )%index = 8 - obs_qty_info( 8 )%name = "QTY_RAINWATER_MIXING_RATIO" - obs_qty_info( 8 )%nitems = 0 - - obs_qty_info( 9 )%index = 9 - obs_qty_info( 9 )%name = "QTY_DEWPOINT" - obs_qty_info( 9 )%nitems = 0 - - obs_qty_info( 10 )%index = 10 - obs_qty_info( 10 )%name = "QTY_DENSITY" - obs_qty_info( 10 )%nitems = 0 - - obs_qty_info( 11 )%index = 11 - obs_qty_info( 11 )%name = "QTY_MEAN_SOURCE" - obs_qty_info( 11 )%nitems = 0 - - obs_qty_info( 12 )%index = 12 - obs_qty_info( 12 )%name = "QTY_VELOCITY" - obs_qty_info( 12 )%nitems = 0 - - obs_qty_info( 13 )%index = 13 - obs_qty_info( 13 )%name = "QTY_RADAR_REFLECTIVITY" - obs_qty_info( 13 )%nitems = 0 - - obs_qty_info( 14 )%index = 14 - obs_qty_info( 14 )%name = "QTY_GRAUPEL_MIXING_RATIO" - obs_qty_info( 14 )%nitems = 0 - - obs_qty_info( 15 )%index = 15 - obs_qty_info( 15 )%name = "QTY_SNOW_MIXING_RATIO" - obs_qty_info( 15 )%nitems = 0 - - obs_qty_info( 16 )%index = 16 - obs_qty_info( 16 )%name = "QTY_GPSRO" - obs_qty_info( 16 )%nitems = 0 - - obs_qty_info( 17 )%index = 17 - obs_qty_info( 17 )%name = "QTY_CLOUD_LIQUID_WATER" - obs_qty_info( 17 )%nitems = 0 - - obs_qty_info( 18 )%index = 18 - obs_qty_info( 18 )%name = "QTY_CLOUD_ICE" - obs_qty_info( 18 )%nitems = 0 - - obs_qty_info( 19 )%index = 19 - obs_qty_info( 19 )%name = "QTY_CONDENSATIONAL_HEATING" - obs_qty_info( 19 )%nitems = 0 - - obs_qty_info( 20 )%index = 20 - obs_qty_info( 20 )%name = "QTY_VAPOR_MIXING_RATIO" - obs_qty_info( 20 )%nitems = 0 - - obs_qty_info( 21 )%index = 21 - obs_qty_info( 21 )%name = "QTY_ICE_NUMBER_CONCENTRATION" - obs_qty_info( 21 )%nitems = 0 - - obs_qty_info( 22 )%index = 22 - obs_qty_info( 22 )%name = "QTY_GEOPOTENTIAL_HEIGHT" - obs_qty_info( 22 )%nitems = 0 - - obs_qty_info( 23 )%index = 23 - obs_qty_info( 23 )%name = "QTY_POTENTIAL_TEMPERATURE" - obs_qty_info( 23 )%nitems = 0 - - obs_qty_info( 24 )%index = 24 - obs_qty_info( 24 )%name = "QTY_SOIL_MOISTURE" - obs_qty_info( 24 )%nitems = 0 - - obs_qty_info( 25 )%index = 25 - obs_qty_info( 25 )%name = "QTY_SOURCE_PHASE" - obs_qty_info( 25 )%nitems = 0 - - obs_qty_info( 26 )%index = 26 - obs_qty_info( 26 )%name = "QTY_SURFACE_ELEVATION" - obs_qty_info( 26 )%nitems = 0 - - obs_qty_info( 27 )%index = 27 - obs_qty_info( 27 )%name = "QTY_GRAV_WAVE_DRAG_EFFIC" - obs_qty_info( 27 )%nitems = 0 - - obs_qty_info( 28 )%index = 28 - obs_qty_info( 28 )%name = "QTY_GRAV_WAVE_STRESS_FRACTION" - obs_qty_info( 28 )%nitems = 0 - - obs_qty_info( 29 )%index = 29 - obs_qty_info( 29 )%name = "QTY_POWER_WEIGHTED_FALL_SPEED" - obs_qty_info( 29 )%nitems = 0 - - obs_qty_info( 30 )%index = 30 - obs_qty_info( 30 )%name = "QTY_CLOUDWATER_MIXING_RATIO" - obs_qty_info( 30 )%nitems = 0 - - obs_qty_info( 31 )%index = 31 - obs_qty_info( 31 )%name = "QTY_ICE_MIXING_RATIO" - obs_qty_info( 31 )%nitems = 0 - - obs_qty_info( 32 )%index = 32 - obs_qty_info( 32 )%name = "QTY_DROPLET_NUMBER_CONCENTR" - obs_qty_info( 32 )%nitems = 0 - - obs_qty_info( 33 )%index = 33 - obs_qty_info( 33 )%name = "QTY_SNOW_NUMBER_CONCENTR" - obs_qty_info( 33 )%nitems = 0 - - obs_qty_info( 34 )%index = 34 - obs_qty_info( 34 )%name = "QTY_RAIN_NUMBER_CONCENTR" - obs_qty_info( 34 )%nitems = 0 - - obs_qty_info( 35 )%index = 35 - obs_qty_info( 35 )%name = "QTY_GRAUPEL_NUMBER_CONCENTR" - obs_qty_info( 35 )%nitems = 0 - - obs_qty_info( 36 )%index = 36 - obs_qty_info( 36 )%name = "QTY_CLOUD_FRACTION" - obs_qty_info( 36 )%nitems = 0 - - obs_qty_info( 37 )%index = 37 - obs_qty_info( 37 )%name = "QTY_ICE_FRACTION" - obs_qty_info( 37 )%nitems = 0 - - obs_qty_info( 38 )%index = 38 - obs_qty_info( 38 )%name = "QTY_RELATIVE_HUMIDITY" - obs_qty_info( 38 )%nitems = 0 - - obs_qty_info( 39 )%index = 39 - obs_qty_info( 39 )%name = "QTY_1D_PARAMETER" - obs_qty_info( 39 )%nitems = 0 - - obs_qty_info( 40 )%index = 40 - obs_qty_info( 40 )%name = "QTY_2D_PARAMETER" - obs_qty_info( 40 )%nitems = 0 - - obs_qty_info( 41 )%index = 41 - obs_qty_info( 41 )%name = "QTY_3D_PARAMETER" - obs_qty_info( 41 )%nitems = 0 - - obs_qty_info( 42 )%index = 42 - obs_qty_info( 42 )%name = "QTY_ALTIMETER_TENDENCY" - obs_qty_info( 42 )%nitems = 0 - - obs_qty_info( 43 )%index = 43 - obs_qty_info( 43 )%name = "QTY_PRECIPITABLE_WATER" - obs_qty_info( 43 )%nitems = 0 - - obs_qty_info( 44 )%index = 44 - obs_qty_info( 44 )%name = "QTY_OCCULTATION_REFRACTIVITY" - obs_qty_info( 44 )%nitems = 0 - - obs_qty_info( 45 )%index = 45 - obs_qty_info( 45 )%name = "QTY_OCCULTATION_EXCESSPHASE" - obs_qty_info( 45 )%nitems = 0 - - obs_qty_info( 46 )%index = 46 - obs_qty_info( 46 )%name = "QTY_GEOMETRIC_HEIGHT" - obs_qty_info( 46 )%nitems = 0 - - obs_qty_info( 47 )%index = 47 - obs_qty_info( 47 )%name = "QTY_INFRARED_RADIANCE" - obs_qty_info( 47 )%nitems = 0 - - obs_qty_info( 48 )%index = 48 - obs_qty_info( 48 )%name = "QTY_INFRARED_BRIGHT_TEMP" - obs_qty_info( 48 )%nitems = 0 - - obs_qty_info( 49 )%index = 49 - obs_qty_info( 49 )%name = "QTY_LANDMASK" - obs_qty_info( 49 )%nitems = 0 - - obs_qty_info( 50 )%index = 50 - obs_qty_info( 50 )%name = "QTY_EDGE_NORMAL_SPEED" - obs_qty_info( 50 )%nitems = 0 - - obs_qty_info( 51 )%index = 51 - obs_qty_info( 51 )%name = "QTY_CLW_PATH" - obs_qty_info( 51 )%nitems = 0 - - obs_qty_info( 52 )%index = 52 - obs_qty_info( 52 )%name = "QTY_CWP_PATH" - obs_qty_info( 52 )%nitems = 0 - - obs_qty_info( 53 )%index = 53 - obs_qty_info( 53 )%name = "QTY_CWP_PATH_ZERO" - obs_qty_info( 53 )%nitems = 0 - - obs_qty_info( 54 )%index = 54 - obs_qty_info( 54 )%name = "QTY_WIND_TURBINE_POWER" - obs_qty_info( 54 )%nitems = 0 - - obs_qty_info( 55 )%index = 55 - obs_qty_info( 55 )%name = "QTY_2M_SPECIFIC_HUMIDITY" - obs_qty_info( 55 )%nitems = 0 - - obs_qty_info( 56 )%index = 56 - obs_qty_info( 56 )%name = "QTY_2M_TEMPERATURE" - obs_qty_info( 56 )%nitems = 0 - - obs_qty_info( 57 )%index = 57 - obs_qty_info( 57 )%name = "QTY_10M_U_WIND_COMPONENT" - obs_qty_info( 57 )%nitems = 0 - - obs_qty_info( 58 )%index = 58 - obs_qty_info( 58 )%name = "QTY_10M_V_WIND_COMPONENT" - obs_qty_info( 58 )%nitems = 0 - - obs_qty_info( 59 )%index = 59 - obs_qty_info( 59 )%name = "QTY_SKIN_TEMPERATURE" - obs_qty_info( 59 )%nitems = 0 - - obs_qty_info( 60 )%index = 60 - obs_qty_info( 60 )%name = "QTY_NADIR_RADIANCE" - obs_qty_info( 60 )%nitems = 0 - - obs_qty_info( 61 )%index = 61 - obs_qty_info( 61 )%name = "QTY_TRACER_1_MIXING_RATIO" - obs_qty_info( 61 )%nitems = 0 - - obs_qty_info( 62 )%index = 62 - obs_qty_info( 62 )%name = "QTY_TRACER_2_MIXING_RATIO" - obs_qty_info( 62 )%nitems = 0 - - obs_qty_info( 63 )%index = 63 - obs_qty_info( 63 )%name = "QTY_TRACER_CONCENTRATION" - obs_qty_info( 63 )%nitems = 0 - - obs_qty_info( 64 )%index = 64 - obs_qty_info( 64 )%name = "QTY_TRACER_SOURCE" - obs_qty_info( 64 )%nitems = 0 - - obs_qty_info( 65 )%index = 65 - obs_qty_info( 65 )%name = "QTY_SOIL_TEMPERATURE" - obs_qty_info( 65 )%nitems = 0 - - obs_qty_info( 66 )%index = 66 - obs_qty_info( 66 )%name = "QTY_SOIL_LIQUID_WATER" - obs_qty_info( 66 )%nitems = 0 - - obs_qty_info( 67 )%index = 67 - obs_qty_info( 67 )%name = "QTY_VERTICAL_VORTICITY" - obs_qty_info( 67 )%nitems = 0 - - obs_qty_info( 68 )%index = 68 - obs_qty_info( 68 )%name = "QTY_SURFACE_ALBEDO" - obs_qty_info( 68 )%nitems = 0 - - obs_qty_info( 69 )%index = 69 - obs_qty_info( 69 )%name = "QTY_SURFACE_EMISSIVITY" - obs_qty_info( 69 )%nitems = 0 - - obs_qty_info( 70 )%index = 70 - obs_qty_info( 70 )%name = "QTY_DUST_OPACITY_7MB" - obs_qty_info( 70 )%nitems = 0 - - obs_qty_info( 71 )%index = 71 - obs_qty_info( 71 )%name = "QTY_THC" - obs_qty_info( 71 )%nitems = 0 - - obs_qty_info( 72 )%index = 72 - obs_qty_info( 72 )%name = "QTY_VORTEX_LON" - obs_qty_info( 72 )%nitems = 0 - - obs_qty_info( 73 )%index = 73 - obs_qty_info( 73 )%name = "QTY_VORTEX_LAT" - obs_qty_info( 73 )%nitems = 0 - - obs_qty_info( 74 )%index = 74 - obs_qty_info( 74 )%name = "QTY_VORTEX_PMIN" - obs_qty_info( 74 )%nitems = 0 - - obs_qty_info( 75 )%index = 75 - obs_qty_info( 75 )%name = "QTY_VORTEX_WMAX" - obs_qty_info( 75 )%nitems = 0 - - obs_qty_info( 76 )%index = 76 - obs_qty_info( 76 )%name = "QTY_EXNER_FUNCTION" - obs_qty_info( 76 )%nitems = 0 - - obs_qty_info( 77 )%index = 77 - obs_qty_info( 77 )%name = "QTY_TURBULENT_KINETIC_ENERGY" - obs_qty_info( 77 )%nitems = 0 - - obs_qty_info( 78 )%index = 78 - obs_qty_info( 78 )%name = "QTY_TOTAL_PRECIPITABLE_WATER" - obs_qty_info( 78 )%nitems = 0 - - obs_qty_info( 79 )%index = 79 - obs_qty_info( 79 )%name = "QTY_VERTLEVEL" - obs_qty_info( 79 )%nitems = 0 - - obs_qty_info( 80 )%index = 80 - obs_qty_info( 80 )%name = "QTY_MICROWAVE_BRIGHT_TEMP" - obs_qty_info( 80 )%nitems = 0 - - obs_qty_info( 81 )%index = 81 - obs_qty_info( 81 )%name = "QTY_INTEGRATED_SULFATE" - obs_qty_info( 81 )%nitems = 0 - - obs_qty_info( 82 )%index = 82 - obs_qty_info( 82 )%name = "QTY_INTEGRATED_DUST" - obs_qty_info( 82 )%nitems = 0 - - obs_qty_info( 83 )%index = 83 - obs_qty_info( 83 )%name = "QTY_INTEGRATED_SMOKE" - obs_qty_info( 83 )%nitems = 0 - - obs_qty_info( 84 )%index = 84 - obs_qty_info( 84 )%name = "QTY_INTEGRATED_SEASALT" - obs_qty_info( 84 )%nitems = 0 - - obs_qty_info( 85 )%index = 85 - obs_qty_info( 85 )%name = "QTY_INTEGRATED_AOD" - obs_qty_info( 85 )%nitems = 0 - - obs_qty_info( 86 )%index = 86 - obs_qty_info( 86 )%name = "QTY_SO2" - obs_qty_info( 86 )%nitems = 0 - - obs_qty_info( 87 )%index = 87 - obs_qty_info( 87 )%name = "QTY_SULFATE" - obs_qty_info( 87 )%nitems = 0 - - obs_qty_info( 88 )%index = 88 - obs_qty_info( 88 )%name = "QTY_DUST" - obs_qty_info( 88 )%nitems = 0 - - obs_qty_info( 89 )%index = 89 - obs_qty_info( 89 )%name = "QTY_SMOKE" - obs_qty_info( 89 )%nitems = 0 - - obs_qty_info( 90 )%index = 90 - obs_qty_info( 90 )%name = "QTY_SEASALT" - obs_qty_info( 90 )%nitems = 0 - - obs_qty_info( 91 )%index = 91 - obs_qty_info( 91 )%name = "QTY_HAIL_MIXING_RATIO" - obs_qty_info( 91 )%nitems = 0 - - obs_qty_info( 92 )%index = 92 - obs_qty_info( 92 )%name = "QTY_HAIL_NUMBER_CONCENTR" - obs_qty_info( 92 )%nitems = 0 - - obs_qty_info( 93 )%index = 93 - obs_qty_info( 93 )%name = "QTY_GRAUPEL_VOLUME" - obs_qty_info( 93 )%nitems = 0 - - obs_qty_info( 94 )%index = 94 - obs_qty_info( 94 )%name = "QTY_HAIL_VOLUME" - obs_qty_info( 94 )%nitems = 0 - - obs_qty_info( 95 )%index = 95 - obs_qty_info( 95 )%name = "QTY_DIFFERENTIAL_REFLECTIVITY" - obs_qty_info( 95 )%nitems = 0 - - obs_qty_info( 96 )%index = 96 - obs_qty_info( 96 )%name = "QTY_SPECIFIC_DIFFERENTIAL_PHASE" - obs_qty_info( 96 )%nitems = 0 - - obs_qty_info( 97 )%index = 97 - obs_qty_info( 97 )%name = "QTY_FLASH_RATE_2D" - obs_qty_info( 97 )%nitems = 0 - - obs_qty_info( 98 )%index = 98 - obs_qty_info( 98 )%name = "QTY_RADIANCE" - obs_qty_info( 98 )%nitems = 0 - - obs_qty_info( 99 )%index = 99 - obs_qty_info( 99 )%name = "QTY_BRIGHTNESS_TEMPERATURE" - obs_qty_info( 99 )%nitems = 0 - - obs_qty_info( 100 )%index = 100 - obs_qty_info( 100 )%name = "QTY_BI_DIRECTIONAL_REFLECTANCE" - obs_qty_info( 100 )%nitems = 0 - - obs_qty_info( 101 )%index = 101 - obs_qty_info( 101 )%name = "QTY_SURFACE_TYPE" - obs_qty_info( 101 )%nitems = 0 - - obs_qty_info( 102 )%index = 102 - obs_qty_info( 102 )%name = "QTY_WIND_FETCH" - obs_qty_info( 102 )%nitems = 0 - - obs_qty_info( 103 )%index = 103 - obs_qty_info( 103 )%name = "QTY_WATER_TYPE" - obs_qty_info( 103 )%nitems = 0 - - obs_qty_info( 104 )%index = 104 - obs_qty_info( 104 )%name = "QTY_FOAM_FRAC" - obs_qty_info( 104 )%nitems = 0 - - obs_qty_info( 105 )%index = 105 - obs_qty_info( 105 )%name = "QTY_INSOLUBLE_AER" - obs_qty_info( 105 )%nitems = 0 - - obs_qty_info( 106 )%index = 106 - obs_qty_info( 106 )%name = "QTY_H2O_SOLUBLE_AER" - obs_qty_info( 106 )%nitems = 0 - - obs_qty_info( 107 )%index = 107 - obs_qty_info( 107 )%name = "QTY_SOOT" - obs_qty_info( 107 )%nitems = 0 - - obs_qty_info( 108 )%index = 108 - obs_qty_info( 108 )%name = "QTY_SEASALT_ACCUM" - obs_qty_info( 108 )%nitems = 0 - - obs_qty_info( 109 )%index = 109 - obs_qty_info( 109 )%name = "QTY_SEASALT_COARSE" - obs_qty_info( 109 )%nitems = 0 - - obs_qty_info( 110 )%index = 110 - obs_qty_info( 110 )%name = "QTY_MINERAL_NUCLEUS" - obs_qty_info( 110 )%nitems = 0 - - obs_qty_info( 111 )%index = 111 - obs_qty_info( 111 )%name = "QTY_MINERAL_ACCUM" - obs_qty_info( 111 )%nitems = 0 - - obs_qty_info( 112 )%index = 112 - obs_qty_info( 112 )%name = "QTY_MINERAL_COARSE" - obs_qty_info( 112 )%nitems = 0 - - obs_qty_info( 113 )%index = 113 - obs_qty_info( 113 )%name = "QTY_MINERAL_TRANSPORTED" - obs_qty_info( 113 )%nitems = 0 - - obs_qty_info( 114 )%index = 114 - obs_qty_info( 114 )%name = "QTY_SULPHATED_DROPS" - obs_qty_info( 114 )%nitems = 0 - - obs_qty_info( 115 )%index = 115 - obs_qty_info( 115 )%name = "QTY_VOLCANIC_ASH" - obs_qty_info( 115 )%nitems = 0 - - obs_qty_info( 116 )%index = 116 - obs_qty_info( 116 )%name = "QTY_NEW_VOLCANIC_ASH" - obs_qty_info( 116 )%nitems = 0 - - obs_qty_info( 117 )%index = 117 - obs_qty_info( 117 )%name = "QTY_ASIAN_DUST" - obs_qty_info( 117 )%nitems = 0 - - obs_qty_info( 118 )%index = 118 - obs_qty_info( 118 )%name = "QTY_BLACK_CARBON" - obs_qty_info( 118 )%nitems = 0 - - obs_qty_info( 119 )%index = 119 - obs_qty_info( 119 )%name = "QTY_DUST_BIN1" - obs_qty_info( 119 )%nitems = 0 - - obs_qty_info( 120 )%index = 120 - obs_qty_info( 120 )%name = "QTY_DUST_BIN2" - obs_qty_info( 120 )%nitems = 0 - - obs_qty_info( 121 )%index = 121 - obs_qty_info( 121 )%name = "QTY_DUST_BIN3" - obs_qty_info( 121 )%nitems = 0 - - obs_qty_info( 122 )%index = 122 - obs_qty_info( 122 )%name = "QTY_AMMONIUM_SULPHATE" - obs_qty_info( 122 )%nitems = 0 - - obs_qty_info( 123 )%index = 123 - obs_qty_info( 123 )%name = "QTY_SEA_SALT_BIN1" - obs_qty_info( 123 )%nitems = 0 - - obs_qty_info( 124 )%index = 124 - obs_qty_info( 124 )%name = "QTY_SEA_SALT_BIN2" - obs_qty_info( 124 )%nitems = 0 - - obs_qty_info( 125 )%index = 125 - obs_qty_info( 125 )%name = "QTY_SEA_SALT_BIN3" - obs_qty_info( 125 )%nitems = 0 - - obs_qty_info( 126 )%index = 126 - obs_qty_info( 126 )%name = "QTY_HYDROPHILIC_ORGANIC_MATTER" - obs_qty_info( 126 )%nitems = 0 - - obs_qty_info( 127 )%index = 127 - obs_qty_info( 127 )%name = "QTY_CLOUDWATER_DE" - obs_qty_info( 127 )%nitems = 0 - - obs_qty_info( 128 )%index = 128 - obs_qty_info( 128 )%name = "QTY_CLOUD_ICE_DE" - obs_qty_info( 128 )%nitems = 0 - - obs_qty_info( 129 )%index = 129 - obs_qty_info( 129 )%name = "QTY_COLUMN_CLOUD_FRAC" - obs_qty_info( 129 )%nitems = 0 - - obs_qty_info( 130 )%index = 130 - obs_qty_info( 130 )%name = "QTY_CLOUD_TOP_PRESSURE" - obs_qty_info( 130 )%nitems = 0 - - obs_qty_info( 131 )%index = 131 - obs_qty_info( 131 )%name = "QTY_ABSOLUTE_HUMIDITY" - obs_qty_info( 131 )%nitems = 0 - - obs_qty_info( 132 )%index = 132 - obs_qty_info( 132 )%name = "QTY_O3" - obs_qty_info( 132 )%nitems = 0 - - obs_qty_info( 133 )%index = 133 - obs_qty_info( 133 )%name = "QTY_CO2" - obs_qty_info( 133 )%nitems = 0 - - obs_qty_info( 134 )%index = 134 - obs_qty_info( 134 )%name = "QTY_N2O" - obs_qty_info( 134 )%nitems = 0 - - obs_qty_info( 135 )%index = 135 - obs_qty_info( 135 )%name = "QTY_CH4" - obs_qty_info( 135 )%nitems = 0 - - obs_qty_info( 136 )%index = 136 - obs_qty_info( 136 )%name = "QTY_CO" - obs_qty_info( 136 )%nitems = 0 - - obs_qty_info( 137 )%index = 137 - obs_qty_info( 137 )%name = "QTY_SALINITY" - obs_qty_info( 137 )%nitems = 0 - - obs_qty_info( 138 )%index = 138 - obs_qty_info( 138 )%name = "QTY_SNOWCOVER_FRAC" - obs_qty_info( 138 )%nitems = 0 - - -obs_type_info( 1) = obs_type_type(RADIOSONDE_U_WIND_COMPONENT, & - 'RADIOSONDE_U_WIND_COMPONENT', QTY_U_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 2) = obs_type_type(RADIOSONDE_V_WIND_COMPONENT, & - 'RADIOSONDE_V_WIND_COMPONENT', QTY_V_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 3) = obs_type_type(RADIOSONDE_GEOPOTENTIAL_HGT, & - 'RADIOSONDE_GEOPOTENTIAL_HGT', QTY_GEOPOTENTIAL_HEIGHT, .false., .false., .false.) -obs_type_info( 4) = obs_type_type(RADIOSONDE_SURFACE_PRESSURE, & - 'RADIOSONDE_SURFACE_PRESSURE', QTY_SURFACE_PRESSURE, .false., .false., .false.) -obs_type_info( 5) = obs_type_type(RADIOSONDE_TEMPERATURE, & - 'RADIOSONDE_TEMPERATURE', QTY_TEMPERATURE, .false., .false., .false.) -obs_type_info( 6) = obs_type_type(RADIOSONDE_SPECIFIC_HUMIDITY, & - 'RADIOSONDE_SPECIFIC_HUMIDITY', QTY_SPECIFIC_HUMIDITY, .false., .false., .false.) -obs_type_info( 7) = obs_type_type(DROPSONDE_U_WIND_COMPONENT, & - 'DROPSONDE_U_WIND_COMPONENT', QTY_U_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 8) = obs_type_type(DROPSONDE_V_WIND_COMPONENT, & - 'DROPSONDE_V_WIND_COMPONENT', QTY_V_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 9) = obs_type_type(DROPSONDE_SURFACE_PRESSURE, & - 'DROPSONDE_SURFACE_PRESSURE', QTY_SURFACE_PRESSURE, .false., .false., .false.) -obs_type_info( 10) = obs_type_type(DROPSONDE_TEMPERATURE, & - 'DROPSONDE_TEMPERATURE', QTY_TEMPERATURE, .false., .false., .false.) -obs_type_info( 11) = obs_type_type(DROPSONDE_SPECIFIC_HUMIDITY, & - 'DROPSONDE_SPECIFIC_HUMIDITY', QTY_SPECIFIC_HUMIDITY, .false., .false., .false.) -obs_type_info( 12) = obs_type_type(AIRCRAFT_U_WIND_COMPONENT, & - 'AIRCRAFT_U_WIND_COMPONENT', QTY_U_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 13) = obs_type_type(AIRCRAFT_V_WIND_COMPONENT, & - 'AIRCRAFT_V_WIND_COMPONENT', QTY_V_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 14) = obs_type_type(AIRCRAFT_TEMPERATURE, & - 'AIRCRAFT_TEMPERATURE', QTY_TEMPERATURE, .false., .false., .false.) -obs_type_info( 15) = obs_type_type(AIRCRAFT_SPECIFIC_HUMIDITY, & - 'AIRCRAFT_SPECIFIC_HUMIDITY', QTY_SPECIFIC_HUMIDITY, .false., .false., .false.) -obs_type_info( 16) = obs_type_type(ACARS_U_WIND_COMPONENT, & - 'ACARS_U_WIND_COMPONENT', QTY_U_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 17) = obs_type_type(ACARS_V_WIND_COMPONENT, & - 'ACARS_V_WIND_COMPONENT', QTY_V_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 18) = obs_type_type(ACARS_TEMPERATURE, & - 'ACARS_TEMPERATURE', QTY_TEMPERATURE, .false., .false., .false.) -obs_type_info( 19) = obs_type_type(ACARS_SPECIFIC_HUMIDITY, & - 'ACARS_SPECIFIC_HUMIDITY', QTY_SPECIFIC_HUMIDITY, .false., .false., .false.) -obs_type_info( 20) = obs_type_type(MARINE_SFC_U_WIND_COMPONENT, & - 'MARINE_SFC_U_WIND_COMPONENT', QTY_U_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 21) = obs_type_type(MARINE_SFC_V_WIND_COMPONENT, & - 'MARINE_SFC_V_WIND_COMPONENT', QTY_V_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 22) = obs_type_type(MARINE_SFC_TEMPERATURE, & - 'MARINE_SFC_TEMPERATURE', QTY_TEMPERATURE, .false., .false., .false.) -obs_type_info( 23) = obs_type_type(MARINE_SFC_SPECIFIC_HUMIDITY, & - 'MARINE_SFC_SPECIFIC_HUMIDITY', QTY_SPECIFIC_HUMIDITY, .false., .false., .false.) -obs_type_info( 24) = obs_type_type(MARINE_SFC_PRESSURE, & - 'MARINE_SFC_PRESSURE', QTY_SURFACE_PRESSURE, .false., .false., .false.) -obs_type_info( 25) = obs_type_type(LAND_SFC_U_WIND_COMPONENT, & - 'LAND_SFC_U_WIND_COMPONENT', QTY_U_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 26) = obs_type_type(LAND_SFC_V_WIND_COMPONENT, & - 'LAND_SFC_V_WIND_COMPONENT', QTY_V_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 27) = obs_type_type(LAND_SFC_TEMPERATURE, & - 'LAND_SFC_TEMPERATURE', QTY_TEMPERATURE, .false., .false., .false.) -obs_type_info( 28) = obs_type_type(LAND_SFC_SPECIFIC_HUMIDITY, & - 'LAND_SFC_SPECIFIC_HUMIDITY', QTY_SPECIFIC_HUMIDITY, .false., .false., .false.) -obs_type_info( 29) = obs_type_type(LAND_SFC_PRESSURE, & - 'LAND_SFC_PRESSURE', QTY_SURFACE_PRESSURE, .false., .false., .false.) -obs_type_info( 30) = obs_type_type(SAT_U_WIND_COMPONENT, & - 'SAT_U_WIND_COMPONENT', QTY_U_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 31) = obs_type_type(SAT_V_WIND_COMPONENT, & - 'SAT_V_WIND_COMPONENT', QTY_V_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 32) = obs_type_type(ATOV_TEMPERATURE, & - 'ATOV_TEMPERATURE', QTY_TEMPERATURE, .false., .false., .false.) -obs_type_info( 33) = obs_type_type(AIRS_TEMPERATURE, & - 'AIRS_TEMPERATURE', QTY_TEMPERATURE, .false., .false., .false.) -obs_type_info( 34) = obs_type_type(AIRS_SPECIFIC_HUMIDITY, & - 'AIRS_SPECIFIC_HUMIDITY', QTY_SPECIFIC_HUMIDITY, .false., .false., .false.) -obs_type_info( 35) = obs_type_type(GPS_PRECIPITABLE_WATER, & - 'GPS_PRECIPITABLE_WATER', QTY_PRECIPITABLE_WATER, .false., .false., .false.) -obs_type_info( 36) = obs_type_type(VADWND_U_WIND_COMPONENT, & - 'VADWND_U_WIND_COMPONENT', QTY_U_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 37) = obs_type_type(VADWND_V_WIND_COMPONENT, & - 'VADWND_V_WIND_COMPONENT', QTY_V_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 38) = obs_type_type(CIMMS_AMV_U_WIND_COMPONENT, & - 'CIMMS_AMV_U_WIND_COMPONENT', QTY_U_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 39) = obs_type_type(CIMMS_AMV_V_WIND_COMPONENT, & - 'CIMMS_AMV_V_WIND_COMPONENT', QTY_V_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 40) = obs_type_type(DOPPLER_RADIAL_VELOCITY, & - 'DOPPLER_RADIAL_VELOCITY', QTY_VELOCITY, .false., .false., .false.) -obs_type_info( 41) = obs_type_type(RADAR_REFLECTIVITY, & - 'RADAR_REFLECTIVITY', QTY_RADAR_REFLECTIVITY, .false., .false., .false.) -obs_type_info( 42) = obs_type_type(RADAR_CLEARAIR_REFLECTIVITY, & - 'RADAR_CLEARAIR_REFLECTIVITY', QTY_RADAR_REFLECTIVITY, .false., .false., .false.) -obs_type_info( 43) = obs_type_type(PRECIPITATION_FALL_SPEED, & - 'PRECIPITATION_FALL_SPEED', QTY_POWER_WEIGHTED_FALL_SPEED, .false., .false., .false.) -obs_type_info( 44) = obs_type_type(METAR_U_10_METER_WIND, & - 'METAR_U_10_METER_WIND', QTY_U_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 45) = obs_type_type(METAR_V_10_METER_WIND, & - 'METAR_V_10_METER_WIND', QTY_V_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 46) = obs_type_type(METAR_TEMPERATURE_2_METER, & - 'METAR_TEMPERATURE_2_METER', QTY_TEMPERATURE, .false., .false., .false.) -obs_type_info( 47) = obs_type_type(METAR_SPECIFIC_HUMIDITY_2_METER, & - 'METAR_SPECIFIC_HUMIDITY_2_METER', QTY_SPECIFIC_HUMIDITY, .false., .false., .false.) -obs_type_info( 48) = obs_type_type(METAR_SURFACE_PRESSURE, & - 'METAR_SURFACE_PRESSURE', QTY_SURFACE_PRESSURE, .false., .false., .false.) -obs_type_info( 49) = obs_type_type(METAR_POT_TEMP_2_METER, & - 'METAR_POT_TEMP_2_METER', QTY_POTENTIAL_TEMPERATURE, .false., .false., .false.) -obs_type_info( 50) = obs_type_type(DEWPOINT, & - 'DEWPOINT', QTY_DEWPOINT, .false., .false., .false.) -obs_type_info( 51) = obs_type_type(DEWPOINT_2_METER, & - 'DEWPOINT_2_METER', QTY_DEWPOINT, .false., .false., .false.) -obs_type_info( 52) = obs_type_type(BUOY_DEWPOINT, & - 'BUOY_DEWPOINT', QTY_DEWPOINT, .false., .false., .false.) -obs_type_info( 53) = obs_type_type(SHIP_DEWPOINT, & - 'SHIP_DEWPOINT', QTY_DEWPOINT, .false., .false., .false.) -obs_type_info( 54) = obs_type_type(SYNOP_DEWPOINT, & - 'SYNOP_DEWPOINT', QTY_DEWPOINT, .false., .false., .false.) -obs_type_info( 55) = obs_type_type(AIREP_DEWPOINT, & - 'AIREP_DEWPOINT', QTY_DEWPOINT, .false., .false., .false.) -obs_type_info( 56) = obs_type_type(AMDAR_DEWPOINT, & - 'AMDAR_DEWPOINT', QTY_DEWPOINT, .false., .false., .false.) -obs_type_info( 57) = obs_type_type(PILOT_DEWPOINT, & - 'PILOT_DEWPOINT', QTY_DEWPOINT, .false., .false., .false.) -obs_type_info( 58) = obs_type_type(BOGUS_DEWPOINT, & - 'BOGUS_DEWPOINT', QTY_DEWPOINT, .false., .false., .false.) -obs_type_info( 59) = obs_type_type(AIRS_DEWPOINT, & - 'AIRS_DEWPOINT', QTY_DEWPOINT, .false., .false., .false.) -obs_type_info( 60) = obs_type_type(METAR_DEWPOINT_2_METER, & - 'METAR_DEWPOINT_2_METER', QTY_DEWPOINT, .false., .false., .false.) -obs_type_info( 61) = obs_type_type(RADIOSONDE_DEWPOINT, & - 'RADIOSONDE_DEWPOINT', QTY_DEWPOINT, .false., .false., .false.) -obs_type_info( 62) = obs_type_type(DROPSONDE_DEWPOINT, & - 'DROPSONDE_DEWPOINT', QTY_DEWPOINT, .false., .false., .false.) -obs_type_info( 63) = obs_type_type(AIRCRAFT_DEWPOINT, & - 'AIRCRAFT_DEWPOINT', QTY_DEWPOINT, .false., .false., .false.) -obs_type_info( 64) = obs_type_type(ACARS_DEWPOINT, & - 'ACARS_DEWPOINT', QTY_DEWPOINT, .false., .false., .false.) -obs_type_info( 65) = obs_type_type(MARINE_SFC_DEWPOINT, & - 'MARINE_SFC_DEWPOINT', QTY_DEWPOINT, .false., .false., .false.) -obs_type_info( 66) = obs_type_type(LAND_SFC_DEWPOINT, & - 'LAND_SFC_DEWPOINT', QTY_DEWPOINT, .false., .false., .false.) -obs_type_info( 67) = obs_type_type(RADIOSONDE_RELATIVE_HUMIDITY, & - 'RADIOSONDE_RELATIVE_HUMIDITY', QTY_RELATIVE_HUMIDITY, .false., .false., .false.) -obs_type_info( 68) = obs_type_type(DROPSONDE_RELATIVE_HUMIDITY, & - 'DROPSONDE_RELATIVE_HUMIDITY', QTY_RELATIVE_HUMIDITY, .false., .false., .false.) -obs_type_info( 69) = obs_type_type(AIRCRAFT_RELATIVE_HUMIDITY, & - 'AIRCRAFT_RELATIVE_HUMIDITY', QTY_RELATIVE_HUMIDITY, .false., .false., .false.) -obs_type_info( 70) = obs_type_type(ACARS_RELATIVE_HUMIDITY, & - 'ACARS_RELATIVE_HUMIDITY', QTY_RELATIVE_HUMIDITY, .false., .false., .false.) -obs_type_info( 71) = obs_type_type(MARINE_SFC_RELATIVE_HUMIDITY, & - 'MARINE_SFC_RELATIVE_HUMIDITY', QTY_RELATIVE_HUMIDITY, .false., .false., .false.) -obs_type_info( 72) = obs_type_type(LAND_SFC_RELATIVE_HUMIDITY, & - 'LAND_SFC_RELATIVE_HUMIDITY', QTY_RELATIVE_HUMIDITY, .false., .false., .false.) -obs_type_info( 73) = obs_type_type(METAR_RELATIVE_HUMIDITY_2_METER, & - 'METAR_RELATIVE_HUMIDITY_2_METER', QTY_RELATIVE_HUMIDITY, .false., .false., .false.) -obs_type_info( 74) = obs_type_type(AIRS_RELATIVE_HUMIDITY, & - 'AIRS_RELATIVE_HUMIDITY', QTY_RELATIVE_HUMIDITY, .false., .false., .false.) -obs_type_info( 75) = obs_type_type(MESONET_RELATIVE_HUMIDITY, & - 'MESONET_RELATIVE_HUMIDITY', QTY_RELATIVE_HUMIDITY, .false., .false., .false.) -obs_type_info( 76) = obs_type_type(RADIOSONDE_SURFACE_ALTIMETER, & - 'RADIOSONDE_SURFACE_ALTIMETER', QTY_SURFACE_PRESSURE, .false., .false., .false.) -obs_type_info( 77) = obs_type_type(DROPSONDE_SURFACE_ALTIMETER, & - 'DROPSONDE_SURFACE_ALTIMETER', QTY_SURFACE_PRESSURE, .false., .false., .false.) -obs_type_info( 78) = obs_type_type(MARINE_SFC_ALTIMETER, & - 'MARINE_SFC_ALTIMETER', QTY_SURFACE_PRESSURE, .false., .false., .false.) -obs_type_info( 79) = obs_type_type(LAND_SFC_ALTIMETER, & - 'LAND_SFC_ALTIMETER', QTY_SURFACE_PRESSURE, .false., .false., .false.) -obs_type_info( 80) = obs_type_type(METAR_ALTIMETER, & - 'METAR_ALTIMETER', QTY_SURFACE_PRESSURE, .false., .false., .false.) -obs_type_info( 81) = obs_type_type(MESONET_SURFACE_ALTIMETER, & - 'MESONET_SURFACE_ALTIMETER', QTY_SURFACE_PRESSURE, .false., .false., .false.) -obs_type_info( 82) = obs_type_type(TEMPERATURE, & - 'TEMPERATURE', QTY_TEMPERATURE, .false., .false., .false.) -obs_type_info( 83) = obs_type_type(SPECIFIC_HUMIDITY, & - 'SPECIFIC_HUMIDITY', QTY_SPECIFIC_HUMIDITY, .false., .false., .false.) -obs_type_info( 84) = obs_type_type(PRESSURE, & - 'PRESSURE', QTY_PRESSURE, .false., .false., .false.) -obs_type_info( 85) = obs_type_type(GPSRO_REFRACTIVITY, & - 'GPSRO_REFRACTIVITY', QTY_GPSRO, .false., .false., .false.) -obs_type_info( 86) = obs_type_type(VORTEX_LAT, & - 'VORTEX_LAT', QTY_VORTEX_LAT, .false., .false., .false.) -obs_type_info( 87) = obs_type_type(VORTEX_LON, & - 'VORTEX_LON', QTY_VORTEX_LON, .false., .false., .false.) -obs_type_info( 88) = obs_type_type(VORTEX_PMIN, & - 'VORTEX_PMIN', QTY_VORTEX_PMIN, .false., .false., .false.) -obs_type_info( 89) = obs_type_type(VORTEX_WMAX, & - 'VORTEX_WMAX', QTY_VORTEX_WMAX, .false., .false., .false.) -obs_type_info( 90) = obs_type_type(BUOY_U_WIND_COMPONENT, & - 'BUOY_U_WIND_COMPONENT', QTY_U_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 91) = obs_type_type(BUOY_V_WIND_COMPONENT, & - 'BUOY_V_WIND_COMPONENT', QTY_V_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 92) = obs_type_type(BUOY_SURFACE_PRESSURE, & - 'BUOY_SURFACE_PRESSURE', QTY_SURFACE_PRESSURE, .false., .false., .false.) -obs_type_info( 93) = obs_type_type(BUOY_TEMPERATURE, & - 'BUOY_TEMPERATURE', QTY_TEMPERATURE, .false., .false., .false.) -obs_type_info( 94) = obs_type_type(SHIP_U_WIND_COMPONENT, & - 'SHIP_U_WIND_COMPONENT', QTY_U_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 95) = obs_type_type(SHIP_V_WIND_COMPONENT, & - 'SHIP_V_WIND_COMPONENT', QTY_V_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 96) = obs_type_type(SHIP_SURFACE_PRESSURE, & - 'SHIP_SURFACE_PRESSURE', QTY_SURFACE_PRESSURE, .false., .false., .false.) -obs_type_info( 97) = obs_type_type(SHIP_TEMPERATURE, & - 'SHIP_TEMPERATURE', QTY_TEMPERATURE, .false., .false., .false.) -obs_type_info( 98) = obs_type_type(SYNOP_U_WIND_COMPONENT, & - 'SYNOP_U_WIND_COMPONENT', QTY_U_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 99) = obs_type_type(SYNOP_V_WIND_COMPONENT, & - 'SYNOP_V_WIND_COMPONENT', QTY_V_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 100) = obs_type_type(SYNOP_SURFACE_PRESSURE, & - 'SYNOP_SURFACE_PRESSURE', QTY_SURFACE_PRESSURE, .false., .false., .false.) -obs_type_info( 101) = obs_type_type(SYNOP_SPECIFIC_HUMIDITY, & - 'SYNOP_SPECIFIC_HUMIDITY', QTY_SPECIFIC_HUMIDITY, .false., .false., .false.) -obs_type_info( 102) = obs_type_type(SYNOP_TEMPERATURE, & - 'SYNOP_TEMPERATURE', QTY_TEMPERATURE, .false., .false., .false.) -obs_type_info( 103) = obs_type_type(AIREP_U_WIND_COMPONENT, & - 'AIREP_U_WIND_COMPONENT', QTY_U_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 104) = obs_type_type(AIREP_V_WIND_COMPONENT, & - 'AIREP_V_WIND_COMPONENT', QTY_V_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 105) = obs_type_type(AIREP_PRESSURE, & - 'AIREP_PRESSURE', QTY_PRESSURE, .false., .false., .false.) -obs_type_info( 106) = obs_type_type(AIREP_TEMPERATURE, & - 'AIREP_TEMPERATURE', QTY_TEMPERATURE, .false., .false., .false.) -obs_type_info( 107) = obs_type_type(AMDAR_U_WIND_COMPONENT, & - 'AMDAR_U_WIND_COMPONENT', QTY_U_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 108) = obs_type_type(AMDAR_V_WIND_COMPONENT, & - 'AMDAR_V_WIND_COMPONENT', QTY_V_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 109) = obs_type_type(AMDAR_PRESSURE, & - 'AMDAR_PRESSURE', QTY_PRESSURE, .false., .false., .false.) -obs_type_info( 110) = obs_type_type(AMDAR_TEMPERATURE, & - 'AMDAR_TEMPERATURE', QTY_TEMPERATURE, .false., .false., .false.) -obs_type_info( 111) = obs_type_type(PILOT_U_WIND_COMPONENT, & - 'PILOT_U_WIND_COMPONENT', QTY_U_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 112) = obs_type_type(PILOT_V_WIND_COMPONENT, & - 'PILOT_V_WIND_COMPONENT', QTY_V_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 113) = obs_type_type(PILOT_PRESSURE, & - 'PILOT_PRESSURE', QTY_PRESSURE, .false., .false., .false.) -obs_type_info( 114) = obs_type_type(PILOT_TEMPERATURE, & - 'PILOT_TEMPERATURE', QTY_TEMPERATURE, .false., .false., .false.) -obs_type_info( 115) = obs_type_type(BOGUS_U_WIND_COMPONENT, & - 'BOGUS_U_WIND_COMPONENT', QTY_U_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 116) = obs_type_type(BOGUS_V_WIND_COMPONENT, & - 'BOGUS_V_WIND_COMPONENT', QTY_V_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 117) = obs_type_type(BOGUS_PRESSURE, & - 'BOGUS_PRESSURE', QTY_PRESSURE, .false., .false., .false.) -obs_type_info( 118) = obs_type_type(BOGUS_TEMPERATURE, & - 'BOGUS_TEMPERATURE', QTY_TEMPERATURE, .false., .false., .false.) -obs_type_info( 119) = obs_type_type(PROFILER_U_WIND_COMPONENT, & - 'PROFILER_U_WIND_COMPONENT', QTY_U_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 120) = obs_type_type(PROFILER_V_WIND_COMPONENT, & - 'PROFILER_V_WIND_COMPONENT', QTY_V_WIND_COMPONENT, .false., .false., .false.) -obs_type_info( 121) = obs_type_type(PROFILER_PRESSURE, & - 'PROFILER_PRESSURE', QTY_PRESSURE, .false., .false., .false.) -obs_type_info( 122) = obs_type_type(SATEM_THICKNESS, & - 'SATEM_THICKNESS', QTY_TEMPERATURE, .false., .false., .false.) -obs_type_info( 123) = obs_type_type(NOAA_1_VTPR1_RADIANCE, & - 'NOAA_1_VTPR1_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 124) = obs_type_type(NOAA_2_VTPR1_RADIANCE, & - 'NOAA_2_VTPR1_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 125) = obs_type_type(NOAA_3_VTPR1_RADIANCE, & - 'NOAA_3_VTPR1_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 126) = obs_type_type(NOAA_4_VTPR1_RADIANCE, & - 'NOAA_4_VTPR1_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 127) = obs_type_type(NOAA_5_HIRS_RADIANCE, & - 'NOAA_5_HIRS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 128) = obs_type_type(NOAA_5_MSU_TB, & - 'NOAA_5_MSU_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 129) = obs_type_type(NOAA_5_AVHRR_RADIANCE, & - 'NOAA_5_AVHRR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 130) = obs_type_type(NOAA_6_HIRS_RADIANCE, & - 'NOAA_6_HIRS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 131) = obs_type_type(NOAA_6_MSU_TB, & - 'NOAA_6_MSU_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 132) = obs_type_type(NOAA_6_AVHRR_RADIANCE, & - 'NOAA_6_AVHRR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 133) = obs_type_type(NOAA_7_HIRS_RADIANCE, & - 'NOAA_7_HIRS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 134) = obs_type_type(NOAA_7_MSU_TB, & - 'NOAA_7_MSU_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 135) = obs_type_type(NOAA_7_AVHRR_RADIANCE, & - 'NOAA_7_AVHRR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 136) = obs_type_type(NOAA_8_HIRS_RADIANCE, & - 'NOAA_8_HIRS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 137) = obs_type_type(NOAA_8_MSU_TB, & - 'NOAA_8_MSU_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 138) = obs_type_type(NOAA_8_AVHRR_RADIANCE, & - 'NOAA_8_AVHRR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 139) = obs_type_type(NOAA_9_HIRS_RADIANCE, & - 'NOAA_9_HIRS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 140) = obs_type_type(NOAA_9_MSU_TB, & - 'NOAA_9_MSU_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 141) = obs_type_type(NOAA_9_AVHRR_RADIANCE, & - 'NOAA_9_AVHRR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 142) = obs_type_type(NOAA_10_HIRS_RADIANCE, & - 'NOAA_10_HIRS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 143) = obs_type_type(NOAA_10_MSU_TB, & - 'NOAA_10_MSU_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 144) = obs_type_type(NOAA_10_AVHRR_RADIANCE, & - 'NOAA_10_AVHRR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 145) = obs_type_type(NOAA_11_HIRS_RADIANCE, & - 'NOAA_11_HIRS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 146) = obs_type_type(NOAA_11_MSU_TB, & - 'NOAA_11_MSU_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 147) = obs_type_type(NOAA_11_AVHRR_RADIANCE, & - 'NOAA_11_AVHRR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 148) = obs_type_type(NOAA_12_HIRS_RADIANCE, & - 'NOAA_12_HIRS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 149) = obs_type_type(NOAA_12_MSU_TB, & - 'NOAA_12_MSU_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 150) = obs_type_type(NOAA_12_AVHRR_RADIANCE, & - 'NOAA_12_AVHRR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 151) = obs_type_type(NOAA_13_AVHRR_RADIANCE, & - 'NOAA_13_AVHRR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 152) = obs_type_type(NOAA_14_HIRS_RADIANCE, & - 'NOAA_14_HIRS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 153) = obs_type_type(NOAA_14_MSU_TB, & - 'NOAA_14_MSU_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 154) = obs_type_type(NOAA_14_AVHRR_RADIANCE, & - 'NOAA_14_AVHRR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 155) = obs_type_type(NOAA_15_HIRS_RADIANCE, & - 'NOAA_15_HIRS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 156) = obs_type_type(NOAA_15_AMSUA_TB, & - 'NOAA_15_AMSUA_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 157) = obs_type_type(NOAA_15_AMSUB_TB, & - 'NOAA_15_AMSUB_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 158) = obs_type_type(NOAA_15_AVHRR_RADIANCE, & - 'NOAA_15_AVHRR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 159) = obs_type_type(NOAA_16_HIRS_RADIANCE, & - 'NOAA_16_HIRS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 160) = obs_type_type(NOAA_16_AMSUA_TB, & - 'NOAA_16_AMSUA_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 161) = obs_type_type(NOAA_16_AMSUB_TB, & - 'NOAA_16_AMSUB_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 162) = obs_type_type(NOAA_16_AVHRR_RADIANCE, & - 'NOAA_16_AVHRR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 163) = obs_type_type(NOAA_17_HIRS_RADIANCE, & - 'NOAA_17_HIRS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 164) = obs_type_type(NOAA_17_AMSUA_TB, & - 'NOAA_17_AMSUA_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 165) = obs_type_type(NOAA_17_AMSUB_TB, & - 'NOAA_17_AMSUB_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 166) = obs_type_type(NOAA_17_AVHRR_RADIANCE, & - 'NOAA_17_AVHRR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 167) = obs_type_type(NOAA_18_HIRS_RADIANCE, & - 'NOAA_18_HIRS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 168) = obs_type_type(NOAA_18_AMSUA_TB, & - 'NOAA_18_AMSUA_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 169) = obs_type_type(NOAA_18_AVHRR_RADIANCE, & - 'NOAA_18_AVHRR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 170) = obs_type_type(NOAA_18_MHS_TB, & - 'NOAA_18_MHS_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 171) = obs_type_type(NOAA_19_HIRS_RADIANCE, & - 'NOAA_19_HIRS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 172) = obs_type_type(NOAA_19_AMSUA_TB, & - 'NOAA_19_AMSUA_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 173) = obs_type_type(NOAA_19_AVHRR_RADIANCE, & - 'NOAA_19_AVHRR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 174) = obs_type_type(NOAA_19_MHS_TB, & - 'NOAA_19_MHS_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 175) = obs_type_type(NOAA_20_ATMS_TB, & - 'NOAA_20_ATMS_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 176) = obs_type_type(NOAA_20_VIIRS_RADIANCE, & - 'NOAA_20_VIIRS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 177) = obs_type_type(DMSP_8_SSMI_TB, & - 'DMSP_8_SSMI_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 178) = obs_type_type(DMSP_9_SSMI_TB, & - 'DMSP_9_SSMI_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 179) = obs_type_type(DMSP_10_SSMI_TB, & - 'DMSP_10_SSMI_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 180) = obs_type_type(DMSP_11_SSMI_TB, & - 'DMSP_11_SSMI_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 181) = obs_type_type(DMSP_11_SSMT2_TB, & - 'DMSP_11_SSMT2_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 182) = obs_type_type(DMSP_12_SSMI_TB, & - 'DMSP_12_SSMI_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 183) = obs_type_type(DMSP_12_SSMT2_TB, & - 'DMSP_12_SSMT2_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 184) = obs_type_type(DMSP_13_SSMI_TB, & - 'DMSP_13_SSMI_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 185) = obs_type_type(DMSP_14_SSMI_TB, & - 'DMSP_14_SSMI_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 186) = obs_type_type(DMSP_14_SSMT2_TB, & - 'DMSP_14_SSMT2_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 187) = obs_type_type(DMSP_15_SSMI_TB, & - 'DMSP_15_SSMI_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 188) = obs_type_type(DMSP_15_SSMT2_TB, & - 'DMSP_15_SSMT2_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 189) = obs_type_type(DMSP_16_SSMIS_TB, & - 'DMSP_16_SSMIS_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 190) = obs_type_type(DMSP_17_SSMIS_TB, & - 'DMSP_17_SSMIS_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 191) = obs_type_type(DMSP_18_SSMIS_TB, & - 'DMSP_18_SSMIS_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 192) = obs_type_type(DMSP_19_SSMIS_TB, & - 'DMSP_19_SSMIS_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 193) = obs_type_type(METEOSAT_1_MVIRI_RADIANCE, & - 'METEOSAT_1_MVIRI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 194) = obs_type_type(METEOSAT_2_MVIRI_RADIANCE, & - 'METEOSAT_2_MVIRI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 195) = obs_type_type(METEOSAT_3_MVIRI_RADIANCE, & - 'METEOSAT_3_MVIRI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 196) = obs_type_type(METEOSAT_4_MVIRI_RADIANCE, & - 'METEOSAT_4_MVIRI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 197) = obs_type_type(METEOSAT_5_MVIRI_RADIANCE, & - 'METEOSAT_5_MVIRI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 198) = obs_type_type(METEOSAT_6_MVIRI_RADIANCE, & - 'METEOSAT_6_MVIRI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 199) = obs_type_type(METEOSAT_7_MVIRI_RADIANCE, & - 'METEOSAT_7_MVIRI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 200) = obs_type_type(GOES_4_SOUNDER_RADIANCE, & - 'GOES_4_SOUNDER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 201) = obs_type_type(GOES_5_SOUNDER_RADIANCE, & - 'GOES_5_SOUNDER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 202) = obs_type_type(GOES_6_SOUNDER_RADIANCE, & - 'GOES_6_SOUNDER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 203) = obs_type_type(GOES_7_SOUNDER_RADIANCE, & - 'GOES_7_SOUNDER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 204) = obs_type_type(GOES_8_IMAGER_RADIANCE, & - 'GOES_8_IMAGER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 205) = obs_type_type(GOES_8_SOUNDER_RADIANCE, & - 'GOES_8_SOUNDER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 206) = obs_type_type(GOES_9_IMAGER_RADIANCE, & - 'GOES_9_IMAGER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 207) = obs_type_type(GOES_9_SOUNDER_RADIANCE, & - 'GOES_9_SOUNDER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 208) = obs_type_type(GOES_10_IMAGER_RADIANCE, & - 'GOES_10_IMAGER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 209) = obs_type_type(GOES_10_SOUNDER_RADIANCE, & - 'GOES_10_SOUNDER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 210) = obs_type_type(GOES_11_IMAGER_RADIANCE, & - 'GOES_11_IMAGER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 211) = obs_type_type(GOES_11_SOUNDER_RADIANCE, & - 'GOES_11_SOUNDER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 212) = obs_type_type(GOES_12_IMAGER_RADIANCE, & - 'GOES_12_IMAGER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 213) = obs_type_type(GOES_12_SOUNDER_RADIANCE, & - 'GOES_12_SOUNDER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 214) = obs_type_type(GOES_13_IMAGER_RADIANCE, & - 'GOES_13_IMAGER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 215) = obs_type_type(GOES_13_SOUNDER_RADIANCE, & - 'GOES_13_SOUNDER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 216) = obs_type_type(GOES_14_IMAGER_RADIANCE, & - 'GOES_14_IMAGER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 217) = obs_type_type(GOES_14_SOUNDER_RADIANCE, & - 'GOES_14_SOUNDER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 218) = obs_type_type(GOES_15_IMAGER_RADIANCE, & - 'GOES_15_IMAGER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 219) = obs_type_type(GOES_15_SOUNDER_RADIANCE, & - 'GOES_15_SOUNDER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 220) = obs_type_type(GOES_16_ABI_RADIANCE, & - 'GOES_16_ABI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 221) = obs_type_type(GOES_17_ABI_RADIANCE, & - 'GOES_17_ABI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 222) = obs_type_type(GOES_18_ABI_RADIANCE, & - 'GOES_18_ABI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 223) = obs_type_type(GOES_19_ABI_RADIANCE, & - 'GOES_19_ABI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 224) = obs_type_type(GMS_1_IMAGER_RADIANCE, & - 'GMS_1_IMAGER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 225) = obs_type_type(GMS_2_IMAGER_RADIANCE, & - 'GMS_2_IMAGER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 226) = obs_type_type(GMS_3_IMAGER_RADIANCE, & - 'GMS_3_IMAGER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 227) = obs_type_type(GMS_4_IMAGER_RADIANCE, & - 'GMS_4_IMAGER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 228) = obs_type_type(GMS_5_IMAGER_RADIANCE, & - 'GMS_5_IMAGER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 229) = obs_type_type(FY2_2_VISSR_RADIANCE, & - 'FY2_2_VISSR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 230) = obs_type_type(FY2_3_VISSR_RADIANCE, & - 'FY2_3_VISSR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 231) = obs_type_type(FY2_4_VISSR_RADIANCE, & - 'FY2_4_VISSR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 232) = obs_type_type(FY2_5_VISSR_RADIANCE, & - 'FY2_5_VISSR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 233) = obs_type_type(FY2_7_VISSR_RADIANCE, & - 'FY2_7_VISSR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 234) = obs_type_type(TRMM_1_TMI_TB, & - 'TRMM_1_TMI_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 235) = obs_type_type(ERS_1_ATSR_RADIANCE, & - 'ERS_1_ATSR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 236) = obs_type_type(ERS_1_MWR_TB, & - 'ERS_1_MWR_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 237) = obs_type_type(ERS_2_ATSR_RADIANCE, & - 'ERS_2_ATSR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 238) = obs_type_type(ERS_2_MWR_TB, & - 'ERS_2_MWR_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 239) = obs_type_type(EOS_1_MODIS_RADIANCE, & - 'EOS_1_MODIS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 240) = obs_type_type(EOS_1_ASTER_RADIANCE, & - 'EOS_1_ASTER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 241) = obs_type_type(EOS_2_AMSUA_TB, & - 'EOS_2_AMSUA_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 242) = obs_type_type(EOS_2_AIRS_RADIANCE, & - 'EOS_2_AIRS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 243) = obs_type_type(EOS_2_HSB_TB, & - 'EOS_2_HSB_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 244) = obs_type_type(EOS_2_MODIS_RADIANCE, & - 'EOS_2_MODIS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 245) = obs_type_type(EOS_2_AMSRE_TB, & - 'EOS_2_AMSRE_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 246) = obs_type_type(METOP_1_HIRS_RADIANCE, & - 'METOP_1_HIRS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 247) = obs_type_type(METOP_1_AMSUA_TB, & - 'METOP_1_AMSUA_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 248) = obs_type_type(METOP_1_AVHRR_RADIANCE, & - 'METOP_1_AVHRR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 249) = obs_type_type(METOP_1_MHS_TB, & - 'METOP_1_MHS_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 250) = obs_type_type(METOP_2_HIRS_RADIANCE, & - 'METOP_2_HIRS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 251) = obs_type_type(METOP_2_AMSUA_TB, & - 'METOP_2_AMSUA_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 252) = obs_type_type(METOP_2_AVHRR_RADIANCE, & - 'METOP_2_AVHRR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 253) = obs_type_type(METOP_2_MHS_TB, & - 'METOP_2_MHS_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 254) = obs_type_type(METOP_3_AVHRR_RADIANCE, & - 'METOP_3_AVHRR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 255) = obs_type_type(ENVISAT_1_ATSR_RADIANCE, & - 'ENVISAT_1_ATSR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 256) = obs_type_type(ENVISAT_1_MWR_TB, & - 'ENVISAT_1_MWR_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 257) = obs_type_type(MSG_1_SEVIRI_RADIANCE, & - 'MSG_1_SEVIRI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 258) = obs_type_type(MSG_2_SEVIRI_RADIANCE, & - 'MSG_2_SEVIRI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 259) = obs_type_type(MSG_3_SEVIRI_RADIANCE, & - 'MSG_3_SEVIRI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 260) = obs_type_type(MSG_4_SEVIRI_RADIANCE, & - 'MSG_4_SEVIRI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 261) = obs_type_type(MSG_4_SEVIRI_TB, & - 'MSG_4_SEVIRI_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 262) = obs_type_type(MSG_4_SEVIRI_BDRF, & - 'MSG_4_SEVIRI_BDRF', QTY_BI_DIRECTIONAL_REFLECTANCE, .false., .false., .false.) -obs_type_info( 263) = obs_type_type(FY1_3_MVISR_RADIANCE, & - 'FY1_3_MVISR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 264) = obs_type_type(FY1_4_MVISR_RADIANCE, & - 'FY1_4_MVISR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 265) = obs_type_type(MTSAT_1_IMAGER_RADIANCE, & - 'MTSAT_1_IMAGER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 266) = obs_type_type(MTSAT_2_IMAGER_RADIANCE, & - 'MTSAT_2_IMAGER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 267) = obs_type_type(CORIOLIS_1_WINDSAT_TB, & - 'CORIOLIS_1_WINDSAT_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 268) = obs_type_type(JPSS_0_ATMS_TB, & - 'JPSS_0_ATMS_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 269) = obs_type_type(JPSS_0_VIIRS_RADIANCE, & - 'JPSS_0_VIIRS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 270) = obs_type_type(SENTINEL3_1_SLSTR_RADIANCE, & - 'SENTINEL3_1_SLSTR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 271) = obs_type_type(SENTINEL3_2_SLSTR_RADIANCE, & - 'SENTINEL3_2_SLSTR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 272) = obs_type_type(MEGHATR_1_SAPHIR_TB, & - 'MEGHATR_1_SAPHIR_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 273) = obs_type_type(MEGHATR_1_MADRAS_TB, & - 'MEGHATR_1_MADRAS_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 274) = obs_type_type(FY3_1_MWTS_TB, & - 'FY3_1_MWTS_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 275) = obs_type_type(FY3_1_MWHS_TB, & - 'FY3_1_MWHS_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 276) = obs_type_type(FY3_1_IRAS_RADIANCE, & - 'FY3_1_IRAS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 277) = obs_type_type(FY3_1_MWRI_TB, & - 'FY3_1_MWRI_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 278) = obs_type_type(FY3_2_MWTS_TB, & - 'FY3_2_MWTS_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 279) = obs_type_type(FY3_2_MWHS_TB, & - 'FY3_2_MWHS_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 280) = obs_type_type(FY3_2_MWRI_TB, & - 'FY3_2_MWRI_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 281) = obs_type_type(FY3_3_MWRI_TB, & - 'FY3_3_MWRI_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 282) = obs_type_type(FY3_3_MWTS2_TB, & - 'FY3_3_MWTS2_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 283) = obs_type_type(FY3_3_MWHS2_TB, & - 'FY3_3_MWHS2_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 284) = obs_type_type(FY3_3_MERSI1_RADIANCE, & - 'FY3_3_MERSI1_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 285) = obs_type_type(FY3_4_MWRI_TB, & - 'FY3_4_MWRI_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 286) = obs_type_type(FY3_4_MWTS2_TB, & - 'FY3_4_MWTS2_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 287) = obs_type_type(FY3_4_MWHS2_TB, & - 'FY3_4_MWHS2_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 288) = obs_type_type(FY3_4_MERSI2_RADIANCE, & - 'FY3_4_MERSI2_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 289) = obs_type_type(COMS_1_MI_RADIANCE, & - 'COMS_1_MI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 290) = obs_type_type(METEOR_M_1_MSUMR_RADIANCE, & - 'METEOR_M_1_MSUMR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 291) = obs_type_type(METEOR_M_2_MSUMR_RADIANCE, & - 'METEOR_M_2_MSUMR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 292) = obs_type_type(METEOR_M_2_MTVZAGY_TB, & - 'METEOR_M_2_MTVZAGY_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 293) = obs_type_type(CALIPSO_1_IIR_RADIANCE, & - 'CALIPSO_1_IIR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 294) = obs_type_type(GCOM_W_1_AMSR2_TB, & - 'GCOM_W_1_AMSR2_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 295) = obs_type_type(NIMBUS_3_MRIR_RADIANCE, & - 'NIMBUS_3_MRIR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 296) = obs_type_type(NIMBUS_4_THIR_RADIANCE, & - 'NIMBUS_4_THIR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 297) = obs_type_type(NIMBUS_5_THIR_RADIANCE, & - 'NIMBUS_5_THIR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 298) = obs_type_type(NIMBUS_6_HIRS_RADIANCE, & - 'NIMBUS_6_HIRS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 299) = obs_type_type(NIMBUS_6_SCAMS_TB, & - 'NIMBUS_6_SCAMS_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 300) = obs_type_type(NIMBUS_6_THIR_RADIANCE, & - 'NIMBUS_6_THIR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 301) = obs_type_type(NIMBUS_7_SMMR_TB, & - 'NIMBUS_7_SMMR_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 302) = obs_type_type(NIMBUS_7_THIR_RADIANCE, & - 'NIMBUS_7_THIR_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 303) = obs_type_type(HIMAWARI_8_AHI_RADIANCE, & - 'HIMAWARI_8_AHI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 304) = obs_type_type(HIMAWARI_9_AHI_RADIANCE, & - 'HIMAWARI_9_AHI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 305) = obs_type_type(MTG_1_FCI_RADIANCE, & - 'MTG_1_FCI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 306) = obs_type_type(SARAL_1_ALTIKA_TB, & - 'SARAL_1_ALTIKA_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 307) = obs_type_type(METOPSG_1_ICI_TB, & - 'METOPSG_1_ICI_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 308) = obs_type_type(METOPSG_1_METIMAGE_RADIANCE, & - 'METOPSG_1_METIMAGE_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 309) = obs_type_type(METOPSG_1_MWS_TB, & - 'METOPSG_1_MWS_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 310) = obs_type_type(METOPSG_1_MWI_TB, & - 'METOPSG_1_MWI_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 311) = obs_type_type(LANDSAT_4_TM_RADIANCE, & - 'LANDSAT_4_TM_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 312) = obs_type_type(LANDSAT_5_TM_RADIANCE, & - 'LANDSAT_5_TM_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 313) = obs_type_type(LANDSAT_7_TM_RADIANCE, & - 'LANDSAT_7_TM_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 314) = obs_type_type(LANDSAT_8_TIRS_RADIANCE, & - 'LANDSAT_8_TIRS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 315) = obs_type_type(JASON_2_AMR_TB, & - 'JASON_2_AMR_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 316) = obs_type_type(GPM_1_GMI_TB, & - 'GPM_1_GMI_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 317) = obs_type_type(GPM_1_DPR_TB, & - 'GPM_1_DPR_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 318) = obs_type_type(INSAT3_4_IMAGER_RADIANCE, & - 'INSAT3_4_IMAGER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 319) = obs_type_type(INSAT3_4_SOUNDER_RADIANCE, & - 'INSAT3_4_SOUNDER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 320) = obs_type_type(INSAT3_5_IMAGER_RADIANCE, & - 'INSAT3_5_IMAGER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 321) = obs_type_type(INSAT3_5_SOUNDER_RADIANCE, & - 'INSAT3_5_SOUNDER_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 322) = obs_type_type(TICFIRE_1_MBFIRI_RADIANCE, & - 'TICFIRE_1_MBFIRI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 323) = obs_type_type(ISS_1_ECOSTRES_RADIANCE, & - 'ISS_1_ECOSTRES_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 324) = obs_type_type(HJ1_2_IRMSS_RADIANCE, & - 'HJ1_2_IRMSS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 325) = obs_type_type(GKOMPSAT2_1_AMI_RADIANCE, & - 'GKOMPSAT2_1_AMI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 326) = obs_type_type(GCOM_C_1_SGLI_RADIANCE, & - 'GCOM_C_1_SGLI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 327) = obs_type_type(SMOS_1_MIRAS_TB, & - 'SMOS_1_MIRAS_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 328) = obs_type_type(ORS_6_COWVR_TB, & - 'ORS_6_COWVR_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 329) = obs_type_type(FY4_1_AGRI_RADIANCE, & - 'FY4_1_AGRI_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 330) = obs_type_type(TROPICS_0_TROPICS_TB, & - 'TROPICS_0_TROPICS_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 331) = obs_type_type(GF5_1_VIMS_RADIANCE, & - 'GF5_1_VIMS_RADIANCE', QTY_RADIANCE, .false., .false., .false.) -obs_type_info( 332) = obs_type_type(HY2_1_MWRI_TB, & - 'HY2_1_MWRI_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) -obs_type_info( 333) = obs_type_type(CLOUDSAT_1_CPR_TB, & - 'CLOUDSAT_1_CPR_TB', QTY_BRIGHTNESS_TEMPERATURE, .false., .false., .false.) - - -! Default for all obs is to not assimilate or evaluate. -! Count up number being assimilated and evaluated here. - -num_types_assimilate = 0 -do i = 1, max_defined_types_of_obs - if(assimilate_these_obs_types(i) == 'null' .or. len_trim(assimilate_these_obs_types(i)) == 0 ) exit - num_types_assimilate = i -end do - -num_types_evaluate = 0 -do i = 1, max_defined_types_of_obs - if(evaluate_these_obs_types(i) == 'null' .or. len_trim(evaluate_these_obs_types(i)) == 0) exit - num_types_evaluate = i -end do - -! Special case when all obs_types should use precomputed_FOs -if( any(use_precomputed_FOs_these_obs_types .eq. 'all') ) then - num_types_use_precomputed_FOs = num_types_assimilate + num_types_evaluate - j = 1 - if ( num_types_assimilate > 0 ) then - use_precomputed_FOs_these_obs_types(j:num_types_assimilate) = assimilate_these_obs_types(1:num_types_assimilate) - j = j + num_types_assimilate - endif - if ( num_types_evaluate > 0 ) use_precomputed_FOs_these_obs_types(j:num_types_use_precomputed_FOs) = evaluate_these_obs_types(1:num_types_evaluate) -else - num_types_use_precomputed_FOs = 0 - do i = 1, max_defined_types_of_obs - if(use_precomputed_FOs_these_obs_types(i) == 'null' .or. len_trim(use_precomputed_FOs_these_obs_types(i)) == 0) exit - num_types_use_precomputed_FOs = i - end do -endif - -if (do_output() .and. (num_types_assimilate > 0 .or. & - num_types_evaluate > 0 .or. & - num_types_use_precomputed_FOs > 0 )) then - call log_it('') - call log_it('Assimilate_these_obs_types:') - if (num_types_assimilate < 1) then - call log_it(' none') - else - do i = 1, num_types_assimilate - call log_it(' '//trim(assimilate_these_obs_types(i))) - enddo - endif - - call log_it('Evaluate_these_obs_types:') - if (num_types_evaluate <1) then - call log_it(' none') - else - do i = 1, num_types_evaluate - call log_it(' '//trim(evaluate_these_obs_types(i))) - enddo - endif - - call log_it('Use the precomputed Prior Forward Operators for these obs types:') - if (num_types_use_precomputed_FOs <1) then - call log_it(' none') - else - do i = 1, num_types_use_precomputed_FOs - call log_it(' '//trim(use_precomputed_FOs_these_obs_types(i))) - enddo - endif - call log_it('') -endif - - -! Figure out which types are being used, look for errors -! Start by loading up types to assimilate -if (num_types_assimilate > 0) then - do i = 1, num_types_assimilate - ! Search for the matching string - do j = 1, max_defined_types_of_obs - if(assimilate_these_obs_types(i) == obs_type_info(j)%name) then - obs_type_info(j)%assimilate = .true. - goto 44 - endif - end do - ! Falling off the end is an error - write(err_string, *) '"',trim(assimilate_these_obs_types(i)), & - '" from obs_kind_nml::assimilate_these_obs_types is not a legal observation type' - call error_handler(E_ERR, routine, err_string, source) - 44 continue - end do -endif - -! Now look for types to evaluate -if (num_types_evaluate > 0) then - do i = 1, num_types_evaluate - ! Search for the matching string - do j = 1, max_defined_types_of_obs - if(evaluate_these_obs_types(i) == obs_type_info(j)%name) then - obs_type_info(j)%evaluate = .true. - goto 55 - endif - end do - ! Falling off the end is an error - write(err_string, *) '"',trim(evaluate_these_obs_types(i)), & - '" from obs_kind_nml::evaluate_these_obs_types is not a legal observation type' - call error_handler(E_ERR, routine, err_string, source) - 55 continue - end do -endif - -if (num_types_use_precomputed_FOs > 0) then - do i = 1, num_types_use_precomputed_FOs - ! Search for the matching string - do j = 1, max_defined_types_of_obs - if(use_precomputed_FOs_these_obs_types(i) == obs_type_info(j)%name) then - obs_type_info(j)%use_precomputed_FO = .true. - goto 66 - endif - end do - ! Falling off the end is an error - write(err_string, *) '"',trim(use_precomputed_FOs_these_obs_types(i)), & - '" from obs_kind_nml::use_precomputed_FOs_these_obs_types is not a legal observation type' - call error_handler(E_ERR, routine, err_string, source) - 66 continue - end do -endif - -! Make it an error to ask to assimilate AND evaluate the same obs kind -do i = 1, max_defined_types_of_obs - if(obs_type_info(i)%evaluate .and. obs_type_info(i)%assimilate) then - write(err_string, *) 'Illegal to both evaluate and assimilate same type ', & - trim(obs_type_info(i)%name) - call error_handler(E_ERR, routine, err_string, source) - endif -end do - -end subroutine initialize_module - -!--------------------------------------------------------------------------- - -function map_type_of_obs_table(obs_def_index) - -! Argument is the index from the obs_def; needs to be mapped to the appropriate -! Integer storage index -integer, intent(in) :: obs_def_index -integer :: map_type_of_obs_table - -character(len = 169) :: err_string -integer :: i -character(len=*), parameter :: routine = "map_type_of_obs_table" - -if ( .not. module_initialized ) call initialize_module - -! Need to search through the first map column to find this obs_def_index value -! Then return the index into table in this module from corresponding row in -! second column. -do i = 1, max_defined_types_of_obs - if(toc_mod_type_map%toc_type_index(i) == obs_def_index) then - map_type_of_obs_table = toc_mod_type_map%mod_type_index(i) - return - endif -end do - -! Error, didn't find this obs_def_index in the map -write(err_string, *) 'Could not find obs type index ', obs_def_index, & - ' in current type list compiled in this program' -call error_handler(E_ERR, routine, err_string, source) - -end function map_type_of_obs_table - -!---------------------------------------------------------------------------- - -function get_name_for_type_of_obs(obs_type_ind) - -! Returns observation type name - -integer, intent(in) :: obs_type_ind -character(len=obstypelength) :: get_name_for_type_of_obs -character(len=*), parameter :: routine = 'get_name_for_type_of_obs' - -if ( .not. module_initialized ) call initialize_module - -call validate_obs_type_index(obs_type_ind, routine) - -get_name_for_type_of_obs = obs_type_info(obs_type_ind)%name - -end function get_name_for_type_of_obs - -!---------------------------------------------------------------------------- -! Added by TRW to handle matching RAW variable types to their strings -! as well as the derived types - this will make the restart file -! handling more readable. - -function get_name_for_quantity(obs_qty_ind) - -! Returns observation quantity name - -integer, intent(in) :: obs_qty_ind -character(len=obstypelength) :: get_name_for_quantity - -character(len=*), parameter :: routine = 'get_name_for_quantity' - -if (.not. module_initialized) call initialize_module - -call validate_obs_qty_index(obs_qty_ind, routine) - -get_name_for_quantity = obs_qty_info(obs_qty_ind)%name - -end function get_name_for_quantity -!---------------------------------------------------------------------------- - -function get_index_for_type_of_obs(obs_type_name) - -! Returns the integer index corresponding to an observation type string name -! Returns a -1 if this string is not in list - -character(len = *), intent(in) :: obs_type_name -integer :: get_index_for_type_of_obs - -integer :: i -character(len=*), parameter :: routine = 'get_index_for_type_of_obs' - -if ( .not. module_initialized ) call initialize_module - -!>@todo FIXME binary search on a sorted list? - -do i = 1, max_defined_types_of_obs - if(obs_type_name == obs_type_info(i)%name) then - get_index_for_type_of_obs = i - return - endif -end do - -get_index_for_type_of_obs = -1 - -end function get_index_for_type_of_obs - -!---------------------------------------------------------------------------- -! Added by TRW to handle matching RAW variable types to their strings -! as well as the derived types - this will make the restart file -! handling more readable. - -function get_index_for_quantity(obs_qty_name) - -! Returns the integer index corresponding to an observation quantity string name -! Returns a -1 if this string is not in list - -character(len=*), intent(in) :: obs_qty_name -integer :: get_index_for_quantity - -integer :: i -character(len=*), parameter :: routine = 'get_index_for_quantity' - -if (.not. module_initialized) call initialize_module - -do i = 0, max_defined_quantities - if(obs_qty_name == obs_qty_info(i)%name) then - get_index_for_quantity = i - return - end if -end do - -get_index_for_quantity = -1 - -end function get_index_for_quantity - -!---------------------------------------------------------------------------- -! Add a name/value pair to this quantity. -! Error if index out of range -! -! FIXME: find a better identifier than 'item' here? meta something? - -subroutine set_namevalue_for_quantity(obs_qty_ind, itemname, itemvalue) - -integer, intent(in) :: obs_qty_ind -character(len=*), intent(in) :: itemname -character(len=*), intent(in) :: itemvalue - -integer :: i -character(len=*), parameter :: routine = 'set_namevalue_for_quantity' - -if (.not. module_initialized) call initialize_module - -call validate_obs_qty_index(obs_qty_ind, routine) - -call validate_metadata_strings(obs_qty_ind, itemname, itemvalue) - -! FIXME: are replicated names an error? -! they could replace existing value for that name; or error out. - -do i=1, obs_qty_info(obs_qty_ind)%nitems - if (obs_qty_info(obs_qty_ind)%itemname(i) == itemname) then - ! item already found - do what? replace - obs_qty_info(obs_qty_ind)%itemvalue(i) = itemvalue - ! or error out? - ! call error_handler() - return - endif -enddo - -! add new entry -i = obs_qty_info(obs_qty_ind)%nitems + 1 -obs_qty_info(obs_qty_ind)%nitems = i -obs_qty_info(obs_qty_ind)%itemname(i) = itemname -obs_qty_info(obs_qty_ind)%itemvalue(i) = itemvalue - -end subroutine set_namevalue_for_quantity - -!---------------------------------------------------------------------------- -! Get number of name/value items for quantity -! Error if qty index out of range - -! (FIXME: terminology: metadata vs item vs ??) - -function get_num_items_for_quantity(obs_qty_ind) - -integer, intent(in) :: obs_qty_ind -integer :: get_num_items_for_quantity - -integer :: i -character(len=*), parameter :: routine = 'get_num_items_for_quantity' - -if (.not. module_initialized) call initialize_module - -call validate_obs_qty_index(obs_qty_ind, routine) - -get_num_items_for_quantity = obs_qty_info(obs_qty_ind)%nitems - -end function get_num_items_for_quantity - -!---------------------------------------------------------------------------- -! Get string value for item name by index for quantity of name/value pair -! Error if qty index out of range -! Error if item index out of range - -! (FIXME: terminology: metadata vs item vs ??) - -function get_itemname_for_quantity(obs_qty_ind, item_index) - -integer, intent(in) :: obs_qty_ind -integer, intent(in) :: item_index -character(len=namelen) :: get_itemname_for_quantity - -integer :: i -character(len=*), parameter :: routine = 'get_itemname_for_quantity' - -if (.not. module_initialized) call initialize_module - -! this validates the quantity index first, then the item index. -! if it returns w/o error, both indices are safe to use. -call validate_qty_item_index(obs_qty_ind, item_index, routine) - -get_itemname_for_quantity = obs_qty_info(obs_qty_ind)%itemname(item_index) - -end function get_itemname_for_quantity - -!---------------------------------------------------------------------------- -! Get string value for quantity by (qty index, item name) of name/value pair -! Error if qty index out of range -! Returns '' if no item name match (or 'null'?) - -! (FIXME: terminology: metadata vs item vs ??) - -function get_itemvalue_for_quantity(obs_qty_ind, itemname) - -integer, intent(in) :: obs_qty_ind -character(len=*), intent(in) :: itemname -character(len=valuelen) :: get_itemvalue_for_quantity - -integer :: i -character(len=*), parameter :: routine = 'get_itemvalue_for_quantity' - -if (.not. module_initialized) call initialize_module - -call validate_obs_qty_index(obs_qty_ind, routine) - -do i=1, obs_qty_info(obs_qty_ind)%nitems - if (obs_qty_info(obs_qty_ind)%itemname(i) == itemname) then - get_itemvalue_for_quantity = obs_qty_info(obs_qty_ind)%itemvalue(i) - return - endif -enddo - -get_itemvalue_for_quantity = '' - -end function get_itemvalue_for_quantity - -!---------------------------------------------------------------------------- -! convenience routine, could also be queried using the generic name=value interface -! Get bounds values for quantity by index -! Returns .false. if both min and max are missing_r8 -! A potential code shortcut for calling code if no bounds are present - -function has_bounds_for_quantity(obs_qty_ind, minbound, maxbound) - -integer, intent(in) :: obs_qty_ind -real(r8), intent(out) :: minbound -real(r8), intent(out) :: maxbound -logical :: has_bounds_for_quantity - -integer :: i -character(len=valuelen) :: boundstring -character(len=*), parameter :: routine = 'get_bounds_for_quantity' - -if (.not. module_initialized) call initialize_module - -call validate_obs_qty_index(obs_qty_ind, routine) - -minbound = MISSING_R8 -maxbound = MISSING_R8 - -do i=1, obs_qty_info(obs_qty_ind)%nitems - if (obs_qty_info(obs_qty_ind)%itemname(i) == "minbound") then - boundstring = obs_qty_info(obs_qty_ind)%itemvalue(i) - minbound = string_to_real(boundstring) - endif - if (obs_qty_info(obs_qty_ind)%itemname(i) == "maxbound") then - boundstring = obs_qty_info(obs_qty_ind)%itemvalue(i) - maxbound = string_to_real(boundstring) - endif -enddo - -has_bounds_for_quantity = .not. (minbound == MISSING_R8 .and. maxbound == MISSING_R8) - -end function has_bounds_for_quantity - -!---------------------------------------------------------------------------- -!> Accessor function to return observation type count - -function get_num_types_of_obs() - -integer :: get_num_types_of_obs - -if ( .not. module_initialized ) call initialize_module - -get_num_types_of_obs = max_defined_types_of_obs - -end function get_num_types_of_obs - -!---------------------------------------------------------------------------- -!> Accessor function to return observation quantity count - -function get_num_quantities() - -integer :: get_num_quantities - -if (.not. module_initialized) call initialize_module - -get_num_quantities = max_defined_quantities - -end function get_num_quantities - -!---------------------------------------------------------------------------- -!> Returns true if this obs_type is being assimilated - -function assimilate_this_type_of_obs(obs_type_ind) - -logical :: assimilate_this_type_of_obs -integer, intent(in) :: obs_type_ind - -character(len=*), parameter :: routine = 'assimilate_this_type_of_obs' - -if ( .not. module_initialized ) call initialize_module - -call validate_obs_type_index(obs_type_ind, routine) - -assimilate_this_type_of_obs = obs_type_info(obs_type_ind)%assimilate - -end function assimilate_this_type_of_obs - -!---------------------------------------------------------------------------- -!> Returns true if this obs_type is being evaluated - -function evaluate_this_type_of_obs(obs_type_ind) - -logical :: evaluate_this_type_of_obs -integer, intent(in) :: obs_type_ind - -character(len=*), parameter :: routine = 'evaluate_this_type_of_obs' - -if ( .not. module_initialized ) call initialize_module - -call validate_obs_type_index(obs_type_ind, routine) - -evaluate_this_type_of_obs = obs_type_info(obs_type_ind)%evaluate - -end function evaluate_this_type_of_obs - -!---------------------------------------------------------------------------- -!> Returns true if this obs_type should use externally computed priors - -function use_ext_prior_this_type_of_obs(obs_type_ind) - -logical :: use_ext_prior_this_type_of_obs -integer, intent(in) :: obs_type_ind - -character(len=*), parameter :: routine = 'use_ext_prior_this_type_of_obs' - -if ( .not. module_initialized ) call initialize_module - -call validate_obs_type_index(obs_type_ind, routine) - -use_ext_prior_this_type_of_obs = obs_type_info(obs_type_ind)%use_precomputed_FO - -end function use_ext_prior_this_type_of_obs - -!---------------------------------------------------------------------------- -!> Returns the associated generic quantity associated with the -!> specific type of this observation - -function get_quantity_for_type_of_obs(obs_type_ind) - -integer, intent(in) :: obs_type_ind -integer :: get_quantity_for_type_of_obs - -character(len=*), parameter :: routine = 'get_quantity_for_type_of_obs' - -if ( .not. module_initialized ) call initialize_module - -call validate_obs_type_index(obs_type_ind, routine) - -get_quantity_for_type_of_obs = obs_type_info(obs_type_ind)%quantity - -end function get_quantity_for_type_of_obs - -!---------------------------------------------------------------------------- -!> Writes out the observation type strings and corresponding integer -!> indices as a header for an obs_sequence file. - -subroutine write_type_of_obs_table(ifile, fform, use_list) - -integer, intent(in) :: ifile -character(len=*), intent(in), optional :: fform -integer, intent(in), optional :: use_list(:) - -integer :: i, ntypes -logical :: is_ascii, restrict -character(len=*), parameter :: routine = 'write_type_of_obs_table' - -if ( .not. module_initialized ) call initialize_module - -is_ascii = ascii_file_format(fform) - -! Write the 20 character identifier to indicate the start of a type table. -! To maintain complete backwards compatibility with the original read -! code this string must start in column 1. -! you cannot use: write(ifile, *) 'string' because the output string -! will start in col 2. the string either has to be part of the format -! argument to write(), or you have to use a separate format statement. -! FIXME: this needs to be obs_type_definitions for write. read has to -! accept either kind (now quantity and was incorrect for this table in -! any case) or type. -if (is_ascii) then - write(ifile, "('obs_type_definitions')") ! see note above! -else - write(ifile) 'obs_type_definitions' -endif - -! If this routine is called with a list of which types are actually -! being used, restrict the table of contents to only those. -! Otherwise, write all known types. -if (present(use_list)) then - ! make sure the list is the right length - if (size(use_list) /= max_defined_types_of_obs) then - call error_handler(E_ERR, routine, & - 'use_list(:) must be the same length as number of types', source) - endif - - ntypes = count(use_list(:) > 0) - restrict = .true. -else - ntypes = max_defined_types_of_obs - restrict = .false. -endif - -if (is_ascii) then - write(ifile, *) ntypes -else - write(ifile) ntypes -endif - -do i = 1, max_defined_types_of_obs - if (restrict) then - if (use_list(i) == 0) cycle - endif - - if (is_ascii) then - write(ifile, *) obs_type_info(i)%index, obs_type_info(i)%name - else - write(ifile) obs_type_info(i)%index, obs_type_info(i)%name - endif -end do - -end subroutine write_type_of_obs_table - -!---------------------------------------------------------------------------- -!> Reads the observation type strings and corresponding integer -!> indices as a header for an obs_sequence file. - -subroutine read_type_of_obs_table(ifile, pre_I_format, fform) - -integer, intent(in) :: ifile -logical, intent(in) :: pre_I_format -character(len=*), intent(in), optional :: fform - -character(len=20) :: header -character(len=obstypelength) :: o_name -integer :: i, num_def_types, o_index, list_index, rc -logical :: is_ascii -character(len=*), parameter :: routine = 'read_type_of_obs_table' - -if ( .not. module_initialized ) call initialize_module - -! pre_I_format has been deprecated. -if(pre_I_format) then - call error_handler(E_ERR, routine, 'pre_I_format no longer supported', source) -endif - -is_ascii = ascii_file_format(fform) - -! Read the 20 character identifier which identifies the start -! of the obstype number/name table for this sequence file. -if (is_ascii) then - read(ifile, *, iostat=rc) header -else - read(ifile, iostat=rc) header -endif - -if(rc /= 0 .or. (header /= 'obs_type_definitions' .and. header /= 'obs_kind_definitions')) then - write(msg_string, *) 'Did not find expected "obs_type_definitions" or "obs_kind_definitions" string at start of obs_seq file ' - write(msg_string1, *) 'Possible causes include: not an obs_seq file format, corrupted file, or wrong-endian binary file' - call error_handler(E_ERR, routine, msg_string, source, text2=msg_string1) -endif - -! Loop through the list to read the integer indices and strings -! For all the defined observation types -! Set up the map from types in the obs_sequence file to those -! in the data structure in this module. -if (is_ascii) then - read(ifile, *) num_def_types -else - read(ifile) num_def_types -endif - -do i = 1, num_def_types - if (is_ascii) then - read(ifile, *) o_index, o_name - else - read(ifile) o_index, o_name - endif - - ! What is the integer associated with this o_name in this module? - list_index = get_index_for_type_of_obs(o_name) - - ! Check for error - if(list_index == -1) then - write(msg_string, *) 'Did not find observation type "', o_name, & - '" in current type list compiled in this program' - call error_handler(E_ERR, routine, msg_string, source) - endif - - toc_mod_type_map%toc_type_index(i) = o_index - toc_mod_type_map%mod_type_index(i) = list_index -end do - -end subroutine read_type_of_obs_table - -!---------------------------------------------------------------------------- -!> Print a menu and read an obs type number -!> (Used for example in an interactive program) - -function get_type_of_obs_from_menu() - -integer :: get_type_of_obs_from_menu - -integer :: i, ierr -character(len=obstypelength) :: in -character(len=*), parameter :: routine = 'get_type_of_obs_from_menu' - -if ( .not. module_initialized ) call initialize_module - -! Should only do types that have been selected by preprocessor -! since those are being evaluated or assimilated. -21 continue -write(*, *) ' ', 'Input the name of the observation types from table below' -write(*, *) ' ', 'OR input (-1 * state variable index) for identity observations:' -do i = 1, max_defined_types_of_obs - if(assimilate_this_type_of_obs(i) .or. evaluate_this_type_of_obs(i)) & - write(*, *) ' ', obs_type_info(i)%index, trim(obs_type_info(i)%name) -end do - -! Read the input as a string, convert to integers as appropriate -read(*, '(A)') in - -! If string is a positive or negative number, convert it to integer -read(in, *, IOSTAT = ierr) get_type_of_obs_from_menu -if(ierr /= 0) then - get_type_of_obs_from_menu = get_index_for_type_of_obs(in) - ! If string isn't found, need to reprompt - if(get_type_of_obs_from_menu == -1) then - write(*, *) trim(in) // ' is not a supported type: Please try again.' - goto 21 - endif -else - ! Make sure that number entered isn't 0 or too larg - if(get_type_of_obs_from_menu == 0 .or. get_type_of_obs_from_menu > max_defined_types_of_obs) then - write(*, *) get_type_of_obs_from_menu, 'is not a legal entry: Please try again.' - goto 21 - endif -endif - -! Make sure - -end function get_type_of_obs_from_menu - -!---------------------------------------------------------------------------- -!> call this routine only where if an index is expected to be valid. -!> (it is a fatal error if not.) don't call this routine from code where -!> an out-of-range value is handled (e.g. it returns -1 instead). - -subroutine validate_obs_type_index(test_me, calling_routine) - -integer, intent(in) :: test_me -character(len=*), intent(in) :: calling_routine - -if (test_me < 1 .or. test_me > max_defined_types_of_obs) then - write(msg_string,'(A,I6,A,I6)') 'obs type number ', test_me, & - ' must be between 1 and ', max_defined_types_of_obs - call error_handler(E_ERR, calling_routine, msg_string, source) -endif - -end subroutine validate_obs_type_index - -!---------------------------------------------------------------------------- -!> call this routine only where if an index is expected to be valid. -!> (it is a fatal error if not.) don't call this routine from code where -!> an out-of-range value is handled (e.g. it returns -1 instead). - -subroutine validate_obs_qty_index(test_me, calling_routine) - -integer, intent(in) :: test_me -character(len=*), intent(in) :: calling_routine - -if (test_me < 0 .or. test_me > max_defined_quantities) then - write(msg_string,'(A,I6,A,I6)') 'obs quantity number ', test_me, & - ' must be between 0 and ', max_defined_quantities - call error_handler(E_ERR, calling_routine, msg_string, source) -endif - -end subroutine validate_obs_qty_index - -!---------------------------------------------------------------------------- -!> call this routine only where if an index is expected to be valid. -!> (it is a fatal error if not.) don't call this routine from code where -!> an out-of-range value is handled (e.g. it returns -1 instead). - -subroutine validate_qty_item_index(qty_index, test_me, calling_routine) -integer, intent(in) :: qty_index -integer, intent(in) :: test_me -character(len=*), intent(in) :: calling_routine - -integer :: nitems - -! test before using index -call validate_obs_qty_index(qty_index, calling_routine) - -nitems = obs_qty_info(qty_index)%nitems - -if (test_me < 1 .or. test_me > nitems) then - write(msg_string,'(3(A,I6))') 'item number ', test_me, ' for obs quantity number ', qty_index, & - ' ('//trim(obs_type_info(qty_index)%name)//') must be between 1 and ', nitems - call error_handler(E_ERR, calling_routine, msg_string, source) -endif - -end subroutine validate_qty_item_index - -!---------------------------------------------------------------------------- - -subroutine validate_metadata_strings(obs_qty_ind, itemname, itemvalue) - -integer, intent(in) :: obs_qty_ind -character(len=*), intent(in) :: itemname -character(len=*), intent(in) :: itemvalue - -character(len=*), parameter :: routine = 'validate_metadata_strings' - -if (len_trim(itemname) > namelen) then - write(msg_string, *) 'quantity ', obs_qty_ind, ' metadata name "'//trim(itemname)//'" must be shorter than', namelen - write(msg_string1, *) 'quantity ', obs_qty_ind, ' is ', get_name_for_quantity(obs_qty_ind) - call error_handler(E_ERR, routine, msg_string, source, text2=msg_string1) -endif - -if (len_trim(itemvalue) > valuelen) then - write(msg_string, *) 'quantity ', obs_qty_ind, ' metadata value "'//trim(itemvalue)//'" must be shorter than', valuelen - write(msg_string1, *) 'quantity ', obs_qty_ind, ' is ', get_name_for_quantity(obs_qty_ind) - call error_handler(E_ERR, routine, msg_string, source, text2=msg_string1) -endif - -end subroutine validate_metadata_strings - -!---------------------------------------------------------------------------- - -end module obs_kind_mod -!end module obs_qty_mod diff --git a/config/obskind.py b/config/obskind.py new file mode 100644 index 0000000000000000000000000000000000000000..6571c7463be4d8db04d584eefd0b8f9c10362ed9 --- /dev/null +++ b/config/obskind.py @@ -0,0 +1,335 @@ +# this file is autogenerated + obs_kind_nrs = {"RADIOSONDE_U_WIND_COMPONENT": 1, +"RADIOSONDE_V_WIND_COMPONENT": 2, +"RADIOSONDE_GEOPOTENTIAL_HGT": 3, +"RADIOSONDE_SURFACE_PRESSURE": 4, +"RADIOSONDE_TEMPERATURE": 5, +"RADIOSONDE_SPECIFIC_HUMIDITY": 6, +"DROPSONDE_U_WIND_COMPONENT": 7, +"DROPSONDE_V_WIND_COMPONENT": 8, +"DROPSONDE_SURFACE_PRESSURE": 9, +"DROPSONDE_TEMPERATURE": 10, +"DROPSONDE_SPECIFIC_HUMIDITY": 11, +"AIRCRAFT_U_WIND_COMPONENT": 12, +"AIRCRAFT_V_WIND_COMPONENT": 13, +"AIRCRAFT_TEMPERATURE": 14, +"AIRCRAFT_SPECIFIC_HUMIDITY": 15, +"ACARS_U_WIND_COMPONENT": 16, +"ACARS_V_WIND_COMPONENT": 17, +"ACARS_TEMPERATURE": 18, +"ACARS_SPECIFIC_HUMIDITY": 19, +"MARINE_SFC_U_WIND_COMPONENT": 20, +"MARINE_SFC_V_WIND_COMPONENT": 21, +"MARINE_SFC_TEMPERATURE": 22, +"MARINE_SFC_SPECIFIC_HUMIDITY": 23, +"MARINE_SFC_PRESSURE": 24, +"LAND_SFC_U_WIND_COMPONENT": 25, +"LAND_SFC_V_WIND_COMPONENT": 26, +"LAND_SFC_TEMPERATURE": 27, +"LAND_SFC_SPECIFIC_HUMIDITY": 28, +"LAND_SFC_PRESSURE": 29, +"SAT_U_WIND_COMPONENT": 30, +"SAT_V_WIND_COMPONENT": 31, +"ATOV_TEMPERATURE": 32, +"AIRS_TEMPERATURE": 33, +"AIRS_SPECIFIC_HUMIDITY": 34, +"GPS_PRECIPITABLE_WATER": 35, +"VADWND_U_WIND_COMPONENT": 36, +"VADWND_V_WIND_COMPONENT": 37, +"CIMMS_AMV_U_WIND_COMPONENT": 38, +"CIMMS_AMV_V_WIND_COMPONENT": 39, +"DOPPLER_RADIAL_VELOCITY": 40, +"RADAR_REFLECTIVITY": 41, +"RADAR_CLEARAIR_REFLECTIVITY": 42, +"PRECIPITATION_FALL_SPEED": 43, +"METAR_U_10_METER_WIND": 44, +"METAR_V_10_METER_WIND": 45, +"METAR_TEMPERATURE_2_METER": 46, +"METAR_SPECIFIC_HUMIDITY_2_METER": 47, +"METAR_SURFACE_PRESSURE": 48, +"METAR_POT_TEMP_2_METER": 49, +"DEWPOINT": 50, +"DEWPOINT_2_METER": 51, +"BUOY_DEWPOINT": 52, +"SHIP_DEWPOINT": 53, +"SYNOP_DEWPOINT": 54, +"AIREP_DEWPOINT": 55, +"AMDAR_DEWPOINT": 56, +"PILOT_DEWPOINT": 57, +"BOGUS_DEWPOINT": 58, +"AIRS_DEWPOINT": 59, +"METAR_DEWPOINT_2_METER": 60, +"RADIOSONDE_DEWPOINT": 61, +"DROPSONDE_DEWPOINT": 62, +"AIRCRAFT_DEWPOINT": 63, +"ACARS_DEWPOINT": 64, +"MARINE_SFC_DEWPOINT": 65, +"LAND_SFC_DEWPOINT": 66, +"RADIOSONDE_RELATIVE_HUMIDITY": 67, +"DROPSONDE_RELATIVE_HUMIDITY": 68, +"AIRCRAFT_RELATIVE_HUMIDITY": 69, +"ACARS_RELATIVE_HUMIDITY": 70, +"MARINE_SFC_RELATIVE_HUMIDITY": 71, +"LAND_SFC_RELATIVE_HUMIDITY": 72, +"METAR_RELATIVE_HUMIDITY_2_METER": 73, +"AIRS_RELATIVE_HUMIDITY": 74, +"MESONET_RELATIVE_HUMIDITY": 75, +"RADIOSONDE_SURFACE_ALTIMETER": 76, +"DROPSONDE_SURFACE_ALTIMETER": 77, +"MARINE_SFC_ALTIMETER": 78, +"LAND_SFC_ALTIMETER": 79, +"METAR_ALTIMETER": 80, +"MESONET_SURFACE_ALTIMETER": 81, +"TEMPERATURE": 82, +"SPECIFIC_HUMIDITY": 83, +"PRESSURE": 84, +"GPSRO_REFRACTIVITY": 85, +"VORTEX_LAT": 86, +"VORTEX_LON": 87, +"VORTEX_PMIN": 88, +"VORTEX_WMAX": 89, +"BUOY_U_WIND_COMPONENT": 90, +"BUOY_V_WIND_COMPONENT": 91, +"BUOY_SURFACE_PRESSURE": 92, +"BUOY_TEMPERATURE": 93, +"SHIP_U_WIND_COMPONENT": 94, +"SHIP_V_WIND_COMPONENT": 95, +"SHIP_SURFACE_PRESSURE": 96, +"SHIP_TEMPERATURE": 97, +"SYNOP_U_WIND_COMPONENT": 98, +"SYNOP_V_WIND_COMPONENT": 99, +"SYNOP_SURFACE_PRESSURE": 100, +"SYNOP_SPECIFIC_HUMIDITY": 101, +"SYNOP_TEMPERATURE": 102, +"AIREP_U_WIND_COMPONENT": 103, +"AIREP_V_WIND_COMPONENT": 104, +"AIREP_PRESSURE": 105, +"AIREP_TEMPERATURE": 106, +"AMDAR_U_WIND_COMPONENT": 107, +"AMDAR_V_WIND_COMPONENT": 108, +"AMDAR_PRESSURE": 109, +"AMDAR_TEMPERATURE": 110, +"PILOT_U_WIND_COMPONENT": 111, +"PILOT_V_WIND_COMPONENT": 112, +"PILOT_PRESSURE": 113, +"PILOT_TEMPERATURE": 114, +"BOGUS_U_WIND_COMPONENT": 115, +"BOGUS_V_WIND_COMPONENT": 116, +"BOGUS_PRESSURE": 117, +"BOGUS_TEMPERATURE": 118, +"PROFILER_U_WIND_COMPONENT": 119, +"PROFILER_V_WIND_COMPONENT": 120, +"PROFILER_PRESSURE": 121, +"SATEM_THICKNESS": 122, +"NOAA_1_VTPR1_RADIANCE": 123, +"NOAA_2_VTPR1_RADIANCE": 124, +"NOAA_3_VTPR1_RADIANCE": 125, +"NOAA_4_VTPR1_RADIANCE": 126, +"NOAA_5_HIRS_RADIANCE": 127, +"NOAA_5_MSU_TB": 128, +"NOAA_5_AVHRR_RADIANCE": 129, +"NOAA_6_HIRS_RADIANCE": 130, +"NOAA_6_MSU_TB": 131, +"NOAA_6_AVHRR_RADIANCE": 132, +"NOAA_7_HIRS_RADIANCE": 133, +"NOAA_7_MSU_TB": 134, +"NOAA_7_AVHRR_RADIANCE": 135, +"NOAA_8_HIRS_RADIANCE": 136, +"NOAA_8_MSU_TB": 137, +"NOAA_8_AVHRR_RADIANCE": 138, +"NOAA_9_HIRS_RADIANCE": 139, +"NOAA_9_MSU_TB": 140, +"NOAA_9_AVHRR_RADIANCE": 141, +"NOAA_10_HIRS_RADIANCE": 142, +"NOAA_10_MSU_TB": 143, +"NOAA_10_AVHRR_RADIANCE": 144, +"NOAA_11_HIRS_RADIANCE": 145, +"NOAA_11_MSU_TB": 146, +"NOAA_11_AVHRR_RADIANCE": 147, +"NOAA_12_HIRS_RADIANCE": 148, +"NOAA_12_MSU_TB": 149, +"NOAA_12_AVHRR_RADIANCE": 150, +"NOAA_13_AVHRR_RADIANCE": 151, +"NOAA_14_HIRS_RADIANCE": 152, +"NOAA_14_MSU_TB": 153, +"NOAA_14_AVHRR_RADIANCE": 154, +"NOAA_15_HIRS_RADIANCE": 155, +"NOAA_15_AMSUA_TB": 156, +"NOAA_15_AMSUB_TB": 157, +"NOAA_15_AVHRR_RADIANCE": 158, +"NOAA_16_HIRS_RADIANCE": 159, +"NOAA_16_AMSUA_TB": 160, +"NOAA_16_AMSUB_TB": 161, +"NOAA_16_AVHRR_RADIANCE": 162, +"NOAA_17_HIRS_RADIANCE": 163, +"NOAA_17_AMSUA_TB": 164, +"NOAA_17_AMSUB_TB": 165, +"NOAA_17_AVHRR_RADIANCE": 166, +"NOAA_18_HIRS_RADIANCE": 167, +"NOAA_18_AMSUA_TB": 168, +"NOAA_18_AVHRR_RADIANCE": 169, +"NOAA_18_MHS_TB": 170, +"NOAA_19_HIRS_RADIANCE": 171, +"NOAA_19_AMSUA_TB": 172, +"NOAA_19_AVHRR_RADIANCE": 173, +"NOAA_19_MHS_TB": 174, +"NOAA_20_ATMS_TB": 175, +"NOAA_20_VIIRS_RADIANCE": 176, +"DMSP_8_SSMI_TB": 177, +"DMSP_9_SSMI_TB": 178, +"DMSP_10_SSMI_TB": 179, +"DMSP_11_SSMI_TB": 180, +"DMSP_11_SSMT2_TB": 181, +"DMSP_12_SSMI_TB": 182, +"DMSP_12_SSMT2_TB": 183, +"DMSP_13_SSMI_TB": 184, +"DMSP_14_SSMI_TB": 185, +"DMSP_14_SSMT2_TB": 186, +"DMSP_15_SSMI_TB": 187, +"DMSP_15_SSMT2_TB": 188, +"DMSP_16_SSMIS_TB": 189, +"DMSP_17_SSMIS_TB": 190, +"DMSP_18_SSMIS_TB": 191, +"DMSP_19_SSMIS_TB": 192, +"METEOSAT_1_MVIRI_RADIANCE": 193, +"METEOSAT_2_MVIRI_RADIANCE": 194, +"METEOSAT_3_MVIRI_RADIANCE": 195, +"METEOSAT_4_MVIRI_RADIANCE": 196, +"METEOSAT_5_MVIRI_RADIANCE": 197, +"METEOSAT_6_MVIRI_RADIANCE": 198, +"METEOSAT_7_MVIRI_RADIANCE": 199, +"GOES_4_SOUNDER_RADIANCE": 200, +"GOES_5_SOUNDER_RADIANCE": 201, +"GOES_6_SOUNDER_RADIANCE": 202, +"GOES_7_SOUNDER_RADIANCE": 203, +"GOES_8_IMAGER_RADIANCE": 204, +"GOES_8_SOUNDER_RADIANCE": 205, +"GOES_9_IMAGER_RADIANCE": 206, +"GOES_9_SOUNDER_RADIANCE": 207, +"GOES_10_IMAGER_RADIANCE": 208, +"GOES_10_SOUNDER_RADIANCE": 209, +"GOES_11_IMAGER_RADIANCE": 210, +"GOES_11_SOUNDER_RADIANCE": 211, +"GOES_12_IMAGER_RADIANCE": 212, +"GOES_12_SOUNDER_RADIANCE": 213, +"GOES_13_IMAGER_RADIANCE": 214, +"GOES_13_SOUNDER_RADIANCE": 215, +"GOES_14_IMAGER_RADIANCE": 216, +"GOES_14_SOUNDER_RADIANCE": 217, +"GOES_15_IMAGER_RADIANCE": 218, +"GOES_15_SOUNDER_RADIANCE": 219, +"GOES_16_ABI_RADIANCE": 220, +"GOES_17_ABI_RADIANCE": 221, +"GOES_18_ABI_RADIANCE": 222, +"GOES_19_ABI_RADIANCE": 223, +"GMS_1_IMAGER_RADIANCE": 224, +"GMS_2_IMAGER_RADIANCE": 225, +"GMS_3_IMAGER_RADIANCE": 226, +"GMS_4_IMAGER_RADIANCE": 227, +"GMS_5_IMAGER_RADIANCE": 228, +"FY2_2_VISSR_RADIANCE": 229, +"FY2_3_VISSR_RADIANCE": 230, +"FY2_4_VISSR_RADIANCE": 231, +"FY2_5_VISSR_RADIANCE": 232, +"FY2_7_VISSR_RADIANCE": 233, +"TRMM_1_TMI_TB": 234, +"ERS_1_ATSR_RADIANCE": 235, +"ERS_1_MWR_TB": 236, +"ERS_2_ATSR_RADIANCE": 237, +"ERS_2_MWR_TB": 238, +"EOS_1_MODIS_RADIANCE": 239, +"EOS_1_ASTER_RADIANCE": 240, +"EOS_2_AMSUA_TB": 241, +"EOS_2_AIRS_RADIANCE": 242, +"EOS_2_HSB_TB": 243, +"EOS_2_MODIS_RADIANCE": 244, +"EOS_2_AMSRE_TB": 245, +"METOP_1_HIRS_RADIANCE": 246, +"METOP_1_AMSUA_TB": 247, +"METOP_1_AVHRR_RADIANCE": 248, +"METOP_1_MHS_TB": 249, +"METOP_2_HIRS_RADIANCE": 250, +"METOP_2_AMSUA_TB": 251, +"METOP_2_AVHRR_RADIANCE": 252, +"METOP_2_MHS_TB": 253, +"METOP_3_AVHRR_RADIANCE": 254, +"ENVISAT_1_ATSR_RADIANCE": 255, +"ENVISAT_1_MWR_TB": 256, +"MSG_1_SEVIRI_RADIANCE": 257, +"MSG_2_SEVIRI_RADIANCE": 258, +"MSG_3_SEVIRI_RADIANCE": 259, +"MSG_4_SEVIRI_RADIANCE": 260, +"MSG_4_SEVIRI_TB": 261, +"MSG_4_SEVIRI_BDRF": 262, +"FY1_3_MVISR_RADIANCE": 263, +"FY1_4_MVISR_RADIANCE": 264, +"MTSAT_1_IMAGER_RADIANCE": 265, +"MTSAT_2_IMAGER_RADIANCE": 266, +"CORIOLIS_1_WINDSAT_TB": 267, +"JPSS_0_ATMS_TB": 268, +"JPSS_0_VIIRS_RADIANCE": 269, +"SENTINEL3_1_SLSTR_RADIANCE": 270, +"SENTINEL3_2_SLSTR_RADIANCE": 271, +"MEGHATR_1_SAPHIR_TB": 272, +"MEGHATR_1_MADRAS_TB": 273, +"FY3_1_MWTS_TB": 274, +"FY3_1_MWHS_TB": 275, +"FY3_1_IRAS_RADIANCE": 276, +"FY3_1_MWRI_TB": 277, +"FY3_2_MWTS_TB": 278, +"FY3_2_MWHS_TB": 279, +"FY3_2_MWRI_TB": 280, +"FY3_3_MWRI_TB": 281, +"FY3_3_MWTS2_TB": 282, +"FY3_3_MWHS2_TB": 283, +"FY3_3_MERSI1_RADIANCE": 284, +"FY3_4_MWRI_TB": 285, +"FY3_4_MWTS2_TB": 286, +"FY3_4_MWHS2_TB": 287, +"FY3_4_MERSI2_RADIANCE": 288, +"COMS_1_MI_RADIANCE": 289, +"METEOR_M_1_MSUMR_RADIANCE": 290, +"METEOR_M_2_MSUMR_RADIANCE": 291, +"METEOR_M_2_MTVZAGY_TB": 292, +"CALIPSO_1_IIR_RADIANCE": 293, +"GCOM_W_1_AMSR2_TB": 294, +"NIMBUS_3_MRIR_RADIANCE": 295, +"NIMBUS_4_THIR_RADIANCE": 296, +"NIMBUS_5_THIR_RADIANCE": 297, +"NIMBUS_6_HIRS_RADIANCE": 298, +"NIMBUS_6_SCAMS_TB": 299, +"NIMBUS_6_THIR_RADIANCE": 300, +"NIMBUS_7_SMMR_TB": 301, +"NIMBUS_7_THIR_RADIANCE": 302, +"HIMAWARI_8_AHI_RADIANCE": 303, +"HIMAWARI_9_AHI_RADIANCE": 304, +"MTG_1_FCI_RADIANCE": 305, +"SARAL_1_ALTIKA_TB": 306, +"METOPSG_1_ICI_TB": 307, +"METOPSG_1_METIMAGE_RADIANCE": 308, +"METOPSG_1_MWS_TB": 309, +"METOPSG_1_MWI_TB": 310, +"LANDSAT_4_TM_RADIANCE": 311, +"LANDSAT_5_TM_RADIANCE": 312, +"LANDSAT_7_TM_RADIANCE": 313, +"LANDSAT_8_TIRS_RADIANCE": 314, +"JASON_2_AMR_TB": 315, +"GPM_1_GMI_TB": 316, +"GPM_1_DPR_TB": 317, +"INSAT3_4_IMAGER_RADIANCE": 318, +"INSAT3_4_SOUNDER_RADIANCE": 319, +"INSAT3_5_IMAGER_RADIANCE": 320, +"INSAT3_5_SOUNDER_RADIANCE": 321, +"TICFIRE_1_MBFIRI_RADIANCE": 322, +"ISS_1_ECOSTRES_RADIANCE": 323, +"HJ1_2_IRMSS_RADIANCE": 324, +"GKOMPSAT2_1_AMI_RADIANCE": 325, +"GCOM_C_1_SGLI_RADIANCE": 326, +"SMOS_1_MIRAS_TB": 327, +"ORS_6_COWVR_TB": 328, +"FY4_1_AGRI_RADIANCE": 329, +"TROPICS_0_TROPICS_TB": 330, +"GF5_1_VIMS_RADIANCE": 331, +"HY2_1_MWRI_TB": 332, +"CLOUDSAT_1_CPR_TB": 333, +} \ No newline at end of file diff --git a/dartwrf/create_obsseq.py b/dartwrf/create_obsseq.py index 92c325214ca5e0977c4490e68628b28eb054d471..df2a84725773b34dcf153127aa795925debd5216 100755 --- a/dartwrf/create_obsseq.py +++ b/dartwrf/create_obsseq.py @@ -15,7 +15,7 @@ from dartwrf.obs import calculate_obs_locations as col ##################### # Global variables -obs_kind_nrs = csv.DictReader(open("config/obskind.csv")) # DART internal indices +from config.obskind import obs_kind_nrs # DART internal indices # position on earth for RTTOV ray geometry lat0 = 45. diff --git a/dartwrf/workflows.py b/dartwrf/workflows.py index 43d9504f65a1f9f941197e98c5a7e2eb8adcfc32..cfb3673104ad30b642b0861a408d0949fe8065ea 100644 --- a/dartwrf/workflows.py +++ b/dartwrf/workflows.py @@ -15,10 +15,13 @@ from config.cfg import exp -def dict_to_csv(d, outfile): +def dict_to_py(d, outfile): with open(outfile, 'w') as f: - for key in d.keys(): - f.write("%s,%s\n"%(key,d[key])) + txt = '# this file is autogenerated \n obs_kind_nrs = {' + for k,v in d.items(): + txt += '"'+k+'": '+str(v)+', \n' + txt += '}' + f.write(txt) class WorkFlows(object): def __init__(self, exp_config='cfg.py', server_config='server.py'): @@ -69,7 +72,7 @@ class WorkFlows(object): obskind_nrs[kind_str] = kind_nr return obskind_nrs - dict_to_csv(obskind_read(), self.cluster.scriptsdir+'/../config/obskind.csv') + dict_to_py(obskind_read(), self.cluster.scriptsdir+'/../config/obskind.py') # Copy scripts to self.cluster.archivedir folder os.makedirs(self.cluster.archivedir, exist_ok=True)