Back to home page

MITgcm

 
 

    


File indexing completed on 2018-03-02 18:42:28 UTC

view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
0f64a7d6fb Dimi*0001 #include "OBCS_OPTIONS.h"
9b4f2a04e2 Jean*0002 #ifdef ALLOW_SEAICE
                0003 # include "SEAICE_OPTIONS.h"
                0004 #endif
0f64a7d6fb Dimi*0005 
f44c38859d Jean*0006 CBOP
                0007 C     !ROUTINE: OBCS_APPLY_SEAICE
                0008 C     !INTERFACE:
                0009 
0f64a7d6fb Dimi*0010       SUBROUTINE OBCS_APPLY_SEAICE( myThid )
f44c38859d Jean*0011 
                0012 C     !DESCRIPTION:
                0013 C     *==========================================================*
                0014 C     | S/R OBCS_APPLY_SEAICE
                0015 C     *==========================================================*
                0016 
                0017 C     !USES:
0f64a7d6fb Dimi*0018       IMPLICIT NONE
                0019 C     == Global variables ==
                0020 #include "SIZE.h"
                0021 #include "EEPARAMS.h"
                0022 #include "PARAMS.h"
                0023 #include "GRID.h"
9b4f2a04e2 Jean*0024 c#include "OBCS_PARAMS.h"
                0025 #include "OBCS_GRID.h"
                0026 #include "OBCS_SEAICE.h"
0f64a7d6fb Dimi*0027 #ifdef ALLOW_SEAICE
a34cef4f76 Jean*0028 # include "SEAICE_SIZE.h"
0f64a7d6fb Dimi*0029 # include "SEAICE_PARAMS.h"
a34cef4f76 Jean*0030 # include "SEAICE.h"
0f64a7d6fb Dimi*0031 #endif
                0032 
f44c38859d Jean*0033 C     !INPUT/OUTPUT PARAMETERS:
0f64a7d6fb Dimi*0034 C     == Routine Arguments ==
f44c38859d Jean*0035 C    myThid   :: my Thread Id number
0f64a7d6fb Dimi*0036       INTEGER myThid
f44c38859d Jean*0037 CEOP
0f64a7d6fb Dimi*0038 
                0039 #if (defined (ALLOW_OBCS) && defined (ALLOW_SEAICE))
                0040 
f44c38859d Jean*0041 C     !LOCAL VARIABLES:
0f64a7d6fb Dimi*0042 C     == Local variables ==
f44c38859d Jean*0043       INTEGER bi, bj
                0044       INTEGER i, j
                0045       INTEGER Iobc, Jobc
8d129534f3 Jean*0046 #ifdef OBCS_SEAICE_SMOOTH_EDGE
f44c38859d Jean*0047       INTEGER k
330efc3489 Dimi*0048       _RL edge_val
8d129534f3 Jean*0049 #endif
0f64a7d6fb Dimi*0050 
                0051       DO bj=myByLo(myThid),myByHi(myThid)
                0052        DO bi=myBxLo(myThid),myBxHi(myThid)
                0053 
                0054 #ifdef ALLOW_OBCS_NORTH
f44c38859d Jean*0055         IF ( tileHasOBN(bi,bj) ) THEN
                0056 C     Set model variables to OB values on Northern Boundary
a34cef4f76 Jean*0057          DO i=1-OLx,sNx+OLx
f44c38859d Jean*0058           Jobc = OB_Jn(I,bi,bj)
74019f026d Jean*0059           IF ( Jobc.NE.OB_indexNone ) THEN
3c51c78c8c Jean*0060             HEFF (i,Jobc,bi,bj) = OBNh (i,bi,bj)
                0061             AREA (i,Jobc,bi,bj) = OBNa (i,bi,bj)
                0062             HSNOW(i,Jobc,bi,bj) = OBNsn(i,bi,bj)
a98c4b8072 Ian *0063 # ifdef SEAICE_VARIABLE_SALINITY
3c51c78c8c Jean*0064             HSALT(i,Jobc,bi,bj) = OBNsl(i,bi,bj)
0f64a7d6fb Dimi*0065 # endif
330efc3489 Dimi*0066           ENDIF
f44c38859d Jean*0067          ENDDO
                0068         ENDIF
