| 21 | 
 #include "SEAICE.h" | 
 #include "SEAICE.h" | 
| 22 | 
 #include "SEAICE_PARAMS.h" | 
 #include "SEAICE_PARAMS.h" | 
| 23 | 
 #include "SEAICE_TRACER.h" | 
 #include "SEAICE_TRACER.h" | 
| 24 | 
  | 
 #ifdef ALLOW_SALT_PLUME | 
| 25 | 
  | 
 # include "SALT_PLUME.h" | 
| 26 | 
  | 
 #endif | 
| 27 | 
  | 
  | 
| 28 | 
 C     === Routine arguments === | 
 C     === Routine arguments === | 
| 29 | 
 C     INPUT: | 
 C     INPUT: | 
| 58 | 
  | 
  | 
| 59 | 
       DO bj=myByLo(myThid),myByHi(myThid) | 
       DO bj=myByLo(myThid),myByHi(myThid) | 
| 60 | 
       DO bi=myBxLo(myThid),myBxHi(myThid) | 
       DO bi=myBxLo(myThid),myBxHi(myThid) | 
| 61 | 
       DO iTr=1,SItrMaxNum | 
       DO iTr=1,SItrNumInUse | 
| 62 | 
  | 
  | 
| 63 | 
 c 0) set ice-ocean and ice-snow exchange values | 
 c 0) set ice-ocean and ice-snow exchange values | 
| 64 | 
 c ============================================= | 
 c ============================================= | 
| 65 | 
       DO J=1,sNy | 
       DO J=1,sNy | 
| 66 | 
        DO I=1,sNx | 
        DO I=1,sNx | 
| 67 | 
         SItrFromOcean(i,j)=0. _d 0 | 
         SItrFromOcean(i,j)=SItrFromOcean0(iTr) | 
| 68 | 
         SItrFromFlood(i,j)=0. _d 0 | 
         SItrFromFlood(i,j)=SItrFromFlood0(iTr) | 
| 69 | 
         SItrExpand(i,j)=0. _d 0 | 
         SItrExpand(i,j)=SItrExpand0(iTr) | 
| 70 | 
        ENDDO | 
        ENDDO | 
| 71 | 
       ENDDO | 
       ENDDO | 
 | 
       if (SItrName(iTr).EQ.'age') then | 
  | 
 | 
 c age tracer: no age in ocean, or effect from ice cover changes | 
  | 
 | 
       elseif (SItrName(iTr).EQ.'salinity') then | 
  | 
| 72 | 
 c salinity tracer: | 
 c salinity tracer: | 
| 73 | 
  | 
       if ( (SItrName(iTr).EQ.'salinity').AND.  | 
| 74 | 
  | 
      &      (SItrFromOceanFrac(iTr).GT.ZERO) ) then | 
| 75 | 
        DO J=1,sNy | 
        DO J=1,sNy | 
| 76 | 
         DO I=1,sNx | 
         DO I=1,sNx | 
| 77 | 
          SItrFromOcean(i,j)=SIsal0 | 
          SItrFromOcean(i,j)=SItrFromOceanFrac(iTr)*salt(I,j,ks,bi,bj) | 
| 78 | 
 #ifdef SEAICE_VARIABLE_SALINITY | 
          SItrFromFlood(i,j)=SItrFromFloodFrac(iTr)*salt(I,j,ks,bi,bj) | 
 | 
          if (SIsalFRAC.GT.0.) | 
  | 
 | 
      &   SItrFromOcean(i,j)=SIsalFRAC*salt(I,j,ks,bi,bj) | 
  | 
 | 
 #endif | 
  | 
 | 
 c as of now, flooding implies no salt extraction from ocean | 
  | 
 | 
         ENDDO | 
  | 
 | 
        ENDDO | 
  | 
 | 
       elseif (SItrName(iTr).EQ.'one') then | 
  | 
 | 
 c "ice concentration" tracer that should remain .EQ.1. | 
  | 
 | 
        DO J=1,sNy | 
  | 
 | 
         DO I=1,sNx | 
  | 
 | 
          SItrFromOcean(i,j)=1. _d 0 | 
  | 
 | 
          SItrFromFlood(i,j)=1. _d 0 | 
  | 
