I am interested in looking at the partition between physical and biological processes in influencing oxygen concentrations. From Oke et al. 2013, if I interpret correctly, the change in oxygen is given by:

\partial_t O_2 = ADV + DIFF + BIO

where the BIO part is -\frac{177}{16} \partial_t N and N is nitrate concentration.

I can see that we have the following diagnostics:

o2 in mmol/m3

no3 in mmol/m3

o2_flux_adv in kg/s

If I can convert the flux to mmol/m3, I could then get the diffusion part as a residual (away from surface and boundaries I’m expecting it to be small anyways) - but I’m not sure how to do the unit conversion for the advection term.

Metadata says o2_flux_adv is rho*A*u*tracer, where A is the x or y area of the gridcell. So dividing by 1035 reference density I’d obtain a volume flux in m3/s, but that is as far as I got.

Would any BGC wizs out there be able to tell me if (a) my logic is correct re processes governing o2 and (b) how to manage the unit conversion?

I wouldn’t call myself a BGC wiz so take these 2 cents with a grain of salt:

a. Yes, I think your understanding is sound. O_{2} below the surface is essentially biologically produced by photosynthesis (along with some organic N) or respired by bacteria (along with remineralization of N). The reality is of course more complicated, e.g., you can get some decoupling between O_{2} and N when denitrification/N-fixation occurs.

b. I think you just have to divide o2_flux_adv by the mass of water in the grid cell, i.e., rho * volcello. Assuming rho*A*u*tracer is in (kg m^{−3}) (m^{2}) (m s^{−1}) (mmol m^{−3}) = kg mmol m^{−3} s^{−1}, dividing by rho * volcello (unit: kg) would give you the advective flux convergence/divergence (depending on the orientation of u) in mmol m^{−3} s^{−1}. Not sure if that’s the unit of your o2_flux_adv though…

Thanks a lot Benoit! I’ve interpreted a. from Oke et al. 2013 appendix B.

Regarding the units, rho*A*u*tracer is in units of kg/s, i.e. the tracer is unitless. I would like to convert the unitless concentration to mmol/m3, which is the part I’m unsure about?

Yes, that’s it, they avoid the complexities of the N cycle altogether:

We assume a Redfield ratio of 1 : 16 : 106 : −172 (P : N : C : O_{2}) with phosphate, nitrate, carbon and oxygen. The choice of phosphate as our macro-nutrient rather than nitrate allows us to neglect nitrification, denitrification and atmosphere deposition, which add and remove nitrate from the ocean and make the nitrogen cycle more complicated than the phosphate cycle, which is conserved in the ocean

I am now also confused regarding the units. I don’t really understand how o2_flux_adv or rho*A*u*tracer could be in units of kg/s. Could that be a mistake in the metadata? Surely the variable representing some flux of O_{2} must incude a unit for O_{2} somehow, right? Maybe this kg/s is actually in kg of O_{2}? (In which case you’d have to divide by the volume of the cell and convert the kg of O_{2} to mmolO_{2})

Yes, you’re better off waiting for @aekiss or @pearseb to for a definitive answer, but my guess is that this issue you linked is the one you are facing.

If they just omitted the mmol m^{−3} unit for O_{2}, dividing o2_flux_adv by the water mass in the cell seems to be the way to go.

You could try it and see if the values you get makes sense in terms of order of magnitude?

BTW although the issue is 2 years old, the corresponding code file has not been touched in 6 years on the master branch, so unless the output you are using was produced by code from another repository/branch, that issue has not been fixed in your case.

Oke et al eq B12 actually has 172 in the numerator, not 177. This is due to the assumed Redfield ratio of 1:16:106:−172 (P:N:C:O2). I could be wrong, but it seems that sometimes N is nutrient (in phosphate units), and sometimes it’s nitrate. But the 16 in B12 indicates that in this case N is nitrate, i.e. this is just the time derivative of the assumed Redfield ratio.

This issue hasn’t been fixed, so the units metadata is incorrect for all BGC tracer flux outputs.

I think the actual units for o2_*flux_adv are (tracer units)*kg/sec. I guess in this case tracer units are mmol/m^3, as the metadata for o2 says. So units for o2_*flux_adv are (mmol kg)/(m^3 sec). Does that work?

FWIW, we have a paper fresh out of the press on almost exactly this topic (Pasquier et al. 2024), albeit in an idealised context… Maybe it’s useful to you?