| 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 |