-
Notifications
You must be signed in to change notification settings - Fork 32
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
Add precipitation hydrometeors in JEDI #1333
Comments
There are nearly perfect matches between GSI/Hofx and UFO/HofX values when hydrometeor control variables include liquid and ice clouds. For example, these two figures shows comparisons of ATMS-N20 HofX values without bias correction (BC) and with BC. These are made by using IODA files transformed from the default standalone GSI outputs with Cori's "anavinfo" file /work2/noaa/da/cmartin/UFO_eval/geovals/GSI/fix/global_anavinfo.l127.txt |
@ADCollard @CoryMartin-NOAA It turns out that all liquid and ice cloud content are zero in current IODA geoval files for AMSUA and ATMS. Standalone test produce zero-ed cloud with Cory's "anavinfo" files. Here is a files of "mass_content_of_cloud_liquid_water_in_atmosphere_layer" dumped from from "atms_n20_geoval_2024021900.nc4": /work2/noaa/da/jianjun/UFO_eval/data/gsi_geovals_l127/nofgat_feb2024/20240815/qlqi.Andrew/atms_n20.ql.content.txt I am not exactly sure how the clouds are zero-ed. However, it is likely because "cw" is presented in the "anavinfo". It should be omitted in all-sky configurations. |
@ADCollard It makes UFO HOfX close to GSI HofX to read "cloud fraction" from geoval. Of course, this "cloud fraction" has to be saved from GFS background. Here is a comparison of ATMS_N20 channel 1 hofx differences (UFO hofX - GSI hofX) versus Obs-hofX in GSI without bias correction or quality control. Only liquid and ice clouds are used in this comparison. |
It turns out that a configuration "Cloud_Seeding: true" in the UFO yaml sets cloud threshold values for CRTM inputs not only over ocean but also over other types of surfaces. However, all cloud values are set to be zero for CRTM inputs in GSI over non-water surfaces. These discrepancies cause differences between GSI and UFO Hofx over land and ice areas. Here are two figures showing nearly identical ATMS-N20 HofX at channels 3 and 18 after bias correction when Cloud_Seeding is set as "false". A new configuration will be added to calculate HofX without clouds over non-water surfaces. |
It turns out that there is no error inflation due to scattering effects for ATMS. Here is the line where it is turned off:
Here are figures to show differences between those final observational errors for channel 3 and all channels before and after this inflation is turned off. |
Some updates in quality control and gross error check are added in an UFO PR: https://github.com/JCSDA-internal/ufo/pull/3547 |
@ADCollard @emilyhcliu Now JEDI/UFO can fully reproduce ATMS-N20 and ATMS_NPP results made by GSI after the scattering error inflation and cloud fraction threshold in GSI are made to be consistent with or same as in UFO. Here are differences in Obs errors, Hofx, and number of data passing quality control for ATMS_N20. Note: some Hofx values are missing in GSI. That causes large differences between Hofx. However, it is not a concern since these data are tossed out in GSI and JEDI. Here are differences in Obs errors, Hofx, and number of data passing quality control for ATMS_NPP: |
Good work, @jianjunj ! |
Corrected the post about ATMS-N21: There is one observation that doesn't pass QC in GSI but passes in JEDI. |
@jianjunj That's OK. It is great that AMTS in JEDI can reproduce GSI for the phase-1 tests. |
@ADCollard @emilyhcliu Here are results for AMSUA-N19. JEDI results are nearly identical to GSI values in terms of observational errors. There is one more observation passing QC in JEDI than in GSI. The bias correction is turned off in above results by adding the channel number in the Yaml
However, I think we want to get this number from the observation chronicle table:
Not sure whether we are able to do that at the moment. |
@ADCollard @emilyhcliu It turned out I no longer have the old statistics plots in which bias correction was conducted for channel 14. Please see the updated post. |
@CoryMartin-NOAA Is there a way to parm the channel number for which bias correction is turned off from the observation_chronicle table into the Yaml file for satellite data? Here is the table
I'd like to add number 14 in
|
@jianjunj I'm not 100% sure what you're asking, but if you're saying you'd prefer the exclusion of bias correction for this channel to be written in the template YAML and not the chronicle, I think we want these sort of choices made in the chronicle. @danholdaway any comments? |
@CoryMartin-NOAA @danholdaway We can parm the column for "bcd" in the chronicle [1,1,....,1,0,1]. What I want is the index number of 14 where 'bcd' is 0. |
@CoryMartin-NOAA I'd prefer bias correction is determined by the chronicle table. However, bias correction was actually conducted without the specific configuration in the observation Yaml file. Here are figures made before and after the new configuration is added: |
@jianjunj I think we need to add a function to JCB to handle this case. It will transcribe If you can add another conditional that is along the lines of "if variable_name == 'not_bias_corrected':" that transcribes 0,1,0 into 14. Then in the AMSUA-N19 YAML you can have: obs bias:
variables without bc: [brightnessTemperature]
channels: {{observation_from_jcb}}_not_bias_corrected Does that YAML work if all channels are bias corrected? I.e. if the resulting YAML is: obs bias:
variables without bc: [brightnessTemperature]
channels: Can you check that? If so then we can just go ahead and add that section to basically every YAML (that has an associated chronicle). If it doesn't work then can you update UFO so it would work like that? Otherwise we'd have instead something (slightly undesirable) like: {% if {{observation_from_jcb}}_not_bias_corrected is defined %}
obs bias:
variables without bc: [brightnessTemperature]
channels: {{observation_from_jcb}}_not_bias_corrected
{% endif %} |
Thanks @danholdaway . I think it works for observations when all channels are bias corrected, though I only tested ATMS and AMSUA data. Bias correction is off for ATMS channel 15. However, all input bias correction predictors are zero for ATMS channel 15. As a result, this issue didn't pop up. |
@danholdaway The configuration with empty channels does not work. JCB assigns "null" to the empty channels and then JEDI complains about "nil" channels.
|
Can you have JCB return an empty string when all channels are bias corrected? It might be quite messy to have the if statements, with the section of obs bias coming and going depending on the time. |
@danholdaway I had a look at JCB, but not really sure how change that output of the not-defined value to an empty string in it. In addition, it turns out I am actually using @CoryMartin-NOAA 's build of JCB: |
@danholdaway Just had a test. UFO does not like an empty string. It reads an empty input in as "nil": Then it has an error: |
Thanks for checking that out. |
@danholdaway I think it is the "eckit" that complains the empty input in YAML. Here is the error message: Running case 0: ufo/ObsFilters/testFilters ... I just had a test with "channels: 0" as an input for observations in which all channels are bias-corrected. It works. We can list an empty string there. Then change "null" to "0" after JCB changes changes the empty to "null". However, @emilyhcliu and I discussed about it and think it is a bit confusing and your suggestion is actually a better choice.
|
Ok sounds good. I was hoping to avoid jinja2 logic in the YAML files that live in jcb-gdas but this is will have to be the exception for now, until we think of a different way. |
@danholdaway I am thinking about adding the channels to be bias-corrected instead of the list not to be bias-corrected in the UFO yaml. It would be straight forward with my draft PR in the JCB if we can do that. |
I had a look at the UFO and found that it didn't work to simply add the list of channels for which we want bias-corrected. It seems that it requires effort to make that work. Therefore, I decided to let JCB return "-999" for the channels without bias correction when all channels are bias corrected. That works in UFO. I don't think the number "-999" is as confusing as "0". Here are my changes in JCB NOAA-EMC/jcb#15 and JCB-GDAS https://github.com/NOAA-EMC/jcb-gdas/pull/57/files. |
Precipitation hydrometeors rain, snow, and graupel are already added as state and control variables to assimilate AMSUA and ATMS radiance observations in all-sky conditions in GFS. However, they are yet configured in JEDI/UFO. This issue is going to document the JEDI/UFO configurations of AMSUA and ATMS observations, and following evaluations of analysis increments in FV3-JEDI.
The text was updated successfully, but these errors were encountered: