Open sdeastham opened 2 years ago
I'm going to assign @wmputman and hope he sees this. It's beyond me!
Yes - ultimately this is an issue that only @wmputman can answer. If we don't hear back in a timely manner, we can at least have someone repeat this analysis as a check.
@tclune - think that @wmputman is not able to look at this - any thoughts on next steps?
I have to look at it, sorry for the delay
This was taken long ago from the old LatLon core. This code is indeed wrong. You just need to remove the fac in the calculation of conv:
MFX = Pa m2 / s MFY = Pa m2 / s
conv & pit will maintain units of Pa * m2 / s
(conv - bkpit) / (grav area) = ( Pa m+2 s-1 ) / ( m s-2 m+2 ) = ( N s-1 ) / ( m+3 s-2 ) = N s+1 m-3 = kg m-2 s-1
If you have a bad MFZ, you should be able to correct it by multiplying by gravity*dt (dt=450s)
@wmputman Queries:
It only changes the exports for GEOS. I have committed a code fix:
Thanks @wmputman for the review and fix! @lizziel - suggest we cherry pick at least this update into the GCHP fork, since it is trivial but will make the diagnostic much more useful?
I have been comparing the estimated vertical mass fluxes generated by FV3 with those coming from the older FV code embedded in GEOS-Chem, and have found significant disagreement. However, I am wondering if this is because of a units issue and would appreciate any insights that the developers might have.
Specifically, in FV_StateMod, the vertical mass flux
mfzxyz
is calculated by callingfv_getVerticalMassFlux
withmfxxyz
andmfyxyz
as inputs: https://github.com/GEOS-ESM/FVdycoreCubed_GridComp/blob/b331e2ae0339bde84d63eacd911c36befe74d735/DynCore_GridCompMod.F90#L4347Immediately beforehand,
mfxxyz
andmfyxyz
are used to fill theMX
andMY
exports, which are stated to be in Pa m+2 s-1: https://github.com/GEOS-ESM/FVdycoreCubed_GridComp/blob/b331e2ae0339bde84d63eacd911c36befe74d735/DynCore_GridCompMod.F90#L998Similarly,
mfxxyz
is used immediately after the call tofv_getVerticalMassFlux
to fill the exportMFZ
, which has declared units of kg m-2 s-1: https://github.com/GEOS-ESM/FVdycoreCubed_GridComp/blob/b331e2ae0339bde84d63eacd911c36befe74d735/DynCore_GridCompMod.F90#L1032However, as far as I can tell, the operations in
fv_getVerticalMassFlux
will not convert a quantity with unitsPa m+2 s-1
to a quantity with unitskg m-2 s-1
. Briefly, it appears that the routine in question first calculatesconv
, which must have units ofPa m+2 s-1
multiplied by the units offac
(noting thatxfx = mfx
): https://github.com/GEOS-ESM/FVdycoreCubed_GridComp/blob/b331e2ae0339bde84d63eacd911c36befe74d735/FV_StateMod.F90#L3178-L3179fac
is equal to1.0/(dt*MAPL_GRAV)
, and must therefore have units ofs-1 * s+2 * m-1 = s+1 m-1
: https://github.com/GEOS-ESM/FVdycoreCubed_GridComp/blob/b331e2ae0339bde84d63eacd911c36befe74d735/FV_StateMod.F90#L3170That implies that
conv
has units ofPa m+2 s-1 * s+1 m-1 = Pa m
. The only remaining operation infv_getVerticalMassFlux
which should affect the units of the answer are on line 3204, whenmfz
is calculated. Here,b(k) * pit
is subtract fromconv
, and then the result divided byMAPL_GRAV*area
: https://github.com/GEOS-ESM/FVdycoreCubed_GridComp/blob/b331e2ae0339bde84d63eacd911c36befe74d735/FV_StateMod.F90#L3204pit
is just an accumulation ofconv
so should have the same units, which I believe are stillPa m
. Dividing byMAPL_GRAV*area
should then have the effect of changing the units toPa m * s+2 m-1 * m-2 = Pa s+2 m-2
. Converting from pressure to mass still givesPa = N m-2 = kg m s-2 m-2 = kg s-2 m-1
, which means the eventual units end up beingkg m-3
. That would imply that a factor with units equal to velocity is missing from the calculation.I haven't been able to find a fundamental error in my calculation, but may well be missing something obvious. Nonetheless, I would appreciate any insight that anyone can provide. My suspicion (but it is that at most) is that the application of
fac
is incorrect - removing that factor at least causes the units to work out correctly. It also makes logical sense, since inclusion offac
results in a duplicate division byMAPL_GRAV
, and incurs a division bydt
when the units ofmfx
are already meant to be a tendency. Alternatively, it may be that the units ofmfx
andmfy
are incorrectly listed; but again, any information anyone can provide would be very welcome!