geoschem / geos-chem

GEOS-Chem "Science Codebase" repository. Contains GEOS-Chem science routines, run directory generation scripts, and interface code. This repository is used as a submodule within the GCClassic and GCHP wrappers, as well as in other modeling contexts (external ESMs).
http://geos-chem.org
Other
167 stars 162 forks source link

Planeflight AOD diagnostics appear to be malfunctioning (GC 12.7) [BUG/ISSUE] #294

Closed JFBrewer closed 4 years ago

JFBrewer commented 4 years ago

Hi folks,

I've been playing around with the planeflight diagnostic outputs recently, and I think I've found a bug. On this wiki page, it suggests that the planeflight diagnostic can output 6 different AOD variables (dust, sulfate, black carbon, organic carbon, sea salt in 2 modes) for both the column and below the aircraft. However, when I output these variables, all 12 options give the exact same value at every point. It would appear to me that they may not be being properly updated by the model. I'm not sure whether the given value is a total AOD value or if it's just one of the 12 diagnostics being applied in all cases.

I've attached one of my Planeflight.dat files and the corresponding output file from May 1, 2016. This was created using GC v12.7.1 and a custom quarter degree nested run set up over Korea.

Planeflight_Bug_Report.zip

Jared

yantosca commented 4 years ago

Thanks for writing. We will look into this. I wonder if this is somehow related to https://github.com/geoschem/geos-chem/issues/293.

yantosca commented 4 years ago

I took a look at the planeflight code (see this permalink).

https://github.com/geoschem/geos-chem/blob/e3b3b6570af07b1cde3a6d25b143451da25dbb9f/GeosCore/planeflight_mod.F90#L1849-L1983

I think there are a few things wrong here:

First, the aerosols & dust are lumped together. That would be fine for total AOD but not if you want to get the individual contributions.

Secondly, we are using the ODAER and ODMDUST arrays, which are computed in GeosCore/aerosol_mod.F (or .F90 in 12.8.0). But these arrays hold total aerosol AOD and total dust AOD because they are summed into over all aerosol/dust species. This is where ODAER is summed into over aerosols:

https://github.com/geoschem/geos-chem/blob/e3b3b6570af07b1cde3a6d25b143451da25dbb9f/GeosCore/aerosol_mod.F90#L1608-L1664

and over dust:

https://github.com/geoschem/geos-chem/blob/e3b3b6570af07b1cde3a6d25b143451da25dbb9f/GeosCore/dust_mod.F90#L1323-L1351

So long story short, there aren't any arrays that store the individual contributions for aerosol & dust AOD's. You would have to add these and populate them in aerosol_mod and dust_mod.

The planeflight diagnostic is kind of old by now. I am not sure if this ever worked properly, or if it did once and then fell out of step with other model updates since then.

JFBrewer commented 4 years ago

Ok, that makes sense, given the values output here. Thank you Bob! I have 2 additional qs:

1) is the total AOD a column value then? all of these arrays have a L-component - does the AOD change in the course of a single column? Apologies if I'm misunderstanding something here.

2) As I understand it, bpch outputs are being phased out in 13.0 - does this imply that bpch diagnostics like the Planeflight menu will also be phased out? Asked another way - should I devote more time to working to customize Planeflight output or should I be focusing on learning my way around ObsPack, if that's going to be taking the place of the Planeflight diagnostics?

Thanks, Jared

yantosca commented 4 years ago

The ODAER and ODMDUST are grid box AOD's (since we feed them into FAST-JX). But if you sum them in the vertical you'll get column AOD.

We have no plans to remove Planeflight for the time being, as several people still use it. ObsPack is also a similar diagnostic (and you can use it) but you'd have to convert the input file to the netCDF format that it expects. Also I think ObsPack can save some meteorology and species concs by default but maybe not the AODs.

So your I think your best bet would be to hack Planeflight etc. so that it saves out what you want.

yantosca commented 4 years ago

I am going to close out this issue but feel free to reopen if you have further questions.

JFBrewer commented 4 years ago

That's fine. I'm going to make an edit to the wiki updating the relevant section. Thank you.

On Wed, May 13, 2020 at 2:36 PM Bob Yantosca notifications@github.com wrote:

I am going to close out this issue but feel free to reopen if you have further questions.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/geoschem/geos-chem/issues/294#issuecomment-628232007, or unsubscribe https://github.com/notifications/unsubscribe-auth/ADDHZDB6SGRRRWOHFAQRK6LRRMADTANCNFSM4MZ4KASQ .

msulprizio commented 4 years ago

Shixian Zhai (@zsx-GitHub) wrote:

