diff --git a/config/obskind.csv b/config/obskind.csv new file mode 100644 index 0000000000000000000000000000000000000000..4e99e2749b93d146186649cb4659cde37662f5a6 --- /dev/null +++ b/config/obskind.csv @@ -0,0 +1,333 @@ +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 diff --git a/dartwrf/create_obsseq.py b/dartwrf/create_obsseq.py index 67f846515dbf8d05e2b72a4425a2f37ecb599c5e..92c325214ca5e0977c4490e68628b28eb054d471 100755 --- a/dartwrf/create_obsseq.py +++ b/dartwrf/create_obsseq.py @@ -5,44 +5,17 @@ according to which observations are generated and subsequently assimilated. import os, sys, warnings import numpy as np import datetime as dt +import csv from pysolar.solar import get_altitude, get_azimuth from config.cfg import exp from config.cluster import cluster from dartwrf.obs import calculate_obs_locations as col -def obskind_read(): - """Read dictionary of observation types + ID numbers ("kind") - from DART f90 script - """ - - definitionfile = cluster.scriptsdir+'/../config/obs_kind_mod.f90' - with open(definitionfile, 'r') as f: - kind_def_f = f.readlines() - - obskind_nrs = {} - for i, line in enumerate(kind_def_f): - if 'Integer definitions for DART OBS TYPES' in line: - # data starts below this line - i_start = i - break - for line in kind_def_f[i_start+1:]: - if 'MAX_DEFINED_TYPES_OF_OBS' in line: - # end of data - break - if '::' in line: - # a line looks like this - # integer, parameter, public :: MSG_4_SEVIRI_TB = 261 - data = line.split('::')[-1].split('=') - kind_str = data[0].strip() - kind_nr = int(data[1].strip()) - obskind_nrs[kind_str] = kind_nr - return obskind_nrs - ##################### # Global variables -obs_kind_nrs = obskind_read() # DART internal indices +obs_kind_nrs = csv.DictReader(open("config/obskind.csv")) # DART internal indices # position on earth for RTTOV ray geometry lat0 = 45. diff --git a/dartwrf/workflows.py b/dartwrf/workflows.py index 0c656e67b5d294fbfe05f2ddb0f0e5903bea82bf..43d9504f65a1f9f941197e98c5a7e2eb8adcfc32 100644 --- a/dartwrf/workflows.py +++ b/dartwrf/workflows.py @@ -12,6 +12,14 @@ import importlib from dartwrf.utils import script_to_str from config.cfg import exp + + + +def dict_to_csv(d, outfile): + with open(outfile, 'w') as f: + for key in d.keys(): + f.write("%s,%s\n"%(key,d[key])) + class WorkFlows(object): def __init__(self, exp_config='cfg.py', server_config='server.py'): """Set up the experiment folder in `archivedir`. @@ -34,8 +42,34 @@ class WorkFlows(object): # copy obs kind def to config, we will read a table from there # file needs to exist within package so sphinx can read it - shutil.copy(cluster.dart_srcdir+'/../../../assimilation_code/modules/observations/obs_kind_mod.f90', - cluster.scriptsdir+'/../config/') + def obskind_read(): + """Read dictionary of observation types + ID numbers ("kind") + from DART f90 script + """ + definitionfile = self.cluster.dart_srcdir+'/../../../assimilation_code/modules/observations/obs_kind_mod.f90' + with open(definitionfile, 'r') as f: + kind_def_f = f.readlines() + + obskind_nrs = {} + for i, line in enumerate(kind_def_f): + if 'Integer definitions for DART OBS TYPES' in line: + # data starts below this line + i_start = i + break + for line in kind_def_f[i_start+1:]: + if 'MAX_DEFINED_TYPES_OF_OBS' in line: + # end of data + break + if '::' in line: + # a line looks like this + # integer, parameter, public :: MSG_4_SEVIRI_TB = 261 + data = line.split('::')[-1].split('=') + kind_str = data[0].strip() + kind_nr = int(data[1].strip()) + obskind_nrs[kind_str] = kind_nr + return obskind_nrs + + dict_to_csv(obskind_read(), self.cluster.scriptsdir+'/../config/obskind.csv') # Copy scripts to self.cluster.archivedir folder os.makedirs(self.cluster.archivedir, exist_ok=True)