Skip to content
Snippets Groups Projects
Commit 04084847 authored by lkugler's avatar lkugler
Browse files

.

parent 3aaa8113
No related branches found
No related tags found
No related merge requests found
! 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
# 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
......@@ -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.
......
......@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment