/[MITgcm]/MITgcm/pkg/seaice/seaice_tracer_phys.F
ViewVC logotype

Diff of /MITgcm/pkg/seaice/seaice_tracer_phys.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.5 by gforget, Fri Feb 3 13:34:32 2012 UTC revision 1.9 by gforget, Thu Dec 27 23:05:47 2012 UTC
# Line 5  C $Name$ Line 5  C $Name$
5    
6  CStartOfInterface  CStartOfInterface
7        SUBROUTINE SEAICE_TRACER_PHYS( myTime, myIter, myThid )        SUBROUTINE SEAICE_TRACER_PHYS( myTime, myIter, myThid )
8  C     /=======================================================\  C     *=======================================================*
9  C     | SUBROUTINE seaice_tracer_phys                         |  C     | SUBROUTINE seaice_tracer_phys
10  C     | o Time step SItr/SItrEFF as a result of               |  C     | o Time step SItr/SItrEFF as a result of
11  C     |   seaice thermodynamics and specific tracer physics   |  C     |   seaice thermodynamics and specific tracer physics
12  C     \=======================================================/  C     *=======================================================*
13        IMPLICIT NONE        IMPLICIT NONE
14    
15  C     === Global variables ===  C     === Global variables ===
# Line 21  C     === Global variables === Line 21  C     === Global variables ===
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:
# Line 55  cgf eventually I will need to handle the Line 58  cgf eventually I will need to handle the
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
# Line 183  c salinity tracer: no specific process Line 173  c salinity tracer: no specific process
173  c "ice concentration" tracer: no specific process  c "ice concentration" tracer: no specific process
174        elseif (SItrName(iTr).EQ.'ridge') then        elseif (SItrName(iTr).EQ.'ridge') then
175  c simple, made up, ice surface roughness index prototype  c simple, made up, ice surface roughness index prototype
 #ifndef SEAICE_GROWTH_LEGACY  
176         DO J=1,sNy         DO J=1,sNy
177          DO I=1,sNx          DO I=1,sNx
178  c ridging increases roughness  c ridging increases roughness
# Line 197  c ice melt reduces ridges/roughness Line 186  c ice melt reduces ridges/roughness
186            SItracer(i,j,bi,bj,iTr)=SItracer(i,j,bi,bj,iTr)*tmpscal1            SItracer(i,j,bi,bj,iTr)=SItracer(i,j,bi,bj,iTr)*tmpscal1
187          ENDDO          ENDDO
188         ENDDO         ENDDO
 #endif  
189        endif        endif
190  c 3) ice-ocean tracer exchange/mapping to external variables  c 3) ice-ocean tracer exchange/mapping to external variables
191  c ==========================================================  c ==========================================================
192  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
193        if (SItrMate(iTr).EQ.'HEFF') then        if (SItrMate(iTr).EQ.'HEFF') then
194          WRITE(diagName,'(A4,I2.2,A2)') 'SItr',iTr,'FX'          WRITE(diagName,'(A4,I2.2,A2)') 'SItr',iTr,'Fx'
195          tmpscal1=-ONE/SEAICE_deltaTtherm*SEAICE_rhoIce          tmpscal1=-ONE/SEAICE_deltaTtherm*SEAICE_rhoIce
196          CALL DIAGNOSTICS_SCALE_FILL(SItrBucket(1-oLx,1-oLy,bi,bj,iTr),          CALL DIAGNOSTICS_SCALE_FILL(SItrBucket(1-OLx,1-OLy,bi,bj,iTr),
197       &   tmpscal1, 1, diagName,0,1,2,bi,bj,myThid)       &   tmpscal1, 1, diagName,0,1,2,bi,bj,myThid)
198        endif        endif
199  #endif  #endif
200        if (SItrName(iTr).EQ.'age') then  
201  c age tracer: not passed to ocean        if ( (SItrName(iTr).EQ.'salinity').AND.
202        elseif (SItrName(iTr).EQ.'salinity') then       &     (SEAICE_salinityTracer) ) then
203  c salinity tracer: salt flux  c salinity tracer: salt flux
204  c      DO J=1,sNy          DO J=1,sNy
205  c       DO I=1,sNx           DO I=1,sNx
206  c        saltFlux(I,J,bi,bj) = - SItrBucket(i,j,bi,bj,iTr)            saltFlux(I,J,bi,bj) = - SItrBucket(i,j,bi,bj,iTr)
207  c    &     *HEFFM(I,J,bi,bj)/SEAICE_deltaTtherm*SEAICE_rhoIce       &      *HEFFM(I,J,bi,bj)/SEAICE_deltaTtherm*SEAICE_rhoIce
208  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
209  c        saltPlumeFlux(I,J,bi,bj) = ...  #ifdef ALLOW_SALT_PLUME
210  c       ENDDO  c should work for both constant and variable ice salinity -- to be tested
211  c      ENDDO            saltPlumeFlux(I,J,bi,bj) = MAX(ZERO,saltFlux(I,J,bi,bj))
212        elseif (SItrName(iTr).EQ.'one') then       &      *SPsalFRAC*(salt(I,j,ks,bi,bj)-SItrFromOcean(i,j))
213  c "ice concentration" tracer: not passed to ocean  #endif
214             ENDDO
215            ENDDO
216        endif        endif
217    
218        DO J=1,sNy        DO J=1,sNy
219         DO I=1,sNx         DO I=1,sNx
220  #ifdef ALLOW_SITRACER_DEBUG_DIAG  #ifdef ALLOW_SITRACER_DEBUG_DIAG
# Line 234  c empty bucket Line 225  c empty bucket
225          SItrBucket(i,j,bi,bj,iTr)=0. _d 0          SItrBucket(i,j,bi,bj,iTr)=0. _d 0
226         ENDDO         ENDDO
227        ENDDO        ENDDO
228    
229  c TAF? elseif (SItrMate(iTr).EQ.'AREA') then  c TAF? elseif (SItrMate(iTr).EQ.'AREA') then
230    
231  c 4) diagnostics  c 4) diagnostics
232  c ==============  c ==============
233  #ifdef ALLOW_SITRACER_DEBUG_DIAG  #ifdef ALLOW_SITRACER_DEBUG_DIAG

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.9

  ViewVC Help
Powered by ViewVC 1.1.22