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
0007
0008
0009
0f64a7d6fb Dimi*0010 SUBROUTINE OBCS_APPLY_SEAICE( myThid )
f44c38859d Jean*0011
0012
0013
0014
0015
0016
0017
0f64a7d6fb Dimi*0018 IMPLICIT NONE
0019
0020 #include "SIZE.h"
0021 #include "EEPARAMS.h"
0022 #include "PARAMS.h"
0023 #include "GRID.h"
9b4f2a04e2 Jean*0024
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
0f64a7d6fb Dimi*0034
f44c38859d Jean*0035
0f64a7d6fb Dimi*0036 INTEGER myThid
f44c38859d Jean*0037
0f64a7d6fb Dimi*0038
0039 #if (defined (ALLOW_OBCS) && defined (ALLOW_SEAICE))
0040
f44c38859d Jean*0041
0f64a7d6fb Dimi*0042
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
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
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
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
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
0123
0124 #ifdef OBCS_SEAICE_SMOOTH_EDGE
0125 k = 1
0126
0127 #ifdef ALLOW_OBCS_NORTH
0128 IF ( tileHasOBN(bi,bj) ) THEN
0129
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
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
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
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