-
Notifications
You must be signed in to change notification settings - Fork 10
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
Fix to ensure the initialization step will be performed for uninitialized channels #439
Fix to ensure the initialization step will be performed for uninitialized channels #439
Conversation
bias correction coefficients. This modification ensures that the satellite bias correction initialization procedure will be performed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Changes look good to me. I would suggest that @jderber-NOAA should give his approval before merging.
@ADCollard Thanks for your review. Let's wait for John's (@jderber-NOAA ) review and approval. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am a bit confused by this change. As I understand it, the maximum value for the bias correction variance is r10. It is not clear to me what the values for the variance is being set to for channels that are new.
It makes sense that the old code fails and does not work properly because it would assume any channel with a variance not equal to zero was a old already used channel.
However, with the new code, it seems that one of the varx values would have to be > r10 to be satisfied to make it an old channel. It would make more sense to me that if the change was to say if any(varx<r10) ... This would then say if any of the bias correction coefficients has a reasonable value, we should use the input file values and inew_rad(j) == .false.. Also, I think we have to be careful with varx values = r10. The code makes this the maximum value. So when starting a new bias correction calculation, the varx values should be > r10 so that the condition is not accidentally satisfied.
@ADCollard The current v16.3.0 parallel started from 20211015 18Z and is not on 20211029. Do you think we need to rewind the run with the fix? |
@jderber-NOAA
On the first analysis date (20211016 00Z):
On the second analysis date 20211016 06Z::
Since in the previous cycle, for this channel, all varx values are 10, so inew_rad is still true (new channel), the channel will be initialized based on quasi mode in init_predx.
|
@jderber-NOAA It is set to 10 for new channel (please see the example in the comment above).
@jderber-NOAA The initial bias variance assigned to new channel is the maximum value 10 (defined in set_predictors_var (berror.f90) |
Using amsua noaa15 channel 1 as an example:
@emilyhcliu The above values are 0., not 10. This is what does not make sense to me. 0. means the values have no error. Should be 10. or another larger number. On the first analysis date (20211016 00Z):
On the second analysis date 20211016 06Z:: @emilyhcliu So all input variances are equal to 10. Since 10 is not greater than 10, I would assume this makes this fail the test. If so, then this channel would be determined as an old channel and no initialization required. If not, then this channel would be initialized based on samples from quasi mode.
Since in the previous cycle, for this channel, all varx values are 10, so inew_rad is still true (new channel), the channel will be initialized based on quasi mode in init_predx.
@emilyhcliu So with this output the maximum value is still 10. Wouldn't that make it fail the test again? Then it will reinitialize the bias correction? Wouldn't it do this for all channels and instruments? |
Please see my comment below |
@jderber-NOAA Your comment totally make sense to me. The code I modified (see below) only works for initial time when all varx values are 10. For the following cycle, the old channels will still be set as new channel because the valid varx values are always less than 10. I did not look careful enough to realize that 10 is the maximum rather than a minumum value. The varx is not a physical variable like wind speed or temperature, so 10 for varx could be minimum or maximum depending on how the preconditioning is designed together with all other control variables. Definitely, I should change "any(varx>r10)" to "any(varx<r10)".
But, still, I have to answer why my test (v163t) looks correct.
The answers are the following:
The inew_chan logic is checked again based on the predr (bias correction coefficients) from satbias_in file. So, even though my modification failed to detect old channels in the previous section, the inew_chan is checked again in the read section for satbias. I corrected my mistake and is running a short experiment again. I will post result soon. |
… satbias_pc file. Modify varx condition to detect old channel.
@jderber-NOAA and @ADCollard |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good now!
@jderber-NOAA Thanks for your review and discussion. I merge the bug fix into gfsv16.3.0 release. |
Issue
A very slow and less optimal initialization of radiance bias correction was observed in the gfsv16.3.0 parallel experiment (v163, blue line). The first analysis is 2021101600, and the initial bias estimation occurs in 2021101606. The issue described here did NOT occur in the low-resolution v16.x parallel experiments on HERA because older version of GSI was used in these experiments.
Example: AMSU-A NOAA-15 Channel 1


Vertical axis is the Number of Observation used (passed QC) in the analysis.
Vertical axis is Bias
The v163 (blue line) is observed from gfsv16.3.0 parallel experiment. The v163t (red line) is an experimental run with the fix proposed in this PR.
Please see Issue #438 for background, diagnostics, and the fix (more details).