0f64a7d6fb Dimi*0069 #endif /* ALLOW_OBCS_NORTH */
                0070 
                0071 #ifdef ALLOW_OBCS_SOUTH
f44c38859d Jean*0072         IF ( tileHasOBS(bi,bj) ) THEN
                0073 C     Set model variables to OB values on Southern Boundary
a34cef4f76 Jean*0074          DO i=1-OLx,sNx+OLx
f44c38859d Jean*0075           Jobc = OB_Js(I,bi,bj)
74019f026d Jean*0076           IF ( Jobc.NE.OB_indexNone ) THEN
3c51c78c8c Jean*0077             HEFF (i,Jobc,bi,bj) = OBSh (i,bi,bj)
                0078             AREA (i,Jobc,bi,bj) = OBSa (i,bi,bj)
                0079             HSNOW(i,Jobc,bi,bj) = OBSsn(i,bi,bj)
a98c4b8072 Ian *0080 # ifdef SEAICE_VARIABLE_SALINITY
3c51c78c8c Jean*0081             HSALT(i,Jobc,bi,bj) = OBSsl(i,bi,bj)
0f64a7d6fb Dimi*0082 # endif
330efc3489 Dimi*0083           ENDIF
f44c38859d Jean*0084          ENDDO
                0085         ENDIF
0f64a7d6fb Dimi*0086 #endif /* ALLOW_OBCS_SOUTH */
                0087 
                0088 #ifdef ALLOW_OBCS_EAST
f44c38859d Jean*0089         IF ( tileHasOBE(bi,bj) ) THEN
                0090 C     Set model variables to OB values on Eastern Boundary
a34cef4f76 Jean*0091          DO j=1-OLy,sNy+OLy
f44c38859d Jean*0092           Iobc = OB_Ie(J,bi,bj)
74019f026d Jean*0093           IF ( Iobc.NE.OB_indexNone ) THEN
3c51c78c8c Jean*0094             HEFF (Iobc,j,bi,bj) = OBEh (j,bi,bj)
                0095             AREA (Iobc,j,bi,bj) = OBEa (j,bi,bj)
                0096             HSNOW(Iobc,j,bi,bj) = OBEsn(j,bi,bj)
a98c4b8072 Ian *0097 # ifdef SEAICE_VARIABLE_SALINITY
3c51c78c8c Jean*0098             HSALT(Iobc,j,bi,bj) = OBEsl(j,bi,bj)
0f64a7d6fb Dimi*0099 # endif
330efc3489 Dimi*0100           ENDIF
f44c38859d Jean*0101          ENDDO
                0102         ENDIF
0f64a7d6fb Dimi*0103 #endif /* ALLOW_OBCS_EAST */
                0104 
                0105 #ifdef ALLOW_OBCS_WEST
f44c38859d Jean*0106         IF ( tileHasOBW(bi,bj) ) THEN
                0107 C     Set model variables to OB values on Western Boundary
a34cef4f76 Jean*0108          DO j=1-OLy,sNy+OLy
74019f026d Jean*0109           Iobc = OB_Iw(j,bi,bj)
                0110           IF ( Iobc.NE.OB_indexNone ) THEN
3c51c78c8c Jean*0111             HEFF (Iobc,j,bi,bj) = OBWh (j,bi,bj)
                0112             AREA (Iobc,j,bi,bj) = OBWa (j,bi,bj)
                0113             HSNOW(Iobc,j,bi,bj) = OBWsn(j,bi,bj)
a98c4b8072 Ian *0114 # ifdef SEAICE_VARIABLE_SALINITY
3c51c78c8c Jean*0115             HSALT(Iobc,j,bi,bj) = OBWsl(j,bi,bj)
0f64a7d6fb Dimi*0116 # endif
f44c38859d Jean*0117           ENDIF
                0118          ENDDO
                0119         ENDIF
                0120 #endif /* ALLOW_OBCS_WEST */
                0121 
                0122 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0123 
                0124 #ifdef OBCS_SEAICE_SMOOTH_EDGE
                0125         k = 1
                0126 
                0127 #ifdef ALLOW_OBCS_NORTH
                0128         IF ( tileHasOBN(bi,bj) ) THEN
                0129 C     Northern Boundary
