88 |
_RL oceV2s, oceTs |
_RL oceV2s, oceTs |
89 |
_RL compact, hIce, hSnow, Tsf, Tice(nlyr), qicen(nlyr) |
_RL compact, hIce, hSnow, Tsf, Tice(nlyr), qicen(nlyr) |
90 |
_RL tmpflx(0:2), tmpdTs |
_RL tmpflx(0:2), tmpdTs |
91 |
|
#ifdef ALLOW_DIAGNOSTICS |
92 |
|
_RL tmpFac |
93 |
|
#endif |
94 |
|
|
95 |
LOGICAL dBug |
LOGICAL dBug |
96 |
|
|
103 |
ENDDO |
ENDDO |
104 |
ENDDO |
ENDDO |
105 |
|
|
106 |
IF ( buoyancyRelation(1:7) .EQ. 'OCEANIC' ) THEN |
IF ( fluidIsWater ) THEN |
107 |
DO j = jMin, jMax |
DO j = jMin, jMax |
108 |
DO i = iMin, iMax |
DO i = iMin, iMax |
109 |
c dBug = ( bi.EQ.3 .AND. i.EQ.15 .AND. j.EQ.15 ) |
c dBug = ( bi.EQ.3 .AND. i.EQ.15 .AND. j.EQ.11 ) |
110 |
|
|
111 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
112 |
C part.1 : ice-covered fraction ; |
C part.1 : ice-covered fraction ; |
120 |
Tsf = Tsrf(i,j,bi,bj) |
Tsf = Tsrf(i,j,bi,bj) |
121 |
qicen(1)= Qice1(i,j,bi,bj) |
qicen(1)= Qice1(i,j,bi,bj) |
122 |
qicen(2)= Qice2(i,j,bi,bj) |
qicen(2)= Qice2(i,j,bi,bj) |
123 |
|
IF ( dBug ) THEN |
124 |
|
WRITE(6,'(A,2I4,2I2)') 'ThSI_FWD: i,j=',i,j,bi,bj |
125 |
|
WRITE(6,1010) 'ThSI_FWD:-0- iceMask, hIc, hSn, Tsf =', |
126 |
|
& icFrac, hIce,hSnow,Tsf |
127 |
|
ENDIF |
128 |
|
|
129 |
CALL THSICE_ALBEDO( |
CALL THSICE_ALBEDO( |
130 |
I hIce, hSnow, Tsf, snowAge(i,j,bi,bj), |
I hIce, hSnow, Tsf, snowAge(i,j,bi,bj), |
150 |
Tice2(i,j,bi,bj)=Tice(2) |
Tice2(i,j,bi,bj)=Tice(2) |
151 |
Qice1(i,j,bi,bj)=qicen(1) |
Qice1(i,j,bi,bj)=qicen(1) |
152 |
Qice2(i,j,bi,bj)=qicen(2) |
Qice2(i,j,bi,bj)=qicen(2) |
153 |
#ifdef ALLOW_TIMEAVE |
siceAlb(i,j,bi,bj) = icFrac*albedo |
154 |
ice_albedo_Ave(i,j,bi,bj) = ice_albedo_Ave(i,j,bi,bj) |
IF ( dBug ) THEN |
155 |
& + icFrac*albedo*thSIce_deltaT |
WRITE(6,1010) 'ThSI_FWD: Tsf, Tice(1,2), frzmltMxL =', |
156 |
#endif /*ALLOW_TIMEAVE*/ |
& Tsf, Tice, frzmltMxL |
157 |
|
WRITE(6,1010) 'ThSI_FWD: sHeat,fxCndBt, fxAtm,evAtm=', |
158 |
|
& sHeating(i,j,bi,bj), flxCndBt(i,j,bi,bj), |
159 |
|
& flxAtm(i,j), evpAtm(i,j) |
160 |
|
ENDIF |
161 |
ENDIF |
ENDIF |
162 |
ENDDO |
ENDDO |
163 |
ENDDO |
ENDDO |
164 |
ENDIF |
ENDIF |
165 |
dBug = .FALSE. |
dBug = .FALSE. |
166 |
|
|
167 |
|
#ifdef ALLOW_DIAGNOSTICS |
168 |
|
IF ( useDiagnostics ) THEN |
169 |
|
tmpFac = 1. _d 0 |
170 |
|
CALL DIAGNOSTICS_FRACT_FILL( |
171 |
|
I snowPrc, iceMask,tmpFac,'SIsnwPrc', |
172 |
|
I 0,1,1,bi,bj,myThid) |
173 |
|
ENDIF |
174 |
|
#endif /* ALLOW_DIAGNOSTICS */ |
175 |
|
|
176 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
177 |
C part.2 : ice-covered fraction ; |
C part.2 : ice-covered fraction ; |
178 |
C change in ice/snow thickness and ice-fraction |
C change in ice/snow thickness and ice-fraction |
182 |
ageFac = 1. _d 0 - thSIce_deltaT/agingTime |
ageFac = 1. _d 0 - thSIce_deltaT/agingTime |
183 |
DO j = jMin, jMax |
DO j = jMin, jMax |
184 |
DO i = iMin, iMax |
DO i = iMin, iMax |
185 |
c dBug = ( bi.EQ.3 .AND. i.EQ.15 .AND. j.EQ.15 ) |
c dBug = ( bi.EQ.3 .AND. i.EQ.15 .AND. j.EQ.11 ) |
186 |
|
|
187 |
TFrzOce = -mu_Tf*sOceMxL(i,j,bi,bj) |
TFrzOce = -mu_Tf*sOceMxL(i,j,bi,bj) |
188 |
oceTs = tOceMxL(i,j,bi,bj) |
oceTs = tOceMxL(i,j,bi,bj) |
194 |
compact= iceMask(i,j,bi,bj) |
compact= iceMask(i,j,bi,bj) |
195 |
C------- |
C------- |
196 |
IF (dBug .AND. (frzmltMxL.GT.0. .OR. compact.GT.0.) ) THEN |
IF (dBug .AND. (frzmltMxL.GT.0. .OR. compact.GT.0.) ) THEN |
197 |
WRITE(6,1010) 'ThSI_FWD:-1- iceMask,hIc,hSn,Qnet=', |
WRITE(6,'(A,2I4,2I2)') 'ThSI_FWD: i,j=',i,j,bi,bj |
198 |
& compact, hIce, hSnow, Qnet(i,j,bi,bj) |
WRITE(6,1010) 'ThSI_FWD:-1- iceMask, hIc, hSn, Tsf =', |
199 |
WRITE(6,1010) 'ThSI_FWD: ocTs,TFrzOce,frzmltMxL=', |
& compact, iceHeight(i,j,bi,bj), |
200 |
& oceTs,TFrzOce,frzmltMxL |
& snowHeight(i,j,bi,bj), Tsrf(i,j,bi,bj) |
201 |
|
WRITE(6,1010) 'ThSI_FWD: ocTs,TFrzOce,frzmltMxL,Qnet=', |
202 |
|
& oceTs, TFrzOce, frzmltMxL,Qnet(i,j,bi,bj) |
203 |
ENDIF |
ENDIF |
204 |
C------- |
C------- |
205 |
IF (iceMask(i,j,bi,bj).GT.0. _d 0) THEN |
IF (iceMask(i,j,bi,bj).GT.0. _d 0) THEN |
254 |
|
|
255 |
C-- Update Sea-Ice state : |
C-- Update Sea-Ice state : |
256 |
c iceMask(i,j,bi,bj)=compact |
c iceMask(i,j,bi,bj)=compact |
257 |
iceheight(i,j,bi,bj) = hIce |
iceHeight(i,j,bi,bj) = hIce |
258 |
snowheight(i,j,bi,bj)= hSnow |
snowHeight(i,j,bi,bj)= hSnow |
259 |
Tsrf(i,j,bi,bj) =Tsf |
Tsrf(i,j,bi,bj) =Tsf |
260 |
Qice1(i,j,bi,bj)=qicen(1) |
Qice1(i,j,bi,bj)=qicen(1) |
261 |
Qice2(i,j,bi,bj)=qicen(2) |
Qice2(i,j,bi,bj)=qicen(2) |
271 |
EmPmR(i,j,bi,bj)=-icFrac*frw2oc/rhofw+opFrac*EmPmR(i,j,bi,bj) |
EmPmR(i,j,bi,bj)=-icFrac*frw2oc/rhofw+opFrac*EmPmR(i,j,bi,bj) |
272 |
saltFlux(i,j,bi,bj)=-icFrac*fsalt |
saltFlux(i,j,bi,bj)=-icFrac*fsalt |
273 |
|
|
274 |
IF (dBug) WRITE(6,1010)'ThSI_FWD:-3- compact,hIc,hSn,Qnet=', |
IF (dBug) WRITE(6,1010) |
275 |
& compact,hIce,hSnow,Qnet(i,j,bi,bj) |
& 'ThSI_FWD:-3- compact, hIc, hSn, Qnet =', |
276 |
|
& compact,hIce,hSnow,Qnet(i,j,bi,bj) |
277 |
|
|
278 |
ELSEIF (hOceMxL(i,j,bi,bj).gt.0. _d 0) THEN |
ELSEIF (hOceMxL(i,j,bi,bj).gt.0. _d 0) THEN |
279 |
flxAtm(i,j) = -Qnet(i,j,bi,bj) |
flxAtm(i,j) = -Qnet(i,j,bi,bj) |
321 |
Qice1(i,j,bi,bj) = qicen(1) |
Qice1(i,j,bi,bj) = qicen(1) |
322 |
Qice2(i,j,bi,bj) = qicen(2) |
Qice2(i,j,bi,bj) = qicen(2) |
323 |
ENDIF |
ENDIF |
324 |
iceheight(i,j,bi,bj) = hIce |
iceHeight(i,j,bi,bj) = hIce |
325 |
snowheight(i,j,bi,bj)= hSnow |
snowHeight(i,j,bi,bj)= hSnow |
326 |
C-- Net fluxes : |
C-- Net fluxes : |
327 |
Qnet(i,j,bi,bj) = Qnet(i,j,bi,bj) - flx2oc |
Qnet(i,j,bi,bj) = Qnet(i,j,bi,bj) - flx2oc |
328 |
EmPmR(i,j,bi,bj)= EmPmR(i,j,bi,bj)- frw2oc/rhofw |
EmPmR(i,j,bi,bj)= EmPmR(i,j,bi,bj)- frw2oc/rhofw |
329 |
saltFlux(i,j,bi,bj)=saltFlux(i,j,bi,bj) - fsalt |
saltFlux(i,j,bi,bj)=saltFlux(i,j,bi,bj) - fsalt |
330 |
|
|
331 |
IF (dBug) WRITE(6,1010)'ThSI_FWD:-4- compact,hIc,hSn,Qnet=', |
IF (dBug) WRITE(6,1010) |
332 |
|
& 'ThSI_FWD:-4- compact, hIc, hSn, Qnet =', |
333 |
& compact,hIce,hSnow,Qnet(i,j,bi,bj) |
& compact,hIce,hSnow,Qnet(i,j,bi,bj) |
334 |
C-- - if esurp > 0 : end |
C-- - if esurp > 0 : end |
335 |
ENDIF |
ENDIF |
352 |
C-- Return atmospheric fluxes in evpAtm & flxSW (same sign and units): |
C-- Return atmospheric fluxes in evpAtm & flxSW (same sign and units): |
353 |
evpAtm(i,j) = frwAtm |
evpAtm(i,j) = frwAtm |
354 |
flxSW (i,j) = flxAtm(i,j) |
flxSW (i,j) = flxAtm(i,j) |
355 |
|
|
356 |
|
#ifdef ATMOSPHERIC_LOADING |
357 |
|
C-- Compute Sea-Ice Loading (= mass of sea-ice + snow / area unit) |
358 |
|
sIceLoad(i,j,bi,bj) = ( snowHeight(i,j,bi,bj)*rhos |
359 |
|
& + iceHeight(i,j,bi,bj)*rhoi |
360 |
|
& )*iceMask(i,j,bi,bj) |
361 |
|
#endif |
362 |
|
|
363 |
ENDDO |
ENDDO |
364 |
ENDDO |
ENDDO |
365 |
|
|