File indexing completed on 2021-06-23 05:11:41 UTC
view on githubraw file Latest commit eaee6fe0 on 2021-06-18 20:43:21 UTC
87ea84cac6 Jean*0001 #include "THSICE_OPTIONS.h"
0002
0003
0004
0005
3a77421753 Jean*0006 SUBROUTINE THSICE_SLAB_OCEAN(
0007 I aim_sWght0, aim_sWght1,
2d218141ac Jean*0008 O dTsurf,
3a77421753 Jean*0009 I bi, bj, myTime, myIter, myThid )
87ea84cac6 Jean*0010
0011
0012
3a77421753 Jean*0013
87ea84cac6 Jean*0014
0015
0016
0017
0018
0019
0020
0021 IMPLICIT NONE
0022
0023
0024
0025 #include "SIZE.h"
0026 #include "EEPARAMS.h"
0027 #include "PARAMS.h"
0028 #include "FFIELDS.h"
0029
0030
0031 #include "THSICE_PARAMS.h"
0032 #include "THSICE_VARS.h"
41e6ab0e43 Jean*0033 #include "THSICE_TAVE.h"
87ea84cac6 Jean*0034
0035
0036 #ifdef ALLOW_AIM
0037 #include "AIM_FFIELDS.h"
0038 #endif
0039
0040
0041
3a77421753 Jean*0042
0043
0044
0045
0046
0047
0048
0049 _RL aim_sWght0, aim_sWght1
0050 _RL dTsurf(sNx,sNy)
0051 _RL myTime
87ea84cac6 Jean*0052 INTEGER bi,bj
3a77421753 Jean*0053 INTEGER myIter, myThid
87ea84cac6 Jean*0054
0055
0056 #ifdef ALLOW_THSICE
0057
0058
0059
2cf110c259 Jean*0060 _RL dtFac, fwFac, heatFac
0061 #ifdef ALLOW_AIM
5e328a6c4a Davi*0062 _RL oceTfreez, locTemp, locQflux, dtFacR
2cf110c259 Jean*0063 #endif
87ea84cac6 Jean*0064 INTEGER i,j
0065
c8458785ea Patr*0066
0067
0068 IF ( stepFwd_oceMxL ) THEN
87ea84cac6 Jean*0069
0070
0071 dtFac = ocean_deltaT/rhosw
6206cdb986 Jean*0072 fwFac = ocean_deltaT*sMxL_default/rhosw
87ea84cac6 Jean*0073 heatFac = ocean_deltaT/(cpwater*rhosw)
0074 DO j=1,sNy
0075 DO i=1,sNx
0076 IF ( hOceMxL(i,j,bi,bj).NE.0. _d 0 ) THEN
2d218141ac Jean*0077 dTsurf(i,j) = tOceMxL(i,j,bi,bj)
87ea84cac6 Jean*0078 tOceMxL(i,j,bi,bj) = tOceMxL(i,j,bi,bj)
0079 & - heatFac*Qnet(i,j,bi,bj) / hOceMxL(i,j,bi,bj)
0080 sOceMxL(i,j,bi,bj) = sOceMxL(i,j,bi,bj)
0081 & + (fwFac*EmPmR(i,j,bi,bj) - dtFac*saltFlux(i,j,bi,bj))
0082 & / hOceMxL(i,j,bi,bj)
0083 ENDIF
0084 ENDDO
0085 ENDDO
0086
0087 #ifdef ALLOW_AIM
cb1db3a022 Davi*0088 IF ( tauRelax_MxL_salt .GT. 0. _d 0 ) THEN
0089
0090 dtFac = ocean_deltaT/tauRelax_MxL_salt
0091 dtFacR = 1. _d 0 /(1. _d 0 + dtFac)
0092 DO j=1,sNy
0093 DO i=1,sNx
0094 IF ( hOceMxL(i,j,bi,bj).NE.0. _d 0 ) THEN
0095 sOceMxL(i,j,bi,bj) =
0096 & (sOceMxL(i,j,bi,bj) + dtFac*sMxL_default)*dtFacR
0097 ENDIF
0098 ENDDO
0099 ENDDO
0100 ENDIF
3a77421753 Jean*0101 IF ( tauRelax_MxL .GT. 0. _d 0 ) THEN
7c5790770d Davi*0102
3a77421753 Jean*0103 dtFac = ocean_deltaT/tauRelax_MxL
0104 dtFacR = 1. _d 0 /(1. _d 0 + dtFac)
0105 oceTfreez = - 1.9 _d 0
0106 DO j=1,sNy
0107 DO i=1,sNx
0108 IF ( hOceMxL(i,j,bi,bj).NE.0. _d 0 ) THEN
0109 oceTfreez = -mu_Tf*sOceMxL(i,j,bi,bj)
0110 locTemp = ( aim_sWght0*aim_sst0(i,j,bi,bj)
0111 & + aim_sWght1*aim_sst1(i,j,bi,bj)
0112 & ) - celsius2K
0113 locTemp = MAX( locTemp , oceTfreez )
0114 tOceMxL(i,j,bi,bj) =
87ea84cac6 Jean*0115 & (tOceMxL(i,j,bi,bj) + dtFac*locTemp)*dtFacR
3a77421753 Jean*0116 ENDIF
0117 ENDDO
87ea84cac6 Jean*0118 ENDDO
3a77421753 Jean*0119 ENDIF
5e328a6c4a Davi*0120 DO j=1,sNy
0121 DO i=1,sNx
0122 IF ( hOceMxL(i,j,bi,bj).NE.0. _d 0 ) THEN
0123 locQflux = ( aim_sWght0*aim_qfx0(i,j,bi,bj)
0124 & + aim_sWght1*aim_qfx1(i,j,bi,bj)
0125 & )
0126 tOceMxL(i,j,bi,bj) = tOceMxL(i,j,bi,bj)
0127 & + heatFac*locQflux / hOceMxL(i,j,bi,bj)
0128 ENDIF
0129 ENDDO
0130 ENDDO
87ea84cac6 Jean*0131 #endif /* ALLOW_AIM */
0132
2d218141ac Jean*0133
0134 DO j=1,sNy
0135 DO i=1,sNx
0136 IF ( hOceMxL(i,j,bi,bj).NE.0. _d 0 ) THEN
0137 dTsurf(i,j) = tOceMxL(i,j,bi,bj) - dTsurf(i,j)
0138 ENDIF
0139 ENDDO
0140 ENDDO
0141
41e6ab0e43 Jean*0142 #ifdef ALLOW_TIMEAVE
0143
0144 IF ( thSIce_taveFreq .GT. 0. _d 0 ) THEN
0145 CALL TIMEAVE_CUMULATE( ice_tMxL_Ave, tOceMxL,
0146 & 1, thSIce_deltaT, bi, bj, myThid )
0147 CALL TIMEAVE_CUMULATE( ice_sMxL_Ave, sOceMxL,
0148 & 1, thSIce_deltaT, bi, bj, myThid )
0149 ENDIF
0150 #endif /* ALLOW_TIMEAVE */
0151
c8458785ea Patr*0152
0153 ENDIF
0154
41e6ab0e43 Jean*0155
0156
0157 IF ( thSIceAdvScheme.LE.0 ) THEN
0158 CALL THSICE_AVE(
0159 I bi, bj, myTime, myIter, myThid )
0160 ENDIF
0161
87ea84cac6 Jean*0162 #endif /* ALLOW_THSICE */
0163
0164 RETURN
0165 END