130 |
_RL d_AREAbyICE (1:sNx,1:sNy) |
_RL d_AREAbyICE (1:sNx,1:sNy) |
131 |
#endif |
#endif |
132 |
|
|
133 |
|
#ifdef SEAICE_ALLOW_AREA_RELAXATION |
134 |
|
C ICE/SNOW stocks tendency associated with relaxation towards observation |
135 |
|
_RL d_AREAbyRLX (1:sNx,1:sNy) |
136 |
|
c The change of mean ice thickness due to relaxation |
137 |
|
_RL d_HEFFbyRLX (1:sNx,1:sNy) |
138 |
|
#endif |
139 |
|
|
140 |
c The change of mean ice thickness due to out-of-bounds values following |
c The change of mean ice thickness due to out-of-bounds values following |
141 |
c sea ice dyhnamics |
c sea ice dyhnamics |
142 |
_RL d_HEFFbyNEG (1:sNx,1:sNy) |
_RL d_HEFFbyNEG (1:sNx,1:sNy) |
332 |
d_AREAbyOCN(I,J) = 0.0 _d 0 |
d_AREAbyOCN(I,J) = 0.0 _d 0 |
333 |
#endif |
#endif |
334 |
|
|
335 |
|
#ifdef SEAICE_ALLOW_AREA_RELAXATION |
336 |
|
d_AREAbyRLX(I,J) = 0.0 _d 0 |
337 |
|
d_HEFFbyRLX(I,J) = 0.0 _d 0 |
338 |
|
#endif |
339 |
|
|
340 |
d_HEFFbyNEG(I,J) = 0.0 _d 0 |
d_HEFFbyNEG(I,J) = 0.0 _d 0 |
341 |
d_HEFFbyOCNonICE(I,J) = 0.0 _d 0 |
d_HEFFbyOCNonICE(I,J) = 0.0 _d 0 |
342 |
d_HEFFbyATMonOCN(I,J) = 0.0 _d 0 |
d_HEFFbyATMonOCN(I,J) = 0.0 _d 0 |
376 |
ENDDO |
ENDDO |
377 |
ENDDO |
ENDDO |
378 |
ENDDO |
ENDDO |
379 |
#ifdef ALLOW_MEAN_SFLUX_COST_CONTRIBUTION |
#if (defined (ALLOW_MEAN_SFLUX_COST_CONTRIBUTION) || defined (ALLOW_SSH_GLOBMEAN_COST_CONTRIBUTION)) |
380 |
DO J=1-oLy,sNy+oLy |
DO J=1-oLy,sNy+oLy |
381 |
DO I=1-oLx,sNx+oLx |
DO I=1-oLx,sNx+oLx |
382 |
frWtrAtm(I,J,bi,bj) = 0.0 _d 0 |
frWtrAtm(I,J,bi,bj) = 0.0 _d 0 |
414 |
IF ( SEAICEadjMODE.EQ.0 ) THEN |
IF ( SEAICEadjMODE.EQ.0 ) THEN |
415 |
#endif |
#endif |
416 |
|
|
417 |
|
#ifdef SEAICE_ALLOW_AREA_RELAXATION |
418 |
|
CADJ STORE heff(:,:,bi,bj) = comlev1_bibj, key = iicekey,byte=isbyte |
419 |
|
CADJ STORE area(:,:,bi,bj) = comlev1_bibj, key = iicekey,byte=isbyte |
420 |
|
C 0) relax sea ice concentration towards observation |
421 |
|
IF (SEAICE_tauAreaObsRelax .GT. 0.) THEN |
422 |
|
DO J=1,sNy |
423 |
|
DO I=1,sNx |
424 |
|
C d_AREAbyRLX(i,j) = 0. _d 0 |
425 |
|
C d_HEFFbyRLX(i,j) = 0. _d 0 |
426 |
|
IF ( obsSIce(I,J,bi,bj).GT.AREA(I,J,bi,bj)) THEN |
427 |
|
d_AREAbyRLX(i,j) = |
428 |
|
& SEAICE_deltaTtherm/SEAICE_tauAreaObsRelax |
429 |
|
& * (obsSIce(I,J,bi,bj) - AREA(I,J,bi,bj)) |
430 |
|
ENDIF |
431 |
|
IF ( obsSIce(I,J,bi,bj).GT.0. _d 0 .AND. |
432 |
|
& AREA(I,J,bi,bj).EQ.0. _d 0) THEN |
433 |
|
C d_HEFFbyRLX(i,j) = 1. _d 1 * siEps * d_AREAbyRLX(i,j) |
434 |
|
d_HEFFbyRLX(i,j) = 1. _d 1 * siEps |
435 |
|
ENDIF |
436 |
|
AREA(I,J,bi,bj) = AREA(I,J,bi,bj) + d_AREAbyRLX(i,j) |
437 |
|
HEFF(I,J,bi,bj) = HEFF(I,J,bi,bj) + d_HEFFbyRLX(i,j) |
438 |
|
ENDDO |
439 |
|
ENDDO |
440 |
|
ENDIF |
441 |
|
#endif /* SEAICE_ALLOW_AREA_RELAXATION */ |
442 |
|
|
443 |
C 1) treat the case of negative values: |
C 1) treat the case of negative values: |
444 |
|
|
445 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
604 |
ENDIF |
ENDIF |
605 |
#endif |
#endif |
606 |
|
|
607 |
|
#if (defined (ALLOW_MEAN_SFLUX_COST_CONTRIBUTION) || defined (ALLOW_SSH_GLOBMEAN_COST_CONTRIBUTION)) |
608 |
|
DO J=1,sNy |
609 |
|
DO I=1,sNx |
610 |
|
AREAforAtmFW(I,J,bi,bj) = AREApreTH(I,J) |
611 |
|
ENDDO |
612 |
|
ENDDO |
613 |
|
#endif |
614 |
|
|
615 |
C 4) COMPUTE ACTUAL ICE/SNOW THICKNESS; USE MIN/MAX VALUES |
C 4) COMPUTE ACTUAL ICE/SNOW THICKNESS; USE MIN/MAX VALUES |
616 |
C TO REGULARIZE SEAICE_SOLVE4TEMP/d_AREA COMPUTATIONS |
C TO REGULARIZE SEAICE_SOLVE4TEMP/d_AREA COMPUTATIONS |
617 |
|
|
1324 |
tmpscal1 = d_HEFFbyNEG(I,J) + d_HEFFbyOCNonICE(I,J) + |
tmpscal1 = d_HEFFbyNEG(I,J) + d_HEFFbyOCNonICE(I,J) + |
1325 |
& d_HEFFbyATMonOCN(I,J) + d_HEFFbyFLOODING(I,J) |
& d_HEFFbyATMonOCN(I,J) + d_HEFFbyFLOODING(I,J) |
1326 |
& + d_HEFFbySublim(I,J) |
& + d_HEFFbySublim(I,J) |
1327 |
|
#ifdef SEAICE_ALLOW_AREA_RELAXATION |
1328 |
|
+ d_HEFFbyRLX(I,J) |
1329 |
|
#endif |
1330 |
tmpscal2 = tmpscal1 * SEAICE_salt0 * HEFFM(I,J,bi,bj) |
tmpscal2 = tmpscal1 * SEAICE_salt0 * HEFFM(I,J,bi,bj) |
1331 |
& * recip_deltaTtherm * SEAICE_rhoIce |
& * recip_deltaTtherm * SEAICE_rhoIce |
1332 |
saltFlux(I,J,bi,bj) = tmpscal2 |
saltFlux(I,J,bi,bj) = tmpscal2 |
1532 |
& - ( d_HEFFbyOCNonICE(I,J) + |
& - ( d_HEFFbyOCNonICE(I,J) + |
1533 |
& d_HSNWbyOCNonSNW(I,J)*SNOW2ICE + |
& d_HSNWbyOCNonSNW(I,J)*SNOW2ICE + |
1534 |
& d_HEFFbyNEG(I,J) + |
& d_HEFFbyNEG(I,J) + |
1535 |
|
#idef SEAICE_ALLOW_AREA_RELAXATION |
1536 |
|
& d_HEFFbyRLX(I,J) + |
1537 |
|
#endif |
1538 |
& d_HSNWbyNEG(I,J)*SNOW2ICE ) |
& d_HSNWbyNEG(I,J)*SNOW2ICE ) |
1539 |
& * maskC(I,J,kSurface,bi,bj) |
& * maskC(I,J,kSurface,bi,bj) |
1540 |
QSW(I,J,bi,bj) = a_QSWbyATM_cover(I,J) + a_QSWbyATM_open(I,J) |
QSW(I,J,bi,bj) = a_QSWbyATM_cover(I,J) + a_QSWbyATM_open(I,J) |
1622 |
& +d_HEFFbyOCNonICE(I,J) |
& +d_HEFFbyOCNonICE(I,J) |
1623 |
& +d_HEFFbyATMonOCN(I,J) |
& +d_HEFFbyATMonOCN(I,J) |
1624 |
& +d_HEFFbyNEG(I,J) |
& +d_HEFFbyNEG(I,J) |
1625 |
|
#ifdef SEAICE_ALLOW_AREA_RELAXATION |
1626 |
|
& +d_HEFFbyRLX(I,J) |
1627 |
|
#endif |
1628 |
& +d_HSNWbyNEG(I,J)*SNOW2ICE |
& +d_HSNWbyNEG(I,J)*SNOW2ICE |
1629 |
C If r_FWbySublim>0, then it is evaporated from ocean. |
C If r_FWbySublim>0, then it is evaporated from ocean. |
1630 |
& +r_FWbySublim(I,J) |
& +r_FWbySublim(I,J) |
1639 |
ENDDO |
ENDDO |
1640 |
ENDDO |
ENDDO |
1641 |
|
|
1642 |
#ifdef ALLOW_MEAN_SFLUX_COST_CONTRIBUTION |
#ifdef ALLOW_SSH_GLOBMEAN_COST_CONTRIBUTION |
1643 |
|
C-- |
1644 |
|
DO J=1,sNy |
1645 |
|
DO I=1,sNx |
1646 |
|
frWtrAtm(I,J,bi,bj) = maskC(I,J,kSurface,bi,bj)*( |
1647 |
|
& PRECIP(I,J,bi,bj) |
1648 |
|
& - EVAP(I,J,bi,bj)*( ONE - AREApreTH(I,J) ) |
1649 |
|
# ifdef ALLOW_RUNOFF |
1650 |
|
& + RUNOFF(I,J,bi,bj) |
1651 |
|
# endif /* ALLOW_RUNOFF */ |
1652 |
|
& )*rhoConstFresh |
1653 |
|
# ifdef SEAICE_ADD_SUBLIMATION_TO_FWBUDGET |
1654 |
|
& - a_FWbySublim(I,J)*AREApreTH(I,J) |
1655 |
|
# endif /* SEAICE_ADD_SUBLIMATION_TO_FWBUDGET */ |
1656 |
|
ENDDO |
1657 |
|
ENDDO |
1658 |
|
C-- |
1659 |
|
#else /* ndef ALLOW_SSH_GLOBMEAN_COST_CONTRIBUTION */ |
1660 |
|
C-- |
1661 |
|
# ifdef ALLOW_MEAN_SFLUX_COST_CONTRIBUTION |
1662 |
DO J=1,sNy |
DO J=1,sNy |
1663 |
DO I=1,sNx |
DO I=1,sNx |
1664 |
frWtrAtm(I,J,bi,bj) = maskC(I,J,kSurface,bi,bj)*( |
frWtrAtm(I,J,bi,bj) = maskC(I,J,kSurface,bi,bj)*( |
1665 |
& PRECIP(I,J,bi,bj) |
& PRECIP(I,J,bi,bj) |
1666 |
& - EVAP(I,J,bi,bj) |
& - EVAP(I,J,bi,bj) |
1667 |
& *( ONE - AREApreTH(I,J) ) |
& *( ONE - AREApreTH(I,J) ) |
1668 |
#ifdef ALLOW_RUNOFF |
# ifdef ALLOW_RUNOFF |
1669 |
& + RUNOFF(I,J,bi,bj) |
& + RUNOFF(I,J,bi,bj) |
1670 |
#endif /* ALLOW_RUNOFF */ |
# endif /* ALLOW_RUNOFF */ |
1671 |
& )*rhoConstFresh |
& )*rhoConstFresh |
1672 |
& - a_FWbySublim(I,J) * SEAICE_rhoIce * recip_deltaTtherm |
& - a_FWbySublim(I,J) * SEAICE_rhoIce * recip_deltaTtherm |
1673 |
ENDDO |
ENDDO |
1674 |
ENDDO |
ENDDO |
1675 |
#endif |
# endif |
1676 |
|
C-- |
1677 |
|
#endif /* ALLOW_SSH_GLOBMEAN_COST_CONTRIBUTION */ |
1678 |
|
|
1679 |
#endif /* ALLOW_ATM_TEMP */ |
#endif /* ALLOW_ATM_TEMP */ |
1680 |
|
|
1681 |
#ifdef SEAICE_DEBUG |
#ifdef SEAICE_DEBUG |