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
166 stars 158 forks source link

[BUG/ISSUE] Tagged ozone simulation needs to be updated #1109

Closed xpye98 closed 2 years ago

xpye98 commented 2 years ago

What institution are you from?

Peking University

Description of the problem

(This problem is related to #973, #821, and #965, especially #973, which has not been solved yet).

First, I got the same error as #821, then I realized that the unit of Prod/Loss from fullchem simulation is not the same as old version's (say, for v11-02, the unit of Prod_Ox is kg/m3/s, the unit of Loss_Ox is 1/m3/s, see here), while the code of tagged ozone simulation (GeosCore/tagged_o3_mod.F90) is the same.

The unit of Prod/Loss now is said to be kg/s, but indeed, it is still molecules/cm3/s. see #965.

I did some modification to convert the unit in the code, see below, but the result os tagged ozone simulation seems inaccurate. The surface O3 concentration is below 20 ppbv, globally.

Description of troubleshooting performed

So I t modified the tagged_o3_mod.F90 below to convert the unit.

In line 244, I convert Prod from [molec/cm3/s] to [kg/m3/s], then to get [kg]

- ! P24H is in kg/m3 per emission time step (ckeller, 9/17/2014).
-    PPROD = P24H(I,J,L) * BOXVL * ( GET_TS_CHEM()/TS_EMIS )
+ ! P24H is in molec/cm3 per emission time step
+    PPROD = P24H(I,J,L) / 6.022e23_fp * 1.e3_fp * 4.8e+1_fp &
+                       * BOXVL * ( GET_TS_CHEM()/TS_EMIS )

In line 527, I also convert Loss from [molec/cm3/s] to [kg/m3/s], then to get [kg], Spc is said to be in [kg]

-     ! L(O3) is now in [1/m3] (ckeller, 9/17/2014)
-          IF ( State_Met%InTroposphere(I,J,L) ) THEN
-             LL = Spc(I,J,L,N) * L24H(I,J,L) * BOXVL * DT
+    ! L24H is in [molec/cm3/s]
+          IF ( State_Met%InTroposphere(I,J,L) ) THEN
+            LL = L24H(I,J,L) / 6.022e23_fp * 1.e3_fp * 4.8e+1_fp &
+                              * BOXVL * DT

The final calculation is based on line 647 Spc(I,J,L,N) = Spc(I,J,L,N) + PP(I,J,L,N) - LL where PP is PROD above.

I think one main concern is, what's the mass of Ox? In old version, we have Loss_Ox in [1/m3/s] from fullchem simulation, then we multiply Ox concentration in the tagged simulation. However, for now, if we already have Loss_Ox in [molec/cm3/s] or [kg/m3/s] from fullchem simulation, is it ok to directly use it to calculate Spc(I,J,L,N) = Spc(I,J,L,N) + PP(I,J,L,N) - LL in tagged simulation?

Another question bothered me is, In #973, @map06 considered all Ox family (O3 + NO2 + 2NO3 + PAN + PPN + ...), does it have influence here?

Given all of the above, I think both the code and wiki of tagged ozone needs to be updated.

Thank you all in advance!

GEOS-Chem version

V13.2.1

yantosca commented 2 years ago

Thanks for your input @xpe98. We agree that the tagged O3 simulation is a bit out of date w/ the rest of GEOS-Chem and needs updating. This will be discussed at the next GEOS-Chem Steering Committee meeting on 23 Feb 2022.

yantosca commented 2 years ago

Thanks again @xpe98. We are working on updating the tagged O3 simulation. Please see the discussion from the GCSC telecon minutes of 23 Feb 2022 for more information.

yantosca commented 2 years ago

See #1150, we will fix most of these issues in 13.4.0.

yantosca commented 2 years ago

I will close this issue, as the new tagged O3 simulation has already been merged into the 13.4.0 development stream. The 13.4.0 version is currently pending benchmark approval.