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 calling fv_getVerticalMassFlux with mfxxyz and mfyxyz as inputs:
|
call getVerticalMassFlux(mfxxyz, mfyxyz, mfzxyz, dt) |
Immediately beforehand, mfxxyz and mfyxyz are used to fill the MX and MY exports, which are stated to be in Pa m+2 s-1:
Similarly, mfxxyz is used immediately after the call to fv_getVerticalMassFlux to fill the export MFZ, which has declared units of kg m-2 s-1:
However, as far as I can tell, the operations in fv_getVerticalMassFlux will not convert a quantity with units Pa m+2 s-1 to a quantity with units kg m-2 s-1. Briefly, it appears that the routine in question first calculates conv, which must have units of Pa m+2 s-1 multiplied by the units of fac (noting that xfx = mfx):
|
conv(i,j,k) = ( xfx(i,j,k) - xfx(i+1,j,k) + & |
|
yfx(i,j,k) - yfx(i,j+1,k) ) * fac |
fac is equal to 1.0/(dt*MAPL_GRAV), and must therefore have units of s-1 * s+2 * m-1 = s+1 m-1:
That implies that conv has units of Pa m+2 s-1 * s+1 m-1 = Pa m. The only remaining operation in fv_getVerticalMassFlux which should affect the units of the answer are on line 3204, when mfz is calculated. Here, b(k) * pit is subtract from conv, and then the result divided by MAPL_GRAV*area:
|
mfz(i,j,k) = ( conv(i,j,k-1) - FV_Atm(1)%bk(k)*pit(i,j) )/(MAPL_GRAV*fv_atm(1)%gridstruct%area(i,j)) ! Kg/m^2/s |
pit is just an accumulation of conv so should have the same units, which I believe are still Pa m. Dividing by MAPL_GRAV*area should then have the effect of changing the units to Pa m * s+2 m-1 * m-2 = Pa s+2 m-2. Converting from pressure to mass still gives Pa = N m-2 = kg m s-2 m-2 = kg s-2 m-1, which means the eventual units end up being kg 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 of fac results in a duplicate division by MAPL_GRAV, and incurs a division by dt when the units of mfx are already meant to be a tendency. Alternatively, it may be that the units of mfx and mfy are incorrectly listed; but again, any information anyone can provide would be very welcome!
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
mfzxyzis calculated by callingfv_getVerticalMassFluxwithmfxxyzandmfyxyzas inputs:FVdycoreCubed_GridComp/DynCore_GridCompMod.F90
Line 4347 in b331e2a
Immediately beforehand,
mfxxyzandmfyxyzare used to fill theMXandMYexports, which are stated to be in Pa m+2 s-1:FVdycoreCubed_GridComp/DynCore_GridCompMod.F90
Line 998 in b331e2a
Similarly,
mfxxyzis used immediately after the call tofv_getVerticalMassFluxto fill the exportMFZ, which has declared units of kg m-2 s-1:FVdycoreCubed_GridComp/DynCore_GridCompMod.F90
Line 1032 in b331e2a
However, as far as I can tell, the operations in
fv_getVerticalMassFluxwill not convert a quantity with unitsPa m+2 s-1to 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-1multiplied by the units offac(noting thatxfx = mfx):FVdycoreCubed_GridComp/FV_StateMod.F90
Lines 3178 to 3179 in b331e2a
facis equal to1.0/(dt*MAPL_GRAV), and must therefore have units ofs-1 * s+2 * m-1 = s+1 m-1:FVdycoreCubed_GridComp/FV_StateMod.F90
Line 3170 in b331e2a
That implies that
convhas units ofPa m+2 s-1 * s+1 m-1 = Pa m. The only remaining operation infv_getVerticalMassFluxwhich should affect the units of the answer are on line 3204, whenmfzis calculated. Here,b(k) * pitis subtract fromconv, and then the result divided byMAPL_GRAV*area:FVdycoreCubed_GridComp/FV_StateMod.F90
Line 3204 in b331e2a
pitis just an accumulation ofconvso should have the same units, which I believe are stillPa m. Dividing byMAPL_GRAV*areashould 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
facis incorrect - removing that factor at least causes the units to work out correctly. It also makes logical sense, since inclusion offacresults in a duplicate division byMAPL_GRAV, and incurs a division bydtwhen the units ofmfxare already meant to be a tendency. Alternatively, it may be that the units ofmfxandmfyare incorrectly listed; but again, any information anyone can provide would be very welcome!