Planeflight diagnostic

From Geos-chem
Jump to: navigation, search

Overview

NOTE: Some of the quantities in the plane flight diagnostic were disabled when SMVGEAR was replaced with the new FlexChem solver package. See this section for more details.

Sometimes it is necessary to compare GEOS-Chem output against aircraft observations. The plane flight following diagnostic (a.k.a. ND40 diagnostic) allows you to save out GEOS-Chem diagnostic quantities for grid boxes corresponding to aircraft flight tracks. This prevents you from having to save out huge 3-D bpch or netCDF files with lots of species.

Planeflight.dat file

The Planeflight.dat.YYYYMMDD files allow you to specify the diagnostic quantities (species, reaction rates, met fields) that you want to print out for a specific longitude, latitude, altitude, and time. A sample Planeflight.dat.YYYYMMDD file is given below. Of course if you have lots of flight track data points, your file will be much longer.

If the plane flight following diagnostic is switched on, then it will look for a new Planeflight.dat.YYYYMMDD file each day. If a Planeflight.dat.YYYYMMDD file is found for a given day, then GEOS-Chem will save out diagnostic quantities along the flight track(s) to the plane.log.YYYYMMDD file.

Line numbers are not part of the Planeflight.dat file, but are provided for reference.

01: Planeflight.dat -- Input file for planeflight diagnostic
02: GCST
03: July 2018
04: -----------------------------------------------------------
05: 9     <-- # of variables to be output (listed below)
06: -----------------------------------------------------------
07: TRA_001
08: TRA_002
09: TRA_003
11: GMAO_TEMP
12: GMAO_ABSH
13: GMAO_RELH
14: GMAO_IIEV
15: GMAO_JJEV
16: GMAO_LLEV
17: -----------------------------------------------------------
18:   Now give the times and locations of the flight
19: -----------------------------------------------------------
20: Point   Type DD-MM-YYYY HH:MM     LAT     LON ALT/PRE        OBS
21:     1   Scrz 30-06-2012 13:53  -46.43   51.85  202.00   1765.030
22:     2   Scrz 30-06-2012 13:53  -46.43   51.85  202.00   1765.060
23:     3   Sush 30-06-2012 16:25  -54.85  -68.31   32.00   1764.750
24:     4   Sush 30-06-2012 16:25  -54.85  -68.31   32.00   1765.610
25:     5   Sllb 30-06-2012 17:13   54.95 -112.45  588.00   1891.200
26:     6   Sllb 30-06-2012 17:13   54.95 -112.45  588.00   1891.310
27: 99999   END  00-00-0000 00:00    0.00    0.00    0.00      0.000
Line Description
1-4 Header lines with comments
5 Number of diagnostic quantities to print out.
6 Separator line
7-16 Here we list the diagnostic quantities that we want to print out at each flight track location. For a description of diagnostic quantities currently supported, please see the section below.
17-19 Separator Lines
20 Comment line which shows you where to line up each column field of the flight track points.
21-26 Here we list quantities which define each flight track point. Make sure that each field lines up with the guides in the line above.
Column name Description
POINT Flight track data point number (used internally for reference)
TYPE A short string that denotes the aircraft type and flight number

IMPORTANT: In GEOS-Chem v11-02f and later versions, the planeflight diagnostic will automatically set L=1 if it does not recognize the TYPE. Please see the section below for more details.

DD-MM-YYYY Day, month, and year (GMT date) for each flight track point
HH:MM Hour and minute (GMT time) for each flight track point
LAT Latitude (-90 to 90 degrees) for each flight track point
LON Longitude (-180 to 180 degrees) for each flight track point
ALT/PRE Pressure in hPa for each flight track point.

New in GEOS-Chem v11-02f: The planeflight diagnostic was updated to allow for altitude [m] in this column to accommodate saving out data for NOAA surface stations, aircraft, and towers. The code in planeflight_mod.F checks the TYPE string to determine if the values in this column represent altitude or pressure. If the values are altitude they will be converted to pressure.

