File indexing completed on 2024-08-14 05:11:04 UTC
view on githubraw file Latest commit a340904e on 2024-08-13 12:35:11 UTC
ffe464dc7d Mart*0001 #include "SHELFICE_OPTIONS.h"
ceca9ed7c5 Jean*0002 #ifdef ALLOW_COST
0003 # include "COST_OPTIONS.h"
0004 #endif
0005 #ifdef ALLOW_CTRL
0006 # include "CTRL_OPTIONS.h"
0007 #endif
a340904e5a Ou W*0008 #ifdef ALLOW_MOM_COMMON
0009 # include "MOM_COMMON_OPTIONS.h"
0010 #endif
ffe464dc7d Mart*0011
0012 SUBROUTINE SHELFICE_INIT_FIXED( myThid )
afaeb4fe62 Jean*0013
0014
0015
0016
0017
0018
ffe464dc7d Mart*0019 IMPLICIT NONE
0020
0021
0022 #include "SIZE.h"
0023 #include "EEPARAMS.h"
0024 #include "PARAMS.h"
0025 #include "GRID.h"
0026 #include "SHELFICE.h"
abed653eb5 Mart*0027 #ifdef ALLOW_COST
0028 # include "cost.h"
0029 # include "SHELFICE_COST.h"
0030 #endif /* ALLOW_COST */
ffe464dc7d Mart*0031
0032
4354afafa2 Jean*0033
ffe464dc7d Mart*0034 INTEGER myThid
0035
0036 #ifdef ALLOW_SHELFICE
0037
4354afafa2 Jean*0038
005af54e38 Jean*0039
0040
4354afafa2 Jean*0041 INTEGER i, j, bi, bj
005af54e38 Jean*0042 _RS SHI_minDepth
0043 CHARACTER*(MAX_LEN_MBUF) msgBuf
4c0efb30d8 Mart*0044 #ifdef ALLOW_DIAGNOSTICS
0045 INTEGER diagNum
8e7e785cad Jean*0046 INTEGER diagMate
4c0efb30d8 Mart*0047 CHARACTER*8 diagName
0048 CHARACTER*16 diagCode
0049 CHARACTER*16 diagUnits
0050 CHARACTER*(80) diagTitle
0051 #endif /* ALLOW_DIAGNOSTICS */
6b47d550f4 Mart*0052 #ifdef ALLOW_CTRL
6861e183cf Jean*0053 INTEGER k
abed653eb5 Mart*0054 #endif
ffe464dc7d Mart*0055
afaeb4fe62 Jean*0056 #ifdef ALLOW_MNC
0057
0058 IF ( useMNC .AND. (shelfice_tave_mnc.OR.shelfice_dump_mnc)
0059 & ) THEN
0060 CALL SHELFICE_MNC_INIT( myThid )
0061 ENDIF
0062 #endif /* ALLOW_MNC */
0063
005af54e38 Jean*0064 DO bj = myByLo(myThid), myByHi(myThid)
0065 DO bi = myBxLo(myThid), myBxHi(myThid)
0066 DO j = 1-OLy, sNy+OLy
0067 DO i = 1-OLx, sNx+OLx
0068 shelficeMassInit (i,j,bi,bj) = 0. _d 0
0069 shelficeLoadAnomaly(i,j,bi,bj) = 0. _d 0
0070 shelfIceMassDynTendency(i,j,bi,bj) = 0. _d 0
0071 ENDDO
0072 ENDDO
0073 ENDDO
0074 ENDDO
0075
0076 IF ( SHELFICEloadAnomalyFile .NE. ' ' ) THEN
0077 CALL READ_FLD_XY_RL( SHELFICEloadAnomalyFile, ' ',
0078 & shelficeLoadAnomaly, 0, myThid )
0079 ENDIF
0080 IF ( SHELFICEmassFile.NE.' ' ) THEN
0081 CALL READ_FLD_XY_RL( SHELFICEmassFile, ' ',
0082 & shelficeMassInit, 0, myThid )
0083 ELSE
0084 DO bj = myByLo(myThid), myByHi(myThid)
0085 DO bi = myBxLo(myThid), myBxHi(myThid)
0086 DO j = 1, sNy
0087 DO i = 1, sNx
0088 shelficeMassInit(i,j,bi,bj) =
0089 & shelficeLoadAnomaly(i,j,bi,bj)*recip_gravity
0090 & - rhoConst*Ro_surf(i,j,bi,bj)
0091 ENDDO
0092 ENDDO
0093 ENDDO
0094 ENDDO
0095 ENDIF
0096 _EXCH_XY_RL( shelficeMassInit, myThid )
0097
ffe464dc7d Mart*0098
8f81ce1bc7 Mart*0099
9f5091f233 Jean*0100
0101
0102
ffe464dc7d Mart*0103
0104
005af54e38 Jean*0105
0106
0107
0108
0109
0110 SHI_minDepth = 1. _d -6
0111 SHI_minDepth = rF(1) - drF(1)*SHI_minDepth
ffe464dc7d Mart*0112 DO bj = myByLo(myThid), myByHi(myThid)
0113 DO bi = myBxLo(myThid), myBxHi(myThid)
005af54e38 Jean*0114 IF ( SHELFICEMassStepping ) THEN
0115
0116
0117
0118 DO j = 1-OLy, sNy+OLy
0119 DO i = 1-OLx, sNx+OLx
0120 IF ( kSurfC(i,j,bi,bj).LE.Nr .AND.
0121 & shelficeMassInit(i,j,bi,bj).GT.zeroRL ) THEN
4354afafa2 Jean*0122 kTopC(i,j,bi,bj) = kSurfC(i,j,bi,bj)
005af54e38 Jean*0123 ELSE
4354afafa2 Jean*0124 kTopC(i,j,bi,bj) = 0
005af54e38 Jean*0125 ENDIF
0126 ENDDO
ffe464dc7d Mart*0127 ENDDO
005af54e38 Jean*0128 ELSE
0129
0130
0131
0132 DO j = 1-OLy, sNy+OLy
0133 DO i = 1-OLx, sNx+OLx
0134 IF ( kSurfC(i,j,bi,bj).LE.Nr .AND.
0135 & Ro_surf(i,j,bi,bj).LT.SHI_minDepth ) THEN
0136
0137 kTopC(i,j,bi,bj) = kSurfC(i,j,bi,bj)
0138 ELSE
0139 kTopC(i,j,bi,bj) = 0
0140 ENDIF
0141 ENDDO
0142 ENDDO
0143 ENDIF
ffe464dc7d Mart*0144 ENDDO
0145 ENDDO
6861e183cf Jean*0146
6b47d550f4 Mart*0147 #ifdef ALLOW_CTRL
6861e183cf Jean*0148
0149
0150
0151
0152 DO bj = myByLo(myThid), myByHi(myThid)
0153 DO bi = myBxLo(myThid), myBxHi(myThid)
0154 DO k=1,Nr
0155 DO j=1-OLy,sNy+OLy
0156 DO i=1-OLx,sNx+OLx
0157 maskSHI(i,j,k,bi,bj) = 0. _d 0
0158 ENDDO
0159 ENDDO
0160 ENDDO
0161 DO k=1,Nr
0162 DO j=1-OLy,sNy+OLy
0163 DO i=1-OLx,sNx+OLx
005af54e38 Jean*0164 IF ( kTopC(i,j,bi,bj).GE.1
f8ef4d8fd6 Oliv*0165 & .AND. maskC(i,j,k,bi,bj).NE.zeroRS ) THEN
6861e183cf Jean*0166 maskSHI(i,j,k,bi,bj) = 1. _d 0
0167 maskSHI(i,j,1,bi,bj) = 1. _d 0
0168 ENDIF
0169 ENDDO
0170 ENDDO
0171 ENDDO
0172 ENDDO
0173 ENDDO
6b47d550f4 Mart*0174 #endif /* ALLOW_CTRL */
6861e183cf Jean*0175
005af54e38 Jean*0176 IF ( debugLevel.GE.debLevC ) THEN
0177 WRITE(msgBuf,'(A)')
0178 & 'SHELFICE_INIT_FIXED: checking Ice-Shelf extension & kTopC'
0179 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0180 & SQUEEZE_RIGHT, myThid )
0181 WRITE(msgBuf,'(A,1PE18.10)')
0182 & 'SHELFICE_INIT_FIXED: SHI_minDepth =', SHI_minDepth
0183 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0184 & SQUEEZE_RIGHT, myThid )
4354afafa2 Jean*0185 DO bj = myByLo(myThid), myByHi(myThid)
0186 DO bi = myBxLo(myThid), myBxHi(myThid)
005af54e38 Jean*0187
0188
4354afafa2 Jean*0189 DO j = 1, sNy
0190 DO i = 1, sNx
005af54e38 Jean*0191 IF ( kTopC(i,j,bi,bj).NE.0 .AND.
0192 & ( shelficeMassInit(i,j,bi,bj).LE.zeroRL
0193 & .OR. R_shelfIce(i,j,bi,bj).GE.rF(1) ) ) THEN
0194 WRITE(standardMessageUnit,'(A,2I4,2I3,A,1P3E17.9)')
0195 & ' Ice-Shelf (kTopC>0) in i,j,bi,bj=', i, j, bi, bj,
0196 & ' but R_shelf,Ro_surf,MassIni=', R_shelfIce(i,j,bi,bj),
0197 & Ro_surf(i,j,bi,bj), shelficeMassInit(i,j,bi,bj)
0198 ELSEIF ( kTopC(i,j,bi,bj).EQ.0 .AND.
0199 & ( shelficeMassInit(i,j,bi,bj).GT.zeroRL
0200 & .OR. R_shelfIce(i,j,bi,bj).LT.rF(1) ) ) THEN
0201 WRITE(standardMessageUnit,'(A,2I4,2I3,A,1P3E17.9)')
0202 & ' no Ice-Shelf (kTopC=0) i,j,bi,bj=', i, j, bi, bj,
0203 & ' but R_shelf,Ro_surf,MassIni=', R_shelfIce(i,j,bi,bj),
0204 & Ro_surf(i,j,bi,bj), shelficeMassInit(i,j,bi,bj)
0205 ENDIF
4354afafa2 Jean*0206 ENDDO
0207 ENDDO
0208 ENDDO
0209 ENDDO
005af54e38 Jean*0210 WRITE(msgBuf,'(A)')
0211 & 'SHELFICE_INIT_FIXED: checking Ice-Shelf extension: done'
0212 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0213 & SQUEEZE_RIGHT, myThid )
4354afafa2 Jean*0214 ENDIF
0215
0216
0236599f51 Jean*0217
4354afafa2 Jean*0218 DO bj = myByLo(myThid), myByHi(myThid)
0219 DO bi = myBxLo(myThid), myBxHi(myThid)
0220 DO j = 1-OLy, sNy+OLy
0221 DO i = 1-OLx, sNx+OLx
005af54e38 Jean*0222 IF ( kTopC(i,j,bi,bj).EQ.0 ) THEN
0223 R_shelfIce (i,j,bi,bj) = rF(1)
0224 shelficeMassInit (i,j,bi,bj) = 0. _d 0
0225 shelficeLoadAnomaly(i,j,bi,bj) = 0. _d 0
0226 ELSE
0227 shelficeLoadAnomaly(i,j,bi,bj) = gravity
3d2f509a67 Dani*0228 & *(shelficeMassInit(i,j,bi,bj)+rhoConst*Ro_surf(i,j,bi,bj))
005af54e38 Jean*0229 ENDIF
4354afafa2 Jean*0230 ENDDO
0231 ENDDO
0232 ENDDO
0233 ENDDO
0234
0235
0236
005af54e38 Jean*0237 CALL WRITE_FLD_XY_RL ( 'shelficemassinit', ' ',
0238 & shelficeMassInit, 0, myThid )
4354afafa2 Jean*0239 IF ( debugLevel.GE.debLevC ) THEN
4d294a5719 Jean*0240 CALL WRITE_FLD_XY_RL( 'SHICE_pLoadAnom', ' ',
4354afafa2 Jean*0241 I shelficeLoadAnomaly, -1, myThid )
0242 ENDIF
0243
a0178c5a01 Jean*0244 IF ( SHELFICEMassStepping .AND.
0245 & SHELFICEMassDynTendFile .NE. ' ' ) THEN
0246 CALL READ_FLD_XY_RS( SHELFICEMassDynTendFile, ' ',
0247 & shelfIceMassDynTendency, 0, myThid )
3d2f509a67 Dani*0248 ENDIF
0249
4c0efb30d8 Mart*0250 #ifdef ALLOW_DIAGNOSTICS
0251 IF ( useDiagnostics ) THEN
0252 diagName = 'SHIfwFlx'
e84c33192a Mart*0253 diagTitle = 'Ice shelf fresh water flux (positive upward)'
2bf81d7d9d Mart*0254 diagUnits = 'kg/m^2/s '
8e7e785cad Jean*0255 diagCode = 'SM L1 '
0256 CALL DIAGNOSTICS_ADDTOLIST( diagNum,
0257 I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
4c0efb30d8 Mart*0258
0259 diagName = 'SHIhtFlx'
e84c33192a Mart*0260 diagTitle = 'Ice shelf heat flux (positive upward)'
4c0efb30d8 Mart*0261 diagUnits = 'W/m^2 '
8e7e785cad Jean*0262 diagCode = 'SM L1 '
0263 CALL DIAGNOSTICS_ADDTOLIST( diagNum,
0264 I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
4c0efb30d8 Mart*0265
1fa1235c63 Jean*0266 diagName = 'SHI_TauX'
0267 diagTitle =
0268 & 'Ice shelf bottom stress, zonal comp., >0 increases uVel'
0269 diagUnits = 'N/m^2 '
0270 diagCode = 'UU L1 '
8e7e785cad Jean*0271 diagMate = diagNum + 2
0272 CALL DIAGNOSTICS_ADDTOLIST( diagNum,
0273 I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
4c0efb30d8 Mart*0274
1fa1235c63 Jean*0275 diagName = 'SHI_TauY'
0276 diagTitle =
0277 & 'Ice shelf bottom stress, merid. comp., >0 increases vVel'
0278 diagUnits = 'N/m^2 '
0279 diagCode = 'VV L1 '
8e7e785cad Jean*0280 diagMate = diagNum
0281 CALL DIAGNOSTICS_ADDTOLIST( diagNum,
0282 I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
a86b6152f4 Dimi*0283
0284 diagName = 'SHIForcT'
0285 diagTitle = 'Ice shelf forcing for theta, >0 increases theta'
0286 diagUnits = 'W/m^2 '
8e7e785cad Jean*0287 diagCode = 'SM L1 '
0288 CALL DIAGNOSTICS_ADDTOLIST( diagNum,
0289 I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
a86b6152f4 Dimi*0290
0291 diagName = 'SHIForcS'
0292 diagTitle = 'Ice shelf forcing for salt, >0 increases salt'
0293 diagUnits = 'g/m^2/s '
8e7e785cad Jean*0294 diagCode = 'SM L1 '
0295 CALL DIAGNOSTICS_ADDTOLIST( diagNum,
0296 I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
84ccdf230a Mart*0297
0298 diagName = 'SHIgammT'
0299 diagTitle = 'Ice shelf exchange coefficient for theta'
0300 diagUnits = 'm/s '
0301 diagCode = 'SM L1 '
0302 CALL DIAGNOSTICS_ADDTOLIST( diagNum,
0303 I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
0304
0305 diagName = 'SHIgammS'
0306 diagTitle = 'Ice shelf exchange coefficient for salt'
0307 diagUnits = 'm/s '
0308 diagCode = 'SM L1 '
0309 CALL DIAGNOSTICS_ADDTOLIST( diagNum,
0310 I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
3d2f509a67 Dani*0311
7b8b86ab99 Timo*0312 diagName = 'SHI_mass'
0313 diagTitle = 'dynamic ice shelf mass for surface load anomaly'
0314 diagUnits = 'kg/m^2 '
0315 diagCode = 'SM L1 '
0316 CALL DIAGNOSTICS_ADDTOLIST( diagNum,
0317 I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
0318
a340904e5a Ou W*0319 #if ( defined ALLOW_MOM_COMMON && defined ALLOW_MOM_TEND_EXTRA_DIAGS )
0320
0321 diagName = 'UShIDrag'
0322 diagTitle = 'U momentum tendency from ice shelf Drag'
0323 diagCode = 'UUR MR '
0324 diagMate = diagNum + 2
0325 CALL DIAGNOSTICS_ADDTOLIST( diagNum,
0326 I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
0327 diagName = 'VShIDrag'
0328 diagTitle = 'V momentum tendency from ice shelf Drag'
0329 diagCode = 'VVR MR '
0330 diagMate = diagNum
0331 CALL DIAGNOSTICS_ADDTOLIST( diagNum,
0332 I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
0333 #endif
0334
7b8b86ab99 Timo*0335 #ifdef SHI_ALLOW_GAMMAFRICT
5744811f23 Mart*0336 diagName = 'SHIuStar'
0337 diagTitle = 'Friction velocity at bottom of ice shelf'
0338 diagUnits = 'm/s '
0339 diagCode = 'SM L1 '
0340 CALL DIAGNOSTICS_ADDTOLIST( diagNum,
0341 I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
0342
7b8b86ab99 Timo*0343 diagName = 'SHICDrag'
0344 diagTitle = 'Shelfice drag coefficient for u* parameterization'
0345 diagUnits = '1 '
3d2f509a67 Dani*0346 diagCode = 'SM L1 '
0347 CALL DIAGNOSTICS_ADDTOLIST( diagNum,
7b8b86ab99 Timo*0348 I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
0349 #endif
9952f046d7 dngo*0350
0351 #ifdef ALLOW_SHELFICE_REMESHING
0352 diagName = 'SHIRshel'
0353 diagTitle = 'depth of shelfice'
0354 diagUnits = 'm '
0355 diagCode = 'SM L1 '
0356 CALL DIAGNOSTICS_ADDTOLIST( diagNum,
0357 I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
0358 #endif
0359
7b8b86ab99 Timo*0360 # ifdef ALLOW_AUTODIFF
0361 # ifndef SHI_ALLOW_GAMMAFRICT
0362 diagName = 'ADJshict'
0363 diagTitle = 'dJ/dgammaT: Sens. to shelfice heat transfer coeff'
0364 diagUnits = 'dJ/(m/s) '
0365 diagCode = 'SM A M1 '
0366 CALL DIAGNOSTICS_ADDTOLIST( diagNum,
0367 I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
0368
0369 diagName = 'ADJshics'
0370 diagTitle = 'dJ/dgammaS: Sens. to shelfice salt transfer coeff'
0371 diagUnits = 'dJ/(m/s) '
0372 diagCode = 'SM A M1 '
0373 CALL DIAGNOSTICS_ADDTOLIST( diagNum,
0374 I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
0375
0376 # else
0377 diagName = 'ADJshicd'
0378 diagTitle = 'dJ/dcDrag: Sensitivity to shelfice u* drag coeff'
0379 diagUnits = 'dJ/1 '
0380 diagCode = 'SM A M1 '
0381 CALL DIAGNOSTICS_ADDTOLIST( diagNum,
0382 I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
0383 # endif
0384 # endif
4c0efb30d8 Mart*0385 ENDIF
0386 #endif /* ALLOW_DIAGNOSTICS */
ffe464dc7d Mart*0387 #endif /* ALLOW_SHELFICE */
0388
a93eea6699 Jean*0389 RETURN
0390 END