Opened 6 years ago

Closed 3 years ago

#551 closed task (fixed)

Deactivated shum<0 checks in 1D-Var [1 d]

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

Description

Attachments (1)

check_qmin_test.png (37.1 KB ) - added by Ian Culverwell 5 years ago.
check_qmin_test.png

Download all attachments as: .zip

Change history (22)

comment:1 by Ian Culverwell, 6 years ago

Component: ROPP(all)ropp_fm

comment:2 by Ian Culverwell, 5 years ago

Probably best to do this via a state%check_qmin logical in the State1DFM structure, like the state%check_qsat logical, which tests against supersaturation. The former, unlike the latter, should probably be .TRUE. by default, because negative q is not physical whereas supersaturation (q > qsat) is.

comment:3 by Ian Culverwell, 5 years ago

A first draft of the ropp_1dvar changes needed to effect this changes are in r5917, the ropp_fm changes are in r5918 and the ropp_io changes are in r5919.

comment:4 by Ian Culverwell, 5 years ago

The changes pass the ropp_fm tests OK, presumably because there are no negative humidities in the input files, so the check is never invoked anyway.

************************** SUMMARY OF ROPP_FM TEST RESULTS ***************************
--------------------------------------------------------------------------------------
|                   Test name    |              Description       |    Run? |  PASS? |
--------------------------------------------------------------------------------------
|                     t_fascod_1 |                   FM FASCOD 1D |     Run |  PASS  |
|                  t_fascod_tl_1 |                FM_TL FASCOD 1D |     Run |  PASS  |
|                  t_fascod_ad_1 |                FM_AD FASCOD 1D |     Run |  PASS  |
|                     t_fascod_2 |             FM FASCOD 1D -comp |     Run |  PASS  |
|                  t_fascod_tl_2 |          FM_TL FASCOD 1D -comp |     Run |  PASS  |
|                  t_fascod_ad_2 |          FM_AD FASCOD 1D -comp |     Run |  PASS  |
|                     t_fascod_3 |           FM FASCOD 1D -new_op |     Run |  PASS  |
|                  t_fascod_tl_3 |        FM_TL FASCOD 1D -new_op |     Run |  PASS  |
|                  t_fascod_ad_3 |        FM_AD FASCOD 1D -new_op |     Run |  PASS  |
|                     t_fascod_4 |     FM FASCOD 1D -comp -new_op |     Run |  PASS  |
|                  t_fascod_tl_4 |  FM_TL FASCOD 1D -comp -new_op |     Run |  PASS  |
|                  t_fascod_ad_4 |  FM_AD FASCOD 1D -comp -new_op |     Run |  PASS  |
|                     t_twodop_1 |                        FM TWOD |     Run |  PASS  |
|                     t_twodtl_1 |                     FM_TL TWOD |     Run |  PASS  |
|                     t_twodad_1 |                     FM_AD TWOD |     Run |  PASS  |
|                     t_twodop_2 |                  FM TWOD -comp |     Run |  PASS  |
|                     t_twodtl_2 |               FM_TL TWOD -comp |     Run |  PASS  |
|                     t_twodad_2 |               FM_AD TWOD -comp |     Run |  PASS  |
|                       t_iono_1 |                   FM L1 and L2 |     Run |  PASS  |
|                    t_iono_tl_1 |                FM_TL L1 and L2 |     Run |  PASS  |
|                    t_iono_ad_1 |                FM_AD L1 and L2 |     Run |  PASS  |
|                      t_fm_1D_1 |         FM 1D; default options |     Run |  PASS  |
|                      t_fm_1D_2 |        FM 1D; compress factors |     Run |  PASS  |
|                      t_fm_2D_1 |         FM 2D; default options |     Run |  PASS  |
|                      t_fm_2D_2 |        FM 2D; compress factors |     Run |  PASS  |
|                    t_fm_iono_1 |             FM iono; L_neutral |     Run |  PASS  |
|                    t_fm_iono_2 |             FM iono; L1 and L2 |     Run |  PASS  |
--------------------------------------------------------------------------------------

For 1dvar, however, the situation is different:

