[MITgcm-devel] real-fresh-water-flux with pkg/shelfice
Jean-Michel Campin
jmc at ocean.mit.edu
Sun Jan 25 19:33:05 EST 2015
Hi Martin,
I took a look at this, and I propose to add the part of code in
shelfice_forcing_surf.F (update of EmPmR) and see/change later
if it's consistent or not with shelfice_thermodynamics.F
One thing is that with staggerTimeStep=F, there will be inconsistency
between the fresh-water supply (effect on eta & grid-cell volume if
using Non-Lin Free-Surf) and the diffution effect on salinity
since this later one will be ahead by 1 time-step.
An other thing: I would like to change kTopC so that it's also set to
zero where there is no ice-shelf.
I think this can save some computation within shelfice_thermodynamics.F
(because of several "if kTopC <> 0 then ..."
and this would allow to fix very easily the SHELFICE_U_DRAG & V_DRAG
for the case of thin ice-shelf (all in 1rst level) with something like
IF ( k.EQ.MAX(kTopC(i-1),kTopC(i)) ) THEN ...
Cheers,
Jean-Michel
On Fri, Jan 09, 2015 at 03:02:06PM +0100, Martin Losch wrote:
> Hi Jean-Michel,
>
> I think we talked about this about a year ago, but I never completed my action item to actually implement this.
>
> >From what I found in my multiple personal MITgcm copies, I think we agreed on option 2(b) and your suggestions in 3), because I had partly implemented that already. The extra code in shelfice_forcing_surf.F looks like this:
>
> #ifdef EXACT_CONSERV
> C NB: synchronous time step: PmEpR lags 1 time step behind EmPmR
> C to stay consitent with volume change (=d/dt etaH).
> CML# ifdef ALLOW_AUTODIFF_TAMC
> CMLCADJ STORE PmEpR = comlev1, key = ikey_dynamics, kind = isbyte
> CMLCADJ STORE EmPmR = comlev1, key = ikey_dynamics, kind = isbyte
> CML# endif
> CML IF ( staggerTimeStep ) THEN
> DO j=1-OLy,sNy+OLy
> DO i=1-OLx,sNx+OLx
> PmEpR(i,j,bi,bj) = PmEpR(i,j,bi,bj)
> & - SHELFICEfreshWaterFlux(i,j,bi,bj)
> ENDDO
> ENDDO
> CML ENDIF
> #endif /* EXACT_CONSERV */
> DO j=1-OLy,sNy+OLy
> DO i=1-OLx,sNx+OLx
> EmPmR(i,j,bi,bj) = EmPmR(i,j,bi,bj)
> & + SHELFICEfreshWaterFlux(i,j,bi,bj)
> ENDDO
> ENDDO
>
>
> cFac=1 adds temperature and salinity tendency due to the advection by meltwater. This is very tricky, because the underlying assumption is, that there is a thin boundary (not resolved) at T=tfreeze and S=sFreeze. This boundary layer will not vanish if freshwater is really added to the ocean, so I think that the cFac = 1 is still OK, but I can be convinced otherwise.
>
> rFac is used on one place: computation of shelficeHeatFlux, which is “just” a diagnostic (and used in esoteric cost functions …), so I don’t see this as a crucial thing to understand (again). Currently, I don’t understand why it is used in the way it is.
>
> Martin
>
> On Jan 9, 2015, at 2:11 AM, Jean-Michel Campin <jmc at ocean.mit.edu> wrote:
>
> > Hi Martin and others,
> >
> > Looking at how to make shelfice to work with useRealFreshWaterFlux=T :
> >
> > 1) I think there will be few things to change in solve_for_pressure.F
> > (+ integr_continuity.F, integrate_for_w.F, cg3d.F & pre_/post_cg3d.F)
> > for z* and/or for Non-Hydrostatic,
> > but if we leave these 2 options on the side for now, should work
> > as long as EmPmR has been updated to include ice-shelf melting.
> >
> > 2) Regarding where/when to modify EmPmR (to add melting):
> > a) one option would be fill-up EmPmR (and may be also Qnet)
> > in shelfice_thermodynamics.F and rely on usual way surface forcing
> > is apply to T,S time-stepping.
> > The problem here is that external_forcing_surf.F is not ready yet
> > to deal with ks > 1.
> > b) a simpler alternative (involving less changes) would be to continue
> > to rely on shelfice_forcing_surf.F (called from external_forcing_surf.F)
> > to copy shelficeForcingT/S into surfaceForcingT,S
> > and to add a piece of code there to update/modify EmPmR.
> > This would make a difference if using balanceEmPmR (that would
> > balance EmPmR over ocean surface - excluding shelfice melting -
> > but this might even be better.
> >
> > 3) The other things involve changes in shelfice_thermodynamics.F:
> > I would propose that:
> > a) we keep unchanged the "SHELFICEBoundaryLayer" part together with
> > the 2 S/R within shelfice_forcing.F but
> > b) for the case SHELFICEBoundaryLayer=F, we could just compute the melting
> > rate (shelfIceFreshWaterFlux ?) in shelfice_thermodynamics.F
> > and push shelficeForcingT/S calculation to shelfice_forcing_surf.F
> > I am not sure about the current setting of cFac/rFac according to
> > SHELFICEconserve/useRealFreshWaterFlux, and there might be some simpler
> > (and more consistent with main model options such as useRealFreshWaterFlux
> > & nonlinFreeSurf with temp,salt_EvPrRn settings) ways to change this.
> >
> > I might have missed something there (did not check too carefully);
> > and any comment is appreciated.
> >
> > Cheers,
> > Jean-Michel
> >
> > _______________________________________________
> > MITgcm-devel mailing list
> > MITgcm-devel at mitgcm.org
> > http://mitgcm.org/mailman/listinfo/mitgcm-devel
>
>
> _______________________________________________
> MITgcm-devel mailing list
> MITgcm-devel at mitgcm.org
> http://mitgcm.org/mailman/listinfo/mitgcm-devel
More information about the MITgcm-devel
mailing list