123 |
C conversion factors to go from precip (m/s) unit to HEFF (ice meters) |
C conversion factors to go from precip (m/s) unit to HEFF (ice meters) |
124 |
_RL convertPRECIP2HI, convertHI2PRECIP |
_RL convertPRECIP2HI, convertHI2PRECIP |
125 |
|
|
126 |
|
#ifdef ALLOW_DIAGNOSTICS |
127 |
C ICE/SNOW stocks tendencies associated with the various melt/freeze processes |
C ICE/SNOW stocks tendencies associated with the various melt/freeze processes |
128 |
_RL d_AREAbyATM (1:sNx,1:sNy) |
_RL d_AREAbyATM (1:sNx,1:sNy) |
129 |
_RL d_AREAbyOCN (1:sNx,1:sNy) |
_RL d_AREAbyOCN (1:sNx,1:sNy) |
130 |
_RL d_AREAbyICE (1:sNx,1:sNy) |
_RL d_AREAbyICE (1:sNx,1:sNy) |
131 |
|
#endif |
132 |
|
|
133 |
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 |
134 |
c sea ice dyhnamics |
c sea ice dyhnamics |
312 |
a_QbyOCN (I,J) = 0.0 _d 0 |
a_QbyOCN (I,J) = 0.0 _d 0 |
313 |
r_QbyOCN (I,J) = 0.0 _d 0 |
r_QbyOCN (I,J) = 0.0 _d 0 |
314 |
|
|
315 |
|
#ifdef ALLOW_DIAGNOSTICS |
316 |
d_AREAbyATM(I,J) = 0.0 _d 0 |
d_AREAbyATM(I,J) = 0.0 _d 0 |
317 |
d_AREAbyICE(I,J) = 0.0 _d 0 |
d_AREAbyICE(I,J) = 0.0 _d 0 |
318 |
d_AREAbyOCN(I,J) = 0.0 _d 0 |
d_AREAbyOCN(I,J) = 0.0 _d 0 |
319 |
|
#endif |
320 |
|
|
321 |
d_HEFFbyNEG(I,J) = 0.0 _d 0 |
d_HEFFbyNEG(I,J) = 0.0 _d 0 |
322 |
d_HEFFbyOCNonICE(I,J) = 0.0 _d 0 |
d_HEFFbyOCNonICE(I,J) = 0.0 _d 0 |
820 |
tmpscal1 = SEAICE_availHeatFracFrz |
tmpscal1 = SEAICE_availHeatFracFrz |
821 |
ENDIF |
ENDIF |
822 |
c efficiency of turbulent fluxes : dependency to AREA (McPhee cases) |
c efficiency of turbulent fluxes : dependency to AREA (McPhee cases) |
823 |
if ( (SEAICEturbFluxFormula.EQ.3).AND. |
if ( (SEAICEturbFluxFormula.NE.4).AND. |
824 |
& (AREApreTH(I,J) .GE. 0. _d 0) ) then |
& (AREApreTH(I,J) .GT. 0. _d 0) ) then |
825 |
MixedLayerTurbulenceFactor = ONE - AREApreTH(I,J) * |
MixedLayerTurbulenceFactor = ONE - |
826 |
& (MCPHEE_TAPER_FAC-1) / MCPHEE_TAPER_FAC |
& SEAICE_availHeatTaper * AREApreTH(I,J) |
827 |
elseif ( (SEAICEturbFluxFormula.EQ.4).AND. |
elseif ( (SEAICEturbFluxFormula.EQ.4).AND. |
828 |
& (AREApreTH(I,J) .LE. 0. _d 0) ) then |
& (AREApreTH(I,J) .GT. 0. _d 0) ) then |
829 |
MixedLayerTurbulenceFactor = ONE/MCPHEE_TAPER_FAC |
MixedLayerTurbulenceFactor = ONE- SEAICE_availHeatTaper |
830 |
else |
else |
831 |
MixedLayerTurbulenceFactor = ONE |
MixedLayerTurbulenceFactor = ONE |
832 |
endif |
endif |
1159 |
tmpscal3 = MIN(ZERO,tmpscal2) |
tmpscal3 = MIN(ZERO,tmpscal2) |
1160 |
endif |
endif |
1161 |
|
|
|
C to be fixed soon : proper fill of d_AREAbyATM, d_AREAbyICE, d_AREAbyOCN |
|
|
d_AREAbyATM(I,J)=recip_HO*tmpscal4+HALF*recip_HH*tmpscal3 |
|
|
d_AREAbyOCN(I,J)=ZERO |
|
|
d_AREAbyICE(I,J)=ZERO |
|
|
|
|
1162 |
C apply tendency |
C apply tendency |
1163 |
IF ( (HEFF(i,j,bi,bj).GT.0. _d 0).OR. |
IF ( (HEFF(i,j,bi,bj).GT.0. _d 0).OR. |
1164 |
& (HSNOW(i,j,bi,bj).GT.0. _d 0) ) THEN |
& (HSNOW(i,j,bi,bj).GT.0. _d 0) ) THEN |
1171 |
#ifdef ALLOW_SITRACER |
#ifdef ALLOW_SITRACER |
1172 |
SItrAREA(I,J,bi,bj,3)=AREA(I,J,bi,bj) |
SItrAREA(I,J,bi,bj,3)=AREA(I,J,bi,bj) |
1173 |
#endif |
#endif |
1174 |
|
#ifdef ALLOW_DIAGNOSTICS |
1175 |
|
d_AREAbyATM(I,J)= |
1176 |
|
& recip_HO*MAX(ZERO,d_HEFFbyATMonOCN_open(I,J)) |
1177 |
|
& +HALF*recip_HH*MIN(0. _d 0,d_HEFFbyATMonOCN_open(I,J)) |
1178 |
|
d_AREAbyICE(I,J)= |
1179 |
|
& HALF*recip_HH*MIN(0. _d 0,d_HEFFbyATMonOCN_cover(I,J)) |
1180 |
|
d_AREAbyOCN(I,J)= |
1181 |
|
& HALF*recip_HH*MIN( 0. _d 0,d_HEFFbyOCNonICE(I,J) ) |
1182 |
|
#endif |
1183 |
ENDDO |
ENDDO |
1184 |
ENDDO |
ENDDO |
1185 |
|
|
1433 |
ENDDO |
ENDDO |
1434 |
ENDDO |
ENDDO |
1435 |
|
|
1436 |
#ifdef SEAICE_HEAT_CONSERV_FIX |
#ifndef SEAICE_DISABLE_HEATCONSFIX |
1437 |
#ifndef SEAICE_GROWTH_LEGACY |
C treat advective heat flux by ocean to ice water exchange (at 0decC) |
1438 |
|
C =================================================================== |
1439 |
|
IF ( SEAICEheatConsFix ) THEN |
1440 |
c Unlike for evap and precip, the temperature of gained/lost |
c Unlike for evap and precip, the temperature of gained/lost |
1441 |
c ocean liquid water due to melt/freeze of solid water cannot be chosen |
c ocean liquid water due to melt/freeze of solid water cannot be chosen |
1442 |
c to be e.g. the ocean SST. It must be done at 0degC. The fix below anticipates |
c to be e.g. the ocean SST. It must be done at 0degC. The fix below anticipates |
1446 |
c the small error of the synchronous time stepping case (see external_forcing_surf.F). |
c the small error of the synchronous time stepping case (see external_forcing_surf.F). |
1447 |
DO J=1,sNy |
DO J=1,sNy |
1448 |
DO I=1,sNx |
DO I=1,sNx |
1449 |
|
#ifdef ALLOW_DIAGNOSTICS |
1450 |
c store unaltered QNET for diagnostic purposes |
c store unaltered QNET for diagnostic purposes |
1451 |
DIAGarrayA(I,J)=-QNET(I,J,bi,bj) |
DIAGarrayA(I,J)=QNET(I,J,bi,bj) |
1452 |
|
#endif |
1453 |
c compute the ocean water going to ice/snow, in precip units |
c compute the ocean water going to ice/snow, in precip units |
1454 |
tmpscal3=rhoConstFresh*maskC(I,J,kSurface,bi,bj)* |
tmpscal3=rhoConstFresh*maskC(I,J,kSurface,bi,bj)* |
1455 |
& ( d_HSNWbyATMonSNW(I,J)/ICE2SNOW |
& ( d_HSNWbyATMonSNW(I,J)/ICE2SNOW |
1467 |
QNET(I,J,bi,bj)=QNET(I,J,bi,bj) - tmpscal3* |
QNET(I,J,bi,bj)=QNET(I,J,bi,bj) - tmpscal3* |
1468 |
& HeatCapacity_Cp * theta(I,J,kSurface,bi,bj) |
& HeatCapacity_Cp * theta(I,J,kSurface,bi,bj) |
1469 |
ENDIF |
ENDIF |
1470 |
|
#ifdef ALLOW_DIAGNOSTICS |
1471 |
|
c back out the eventual TFLUX adjustement and fill diag |
1472 |
|
DIAGarrayA(I,J)=QNET(I,J,bi,bj)-DIAGarrayA(I,J) |
1473 |
|
#endif |
1474 |
ENDDO |
ENDDO |
1475 |
ENDDO |
ENDDO |
1476 |
|
ENDIF |
1477 |
#ifdef ALLOW_DIAGNOSTICS |
#ifdef ALLOW_DIAGNOSTICS |
1478 |
C temporary (?) output of unaltered QNET using SDIAG6 |
CALL DIAGNOSTICS_FILL(DIAGarrayA, |
1479 |
c CALL DIAGNOSTICS_FILL(DIAGarrayA, |
& 'SIaaflux',0,1,3,bi,bj,myThid) |
|
c & 'SDIAG6 ',0,1,3,bi,bj,myThid) |
|
1480 |
#endif |
#endif |
1481 |
ENDIF |
ENDIF |
1482 |
#endif |
#endif |
|
#endif |
|
1483 |
|
|
1484 |
C compute net fresh water flux leaving/entering |
C compute net fresh water flux leaving/entering |
1485 |
C the ocean, accounting for fresh/salt water stocks. |
C the ocean, accounting for fresh/salt water stocks. |
1662 |
CALL DIAGNOSTICS_FILL(DIAGarrayC,'SIrsSubl',0,1,3,bi,bj,myThid) |
CALL DIAGNOSTICS_FILL(DIAGarrayC,'SIrsSubl',0,1,3,bi,bj,myThid) |
1663 |
CALL DIAGNOSTICS_FILL(DIAGarrayB,'SIhl ',0,1,3,bi,bj,myThid) |
CALL DIAGNOSTICS_FILL(DIAGarrayB,'SIhl ',0,1,3,bi,bj,myThid) |
1664 |
|
|
|
#ifdef SEAICE_HEAT_CONSERV_FIX |
|
1665 |
DO J=1,sNy |
DO J=1,sNy |
1666 |
DO I=1,sNx |
DO I=1,sNx |
1667 |
c compute ice/snow water going to atm, in precip units |
c compute ice/snow water going to atm, in precip units |
1696 |
& -tmpscal1-tmpscal2 |
& -tmpscal1-tmpscal2 |
1697 |
ENDDO |
ENDDO |
1698 |
ENDDO |
ENDDO |
1699 |
c CALL DIAGNOSTICS_FILL(DIAGarrayA, |
CALL DIAGNOSTICS_FILL(DIAGarrayA, |
1700 |
C until SItflux is added to diags, output it using SDIAG5 |
& 'SItflux ',0,1,3,bi,bj,myThid) |
|
c & 'SDIAG5 ',0,1,3,bi,bj,myThid) |
|
|
#endif /* SEAICE_HEAT_CONSERV_FIX */ |
|
1701 |
#endif /* ALLOW_ATM_TEMP */ |
#endif /* ALLOW_ATM_TEMP */ |
1702 |
|
|
1703 |
ENDIF |
ENDIF |