-
Notifications
You must be signed in to change notification settings - Fork 4
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
YAML Configuration | Radiosondes #78
Comments
Original yaml file fails to be processed - the input data is missing 'LaunchTime' values. If a station has more than one launch in a synoptic time, the launch time would be used to group the obs from each launch separately. In the GSI the obs error inflation when multiple obs exist inside vertical model layers is done report-by-report, hence, sounding by sounding. Without launch time the multiple launches from a station would be grouped together for that filter. |
|
I tried another way to re-set the obs error range:
However, JEDI this time thinks "ObsErrorData" is a new variable and asks an input of data 'type'. However, the UFO document says it is the updated obs error: Anyway, Here are steps to handle a surface pressure error in GSI: |
Here is an issue to re-set ObsError within a range after initial inflation. |
|
|
Great stuff @gmao-jjin3! Thanks! When making these scatter plots can you make them for all observations rather than what passed QC? There should be a match for all obs regardless of whether each system used the observation or not. |
@danholdaway Now I can see that the combining programs within the original IODA-converter package messed up observations. Here are surface_pressure and virtual_temperature in those separated and combined files.
|
Is this what is leading to the difference between GSI and UFO? Good to know if you've found the cause. Do you have a sense for what is going wrong in the combine tool? This is coming from ioda converters. |
It is a reason. Not sure what is wrong in the combine Python programs at the moment. |
Okay. There is a very tiny difference in "air_pressure" in separated conventional IODA files. This values is saved in hPa in GSI' surface_pressure output and is multiplied by 100 in the IODA converter, while it is saved in Pa in outputs for surface temperature. They are supposed to be same in converted IODA files. However, the combine Python program doesn't think they are same because of the tiny difference! As a result, the combine program messed up temperature and pressure at this location.
|
OK. So the combine program needs to be fitted with some tolerance for deciding if the obs are the same then. Or perhaps using some smarter logic to decide if the obs are the same. Tagging @CoryMartin-NOAA. I believe EMC worked on this combine program so may have a quicker idea of how to modify it. |
@danholdaway I think this will be difficult to do because it is using (if I recall correctly) a python method that uses exact values to determine if it is the same location. I'm not sure how easy this will be to implement. |
OK, thanks for letting us know. I don't think we'll be able to replicate the GSI without the combine step since there are filters requiring multiple variables so we'll have to think on it. For example I think temperature is used on one of the surface pressure filters for example. Thanks for the work to establish what's happening Jianjun. We'll have to think a bit on the correct solution. |
We can probably only check lat/lon/time and ignore pressure? |
Noop, we cannot ignore pressure because sonde data are profiles. It may work for surface observations but we very likely get into troubles for other observations. I am re-making those IODA data after changing GSI. However, it is hard to guarantee there is no machine errors like these and it still is a risk not to have any tolerance in co-locating data even my new data work. |
@danholdaway This figure shows GSI effective QC flags vs UFO effective QC flags for all of the data. It puzzles me because that I find those GSI and UFO flags have the same number of zero values in the output file /discover/nobackup/jjin3/jedi/JediUfoTests/Output/sondes_qc_2020121500_0000.nc4, which is not what this figure shows. This figure is made with configuration between lines 341-365 in /discover/nobackup/jjin3/jedi/JediUfoTests/Eva/Config/sondes.yaml. My short Python program to check those GSI and UFO QC flags is /discover/nobackup/jjin3/jedi/For_others/conv_obs_check/ioda_sondes_ps/ck_ps_qc.py . Can you do me a favor to take a look at the yaml file and the python program and see why they show different results? Thanks. |
@danholdaway Never mind. I think I need remove undefined values during plotting. |
@CoryMartin-NOAA I agree. I don't see a solution for this. |
I was looking at some output that I had produced for the sondes running the ObsErrorFactorConventional filter and came across a sounding from station 50953 that looks like it was duplicated. The obs are slightly different on some levels though. In any case the two soundings were processed separately through errormod, but were treated as all one sounding in UFO by ObsErrorFactorConventional because they had the same launch time (time of first sounding level was the same for both, though they had different DHR sounding times). In any case, that's another reason for the output from UFO not matching GSI. |
I made a list of the ADPUPA data in the gdas.prepbufr file from 20201215/00z and found there were quite a few (87!) duplicated soundings on that date. (From the station IDs they appear to be Chinese sondes.) Possibly some of the soundings were transmitted both in BUFR and text format. In any case, the GSI 'errormod' filter would treat the soundings separately while the UFO filter would filter the soundings together if the reported release time were the same. While the DHR values given for the sounding pairs were different, the drift time for the first level of the soundings was the same. Actually the drift lat,lon,time was the same for quite a few levels (if not most) and so would trigger down-weighting by the duplicate check. |
Jianjun, Myself and Hui Shao reviewed the GSI code quite a lot, yes. Please feel free to open a GitHub/Zenhub issue if things are not optimal. Greg On Tue, Feb 7, 2023 at 2:03 PM Jin, Jianjun (GSFC-610.1)[SCIENCE SYSTEMS AND APPLICATIONS INC] <jianjun.jin@nasa.gov> wrote: Are you aware of any UFO codes to deal with temperature obs error inflation in GSI’s setupt.f90: Thank you, Jianjun |
Many thanks to @gmao-wgu for writing the pressure check function. Here are a few updates in my directory: /discover/nobackup/jjin3/jedi/jedi-work2/Wei_Gu/ioda_v3_temperature
|
Thanks for uploading these plots @gmao-jjin3. In each case can you also provide the plots without the multiplication by GsiDup? For posterity it would be good to just get a sense of how many observations this is impacting. |
@danholdaway Added a figure showing comparisons between UFO final error without GSI duplicator versus GSI final observation error (see above). There are not much difference between them in sonde observations, but there are a lot differences in ship observations. |
I was looking at this issue again because it came up when I was checking how the wind obs were handled by ObsErrorFactorConventional versus the GSIAdjustObsError. It seems to me that the agreement would be improved if we changed the definition of 'time_launch' in the GSI for raobs so that it uses the DHR (like the aircraft) rather than the first time level of the drfdat. It looks like the pairs of soundings have different DHR values (for whatever reason) while they often have the same values for the initial drfdat time. That puts the two reports in the same sounding for ObsErrorFactorConventional while the GSI processes the sounding reports in 'errormod' separately. It would be better to process those together (or actually better to screen for duplicates better in the preprocessing) but for the purpose of a match with GSI I think the change in the definition would help. |
Thank you @gmao-msienkie . I made the change in read_prepbufr.f90. Let's see if we can get better results tomorrow. |
The final observation errors do match after duplication is considered only for the same observation type such as sondes, surface, etc. in GSI. See the previous comparison when duplicate factor is considered for surface pressure in all conventional data: #78 (comment) |
@gmao-msienkie 's suggestion about launch_time does make a difference, removed one of the out of line two spots in the last figure posted on Feb 15. #78 (comment) |
Just add links of PR to "Replace station_elevation by height for Ps correction in GSI": |
Just add a note that surface pressure hofx values in UFO match those in GSI after a bug fix which is merged in UFO developed branch: https://github.com/JCSDA-internal/ufo/pull/2987 |
Agreement with GSI using GeoVaLs in UFO (Hofx)
Agreement with GSI using GeoVaLs in UFO (Quality control)
Agreement with GSI using Swell
Current issues:
The text was updated successfully, but these errors were encountered: