74 |
C iceFrc :: (new) sea-ice fraction |
C iceFrc :: (new) sea-ice fraction |
75 |
C iceVol :: temporary array used in advection S/R |
C iceVol :: temporary array used in advection S/R |
76 |
C oldVol :: (old) sea-ice volume |
C oldVol :: (old) sea-ice volume |
77 |
C msgBuf :: Informational/error meesage buffer |
C msgBuf :: Informational/error message buffer |
78 |
INTEGER i, j |
INTEGER i, j |
79 |
LOGICAL thSIce_multiDimAdv |
LOGICAL thSIce_multiDimAdv |
80 |
CHARACTER*(MAX_LEN_MBUF) msgBuf |
CHARACTER*(MAX_LEN_MBUF) msgBuf |
87 |
_RL afy (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL afy (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
88 |
_RS maskOce (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RS maskOce (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
89 |
_RL iceFrc (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL iceFrc (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
90 |
_RL iceVol (1-Olx:sNx+Olx,1-Oly:sNy+Oly) |
_RL iceVol (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
91 |
_RL oldVol (1-Olx:sNx+Olx,1-Oly:sNy+Oly) |
_RL oldVol (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
92 |
_RL r_minArea |
_RL r_minArea |
93 |
_RL meanCellArea, areaEpsil, vol_Epsil |
_RL meanCellArea, areaEpsil, vol_Epsil |
94 |
#ifdef ALLOW_DIAGNOSTICS |
#ifdef ALLOW_DIAGNOSTICS |
150 |
ENDIF |
ENDIF |
151 |
#endif /* ALLOW_GENERIC_ADVDIFF */ |
#endif /* ALLOW_GENERIC_ADVDIFF */ |
152 |
|
|
153 |
|
#ifndef OLD_THSICE_CALL_SEQUENCE |
154 |
|
#ifdef ALLOW_DIAGNOSTICS |
155 |
|
IF ( useDiagnostics ) THEN |
156 |
|
CALL DIAGNOSTICS_FILL(iceMask,'SI_AdvFr',0,1,1,bi,bj,myThid) |
157 |
|
C- Ice-fraction weighted quantities: |
158 |
|
tmpFac = 1. _d 0 |
159 |
|
CALL DIAGNOSTICS_FRACT_FILL( |
160 |
|
I iceHeight, iceMask,tmpFac,1,'SI_AdvHi', |
161 |
|
I 0,1,1,bi,bj,myThid) |
162 |
|
CALL DIAGNOSTICS_FRACT_FILL( |
163 |
|
I snowHeight,iceMask,tmpFac,1,'SI_AdvHs', |
164 |
|
I 0,1,1,bi,bj,myThid) |
165 |
|
C- Ice-Volume weighted quantities: |
166 |
|
IF ( DIAGNOSTICS_IS_ON('SI_AdvQ1',myThid) .OR. |
167 |
|
& DIAGNOSTICS_IS_ON('SI_AdvQ2',myThid) ) THEN |
168 |
|
DO j=1,sNy |
169 |
|
DO i=1,sNx |
170 |
|
iceVol(i,j) = iceMask(i,j,bi,bj)*iceHeight(i,j,bi,bj) |
171 |
|
ENDDO |
172 |
|
ENDDO |
173 |
|
CALL DIAGNOSTICS_FRACT_FILL( |
174 |
|
I Qice1(1-OLx,1-OLy,bi,bj), |
175 |
|
I iceVol,tmpFac,1,'SI_AdvQ1', |
176 |
|
I 0,1,2,bi,bj,myThid) |
177 |
|
CALL DIAGNOSTICS_FRACT_FILL( |
178 |
|
I Qice2(1-OLx,1-OLy,bi,bj), |
179 |
|
I iceVol,tmpFac,1,'SI_AdvQ2', |
180 |
|
I 0,1,2,bi,bj,myThid) |
181 |
|
ENDIF |
182 |
|
ENDIF |
183 |
|
#endif /* ALLOW_DIAGNOSTICS */ |
184 |
|
#endif /* ndef OLD_THSICE_CALL_SEQUENCE */ |
185 |
|
|
186 |
C-- Initialisation (+ build oceanic mask) |
C-- Initialisation (+ build oceanic mask) |
187 |
DO j=1-OLy,sNy+OLy |
DO j=1-OLy,sNy+OLy |
188 |
DO i=1-OLx,sNx+OLx |
DO i=1-OLx,sNx+OLx |
215 |
IF ( thSIce_multiDimAdv ) THEN |
IF ( thSIce_multiDimAdv ) THEN |
216 |
|
|
217 |
C- Calculate ice transports through tracer cell faces. |
C- Calculate ice transports through tracer cell faces. |
218 |
DO j=1-Oly,sNy+Oly |
DO j=1-OLy,sNy+OLy |
219 |
DO i=1-Olx+1,sNx+Olx |
DO i=1-OLx+1,sNx+OLx |
220 |
uTrIce(i,j) = uIce(i,j)*_dyG(i,j,bi,bj) |
uTrIce(i,j) = uIce(i,j)*_dyG(i,j,bi,bj) |
221 |
& *maskOce(i-1,j)*maskOce(i,j) |
& *maskOce(i-1,j)*maskOce(i,j) |
222 |
ENDDO |
ENDDO |
223 |
ENDDO |
ENDDO |
224 |
DO j=1-Oly+1,sNy+Oly |
DO j=1-OLy+1,sNy+OLy |
225 |
DO i=1-Olx,sNx+Olx |
DO i=1-OLx,sNx+OLx |
226 |
vTrIce(i,j) = vIce(i,j)*_dxG(i,j,bi,bj) |
vTrIce(i,j) = vIce(i,j)*_dxG(i,j,bi,bj) |
227 |
& *maskOce(i,j-1)*maskOce(i,j) |
& *maskOce(i,j-1)*maskOce(i,j) |
228 |
ENDDO |
ENDDO |
229 |
ENDDO |
ENDDO |
230 |
|
|
231 |
C-- Fractional area |
C-- Fractional area |
232 |
DO j=1-Oly,sNy+Oly |
DO j=1-OLy,sNy+OLy |
233 |
DO i=1-Olx,sNx+Olx |
DO i=1-OLx,sNx+OLx |
234 |
iceFrc(i,j) = iceMask(i,j,bi,bj) |
iceFrc(i,j) = iceMask(i,j,bi,bj) |
235 |
ENDDO |
ENDDO |
236 |
ENDDO |
ENDDO |
247 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
248 |
|
|
249 |
C-- Snow thickness |
C-- Snow thickness |
250 |
DO j=1-Oly,sNy+Oly |
DO j=1-OLy,sNy+OLy |
251 |
DO i=1-Olx,sNx+Olx |
DO i=1-OLx,sNx+OLx |
252 |
iceVol(i,j) = iceMask(i,j,bi,bj)*rA(i,j,bi,bj) |
iceVol(i,j) = iceMask(i,j,bi,bj)*rA(i,j,bi,bj) |
253 |
ENDDO |
ENDDO |
254 |
ENDDO |
ENDDO |
255 |
CALL THSICE_ADVECTION( |
CALL THSICE_ADVECTION( |
256 |
I GAD_SI_HSNOW, thSIceAdvScheme, .FALSE., |
I GAD_SI_HSNOW, thSIceAdvScheme, .FALSE., |
257 |
I uTrans, vTrans, maskOce, thSIce_deltaT, areaEpsil, |
I uTrans, vTrans, maskOce, thSIce_deltaT, areaEpsil, |
258 |
U iceVol, snowHeight(1-Olx,1-Oly,bi,bj), |
U iceVol, snowHeight(1-OLx,1-OLy,bi,bj), |
259 |
O afx, afy, |
O afx, afy, |
260 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
261 |
|
|
264 |
CADJ STORE iceMask(:,:,bi,bj) = comlev1_bibj, key=ticekey, byte=isbyte |
CADJ STORE iceMask(:,:,bi,bj) = comlev1_bibj, key=ticekey, byte=isbyte |
265 |
#endif |
#endif |
266 |
C-- sea-ice Thickness |
C-- sea-ice Thickness |
267 |
DO j=1-Oly,sNy+Oly |
DO j=1-OLy,sNy+OLy |
268 |
DO i=1-Olx,sNx+Olx |
DO i=1-OLx,sNx+OLx |
269 |
iceVol(i,j) = iceMask(i,j,bi,bj)*rA(i,j,bi,bj) |
iceVol(i,j) = iceMask(i,j,bi,bj)*rA(i,j,bi,bj) |
270 |
oldVol(i,j) = iceVol(i,j)*iceHeight(i,j,bi,bj) |
oldVol(i,j) = iceVol(i,j)*iceHeight(i,j,bi,bj) |
271 |
ENDDO |
ENDDO |
273 |
CALL THSICE_ADVECTION( |
CALL THSICE_ADVECTION( |
274 |
I GAD_SI_HICE, thSIceAdvScheme, .FALSE., |
I GAD_SI_HICE, thSIceAdvScheme, .FALSE., |
275 |
I uTrans, vTrans, maskOce, thSIce_deltaT, areaEpsil, |
I uTrans, vTrans, maskOce, thSIce_deltaT, areaEpsil, |
276 |
U iceVol, iceHeight(1-Olx,1-Oly,bi,bj), |
U iceVol, iceHeight(1-OLx,1-OLy,bi,bj), |
277 |
O uTrIce, vTrIce, |
O uTrIce, vTrIce, |
278 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
279 |
|
|
345 |
#endif |
#endif |
346 |
|
|
347 |
C-- Enthalpy in layer 1 |
C-- Enthalpy in layer 1 |
348 |
DO j=1-Oly,sNy+Oly |
DO j=1-OLy,sNy+OLy |
349 |
DO i=1-Olx,sNx+Olx |
DO i=1-OLx,sNx+OLx |
350 |
iceVol(i,j) = oldVol(i,j) |
iceVol(i,j) = oldVol(i,j) |
351 |
ENDDO |
ENDDO |
352 |
ENDDO |
ENDDO |
353 |
CALL THSICE_ADVECTION( |
CALL THSICE_ADVECTION( |
354 |
I GAD_SI_QICE1, thSIceAdvScheme, .FALSE., |
I GAD_SI_QICE1, thSIceAdvScheme, .FALSE., |
355 |
I uTrIce, vTrIce, maskOce, thSIce_deltaT, vol_Epsil, |
I uTrIce, vTrIce, maskOce, thSIce_deltaT, vol_Epsil, |
356 |
U iceVol, Qice1(1-Olx,1-Oly,bi,bj), |
U iceVol, Qice1(1-OLx,1-OLy,bi,bj), |
357 |
O afx, afy, |
O afx, afy, |
358 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
359 |
#ifdef ALLOW_DBUG_THSICE |
#ifdef ALLOW_DBUG_THSICE |
382 |
#endif |
#endif |
383 |
|
|
384 |
C-- Enthalpy in layer 2 |
C-- Enthalpy in layer 2 |
385 |
DO j=1-Oly,sNy+Oly |
DO j=1-OLy,sNy+OLy |
386 |
DO i=1-Olx,sNx+Olx |
DO i=1-OLx,sNx+OLx |
387 |
iceVol(i,j) = oldVol(i,j) |
iceVol(i,j) = oldVol(i,j) |
388 |
ENDDO |
ENDDO |
389 |
ENDDO |
ENDDO |
390 |
CALL THSICE_ADVECTION( |
CALL THSICE_ADVECTION( |
391 |
I GAD_SI_QICE2, thSIceAdvScheme, .FALSE., |
I GAD_SI_QICE2, thSIceAdvScheme, .FALSE., |
392 |
I uTrIce, vTrIce, maskOce, thSIce_deltaT, vol_Epsil, |
I uTrIce, vTrIce, maskOce, thSIce_deltaT, vol_Epsil, |
393 |
U iceVol, Qice2(1-Olx,1-Oly,bi,bj), |
U iceVol, Qice2(1-OLx,1-OLy,bi,bj), |
394 |
O afx, afy, |
O afx, afy, |
395 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
396 |
#ifdef ALLOW_DBUG_THSICE |
#ifdef ALLOW_DBUG_THSICE |
539 |
C--- end if multiDimAdvection |
C--- end if multiDimAdvection |
540 |
ENDIF |
ENDIF |
541 |
|
|
542 |
|
#ifdef OLD_THSICE_CALL_SEQUENCE |
543 |
#ifdef ALLOW_DIAGNOSTICS |
#ifdef ALLOW_DIAGNOSTICS |
544 |
IF ( useDiagnostics ) THEN |
IF ( useDiagnostics ) THEN |
545 |
CALL DIAGNOSTICS_FILL(iceMask,'SI_AdvFr',0,1,1,bi,bj,myThid) |
CALL DIAGNOSTICS_FILL(iceMask,'SI_AdvFr',0,1,1,bi,bj,myThid) |
570 |
ENDIF |
ENDIF |
571 |
ENDIF |
ENDIF |
572 |
#endif /* ALLOW_DIAGNOSTICS */ |
#endif /* ALLOW_DIAGNOSTICS */ |
573 |
|
#endif /* OLD_THSICE_CALL_SEQUENCE */ |
574 |
|
|
575 |
#endif /* ALLOW_THSICE */ |
#endif /* ALLOW_THSICE */ |
576 |
|
|