************************** SUMMARY OF ROPP_1DVAR TEST RESULTS ************************
--------------------------------------------------------------------------------------
|                   Test name    |              Description       |    Run? |  PASS? |
--------------------------------------------------------------------------------------
|              t_1dvar_01_refrac |           1DVAR basic; default |     Run |  PASS  |
|          t_1dvar_01comp_refrac |      1DVAR basic; comp factors |     Run |  PASS  |
|         t_1dvar_GRAS_05_bangle |            1DVAR GRAS; default |     Run |  PASS  |
|     t_1dvar_GRAS_05comp_bangle |       1DVAR GRAS; comp factors |     Run | *FAIL* |
|    t_1dvar_GRAS_05newop_bangle |         1DVAR GRAS; new interp |     Run | *FAIL* |
|         t_1dvar_GRAS_05_refrac |            1DVAR GRAS; default |     Run |  PASS  |
|     t_1dvar_GRAS_05comp_refrac |       1DVAR GRAS; comp factors |     Run |  PASS  |
|    t_1dvar_GRAS_05newop_refrac |         1DVAR GRAS; new interp |     Run | *FAIL* |
|       t_1dvar_COSMIC_04_bangle |          1DVAR COSMIC; default |     Run | *FAIL* |
|   t_1dvar_COSMIC_04comp_bangle |     1DVAR COSMIC; comp factors |     Run | *FAIL* |
|  t_1dvar_COSMIC_04newop_bangle |       1DVAR COSMIC; new interp |     Run | *FAIL* |
|       t_1dvar_COSMIC_04_refrac |          1DVAR COSMIC; default |     Run |  PASS  |
|   t_1dvar_COSMIC_04comp_refrac |     1DVAR COSMIC; comp factors |     Run |  PASS  |
|  t_1dvar_COSMIC_04newop_refrac |       1DVAR COSMIC; new interp |     Run | *FAIL* |
|            t_1dvar_iono_bangle |                1DVAR L1 and L2 |     Run | *FAIL* |
--------------------------------------------------------------------------------------

