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 Ian Culverwell)

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)

ropp_pp.f90 (40.5 KB ) - added by Ian Culverwell 13 years ago.
ropp_pp_ionospheric_correction.f90 (19.0 KB ) - added by Ian Culverwell 13 years ago.
ropp_pp_occ_tool.f90 (41.7 KB ) - added by Ian Culverwell 13 years ago.

Download all attachments as: .zip

Change history (6)

by Ian Culverwell, 13 years ago

Attachment: ropp_pp.f90 added

by Ian Culverwell, 13 years ago

by Ian Culverwell, 13 years ago

Attachment: ropp_pp_occ_tool.f90 added

comment:1 by Ian Culverwell, 13 years ago

Description: modified (diff)

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.

comment:2 by Ian Culverwell, 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 Ian Culverwell, 13 years ago

Resolution: fixed
Status: newclosed

Code implementation approved by Kjartan Kinch as part of his review of ROPP6.0 beta. Closing ticket.

Note: See TracTickets for help on using tickets.