OBS Observation value from the flight campaign

GEOS-Chem will loop through each of the flight track points listed in Planeflight.dat.YYYYMMDD and print out each of the diagnostic quantities. GEOS-Chem will pick the nearest model box to each flight track point for comparison.

Note that it is OK to list flight track points from more than one aircraft in the same Planeflight.dat.YYYYMMDD file (as is shown above). However, all flight track points must be listed in increasing order of GMT time or else they will not be interpreted correctly by GEOS-Chem. The maximum number of flight track points allowed is currently set to MAXPOINTS=100000 in GeosCore/planeflight_mod.F.

27 Ending line

Plane.log file

Diagnostic output file in ASCII format containing planeflight information scheduled via the Planeflight.dat file. This diagnostic is turned on in the Planeflight Menu of input.geos.

The data in this text file can be read and plotted using GAMAP routines CTM_READ_PLANEFLIGHT and PLANE_PLOT.

The plane.log.YYYYMMDD file is saved out in the format:

POINT    TYPE YYYYMMDD HHMM     LAT     LON   PRESS        OBS     T-IND P-I I-IND J-IND  TRA_001     GMAO_TEMP   ...
    1    Scrz 20120630 1353  -46.43   51.85  981.74   1765.030 000061277 002 00047 00012  1.785E-006  2.780E+002  ...
    2    Scrz 20120630 1353  -46.43   51.85  981.74   1765.060 000061277 002 00047 00012  1.785E-006  2.780E+002  ...
    3    Sush 20120630 1625  -54.85  -68.31  949.77   1764.750 000061281 002 00023 00010  1.784E-006  2.746E+002  ...
    4    Sush 20120630 1625  -54.85  -68.31  949.77   1765.610 000061281 002 00023 00010  1.784E-006  2.746E+002  ...
    5    Sllb 20120630 1713   54.95 -112.45  876.13   1891.200 000061283 005 00015 00037  1.906E-006  2.942E+002  ...
    6    Sllb 20120630 1713   54.95 -112.45  876.13   1891.310 000061283 005 00015 00037  1.906E-006  2.942E+002  ...
Column name Description
POINT Flight track data point number (used internally for reference)
TYPE A short string that denotes the aircraft type and flight number
YYYYMMDD Year, month, and day (GMT date) for each flight track point
HHMM Hour and minute (GMT time) for each flight track point
LAT Latitude (-90 to 90 degrees) for each flight track point
LON Longitude (-180 to 180 degrees) for each flight track point
PRESS Pressure in hPa for each flight track point
OBS Observation value from the flight campaign (New in GEOS-Chem v11-02f)
T-IND Time index (New in GEOS-Chem v11-02f)
P-IND GEOS-CHEM level index (New in GEOS-Chem v11-02f)
I-IND GEOS-Chem longitude index (New in GEOS-Chem v11-02f)
J-IND GEOS-Chem latitude index (New in GEOS-Chem v11-02f)
TRA_001 GMAO_TEMP ... The remaining columns contain the diagnostic quantities specified in the Planeflight.dat.YYYYMMDD file

Diagnostic quantities

