C $Header: /u/gcmpack/MITgcm/pkg/obcs/obcs_apply_seaice.F,v 1.5 2010/01/31 20:25:49 jmc Exp $
C $Name: $
#include "OBCS_OPTIONS.h"
SUBROUTINE OBCS_APPLY_SEAICE( myThid )
C /==========================================================\
C | S/R OBCS_APPLY_SEAICE |
C \==========================================================/
IMPLICIT NONE
C == Global variables ==
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "GRID.h"
#include "OBCS.h"
#ifdef ALLOW_SEAICE
# include "SEAICE_OPTIONS.h"
# include "SEAICE.h"
# include "SEAICE_PARAMS.h"
#endif
C == Routine Arguments ==
INTEGER myThid
#if (defined (ALLOW_OBCS) defined (ALLOW_SEAICE))
C == Local variables ==
INTEGER I, J, bi, bj, I_obc, J_obc
#ifdef OBCS_SEAICE_SMOOTH_EDGE
_RL edge_val
#endif
DO bj=myByLo(myThid),myByHi(myThid)
DO bi=myBxLo(myThid),myBxHi(myThid)
C Set model variables to OB values on Northern Boundary
#ifdef ALLOW_OBCS_NORTH
DO I=1-Olx,sNx+Olx
J_obc = OB_Jn(I,bi,bj)
IF ( J_obc.NE.0 ) THEN
DO J = J_obc, J_obc+Oly
IF ( SEAICEadvHeff .AND. OBNhfile .NE. ' ' )
& HEFF(I,J,bi,bj) = OBNh (I,bi,bj)
IF ( SEAICEadvArea .AND. OBNafile .NE. ' ' )
& AREA(I,J,bi,bj) = OBNa (I,bi,bj)
IF ( SEAICEadvSNOW .AND. OBNsnfile .NE. ' ' )
& HSNOW(I,J,bi,bj) = OBNsn(I,bi,bj)
# ifdef SEAICE_SALINITY
IF ( SEAICEadvSALT .AND. OBNslfile .NE. ' ' )
& HSALT(I,J,bi,bj) = OBNsl(I,bi,bj)
# endif
ENDDO
# ifdef OBCS_SEAICE_SMOOTH_EDGE
IF ( _maskS(I,J_obc-1,1,bi,bj) .NE. 0. ) THEN
IF ( SEAICEadvHeff .AND. OBNhfile .NE. ' ' ) THEN
edge_val = 0.5 _d 0 *
& (HEFF(I,J_obc-1,bi,bj)+HEFF(I,J_obc-2,bi,bj))
HEFF(I,J_obc-1,bi,bj) = edge_val
HEFF(I,J_obc-2,bi,bj) = edge_val
ENDIF
IF ( SEAICEadvArea .AND. OBNafile .NE. ' ' ) THEN
edge_val = 0.5 _d 0 *
& (AREA(I,J_obc-1,bi,bj)+AREA(I,J_obc-2,bi,bj))
AREA(I,J_obc-1,bi,bj) = edge_val
AREA(I,J_obc-2,bi,bj) = edge_val
ENDIF
IF ( SEAICEadvSNOW .AND. OBNsnfile .NE. ' ' ) THEN
edge_val = 0.5 _d 0 *
& (HSNOW(I,J_obc-1,bi,bj)+HSNOW(I,J_obc-2,bi,bj))
HSNOW(I,J_obc-1,bi,bj) = edge_val
HSNOW(I,J_obc-2,bi,bj) = edge_val
ENDIF
# ifdef SEAICE_SALINITY
IF ( SEAICEadvSALT .AND. OBNslfile .NE. ' ' ) THEN
edge_val = 0.5 _d 0 *
& (HSALT(I,J_obc-1,bi,bj)+HSALT(I,J_obc-2,bi,bj))
HSALT(I,J_obc-1,bi,bj) = edge_val
HSALT(I,J_obc-2,bi,bj) = edge_val
ENDIF
# endif
ENDIF
# endif /* OBCS_SEAICE_SMOOTH_EDGE */
ENDIF
ENDDO
#endif /* ALLOW_OBCS_NORTH */
C Set model variables to OB values on Southern Boundary
#ifdef ALLOW_OBCS_SOUTH
DO I=1-Olx,sNx+Olx
J_obc = OB_Js(I,bi,bj)
IF ( J_obc.NE.0 ) THEN
DO J = J_obc-Oly, J_obc
IF ( SEAICEadvHeff .AND. OBShfile .NE. ' ' )
& HEFF(I,J,bi,bj) = OBSh (I,bi,bj)
IF ( SEAICEadvArea .AND. OBSafile .NE. ' ' )
& AREA(I,J,bi,bj) = OBSa (I,bi,bj)
IF ( SEAICEadvSNOW .AND. OBSsnfile .NE. ' ' )
& HSNOW(I,J,bi,bj) = OBSsn(I,bi,bj)
# ifdef SEAICE_SALINITY
IF ( SEAICEadvSALT .AND. OBSslfile .NE. ' ' )
& HSALT(I,J,bi,bj) = OBSsl(I,bi,bj)
# endif
ENDDO
# ifdef OBCS_SEAICE_SMOOTH_EDGE
IF ( _maskS(I,J_obc+2,1,bi,bj) .NE. 0. ) THEN
IF ( SEAICEadvHeff .AND. OBNhfile .NE. ' ' ) THEN
edge_val = 0.5 _d 0 *
& (HEFF(I,J_obc+1,bi,bj)+HEFF(I,J_obc+2,bi,bj))
HEFF(I,J_obc+1,bi,bj) = edge_val
HEFF(I,J_obc+2,bi,bj) = edge_val
ENDIF
IF ( SEAICEadvArea .AND. OBNafile .NE. ' ' ) THEN
edge_val = 0.5 _d 0 *
& (AREA(I,J_obc+1,bi,bj)+AREA(I,J_obc+2,bi,bj))
AREA(I,J_obc+1,bi,bj) = edge_val
AREA(I,J_obc+2,bi,bj) = edge_val
ENDIF
IF ( SEAICEadvSNOW .AND. OBNsnfile .NE. ' ' ) THEN
edge_val = 0.5 _d 0 *
& (HSNOW(I,J_obc+1,bi,bj)+HSNOW(I,J_obc+2,bi,bj))
HSNOW(I,J_obc+1,bi,bj) = edge_val
HSNOW(I,J_obc+2,bi,bj) = edge_val
ENDIF
# ifdef SEAICE_SALINITY
IF ( SEAICEadvSALT .AND. OBNslfile .NE. ' ' ) THEN
edge_val = 0.5 _d 0 *
& (HSALT(I,J_obc+1,bi,bj)+HSALT(I,J_obc+2,bi,bj))
HSALT(I,J_obc+1,bi,bj) = edge_val
HSALT(I,J_obc+2,bi,bj) = edge_val
ENDIF
# endif
ENDIF
# endif /* OBCS_SEAICE_SMOOTH_EDGE */
ENDIF
ENDDO
#endif /* ALLOW_OBCS_SOUTH */
C Set model variables to OB values on Eastern Boundary
#ifdef ALLOW_OBCS_EAST
DO J=1-Oly,sNy+Oly
I_obc = OB_Ie(J,bi,bj)
IF (I_obc.NE.0) THEN
DO I = I_obc, I_obc+Olx
IF ( SEAICEadvHeff .AND. OBEhfile .NE. ' ' )
& HEFF(I,J,bi,bj) = OBEh (J,bi,bj)
IF ( SEAICEadvArea .AND. OBEafile .NE. ' ' )
& AREA(I,J,bi,bj) = OBEa (J,bi,bj)
IF ( SEAICEadvSNOW .AND. OBEsnfile .NE. ' ' )
& HSNOW(I,J,bi,bj) = OBEsn(J,bi,bj)
# ifdef SEAICE_SALINITY
IF ( SEAICEadvSALT .AND. OBEslfile .NE. ' ' )
& HSALT(I,J,bi,bj) = OBEsl(J,bi,bj)
# endif
ENDDO
# ifdef OBCS_SEAICE_SMOOTH_EDGE
IF ( _maskW(I_obc-1,J,1,bi,bj) .NE. 0. ) THEN
IF ( SEAICEadvHeff .AND. OBNhfile .NE. ' ' ) THEN
edge_val = 0.5 _d 0 *
& (HEFF(I_obc-1,J,bi,bj)+HEFF(I_obc-2,J,bi,bj))
HEFF(I_obc-1,J,bi,bj) = edge_val
HEFF(I_obc-2,J,bi,bj) = edge_val
ENDIF
IF ( SEAICEadvArea .AND. OBNafile .NE. ' ' ) THEN
edge_val = 0.5 _d 0 *
& (AREA(I_obc-1,J,bi,bj)+AREA(I_obc-2,J,bi,bj))
AREA(I_obc-1,J,bi,bj) = edge_val
AREA(I_obc-2,J,bi,bj) = edge_val
ENDIF
IF ( SEAICEadvSNOW .AND. OBNsnfile .NE. ' ' ) THEN
edge_val = 0.5 _d 0 *
& (HSNOW(I_obc-1,J,bi,bj)+HSNOW(I_obc-2,J,bi,bj))
HSNOW(I_obc-1,J,bi,bj) = edge_val
HSNOW(I_obc-2,J,bi,bj) = edge_val
ENDIF
# ifdef SEAICE_SALINITY
IF ( SEAICEadvSALT .AND. OBNslfile .NE. ' ' ) THEN
edge_val = 0.5 _d 0 *
& (HSALT(I_obc-1,J,bi,bj)+HSALT(I_obc-2,J,bi,bj))
HSALT(I_obc-1,J,bi,bj) = edge_val
HSALT(I_obc-2,J,bi,bj) = edge_val
ENDIF
# endif
ENDIF
# endif /* OBCS_SEAICE_SMOOTH_EDGE */
ENDIF
ENDDO
#endif /* ALLOW_OBCS_EAST */
C Set model variables to OB values on Western Boundary
#ifdef ALLOW_OBCS_WEST
DO J=1-Oly,sNy+Oly
I_obc=OB_Iw(J,bi,bj)
IF (I_obc.NE.0) THEN
DO I = I_obc-Olx, I_obc
IF ( SEAICEadvHeff .AND. OBWhfile .NE. ' ' )
& HEFF(I,J,bi,bj) = OBWh (J,bi,bj)
IF ( SEAICEadvArea .AND. OBWafile .NE. ' ' )
& AREA(I,J,bi,bj) = OBWa (J,bi,bj)
IF ( SEAICEadvSNOW .AND. OBWsnfile .NE. ' ' )
& HSNOW(I,J,bi,bj) = OBWsn(J,bi,bj)
# ifdef SEAICE_SALINITY
IF ( SEAICEadvSALT .AND. OBWslfile .NE. ' ' )
& HSALT(I,J,bi,bj) = OBWsl(J,bi,bj)
# endif
ENDDO
# ifdef OBCS_SEAICE_SMOOTH_EDGE
IF ( _maskW(I_obc+2,J,1,bi,bj) .NE. 0. ) THEN
IF ( SEAICEadvHeff .AND. OBNhfile .NE. ' ' ) THEN
edge_val = 0.5 _d 0 *
& (HEFF(I_obc+1,J,bi,bj)+HEFF(I_obc+2,J,bi,bj))
HEFF(I_obc+1,J,bi,bj) = edge_val
HEFF(I_obc+2,J,bi,bj) = edge_val
ENDIF
IF ( SEAICEadvArea .AND. OBNafile .NE. ' ' ) THEN
edge_val = 0.5 _d 0 *
& (AREA(I_obc+1,J,bi,bj)+AREA(I_obc+2,J,bi,bj))
AREA(I_obc+1,J,bi,bj) = edge_val
AREA(I_obc+2,J,bi,bj) = edge_val
ENDIF
IF ( SEAICEadvSNOW .AND. OBNsnfile .NE. ' ' ) THEN
edge_val = 0.5 _d 0 *
& (HSNOW(I_obc+1,J,bi,bj)+HSNOW(I_obc+2,J,bi,bj))
HSNOW(I_obc+1,J,bi,bj) = edge_val
HSNOW(I_obc+2,J,bi,bj) = edge_val
ENDIF
# ifdef SEAICE_SALINITY
IF ( SEAICEadvSALT .AND. OBNslfile .NE. ' ' ) THEN
edge_val = 0.5 _d 0 *
& (HSALT(I_obc+1,J,bi,bj)+HSALT(I_obc+2,J,bi,bj))
HSALT(I_obc+1,J,bi,bj) = edge_val
HSALT(I_obc+2,J,bi,bj) = edge_val
ENDIF
# endif
ENDIF
# endif /* OBCS_SEAICE_SMOOTH_EDGE */
ENDIF
ENDDO
#endif /* ALLOW_OBCS_WEST */
ENDDO
ENDDO
#endif /* defined (ALLOW_OBCS) && defined (ALLOW_SEAICE) */
RETURN
END