42 |
#ifdef ALLOW_GENERIC_ADVDIFF |
#ifdef ALLOW_GENERIC_ADVDIFF |
43 |
# include "GAD.h" |
# include "GAD.h" |
44 |
#endif |
#endif |
45 |
|
#ifdef ALLOW_AUTODIFF_TAMC |
46 |
|
# include "tamc.h" |
47 |
|
# include "tamc_keys.h" |
48 |
|
#endif |
49 |
|
|
50 |
C !INPUT PARAMETERS: =================================================== |
C !INPUT PARAMETERS: =================================================== |
51 |
C === Routine arguments === |
C === Routine arguments === |
105 |
CEOP |
CEOP |
106 |
|
|
107 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
108 |
|
|
109 |
|
#ifdef ALLOW_AUTODIFF_TAMC |
110 |
|
act1 = bi - myBxLo(myThid) |
111 |
|
max1 = myBxHi(myThid) - myBxLo(myThid) + 1 |
112 |
|
act2 = bj - myByLo(myThid) |
113 |
|
max2 = myByHi(myThid) - myByLo(myThid) + 1 |
114 |
|
act3 = myThid - 1 |
115 |
|
max3 = nTx*nTy |
116 |
|
act4 = ikey_dynamics - 1 |
117 |
|
iicekey = (act1 + 1) + act2*max1 |
118 |
|
& + act3*max1*max2 |
119 |
|
& + act4*max1*max2*max3 |
120 |
|
#endif /* ALLOW_AUTODIFF_TAMC */ |
121 |
|
|
122 |
C areaEpsil, vol_Epsil are 2 small numbers for ice area & ice volume: |
C areaEpsil, vol_Epsil are 2 small numbers for ice area & ice volume: |
123 |
C if ice area (=ice fraction * grid-cell area) or ice volume (= effective |
C if ice area (=ice fraction * grid-cell area) or ice volume (= effective |
124 |
C thickness * grid-cell area) are too small (i.e.: < areaEpsil,vol_Epsil) |
C thickness * grid-cell area) are too small (i.e.: < areaEpsil,vol_Epsil) |
164 |
ENDDO |
ENDDO |
165 |
ENDDO |
ENDDO |
166 |
|
|
167 |
|
#ifdef ALLOW_AUTODIFF_TAMC |
168 |
|
CADJ STORE iceHeight(i,j,bi,bj) |
169 |
|
CADJ & = comlev1_bibj, key=iicekey, byte=isbyte |
170 |
|
CADJ STORE snowHeight(i,j,bi,bj) |
171 |
|
CADJ & = comlev1_bibj, key=iicekey, byte=isbyte |
172 |
|
#endif |
173 |
IF ( thSIce_diffK .GT. 0. ) THEN |
IF ( thSIce_diffK .GT. 0. ) THEN |
174 |
CALL THSICE_DIFFUSION( |
CALL THSICE_DIFFUSION( |
175 |
I maskOce, |
I maskOce, |
199 |
iceFrc(i,j) = iceMask(i,j,bi,bj) |
iceFrc(i,j) = iceMask(i,j,bi,bj) |
200 |
ENDDO |
ENDDO |
201 |
ENDDO |
ENDDO |
202 |
|
#ifdef ALLOW_AUTODIFF_TAMC |
203 |
|
CADJ STORE icevol(i,j) = comlev1_bibj, key=iicekey, byte=isbyte |
204 |
|
CADJ STORE utrice(i,j) = comlev1_bibj, key=iicekey, byte=isbyte |
205 |
|
CADJ STORE vtrice(i,j) = comlev1_bibj, key=iicekey, byte=isbyte |
206 |
|
#endif |
207 |
CALL THSICE_ADVECTION( |
CALL THSICE_ADVECTION( |
208 |
I GAD_SI_FRAC, thSIceAdvScheme, .TRUE., |
I GAD_SI_FRAC, thSIceAdvScheme, .TRUE., |
209 |
I uTrIce, vTrIce, maskOce, thSIce_deltaT, areaEpsil, |
I uTrIce, vTrIce, maskOce, thSIce_deltaT, areaEpsil, |
224 |
O afx, afy, |
O afx, afy, |
225 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
226 |
|
|
227 |
|
#ifdef ALLOW_AUTODIFF_TAMC |
228 |
|
CADJ STORE iceHeight(i,j,bi,bj) = comlev1_bibj, key=iicekey, byte=isbyte |
229 |
|
CADJ STORE iceMask(i,j,bi,bj) = comlev1_bibj, key=iicekey, byte=isbyte |
230 |
|
#endif |
231 |
C-- sea-ice Thickness |
C-- sea-ice Thickness |
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 |
241 |
U iceVol, iceHeight(1-Olx,1-Oly,bi,bj), |
U iceVol, iceHeight(1-Olx,1-Oly,bi,bj), |
242 |
O uTrIce, vTrIce, |
O uTrIce, vTrIce, |
243 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
244 |
|
|
245 |
|
#ifdef ALLOW_AUTODIFF_TAMC |
246 |
|
CADJ STORE qice2(i,j,bi,bj) = comlev1_bibj, key=iicekey, byte=isbyte |
247 |
|
CADJ STORE utrice(i,j) = comlev1_bibj, key=iicekey, byte=isbyte |
248 |
|
CADJ STORE vtrice(i,j) = comlev1_bibj, key=iicekey, byte=isbyte |
249 |
|
#endif |
250 |
|
|
251 |
#ifdef ALLOW_DBUG_THSICE |
#ifdef ALLOW_DBUG_THSICE |
252 |
IF ( dBugFlag ) THEN |
IF ( dBugFlag ) THEN |
253 |
sumVar1 = 0. |
sumVar1 = 0. |
402 |
ENDIF |
ENDIF |
403 |
#endif |
#endif |
404 |
|
|
405 |
|
#ifdef ALLOW_AUTODIFF_TAMC |
406 |
|
CADJ STORE iceHeight(:,:,bi,bj) = |
407 |
|
CADJ & comlev1_bibj, key=iicekey, byte=isbyte |
408 |
|
CADJ STORE snowHeight(:,:,bi,bj) = |
409 |
|
CADJ & comlev1_bibj, key=iicekey, byte=isbyte |
410 |
|
CADJ STORE iceFrc(:,:) = |
411 |
|
CADJ & comlev1_bibj, key=iicekey, byte=isbyte |
412 |
|
#endif |
413 |
|
|
414 |
C-- Update Ice Fraction: ensure that fraction is > iceMaskMin & < 1 |
C-- Update Ice Fraction: ensure that fraction is > iceMaskMin & < 1 |
415 |
C and adjust Ice thickness and snow thickness accordingly |
C and adjust Ice thickness and snow thickness accordingly |
416 |
DO j=1,sNy |
DO j=1,sNy |