Variable name Description Units
TRA_nnn Species concentration (where nnn is the tracer number from input.geos) v/v
OH, HO2, etc. Chemical species (use the same names as in the species database) molec/cm3
RO2 Concentration of RO2 family
(HO2 + MO2 + A3O2 + ATO2 + B3O2 + ETO2 + GCO3 + IAO2 + KO2 + MAO3 + MCO3 + MRO2 + PO2 + RIO2 + VRO2 + ACO3 + EO2 + ENCO3 + ENO2 + GLCO3 + IACO3 + INO2 + MACO3 + NICO3 + NIO2 + VOHRO2 + RIO1 + C59O2 + MAPO2 + + BRO2 + TRO2 + XRO2 + NRO2 + MOBAOO + ISOPNBO2 + ISOPNDO2 + IEPOXOO + PYPO2 + MACRNO2 + PMNO2 + HC5OO + RCO3)
v/v
AN Concentration of AN family
(ISOPNB + ISOPND + MVKN + MACRN + R4N2 + ISN1 + PROPNN + ETHLN + DHDN + HONIT + MONIT + MONITS + INPN)
v/v
NOy Concentration of NOy family
(NO + NO2 + NO3 + HNO2 + HNO4 + HNO3 + PAN + PYPAN + IPMN + NPMN + PPN)
v/v
GMAO_TEMP Temperature K
GMAO_ABSH Absolute humidity unitless
GMAO_SURF Aerosol surface area cm2/cm3
GMAO_PSFC Surface pressure hPa
GMAO_UWND Zonal winds m/s
GMAO_VWND Meridional winds m/s
GMAO_IIEV GEOS-Chem grid box index, longitude unitless
GMAO_JJEV GEOS-Chem grid box index, latitude unitless
GMAO_LLEV GEOS-Chem grid box index, altitude unitless
GMAO_RELH Relative humidity  %
GMAO_PVRT Ertel's potential vorticity
Currently disabled. State_Met%PV is not defined.
kg*m2/kg/s
GMAO_PSLV Sea level pressure hPa
GMAO_AVGW Water vapor mixing ratio v/v
GMAO_THTA Potential temperature K
GMAO_PRES Pressure at center of grid box hPa
GMAO_ICEnn SEAICEnn fields (i.e. the fraction of each grid box that has nn% to nn+10% of sea ice coverage) unitless
AODC_SULF Column aerosol optical depth for sulfate unitless
AODC_BLKC Column aerosol optical depth for black carbon unitless
AODC_ORGC Column aerosol optical depth for organic carbon unitless
AODC_SALA Column aerosol optical depth for accumulation mode sea salt unitless
AODC_SALC Column aerosol optical depth for coarse mode sea salt unitless
AODC_DUST Column aerosol optical depth for dust unitless
AODB_SULF Column aerosol optical depth for sulfate below the aircraft unitless
AODB_BLKC Column aerosol optical depth for black carbon below the aircraft unitless
AODB_ORGC Column aerosol optical depth for organic carbon below the aircraft unitless
AODB_SALA Column aerosol optical depth for accumulation mode sea salt below the aircraft unitless
AODB_SALC Column aerosol optical depth for coarse mode sea salt below the aircraft unitless
AODB_DUST Column aerosol optical depth for dust below the aircraft unitless
TMS_nnn Instantaneous nucleation rates for simulations using TOMAS aerosol microphysics
HG2_FRACG Fraction of Hg(II) in the gas phase unitless
HG2_FRACP Fraction of Hg(II) in the particle phase unitless
ISOR_HPLUS ISORROPIA H+ M
ISOR_PH ISORROPIA pH (non-ideal system, so pH can be negative) unitless
ISOR_AH2O ISORROPIA aerosol water ug/m3 air
ISOR_HSO4 ISORROPIA bifulfate M
TIME_LT Local time hours
GAMM_EPOX Uptake coefficient for EPOX
Currently disabled. This diagnostic needs to be updated to work with FlexChem.
molec/cm3/s
GAMM_IMAE Uptake coefficient for IMAE
Currently disabled. This diagnostic needs to be updated to work with FlexChem.
molec/cm3/s
GAMM_ISOPN Uptake coefficient for ISOPN
Currently disabled. This diagnostic needs to be updated to work with FlexChem.
molec/cm3/s
GAMM_DHDN Uptake coefficient for DHDN
Currently disabled. This diagnostic needs to be updated to work with FlexChem.
molec/cm3/s
GAMM_GLYX Uptake coefficient for GLYX
Currently disabled. This diagnostic needs to be updated to work with FlexChem.
molec/cm3/s
AQAER_RAD Aqueous aerosol radius cm
AQAER_SURF Aqueous aerosol surface area cm2/cm3
PROD_xxxx Production rates
Currently disabled. This diagnostic needs to be updated to work with FlexChem. See this post for a possible workaround.
molec/cm3/s
REA_nnn Reaction rates
Currently disabled. This diagnostic needs to be updated to work with FlexChem. See this post for a possible workaround.
molec/cm3/s

