fix: correct physics bugs in 3-equation ice cavity melt model#875
fix: correct physics bugs in 3-equation ice cavity melt model#875JanStreffing wants to merge 2 commits intomainfrom
Conversation
Five physics/correctness fixes in cavity_heat_water_fluxes_3eq: 1. Conduction term (ep31): use rhor^2 instead of rhor, because the ice draft (zice) must be converted to full ice thickness via D_ice = D_draft * (rhow/rhoi), and the heat balance is normalised by rhow. Verified against Holland & Jenkins (1999). ~11% correction. 2. Reynolds number length scale: replace hardcoded 10 m with actual top-layer thickness hnode(nzmin,node), restoring the velocity- and geometry-dependent formulation from the original BRIOS code. 3. Depth-to-pressure conversion: pass abs(zice)*1.025 [dbar] instead of abs(zice) [m] to potit() for the in-situ temperature calculation. 4. Latent heat lhf: correct value from 3.33e5 to 334000 J/kg to match the L constant declared in the same subroutine. 5. Discriminant guard: add max(..., 0.) before sqrt() to prevent NaN from negative discriminant under numerical extremes. Also fix comment: tdif is thermal diffusivity [m2/s], not conductivity.
|
Not sure if any of these will be major changes, perhaps not. But can't hurt to be accurate? |
|
|
||
| real(kind=WP),parameter :: pr = 13.8 !Prandtl number [dimensionless] | ||
| real(kind=WP),parameter :: sc = 2432. !Schmidt number [dimensionless] | ||
| real(kind=WP),parameter :: ak = 2.50e-3 !dimensionless drag coeff. |
There was a problem hiding this comment.
The drag coefficient is the most effective tool to reduce the melt rates which are always too large. Numbers down to 0.5e-3 are reasonable. We could consider reducing the default value in this merge.
| !rt s_surf_flux(i,j)=gas*(sf-(s(i,j,N,lrhs)+35.0)) | ||
|
|
||
| heat_flux(node) = rhow*cpw*gat*(tin-tf) ! [W/m2] ! positive for upward | ||
| water_flux(node) = ep5*(sf-sal)/sf ! [m/s] ! |
There was a problem hiding this comment.
According to Ralph Timmermann the fix in #855 was wrong and line 365 must be replaced with water_flux(node) = rhow / rhofw * gas * (sal-sf)/sf, with rhofw=1000kg/m3 #866 . Replacing ep5 with rhow / rhofw * gas seems correct to me based on Ralph's explanation. Replacing sf-sal with sal-sf would however switch the sign of the term and would require according modification of the code.
FinnHeu
left a comment
There was a problem hiding this comment.
These are good fixes, @JanStreffing. In my opinion, we should consider to additionally implement Losch 2008 (https://doi.org/10.1029/2007JC004368), which solves the problem of missing boundary layers right underneath the ice due to dilution of the heat and freshwater fluxes in coarse (or unevenly thick) z-coordinates. The general idea is to introduce an imaginary boundary layer of a certain thickness (e.g. 10 m) under the ice tongue no matter the thickness of the first active layer. The heat and freshwater fluxes are computed according to the temperature, salinity, and velocity of this boundary layer (which is relaxed to the full cells T and S to follow its evolution) and ultimately applied to both, the full cell and the boundary layer itself. This way, a cooler and fresher boundary layer develops and is used to compute the fluxes, which should further reduce the fluxes. I wanted to properly try this anyway and would rank it higher on my agenda.
|
Trying these fixes in AWI-ESM2 with fesom-2.6.11, these fixes seem to have very little effect on the overall freshwater fluxes. Over 10 year test runs there is little difference to before, both in the total flux and specific cavity behaviour |
Five physics/correctness fixes in cavity_heat_water_fluxes_3eq:
Conduction term (ep31): use rhor^2 instead of rhor, because the ice draft (zice) must be converted to full ice thickness via D_ice = D_draft * (rhow/rhoi), and the heat balance is normalised by rhow. Verified against Holland & Jenkins (1999). ~11% correction.
Reynolds number length scale: replace hardcoded 10 m with actual top-layer thickness hnode(nzmin,node), restoring the velocity- and geometry-dependent formulation from the original BRIOS code.
Depth-to-pressure conversion: pass abs(zice)*1.025 [dbar] instead of abs(zice) [m] to potit() for the in-situ temperature calculation.
Latent heat lhf: correct value from 3.33e5 to 334000 J/kg to match the L constant declared in the same subroutine.
Discriminant guard: add max(..., 0.) before sqrt() to prevent NaN from negative discriminant under numerical extremes.
Also fix comment: tdif is thermal diffusivity [m2/s], not conductivity.