a34cef4f76 Jean*0130          DO i=1-OLx,sNx+OLx
f44c38859d Jean*0131           Jobc = OB_Jn(I,bi,bj)
74019f026d Jean*0132           IF ( Jobc.NE.OB_indexNone ) THEN
f44c38859d Jean*0133            IF ( _maskS(i,Jobc-1,k,bi,bj) .NE. 0. ) THEN
                0134             IF ( SEAICEadvHeff .AND. OBNhfile .NE. ' ' ) THEN
                0135              edge_val = 0.5 _d 0 *
                0136      &           (HEFF(i,Jobc-1,bi,bj)+HEFF(i,Jobc-2,bi,bj))
                0137              HEFF(i,Jobc-1,bi,bj) = edge_val
                0138              HEFF(i,Jobc-2,bi,bj) = edge_val
                0139             ENDIF
                0140             IF ( SEAICEadvArea .AND. OBNafile .NE. ' ' ) THEN
                0141              edge_val = 0.5 _d 0 *
                0142      &           (AREA(i,Jobc-1,bi,bj)+AREA(i,Jobc-2,bi,bj))
                0143              AREA(i,Jobc-1,bi,bj) = edge_val
                0144              AREA(i,Jobc-2,bi,bj) = edge_val
                0145             ENDIF
                0146             IF ( SEAICEadvSNOW .AND. OBNsnfile .NE. ' ' ) THEN
                0147              edge_val = 0.5 _d 0 *
                0148      &           (HSNOW(i,Jobc-1,bi,bj)+HSNOW(i,Jobc-2,bi,bj))
                0149              HSNOW(i,Jobc-1,bi,bj) = edge_val
                0150              HSNOW(i,Jobc-2,bi,bj) = edge_val
                0151             ENDIF
a98c4b8072 Ian *0152 #  ifdef SEAICE_VARIABLE_SALINITY
f44c38859d Jean*0153             IF ( SEAICEadvSALT .AND. OBNslfile .NE. ' ' ) THEN
                0154              edge_val = 0.5 _d 0 *
                0155      &           (HSALT(i,Jobc-1,bi,bj)+HSALT(i,Jobc-2,bi,bj))
                0156              HSALT(i,Jobc-1,bi,bj) = edge_val
                0157              HSALT(i,Jobc-2,bi,bj) = edge_val
                0158             ENDIF
                0159 #  endif
330efc3489 Dimi*0160            ENDIF
f44c38859d Jean*0161           ENDIF
                0162          ENDDO
                0163         ENDIF
                0164 #endif /* ALLOW_OBCS_NORTH */
                0165 
                0166 #ifdef ALLOW_OBCS_SOUTH
                0167         IF ( tileHasOBS(bi,bj) ) THEN
                0168 C     Southern Boundary
a34cef4f76 Jean*0169          DO i=1-OLx,sNx+OLx
f44c38859d Jean*0170           Jobc = OB_Js(I,bi,bj)
74019f026d Jean*0171           IF ( Jobc.NE.OB_indexNone ) THEN
f44c38859d Jean*0172            IF ( _maskS(i,Jobc+2,k,bi,bj) .NE. 0. ) THEN
                0173             IF ( SEAICEadvHeff .AND. OBNhfile .NE. ' ' ) THEN
                0174              edge_val = 0.5 _d 0 *
                0175      &           (HEFF(i,Jobc+1,bi,bj)+HEFF(i,Jobc+2,bi,bj))
                0176              HEFF(i,Jobc+1,bi,bj) = edge_val
                0177              HEFF(i,Jobc+2,bi,bj) = edge_val
                0178             ENDIF
                0179             IF ( SEAICEadvArea .AND. OBNafile .NE. ' ' ) THEN
                0180              edge_val = 0.5 _d 0 *
                0181      &           (AREA(i,Jobc+1,bi,bj)+AREA(i,Jobc+2,bi,bj))
                0182              AREA(i,Jobc+1,bi,bj) = edge_val
                0183              AREA(i,Jobc+2,bi,bj) = edge_val
                0184             ENDIF
                0185             IF ( SEAICEadvSNOW .AND. OBNsnfile .NE. ' ' ) THEN
                0186              edge_val = 0.5 _d 0 *
                0187      &           (HSNOW(i,Jobc+1,bi,bj)+HSNOW(i,Jobc+2,bi,bj))
                0188              HSNOW(i,Jobc+1,bi,bj) = edge_val
                0189              HSNOW(i,Jobc+2,bi,bj) = edge_val
                0190             ENDIF
