I've coded in my CO and CO2 inversions into a more general multi-tracer system. To test the multi-tracer system, at each step we will compare their inputs and outputs to the individual single-tracer systems.
- Are the CO and CO2 emissions equal? Yes
- Are the CO and CO2 point observations equal? Yes, except for station_id, which is expected to be different
- Are the RemoTeC and IASI observations equal? Yes
- Are the save_ files in the end equal? Yes
- Are the 3-hourly 3D mixing ratio fields equal? Yes
- Are the point and satellite output/track files equal? Yes
- Are the point and satellite departure files equal? Yes (CO2 departures are different by ~10-14, perhaps insignificant)
- Are the adjoint emissions equal? Yes (Again, different by 1 part in 1014, perhaps insignificant)
- Does the gradient test with two tracers converge? Yes
- Does 4DVAR give the same result as individual CO and CO2 inversions? See next post
It is difficult to verify 4DVAR results from individual tracer run with the dual-tracer run, since we do not iterate to analytical convergence. Maarten suggested starting with perfect observations for one tracer (say, CO), i.e., observations corresponding to the prior flux, and seeing whether 4DVAR gave the same solution as the single-tracer version of the other tracer (in this case, CO2).
First, we run a CO model forward with prior fluxes, then copy the modeled point and satellite observations into the CO sections of the input observations used in a dual-tracer 4DVAR. Then we run both the dual-tracer and CO2-only 4DVAR systems to 20 iterations, and compare. The congrad_debug.out files are:
CO2 only
CO+CO2 with perfect CO obs
If we compare the variables in the respective optimized_state files, the maximum absolute differences are as below (for the optimized categories):
Acceptable, I think!
Last edit: raglan_road 2013-11-05
The other way round, i.e., CO+CO2 with perfect CO2 is not easy, and here's why. Suppose a measured total column is 370 ppm, and the corresponding model is 380 ppm. There is a bias correction applied to the measured column. Say after bias correction the measured column is 372 ppm. Then the forcing is ~(380-372) ppm, not ~(380-370) ppm. Hence, if we set the perfect measurement to 380 ppm, then after bias correction it might become 383 ppm, so the forcing would be ~(380-383) ppm, i.e., not zero. The magnitude of the bias correction depends on the measurement, so it can be 3 ppm at 380 ppm and 2 ppm at 370 ppm. Therefore, we can't just compensate for this bias correction while manufacturing the perfect total columns. Therefore, to elimiate forcing from CO2, we set the errors in the measured total columns to be 1015 times the maximum measured total column, which gives departures ~10-37.
CO only
CO+CO2 with really large CO2 errors
Again, comparing optimized variables in the respective optimized_state files, we see the following maximum absolute differences:
Nice, no?
I've restructured the multi-tracer code into a new base (branches/4dvar-mt) and associated projects. Time to test whether the above tests still pass.
CO only
CO2 only
CO+CO2 with no CO constraints
CO+CO2 with no CO2 constraints
So it still works!!!
Last edit: raglan_road 2013-11-06