Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UFO Evaluation for Satwind -- re-evaluation for new changes from GMAO #88

Open
emilyhcliu opened this issue Oct 11, 2023 · 7 comments
Open
Assignees

Comments

@emilyhcliu
Copy link

emilyhcliu commented Oct 11, 2023

There are several UFO updates from GMAO regarding winds.
This PR is to test the updates from GMAO for satellite AMVs

Here is the collection of related UFO PRs
PR #3061
PR #3050
PR #3026

Notes for Input Test Data:

  • The test input data for winds must also be updated since we need to save the original fact10 (data(iff10,i))calculation from the fv3, not the fact10 modified by GSI (factw) based on lower model height (related GSI code section)

  • add slmsk (related to idomsfc and isflg used in GSI), water_area_fraction, land_area_fraction, ice_area_fraction, snow_area_fraction

    Notes:
    Check GeoVaLs: slmsk and area_fraction (water, ice, snow, and land)
    Model: slmsk: 0, 1, 2 (sea, land, ice)
    GeoVaLs: slmsk: 0, 1, 2, 3, 4, 5 (model slmsk + 3 ---> 0+3, 1+3, 2+3 ---> 3, 4, 5

    In GSI: for satwind
    use idomsfc from deter_sfc2
    use iflg from deter_sfc_type

    • idomsfc is determined by ilsi_full and weights (dist between grid points and obs)
      idomsfc is determined by model slmsk and slmsk+3
      idomsfc ranges from 0, 1, 2, 3, 4, 5

    • isflg is deermined by islis_full and weights ---> sfcpct (surface type %) ---> isflg
      surface type % > 0.99 ---> isflg - surface_type
      isflg = 0 (sea); 1 (land); 2 (ice); 3 (snow); 4 (mixed)

    There is no isflg in fv3-jedi, so add area_fractions

  • Set nvqc = .false. (turn off varQC)

  • No FGAT

@emilyhcliu
Copy link
Author

emilyhcliu commented Oct 11, 2023

First, before testing changes from GMAO, I re-checked the HofX between GSI and JEDI

The original obs operator configuration for satwind is the following:

obs operator:
  name: VertInterp

The comparison of HofX between GSI and JEDI:
hofxdiff_histogram_satwind_diag_2021080100_satwind_windEastward
hofxdiff_histogram_satwind_diag_2021080100_satwind_windNorthward

Note that there are a few outliers with HofX differences as large as 0.1 m/s

Now, testing the obs operator with near-surface wind scaling applied:

obs operator:
   name: VertInterp
   apply near surface wind scaling: true

The comparison of HofX between GSI and JEDI:

hofxdiff_histogram_satwind_diag_2021080100_satwind_windEastward
hofxdiff_histogram_satwind_diag_2021080100_satwind_windNorthward

The obs operator result with surface wind scaling applied is much improved. (the second set of plots have 1e-5 scaled for hofx difference)

The near-surface wind scaling is necessary for AMVs because the retrieved AMVs can be found near the surface between 1000 and 900 hPa.
And GSI applies near-surface wind scaling to all wind types, not limited to surface wind.

current vfit of wind data, ranges in m/s
 o-g                          ptop  0.100E+04  0.900E+03  0.800E+03  0.600E+03  0.400E+03  0.300E+03  0.250E+03  0.200E+03  0.150E+03  0.100E+03  0.500E+02  0.000E+00
 o-g it     obs use typ styp  pbot  0.120E+04  0.100E+04  0.900E+03  0.800E+03  0.600E+03  0.400E+03  0.300E+03  0.250E+03  0.200E+03  0.150E+03  0.100E+03  0.200E+04
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
 o-g 01         asm all      count          0      90171      94849      24593      55301      86415      52801      94765      75016       1532          0     575443
 o-g 01         asm all       bias  0.000E+00  0.194E-02  0.105E+00  0.109E+00 -0.306E+00  0.122E+00  0.407E+00 -0.158E+00 -0.632E+00 -0.638E+00  0.000E+00 -0.615E-01
 o-g 01         asm all        rms  0.000E+00  0.181E+01  0.216E+01  0.366E+01  0.442E+01  0.488E+01  0.491E+01  0.445E+01  0.488E+01  0.655E+01  0.000E+00  0.400E+01
 o-g 01         asm all       cpen  0.000E+00  0.248E-01  0.529E-01  0.274E+00  0.243E+00  0.140E+00  0.820E-01  0.468E-01  0.541E-01  0.246E+00  0.000E+00  0.916E-01
 o-g 01         asm all      qcpen  0.000E+00  0.246E-01  0.520E-01  0.264E+00  0.231E+00  0.138E+00  0.815E-01  0.468E-01  0.541E-01  0.242E+00  0.000E+00  0.895E-01```

@emilyhcliu emilyhcliu self-assigned this Oct 11, 2023
@emilyhcliu
Copy link
Author

emilyhcliu commented Oct 11, 2023

Now, let's test GMAO's changes for winds

GMAO added the GSI-modified model-calculated fact10 in UFO as part of the variable transform.
Our input test data has been updated to store the original fact10 from fv3.

The satwind yaml requires the following update in the obs operator section:

obs operator:
  name: VertInterp
  hofx scaling field: SurfaceWindScalingPressure
  hofx scaling field group: DerivedVariables

And, need a corresponding update in the prior-filter section:

obs prior filters:
  - filter: Variable Transforms
    Transform: SurfaceWindScalingPressure
    SkipWhenNoObs: False

The comparison of HofX between GSI and JEDI:

hofxdiff_histogram_satwind_diag_2021080100_satwind_windEastward
hofxdiff_histogram_satwind_diag_2021080100_satwind_windNorthward

The results are consistent with the original results and the near-surface wind factor applied (see previous comment).

@emilyhcliu
Copy link
Author

emilyhcliu commented Oct 11, 2023

The above is to test the changes for HofX.
The following is to test with QC filtering.

@emilyhcliu
Copy link
Author

HofX/QC Comparison

gsi_hofx_vs_jedi_hofx_satwind_diag_2021080100_satwind_windEastward
gsi_hofx_vs_jedi_hofx_satwind_diag_2021080100_satwind_windNorthward

hofxdiff_vs_qcdiff_satwind_diag_2021080100_satwind_windEastward
hofxdiff_vs_qcdiff_satwind_diag_2021080100_satwind_windNorthward

hofxdiff_histogram_satwind_diag_2021080100_satwind_windEastward
hofxdiff_histogram_satwind_diag_2021080100_satwind_windNorthward

Obs Error Comparison

errordiff_vs_pressure_satwind_diag_2021080100_satwind_windEastward
errordiff_vs_pressure_satwind_diag_2021080100_satwind_windNorthward
errordiff_histogram_satwind_diag_2021080100_satwind_windEastward
errordiff_histogram_satwind_diag_2021080100_satwind_windNorthward

The Final Obs Error between GSI and JEDI has small difference for a few locations (less than 0.05 m/s)

@emilyhcliu
Copy link
Author

emilyhcliu commented Oct 14, 2023

I did not turn off duplicate check in the test data set and in the satwind.yaml. Maybe this is the cause of the differece in obserr.

@emilyhcliu
Copy link
Author

Issue found with latest update in JEDI

  # Type 240 (GOES SWIR): Assigned all dummy values in prepobs_errtable.global
  - filter: Perform Action
    filter variables:
    - name: windEastward
    - name: windNorthward
    where:
    - variable: ObsType/windEastward
      is_in: 240
   minvalue: -135.
   maxvalue: 135.
    action:
      name: assign error
      error function:
        name: ObsFunction/ObsErrorModelStepwiseLinear
        options:
          xvar:
            name: MetaData/pressure
          xvals: [110000.,0.]   #Pressure (Pa)
          errors: [1000000000.,1000000000.]

The satwind.yaml failed at

       minvalue: -135. 
       maxvalue: 135.

The set of min/max entries in the section above is not valid.
The previous JEDI version ignore the entries it does not recognize.
The current JEDI version seems to check if the keywords are valid.

In this case, we do not need the set minvalue/maxvalue for the error assignment. So, they are removed without any impact to the final result.

@emilyhcliu
Copy link
Author

Updated results:

GOES-17 OMF
ufo_abi_goes-17_omf_windEastward_qc_time1
gsi_abi_goes-17_omf_windEastward_qc_time1

GOES-17 Obs Error
ufo_abi_goes-17_obserr_windEastward_qc_time1
gsi_abi_goes-17_obserr_windEastward_qc_time1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant