38 |
#include "THSICE_SIZE.h" |
#include "THSICE_SIZE.h" |
39 |
#include "THSICE_PARAMS.h" |
#include "THSICE_PARAMS.h" |
40 |
#include "THSICE_VARS.h" |
#include "THSICE_VARS.h" |
|
#include "THSICE_2DYN.h" |
|
41 |
#ifdef ALLOW_GENERIC_ADVDIFF |
#ifdef ALLOW_GENERIC_ADVDIFF |
42 |
# include "GAD.h" |
# include "GAD.h" |
43 |
#endif |
#endif |
167 |
ENDDO |
ENDDO |
168 |
|
|
169 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
170 |
CADJ STORE iceHeight(i,j,bi,bj) |
CADJ STORE iceHeight(:,:,bi,bj) |
171 |
CADJ & = comlev1_bibj, key=iicekey, byte=isbyte |
CADJ & = comlev1_bibj, key=iicekey, byte=isbyte |
172 |
CADJ STORE snowHeight(i,j,bi,bj) |
CADJ STORE snowHeight(:,:,bi,bj) |
173 |
CADJ & = comlev1_bibj, key=iicekey, byte=isbyte |
CADJ & = comlev1_bibj, key=iicekey, byte=isbyte |
174 |
#endif |
#endif |
175 |
IF ( thSIce_diffK .GT. 0. ) THEN |
IF ( thSIce_diffK .GT. 0. ) THEN |
202 |
ENDDO |
ENDDO |
203 |
ENDDO |
ENDDO |
204 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
205 |
CADJ STORE icevol(i,j) = comlev1_bibj, key=iicekey, byte=isbyte |
CADJ STORE icevol(:,:) = comlev1_bibj, key=iicekey, byte=isbyte |
206 |
CADJ STORE utrice(i,j) = comlev1_bibj, key=iicekey, byte=isbyte |
CADJ STORE utrice(:,:) = comlev1_bibj, key=iicekey, byte=isbyte |
207 |
CADJ STORE vtrice(i,j) = comlev1_bibj, key=iicekey, byte=isbyte |
CADJ STORE vtrice(:,:) = comlev1_bibj, key=iicekey, byte=isbyte |
208 |
#endif |
#endif |
209 |
CALL THSICE_ADVECTION( |
CALL THSICE_ADVECTION( |
210 |
I GAD_SI_FRAC, thSIceAdvScheme, .TRUE., |
I GAD_SI_FRAC, thSIceAdvScheme, .TRUE., |
227 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
228 |
|
|
229 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
230 |
CADJ STORE iceHeight(i,j,bi,bj) = comlev1_bibj, key=iicekey, byte=isbyte |
CADJ STORE iceHeight(:,:,bi,bj) = comlev1_bibj, key=iicekey, byte=isbyte |
231 |
CADJ STORE iceMask(i,j,bi,bj) = comlev1_bibj, key=iicekey, byte=isbyte |
CADJ STORE iceMask(:,:,bi,bj) = comlev1_bibj, key=iicekey, byte=isbyte |
232 |
#endif |
#endif |
233 |
C-- sea-ice Thickness |
C-- sea-ice Thickness |
234 |
DO j=1-Oly,sNy+Oly |
DO j=1-Oly,sNy+Oly |
245 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
246 |
|
|
247 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
248 |
CADJ STORE qice2(i,j,bi,bj) = comlev1_bibj, key=iicekey, byte=isbyte |
CADJ STORE qice2(:,:,bi,bj) = comlev1_bibj, key=iicekey, byte=isbyte |
249 |
CADJ STORE utrice(i,j) = comlev1_bibj, key=iicekey, byte=isbyte |
CADJ STORE utrice(:,:) = comlev1_bibj, key=iicekey, byte=isbyte |
250 |
CADJ STORE vtrice(i,j) = comlev1_bibj, key=iicekey, byte=isbyte |
CADJ STORE vtrice(:,:) = comlev1_bibj, key=iicekey, byte=isbyte |
251 |
#endif |
#endif |
252 |
|
|
253 |
#ifdef ALLOW_DBUG_THSICE |
#ifdef ALLOW_DBUG_THSICE |
406 |
#endif |
#endif |
407 |
|
|
408 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
409 |
CADJ STORE iceHeight(:,:,bi,bj) = |
CADJ STORE iceHeight(:,:,bi,bj) = |
410 |
CADJ & comlev1_bibj, key=iicekey, byte=isbyte |
CADJ & comlev1_bibj, key=iicekey, byte=isbyte |
411 |
CADJ STORE snowHeight(:,:,bi,bj) = |
CADJ STORE snowHeight(:,:,bi,bj) = |
412 |
CADJ & comlev1_bibj, key=iicekey, byte=isbyte |
CADJ & comlev1_bibj, key=iicekey, byte=isbyte |
413 |
CADJ STORE iceFrc(:,:) = |
CADJ STORE iceFrc(:,:) = |
414 |
CADJ & comlev1_bibj, key=iicekey, byte=isbyte |
CADJ & comlev1_bibj, key=iicekey, byte=isbyte |
415 |
#endif |
#endif |
416 |
|
|
435 |
ENDIF |
ENDIF |
436 |
ENDDO |
ENDDO |
437 |
ENDDO |
ENDDO |
438 |
C- adjust sea-ice state if not enough ice. |
C- adjust sea-ice state if ice is too thin. |
439 |
DO j=1,sNy |
DO j=1,sNy |
440 |
DO i=1,sNx |
DO i=1,sNx |
441 |
IF ( iceHeight(i,j,bi,bj).LT.hIceMin ) THEN |
IF ( iceHeight(i,j,bi,bj).LT.hIceMin ) THEN |
442 |
|
iceVol(i,j) = iceMask(i,j,bi,bj)*iceHeight(i,j,bi,bj) |
443 |
|
c IF ( dBug(i,j,bi,bj) ) |
444 |
|
IF ( iceVol(i,j).GE.hIceMin*iceMaskMin ) THEN |
445 |
|
iceMask(i,j,bi,bj) = iceVol(i,j)/hIceMin |
446 |
|
snowHeight(i,j,bi,bj) = snowHeight(i,j,bi,bj) |
447 |
|
& *hIceMin/iceHeight(i,j,bi,bj) |
448 |
|
iceHeight(i,j,bi,bj) = hIceMin |
449 |
|
ELSE |
450 |
C- Not enough ice, melt the tiny amount of snow & ice: |
C- Not enough ice, melt the tiny amount of snow & ice: |
451 |
C and return fresh-water, salt & energy to the ocean (flx > 0 = into ocean) |
C and return fresh-water, salt & energy to the ocean (flx > 0 = into ocean) |
452 |
C- - Note: using 1rst.Order Upwind, I can get the same results as when |
C- - Note: using 1rst.Order Upwind, I can get the same results as when |
463 |
& *( Qice1(i,j,bi,bj) |
& *( Qice1(i,j,bi,bj) |
464 |
& +Qice2(i,j,bi,bj) )*0.5 _d 0 |
& +Qice2(i,j,bi,bj) )*0.5 _d 0 |
465 |
& )*iceMask(i,j,bi,bj)/thSIce_deltaT |
& )*iceMask(i,j,bi,bj)/thSIce_deltaT |
|
c IF ( dBug(i,j,bi,bj) ) |
|
466 |
C- - |
C- - |
467 |
c flx2oc (i,j) = flx2oc (i,j) + |
c flx2oc (i,j) = flx2oc (i,j) + |
468 |
c frw2oc (i,j) = frw2oc (i,j) + |
c frw2oc (i,j) = frw2oc (i,j) + |
473 |
Qice1 (i,j,bi,bj) = 0. _d 0 |
Qice1 (i,j,bi,bj) = 0. _d 0 |
474 |
Qice2 (i,j,bi,bj) = 0. _d 0 |
Qice2 (i,j,bi,bj) = 0. _d 0 |
475 |
snowAge (i,j,bi,bj) = 0. _d 0 |
snowAge (i,j,bi,bj) = 0. _d 0 |
476 |
|
ENDIF |
477 |
ENDIF |
ENDIF |
478 |
ENDDO |
ENDDO |
479 |
ENDDO |
ENDDO |