a98c4b8072 Ian *0191 #  ifdef SEAICE_VARIABLE_SALINITY
f44c38859d Jean*0192             IF ( SEAICEadvSALT .AND. OBNslfile .NE. ' ' ) THEN
                0193              edge_val = 0.5 _d 0 *
                0194      &           (HSALT(i,Jobc+1,bi,bj)+HSALT(i,Jobc+2,bi,bj))
                0195              HSALT(i,Jobc+1,bi,bj) = edge_val
                0196              HSALT(i,Jobc+2,bi,bj) = edge_val
                0197             ENDIF
                0198 #  endif
330efc3489 Dimi*0199            ENDIF
f44c38859d Jean*0200           ENDIF
                0201          ENDDO
                0202         ENDIF
                0203 #endif /* ALLOW_OBCS_SOUTH */
                0204 
                0205 #ifdef ALLOW_OBCS_EAST
                0206         IF ( tileHasOBE(bi,bj) ) THEN
                0207 C     Eastern Boundary
a34cef4f76 Jean*0208          DO j=1-OLy,sNy+OLy
f44c38859d Jean*0209           Iobc = OB_Ie(J,bi,bj)
74019f026d Jean*0210           IF ( Iobc.NE.OB_indexNone ) THEN
f44c38859d Jean*0211            IF ( _maskW(Iobc-1,j,k,bi,bj) .NE. 0. ) THEN
                0212             IF ( SEAICEadvHeff .AND. OBNhfile .NE. ' ' ) THEN
                0213              edge_val = 0.5 _d 0 *
                0214      &           (HEFF(Iobc-1,j,bi,bj)+HEFF(Iobc-2,j,bi,bj))
                0215              HEFF(Iobc-1,j,bi,bj) = edge_val
                0216              HEFF(Iobc-2,j,bi,bj) = edge_val
                0217             ENDIF
                0218             IF ( SEAICEadvArea .AND. OBNafile .NE. ' ' ) THEN
                0219              edge_val = 0.5 _d 0 *
                0220      &           (AREA(Iobc-1,j,bi,bj)+AREA(Iobc-2,j,bi,bj))
                0221              AREA(Iobc-1,j,bi,bj) = edge_val
                0222              AREA(Iobc-2,j,bi,bj) = edge_val
                0223             ENDIF
                0224             IF ( SEAICEadvSNOW .AND. OBNsnfile .NE. ' ' ) THEN
                0225              edge_val = 0.5 _d 0 *
                0226      &           (HSNOW(Iobc-1,j,bi,bj)+HSNOW(Iobc-2,j,bi,bj))
                0227              HSNOW(Iobc-1,j,bi,bj) = edge_val
                0228              HSNOW(Iobc-2,j,bi,bj) = edge_val
                0229             ENDIF
a98c4b8072 Ian *0230 #  ifdef SEAICE_VARIABLE_SALINITY
f44c38859d Jean*0231             IF ( SEAICEadvSALT .AND. OBNslfile .NE. ' ' ) THEN
                0232              edge_val = 0.5 _d 0 *
                0233      &           (HSALT(Iobc-1,j,bi,bj)+HSALT(Iobc-2,j,bi,bj))
                0234              HSALT(Iobc-1,j,bi,bj) = edge_val
                0235              HSALT(Iobc-2,j,bi,bj) = edge_val
                0236             ENDIF
                0237 #  endif
