Opened 13 years ago
Closed 13 years ago
#255 closed enhancement (fixed)
Extra WLC diagnostic in ropp_pp
Reported by: | Ian Culverwell | Owned by: | Ian Culverwell |
---|---|---|---|
Priority: | normal | Milestone: | 6.0 |
Component: | ropp_pp | Version: | 5.0 |
Keywords: | Diag, wlc | Cc: |
Description (last modified by )
User Kjartan Kinch has raised the following request, on behalf of Hans Gleisner:
The variable we would like to include in the list of diagnostic quantities is an array that measures the weight of the observation contribution in the optimized bending angle. This weight is an array of numbers between 0 and 1. A weight of 1 at a given impact parameter indicates that at this height the optimized bending angle is 100% data, in other words the optimized bending angle is identical to the raw bending angle at this height. If the weight is 0 the optimized bending angle is 100% MSIS with no contribution from the data. The array of weights will gradually transition from numbers close to zero at high altitude to numbers close to one at low altitude. I am attaching 3 Fortran code files (made by Hans) that demonstrate a possible implementation. These are modified versions of ropp_pp_occ_tool.f90, ropp_pp.f90 and ropp_pp_ionospheric_correction.f90. They are based on ROPP 5.0 and you should be able to proceed from these without to much trouble. Changes are marked with !HGL (although there might be a few changes that slipped in without this comment) The solution implemented here adds the variable WLC to all three routines and the internal variable WLCH inside ropp_pp_ionospheric_correction.f90. Both variables represent the array of weights, just at two different sets of impact heights. The values are calculated in WLCH and then interpolated to form WLC, which is added to the output. In this implementation WLC is just added to standard output. It is probably more reasonable to add it to the diag structure and only add it to the output if the diag = .true. flag is set. The extra argument to ropp_pp_ionospheric_correction.f90 is made OPTIONAL since we weren't sure that we know all the routines that called this. You might want to implement it differently
The programs are attached.
Sounds fair enough to me. I asked Hans Gleisner for comparison files to test.
Attachments (3)
Change history (6)
by , 13 years ago
Attachment: | ropp_pp.f90 added |
---|
by , 13 years ago
Attachment: | ropp_pp_ionospheric_correction.f90 added |
---|
by , 13 years ago
Attachment: | ropp_pp_occ_tool.f90 added |
---|
comment:1 by , 13 years ago
Description: | modified (diff) |
---|
comment:2 by , 13 years ago
Keywords: | Diag, wlc, → Diag, wlc |
---|
Hans kindly ran his ropp5.0 basecode on ifort/linux and cygwin/gfortran.
Interesting differences:
cygwin/gfortran:
* WLC(i) = 0.37971103882727714
ifort/linux:
* WLC(i) = 0.379710079969452
The former is what he used originally, and gave:
LC_weight(32)=0.379711
I ran ifort9/linux on ropp5.0 base code and got
* WLC(i) = 0.379710095059097
which is obviously much closer to Hans's ifort implementation (frac diff ~4e-8).
For the record, my file gives:
LC_weight(32)=0.37971
(frac diff ~3e-6).
We agreed the difference between his and my ropp5.0 ifort/linux implementations is close enough, so I've committed the change to the ropp6.0 devt branch at r3062.
comment:3 by , 13 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Code implementation approved by Kjartan Kinch as part of his review of ROPP6.0 beta. Closing ticket.
Agreed with Hans that it would be neater to incorporate this extra diagnostics in the ppDiag structure, which holds "extra" data that are output if output_diag is set to .true. in the ropp_pp config file. (This means we don't have to alter the interfaces between the routines.)
Works OK in ropp6.0 base code. The following files are modified:
common/ropp_pp_types.f90
common/ropp_pp_diag2roprof.f90
tools/ropp_pp_invert_tool.f90
tools/ropp_pp_occ_tool.f90
icorr/ropp_pp_ionospheric_correction.f90
There's a small difference wrt Hans's data (supplied separately in brown covers). This was traced to the linearisation error discussed in ticket #223 (fixed in ropp>5.1, not fixed in Hans's code.)
When Hans's code is put on ROPP5.0 base code, there remains a puzzling very small difference (~1e-6 frac diff). Maybe some residual diff between the source codes. I've asked him if he's happy to live with this.