Planeflight type

The TYPE column in the Planeflight.dat file can be used to specify the aircraft type and flight number to distinguish between multiple plane flight tracks.

IMPORTANT: In GEOS-Chem v11-02f and later versions, the planeflight diagnostic will automatically set L=1 if it does not recognize the TYPE. When using a new flight track, make sure to add your new TYPE string to the IF statement below (found in subroutine PLANEFLIGHT in planeflight_mod.F) if you do not want to use L=1 for those points.

           !kjw. if not INTEX-A observation, set L=1
           ! Add calnx (mpayer, 1/8/13)
           ! Add HIPPO (ajt, 5/23/13)
           ! Add CCGG (ajt, 7/5/13)
           ! Add NOAA towers (ajt, 4/2/15)
           IF ( TRIM(ADJUSTL(PTYPE(M))) .NE. 'DC-8'  .AND.
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'ER2'   .AND.
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'calnx' .AND. ! Calnex
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'calne' .AND. ! Calnex
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Aacg'  .AND. ! NOAA Aircraft
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Abne'  .AND. ! NOAA Aircraft
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Acar'  .AND. ! NOAA Aircraft
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Acrv'  .AND. ! NOAA Aircraft
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Acma'  .AND. ! NOAA Aircraft
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Adnd'  .AND. ! NOAA Aircraft
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Aesp'  .AND. ! NOAA Aircraft
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Aetl'  .AND. ! NOAA Aircraft
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Ahil'  .AND. ! NOAA Aircraft
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Ahip'  .AND. ! NOAA Aircraft
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Alef'  .AND. ! NOAA Aircraft
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Anha'  .AND. ! NOAA Aircraft
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Apfa'  .AND. ! NOAA Aircraft
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Arta'  .AND. ! NOAA Aircraft
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Asca'  .AND. ! NOAA Aircraft
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Asgp'  .AND. ! NOAA Aircraft
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Atgc'  .AND. ! NOAA Aircraft
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Athd'  .AND. ! NOAA Aircraft
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Awbi'  .AND. ! NOAA Aircraft
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Tamt'  .AND. ! NOAA TOWER
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Tbao'  .AND. ! NOAA TOWER
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Tcrv'  .AND. ! NOAA TOWER
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Tlef'  .AND. ! NOAA TOWER
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Tlew'  .AND. ! NOAA TOWER
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Tmbo'  .AND. ! NOAA TOWER
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Tmvy'  .AND. ! NOAA TOWER
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Tmwo'  .AND. ! NOAA TOWER
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Tnwr'  .AND. ! NOAA TOWER
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Tsct'  .AND. ! NOAA TOWER
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Tsgp'  .AND. ! NOAA TOWER
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Tstr'  .AND. ! NOAA TOWER
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Twbi'  .AND. ! NOAA TOWER
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Twgc'  .AND. ! NOAA TOWER
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'Twkt'  .AND. ! NOAA TOWER
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'hipp1' .AND. ! HIPPO
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'hipp2' .AND. ! HIPPO
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'hipp3' .AND. ! HIPPO
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'hipp4' .AND. ! HIPPO
    &           TRIM(ADJUSTL(PTYPE(M))) .NE. 'hipp5' ) THEN
              print*,'WARNING: GMD Observation. forcing L=1'
              L = 1
           ENDIF

Unresolved issues

Saving out reaction rates with FlexChem

Tomas Sherwen wrote:

Please could I ask if there is s position on/plan for restoring the chemical rate tracking (REA_??) functionality of the planeflight diagnostic?

