[MITgcm-devel] masks in obcs_apply_ts.F and pkg/seaice
Dimitris Menemenlis
menemenlis at sbcglobal.net
Mon Jul 9 08:08:04 EDT 2007
Martin, thanks for getting back.
> I am not quite sure what exactly "causes havoc", but this is the way obcs is implemented:
What causes havoc is the following. In obcs_apply_ts.F, the mask used for T/S
"obc_mask" is defined not as "maskC" as is assumed by the rest of the code but
it instead uses one of the C-grid velocity points. For example, for Western
boundary it is "obc_mask=maskW(I_obc+1,J,K,bi,bj)". If there is an island just
east of the boundary, T and S at the boundary point are masked out, i.e., set to
zero.
Because SEAICE_VARIABLE_FREEZING_POINT uses a linear approximation for freezing
point, which is linearized about freezing point for salty water, as it should,
it means that the freezing point for S=0, is actually greater than 0 deg C. So
what happens for boundary points, which are masked in pkg/obcs but not in
pkg/seaice is that ice keeps growing linearly to very large values, even if this
boundary happens to be in regions where ice is never supposed to grow.
Thanks to An Nguyen for isolating the cause of this weird obcs/seaice interaction.
So a first question is whether having an obc_mask for T/S that is different from
the mask used by rest of code is really necessary? From my reading of obcs
code, using maskC in obcs_apply_ts.F would work just as well, even though some
of the T/S values would be inactive. This would be a first quick fix for the
seaice/obcs problem that An has isolated.
A second question is that "if" a different obc_mask for T/S is used by pkg/obcs,
shouldn't this information also be passed back to maskC so that the rest of the
code knows what is assumed wet and what is dry-land by pkg/obcs? This would
also fix An's seaice/obcs problem.
> To do it cleanly, we need something like
> seaice_obcs_calc
> seaice_obcs_apply_uice
> seaice_obcs_apply_vice
> seaice_obcs_apply_scalar
> and
> thsice_obcs_calc
> thsice_obcs_apply
> plus routines that read the obcs (in anology to obcs_prescribe_read), or calculate them (like orlanksi?)
OK. What I could do as an initial placeholder is to put a landmask for seaice
everywhere where there is open boundary, then later whoever needs proper seaice
obcs can experiment with resetting the HEFF/AREA/HSNOW/TICE/UICE/VICE values.
Question is whether I need to respecify the open boundary locations from scratch
in data.seaice or whether it would be OK to simply obtain them from pkg/obcs?
D.
More information about the MITgcm-devel
mailing list