Opened 6 years ago

Closed 5 years ago

#542 closed task (fixed)

Do not set Level 2c surface values to 0 m and 1000 hPa [?]

Reported by: Ian Culverwell Owned by: Ian Culverwell
Priority: normal Milestone: ROPP9.1 carry over
Component: ropp_apps Version: 9.0
Keywords: Cc:

Description

Attachments (2)

atm_20161001_235825_METB_G011_R_2305_0010.nc (186.6 KB ) - added by Ian Culverwell 6 years ago.
atm_20161001_235825_METB_G011_R_2305_0010.nc
atm20181117_180823_M01_2030689576_N0023_XXXX.nc (764.8 KB ) - added by Ian Culverwell 6 years ago.
atm20181117_180823_M01_2030689576_N0023_XXXX.nc

Download all attachments as: .zip

Change history (8)

comment:1 by Ian Culverwell, 6 years ago

Component: ROPP(all)ropp_apps

by Ian Culverwell, 6 years ago

atm_20161001_235825_METB_G011_R_2305_0010.nc

by Ian Culverwell, 6 years ago

atm20181117_180823_M01_2030689576_N0023_XXXX.nc

comment:2 by Ian Culverwell, 6 years ago

This change involves removing the lines

        ro_data%lev2c%geop_sfc  = 0.0_wp     ! To stop the range-checking zapping the lev2c component  	 	 
        ro_data%lev2c%press_sfc = 1000.0_wp 

from ropp_apps_tph_tool.f90, because geop_sfc and press_sfc need to be filled with valid values later.

I remember that I had to introduce these lines for the reason above, but Stig found that the range-checking didn't actually zap lev2c in his case. He wondered whether other changes (esp ticket #539) could explain why it is no longer an issue. This was on dmi_trunk, running without --no-ranchk (i.e, with range-checking), and it worked fine on the two attached input files (using -b -n -y options).

comment:3 by Ian Culverwell, 6 years ago

The following lines from ropp_io/ropp/ropp_io_rangecheck.f90:

! If geopotential is missing set 'profile' to zero points

    IF ( Lev2c%Geop_Sfc < ropp_MDTV ) Lev2c%Npoints = 0

! If there are no valid surface P values, set surface missing flag
! to indicate no valid Level 2c data

    IF ( Lev2c%Npoints > 0                 .AND. &
         Lev2c%Press_Sfc       < ropp_MDTV .AND. &
         Lev2c%Press_Sfc_Sigma < ropp_MDTV .AND. &
         Lev2c%Press_Sfc_Qual  < ropp_MDTV )     &
         Lev2c%Missing = .TRUE.

are the root of the problem.

comment:4 by Ian Culverwell, 5 years ago

This change has already been included in r5894. Apparently it's not needed now, though I don't really understand why. However, when I try with Stig's example file atm_20161001_235825_METB_G011_R_2305_0010.nc, which contains geop_sfc and press_sfc, although both are set to ropp_MDFV, I find:

 BEFORE:
 ro_data%lev2c%geop_sfc =   -99999000.0000000     
 ro_data%lev2c%press_sfc =   -99999000.0000000     
 ro_data%lev2c%npoints =            0
 ro_data%lev2c%missing =  T
 ro_data%lev2c%tph_bangle =    6387202.16507734

We can see the effect of range checking on the input here. After

      IF ( (ro_data%lev2c%geop_sfc  < ropp_MDTV) .AND. &
           (ro_data%lev2c%press_sfc < ropp_MDTV) ) THEN
        CALL ropp_io_init(ro_data%lev2c, 1)
      END IF

we have

 AFTER1:
 ro_data%lev2c%geop_sfc =   -99999000.0000000     
 ro_data%lev2c%press_sfc =   -99999000.0000000     
 ro_data%lev2c%npoints =            1
 ro_data%lev2c%missing =  T
 ro_data%lev2c%tph_bangle =   -99999000.0000000     

