-
Notifications
You must be signed in to change notification settings - Fork 31
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
Create a converter for amusa from bufr to ioda #754
base: develop
Are you sure you want to change the base?
Conversation
…te obsfile for satwnd.abi_goes-16
Two updates for GOES AMV 1. BUFR Converter: - remove wind direction and speed - change sensorZenithAngle to satelliteZenithAngle 2. UFO Filters: - change `sensorZenithAngle` to `satelliteZenithAngle` - add `linear obs operator` section The declaration of `linear obs operator" is necessary for GOES AMV since there is no linearized component for applying the 10-meter factor. The increments look reasonable: ``` 0: ---------------------------------------------------------------------------------------------------- 0: Increment print | number of fields = 8 | cube sphere face size: C768 0: eastward_wind | Min:-1.642335e-01 Max:+1.660654e-01 RMS:+2.746685e-04 0: northward_wind | Min:-2.120068e-01 Max:+1.663539e-01 RMS:+2.631295e-04 0: air_temperature | Min:+0.000000e+00 Max:+0.000000e+00 RMS:+0.000000e+00 0: surface_pressure | Min:+0.000000e+00 Max:+0.000000e+00 RMS:+0.000000e+00 0: specific_humidity | Min:+0.000000e+00 Max:+0.000000e+00 RMS:+0.000000e+00 0: cloud_liquid_ice | Min:+0.000000e+00 Max:+0.000000e+00 RMS:+0.000000e+00 0: cloud_liquid_water | Min:+0.000000e+00 Max:+0.000000e+00 RMS:+0.000000e+00 0: ozone_mass_mixing_ratio | Min:+0.000000e+00 Max:+0.000000e+00 RMS:+0.000000e+00 0: ---------------------------------------------------------------------------------------------------- ``` The UFO filter results vs. GSI -- looks good ![ufo_abi_goes-16_omf_windEastward_qc_time1](https://github.com/NOAA-EMC/GDASApp/assets/36091766/017aeabc-d6ca-4643-b037-16f46dde76a0) ![gsi_abi_goes-16_omf_windEastward_qc_time1](https://github.com/NOAA-EMC/GDASApp/assets/36091766/d99599a2-3f36-4ef6-aa2e-4611500b8c43)
Rather than each new ob type being manually added to the list, we can use `glob.glob` to get the list of available observation types.
Two updates for MetOp SCATWIND; one minor updates for GOES AMV 1. BUFR Converter: - remove wind direction and speed - add `stationElevation` as zero 2. UFO Filters: - add linear obs operator section The declaration of `linear obs operator" is necessary for GOES AMV since there is no linearized component for applying the 10-meter factor. - add `Gaussian Thinning` filter to thin data with 75 km box (equal box size, prefer data close to central of the box) 3. For GOES AMV YAML files, change output data extension from `nc4` to `nc` UFO vs. GSI O-F and QC comparison: O-F and data count passed look close ![ufo_ascat_metop-b_omf_windEastward_qc (1)](https://github.com/NOAA-EMC/GDASApp/assets/36091766/f234543e-e0b5-4c6e-add9-3c7365c0c469) ![gsi_ascat_metop-b_omf_windEastward_qc](https://github.com/NOAA-EMC/GDASApp/assets/36091766/37f4fba8-bd2a-4a54-b45e-4055e3ef3142) 3Dvar increments are reasonable with MetOp-B SCATWIND alone. ``` 0: ---------------------------------------------------------------------------------------------------- 0: Increment print | number of fields = 8 | cube sphere face size: C768 0: eastward_wind | Min:-1.741092e+00 Max:+1.712287e+00 RMS:+2.282584e-03 0: northward_wind | Min:-1.825957e+00 Max:+1.930385e+00 RMS:+2.496075e-03 0: air_temperature | Min:+0.000000e+00 Max:+0.000000e+00 RMS:+0.000000e+00 0: surface_pressure | Min:+0.000000e+00 Max:+0.000000e+00 RMS:+0.000000e+00 0: specific_humidity | Min:+0.000000e+00 Max:+0.000000e+00 RMS:+0.000000e+00 0: cloud_liquid_ice | Min:+0.000000e+00 Max:+0.000000e+00 RMS:+0.000000e+00 0: cloud_liquid_water | Min:+0.000000e+00 Max:+0.000000e+00 RMS:+0.000000e+00 0: ozone_mass_mixing_ratio | Min:+0.000000e+00 Max:+0.000000e+00 RMS:+0.000000e+00 0: ---------------------------------------------------------------------------------------------------- ``` 3DVar increments are also reasonable with MetOp-B + MetOp-A assimilated
…oda.x (#730) This PR allows for all obtypes to be processed in two loops. We still need to figure out a way to process these in parallel (somewhat).
Using python multiprocessing to generate obs in parallel. The current list of obs goes from 10+ minutes to completing in ~5.5 minutes.
@RussTreadon-NOAA noted that `obs linear operator` should be `linear obs operator` in the GOES-17 satwind YAML. This fixes that.
This reduces runtime further to run everything in one parallel pool. Now, things complete in under 4 minutes (as of now).
Adding satwinds from the Advanced Himawari Imager (AHI) from Himawari-8 to GDASApp end-to-end testing new files include: parm/atm/obs/config/satwind_ahi_h8.yaml: QC filter YAML for AHI Himawari-8 satwinds parm/ioda/bufr2ioda/bufr2ioda_satwind_amv_ahi.json: JSON containing data format, sensor, and satellite information for AHI Himawari-8 satwinds ush/ioda/bufr2ioda/bufr2ioda_satwind_amv_ahi.py: bufr2ioda code for extracting AHI Himawari-8 satwinds from BUFR modified files include: ush/ioda/bufr2ioda/run_bufr2ioda.py: added `"satwind_amv_ahi"` to list `BUFR_py` See #741 for details on testing. JEDI/GSI comparisons look good with GSI thinning turned off, but there are large ob-count disparities both before and after QC when comparing GSI+thinning to JEDI+thinning. The tested `Gaussian Thinning` filter is included in the YAML but commented out with a note. --------- Co-authored-by: Brett Hoover <[email protected]> Co-authored-by: Cory Martin <[email protected]>
merge gdas-validation
Instead of writing the filled out `.json` and `.yaml` files to `$COM_OBS`, we write them to `$DATA` so that they get purged unless `KEEPDATA="YES"`
The merge is a bit odd and tricky. The amsua_n19.yaml.j2 in the |
@emilyhcliu I will check those and make a test run then. Thanks, |
Merged the develop into this branch and tested on orion. |
@ADCollard and @emilyhcliu , After a small modifying of QC filters on the GSI run the OmF and final ObsError difference between GSI and JEDI become smaller(the plots were updated), though there still a little differences. We also plot the maps of them and don't find any odd behaviors. We conclude that the differences are caused mainly by the difference of filters. Not sure if we still want to make more tests to make the differences smaller. |
@xincjin-NOAA Can you confirm that the plots have been updated (channel and maps plots)? They say they were most recently edited last week. Having said that they do look a little better than I remember. Do you have the unthinned versions of these plots? Can you also explain what was changed in the GSI to improve the agreement? Thanks. |
@ADCollard Yes I updated the plots (might be it is better just add new plots later). @emilyhcliu ran the new GSI with some changes in the filters. I am going to see if I can find the results from the unthinned runs. |
@xincjin-NOAA Can you plot O-B after QC? Thanks. |
@ADCollard These are from the files directly converted from the bufr file and no QC yet in case of IODA. Is O-F the same as O-B? The O-F plots above are after QC. |
@xincjin-NOAA Yes O-F is the same as O-B. I thought you had produced the O-B plots after QC but before thinning? Maybe @emilyhcliu did? |
@xincjin-NOAA Are you now running the end-to-end with the latest T2O fix? If so, then your result from GADS is high resolution (C768). Please confirm if you are running end-to-end in C768 resolution. Check your |
@xincjin-NOAA I checked out your branch and will test them today. |
Figure 5 Here are the channel statistics plots for results without thinning and after QC for a single 1bamsua file. O-F Bias/Standard Deviation
Final ObsError
Numbers PassedQC
Maps for Channel 3 . O - F
Final ObsError
They agree well with each other in general. |
Summary Figure 1 , the channel statistics plots (#obs, bias/std for OMF and final obs error) for JEDI and GSI runs show general agreement between GSI and JEDI results, except for the channel 3 which show some differences in O-F and Final-error. In order to understand this we explored different causes as follow:
Therefore, we can conclude that the small differences come from different methods used in GSI and JEDI in terms of thinning, different QC filters in general. The difference identified in Figure 1 for channel 3 is from different thinning methods between GSI and JEDI. |
There are two concerns left from this PR:
create another issue for this: #987 |
@xincjin-NOAA The result for the unthinned case looks OK in general. The obs errors for low-peaking channels 1-2 have slightly lower final obs error standard deviation values. I will run end-to-end with your branch to check the initial/final them obs error and compared with GSI. I am a bit curious about the slight difference for channels 1-2. I will post the results of my test here. One more comment: |
Your amsua python code can merge the 1bamua and esamua, isn't it? For your first concern, do you mean we need to find a place to store the Antenna Coefficient NetCDF files? |
For the first, Yes. @CoryMartin-NOAA commented that it is better to merge the two .nc files in Obspace, though it is okay for now. I will put details there. |
Numbers in Gross Check
The numbers in channel 1, 2, are much larger than that for channel 3. This can explain the feature noticed above. Figure 7 Map for Gross Check
Gross filter are quite different between GSI and IODA. |
Figures 8 and 9 showed un-thinned statics of initial errors and related retrieved clw and hofx0.
In summary, we think these differences, (mean and std differences are 1%, and 4%, respectively) are acceptable considering there are many differences between two systems. Any comments from @emilyhcliu and @ADCollard? |
@emilyhcliu error handling in the codes were checked and added some more. |
This PR is 11 months old. Is it still relevant? Do we need to close it and open a new one later? |
Amsua has two NCEP bufr files which need to be converted to ioda format and merged together.
The two ncep bufr example files are gdas.t00z.esamua.tm00.bufr_d and gdas.t00z.1bamua.tm00.bufr_d.
To test the changes in this PR, we will need to checkout feature/query_python_ext for iodaconv.
https://github.com/JCSDA-internal/ioda-converters/tree/feature/query_python_ext