Yannick opened the meeting by announcing that we were in the second week of the UFO/QC Filter code sprint in Boulder. He then had the code sprint participants give updates, followed by the other attendees.

UFO/QC code sprint

Andrew reported that significant progress was made during the code sprint. At the beginning of the code the sprint the group identified missing filtering operations necessary to cover the microwave and infrared instruments that are currently being assimilated with GSI. Then Andrew worked on a cloud liquid water check, is close to having a functional filter, and a PR should be coming soon.

Hui has created a super-refraction filter for GNSSRO data and enhanced the reflectivity obs operator to use the new profile grouping code that was developed during the sprint. The non-linear obs opearator with the super-refraction filter is working and a PR is under review. Next steps are to update the TLAD reflectivity operator/filter, update the ROPP 2D versions of these operators and finally update the bending angle operators.

Steve H provided IODA support during the code sprint. This included functionality that uses a MetaData variable (specified in YAML) to indicate the profile grouping, use the profile grouping to distribute obs across multiple process elements (profiles remain intact on a single process element), and folding in Cory's scheme to order the profiles according to a MetaData variable (specified in YAML) such as time or height.

The changes for grouping and ordering profiles fixed a number of issues for new QC filters, but unfortunately the UFO tests for the ROPP 2D operators and the timing interpolation operator got broken. This happened because these cases need to read in a greater number of locations from the geovals files than from the obs files. Fixes for these cases have been worked out, which resulted in two PRs of which one is merged in and that other is under review. After the second PR is merged in, the user will be able to specify a "locations multiplier" in the YAML config file which enables the geovals file reader to read in multiple geovals locations per single location from the obs file.

JJ has provided higher level interfaces and data flow that enables the ability to pass intermediate calculations from H(x) to the QC filters. Examples include the CRTM Jacobians for surface temperature and emissivity of which can now be accessed by QC filters.

Yannick assisted with JJ's work and is expecting a PR later today with the completion of that work.

Yannick also provided the ability to take different actions according to results of a QC filter. Up to now the only action available was to reject the observation. An example of a different action is to keep the obs and instead inflate the error estimate based on the filter results. More actions can be added as the need arises.

Cory assisted Lou and Yunheng (both from University of Oklahoma) with radar obs operators. Cory helped with the conversion path to get radar reflectivity and doppler velocity obs data from GSI ncdiag to IODA, and he provided the TLAD operator that complemented the non-linear operator that Lou developed.

Cory wrote two new QC filters for derivative and difference checks, plus he developed a scheme to order profiles which supports these two new filters. Cory also added the ability to access test reference data in the ObsSpace. Examples would be the H(x) and O minus B results from GSI which can be used to compare with results from JEDI.

Emily provided a list of filters needed for infrared instruments along with very nice documentation about the filtering process including data flow diagrams and scientific filtering formulas. Emily developed an "error inflation" filter which utilized JJ's work to access error information factors from intermediate steps within CRTM.

Anna developed the capability to use results of generic built-in functions within the QC filters. A example is to perform a check on horizontal wind speed which is calculated from the observed zonal and meridional wind components. YAML control is provided along with access to ObsSpace, GeoVaLs and Diagnostic data.

Anna has done some refactoring of code to facilitate the QC filter access to built-in functions. One result of this work is a new class called ObsDiagnostic which holds intermediate data such as the horizontal wind speed. 

Yannick added that the primary results of code sprint are the following:

  • Access to intermediate calculations of H(x) for filters
  • Access to generic built-in functions for filters
  • Ability to specify different actions to take that are triggered by filters

Philip gave a summary of the use of the ZenHub "burndown" chart during the code sprint. The burndown chart shows the group how fast they are completing tasks, and displays this rate compared with the rate required to complete all of the tasks. Phillip emphasized that this is the first time we used the burndown chart, and we are in a learning process to help us better gauge what is possible to get done in a specific code sprint. The lesson learned on this time around is that the tasks we were undertaking in this code sprint were much more complex that what we understood at the beginning. Some of this is just the nature of the beast, but hopefully with this data and burndown data from future code sprints, we can improve our ability to estimate complexity at the start of a project.

Chris S asked what the split was between issues identified at the beginning of the sprint vs issues identified during the sprint. Yannick said it was about 50-50, and noted that the most helpful information that they could have had at the beginning was a better understanding of all the code refactoring that was needed to provide the access to H(x) intermediate results and access to built-in generic functions.

Boulder

Chris S reported that MPAS has made progress with the static B infrastructure in MPAS for model variables, citing Psi, Chi momentum fields as an example. They are working toward a generic element solver, and Chris added that there is a nice NCL solution for generating and operating on the Psi, Chi momentum fields.

Steve V has preliminary performance results for the new ODC API, and should have an update next week.

Xin is developing observation bias correction, and has split the work into two stages. The first stage, which has been merged into develop, reads in the predictors from a file output from GSI. The second stage will be to calculate the predictors on the fly. Xin has stage one working for non-linear operators, and is currently debugging TLAD. He is seeing the operator itself pass, but is experiencing issues in the minimization step.

Met Office

Marek has been merging in the code sprint changes into their LFRic interface. So far this has been going well.

Marek has the timing interpolation operator working for the non-linear case, and is developing the TLAD case. He noted that some design changes are required to get TLAD working and is making good progress.

Yannick noted that the Fortran config module has been returned to the develop branch in OOPS, which will allow LFRic to do the switch to the fckit Fortran config module later.

  • No labels