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

Mass conservation upon restart #2536

Open yuanjianz opened 3 weeks ago

yuanjianz commented 3 weeks ago

Your name

Yuanjian Zhang

Your affiliation

WashU

What happened? What did you expect to happen?

Both GC-Classics and GCHP are not able to conserve mass upon restart.

@lizziel:

Initial global mass change upon startup and then stabilizes. Mass conservation is better after a short spin-up period. Issues with unit conversion during restart handling? In theory, passive tracer mass in restart should be conserved upon startup and across a run.

Also, see https://github.com/geoschem/geos-chem/issues/2014 and @lizziel's work for bit-of-bit reproducibility in https://github.com/geoschem/geos-chem/pull/2521

This could be the result of not properly scaling mixing ratios based on DELP_DRY_RESTART and DELP_DRY_MET.

Mixing ratios should be scaled based on scaled_MR = MR_restart * DELP_DRY_RESTART / DELP_DRY_MET when everything is first read into the model. Then all processes including transport, convection, and chemistry, etc can be executed.

GC-Classics

https://github.com/geoschem/geos-chem/blob/bef56c605e018eecbd91646a51ce82c7cd77f56a/GeosCore/hco_interface_gc_mod.F90#L4415-L4419 Currently, the above snippet in Get_Met_Fields is not updating mixing ratios since Get_Met_Fields is right before Get_GC_Restart: https://github.com/geoschem/geos-chem/blob/bef56c605e018eecbd91646a51ce82c7cd77f56a/GeosCore/hco_interface_gc_mod.F90#L1010-L1033

It is recommended to either move Get_Met_Fields after Get_GC_Restart or move the reading of DELP_DRY_RESTART into Get_GC_Restart and complete the AirQnt-update_mixing_ratio there.

GCHP

GCHP advection is executed before geos-chem module, so it would be necessary to read DELP_DRY_RESTART in ChemComp Initialization state and do the scaling before AdvComp Run state.