This is what you get when, as in the revisions above, check_qmin}} takes its default value of {{{.FALSE., i.e. the check that q >= 0 is no longer applied.

Most of these differences are tolerable. E.g. for t_1dvar_GRAS_05comp_bangle:

Running t_1dvar_GRAS_05comp_bangle (1DVAR GRAS; comp factors) ...

----------------------------------------------------------------------
                    ROPP 1DVAR File Comparison Tool
----------------------------------------------------------------------

INFO (from ropp_1dvar_compare):  Comparing IT-1DVAR-05comp_bangle.1.nc and ../data/IT-1DVAR-05comp_bangle.1_reference.nc:
   the results of running test t_1dvar_GRAS_05comp_bangle (1DVAR GRAS; comp factors)
 
ERROR (from ropp_io_fields_compare):  Profile 2 Lev1b%bangle values ARE significantly different: |diff| =                   1.26520E-05 >  1.00000E-05
INFO (from ropp_1dvar_compare):  1 differences exist in profile 2
INFO (from ropp_1dvar_compare):  1 elements of IT-1DVAR-05comp_bangle.1.nc and ../data/IT-1DVAR-05comp_bangle.1_reference.nc differ significantly
****************************
********** *FAIL* **********
****************************
... examine t_1dvar_GRAS_05comp_bangle.log for details

The change in the model has slightly altered the results. In this case, the humidity in profile 2 has changed from

ncks -H -Q -ddim_unlim,1 -ddim_lev2b,25,35 -vshum ../data/IT-1DVAR-05comp_bangle.1_reference.nc
shum[116]=0.0289645919525 
shum[117]=0.0210176534746 
shum[118]=0.0104072435666 
shum[119]=1e-06 
shum[120]=1e-06 
shum[121]=1e-06 
shum[122]=0.00292413396373 
shum[123]=0.00750465604681 
shum[124]=0.00966479086194 
shum[125]=0.0102306308937 
shum[126]=0.00987928105004

in the reference, to

ncks -H -Q -ddim_unlim,1 -ddim_lev2b,25,35 -vshum IT-1DVAR-05comp_bangle.1.nc                  
shum[116]=0.0289645838819 
shum[117]=0.0210176481164 
shum[118]=0.0104072824476 
shum[119]=-0.00405092588467 
shum[120]=-0.00977518228682 
shum[121]=-0.00594936754709 
shum[122]=0.00292405733526 
shum[123]=0.0075046210028 
shum[124]=0.00966477497692 
shum[125]=0.0102306167125 
shum[126]=0.00987926143778 

in the test. This change in retrieved shum is responsible for this change in bangle: check_qmin_test.png

(Note that without the reduction in the minimum allowable q from 0 to -20 g/kg (!), the differences are much more severe, because negative humidities get range checked to ropp_MDFV.)

by Ian Culverwell, 5 years ago

Attachment: check_qmin_test.png added

check_qmin_test.png

comment:5 by Ian Culverwell, 5 years ago

This is all fair enough (although it does suggests that no one has run these changes through 'make test' - the first check to make, I would have thought).

For the final test, test_1dvar_iono.sh, however, differences are more larger. We find:

*** Results log of t_1dvar_iono_bangle (1DVAR L1 and L2) ***
./../tools/ropp_1dvar_bangle   -direct_ion  -d  -y ../data/obs20090401_000329_M02_2030337800_N0007_YYYY1_reference.nc  --obs-corr ../errors/ropp_ob_bangle_error_corr_300L.nc  -b ../data/bgr20090401_000329_M02_2030337800_N0007_YYYY1_reference.nc  --bg-corr ../errors/ropp_bg_ecmwf_error_corr_L91.nc  -c ../config/ecmwf_bangle_1dvar_iono.cf  -o anl20090401_000329_M02_2030337800_N0007_YYYY_iono.nc

---------------------------------------------------------------------
                   ROPP Bending Angle 1D-Var
---------------------------------------------------------------------

INFO (from ropp_1dvar_bangle):  Reading configuration file ../config/ecmwf_bangle_1dvar_iono.cf.

INFO (from ropp_1dvar_bangle):  Reading observation data for profile 1 from the file
       ../data/obs20090401_000329_M02_2030337800_N0007_YYYY1_reference.nc.

... (from ropp_io_read_ncdf_get):  'start_time' and yr/mo/dy/hr/mn/sc/ms timestamps differ by 2.000 seconds (probably a leap-second issue) - using yr/../ms timestamp
 
WARNING (from ropp_fm_roprof2obs (1D bending angles)):  Azimuth (of -0.1E+09 deg) out of range or missing.
 
WARNING (from ropp_fm_roprof2obs (1D bending angles)):  Check input data and valid_range attributes.
 
WARNING (from ropp_fm_roprof2obs (1D bending angles)):  Continuing, as azimuth not needed for 1D bending angles.
 
WARNING (from ropp_fm_roprof2obs (1D bending angles)):  Azimuth (of -0.1E+09 deg) out of range or missing.
 
WARNING (from ropp_fm_roprof2obs (1D bending angles)):  Check input data and valid_range attributes.
 
WARNING (from ropp_fm_roprof2obs (1D bending angles)):  Continuing, as azimuth not needed for 1D bending angles.
 
WARNING (from ropp_fm_roprof2obs (1D bending angles)):  Missing LEO position or centre of curvature ... will try to estimate r_LEO from satellite ID.
INFO (from ropp_fm_roprof2obs (1D bending angles)):  Assuming LEO height of 830 km (Metop-A/B/C profile)
INFO (from ropp_1dvar_bangle):  Reading background data for profile 1 from the file
       ../data/bgr20090401_000329_M02_2030337800_N0007_YYYY1_reference.nc.

... (from ropp_io_read_ncdf_get):  'start_time' and yr/mo/dy/hr/mn/sc/ms timestamps differ by 2.000 seconds (probably a leap-second issue) - using yr/../ms timestamp
 **** in ropp_fm_roprof2state.f90: x%shum(1:3) =   1.000000000000000E-002
  1.000000000000000E-002  1.000000000000000E-002
 **** in ropp_fm_roprof2state.f90: x%check_qmin =  F
 **** in ropp_fm_state2state_ecmwf.f90: x%shum(1:3) =   1.000000000000000E-002
  1.000000000000000E-002  1.000000000000000E-002
 **** in ropp_fm_state2state_ecmwf.f90: x%check_qmin =  F
INFO (from ropp_fm_iono_set_default):  -direct_ion requested but sigma(Ne_max) not set ... defaulting to 200.0e9 m-3.
INFO (from ropp_fm_iono_set_default):  -direct_ion requested but sigma(H_peak) not set ... defaulting to 150.0 km.
INFO (from ropp_fm_iono_set_default):  -direct_ion requested but sigma(H_width) not set ... defaulting to  25.0 km.
 **** in ropp_fm_roprof2state.f90: x%shum(1:3) =   1.000000000000000E-002
  1.000000000000000E-002  1.000000000000000E-002
 **** in ropp_fm_roprof2state.f90: x%check_qmin =  F
 **** in ropp_fm_state2state_ecmwf.f90: x%shum(1:3) =   1.000000000000000E-002
  1.000000000000000E-002  1.000000000000000E-002
 **** in ropp_fm_state2state_ecmwf.f90: x%check_qmin =  F
INFO (from ropp_qc_bgqc):  Background quality control lets all bending angle values pass.

INFO (from ropp_qc_ion_bangle):  First derivative check removes     1 points from L1 bending angle profile.

INFO (from ropp_qc_ion_bangle):  First derivative check removes     1 points from L2 bending angle profile.

INFO (from ropp_qc_ion_bg):  L2-L1 data cause background Ne_max to be set to 323.68e9 m-3.

 In ropp_1dvar_bangle.f90: checkqmin =  F
 In ropp_1dvar_bangle.f90: bg%check_qmin =  F
 **** in ropp_fm_state2state_ecmwf.f90: x%shum(1:3) =   1.000000000000000E-002
  1.000000000000000E-002  1.000000000000000E-002
 **** in ropp_fm_state2state_ecmwf.f90: x%check_qmin =  F
 **** in ropp_fm_state2state_ecmwf.f90: x%shum(1:3) =                      NaN
                     NaN                     NaN
 **** in ropp_fm_state2state_ecmwf.f90: x%check_qmin =  F
      n_iter =    1   J = 210.01            max(relative change in state) =  -
 **** in ropp_fm_state2state_ecmwf.f90: x%shum(1:3) =                      NaN
                     NaN                     NaN
 **** in ropp_fm_state2state_ecmwf.f90: x%check_qmin =  F
 **** in ropp_fm_state2state_ecmwf.f90: x%shum(1:3) =                      NaN
                     NaN                     NaN
 **** in ropp_fm_state2state_ecmwf.f90: x%check_qmin =  F
      n_iter =    2   J = NaN               max(relative change in state) = -Infinity
 **** in ropp_fm_state2roprof.f90: ro_data%Lev2b%shum(1:3) = 
                     NaN                     NaN                     NaN
 **** in ropp_fm_state2roprof.f90: x%check_qmin =  F
INFO (from ropp_1dvar_bangle):  Writing 1DVar retrieval for profile 1 to the file
       anl20090401_000329_M02_2030337800_N0007_YYYY_iono.nc.

and

Running t_1dvar_iono_bangle (1DVAR L1 and L2) ...

----------------------------------------------------------------------
                    ROPP 1DVAR File Comparison Tool
----------------------------------------------------------------------

INFO (from ropp_1dvar_compare):  Comparing anl20090401_000329_M02_2030337800_N0007_YYYY_iono.nc and ../data/anl20090401_000329_M02_2030337800_N0007_YYYY_iono_reference.nc:
   the results of running test t_1dvar_iono_bangle (1DVAR L1 and L2)
 
ERROR (from ropp_io_fields_compare):  Profile 1 Lev2b%Npoints values ARE significantly different: |diff| =                  0091 >  0000
INFO (from ropp_1dvar_compare):  1 differences exist in profile 1
INFO (from ropp_1dvar_compare):  1 elements of anl20090401_000329_M02_2030337800_N0007_YYYY_iono.nc and ../data/anl20090401_000329_M02_2030337800_N0007_YYYY_iono_reference.nc differ significantly
****************************
********** *FAIL* **********
****************************
... examine t_1dvar_iono_bangle.log for details

No lev2b fields are output if check_qmin = .FALSE.. (If it's .TRUE., things are OK - ish. In fact we have

Running t_1dvar_iono_bangle (1DVAR L1 and L2) ...

----------------------------------------------------------------------
                    ROPP 1DVAR File Comparison Tool
----------------------------------------------------------------------

INFO (from ropp_1dvar_compare):  Comparing anl20090401_000329_M02_2030337800_N0007_YYYY_iono.nc and ../data/anl20090401_000329_M02_2030337800_N0007_YYYY_iono_reference.nc:
   the results of running test t_1dvar_iono_bangle (1DVAR L1 and L2)
 
ERROR (from ropp_io_fields_compare):  Profile 1 Lev2c%ne_max values values ARE significantly different: |diff| =            3.93216E+05 >  1.00000E-06
 
ERROR (from ropp_io_fields_compare):  Profile 1 Lev2c%h_peak values values ARE significantly different: |diff| =            1.87500E-01 >  1.00000E-06
 
ERROR (from ropp_io_fields_compare):  Profile 1 Lev2c%h_width values values ARE significantly different: |diff| =           7.81250E-03 >  1.00000E-06
INFO (from ropp_1dvar_compare):  3 differences exist in profile 1
INFO (from ropp_1dvar_compare):  3 elements of anl20090401_000329_M02_2030337800_N0007_YYYY_iono.nc and ../data/anl20090401_000329_M02_2030337800_N0007_YYYY_iono_reference.nc differ significantly
****************************
********** *FAIL* **********
****************************
... examine t_1dvar_iono_bangle.log for details

I'm putting these small changes down to other recent developments in the FM this week - to be checked.)

comment:6 by Ian Culverwell, 5 years ago

(Or ifort17 (ROPP10.0) vs ifort12 (ROPP9.1)?)

comment:7 by Ian Culverwell, 5 years ago

(Apparently not: very small diffs in Ne_max, H_width and H_peak between test and reference for ROPP9.1 at ifort17.)

comment:8 by Ian Culverwell, 5 years ago

Come back to that later. What about the more pressing problem that ROPP10.0_prototype has when test_1dvar_iono.sh is run with check_qmin = .FALSE.?

comment:9 by Ian Culverwell, 5 years ago

This is traceable to a nasty little trap in ropp_fm/bangle_1d/ropp_fm_bangle_1d_tl.f90:

  pwvp_tl = pwvp * ( x_tl%pres/x%pres + x_tl%shum/x%shum &
                - x_tl%shum*pwvp*(1.0_wp - epsilon_water) / (x%pres*x%shum))

This particular test uses shums that are exactly zero. If check_qmin = .FALSE., this results in NaNs being returned from the above code. (If check_qmin = .TRUE. the minimum shum is reset to 1e-9, which generates large but processable pwvp_tls.)

comment:10 by Ian Culverwell, 5 years ago

Really we should restructure the code to avoid logarithmic differentiation. Meanwhile we can probably get around it by not using such silly shums in the test.

comment:11 by Ian Culverwell, 5 years ago

The test file has been modified to have a minimum shum of 1.e-6 at r5920. When we do this, the check_qmin = .TRUE. run now gives

test_1dvar_iono.sh                                    
 
Running t_1dvar_iono_bangle (1DVAR L1 and L2) ...

----------------------------------------------------------------------
                    ROPP 1DVAR File Comparison Tool
----------------------------------------------------------------------

INFO (from ropp_1dvar_compare):  Comparing anl20090401_000329_M02_2030337800_N0007_YYYY_iono.nc and ../data/anl20090401_000329_M02_2030337800_N0007_YYYY_iono_reference.nc:
   the results of running test t_1dvar_iono_bangle (1DVAR L1 and L2)
****************************
**********  PASS  **********
****************************
... examine t_1dvar_iono_bangle.log for details

i.e. as at ROPP9.1, whereas the check_qmin = .FALSE. run now gives

test_1dvar_iono.sh                                                                                                               
 
Running t_1dvar_iono_bangle (1DVAR L1 and L2) ...

----------------------------------------------------------------------
                    ROPP 1DVAR File Comparison Tool
----------------------------------------------------------------------

INFO (from ropp_1dvar_compare):  Comparing anl20090401_000329_M02_2030337800_N0007_YYYY_iono.nc and ../data/anl20090401_000329_M02_2030337800_N0007_YYYY_iono_reference.nc:
   the results of running test t_1dvar_iono_bangle (1DVAR L1 and L2)
 
ERROR (from ropp_io_fields_compare):  Profile 1 Lev2c%ne_max values values ARE significantly different: |diff| =            6.55360E+04 >  1.00000E-06
 
ERROR (from ropp_io_fields_compare):  Profile 1 Lev2c%h_peak values values ARE significantly different: |diff| =            3.12500E-02 >  1.00000E-06
INFO (from ropp_1dvar_compare):  2 differences exist in profile 1
INFO (from ropp_1dvar_compare):  2 elements of anl20090401_000329_M02_2030337800_N0007_YYYY_iono.nc and ../data/anl20090401_000329_M02_2030337800_N0007_YYYY_iono_reference.nc differ significantly
****************************
********** *FAIL* **********
****************************
... examine t_1dvar_iono_bangle.log for details

which seems entirely reasonable.

comment:12 by Ian Culverwell, 5 years ago

The reason why the check_qmin=.TRUE. case was not reproducing the ROPP9.1 results is that bg%check_qmin needs to be set before the call to ropp_fm_roprof2state that defines bg, because it defines the humidities that end up in bg%shum. Fix this.

comment:13 by Ian Culverwell, 5 years ago

OK. The ropp_fm changes committed at r5921 and the ropp_1dvar changes committed at r5922, in which check_qmin = .TRUE. in State1dFM and State2dFM, deliver results that match the default. Good.

If we set check_qmin = .FALSE. in State1dFM and State2dFM then the FM results are still the same, because there are no negative shums in the test input files, but the 1dvar results are subtly different:

************************** SUMMARY OF ROPP_1DVAR TEST RESULTS ************************
--------------------------------------------------------------------------------------
|                   Test name    |              Description       |    Run? |  PASS? |
--------------------------------------------------------------------------------------
|              t_1dvar_01_refrac |           1DVAR basic; default |     Run |  PASS  |
|          t_1dvar_01comp_refrac |      1DVAR basic; comp factors |     Run |  PASS  |
|         t_1dvar_GRAS_05_bangle |            1DVAR GRAS; default |     Run | *FAIL* |
|     t_1dvar_GRAS_05comp_bangle |       1DVAR GRAS; comp factors |     Run | *FAIL* |
|    t_1dvar_GRAS_05newop_bangle |         1DVAR GRAS; new interp |     Run | *FAIL* |
|         t_1dvar_GRAS_05_refrac |            1DVAR GRAS; default |     Run |  PASS  |
|     t_1dvar_GRAS_05comp_refrac |       1DVAR GRAS; comp factors |     Run |  PASS  |
|    t_1dvar_GRAS_05newop_refrac |         1DVAR GRAS; new interp |     Run | *FAIL* |
|       t_1dvar_COSMIC_04_bangle |          1DVAR COSMIC; default |     Run | *FAIL* |
|   t_1dvar_COSMIC_04comp_bangle |     1DVAR COSMIC; comp factors |     Run | *FAIL* |
|  t_1dvar_COSMIC_04newop_bangle |       1DVAR COSMIC; new interp |     Run | *FAIL* |
|       t_1dvar_COSMIC_04_refrac |          1DVAR COSMIC; default |     Run |  PASS  |
|   t_1dvar_COSMIC_04comp_refrac |     1DVAR COSMIC; comp factors |     Run |  PASS  |
|  t_1dvar_COSMIC_04newop_refrac |       1DVAR COSMIC; new interp |     Run | *FAIL* |
|            t_1dvar_iono_bangle |                1DVAR L1 and L2 |     Run | *FAIL* |
--------------------------------------------------------------------------------------

(Note, yet again, that this basic test has obviously not been done by DMI.)

These failures are the result of expected small differences during the iteration. See, for example, the differences in the results of t_1dvar_GRAS_05comp_bangle, which were plotted above. Note in particular that test_1dvar_iono.sh now fails in a 'small' way, rather than the complete failure we saw with the original test dataset:

Running t_1dvar_iono_bangle (1DVAR L1 and L2) ...

----------------------------------------------------------------------
                    ROPP 1DVAR File Comparison Tool
----------------------------------------------------------------------

INFO (from ropp_1dvar_compare):  Comparing anl20090401_000329_M02_2030337800_N0007_YYYY_iono.nc and ../data/anl20090401_000329_M02_2030337800_N0007_YYYY_iono_reference.nc:
   the results of running test t_1dvar_iono_bangle (1DVAR L1 and L2)
 
ERROR (from ropp_io_fields_compare):  Profile 1 Lev2c%ne_max values values ARE significantly different: |diff| =            6.55360E+04 >  1.00000E-06
 
ERROR (from ropp_io_fields_compare):  Profile 1 Lev2c%h_peak values values ARE significantly different: |diff| =            3.12500E-02 >  1.00000E-06
INFO (from ropp_1dvar_compare):  2 differences exist in profile 1
INFO (from ropp_1dvar_compare):  2 elements of anl20090401_000329_M02_2030337800_N0007_YYYY_iono.nc and ../data/anl20090401_000329_M02_2030337800_N0007_YYYY_iono_reference.nc differ significantly
****************************
********** *FAIL* **********
****************************
... examine t_1dvar_iono_bangle.log for details

comment:14 by Ian Culverwell, 5 years ago

All this is good. But what should be the default? Personally, I would prefer for negative shums to be prevented by default, and for the users who wish to allow fewer than zero water molecules in a box of air to have to ask for it. In other words, I think we should have check_qmin defaulted to .TRUE., and for the tools to have an option -nocheck_qmin to switch it off. (This would also avoid the need to change the reference datasets, although we should keep the new ropp_1dvar/data/bgr20090401_000329_M02_2030337800_N0007_YYYY1_reference.nc, in case people want to switch off shum zeroing.)

comment:15 by Ian Culverwell, 5 years ago

The man pages and user guides will also need updating.

comment:16 by Ian Culverwell, 5 years ago

This has been done for the FM in r5923 and for 1DVAR in r5924. The FM and 1DVAR User Guides have been updated in r5925.

comment:17 by Ian Culverwell, 5 years ago

Leave ticket open as the default needs further discussion with DMI.

comment:18 by Ian Culverwell, 5 years ago

(Comment in ropp_fm_state2roprof.f90 extended at r5926.)

comment:19 by Ian Culverwell, 5 years ago

r6044 fixes a nasty little bug, which prevented the -no_checkqmin flag from having any effect!

comment:20 by Ian Culverwell, 5 years ago

r6045:6049 and r6053:6054 contain some finessing of the check_qmin options.

comment:21 by Ian Culverwell, 3 years ago

Resolution: fixed
Status: newclosed
Version: 9.011.0

The patronising condescension implicit within this ticket is the main reason that I want nothing more to do with the ROM SAF.

The entire justification for the change is this:

! Hack for reproc1 JKN 2017
!  WHERE ( ro_data%Lev2b%shum < 0.0 ) ro_data%Lev2b%shum = 1.0e-7_wp 

and

! Hack for reproc1 JKN 2017 
!    WHERE (x%shum <= 0.0_wp) 
!      x%shum = 1.0e-9_wp 
!    ENDWHERE 

Note the implication: "We thought we'd try this fix, it seems to work, now be so good as to run along and implement, test, document and justify it, would you? Surely we can leave that to you. It's not really appropriate for professional research scientists like us to dirty our hands with such low-grade, technical support work."

I hope that in CDOP-4, reviewers will be strict about rejecting such under-prepared changes.

Closing ticket.

Note: See TracTickets for help on using tickets.