File indexing completed on 2025-11-07 06:08:54 UTC
view on githubraw file Latest commit b7411f1a on 2025-11-06 19:05:26 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"
0033
0034
0035 #ifdef ALLOW_AIM
0036 #include "AIM_FFIELDS.h"
0037 #endif
0038
0039
0040
3a77421753 Jean*0041
0042
0043
0044
0045
0046
0047
0048 _RL aim_sWght0, aim_sWght1
0049 _RL dTsurf(sNx,sNy)
0050 _RL myTime
87ea84cac6 Jean*0051 INTEGER bi,bj
3a77421753 Jean*0052 INTEGER myIter, myThid
87ea84cac6 Jean*0053
0054
0055 #ifdef ALLOW_THSICE
0056
0057
0058
2cf110c259 Jean*0059 _RL dtFac, fwFac, heatFac
0060 #ifdef ALLOW_AIM
5e328a6c4a Davi*0061 _RL oceTfreez, locTemp, locQflux, dtFacR
2cf110c259 Jean*0062 #endif
87ea84cac6 Jean*0063 INTEGER i,j
0064
c8458785ea Patr*0065
0066
0067 IF ( stepFwd_oceMxL ) THEN
87ea84cac6 Jean*0068
0069
0070 dtFac = ocean_deltaT/rhosw
6206cdb986 Jean*0071 fwFac = ocean_deltaT*sMxL_default/rhosw
87ea84cac6 Jean*0072 heatFac = ocean_deltaT/(cpwater*rhosw)
0073 DO j=1,sNy
0074 DO i=1,sNx
0075 IF ( hOceMxL(i,j,bi,bj).NE.0. _d 0 ) THEN
2d218141ac Jean*0076 dTsurf(i,j) = tOceMxL(i,j,bi,bj)
87ea84cac6 Jean*0077 tOceMxL(i,j,bi,bj) = tOceMxL(i,j,bi,bj)
0078 & - heatFac*Qnet(i,j,bi,bj) / hOceMxL(i,j,bi,bj)
0079 sOceMxL(i,j,bi,bj) = sOceMxL(i,j,bi,bj)
0080 & + (fwFac*EmPmR(i,j,bi,bj) - dtFac*saltFlux(i,j,bi,bj))
0081 & / hOceMxL(i,j,bi,bj)
0082 ENDIF
0083 ENDDO
0084 ENDDO
0085
0086 #ifdef ALLOW_AIM
cb1db3a022 Davi*0087 IF ( tauRelax_MxL_salt .GT. 0. _d 0 ) THEN
0088
0089 dtFac = ocean_deltaT/tauRelax_MxL_salt
0090 dtFacR = 1. _d 0 /(1. _d 0 + dtFac)
0091 DO j=1,sNy
0092 DO i=1,sNx
0093 IF ( hOceMxL(i,j,bi,bj).NE.0. _d 0 ) THEN
0094 sOceMxL(i,j,bi,bj) =
0095 & (sOceMxL(i,j,bi,bj) + dtFac*sMxL_default)*dtFacR
0096 ENDIF
0097 ENDDO
0098 ENDDO
0099 ENDIF
3a77421753 Jean*0100 IF ( tauRelax_MxL .GT. 0. _d 0 ) THEN
7c5790770d Davi*0101
3a77421753 Jean*0102 dtFac = ocean_deltaT/tauRelax_MxL
0103 dtFacR = 1. _d 0 /(1. _d 0 + dtFac)
0104 oceTfreez = - 1.9 _d 0
0105 DO j=1,sNy
0106 DO i=1,sNx
0107 IF ( hOceMxL(i,j,bi,bj).NE.0. _d 0 ) THEN
0108 oceTfreez = -mu_Tf*sOceMxL(i,j,bi,bj)
0109 locTemp = ( aim_sWght0*aim_sst0(i,j,bi,bj)
0110 & + aim_sWght1*aim_sst1(i,j,bi,bj)
0111 & ) - celsius2K
0112 locTemp = MAX( locTemp , oceTfreez )
0113 tOceMxL(i,j,bi,bj) =
87ea84cac6 Jean*0114 & (tOceMxL(i,j,bi,bj) + dtFac*locTemp)*dtFacR
3a77421753 Jean*0115 ENDIF
0116 ENDDO
87ea84cac6 Jean*0117 ENDDO
3a77421753 Jean*0118 ENDIF
5e328a6c4a Davi*0119 DO j=1,sNy
0120 DO i=1,sNx
0121 IF ( hOceMxL(i,j,bi,bj).NE.0. _d 0 ) THEN
0122 locQflux = ( aim_sWght0*aim_qfx0(i,j,bi,bj)
0123 & + aim_sWght1*aim_qfx1(i,j,bi,bj)
0124 & )
0125 tOceMxL(i,j,bi,bj) = tOceMxL(i,j,bi,bj)
0126 & + heatFac*locQflux / hOceMxL(i,j,bi,bj)
0127 ENDIF
0128 ENDDO
0129 ENDDO
87ea84cac6 Jean*0130 #endif /* ALLOW_AIM */
0131
2d218141ac Jean*0132
0133 DO j=1,sNy
0134 DO i=1,sNx
0135 IF ( hOceMxL(i,j,bi,bj).NE.0. _d 0 ) THEN
0136 dTsurf(i,j) = tOceMxL(i,j,bi,bj) - dTsurf(i,j)
0137 ENDIF
0138 ENDDO
0139 ENDDO
0140
c8458785ea Patr*0141
0142 ENDIF
0143
41e6ab0e43 Jean*0144
0145
0146 IF ( thSIceAdvScheme.LE.0 ) THEN
0147 CALL THSICE_AVE(
0148 I bi, bj, myTime, myIter, myThid )
0149 ENDIF
0150
87ea84cac6 Jean*0151 #endif /* ALLOW_THSICE */
0152
0153 RETURN
0154 END