/[MITgcm]/MITgcm_contrib/atnguyen/code_21Dec2012_saltplume/salt_plume_tendency_apply_s.F
ViewVC logotype

Diff of /MITgcm_contrib/atnguyen/code_21Dec2012_saltplume/salt_plume_tendency_apply_s.F

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

revision 1.1 by atn, Fri Dec 21 10:00:29 2012 UTC revision 1.2 by atn, Sun Apr 20 04:03:07 2014 UTC
# Line 34  CEOP Line 34  CEOP
34  #ifdef ALLOW_SALT_PLUME  #ifdef ALLOW_SALT_PLUME
35    
36  C     !LOCAL VARIABLES:  C     !LOCAL VARIABLES:
37        integer i, j, kLevBotm        integer i, j
38        _RL minusone        _RL minusone
39        parameter(minusone = -1.)        parameter(minusone = -1.)
40        _RL plumefrac(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL plumefrac(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
41        _RL plumetend(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL plumetend(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
42    #ifdef SALT_PLUME_VOLUME
43          _RL gS_Surf2kLev, gS_Below2kLev, gS_kLev2Above
44          integer kp1
45    #endif
46    
47  #ifdef TARGET_NEC_SX  #ifdef TARGET_NEC_SX
48        integer imt        integer imt
49        parameter( imt=(sNx+2*OLx)*(sNy+2*OLy) )        parameter( imt=(sNx+2*OLx)*(sNy+2*OLy) )
# Line 49  C     !LOCAL VARIABLES: Line 54  C     !LOCAL VARIABLES:
54        _RL plumekb(two2), SPdepth(two2)        _RL plumekb(two2), SPdepth(two2)
55  #endif  #endif
56    
57  #ifdef TARGET_NEC_SX  #ifndef SALT_PLUME_VOLUME
 C     The vector version computes plumekb2D at each grid point, but this  
 C     is still faster than non-vector code.  
       IF ( kLev .LT. Nr ) THEN  
        DO j=1-Oly,sNy+Oly  
         DO i=1-Olx,sNx+Olx  
          plumekb2D(i,j)=abs(rF(kLev))  
         ENDDO  
        ENDDO  
        CALL SALT_PLUME_FRAC(  
      I      imt,minusone,SaltPlumeDepth(1-Olx,1-Oly,bi,bj),  
      U      plumekb2D,  
      I      myTime, 1, myThid )  
        DO j=1-Oly,sNy+Oly  
         DO i=1-Olx,sNx+Olx  
          plumefrac(I,J) = plumekb2D(i,j)*maskC(i,j,klev,bi,bj)  
          plumekb2D(i,j) = abs(rF(kLev+1))  
         ENDDO  
        ENDDO  
        CALL SALT_PLUME_FRAC(  
      I      imt,minusone,SaltPlumeDepth(1-Olx,1-Oly,bi,bj),  
      U      plumekb2D,  
      I      myTime, 1, myThid )  
        kLevBotm = klev+1  
        IF (klev.EQ.Nr) THEN  
         kLevBotm = klev  
        ENDIF  
        DO j=1-Oly,sNy+Oly  
         DO i=1-Olx,sNx+Olx  
 C     Penetrating saltplume fraction:  
          IF ( SaltPlumeDepth(i,j,bi,bj) .GT. abs(rF(kLev)) ) THEN  
           IF(kLev.GT.1) THEN  
             plumefrac(i,j)=plumekb2D(i,j)*maskC(i,j,kLevBotm,bi,bj)  
      &             -plumefrac(i,j)  
           ELSE  
             plumefrac(i,j)=plumekb2D(i,j)*maskC(i,j,kLevBotm,bi,bj)  
           ENDIF  
           plumetend(I,J) = saltPlumeFlux(i,j,bi,bj)*plumefrac(I,J)  
           gS(i,j,kLev,bi,bj) = gS(i,j,kLev,bi,bj)+plumetend(I,J)  
      &        *recip_drF(kLev)*mass2rUnit*_recip_hFacC(i,j,kLev,bi,bj)  
          ELSE  
           plumefrac(i,j)=0. _d 0          
           plumetend(I,J) = 0. _d 0  
          ENDIF  
         ENDDO  
        ENDDO  
       ENDIF  
 #else  
58        DO j=jMin,jMax        DO j=jMin,jMax
59         DO i=iMin,iMax         DO i=iMin,iMax
60  C Penetrating saltplume fraction:  C Penetrating saltplume fraction:cumulativeSP(klev+1)-cumulativeSP(klev)
61          IF ( SaltPlumeDepth(i,j,bi,bj) .GT. abs(rF(kLev)) ) THEN          IF ( SaltPlumeDepth(i,j,bi,bj) .GT. abs(rF(kLev)) ) THEN
62           plumefrac(I,J) = 0. _d 0           plumefrac(I,J) = 0. _d 0
63           plumekb(1)=abs(rF(klev))           plumekb(1)=abs(rF(klev))
# Line 110  C Penetrating saltplume fraction: Line 68  C Penetrating saltplume fraction:
68       I                   two2,minusone,SPdepth,       I                   two2,minusone,SPdepth,
69       U                   plumekb,       U                   plumekb,
70       I                   myTime, 1, myThid )       I                   myTime, 1, myThid )
71           kLevBotm = klev+1           plumefrac(I,J) = (plumekb(2)-plumekb(1))*maskC(i,j,klev,bi,bj)
          IF (klev.EQ.Nr) THEN  
            kLevBotm = klev  
          ENDIF  
          IF(kLev.GT.1) THEN  
            plumefrac(I,J) = plumekb(2)*maskC(i,j,kLevBotm,bi,bj)  
      &            -plumekb(1)*maskC(i,j,kLev, bi,bj)  
          ELSE  
            plumefrac(I,J) = plumekb(2)*maskC(i,j,kLevBotm,bi,bj)  
          ENDIF  
72           plumetend(I,J) = saltPlumeFlux(i,j,bi,bj)*plumefrac(I,J)           plumetend(I,J) = saltPlumeFlux(i,j,bi,bj)*plumefrac(I,J)
73           gS(i,j,kLev,bi,bj)=gS(i,j,kLev,bi,bj)+plumetend(I,J)           gS(i,j,kLev,bi,bj)=gS(i,j,kLev,bi,bj)+plumetend(I,J)
74       &        *recip_drF(kLev)*mass2rUnit*_recip_hFacC(i,j,kLev,bi,bj)       &        *recip_drF(kLev)*mass2rUnit*_recip_hFacC(i,j,kLev,bi,bj)
# Line 129  C Penetrating saltplume fraction: Line 78  C Penetrating saltplume fraction:
78          ENDIF          ENDIF
79         ENDDO         ENDDO
80        ENDDO        ENDDO
81  #endif /* TARGET_NEC_SX */  #else /* SALT_PLUME_VOLUME */
82          kp1 = kLev + 1
83          if(kLev.EQ.Nr) kp1 = kLev
84          DO j=jMin,jMax
85           DO i=iMin,iMax
86    Catn: check unit
87            gS_Surf2kLev  = dSPvolSurf2kLev(i,j,kLev,bi,bj)
88         &                * SPbrineSalt(i,j,bi,bj)
89            gS_Below2kLev = dSPvolBelow2kLev(i,j,kLev,bi,bj)
90                          * salt(i,j,kp1,bi,bj)
91    Catn: gS_kLev2Above works even for kLev=1 because this is how much
92    C volume of original salinity was replaced by same volume of brine.
93    C Note: by design, dSPvolkLev2Above already is negative
94            gS_kLev2Above = dSPvolkLev2Above(i,j,kLev,bi,bj)
95                          * salt(i,j,kLev,bi,bj)
96            plumetend(i,j)=gS_Surf2kLev + gS_Below2kLev + gS_kLev2Above
97            gS(i,j,kLev,bi,bj)=gS(i,j,kLev,bi,bj)+plumetend(I,J)
98         &        *recip_drF(kLev)*mass2rUnit*_recip_hFacC(i,j,kLev,bi,bj)
99           ENDDO
100          ENDDO
101    #endif /* SALT_PLUME_VOLUME */
102    
103  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
104    #ifndef SALT_PLUME_VOLUME
105        IF ( useDiagnostics ) THEN        IF ( useDiagnostics ) THEN
106         CALL DIAGNOSTICS_FILL (         CALL DIAGNOSTICS_FILL (
107       &      plumefrac,'PLUMEKB ',kLev,1,2,bi,bj,myThid )       &      plumefrac,'PLUMEKB ',kLev,1,2,bi,bj,myThid )
108    #endif /* SALT_PLUME_VOLUME */
109         CALL DIAGNOSTICS_FILL (         CALL DIAGNOSTICS_FILL (
110       &      plumetend,'oceSPtnd',kLev,1,2,bi,bj,myThid )       &      plumetend,'oceSPtnd',kLev,1,2,bi,bj,myThid )
111        ENDIF        ENDIF

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

  ViewVC Help
Powered by ViewVC 1.1.22