version_history_readme 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376
  1. This code:
  2. DOMINO NO2 retrieval/assimilation, DOMINO v3.1.8, 25-08-2016
  3. Version history DOMINO NO2 retrieval:
  4. 3.1.8 DOMINO v3 with TROPOMI interfaces and de-striping, Henk Eskes, KNMI, August 2016
  5. - Bug fix MStripeCorrection: make sure one file is generated per day, and one file is read at startup
  6. (stripe corr for orbit at 00:06 is written to file for the previous day)
  7. - Update to read the latest AMF files, which contain AMF/AMFgeo
  8. o assim.F90: read .rc flag "domino.amf.divide.by.amgeo", passing on to "ReadAmfLut"
  9. o MAmfRead.F90: added flag "divideByAMFGeo"
  10. o MAmfGet.F90: use simple AMFgeo definition instead of Leue expression
  11. - MStripeCorrection.F90
  12. o Debugging of the destriping code
  13. o Stripe input/output : netcdf files
  14. o Number of across track points generalised (no longer 60), to support e.g. TROPOMI
  15. 3.1.7 DOMINO v3 with TROPOMI interfaces, Henk Eskes, KNMI, August 2016
  16. - MOmF_output.F90:
  17. o major changes: to account for different number of superobs in fc and an
  18. - MStripeCorrection.F90: undef -> nf_fill_float
  19. - MObservationOperator.F90:
  20. o undef -> nf_fill_float
  21. o cloud radiance fraction: extra output to measure difference between input and computed values "crf_m0" etc
  22. o cloud radiance fraction: in case CRF is computed (changed), it is also replaced in the L2 file
  23. - TM5IF_module.F90:
  24. Now supports "cloud_radiance_fraction_no2" output (only when computed internally)
  25. - MTObsFcInfo.F90: extra flag "cloudRadFraction_computed" added
  26. - MOmFSuper.F90:
  27. o "usePixel" is used (kept in storage) for both forecast and analysis step
  28. o Extra flag check included to allow less observations in the analysis case, update of "usePixel"
  29. o bug fix: "MOmFSuper.F90" re-written to force the number of obs in analysis and forecast to be the same
  30. - MAmFGet: warnings have been commented to avoid very long listings
  31. - bug fix: "MObsRead.F90"; one (undefined) line too many was read from the list file
  32. - rc-file: extra "domino.<flag>" settings added
  33. - "assim_interf_mod.F90"
  34. extra flag "domino.doNudgeOdinHNO3" read from the .rc file
  35. - Re-tuning of the "strat_error" and "forecastError", leading to a stronger forcing to the observations:
  36. "MOmFSuper.F90" and "MNO2RetrievalError.F90"
  37. - "assim.F90"
  38. o Calls to "MOmF_output" routine
  39. o Extra flags read from the .rc file: domino.compute.retrieval.for.analysis, domino.write.OmF, domino.debug.mode
  40. o call to "terrain_read" removed
  41. o extra determination of total column: "no2col_fc" and "no2col_an"
  42. - "terrain.F90" module removed; call in "assim.F90" removed
  43. - "TM5IF_module.F90" - now reads also the orbit number
  44. - New module "MOmF_output.F90"
  45. extra observation-minus-forecast output to netcdf
  46. extra calls in "assim.F90"
  47. - "assim.F90" now includes a flag "computeRetrievalForAnalysis" which makes it
  48. possible to skip the retrieval for the analysis
  49. - "MOmFSuper.F90", now assimilates half of the superobservations for speed increase
  50. 3.1.6 DOMINO v3 with TROPOMI interfaces, Henk Eskes, KNMI, July 2016
  51. - "MObsRead.F90" is now reading all orbit file names at start, and
  52. advances through the list testing only one file at a time
  53. "TM5IF_module.F90": provides an extra flag "before_or_after" to signal
  54. if orbit time is before, at, or after time interval
  55. - Added timer for assimilation step in "tm5.F90"
  56. - Adding "tm5.inc" to all files
  57. - LAPACK-based "oi_module.F90" (speed-up of analysis by about factor 5)
  58. - Bug fix: TM5IF_module.F90
  59. order of dimensions of "tm5_pressure_level_a" and "tm5_pressure_level_b" (reverse order of fortran and netcdf!)
  60. - "assim_interf_mod.F90": ODIN HNO3/O3 nudging switched off
  61. ODIN nudging is now fixed in TM5, and TM5 implementation is default
  62. 3.1.5 DOMINO v3 with TROPOMI interfaces, Henk Eskes, KNMI, May 2016
  63. - Bug fix: MAmfGet.F90,
  64. "flag": warnings are now processed
  65. - Snow and Ice: Switch to scene retrieval has been implemented
  66. MObservationOperator.F90
  67. introduced array "isSnowIce",
  68. set cloud (radiance) fraction to = 1 when snow/ice cover > 50 %
  69. - "TM5IF_module.F90"
  70. The write subroutine has been largely rewritten to be consistent with the
  71. latest output definition (Jos van Geffen, May 2016)
  72. Few changes in read part,
  73. including reading of snowIceFlag, sceneAlbedo, scenePressure and "use_scd_qa4ecv_units"
  74. MTObsFcInfo.F90:
  75. Added "amfclear" (+ allocate/deallocate)
  76. MTObsTrack
  77. Added "snowIceFlag" (+ allocate/deallocate)
  78. Added "sceneAlbedo" (+ allocate/deallocate)
  79. Added "scenePressure" (+ allocate/deallocate)
  80. MObservationOperator.F90:
  81. Added variables "no2slcfctropclear" and "amfclear"
  82. Fill "ObsFcInfo%amfclear"
  83. assim.F90: pass TM5 hybrid layer info to writing routine:
  84. call TM5IF_obsfcinfo_write( no2Tr, obsFcInfo, TM5Data )"
  85. - Added new ODIN HNO3/O3 nudging capability
  86. A new file "odin_hno3_o3_ratio.nc" was created based on the original ODIN climatology files
  87. In these files there are hno3/o3 fields explicitly processed for the top 6 layers of TM5
  88. (Odin integrated over the TM5 layers)
  89. "MOdinHNO3.F90": This new module was added to read the new ODIN climatology file,
  90. and to compute the nudging adjustment for HNO3. Nudging formula has been updated (explicit exponential)
  91. "assim_interf_mod.F90": This interface was extended to gather the zonal means of O3 and HNO3,
  92. and to update the HNO3 concentration after nudging
  93. "boundary.F90": bug fix on reals being used for array indices
  94. If "use_ODIN" (input.climat.ODIN) is False, nothing will be done (default option was 10hPa nudging)
  95. 3.1.4 DOMINO v3 with TROPOMI interfaces, Henk Eskes, KNMI, April 2016
  96. 28 April:
  97. - Upgrade of the TM5 code to revision 334, date: 2016-04-25
  98. The previous domino versions were using an old TM5-MP version of April 2015
  99. - Upgrade of "tm5.F90" to revision 334
  100. 22 April:
  101. - Adjustment of the file reading routine in "TM5IF_module.F90"
  102. to read the QA4ECV files:
  103. o "processing_error_flag" is no longer used, instead we read "processing_quality_flags" which is more detailed
  104. o "solar_zenith_angle_surf" is now "solar_zenith_angle", same for "viewing_zenith_angle" and "relative_azimuth_angle"
  105. o different units on SCD are accounted for, see "use_scd_qa4ecv_units"
  106. o the SCD units are read and used: "TM5IF_get_var_att_str("scd_no2", "units", scd_unit_string)"
  107. unit conversion is now depending on this attribute
  108. o added "function TM5IF_get_var_att_str(varname, name, value)"
  109. - Adjustment of the error checking in "MObservationOperator.F90"
  110. o subroutine "CheckValueRanges" re-written:
  111. nr of errors are now counted, instead of reporting individual errors
  112. o same for main routine:
  113. counters added: "nPixelsWithErrors", "nSmallAmftroptotal"
  114. reporting only total number of pixels with errors, at end of the routine
  115. 'GetOMFHx: WARNING, nr of pixels with error flag =', nPixelsWithErrors
  116. - Adding stripe correction calls in "MObservationOperator.F90"
  117. o "doApplyStripeCorrection" flag added
  118. o "use MStripeCorrection"
  119. calls to "ReadOMIStripeCorrection" and "ComputeOMIStripeCorrection" added
  120. use "stripeCorr" and "stripeCorrAvailable"
  121. satscd = no2Tr%no2SLC(iObs)
  122. if ( doApplyStripeCorrection .and. stripeCorrAvailable ) then
  123. ! apply the OMI slant column stripe corrections to the DOAS slant column
  124. satscd = satscd - stripeCorr( no2Tr%pixelIndex(iObs) )
  125. o Better support for the TROPOMI flagging: warnings vs errors
  126. "ObsFcInfo%flag(iObs) > 0" replaced by "iand(ObsFcInfo%flag(iObs), 255) /= 0" etc
  127. 7 April:
  128. - Include the new cross section temperature correction factor
  129. Update by Marina Zara, TN-OMIE-KNMI-982, March 2016, for DOMINO-3
  130. correction factor = 1 - 0.00316 (T-Tdoasfit) + 3.39e-6 (T-Tdoasfit)^2
  131. "real, parameter :: Tcorrection_Acoeff = -0.00316"
  132. "real, parameter :: Tcorrection_Bcoeff = 3.39e-6"
  133. "dTemp = Tlayer(iObs,l) - Tdoasfit"
  134. "sigmacorrlev(iObs,l) = 1.0 + Tcorrection_Acoeff * dTemp + Tcorrection_Bcoeff * dTemp * dTemp"
  135. - Re-write of "MAmfGet.F90" by Martien de Haan, to avoid problems at exact edges of the LUT.
  136. 3.1.3 DOMINO v3 with TROPOMI interfaces, Henk Eskes, KNMI, 18 Nov 2015
  137. Henk Eskes, KNMI, 7 Apr 2015
  138. - Bug fix "MAmfGet.F90", routine "GetAmf_vectorised"
  139. - Extra debug output for "MAmfGet.F90" and "MObservationOperator.F90"
  140. - replaced 3 flags: PQF_E_GENERIC_EXCEPTION -> PQF_E_GENERIC_RANGE_ERROR
  141. Henk Eskes, KNMI, 18 Nov 2015
  142. Extracted from the DOMINO 3.1.1 and 3.1.2 code
  143. Main changes: This version includes the error messages implemented
  144. for 3.1.2 and adds them to the 3.1.1 code.
  145. - MTAmfLut, MAmfGet.F90: copy of version 3.1.2
  146. - MNO2RetrievalError.F90: copy of version 3.1.2
  147. - MObservationOperator.F90: copy of version 3.1.2
  148. includes extra option “useTerrainPressureFromFile” and extra parameter “amfTropCutOff”
  149. - MTObsFcInfo: copy of version 3.1.2
  150. includes init with fill values, “fltrop” -> “flag” has new meaning
  151. - MTObsTrack: copy of version 3.1.2
  152. “terrainPressureFactor” replaced by “terrainPressure” (hPa)
  153. - “pqf_module” added, with error/warning flag definitions
  154. Other changes:
  155. - assim: “debugMode” added
  156. - TM5IF_module.F90: “terrainPressureFactor” replaced by “terrainPressure” (hPa)
  157. 3.1.2 TROPOMI DOMINO NRT code, Henk Eskes, KNMI, 23 Oct 2015
  158. Extracted from the DOMINO 3.1.1 code
  159. - Setting change: useCloudRadianceFractionFromFile = .true. (MObservationOperator.F90)
  160. - Extra flag: "useTerrainPressureFromFile" in MObservationOperator.F90
  161. - Extra flag: "amfTropCutOff" in MObservationOperator.F90
  162. - Extra routine: "CheckValueRanges" in MObservationOperator.F90
  163. - "NO2ErrEstimate" now returns a status
  164. - "fltrop" replaced by "flag" in "MTObsFcInfo"
  165. - Initialise variables with netcdf fill values in "MTObsFcInfo"
  166. - Clear albedo "albclear" and cloud radiance fraction is restricted to [0,1] in MObservationOperator.F90
  167. - "GetAmf_vectorised": extra check on flag > 0 performed
  168. - Now using the "pqf_module" for warning/error flags
  169. - "MTObsTrack.F90": replace "terrainPressureFactor" by "terrainPressure"
  170. - Error handling has been revised in a major way: aborts have been replaced by setting the error flag
  171. e.g. new routine "CheckValueRanges"
  172. e.g. "GetAmf_vectorised" now has error flag as input/output
  173. e.g. flag is used to skip code in case of error, in "GetOMFHx"
  174. - Printing through call to "fortranlog" (TROPOMI)
  175. - Debug option introduced
  176. 3.1.1 DOMINO v3 with TROPOMI interfaces, 13 October 2015, Henk Eskes, KNMI
  177. Changes wrt 3.1.0:
  178. - New interface to updated AMF Lookup Tables (Alba Lorente, Folkert Boersma, QA4ECV, Sep-Oct 2015)
  179. "MAmfGet.F90" "MAmfRead.F90" "MTAmf.F90"
  180. - Added interface module for AMF: "MTAmf.F90"
  181. - Remove "newmonth" and "month" input parameters from call to "GetOMFHx" (no impact on results),
  182. updated explanatory text.
  183. This involves modules "MObservationOperator.F90" and "MNO2RetrievalError.F90"
  184. 3.1.0 28 September 2015, DOMINO v3 with TROPOMI interfaces
  185. Henk Eskes, Mark ter Linden, KNMI
  186. Addition of TROPOMI netcdf interfaces
  187. Changes wrt 3.0.0:
  188. - Interface modules "MTObsTrack.F90" and "MTObsFcInfo.F90" were updated / simplified
  189. the "TObsTrack" structure now has allocatable arrays
  190. - Modules "MObsRead.F90" and "TM5IF_module.f90" developed by Mark ter Linden
  191. For reading slant columns retrieval L2 files in TROPOMI netcdf format
  192. For writing (replacing) vertical column data in the same L2 files
  193. - The O2-O2 cloud retrieval correction modules of Bram Maasakkers have been removed
  194. - Paths are now read from the TM5 rc file
  195. - Bug fixes:
  196. o call to "NO2ErrEstimate": there was a bug in passing the arrays to the routine
  197. (only first data block in the arrays was used)
  198. 3.0.0 21 August 2015, beta version DOMINO v3
  199. Henk Eskes, KNMI
  200. With new interfaces to the TM5-CB05-mp parallel version, release early 2015
  201. --> project: proj/domino
  202. Based on DOMINO-3 discussed in thesis Maasakkers, see below (v2.1.0.0)
  203. Changes wrt v2.1:
  204. - call in "tm5.F90" has been adjusted (two calls replaced by one, different location in time stepping sequence)
  205. - interface to the parallel TM5 code has been developed: module "assim_interf_mod.F90"
  206. o introducing "gather" and "scatter" mechanisms
  207. o interface has an improved way of extracting the NO2 field, using the ratio of "mixing NOx" and "chemistry NOx"
  208. o scaling of NOx concentration and slopes
  209. - introduce "MTM5Data.F90", which is a generic interface to TM5 (also for the NRT code, based on TM files)
  210. - introduce the generic structure "MTObsTrack.F90" for the interface to the input slant column data files (L2-slc)
  211. - introduce the generic structure "MTObsFcInfo.F90" for the interface to the output vertical column data files (L2)
  212. - "assim" now computes the grid cell columns: "GetNO2PartialColumnField"
  213. - re-written netcdf interfaces for the various input files (lookup-tables)
  214. - clean-up of all modules
  215. - replaced fixed storage by allocatable storage in several places
  216. - removal of 32-bit additional arrays (which are not needed)
  217. - ...
  218. 2.1.0.0 3 July prototype DOMINO v3
  219. Discussed in:
  220. Maasakkers J.D., Vital improvements to the retrieval of tropospheric NO2 columns from the
  221. Ozone Monitoring Instrument, Master thesis, University of Technology Eindhoven,
  222. Eindhoven, The Netherlands
  223. Maasakkers J.D., Overview of changes to the DOMINO retrieval of tropospheric NO2 columns from
  224. the Ozone Monitoring Instrument, July 2 2013
  225. 2.0.0.0 7 September 2010, Folkert Boersma,: DOMINO v2.0 with:
  226. * improved AMF LUT (15 layers + below-surface extrapolation),
  227. * hi-res terrain height following Zhou et al., AMT, 2009,
  228. * improved surface albedo (Kleipool et al., JGR, 2008) for NO2 AMF, and O2-O2 cloud parameters,
  229. * explicit transportation of NO2 (along with NO, NO3, N2O5, and HNO4) instead of NOx in TM4
  230. to repair 30-minute 'lagging' in NO-NO2 partitioning, leading to insufficient vertical mixing
  231. of boundary-layer NO2 (and too sharply peaked profiles).
  232. * weekly cycle for NOx emissions included in TM4 (sources_sinks.f90) for Europe and North America.
  233. 1.0.0.12a 12 June 2009:
  234. Test version for Ruud Dirksen to test influence of 15-layer AMF calculation
  235. 1.0.0.12 29 september 2008:
  236. Repaired small error in calculation of the pixelcornerpoints. This was not done correctly
  237. for the last row of the file
  238. 1.0.0.11a 5 June 2008:
  239. Special version for Jennifer, ignore the eclipse flag.
  240. Only used to process data of 22 sep 2006
  241. 1.0.0.11 29 April 2008:
  242. 2 Bugs solved. Bug #1: the fillvalues for the copied parameter SlantcolumnamountNo2 where not properly treated.
  243. All values of this field were multiplied by 1e15, including the fillvalues. This has been solved now.
  244. Bug #2: integer overflow when storing averaging kernel. This is solved by changing the scale factor from 1e-4 to 1e-3
  245. This can handling kernel element values up to 32 instead of 3.2 as before.
  246. Raise outputflag when the groundpixelqualityflag show that the surface of the pixel is covered with
  247. snow. If so, the cloudfraction and cloudpressure are unreliable.
  248. Surface albedo is set to 0.6 in the L2 slant column product
  249. Data version promoted to 1.0.2 29 April 2008
  250. 1.0.0.10 25 March 2008: Changed description of TM4TerrainHeight and TM4SurfacePressure field (minor)
  251. Changed dataype of TroposphericColumnFlag to signed byte. (Dataversion 1.0.1, 25 March 2008)
  252. Include averaging kernel in DOMINO product. Remove it from the PROFILE product
  253. 1.0.0.9 20 March 2008: Change outputformat for the purpose to minimise the resulting filesize. Some datafields were removed (SpacecraftAltitude,
  254. SpacecraftLatitude,SpacecraftLongitude,OriginalSlantcolumnAmountNo2,AssimilatedStratosphericVerticalColumnError)
  255. The links in geolocationdata to TM4PressurelevelA & TM4PressurelevelB were removed
  256. Furthermore was the datatype of some fields adjusted to int16 in order to reduce space
  257. SurfaceAlbedo int32 -> int16 + scaling 0.0001
  258. CloudRadianceFraction int32 -> int16 + scaling 0.01
  259. TM4TerrainHeight int32 -> int16
  260. TM4TropoPauseLevel int32 -> UCHAR
  261. In the profile file the following datatype modifications were implemented:
  262. AveragingKernel float -> int16 + scaling 0.0001
  263. TemperatureProfile float -> uint16 + scaling 0.01
  264. The links in geolocationdata to TM4PressurelevelA & TM4PressurelevelB were removed
  265. The dataversion is now set to 1.0.1
  266. 1.0.0.8a 20 March 2008: Special version for Jennifer, ignore the eclipse flag. Only used to process data of 22 sep 2006
  267. 1.0.0.8 16 March 2008: Change in write procedure. Resolve bug because of which the int32 fields TM4Terrainheight, TM4Tropopauselevel
  268. and TroposphericColumnflag were not written. Major impact on data usability for e.g. Yipin
  269. This affects data of 26 sep 2006 and onwards
  270. 1.0.0.7 10 March 2008: Minor change in write procedure. Write correct filename to L2 inputfile swathattribute
  271. Added NumTimes swathattribute
  272. 1.0.0.6 20 February 2008: Minor change in write procedure. Now the scalefactor of the cloudfraction is correctly written to file
  273. 1.0.0.5 19 February 2008: Changed Title attribute of SurfaceAlbedo datafield to "..GOME database.." instead of "..Koelemeijer database.."
  274. 1.0.0.4 15 February 2008: Keep on processing with the Koelemeijer albedo database. Dataversion = 1.0.0
  275. 1.0.0.3 14 february 2008: Attribute DataVersion added to output. This is to
  276. distinguish between (minor) program changes that do not
  277. affect the algorithm and changes that do involve the
  278. algorithm and thereby affect the results.
  279. Also write temperature profile to the NO2 profile/av kernel file.
  280. IMPORTANT !!!!!!!!!
  281. Bug fix: so far the albedo from the L2 file was used (Koelemijer database).
  282. This is the result of a test for using the OMI albedo data from the L2 file
  283. which will be implemented in the future. This test setting was overlooked and
  284. not restored for the reprocessing. The data until ?? August 2006 are affected by this bug.
  285. In principle this dataset is an interesting testcase to study the effect of the surface albedo
  286. on the retrieval.
  287. 1.0.0.2 12 february 2008: Scaling of cloudfraction & TM4surfacepressure solved.
  288. Writing NO2 profile & averaging kernel to separate files
  289. 1.0.0.1 4 february 2008: Write mmix data at 13h30 (for Yipin)
  290. Solved system stop for zero column values in ass_Hx
  291. IMPORTANT: because of change of ECMWF meteodata format at 31 jan 2006 there is a
  292. transition in the savefile. (35 -> 34 sigma layers). It was not possible to interpolate
  293. the old-format file of 30 jan to the new-format so a save file was created by a free model
  294. run starting on 20 jan 2006 with a 10 feb 2006 savefile (new format) that still was around from
  295. the NRT processing.
  296. 1.0.0.0 4 January 2008: The version for reprocessingFix pixelcornerpoints issue for time jumps in granule.
  297. Forgotten to activate fitflag filtering!!
  298. Issue with pixel cornerpoints
  299. Mistake in scaling and/or units of cloudfraction & TM4surfacepressure
  300. 0.9.9.4 18 December 2007: Changes in output file. Separate file for DOMINO output, (no append) reduction of # fields
  301. 0.9.9.3 15 December 2007: Parallellisation of convection, chemistry & AMF calculation implemented
  302. 0.9.9.2 3 December 2007: Vectorized version of AMF calculation
  303. 0.9.9.1 3 December 2007: Major upgrade of the program. This upgrade coincides with the reprocessing of the OMI data.
  304. As a result of the reprocessing the striping of the NO2 data is greatly reduced.
  305. The upgrade includes
  306. -HDF-EOS5 output
  307. -different destriping algorithm
  308. -proper usage of the flags in the L2 product
  309. 0.9.3.6 14 may 2007: Exclude orbits in case of solar eclipse
  310. 0.9.3.5 15 april 2007: Store OmF (Observation minus Forecast) results in he5 file
  311. 0.9.3.4 20 March 2007: Added slant column error to output product
  312. 0.9.3.3 26 February 2007: Bug solved that caused incorrect ltropo values in the output product
  313. 0.9.3.2 15 February 2007: Added Model predicted trop column to output product
  314. Fieldname fcvcdtr in ANC_ vdata
  315. 0.9.3.1 26 January 2007: Added initial SCD to output product. This the slant
  316. column calculated by the OMNO2A algorithm
  317. Fieldname scdorig in ANC_ vdata
  318. 0.9.3 1 December 2006: Ground pixel quality flag added to geolocation data
  319. 0.9.2 16 November 2006: Inputpointers added to metadata (global attributes)
  320. 0.9.1 11 September 2006: pixel nr & image nr added to geolocation data
  321. 0.9 9 August 2006: Stripe correction polynomial fit instead of FFT