330efc3489 Dimi*0238            ENDIF
f44c38859d Jean*0239           ENDIF
                0240          ENDDO
                0241         ENDIF
                0242 #endif /* ALLOW_OBCS_EAST */
                0243 
                0244 #ifdef ALLOW_OBCS_WEST
                0245         IF ( tileHasOBW(bi,bj) ) THEN
                0246 C     Western Boundary
a34cef4f76 Jean*0247          DO j=1-OLy,sNy+OLy
74019f026d Jean*0248           Iobc = OB_Iw(j,bi,bj)
                0249           IF ( Iobc.NE.OB_indexNone ) THEN
f44c38859d Jean*0250            IF ( _maskW(Iobc+2,j,k,bi,bj) .NE. 0. ) THEN
                0251             IF ( SEAICEadvHeff .AND. OBNhfile .NE. ' ' ) THEN
                0252              edge_val = 0.5 _d 0 *
                0253      &           (HEFF(Iobc+1,j,bi,bj)+HEFF(Iobc+2,j,bi,bj))
                0254              HEFF(Iobc+1,j,bi,bj) = edge_val
                0255              HEFF(Iobc+2,j,bi,bj) = edge_val
                0256             ENDIF
                0257             IF ( SEAICEadvArea .AND. OBNafile .NE. ' ' ) THEN
                0258              edge_val = 0.5 _d 0 *
                0259      &           (AREA(Iobc+1,j,bi,bj)+AREA(Iobc+2,j,bi,bj))
                0260              AREA(Iobc+1,j,bi,bj) = edge_val
                0261              AREA(Iobc+2,j,bi,bj) = edge_val
                0262             ENDIF
                0263             IF ( SEAICEadvSNOW .AND. OBNsnfile .NE. ' ' ) THEN
                0264              edge_val = 0.5 _d 0 *
                0265      &           (HSNOW(Iobc+1,j,bi,bj)+HSNOW(Iobc+2,j,bi,bj))
                0266              HSNOW(Iobc+1,j,bi,bj) = edge_val
                0267              HSNOW(Iobc+2,j,bi,bj) = edge_val
                0268             ENDIF
a98c4b8072 Ian *0269 #  ifdef SEAICE_VARIABLE_SALINITY
f44c38859d Jean*0270             IF ( SEAICEadvSALT .AND. OBNslfile .NE. ' ' ) THEN
                0271              edge_val = 0.5 _d 0 *
                0272      &           (HSALT(Iobc+1,j,bi,bj)+HSALT(Iobc+2,j,bi,bj))
                0273              HSALT(Iobc+1,j,bi,bj) = edge_val
                0274              HSALT(Iobc+2,j,bi,bj) = edge_val
                0275             ENDIF
330efc3489 Dimi*0276 #  endif
f44c38859d Jean*0277            ENDIF
330efc3489 Dimi*0278           ENDIF
f44c38859d Jean*0279          ENDDO
                0280         ENDIF
0f64a7d6fb Dimi*0281 #endif /* ALLOW_OBCS_WEST */
                0282 
f44c38859d Jean*0283 #endif /* OBCS_SEAICE_SMOOTH_EDGE */
                0284 
0f64a7d6fb Dimi*0285        ENDDO
                0286       ENDDO
                0287 
c7c4b57180 Dimi*0288 #ifdef ALLOW_OBCS_SEAICE_SPONGE
                0289       IF ( useSeaiceSponge ) THEN
                0290        CALL OBCS_SEAICE_SPONGE_A( myThid )
                0291        CALL OBCS_SEAICE_SPONGE_H( myThid )
                0292       ENDIF
                0293 #endif /* ALLOW_OBCS_SEAICE_SPONGE */
                0294 
0f64a7d6fb Dimi*0295 #endif /* defined (ALLOW_OBCS) && defined (ALLOW_SEAICE) */
                0296 
                0297       RETURN
                0298       END