36 |
#include "THSICE_PARAMS.h" |
#include "THSICE_PARAMS.h" |
37 |
#include "THSICE_VARS.h" |
#include "THSICE_VARS.h" |
38 |
#include "THSICE_TAVE.h" |
#include "THSICE_TAVE.h" |
|
#include "THSICE_2DYN.h" |
|
39 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
40 |
# include "tamc.h" |
# include "tamc.h" |
41 |
# include "tamc_keys.h" |
# include "tamc_keys.h" |
141 |
snowFac = thSIce_deltaT/(rhos*hNewSnowAge) |
snowFac = thSIce_deltaT/(rhos*hNewSnowAge) |
142 |
|
|
143 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
144 |
CADJ STORE iceMask(:,:,bi,bj) = comlev1_bibj, key=iicekey, byte=isbyte |
CADJ STORE iceMask(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte |
145 |
|
CADJ STORE iceheight(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte |
146 |
|
CADJ STORE icfrwatm(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte |
147 |
|
CADJ STORE qice1(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte |
148 |
|
CADJ STORE qice2(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte |
149 |
|
CADJ STORE snowheight(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte |
150 |
#endif |
#endif |
151 |
DO j = jMin, jMax |
DO j = jMin, jMax |
152 |
DO i = iMin, iMax |
DO i = iMin, iMax |
223 |
ENDDO |
ENDDO |
224 |
|
|
225 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
226 |
CADJ STORE iceMask(:,:,bi,bj) = comlev1_bibj, key=iicekey, byte=isbyte |
CADJ STORE iceMask(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte |
227 |
#endif |
#endif |
228 |
|
|
229 |
CALL THSICE_CALC_THICKN( |
CALL THSICE_CALC_THICKN( |
230 |
I bi, bj, siLo, siHi, sjLo, sjHi, |
I bi, bj, |
231 |
I iMin,iMax, jMin,jMax, dBugFlag, |
I iMin,iMax, jMin,jMax, dBugFlag, |
232 |
I iceMask(siLo,sjLo,bi,bj), tFrzOce, |
I iceMask(siLo,sjLo,bi,bj), tFrzOce, |
233 |
I tOceMxL(siLo,sjLo,bi,bj), v2ocMxL(siLo,sjLo,bi,bj), |
I tOceMxL(siLo,sjLo,bi,bj), v2ocMxL(siLo,sjLo,bi,bj), |
240 |
O frw2oc, fsalt, |
O frw2oc, fsalt, |
241 |
I myTime, myIter, myThid ) |
I myTime, myIter, myThid ) |
242 |
|
|
243 |
|
#ifdef ALLOW_AUTODIFF_TAMC |
244 |
|
CADJ STORE iceMask(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte |
245 |
|
CADJ STORE fsalt(:,:) = comlev1_bibj,key=iicekey,byte=isbyte |
246 |
|
CADJ STORE flx2oc(:,:) = comlev1_bibj,key=iicekey,byte=isbyte |
247 |
|
CADJ STORE frw2oc(:,:) = comlev1_bibj,key=iicekey,byte=isbyte |
248 |
|
#endif |
249 |
C-- Net fluxes : |
C-- Net fluxes : |
250 |
DO j = jMin, jMax |
DO j = jMin, jMax |
251 |
DO i = iMin, iMax |
DO i = iMin, iMax |
252 |
#ifdef ALLOW_AUTODIFF_TAMC |
c#ifdef ALLOW_AUTODIFF_TAMC |
253 |
ikey_1 = i |
c ikey_1 = i |
254 |
& + sNx*(j-1) |
c & + sNx*(j-1) |
255 |
& + sNx*sNy*act1 |
c & + sNx*sNy*act1 |
256 |
& + sNx*sNy*max1*act2 |
c & + sNx*sNy*max1*act2 |
257 |
& + sNx*sNy*max1*max2*act3 |
c & + sNx*sNy*max1*max2*act3 |
258 |
& + sNx*sNy*max1*max2*max3*act4 |
c & + sNx*sNy*max1*max2*max3*act4 |
259 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
c#endif /* ALLOW_AUTODIFF_TAMC */ |
260 |
C-- |
c#ifdef ALLOW_AUTODIFF_TAMC |
261 |
#ifdef ALLOW_AUTODIFF_TAMC |
cCADJ STORE icemask(i,j,bi,bj) = comlev1_thsice_1, key=ikey_1 |
262 |
CADJ STORE icemask(i,j,bi,bj) = comlev1_thsice_1, key=ikey_1 |
c#endif |
|
#endif |
|
263 |
IF (iceMask(i,j,bi,bj).GT.0. _d 0) THEN |
IF (iceMask(i,j,bi,bj).GT.0. _d 0) THEN |
264 |
C- weighted average net fluxes: |
C- weighted average net fluxes: |
265 |
#ifdef ALLOW_AUTODIFF_TAMC |
c#ifdef ALLOW_AUTODIFF_TAMC |
266 |
CADJ STORE fsalt(i,j) = comlev1_thsice_1, key=ikey_1 |
cCADJ STORE fsalt(i,j) = comlev1_thsice_1, key=ikey_1 |
267 |
CADJ STORE flx2oc(i,j) = comlev1_thsice_1, key=ikey_1 |
cCADJ STORE flx2oc(i,j) = comlev1_thsice_1, key=ikey_1 |
268 |
CADJ STORE frw2oc(i,j) = comlev1_thsice_1, key=ikey_1 |
cCADJ STORE frw2oc(i,j) = comlev1_thsice_1, key=ikey_1 |
269 |
CADJ STORE icemask(i,j,bi,bj) = comlev1_thsice_1, key=ikey_1 |
cCADJ STORE icemask(i,j,bi,bj) = comlev1_thsice_1, key=ikey_1 |
270 |
#endif |
c#endif |
271 |
icFrac = iceMask(i,j,bi,bj) |
icFrac = iceMask(i,j,bi,bj) |
272 |
opFrac= 1. _d 0-icFrac |
opFrac= 1. _d 0-icFrac |
273 |
#ifdef ALLOW_ATM2D |
#ifdef ALLOW_ATM2D |
278 |
icFlxAtm(i,j,bi,bj) = icFrac*icFlxAtm(i,j,bi,bj) |
icFlxAtm(i,j,bi,bj) = icFrac*icFlxAtm(i,j,bi,bj) |
279 |
& - opFrac*Qnet(i,j,bi,bj) |
& - opFrac*Qnet(i,j,bi,bj) |
280 |
icFrwAtm(i,j,bi,bj) = icFrac*icFrwAtm(i,j,bi,bj) |
icFrwAtm(i,j,bi,bj) = icFrac*icFrwAtm(i,j,bi,bj) |
281 |
& + opFrac*rhofw*EmPmR(i,j,bi,bj) |
& + opFrac*EmPmR(i,j,bi,bj) |
282 |
Qnet(i,j,bi,bj) = -icFrac*flx2oc(i,j) + opFrac*Qnet(i,j,bi,bj) |
Qnet(i,j,bi,bj) = -icFrac*flx2oc(i,j) + opFrac*Qnet(i,j,bi,bj) |
283 |
EmPmR(i,j,bi,bj)= -icFrac*frw2oc(i,j)/rhofw |
EmPmR(i,j,bi,bj)= -icFrac*frw2oc(i,j) |
284 |
& + opFrac*EmPmR(i,j,bi,bj) |
& + opFrac*EmPmR(i,j,bi,bj) |
285 |
saltFlux(i,j,bi,bj) = -icFrac*fsalt(i,j) |
saltFlux(i,j,bi,bj) = -icFrac*fsalt(i,j) |
286 |
#endif |
#endif |
292 |
& snowHeight(i,j,bi,bj), Qnet(i,j,bi,bj) |
& snowHeight(i,j,bi,bj), Qnet(i,j,bi,bj) |
293 |
#endif |
#endif |
294 |
|
|
295 |
ELSEIF (hOceMxL(i,j,bi,bj).gt.0. _d 0) THEN |
ELSEIF (hOceMxL(i,j,bi,bj).GT.0. _d 0) THEN |
296 |
icFlxAtm(i,j,bi,bj) = -Qnet(i,j,bi,bj) |
icFlxAtm(i,j,bi,bj) = -Qnet(i,j,bi,bj) |
297 |
icFrwAtm(i,j,bi,bj) = rhofw*EmPmR(i,j,bi,bj) |
icFrwAtm(i,j,bi,bj) = EmPmR(i,j,bi,bj) |
298 |
ELSE |
ELSE |
299 |
icFlxAtm(i,j,bi,bj) = 0. _d 0 |
icFlxAtm(i,j,bi,bj) = 0. _d 0 |
300 |
icFrwAtm(i,j,bi,bj) = 0. _d 0 |
icFrwAtm(i,j,bi,bj) = 0. _d 0 |
307 |
C over ice-free fraction and what is left from ice-covered fraction |
C over ice-free fraction and what is left from ice-covered fraction |
308 |
C------- |
C------- |
309 |
CALL THSICE_EXTEND( |
CALL THSICE_EXTEND( |
310 |
I bi, bj, siLo, siHi, sjLo, sjHi, |
I bi, bj, |
311 |
I iMin,iMax, jMin,jMax, dBugFlag, |
I iMin,iMax, jMin,jMax, dBugFlag, |
312 |
I frzmltMxL, tFrzOce, |
I frzmltMxL, tFrzOce, |
313 |
I tOceMxL(siLo,sjLo,bi,bj), |
I tOceMxL(siLo,sjLo,bi,bj), |
319 |
I myTime, myIter, myThid ) |
I myTime, myIter, myThid ) |
320 |
|
|
321 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
322 |
CADJ STORE snowHeight(:,:,bi,bj) = |
CADJ STORE snowHeight(:,:,bi,bj) = |
323 |
CADJ & comlev1_bibj, key=iicekey, byte=isbyte |
CADJ & comlev1_bibj,key=iicekey,byte=isbyte |
324 |
#endif |
#endif |
325 |
DO j = jMin, jMax |
DO j = jMin, jMax |
326 |
DO i = iMin, iMax |
DO i = iMin, iMax |
332 |
sFluxFromIce(i,j)= sFluxFromIce(i,j) - fsalt(i,j) |
sFluxFromIce(i,j)= sFluxFromIce(i,j) - fsalt(i,j) |
333 |
#else |
#else |
334 |
Qnet(i,j,bi,bj) = Qnet(i,j,bi,bj) - flx2oc(i,j) |
Qnet(i,j,bi,bj) = Qnet(i,j,bi,bj) - flx2oc(i,j) |
335 |
EmPmR(i,j,bi,bj)= EmPmR(i,j,bi,bj)- frw2oc(i,j)/rhofw |
EmPmR(i,j,bi,bj)= EmPmR(i,j,bi,bj)- frw2oc(i,j) |
336 |
saltFlux(i,j,bi,bj)=saltFlux(i,j,bi,bj) - fsalt(i,j) |
saltFlux(i,j,bi,bj)=saltFlux(i,j,bi,bj) - fsalt(i,j) |
337 |
#endif |
#endif |
338 |
|
|
365 |
ENDDO |
ENDDO |
366 |
ENDDO |
ENDDO |
367 |
|
|
|
#ifdef ATMOSPHERIC_LOADING |
|
368 |
# ifdef ALLOW_AUTODIFF_TAMC |
# ifdef ALLOW_AUTODIFF_TAMC |
369 |
CADJ STORE snowHeight(:,:,bi,bj) = |
CADJ STORE snowHeight(:,:,bi,bj) = |
370 |
CADJ & comlev1_bibj, key=iicekey, byte=isbyte |
CADJ & comlev1_bibj,key=iicekey,byte=isbyte |
371 |
# endif |
# endif |
372 |
DO j = jMin, jMax |
DO j = jMin, jMax |
373 |
DO i = iMin, iMax |
DO i = iMin, iMax |
377 |
& )*iceMask(i,j,bi,bj) |
& )*iceMask(i,j,bi,bj) |
378 |
ENDDO |
ENDDO |
379 |
ENDDO |
ENDDO |
|
#endif |
|
380 |
|
|
381 |
IF ( thSIceAdvScheme.GT.0 ) THEN |
IF ( thSIceAdvScheme.GT.0 ) THEN |
382 |
C-- note: those fluxes should to be added directly to Qnet, EmPmR & saltFlux |
C-- note: those fluxes should to be added directly to Qnet, EmPmR & saltFlux |
384 |
DO i = iMin, iMax |
DO i = iMin, iMax |
385 |
IF ( hOceMxL(i,j,bi,bj).GT.0. _d 0 ) THEN |
IF ( hOceMxL(i,j,bi,bj).GT.0. _d 0 ) THEN |
386 |
Qnet(i,j,bi,bj) = Qnet(i,j,bi,bj) - oceQnet(i,j,bi,bj) |
Qnet(i,j,bi,bj) = Qnet(i,j,bi,bj) - oceQnet(i,j,bi,bj) |
387 |
EmPmR(i,j,bi,bj)= EmPmR(i,j,bi,bj)- oceFWfx(i,j,bi,bj)/rhofw |
EmPmR(i,j,bi,bj)= EmPmR(i,j,bi,bj)- oceFWfx(i,j,bi,bj) |
388 |
saltFlux(i,j,bi,bj)=saltFlux(i,j,bi,bj) - oceSflx(i,j,bi,bj) |
saltFlux(i,j,bi,bj)=saltFlux(i,j,bi,bj) - oceSflx(i,j,bi,bj) |
389 |
ENDIF |
ENDIF |
390 |
ENDDO |
ENDDO |