[MITgcm-devel] obcs and seaice

Martin Losch Martin.Losch at awi.de
Tue Feb 24 04:52:59 EST 2009


Hi Dimitris,

I am moving my questions about obcs and seaice to the devel list.

In both obcs_apply_uvice and obsc_apply_seaice seaice open boundary  
conditions are only computed and applied when the corresponding input  
fields are available. That makes little sense to me, but maybe you can  
give me an explanation. Ad hoc (and this is how it is done in the  
other parts of obcs), I find this procedure useful:
1. compute some default values for the open boundaries
2. read open boundary values from a file, if available, thereby  
overwriting the default values
3. if necessary, modify the open boundary values after reading them.  
E.g, I am currently experimenting with a OB following Stevens et al  
(1990), that's a standard MOM open boundary condition, where the input  
fields are combined with some sort of simplyfied radition condition.
4. apply the computed/read/modified boundary values

Now I can understand, that one might want OBCS but for some reason not  
for seaice. For this case I found the CPP-Flag DISABLE_SEAICE_OBCS,  
actually there could also be runtime flag for this, just like  
useOrlanskiEast, etc.
What happens in obcs_apply_uvice/seaice (for example at the eastern  
boundary):
If (and only if) there is file OBEuiceFile, boundary conditions for  
uice and vice are applied. Under certain circumstances they are  
computed, overwriting the read parameters. These circumstances are  
governed by numerous CPP-flags:
DISABLE_SEAICE_OBCS
OBCS_SEAICE_COMPUTE_UVICE
OBCS_SEAICE_AVOID_CONVERGENCE
OBCS_SEAICE_SMOOTH_UVICE_PERP
OBCS_SEAICE_SMOOTH_UVICE_PAR
OBCS_SEAICE_SMOOTH_EDGE
While I believe that all of what these flags is useful, it still makes  
the code very difficult to understand and use.

I suggest this:
1. introduce a runtime flag, that decides if obcs for seaice is  
applied at all (maybe for each boundary), default is true
2. I would replace DISABLE_SEAICE_OBCS with a defined  
ALLOW_SEAICE_OBCS (in OBCS_OPTIONS.h or in SEAICE_OPTIONS.h?, I think  
the former)
3. in obcs_apply_uvice/seaice, if not earlier in obcs_calc, compute  
boundary values, possibly only if there is no corresponding file, as  
default behavior: ice can leave the domain, but not enter (i.e.  
grad(UICE)=0 and HEFF etc=0 if UICE is directed into domain.
4. apply all this smoothing, etc regardless of boundary value files

What do you think? What should be done about the current behavior/want  
to keep the results?

Martin




More information about the MITgcm-devel mailing list