In v11-01/ v11-02d REA_?? has been deactivated due to FlexChem.

I use this functionality (and I suspect many others do) for tracking rates (e.g. JNO2) along plane/ship/station tracks/timeseries at instrument resolution.

Melissa Sulprizio replied:

Yes, we will eventually restore the chemical rates in the planeflight diagnostic. One issue is that we're currently developing netCDF diagnostics and that will mess up the planeflight diagnostics even more. Bob wrote to the GCSC:
For the “planeflight” diagnostic, we will investigate using a separate package (such as NOAA ObsPack, as recommended by Andy Jacobsen at IGC8) that can more efficiently store point data. Then new diagnostic package we are developing works well for array data but not as well for point data.

Once the netCDF diagnostics are in place, we will reconsider how to fix/update planeflight_mod.F.

If you need these diagnostics in the meantime, you should be able to hack it into the chemical mechanism by adding dummy species to the reactions you want to track and then rebuilding the mechanism based on these instructions. In flexchem_mod.F90, you can then obtain the rate from KPP using the C array (e.g. Rate = C(ind_NEWSPC) / DT to get molec/cm3/s).

Mat Evans replied:

I’ve had a quick look at obspack. I’m not sure its well suited to our needs.
I personally don’t see much need to update the plane flight files. They are easy to understand at the moment and easy to manipulate being in ascii. The biggest problem at the moment is that the rate constants have fallen out of them because of the move to FlexChem. If we can get that sorted I don’t think there is a pressing need to update the format.

--Bob Yantosca (talk) 16:20, 15 November 2017 (UTC)

Previous issues that are now resolved

Do not force L=1 by default in planeflight_mod.F

This fix was included in GEOS-Chem 12.0.0.

In the updates to the CH4 simulation added in v11-02f, code for forcing L=1 was added to routine PLANEFLIGHT when a PTYPE string was not recognized. This meant users would always have to add new plane type strings to this code to avoid setting the level to 1. Most users will use the planeflight diagnostic for planeflight tracks, not surface observations, so we have modified this code to only set L=1 when a string for surface observation is recognized and not the other way around. In addition, the code will stop with a warning that level will be set to 1. If that is the users intention, then they can comment out the call to GEOS_CHEM_STOP and rerun.

--Melissa Sulprizio (talk) 13:21, 31 July 2018 (UTC)

ND40 planeflight diagnostic not always written out when turned on

This update was included in v11-02b and approved on 16 Jun 2017.

Lee Murray (University of Rochester) wrote:

I think the FlexChem implementation accidentally disabled the planeflight diagnostic for the full chemistry simulation. We used to initialize the planeflight diagnostic in chemdr.F for full chemistry simulations (now no more) and all the other versions in main.F. We should change main.F to always call SETUP_PLANEFLIGHT whenever the diagnostic is turned on (remove code in RED, add code in GREEN).
        ! Plane following diagnostic
        IF ( ND40 > 0 .and. DO_DIAG_WRITE ) THEN 
        
           ! Call SETUP_PLANEFLIGHT routine if necessary
           IF ( ITS_A_NEW_DAY() ) THEN
              
!               ! If it's a full-chemistry simulation but LCHEM=F,
!               ! or if it's an offline simulation, call setup routine 
!               IF ( ITS_A_FULLCHEM_SIM ) THEN
!                  IF ( .not. LCHEM ) THEN
!                     CALL SETUP_PLANEFLIGHT( am_I_Root, Input_Opt,
!     &                                       State_Chm, RC )
!                  ENDIF
!               ELSE
!                  CALL SETUP_PLANEFLIGHT( am_I_Root, Input_Opt, 
!     &                                    State_Chm, RC )
!               ENDIF

               CALL SETUP_PLANEFLIGHT( am_I_Root, Input_Opt, State_Chm, RC )

           ENDIF
        ENDIF

--Lizzie Lundgren (talk) 19:44, 10 May 2017 (UTC)