| 79 | 
         ENDDO | 
         ENDDO | 
| 80 | 
        ENDDO | 
        ENDDO | 
| 81 | 
       endif | 
       endif | 
| 199 | 
      &   tmpscal1, 1, diagName,0,1,2,bi,bj,myThid) | 
      &   tmpscal1, 1, diagName,0,1,2,bi,bj,myThid) | 
| 200 | 
       endif | 
       endif | 
| 201 | 
 #endif | 
 #endif | 
| 202 | 
       if (SItrName(iTr).EQ.'age') then | 
  | 
| 203 | 
 c age tracer: not passed to ocean | 
       if ( (SItrName(iTr).EQ.'salinity').AND. | 
| 204 | 
       elseif (SItrName(iTr).EQ.'salinity') then | 
      &     (SEAICE_salinityTracer) ) then | 
| 205 | 
 c salinity tracer: salt flux | 
 c salinity tracer: salt flux | 
| 206 | 
 c      DO J=1,sNy | 
         DO J=1,sNy | 
| 207 | 
 c       DO I=1,sNx | 
          DO I=1,sNx | 
| 208 | 
 c        saltFlux(I,J,bi,bj) = - SItrBucket(i,j,bi,bj,iTr) | 
           saltFlux(I,J,bi,bj) = - SItrBucket(i,j,bi,bj,iTr) | 
| 209 | 
 c    &     *HEFFM(I,J,bi,bj)/SEAICE_deltaTtherm*SEAICE_rhoIce | 
      &      *HEFFM(I,J,bi,bj)/SEAICE_deltaTtherm*SEAICE_rhoIce | 
| 210 | 
 c note: at this point of the time step, that is the correct sign | 
 c note: at this point of the time step, that is the correct sign | 
| 211 | 
 c        saltPlumeFlux(I,J,bi,bj) = ... | 
 #ifdef ALLOW_SALT_PLUME | 
| 212 | 
 c       ENDDO | 
 c should work for both constant and variable ice salinity -- to be tested | 
| 213 | 
 c      ENDDO | 
           saltPlumeFlux(I,J,bi,bj) = MAX(ZERO,saltFlux(I,J,bi,bj))                                                       | 
| 214 | 
       elseif (SItrName(iTr).EQ.'one') then | 
      &      *SPsalFRAC*(salt(I,j,ks,bi,bj)-SItrFromOcean(i,j)) | 
| 215 | 
 c "ice concentration" tracer: not passed to ocean | 
 #endif | 
| 216 | 
  | 
          ENDDO | 
| 217 | 
  | 
         ENDDO | 
| 218 | 
       endif | 
       endif | 
| 219 | 
  | 
        | 
| 220 | 
       DO J=1,sNy | 
       DO J=1,sNy | 
| 221 | 
        DO I=1,sNx | 
        DO I=1,sNx | 
| 222 | 
 #ifdef ALLOW_SITRACER_DEBUG_DIAG | 
 #ifdef ALLOW_SITRACER_DEBUG_DIAG | 
| 227 | 
         SItrBucket(i,j,bi,bj,iTr)=0. _d 0 | 
         SItrBucket(i,j,bi,bj,iTr)=0. _d 0 | 
| 228 | 
        ENDDO | 
        ENDDO | 
| 229 | 
       ENDDO | 
       ENDDO | 
| 230 | 
  | 
        | 
| 231 | 
 c TAF? elseif (SItrMate(iTr).EQ.'AREA') then | 
 c TAF? elseif (SItrMate(iTr).EQ.'AREA') then | 
| 232 | 
  | 
  | 
| 233 | 
 c 4) diagnostics | 
 c 4) diagnostics | 
| 234 | 
 c ============== | 
 c ============== | 
| 235 | 
 #ifdef ALLOW_SITRACER_DEBUG_DIAG | 
 #ifdef ALLOW_SITRACER_DEBUG_DIAG |