File indexing completed on 2023-02-03 06:10:34 UTC
view on githubraw file Latest commit edb66560 on 2023-02-02 23:32:31 UTC
87ea84cac6 Jean*0001 #include "THSICE_OPTIONS.h"
6b47d550f4 Mart*0002 #ifdef ALLOW_AUTODIFF
0003 # include "AUTODIFF_OPTIONS.h"
0004 #endif
87ea84cac6 Jean*0005
0006
0007
0008
0009 SUBROUTINE THSICE_EXTEND(
6dc8890c80 Patr*0010 I bi, bj,
7269783f6f Jean*0011 I iMin,iMax, jMin,jMax, dBugFlag,
0012 I fzMlOc, tFrz, tOce,
0013 U icFrac, hIce, hSnow,
0014 U tSrf, tIc1, tIc2, qIc1, qIc2,
0015 O flx2oc, frw2oc, fsalt,
0016 I myTime, myIter, myThid )
87ea84cac6 Jean*0017
0018
7269783f6f Jean*0019
87ea84cac6 Jean*0020
0021
7269783f6f Jean*0022
0023
87ea84cac6 Jean*0024
0025
0026
0027
0028 IMPLICIT NONE
0029
0030
dbce8fc2d4 Jean*0031 #include "EEPARAMS.h"
f8d7459e30 Patr*0032 #include "SIZE.h"
87ea84cac6 Jean*0033 #include "THSICE_SIZE.h"
0034 #include "THSICE_PARAMS.h"
d6f06800ae Patr*0035 #ifdef ALLOW_AUTODIFF_TAMC
0036 # include "tamc.h"
0037 #endif
87ea84cac6 Jean*0038
0039
0040
7269783f6f Jean*0041
0042
0043
0044
0045
0046
0047
0048
790347483b Jean*0049
7269783f6f Jean*0050
0051
0052
790347483b Jean*0053
7269783f6f Jean*0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067 INTEGER bi,bj
0068 INTEGER iMin, iMax
0069 INTEGER jMin, jMax
0070 LOGICAL dBugFlag
6dc8890c80 Patr*0071
0072 _RL fzMlOc (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0073 _RL tFrz (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0074 _RL tOce (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0075 _RL icFrac (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0076 _RL hIce (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0077 _RL hSnow (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0078 _RL tSrf (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0079 _RL tIc1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0080 _RL tIc2 (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0081 _RL qIc1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0082 _RL qIc2 (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0083 _RL flx2oc (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0084 _RL frw2oc (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0085 _RL fsalt (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
7269783f6f Jean*0086 _RL myTime
0087 INTEGER myIter
0088 INTEGER myThid
0089
0090
0091 #ifdef ALLOW_THSICE
0092
0093
87ea84cac6 Jean*0094 _RL esurp
0095 _RL Tf
7269783f6f Jean*0096 _RL iceFrac
87ea84cac6 Jean*0097 _RL iceThick
0098 _RL qicen(nlyr)
0099
0100
790347483b Jean*0101
0102
0103
0104
0105
87ea84cac6 Jean*0106 _RL deltaTice
790347483b Jean*0107 _RL iceVol
87ea84cac6 Jean*0108 _RL newIce
790347483b Jean*0109 _RL hNewIce
0110 _RL iceFormed
87ea84cac6 Jean*0111 _RL qicAv
7269783f6f Jean*0112 INTEGER i,j
0113
7c50f07931 Mart*0114 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0115
0116 INTEGER tkey
7c50f07931 Mart*0117 #endif
7269783f6f Jean*0118
0119 #include "THSICE_DEBUG.h"
87ea84cac6 Jean*0120
a85293d087 Mart*0121 #ifdef ALLOW_DBUG_THSICE
87ea84cac6 Jean*0122 1020 FORMAT(A,1P4E11.3)
a85293d087 Mart*0123 #endif
87ea84cac6 Jean*0124
7269783f6f Jean*0125
0126
86e6447a82 Patr*0127 deltaTice = thSIce_deltaT
0128
6b47d550f4 Mart*0129 #ifdef ALLOW_AUTODIFF
86e6447a82 Patr*0130 DO j = 1-OLy, sNy+OLy
0131 DO i = 1-OLx, sNx+OLx
0132 flx2oc(i,j) = 0. _d 0
0133 frw2oc(i,j) = 0. _d 0
0134 fsalt (i,j) = 0. _d 0
0135 ENDDO
0136 ENDDO
6b47d550f4 Mart*0137 #endif /* ALLOW_AUTODIFF */
86e6447a82 Patr*0138
d6f06800ae Patr*0139 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0140 tkey = bi + (bj-1)*nSx + (ikey_dynamics-1)*nSx*nSy
0141
0142
0143
0144
0145
d6f06800ae Patr*0146 #endif
486e9de820 Jean*0147 DO j = jMin, jMax
0148 DO i = iMin, iMax
d6f06800ae Patr*0149
7269783f6f Jean*0150 IF (fzMlOc(i,j).GT.0. _d 0) THEN
a85293d087 Mart*0151 esurp = fzMlOc(i,j)
0152 Tf = tFrz(i,j)
0153 iceFrac = icFrac(i,j)
0154 iceThick = hIce(i,j)
0155 qicen(1) = qIc1(i,j)
0156 qicen(2) = qIc2(i,j)
7269783f6f Jean*0157
87ea84cac6 Jean*0158
a85293d087 Mart*0159 iceFormed = 0. _d 0
0160 iceVol = iceFrac*iceThick
87ea84cac6 Jean*0161
0162
a85293d087 Mart*0163 IF ( iceFrac.LE.0. _d 0 ) THEN
0164 qicen(1) = -cpWater*Tmlt1
0165 & + cpIce *(Tmlt1-Tf) + Lfresh*(1. _d 0-Tmlt1/Tf)
0166 qicen(2) = -cpIce *Tf + Lfresh
0167 ENDIF
0168 qicAv = rhoi*(qicen(1)+qicen(2))*0.5 _d 0
0169 newIce = esurp*deltaTice/qicAv
0170
0171 IF ( icFrac(i,j).EQ.0. _d 0 ) THEN
0172
0173
790347483b Jean*0174
5471f8df19 Jean*0175
0176 IF ( newIce.GT.hIceMin*iceMaskMin ) THEN
790347483b Jean*0177
a85293d087 Mart*0178
0179
0180 iceThick = MIN(hThinIce,newIce/iceMaskMin)
0181 iceThick = MAX(iceThick,newIce/iceMaskMax)
0182 iceFrac = newIce/iceThick
0183 iceFormed = newIce
87ea84cac6 Jean*0184 ENDIF
a85293d087 Mart*0185 ELSEIF ( iceVol.LT.hiMax*iceMaskMax ) THEN
87ea84cac6 Jean*0186
790347483b Jean*0187
a85293d087 Mart*0188 hNewIce = MIN(hIce(i,j),hNewIceMax)
0189 iceFrac = MIN(icFrac(i,j)+newIce/hNewIce,iceMaskMax)
790347483b Jean*0190
5471f8df19 Jean*0191
a85293d087 Mart*0192 iceThick = MIN(hiMax,(iceVol+newIce)/iceFrac)
790347483b Jean*0193
5471f8df19 Jean*0194
a85293d087 Mart*0195 iceFormed = iceThick*iceFrac - iceVol
87ea84cac6 Jean*0196
a85293d087 Mart*0197 hSnow(i,j) = hSnow(i,j)*icFrac(i,j)/iceFrac
0198 ENDIF
7269783f6f Jean*0199
a85293d087 Mart*0200 flx2oc(i,j) = qicAv*iceFormed/deltaTice
0201 frw2oc(i,j) = -rhoi*iceFormed/deltaTice
0202 fsalt (i,j) = -(rhoi*saltIce)*iceFormed/deltaTice
87ea84cac6 Jean*0203
7269783f6f Jean*0204
0205 #ifdef ALLOW_DBUG_THSICE
a85293d087 Mart*0206 IF ( dBug(i,j,bi,bj) ) THEN
7269783f6f Jean*0207 WRITE(6,1020) 'ThSI_EXT: iceH, newIce, newIceFrac=',
790347483b Jean*0208 & iceThick, newIce, iceFrac-icFrac(i,j)
7269783f6f Jean*0209 WRITE(6,1020) 'ThSI_EXT: iceFrac,flx2oc,fsalt,frw2oc=',
0210 & iceFrac,flx2oc(i,j),fsalt(i,j),frw2oc(i,j)
a85293d087 Mart*0211 ENDIF
7269783f6f Jean*0212 #endif
0213 #ifdef CHECK_ENERGY_CONSERV
a85293d087 Mart*0214 CALL THSICE_CHECK_CONSERV( dBugFlag, i, j, bi, bj, 1,
790347483b Jean*0215 I icFrac(i,j), iceFrac, iceThick, hSnow(i,j), qicen,
7269783f6f Jean*0216 I flx2oc(i,j), frw2oc(i,j), fsalt(i,j),
0217 I myTime, myIter, myThid )
0218 #endif /* CHECK_ENERGY_CONSERV */
0219
0220
a85293d087 Mart*0221 IF ( iceFrac.GT.0. _d 0 .AND. icFrac(i,j).EQ.0. _d 0) THEN
0222
0223 tSrf(i,j) = tFrz(i,j)
0224 tIc1(i,j) = tFrz(i,j)
0225 tIc2(i,j) = tFrz(i,j)
0226 qIc1(i,j) = qicen(1)
0227 qIc2(i,j) = qicen(2)
0228 ENDIF
0229 icFrac(i,j) = iceFrac
0230 hIce (i,j) = iceThick
7269783f6f Jean*0231 ENDIF
0232 ENDDO
0233 ENDDO
87ea84cac6 Jean*0234
0235 #endif /* ALLOW_THSICE */
0236
0237 RETURN
0238 END