And after

      ro_data%lev1a%npoints = SIZE(ro_data%lev1a%dtime)
      ro_data%lev1b%npoints = SIZE(ro_data%lev1b%impact)
      ro_data%lev2a%npoints = SIZE(ro_data%lev2a%alt_refrac)
      ro_data%lev2b%npoints = SIZE(ro_data%lev2b%geop)
      ro_data%lev2c%npoints = 1
      ro_data%lev2c%missing = .FALSE.
      ro_data%lev2d%npoints = SIZE(ro_data%lev2d%level_coeff_a)

we have

 AFTER2:
 ro_data%lev2c%geop_sfc =   -99999000.0000000     
 ro_data%lev2c%press_sfc =   -99999000.0000000     
 ro_data%lev2c%npoints =            1
 ro_data%lev2c%missing =  F
 ro_data%lev2c%tph_bangle =   -99999000.0000000     

And after the PBLH calculation we have

 ro_data%lev2c%geop_sfc =   -99999000.0000000     
 ro_data%lev2c%press_sfc =   -99999000.0000000     
 ro_data%lev2c%npoints =            1
 ro_data%lev2c%missing =  F
 ro_data%lev2c%tph_bangle =    6387202.16507734     

So that seems fine. This is the default situation. If we include --no-ranchk in the call, everything is the same, except that initially

 ro_data%lev2c%npoints =            1
 ro_data%lev2c%missing =  F

because range checking has not zapped the level 2c data. The final results are the same. (Almost. In fact the dry temperature in this input file falls below its minimum allowed value of 150 K near the tropopause (er ...), which causes the range checking to set it to ropp_MDFV in this region. This obviously alters the Tdry-based TPH estimate. Presumably this is one reason why DMI like to have a --no-ranchk option, although a better solution might be to set a lower minimum acceptable Tdry. To be discussed with DMI.)

comment:5 by Ian Culverwell, 5 years ago

For Stig's other example file, atm20181117_180823_M01_2030689576_N0023_XXXX.nc, from which all level 2c fields are absent, we get by default

 BEFORE:
 ro_data%lev2c%geop_sfc =   -99999000.0000000     
 ro_data%lev2c%press_sfc =   -99999000.0000000     
 ro_data%lev2c%npoints =            0
 ro_data%lev2c%missing =  T
 ro_data%lev2c%tph_bangle =   -99999000.0000000     
 AFTER1:
 ro_data%lev2c%geop_sfc =   -99999000.0000000     
 ro_data%lev2c%press_sfc =   -99999000.0000000     
 ro_data%lev2c%npoints =            1
 ro_data%lev2c%missing =  T
 ro_data%lev2c%tph_bangle =   -99999000.0000000     
 AFTER2:
 ro_data%lev2c%geop_sfc =   -99999000.0000000     
 ro_data%lev2c%press_sfc =   -99999000.0000000     
 ro_data%lev2c%npoints =            1
 ro_data%lev2c%missing =  F
 ro_data%lev2c%tph_bangle =   -99999000.0000000

with a final output of

 FINALLY:
 ro_data%lev2c%geop_sfc =   -99999000.0000000     
 ro_data%lev2c%press_sfc =   -99999000.0000000     
 ro_data%lev2c%npoints =            1
 ro_data%lev2c%missing =  F
 ro_data%lev2c%tph_bangle =    6381182.25815265

OK again. You get the same thing if --no-ranchk is applied, because in the absence of any level 2c data in the input file you are bound to get

 ro_data%lev2c%npoints =            0
 ro_data%lev2c%missing =  T

anyway, with or without range checking. (And Tdry is well behaved in this case: > 180 K at all heights.)

comment:6 by Ian Culverwell, 5 years ago

Resolution: fixed
Status: newclosed

So despite my misgivings, it does in fact appear that we don't need to set

        ro_data%lev2c%geop_sfc  = 0.0_wp  	 	 
        ro_data%lev2c%press_sfc = 1000.0_wp

to stop the range-checking zapping the lev2c component.

Cautiously closing the ticket ...

Note: See TracTickets for help on using tickets.