157 |
_RL saltFluxAdjust (1:sNx,1:sNy) |
_RL saltFluxAdjust (1:sNx,1:sNy) |
158 |
#endif |
#endif |
159 |
|
|
160 |
|
INTEGER nDim |
161 |
#ifdef SEAICE_MULTICATEGORY |
#ifdef SEAICE_MULTICATEGORY |
|
INTEGER it |
|
162 |
INTEGER ilockey |
INTEGER ilockey |
163 |
_RL RK |
PARAMETER ( nDim = MULTDIM ) |
164 |
|
#else |
165 |
|
PARAMETER ( nDim = 1 ) |
166 |
|
#endif /* SEAICE_MULTICATEGORY */ |
167 |
|
INTEGER it |
168 |
|
_RL pFac |
169 |
_RL heffActualP (1:sNx,1:sNy) |
_RL heffActualP (1:sNx,1:sNy) |
170 |
_RL a_QbyATMmult_cover (1:sNx,1:sNy) |
_RL a_QbyATMmult_cover (1:sNx,1:sNy) |
171 |
_RL a_QSWbyATMmult_cover(1:sNx,1:sNy) |
_RL a_QSWbyATMmult_cover(1:sNx,1:sNy) |
|
#endif |
|
172 |
|
|
173 |
#ifdef ALLOW_DIAGNOSTICS |
#ifdef ALLOW_DIAGNOSTICS |
174 |
_RL DIAGarray (1:sNx,1:sNy) |
_RL DIAGarray (1:sNx,1:sNy) |
176 |
EXTERNAL DIAGNOSTICS_IS_ON |
EXTERNAL DIAGNOSTICS_IS_ON |
177 |
#endif |
#endif |
178 |
|
|
|
|
|
|
|
|
179 |
c =================================================================== |
c =================================================================== |
180 |
c =================PART 0: constants and initializations============= |
c =================PART 0: constants and initializations============= |
181 |
c =================================================================== |
c =================================================================== |
182 |
|
|
|
|
|
|
|
|
183 |
IF ( buoyancyRelation .EQ. 'OCEANICP' ) THEN |
IF ( buoyancyRelation .EQ. 'OCEANICP' ) THEN |
184 |
kSurface = Nr |
kSurface = Nr |
185 |
ELSE |
ELSE |
276 |
#ifdef SEAICE_SALINITY |
#ifdef SEAICE_SALINITY |
277 |
saltFluxAdjust(I,J) = 0.0 _d 0 |
saltFluxAdjust(I,J) = 0.0 _d 0 |
278 |
#endif |
#endif |
|
#ifdef SEAICE_MULTICATEGORY |
|
279 |
a_QbyATMmult_cover(I,J) = 0.0 _d 0 |
a_QbyATMmult_cover(I,J) = 0.0 _d 0 |
280 |
a_QSWbyATMmult_cover(I,J) = 0.0 _d 0 |
a_QSWbyATMmult_cover(I,J) = 0.0 _d 0 |
|
#endif |
|
281 |
ENDDO |
ENDDO |
282 |
ENDDO |
ENDDO |
283 |
#ifdef ALLOW_MEAN_SFLUX_COST_CONTRIBUTION |
#ifdef ALLOW_MEAN_SFLUX_COST_CONTRIBUTION |
504 |
C determine available heat due to the atmosphere -- for ice covered water |
C determine available heat due to the atmosphere -- for ice covered water |
505 |
C ======================================================================= |
C ======================================================================= |
506 |
|
|
|
#ifdef ALLOW_AUTODIFF_TAMC |
|
|
CADJ STORE tice = comlev1, key = ikey_dynamics, byte = isbyte |
|
|
# ifdef SEAICE_MULTICATEGORY |
|
|
CADJ STORE tices = comlev1, key = ikey_dynamics, byte = isbyte |
|
|
# endif |
|
|
#endif /* ALLOW_AUTODIFF_TAMC */ |
|
|
|
|
507 |
#ifdef ALLOW_ATM_WIND |
#ifdef ALLOW_ATM_WIND |
508 |
IF (useRelativeWind) THEN |
IF (useRelativeWind) THEN |
509 |
C Compute relative wind speed over sea ice. |
C Compute relative wind speed over sea ice. |
528 |
ENDIF |
ENDIF |
529 |
#endif |
#endif |
530 |
|
|
|
#ifdef SEAICE_MULTICATEGORY |
|
|
C-- Start loop over muli-categories |
|
|
DO IT=1,MULTDIM |
|
531 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
532 |
ilockey = (iicekey-1)*MULTDIM + IT |
CADJ STORE tice = comlev1, key = ikey_dynamics, byte = isbyte |
533 |
|
# ifdef SEAICE_MULTICATEGORY |
534 |
|
CADJ STORE tices = comlev1, key = ikey_dynamics, byte = isbyte |
535 |
|
# endif /* SEAICE_MULTICATEGORY */ |
536 |
|
#endif /* ALLOW_AUTODIFF_TAMC */ |
537 |
|
|
538 |
|
C-- Start loop over muli-categories, if SEAICE_MULTICATEGORY is undefined |
539 |
|
C nDim = 1, and there is only one loop iteration |
540 |
|
DO IT=1,nDim |
541 |
|
#ifdef ALLOW_AUTODIFF_TAMC |
542 |
|
#ifdef SEAICE_MULTICATEGORY |
543 |
|
C Why do we need this store directive when we have just stored |
544 |
|
C TICES before the loop? |
545 |
|
ilockey = (iicekey-1)*nDim + IT |
546 |
CADJ STORE tices(:,:,it,bi,bj) = comlev1_multdim, |
CADJ STORE tices(:,:,it,bi,bj) = comlev1_multdim, |
547 |
CADJ & key = ilockey, byte = isbyte |
CADJ & key = ilockey, byte = isbyte |
548 |
|
#endif /* SEAICE_MULTICATEGORY */ |
549 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
550 |
RK=REAL(IT) |
pFac = (2.0 _d 0*real(IT)-1.0 _d 0)/nDim |
551 |
DO J=1,sNy |
DO J=1,sNy |
552 |
DO I=1,sNx |
DO I=1,sNx |
553 |
heffActualP(I,J)= |
heffActualP(I,J)= heffActual(I,J)*pFac |
554 |
& (heffActual(I,J)/MULTDIM)*((2.0 _d 0*RK)-1.0 _d 0) |
#ifdef SEAICE_MULTICATEGORY |
555 |
TICE(I,J,bi,bj)=TICES(I,J,IT,bi,bj) |
TICE(I,J,bi,bj)=TICES(I,J,IT,bi,bj) |
556 |
|
#endif /* SEAICE_MULTICATEGORY */ |
557 |
ENDDO |
ENDDO |
558 |
ENDDO |
ENDDO |
559 |
CALL SEAICE_SOLVE4TEMP( |
CALL SEAICE_SOLVE4TEMP( |
564 |
DO J=1,sNy |
DO J=1,sNy |
565 |
DO I=1,sNx |
DO I=1,sNx |
566 |
C average over categories |
C average over categories |
567 |
a_QbyATM_cover (I,J) = |
a_QbyATM_cover (I,J) = a_QbyATM_cover(I,J) |
568 |
& a_QbyATM_cover(I,J) + a_QbyATMmult_cover(I,J)/MULTDIM |
& + a_QbyATMmult_cover(I,J)/nDim |
569 |
a_QSWbyATM_cover (I,J) = |
a_QSWbyATM_cover (I,J) = a_QSWbyATM_cover(I,J) |
570 |
& a_QSWbyATM_cover(I,J) + a_QSWbyATMmult_cover(I,J)/MULTDIM |
& + a_QSWbyATMmult_cover(I,J)/nDim |
571 |
|
#ifdef SEAICE_MULTICATEGORY |
572 |
TICES(I,J,IT,bi,bj) = TICE(I,J,bi,bj) |
TICES(I,J,IT,bi,bj) = TICE(I,J,bi,bj) |
573 |
|
#endif /* SEAICE_MULTICATEGORY */ |
574 |
ENDDO |
ENDDO |
575 |
ENDDO |
ENDDO |
576 |
ENDDO |
ENDDO |
577 |
C-- End loop over multi-categories |
C-- End loop over multi-categories |
|
#else /* SEAICE_MULTICATEGORY */ |
|
|
CALL SEAICE_SOLVE4TEMP( |
|
|
I UG, heffActual, hsnowActual, |
|
|
U TICE, |
|
|
O a_QbyATM_cover, a_QSWbyATM_cover, |
|
|
I bi, bj, myTime, myIter, myThid ) |
|
|
#endif /* SEAICE_MULTICATEGORY */ |
|
578 |
|
|
579 |
#ifdef ALLOW_DIAGNOSTICS |
#ifdef ALLOW_DIAGNOSTICS |
580 |
IF ( useDiagnostics ) THEN |
IF ( useDiagnostics ) THEN |
914 |
c compute cover fraction tendency |
c compute cover fraction tendency |
915 |
IF ( YC(I,J,bi,bj) .LT. ZERO ) THEN |
IF ( YC(I,J,bi,bj) .LT. ZERO ) THEN |
916 |
d_AREAbyATM(I,J)=tmpscal4/HO_south |
d_AREAbyATM(I,J)=tmpscal4/HO_south |
|
#ifndef SEAICE_GROWTH_LEGACY |
|
|
& +HALF*tmpscal3/heffActual(I,J) |
|
|
#else |
|
|
& +HALF*tmpscal3*AREApreTH(I,J) |
|
|
& /(tmpscal0+.00001 _d 0) |
|
|
#endif |
|
917 |
ELSE |
ELSE |
918 |
d_AREAbyATM(I,J)=tmpscal4/HO |
d_AREAbyATM(I,J)=tmpscal4/HO |
919 |
|
ENDIF |
920 |
|
d_AREAbyATM(I,J)=d_AREAbyATM(I,J) |
921 |
#ifndef SEAICE_GROWTH_LEGACY |
#ifndef SEAICE_GROWTH_LEGACY |
922 |
& +HALF*tmpscal3/heffActual(I,J) |
& +HALF*tmpscal3/heffActual(I,J) |
923 |
#else |
#else |
924 |
& +HALF*tmpscal3*AREApreTH(I,J) |
& +HALF*tmpscal3*AREApreTH(I,J) |
925 |
& /(tmpscal0+.00001 _d 0) |
& /(tmpscal0+.00001 _d 0) |
926 |
#endif |
#endif |
|
ENDIF |
|
927 |
c apply tendency |
c apply tendency |
928 |
IF ( (HEFF(i,j,bi,bj).GT.0. _d 0).OR. |
IF ( (HEFF(i,j,bi,bj).GT.0. _d 0).OR. |
929 |
& (HSNOW(i,j,bi,bj).GT.0. _d 0) ) THEN |
& (HSNOW(i,j,bi,bj).GT.0. _d 0) ) THEN |