Opened 15 years ago

Closed 15 years ago

#204 closed enhancement (fixed)

Review refractivity thinner (missing data case)

Reported by: Huw Lewis Owned by: Huw Lewis
Priority: normal Milestone: 4.1
Component: ropp_io Version: 4.0
Keywords: thinner Cc:

Description

Input from Stig:

ROPP thinner

> ------------

> 
> Stig is right in saying that the Levtmp variable used in part of the 
> refractivity thinning code comes from Level1b%Impact variable. There 
> was a (long-standing) assumption that if refractivity values are 
> available then so would some bending angle data. The Levtmp value is 
> used if there are missing refractivity values in a profile to define 
> an N value, which is then used to compute an impact height value Lev(:).
>  
> The thinning is then applied to the ROdata%Lev2a%Refrac(:) data as a 
> function of Lev(:). The thinner now has a check for only using levels 
> with a valid height and data (refractivity) values, so I don't see 
> that there can be any influence of the height scale calculation where 
> we have missing refractivity data. Please pass on an example case 
> should you find one of course.

You're right! after the implementation of check on both Lev and Val
in ropp_io_thin_select.f90 (since ROPP-3), this part of code should
have no influence on the thinning if there are invalid refrac 
values. But are you saying that the intention was in fact to use 
the Level1b%Impact variable here in Levtmp? That seems odd, since 
there is generally a different number of samples in Lev1b and 
Lev2a, so the levels would not correspond to each other at all.

Anyways, looking more at this piece of code it occurred to me that 
if ROdata%Lev2a%Alt_refrac(i) is invalid (-9999.9 in ROPP-3.0), 
then Lev(i) would be > 0, and not considered invalid in the check 
in thin_select, although it would be completely wrong. In ROPP-4, 
where missing value is -99999999.9, it is caught, though.

Maybe it's better to get rid of this piece of code altogether in a 
future version. Instead we could do:

WHERE (ROdata%Lev2a%Refrac > ropp_MDTV .AND. ROdata%Lev2a%Alt_refrac > ropp_MDTV)

  Lev = ( 1.0_wp + 1e-6_wp * ROdata%Lev2a%Refrac) &
               * ( ROdata%Lev2a%Alt_refrac + roc + undulation )

ELSEWHERE

  Lev = ropp_MDFV

END WHERE

If either roc or undulation is invalid it should fail instead of 
putting in default potentially wrong values (all levels set to 
ropp_MDFV in this case; i.e. thinning using the impact levels not
possible then),

-Stig

Change history (1)

comment:1 by Huw Lewis, 15 years ago

Resolution: fixed
Status: newclosed

The thinner (v4.1) has now been updated to check that if no Level1b data exist in an input file, then Levtmp is allocated to the number of Level2a data points and initialised as Levtmp = ROdata%Lev2a%geop_refrac + roc See [2487].

Otherwise, the Lev() variable is initialised from the observation alt_refrac values. Note that Levtmp() is only used in the refractivity thinning in the calculation of reference refractivity values to compute sensible impact parameter values for all heights.

Ticket closed as fixed.

Note: See TracTickets for help on using tickets.