Possible issues with mercury bidirectional exchange under STAGE in CMAQ v5.5

Hi,

I am a master’s student using CMAQ v5.5 with the STAGE deposition option and mercury bidirectional exchange. While tracing the STAGE mercury code, I found two places that seem to be original coding issues rather than model-tuning choices. I may be misunderstanding something, so I would be very grateful if you could help confirm whether my interpretation is correct.

The files I checked are mainly STAGE_MOD.F and HGSIM.F.

First, in STAGE_MOD.F around lines 630-633, the code computes and passes flux_hgII as:

flux_hgII = -Sum( Tile_Data%Lu_Vd( c,r,n_HgII,: ) * Tile_Data%LUFRAC( c,r,: ), mask = WATER)
Call Hg_Surf_Update ( f_stom, f_cut, f_soil, f_wat, flux_hgII,
&                 Heff_wat, Heff, TStep, c, r, Jdate, Jtime )

However, in HGSIM.F, the interface and subsequent use seem to indicate that flx_hgII is treated as a flux in ppm*m/s, for example around lines 294, 300, and 342:

REAL,    INTENT( IN )   :: flx_stom, flx_cut, flx_grnd, flx_wat, flx_hgII         ! fluxes ppm*m/s
REAL    :: flux_st, flux_cut, flux_grnd, flux_wat, flux_hgII      ! fluxes ppm*m/s
flux_hgII  = flx_HgII / zsurf

My concern is that Tile_Data%Lu_Vd is a deposition velocity (m/s), not a flux. So here flux_hgII seems to be passed as deposition velocity only, without multiplying by the air concentration of HGIIGAS.

If my understanding is correct, I wonder whether this should instead be something like:

flux_hgII = -cgridl1(n_HGII) *
&       Sum( Tile_Data%Lu_Vd( c,r,n_HgII,: ) * Tile_Data%LUFRAC( c,r,: ),
&            mask = WATER )

so that the quantity passed to Hg_Surf_Update is actually a grid-cell-mean HGIIGAS flux in ppm*m/s.

Second, in HGSIM.F around lines 311, 315, and 316, I found:

REAL, PARAMETER :: satten = 7.58-1
REAL, PARAMETER :: kphot = 6.5-4
REAL, PARAMETER :: kox   = 7.2-4

In Fortran, these seem to be interpreted as subtraction rather than scientific notation, i.e. 7.58-1 = 6.58, 6.5-4 = 2.5, and 7.2-4 = 3.2, rather than the likely intended values:

REAL, PARAMETER :: satten = 7.58e-1
REAL, PARAMETER :: kphot = 6.5e-4
REAL, PARAMETER :: kox   = 7.2e-4

If so, this would make the Hg aqueous photoreduction/photooxidation parameters much larger than intended.

Thank you very much for your time and for maintaining CMAQ. I apologize in advance if I have misunderstood the code logic.

Best regards

STAGE_MOD.F.txt (47.2 KB)

HGSIM.F.txt (24.5 KB)

Thanks for pointing out these issues. Those do seem to be errors in the code, and your proposed changes look correct to me.

Edit May 19, 2026: We have issued a pull request to the CMAQv5.5+ bugfix branch with these corrections.