Opened 15 years ago
Closed 15 years ago
#174 closed enhancement (fixed)
ropp_io_rangecheck - limits on FM input data requirements
Reported by: | Huw Lewis | Owned by: | Huw Lewis |
---|---|---|---|
Priority: | normal | Milestone: | 4.0 |
Component: | ROPP (all) | Version: | 3.0 |
Keywords: | rangecheck | Cc: |
Description
Email from Axel:
I noticed that the ropp_fm_bg2ro_1d requires input geopotentials on model levels when using ECMWF hybrid levels. These geopotentials are actually calculated from temp, pres, surf. geop within the forward model, so they shouldn't be required as input. The operator is correctly writing out the calculated geopotentials though. I suggest to remove this input requirement (setting input geopot. to dummy values also fails, so one has to pass in some sensible numbers).
My response
You are correct in your comments. Off the top of my head, geop is not a requirement of the FM routines. However, model geopoptential data are used in the ropp_io module (ropp_io_rangecheck) to determine whether there are any valid Level2b (i.e. background) data. Many of the issues with ROPP performance seem to come back to the implicit assumptions made in this routine!! I agree with you that this behaviour is not ideal. I am putting your comments in a Trac ticket and will apply a fix for release ROPP-4. In the meantime, I suggest you edit your local copy of /ropp_io/ropp/ropp_io_rangecheck.f90 (Section 7). I think it is easiest to run the check on using only those levels where you have valid ROdata%Lev2b%Shum rather than geop (this would be a common requirement for both ECMWF and Met Office backgrounds for example). You could alternatively comment the whole section out, and rely on the assumption that you will always have 91 valid background values in your input. ! Every level must have a valid geopotential height value; ! if all are missing, then set whole L2b profile to zero length. ! If only some heights are missing, filter them out idx => WHERE ( ROdata%Lev2b%Geop > ropp_io_mdtv, nidx ) IF ( nidx == 0 ) THEN ROdata%Lev2b%Npoints = 0 ELSE IF ( nidx < ROdata%Lev2b%Npoints ) THEN ROdata%Lev2b%Npoints = nidx ROdata%Lev2b%Geop(1:nidx) = ROdata%Lev2b%Geop(idx) ...etc
Need to review ropp_io_rangecheck to test whether 'required data' tests to define the number of valid points in each data level are reasonable. e.g. may wish to specify requirement of shum for valid background data (rather than geop), valid refrac data (rather than alt_refrac) etc. Otherwise, we are relying on all elements of a data level being valid in the input from users when this need not be the case.
Review code and provide fix for ROPP-4 relelase.
Note:
See TracTickets
for help on using tickets.
See #183.
For the time being, decided to maintain the current expectation that each level of data has associated valid level information defined. The only problem of this approach may be for checking input Level2b data where geopotentials may not be defined. It could therefore be possible to make checks for either valid level information or valid data for Level2b. Observation data should always have valid level information (and I guess this is the motivation for expressing the rangecheck routines in this way).
The -no_rangecheck command line option has been added at ROPP-4, which may help users in this way.
Release notes updated to include this as a 'limitation'.
Ticket closed as fixed.