8 |
C !INTERFACE: |
C !INTERFACE: |
9 |
SUBROUTINE SEAICE_SOLVE4TEMP( |
SUBROUTINE SEAICE_SOLVE4TEMP( |
10 |
I UG, HICE_ACTUAL, HSNOW_ACTUAL, |
I UG, HICE_ACTUAL, HSNOW_ACTUAL, |
11 |
|
#ifdef SEAICE_ADD_SUBLIMATION_TO_FWBUDGET |
12 |
|
I F_lh_max, |
13 |
|
#endif |
14 |
U TSURF, |
U TSURF, |
15 |
O F_ia, IcePenetSWFlux, |
O F_ia, IcePenetSWFlux, |
16 |
O FWsublim, |
O FWsublim, |
67 |
_RL UG (1:sNx,1:sNy) |
_RL UG (1:sNx,1:sNy) |
68 |
_RL HICE_ACTUAL (1:sNx,1:sNy) |
_RL HICE_ACTUAL (1:sNx,1:sNy) |
69 |
_RL HSNOW_ACTUAL (1:sNx,1:sNy) |
_RL HSNOW_ACTUAL (1:sNx,1:sNy) |
70 |
|
#ifdef SEAICE_ADD_SUBLIMATION_TO_FWBUDGET |
71 |
|
_RL F_lh_max (1:sNx,1:sNy) |
72 |
|
#endif |
73 |
_RL TSURF (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
_RL TSURF (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
74 |
c _RL F_io_net (1:sNx,1:sNy) |
c _RL F_io_net (1:sNx,1:sNy) |
75 |
c _RL F_ia_net (1:sNx,1:sNy) |
c _RL F_ia_net (1:sNx,1:sNy) |
381 |
#endif /* SEAICE_SOLVE4TEMP_LEGACY */ |
#endif /* SEAICE_SOLVE4TEMP_LEGACY */ |
382 |
|
|
383 |
#ifdef SEAICE_DEBUG |
#ifdef SEAICE_DEBUG |
384 |
IF ( (I .EQ. SEAICE_debugPointX) .and. |
IF ( (I .EQ. SEAICE_debugPointI) .and. |
385 |
& (J .EQ. SEAICE_debugPointY) ) THEN |
& (J .EQ. SEAICE_debugPointJ) ) THEN |
386 |
|
|
387 |
print '(A,i6)','-----------------------------------' |
print '(A,i6)','-----------------------------------' |
388 |
print '(A,i6)','ibi merged initialization ', myIter |
print '(A,i6)','ibi merged initialization ', myIter |
464 |
c d(qh)/d(TICE) |
c d(qh)/d(TICE) |
465 |
dqhice_dTice = cc1*cc3t/((cc2-cc3t*Ppascals)**2 *t2) |
dqhice_dTice = cc1*cc3t/((cc2-cc3t*Ppascals)**2 *t2) |
466 |
|
|
467 |
|
#ifdef SEAICE_ADD_SUBLIMATION_TO_FWBUDGET |
468 |
|
c if the latent heat flux implied by tsurfLoc exceeds |
469 |
|
c F_lh_max, cap F_lh and decouple the flux magnitude from TICE |
470 |
|
if (F_lh(I,J) .GT. F_lh_max(I,J)) THEN |
471 |
|
F_lh(I,J) = F_lh_max(I,J) |
472 |
|
dqhice_dTice = ZERO |
473 |
|
endif |
474 |
|
#endif |
475 |
|
|
476 |
|
|
477 |
c d(F_ia)/d(TICE) |
c d(F_ia)/d(TICE) |
478 |
dFiDTs1 = 4.0 _d 0 * D3*t3 + effConduct(I,J) + D1*UG(I,J) |
dFiDTs1 = 4.0 _d 0 * D3*t3 + effConduct(I,J) + D1*UG(I,J) |
479 |
& + D1I*UG(I,J)*dqhice_dTice |
& + D1I*UG(I,J)*dqhice_dTice |
488 |
#endif /* SEAICE_SOLVE4TEMP_LEGACY */ |
#endif /* SEAICE_SOLVE4TEMP_LEGACY */ |
489 |
|
|
490 |
#ifdef SEAICE_DEBUG |
#ifdef SEAICE_DEBUG |
491 |
IF ( (I .EQ. SEAICE_debugPointX) .and. |
IF ( (I .EQ. SEAICE_debugPointI) .and. |
492 |
& (J .EQ. SEAICE_debugPointY) ) THEN |
& (J .EQ. SEAICE_debugPointJ) ) THEN |
493 |
print '(A,i6,4(1x,D24.15))', |
print '(A,i6,4(1x,D24.15))', |
494 |
& 'ice-iter qhICE, ', ITER,qhIce(I,J) |
& 'ice-iter qhICE, ', ITER,qhIce(I,J) |
495 |
|
|
535 |
#endif /* SEAICE_SOLVE4TEMP_LEGACY */ |
#endif /* SEAICE_SOLVE4TEMP_LEGACY */ |
536 |
|
|
537 |
#ifdef SEAICE_DEBUG |
#ifdef SEAICE_DEBUG |
538 |
IF ( (I .EQ. SEAICE_debugPointX) .and. |
IF ( (I .EQ. SEAICE_debugPointI) .and. |
539 |
& (J .EQ. SEAICE_debugPointY) ) THEN |
& (J .EQ. SEAICE_debugPointJ) ) THEN |
540 |
|
|
541 |
print '(A,i6,4(1x,D24.15))', |
print '(A,i6,4(1x,D24.15))', |
542 |
& 'ice-iter tsurfLc,|dif|', ITER, |
& 'ice-iter tsurfLc,|dif|', ITER, |
592 |
qhice(I,J) = bb1*mm_pi/(Ppascals- (1.0 _d 0 - bb1) * mm_pi) |
qhice(I,J) = bb1*mm_pi/(Ppascals- (1.0 _d 0 - bb1) * mm_pi) |
593 |
|
|
594 |
F_lh(I,J) = D1I * UG(I,J)*(qhice(I,J)-AQH(I,J,bi,bj)) |
F_lh(I,J) = D1I * UG(I,J)*(qhice(I,J)-AQH(I,J,bi,bj)) |
595 |
|
|
596 |
|
#ifdef SEAICE_ADD_SUBLIMATION_TO_FWBUDGET |
597 |
|
if (F_lh(I,J) .GT. F_lh_max(I,J)) THEN |
598 |
|
F_lh(I,J) = F_lh_max(I,J) |
599 |
|
endif |
600 |
|
#endif |
601 |
|
|
602 |
F_c(I,J) = -effConduct(I,J) * (TB(I,J) - t1) |
F_c(I,J) = -effConduct(I,J) * (TB(I,J) - t1) |
603 |
F_lwu(I,J) = t4 * D3 |
F_lwu(I,J) = t4 * D3 |
604 |
F_sens(I,J) = D1 * UG(I,J) * (t1 - atempLoc(I,J)) |
F_sens(I,J) = D1 * UG(I,J) * (t1 - atempLoc(I,J)) |
642 |
FWsublim(I,J) = F_lh(I,J)/lhSublim |
FWsublim(I,J) = F_lh(I,J)/lhSublim |
643 |
|
|
644 |
#ifdef SEAICE_DEBUG |
#ifdef SEAICE_DEBUG |
645 |
IF ( (I .EQ. SEAICE_debugPointX) .and. |
IF ( (I .EQ. SEAICE_debugPointI) .and. |
646 |
& (J .EQ. SEAICE_debugPointY) ) THEN |
& (J .EQ. SEAICE_debugPointJ) ) THEN |
647 |
|
|
648 |
print '(A)','----------------------------------------' |
print '(A)','----------------------------------------' |
649 |
print '(A,i6)','ibi complete ', myIter |
print '(A,i6)','ibi complete ', myIter |
663 |
& 'ibi qh(ATM ICE) ', |
& 'ibi qh(ATM ICE) ', |
664 |
& AQH(I,J,bi,bj),qhice(I,J) |
& AQH(I,J,bi,bj),qhice(I,J) |
665 |
|
|
666 |
c print '(A,4(1x,D24.15))', |
#ifndef SEAICE_SOLVE4TEMP_LEGACY |
667 |
c & 'ibi F(lwd,swi,lwu) ', |
print '(A,4(1x,D24.15))', |
668 |
c & F_lwd(I,J), F_swi(I,J), F_lwu(I,J) |
& 'ibi F(lwd,swi,lwu) ', |
669 |
|
& F_lwd(I,J), F_swi(I,J), F_lwu(I,J) |
670 |
c print '(A,4(1x,D24.15))', |
|
671 |
c & 'ibi F(c,lh,sens) ', |
print '(A,4(1x,D24.15))', |
672 |
c & F_c(I,J), F_lh(I,J), F_sens(I,J) |
& 'ibi F(c,lh,sens) ', |
673 |
|
& F_c(I,J), F_lh(I,J), F_sens(I,J) |
674 |
|
|
675 |
|
#ifdef SEAICE_ADD_SUBLIMATION_TO_FWBUDGET |
676 |
|
IF (F_lh_max(I,J) .GT. ZERO) THEN |
677 |
|
print '(A,4(1x,D24.15))', |
678 |
|
& 'ibi F_lh_max, F_lh/lhmax) ', |
679 |
|
& F_lh_max(I,J), F_lh(I,J)/ F_lh_max(I,J) |
680 |
|
ELSE |
681 |
|
print '(A,4(1x,D24.15))', |
682 |
|
& 'ibi F_lh_max = ZERO! ' |
683 |
|
ENDIF |
684 |
|
|
685 |
|
print '(A,4(1x,D24.15))', |
686 |
|
& 'ibi FWsub, FWsubm*dT/rhoI ', |
687 |
|
& FWsublim(I,J), |
688 |
|
& FWsublim(I,J)*SEAICE_deltaTtherm/SEAICE_rhoICE |
689 |
|
#endif |
690 |
|
#endif |
691 |
|
|
692 |
print '(A,4(1x,D24.15))', |
print '(A,4(1x,D24.15))', |
693 |
& 'ibi F_ia, F_ia_net, F_c ', |
& 'ibi F_ia, F_ia_net, F_c ', |
710 |
ENDDO !/* i */ |
ENDDO !/* i */ |
711 |
ENDDO !/* j */ |
ENDDO !/* j */ |
712 |
|
|
713 |
RETURN |
RETURN |
714 |
END |
END |