-
Notifications
You must be signed in to change notification settings - Fork 1
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 CX and varobs for Surfacecloud #175
Conversation
…d varobs writer functionality to provide obs value and relevant obs error
…w settings. Added Varfield 15 (cloud) and have needed to add Cx field cloud_layer too. Added first attempt at cxwriter and varobswriter yaml files for SurfaceCloud.
…e python script for SurfaceCloud tests
@ctgh Peter has submitted his opsinput PR. I've looked at the output of the CI tests but can't see anything that my tests/print statements were not already showing. Did I missed anything? |
Thanks for adding this. There are some useful clues around line 2236 of the CI output: |
Yes, that's precisely what I've been investigating. I've track the problem down to deps/ops/code/OpsMod_ObsInfo/Ops_ObsGlobalAction.inc where I think the sub subroutine in Ops_ObsAction does not pick up the data correctly, header and El2 remain empty. |
There are a couple of things it's probably worth taking a look at: (2) In the netCDF file there are variables called things like Regarding channels, I wonder if it will be easier to debug this if you disregard them for now. In other words get it working assuming Cloud is a point variable to be assimilated. Once that works you could extend it to different levels. That's just an idea - given you have set up the machinery to use channels maybe you want to keep that and make the changes mentioned above. There are other varfields that use channels such as 052 that you could investigate. |
@ctgh, I've try to use the print option from Ops_ObAction, but this isn't printing anything, see: |
Hi Chris, |
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.
Thanks for adding this - it looks very good!
I have a couple of questions.
@@ -963,6 +963,9 @@ subroutine opsinputs_varobswriter_populateobservations( & | |||
! TODO(someone): handle this varfield | |||
! call Ops_Alloc(Ob % Header % AMSUb_Temp, "AMSUb_Temp", Ob % Header % NumObsLocal, Ob % AMSUb_Temp) | |||
case (VarField_cloud) | |||
call opsinputs_fill_fillelementtype2dfromnormalvariablewithlevels( & | |||
Ob % Header % Cloud, "Cloud", Ob % Header % NumObsLocal, Ob % Cloud, & |
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.
Should the name Cloud
match up with the name used in JCSDA-internal/ioda#1062?
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.
Not necessarily, but maybe.
The way it works in OPS is that Cloud
or cloud
is the field that goes into the varobs, i.e. this one, it is the cloud fraction on model levels calculated in the SurfaceCloud routine, whereas the CX field is what is called level_cloud
and I think is the one Fabien has added there. I'm not 100% sure what their interaction should be in JOPA, whether they should have the same name or not.
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 think this needs to match with the name proposed in https://github.com/JCSDA-internal/ioda/pull/1062, i.e. cloudAmount
instead of Cloud
.
However I am happy if you want to commit this as is, and then handle the variable name change with separate PR to ioda, ufo, opsinputs, etc?
Further to the naming convention discussed in https://github.com/JCSDA-internal/ioda/pull/1062, I've updated this PR so that I've also created a UFO https://github.com/JCSDA-internal/ufo/pull/2957 and UFO-data JCSDA-internal/ufo-data#347 PR in line with this change. Ctests are all OK and a test run in SITH yield matching results compare to before the naming change. |
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.
Thanks Fabien, looks good
call opsinputs_fill_fillelementtype2dfromnormalvariablewithlevels( & | ||
Ob % Header % Cloud, "Cloud", Ob % Header % NumObsLocal, Ob % Cloud, & | ||
ObsSpace, self % modlevs, "cloudAmount_", "DerivedObsValue", self % GeoVaLsAreTopToBottom, & | ||
"cloudAmount_", "DerivedObsError") |
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 don't think we should be writing out from DerivedObsError here (as mentioned in https://github.com/JCSDA-internal/ufo/pull/2957). Also can I check why there is a trailing underscore after cloudAmount?
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.
OK, thanks James.
Are you suggesting to replace DerivedObsError with EffectiveError, or simply remove it completely?
The underscore were @ctgh's suggestion to ensure that when the data is on model level, we get cloudAmount_1 to _70 and not cloudAmount1.
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.
Ah I see, that makes sense regarding the underscores, thanks for clarifying.
We would want to replace DerivedObsError with ObsErrorData I think
@james-cotton I've discussed the possible implication re. JADA with @mikecooke77. This is not an issue to use a 'dummy' state variable in Regarding the ctest varobswriter_ukvnamelist_surfacecloud.yaml, it is however more convenient to keep both a dummy state variable, here cloud_layer, and cloudAmount (both have the same dimension) in simulated and derived variable to ensure the test reads properly the data file. |
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.
@fabien-mo thanks for the explanation. In that case we can proceed with this change.
Thanks everyone. I'll merge this later today unless there are any further comments. |
Adds namelists for SurfaceCloud for CX and varobs, as well as ctests. The varobs writer has needed to be updated to pass the correct output from JOPA to the cloud varfield. I have added VarField 15 and CX field 15, which are both needed for SurfaceCloud and were missing before.