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
Original changesets:
Do not set Level 2c surface values to 0 m and 1000 hPa: https://trac.romsaf.org/ropp/changeset/5201/ropp_src/branches/dev/Share/dmi_trunk_8.1/ropp_apps/tools/ropp_apps_tph_tool.f90
Attachments (2)
Change history (8)
comment:1 by , 6 years ago
Component: | ROPP(all) → ropp_apps |
---|
by , 6 years ago
Attachment: | atm_20161001_235825_METB_G011_R_2305_0010.nc added |
---|
by , 6 years ago
Attachment: | atm20181117_180823_M01_2030689576_N0023_XXXX.nc added |
---|
atm20181117_180823_M01_2030689576_N0023_XXXX.nc
comment:2 by , 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 , 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 , 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 , 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 , 5 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
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 ...
atm_20161001_235825_METB_G011_R_2305_0010.nc