To follow Jared’s finding on the bug of the plane flight AOD diagnostic, I’m attaching my changes (marked with “zhaisx”) on GeosCore/planeflight_mod.F. I made these changes based on GEOS-Chem v12.7.1. To my understanding, the original code incorrectly sums up multiple species and integrates AOD through the entire column for both AODC_tracer and AODB_tracer.

After my changes, planeflight_mod outputs AOD at individual grid and for each tracer in AODC_tracer, and column AOD for each tracer above the aircraft in AODB_tracer. The code can be easily revised to let the model output column AOD in AODC_tracer and column AOD below the aircraft in AODB_tracer as defined on this wiki page.

The reason why I output grid AOD is that grid AOD can be used to derive the extinction coefficient (by dividing by the height of the grid box), which is measured by the campaign I am working on. Also, because the aircraft measured AOD are AOD above the plane in the observation data I use, I output column AOD above the model grid.

Another thing to point out is that in lines 1927-1928 and 2065-2066 in the attached file, ‘ODAER’ were changed to ‘ODMDUST’ in the if statements. This, to my understanding, was a bug in the original code.

Please let me know if I have made any mistakes. Thank you!

msulprizio commented 4 years ago

This fix is now merged into our development code in commit 4a3d1b95665976ac434fdaffa8660a0766436967 and will be included in 12.9.0.

jennyfisher commented 4 years ago

Hi @msulprizio & others,

I've just stumbled across this after encountering the same problem in an older v12 we are running, and I am concerned that the "fix" actually changes the diagnostic outputs so that they no longer match the descriptions given on the wiki (as well as the meaning historically given to these diagnostics).

AODC should be the total column optical depth but is now grid-box AOD, and AODB should be below the aircraft but is now above.

I suggest that we change these back to their original meaning. This would mean:

If there is a desire for single grid box AOD or above plane AOD it would be easy enough to just add those as additional diagnostics, but the current disconnect is problematic IMO.

Cheers, Jenny

zsx-GitHub commented 4 years ago

Dear Jenny Fisher & others,

I agree with Jenny that descriptions given on wiki page should match the model to avoid confusion. We can either add additional diagnostics or just edit the wiki. It might be better to use names like AODG and AODA to respectively represent grid-box AOD and above grid AOD.

Best, Shixian

jennyfisher commented 4 years ago

Hi @msulprizio & @zsx-GitHub --

I discovered another potential issue in the new version: the individual AOD tracers (e.g. AODC_SULF, AODC_BLKC, etc.) do not sum to the total AOD.

This is because when using any simulation that uses UCX (e.g. Standard), there are two stratospheric aerosol tracers. These aren't accounted for explicitly (but were included in the buggy version that looped over all aerosol species).

I think it is likely that users will want to be able to get the total AOD in addition to the individual tracers (as this is what is likely measured). I have a version that adds this as tracer 2007 for total column AODC (haven't messed with AODB as we don't need that for our sims). It's based on a slightly earlier model version, but should be easy to adapt. Let me know if you want it.

-Jenny

msulprizio commented 4 years ago

Hi @jennyfisher. Thanks for following up with the solution. Please do share your fix and we can include it in a future version.

jennyfisher commented 4 years ago

Hi @msulprizio -

Our current version of planeflight_mod.F90 is attached (had to zip for github to accept).

A couple of quick notes:

  1. This version is based on 12.8 code, so before the fixes that described earlier in this thread. We manually implemented the fix to AODC, but in our case this represents total column AOD rather than grid-box specific. This is consistent with the original meaning, implementation, and wiki documentation for AODC. It will be important to make sure that the new AODC_TOT (2007) matches the AODC_XXXX (2001:2006), so either change the others back to total column or change this one to single level (and in that case update the wiki).
  2. We only updated AODC. Haven't touched AODB, so that still has the original bug that spawned this ticket. But it should be easy to start from the updates you already have for that one and just add the total AODB tracer similarly to what I've done for total AODC.
  3. If AODB remains as above-plane AOD as Shixian implemented it, then the wiki page should really be updated.

I'm happy to take a look at an updated version of this code to look for any issues!

-Jenny

planeflight.zip

msulprizio commented 3 years ago

Hi @jennyfisher. We've finally implemented your updates in planeflight_mod.F90 to include total AOD. See commit https://github.com/geoschem/geos-chem/commit/6e14981f56ea105e32e00faed255f72f27644a13. I also added AODB_TOT following your example. Finally, I reverted AODB_* to represent AOD below the cloud for consistency with what is on the wiki. These updates will be included in 13.1.0.

jennyfisher commented 3 years ago

Great, thanks!