PRO read_mip_nc_struc, mip_nc_fil, mip_l2_struc ; ; ; 28-JAN-08 VHP ; ; Sample IDL routine to read MIPAS L2 data from a netCDF file into a structure ; ; Input ;------- ; mip_nc_fil string containing mipas l2 netCDF filename ; ; Output ;-------- ; mip_l2_struc structure containing ; ; Example of use: ; IDL> read_mip_nc_struc, 'mipl2_20021013.nc', mip_l2_struc ; IDL> help, /struc, mip_l2_struc ; ; ; Contact: Vivienne Payne (vpayne@aer.com) ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; open the ncdf file for reading NCID = NCDF_OPEN(mip_nc_fil) ; determine the dimensions of arrays TIMDID = NCDF_DIMID(NCID, 'time') NCDF_DIMINQ, NCID, TIMDID, namtime, TOTSCAN ; total number of scans for this day LEVDID = NCDF_DIMID(NCID, 'level') NCDF_DIMINQ, NCID, LEVDID, namlev, NLEV ; GAS 0 is temperature ; GAS 1 is H2O ; GAS 2 is O3 ; GAS 3 is CH4 ; GAS 4 is HDO NGAS = 5 ; set up a structure to hold the data L2P = { PRE: FLTARR(NLEV), $ ; retrieved pressure PRF: FLTARR(NLEV), $ ; retrieved species profile (0=temperature) PRFSD: FLTARR(NLEV), $ ; random error on retrieved profile APRF: FLTARR(NLEV), $ ; a priori profile APRFSD: FLTARR(NLEV), $ ; a priori uncertainty CHI: FLTARR(NLEV), $ ; chi2 value for each altitude QFLGMW: FLTARR(NLEV), $ ; quality flag from MW convergence AK: FLTARR(NLEV, NLEV), $ ; averaging kernel AKSUM: FLTARR(NLEV), $ ; sum of the row of the averaging kernels CLD: FLTARR(NLEV), $ ; cloud flag profile SCANNUM: 0., $ ; MIPAS scan number (orbit starts count at zero) ORBIT: 0., $ ; Orbit number LATITUDE: 0., $ ; latitude (of 18 km nominal altitude) LONGITUDE: 0., $ ; longitude (of 18 km nominal altitude) UTCREAL: ' ', $ ; universal time (hhmmss) UTC1993: 0L, $ ; seconds since 1993-01-01 LST: 0., $ ; local solar time (in hours) SZA: 0. } ; solar zenith angle (in deg) L2S = CREATE_STRUCT('SCAN', REPLICATE(L2P, TOTSCAN)) MIP_L2_STRUC = CREATE_STRUCT('GAS', REPLICATE(L2S, NGAS)) ; read the data into the structure ; loop over the limb scans in the file ;FOR ISCAN= 0, TOTSCAN - 1 DO BEGIN ; read temperature retrieval info vid = ncdf_varid(ncid, 'T') ncdf_varget, ncid, vid, t_prf mip_l2_struc.gas(0).scan.prf = t_prf vid = ncdf_varid(ncid, 'T_SX') ncdf_varget, ncid, vid, t_sx mip_l2_struc.gas(0).scan.prfsd = t_sx vid = ncdf_varid(ncid, 'T_A') ncdf_varget, ncid, vid, t_aprf mip_l2_struc.gas(0).scan.prf = t_aprf vid = ncdf_varid(ncid, 'T_SA') ncdf_varget, ncid, vid, t_sa mip_l2_struc.gas(0).scan.prfsd = t_sa vid = ncdf_varid(ncid, 'T_qflgmw') ncdf_varget, ncid, vid, t_qflgmw mip_l2_struc.gas(0).scan.qflgmw = t_qflgmw vid = ncdf_varid(ncid, 'T_chisq') ncdf_varget, ncid, vid, t_chisq mip_l2_struc.gas(0).scan.chi = t_chisq vid = ncdf_varid(ncid, 'T_AK') ncdf_varget, ncid, vid, t_ak mip_l2_struc.gas(0).scan.ak = t_ak vid = ncdf_varid(ncid, 'T_AKSUM') ncdf_varget, ncid, vid, t_aksum mip_l2_struc.gas(0).scan.aksum = t_aksum ; read general stuff into the temperature part of the structure vid = ncdf_varid(ncid, 'cloud_flag') ncdf_varget, ncid, vid, cld mip_l2_struc.gas(0).scan.cld = cld vid = ncdf_varid(ncid, 'pressure') ncdf_varget, ncid, vid, pre mip_l2_struc.gas(0).scan.pre = pre vid = ncdf_varid(ncid, 'orbit') ncdf_varget, ncid, vid, orbit mip_l2_struc.gas(0).scan.orbit = orbit vid = ncdf_varid(ncid, 'scan') ncdf_varget, ncid, vid, scan mip_l2_struc.gas(0).scan.scannum = scan vid = ncdf_varid(ncid, 'latitude') ncdf_varget, ncid, vid, lat mip_l2_struc.gas(0).scan.latitude = lat vid = ncdf_varid(ncid, 'longitude') ncdf_varget, ncid, vid, lon mip_l2_struc.gas(0).scan.longitude = lon vid = ncdf_varid(ncid, 'utctime') ncdf_varget, ncid, vid, utctime mip_l2_struc.gas(0).scan.utc1993 = utctime vid = ncdf_varid(ncid, 'time') ncdf_varget, ncid, vid, utcreal mip_l2_struc.gas(0).scan.utcreal = string(utcreal, format='(i6.6)') vid = ncdf_varid(ncid, 'sza') ncdf_varget, ncid, vid, sza mip_l2_struc.gas(0).scan.sza = sza vid = ncdf_varid(ncid, 'local_solar_time') ncdf_varget, ncid, vid, lst mip_l2_struc.gas(0).scan.lst = lst ; read H2O retrieval info vid = ncdf_varid(ncid, 'H2O') ncdf_varget, ncid, vid, h2o_prf mip_l2_struc.gas(1).scan.prf = h2o_prf vid = ncdf_varid(ncid, 'H2O_SX') ncdf_varget, ncid, vid, h2o_sx mip_l2_struc.gas(1).scan.prfsd = h2o_sx vid = ncdf_varid(ncid, 'H2O_A') ncdf_varget, ncid, vid, h2o_aprf mip_l2_struc.gas(1).scan.prf = h2o_aprf vid = ncdf_varid(ncid, 'H2O_SA') ncdf_varget, ncid, vid, h2o_sa mip_l2_struc.gas(1).scan.prfsd = h2o_sa vid = ncdf_varid(ncid, 'H2O_qflgmw') ncdf_varget, ncid, vid, h2o_qflgmw mip_l2_struc.gas(1).scan.qflgmw = h2o_qflgmw vid = ncdf_varid(ncid, 'H2O_chisq') ncdf_varget, ncid, vid, h2o_chisq mip_l2_struc.gas(1).scan.chi = h2o_chisq vid = ncdf_varid(ncid, 'H2O_AK') ncdf_varget, ncid, vid, h2o_ak mip_l2_struc.gas(1).scan.ak = h2o_ak vid = ncdf_varid(ncid, 'H2O_AKSUM') ncdf_varget, ncid, vid, h2o_aksum mip_l2_struc.gas(1).scan.aksum = h2o_aksum ; read general stuff into the H2O part of the structure mip_l2_struc.gas(1).scan.cld = cld mip_l2_struc.gas(1).scan.pre = pre mip_l2_struc.gas(1).scan.orbit = orbit mip_l2_struc.gas(1).scan.scannum = scan mip_l2_struc.gas(1).scan.latitude = lat mip_l2_struc.gas(1).scan.longitude = lon mip_l2_struc.gas(1).scan.utc1993 = utctime mip_l2_struc.gas(1).scan.utcreal = utcreal mip_l2_struc.gas(1).scan.sza = sza mip_l2_struc.gas(1).scan.lst = lst ; read O3 retrieval info vid = ncdf_varid(ncid, 'O3') ncdf_varget, ncid, vid, o3_prf mip_l2_struc.gas(2).scan.prf = o3_prf vid = ncdf_varid(ncid, 'O3_SX') ncdf_varget, ncid, vid, o3_sx mip_l2_struc.gas(2).scan.prfsd = o3_sx vid = ncdf_varid(ncid, 'O3_A') ncdf_varget, ncid, vid, o3_aprf mip_l2_struc.gas(2).scan.prf = o3_aprf vid = ncdf_varid(ncid, 'O3_SA') ncdf_varget, ncid, vid, o3_sa mip_l2_struc.gas(2).scan.prfsd = o3_sa vid = ncdf_varid(ncid, 'O3_qflgmw') ncdf_varget, ncid, vid, o3_qflgmw mip_l2_struc.gas(2).scan.qflgmw = o3_qflgmw vid = ncdf_varid(ncid, 'O3_chisq') ncdf_varget, ncid, vid, o3_chisq mip_l2_struc.gas(2).scan.chi = o3_chisq vid = ncdf_varid(ncid, 'O3_AK') ncdf_varget, ncid, vid, o3_ak mip_l2_struc.gas(2).scan.ak = o3_ak vid = ncdf_varid(ncid, 'O3_AKSUM') ncdf_varget, ncid, vid, o3_aksum mip_l2_struc.gas(2).scan.aksum = o3_aksum ; read general stuff into the O3 part of the structure mip_l2_struc.gas(2).scan.cld = cld mip_l2_struc.gas(2).scan.pre = pre mip_l2_struc.gas(2).scan.orbit = orbit mip_l2_struc.gas(2).scan.scannum = scan mip_l2_struc.gas(2).scan.latitude = lat mip_l2_struc.gas(2).scan.longitude = lon mip_l2_struc.gas(2).scan.utc1993 = utctime mip_l2_struc.gas(2).scan.utcreal = utcreal mip_l2_struc.gas(2).scan.sza = sza mip_l2_struc.gas(2).scan.lst = lst ; read CH4 retrieval info vid = ncdf_varid(ncid, 'CH4') ncdf_varget, ncid, vid, ch4_prf mip_l2_struc.gas(3).scan.prf = ch4_prf vid = ncdf_varid(ncid, 'CH4_SX') ncdf_varget, ncid, vid, ch4_sx mip_l2_struc.gas(3).scan.prfsd = ch4_sx vid = ncdf_varid(ncid, 'CH4_A') ncdf_varget, ncid, vid, ch4_aprf mip_l2_struc.gas(3).scan.prf = ch4_aprf vid = ncdf_varid(ncid, 'CH4_SA') ncdf_varget, ncid, vid, ch4_sa mip_l2_struc.gas(3).scan.prfsd = ch4_sa vid = ncdf_varid(ncid, 'CH4_qflgmw') ncdf_varget, ncid, vid, ch4_qflgmw mip_l2_struc.gas(3).scan.qflgmw = ch4_qflgmw vid = ncdf_varid(ncid, 'CH4_chisq') ncdf_varget, ncid, vid, ch4_chisq mip_l2_struc.gas(3).scan.chi = ch4_chisq vid = ncdf_varid(ncid, 'CH4_AK') ncdf_varget, ncid, vid, ch4_ak mip_l2_struc.gas(3).scan.ak = ch4_ak vid = ncdf_varid(ncid, 'CH4_AKSUM') ncdf_varget, ncid, vid, ch4_aksum mip_l2_struc.gas(3).scan.aksum = ch4_aksum ; read general stuff into the CH4 part of the structure mip_l2_struc.gas(3).scan.cld = cld mip_l2_struc.gas(3).scan.pre = pre mip_l2_struc.gas(3).scan.orbit = orbit mip_l2_struc.gas(3).scan.scannum = scan mip_l2_struc.gas(3).scan.latitude = lat mip_l2_struc.gas(3).scan.longitude = lon mip_l2_struc.gas(3).scan.utc1993 = utctime mip_l2_struc.gas(3).scan.utcreal = utcreal mip_l2_struc.gas(3).scan.sza = sza mip_l2_struc.gas(3).scan.lst = lst ; read HDO retrieval info vid = ncdf_varid(ncid, 'HDO') ncdf_varget, ncid, vid, hdo_prf mip_l2_struc.gas(4).scan.prf = hdo_prf vid = ncdf_varid(ncid, 'HDO_SX') ncdf_varget, ncid, vid, hdo_sx mip_l2_struc.gas(4).scan.prfsd = hdo_sx vid = ncdf_varid(ncid, 'HDO_A') ncdf_varget, ncid, vid, hdo_aprf mip_l2_struc.gas(4).scan.prf = hdo_aprf vid = ncdf_varid(ncid, 'HDO_SA') ncdf_varget, ncid, vid, hdo_sa mip_l2_struc.gas(4).scan.prfsd = hdo_sa vid = ncdf_varid(ncid, 'HDO_qflgmw') ncdf_varget, ncid, vid, hdo_qflgmw mip_l2_struc.gas(4).scan.qflgmw = hdo_qflgmw vid = ncdf_varid(ncid, 'HDO_chisq') ncdf_varget, ncid, vid, hdo_chisq mip_l2_struc.gas(4).scan.chi = hdo_chisq vid = ncdf_varid(ncid, 'HDO_AK') ncdf_varget, ncid, vid, hdo_ak mip_l2_struc.gas(4).scan.ak = hdo_ak vid = ncdf_varid(ncid, 'HDO_AKSUM') ncdf_varget, ncid, vid, hdo_aksum mip_l2_struc.gas(4).scan.aksum = hdo_aksum ; read general stuff into the HDO part of the structure mip_l2_struc.gas(4).scan.cld = cld mip_l2_struc.gas(4).scan.pre = pre mip_l2_struc.gas(4).scan.orbit = orbit mip_l2_struc.gas(4).scan.scannum = scan mip_l2_struc.gas(4).scan.latitude = lat mip_l2_struc.gas(4).scan.longitude = lon mip_l2_struc.gas(4).scan.utc1993 = utctime mip_l2_struc.gas(4).scan.utcreal = utcreal mip_l2_struc.gas(4).scan.sza = sza mip_l2_struc.gas(4).scan.lst = lst ;ENDFOR ; iscan return END