/[MITgcm]/MITgcm/pkg/ptracers/ptracers_implicit.F
ViewVC logotype

Diff of /MITgcm/pkg/ptracers/ptracers_implicit.F

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

revision 1.1 by jmc, Sun Dec 5 22:22:06 2004 UTC revision 1.10 by jmc, Thu Mar 8 17:13:31 2012 UTC
# Line 7  CBOP Line 7  CBOP
7  C !ROUTINE: PTRACERS_IMPLICIT  C !ROUTINE: PTRACERS_IMPLICIT
8    
9  C !INTERFACE: ==========================================================  C !INTERFACE: ==========================================================
10        SUBROUTINE PTRACERS_IMPLICIT(        SUBROUTINE PTRACERS_IMPLICIT(
11       U                              kappaRk,       U                              kappaRk,
12         I                              recip_hFac,
13       I                              bi, bj, myTime, myIter, myThid )       I                              bi, bj, myTime, myIter, myThid )
14    
15  C !DESCRIPTION:  C !DESCRIPTION:
16  C     Calls the implicit vertical advection/diffusion routine  C     Calls the implicit vertical advection/diffusion routine
17  C     for each passive tracer.  C     for each passive tracer.
18    C     And apply open boundary conditions for each passive tracer
19    C Note: would be better to apply OBC in a dedicated S/R ;
20    C     can be done here assuming no other contribution modify passive
21    C     tracer after implicit vertical diffus/advect is applied.
22    
23  C !USES: ===============================================================  C !USES: ===============================================================
24        IMPLICIT NONE        IMPLICIT NONE
25  #include "SIZE.h"  #include "SIZE.h"
26  #include "EEPARAMS.h"  #include "EEPARAMS.h"
27    #ifdef ALLOW_LONGSTEP
28    #include "LONGSTEP_PARAMS.h"
29    #include "LONGSTEP.h"
30    #endif
31  #include "PTRACERS_SIZE.h"  #include "PTRACERS_SIZE.h"
32  #include "PTRACERS.h"  #include "PTRACERS_PARAMS.h"
33    #include "PTRACERS_START.h"
34    #include "PTRACERS_FIELDS.h"
35  #include "PARAMS.h"  #include "PARAMS.h"
36  #include "GRID.h"  #include "GRID.h"
37  #include "GAD.h"  #include "GAD.h"
# Line 31  C !USES: =============================== Line 42  C !USES: ===============================
42  #endif  #endif
43    
44  C !INPUT PARAMETERS: ===================================================  C !INPUT PARAMETERS: ===================================================
45  C  bi,bj   :: tile indices  C  recip_hFac :: Inverse of cell open-depth factor
46  C  myTime  :: time in simulation  C  bi,bj      :: tile indices
47  C  myIter  :: iteration number in simulation  C  myTime     :: time in simulation
48  C  myThid  :: thread number  C  myIter     :: iteration number in simulation
49    C  myThid     :: thread number
50          _RS     recip_hFac(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
51        INTEGER bi,bj        INTEGER bi,bj
52        _RL     myTime        _RL     myTime
53        INTEGER myIter        INTEGER myIter
54        INTEGER myThid        INTEGER myThid
55    
56  C !OUTPUT PARAMETERS: ==================================================  C !OUTPUT PARAMETERS: ==================================================
57  C  KappaRk :: vertical diffusion coefficient  C  KappaRk    :: vertical diffusion coefficient
58        _RL kappaRk(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL     kappaRk(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
59    
60  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
61    
# Line 60  CEOP Line 73  CEOP
73    
74  C Loop over tracers  C Loop over tracers
75        DO iTracer=1,PTRACERS_numInUse        DO iTracer=1,PTRACERS_numInUse
76           IF ( PTRACERS_StepFwd(iTracer) ) THEN
77    
78  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
79            act0 = iTracer - 1            act0 = iTracer - 1
# Line 71  C Loop over tracers Line 85  C Loop over tracers
85            act3 = myThid - 1            act3 = myThid - 1
86            max3 = nTx*nTy            max3 = nTx*nTy
87            act4 = ikey_dynamics - 1            act4 = ikey_dynamics - 1
88            iptrkey = (act0 + 1)            iptrkey = (act0 + 1)
89       &                      + act1*max0       &                      + act1*max0
90       &                      + act2*max0*max1       &                      + act2*max0*max1
91       &                      + act3*max0*max1*max2       &                      + act3*max0*max1*max2
# Line 89  C Loop over tracers Line 103  C Loop over tracers
103          ENDIF          ENDIF
104    
105  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
106  CADJ STORE gPtr(:,:,:,bi,bj,iTracer) = comlev1_bibj_ptracers,  CADJ STORE kappaRk(:,:,:) = comlev1_bibj_ptracers,
107    CADJ &     key=iptrkey, byte=isbyte
108    CADJ STORE gPtr(:,:,:,bi,bj,iTracer) = comlev1_bibj_ptracers,
109  CADJ &     key=iptrkey, byte=isbyte  CADJ &     key=iptrkey, byte=isbyte
110  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
111    
112  #ifdef INCLUDE_IMPLVERTADV_CODE  #ifdef INCLUDE_IMPLVERTADV_CODE
113  c       IF ( PTRACERS_ImplVertAdv(iTracer) ) THEN          IF ( PTRACERS_ImplVertAdv(iTracer) ) THEN
         IF ( (dTtracerLev(1).NE.dTtracerLev(Nr).AND.implicitDiffusion)  
      &    .OR.PTRACERS_ImplVertAdv(iTracer) ) THEN  
114    
115            CALL GAD_IMPLICIT_R(            CALL GAD_IMPLICIT_R(
116       I         PTRACERS_ImplVertAdv(iTracer),       I         PTRACERS_ImplVertAdv(iTracer),
117       I         PTRACERS_advScheme(iTracer), GAD_TR,       I         PTRACERS_advScheme(iTracer), GAD_TR,
118       I         kappaRk, wVel, pTracer(1-Olx,1-Oly,1,1,1,iTracer),       I         PTRACERS_dTLev, kappaRk, recip_hFac,
119       U         gPtr(1-Olx,1-Oly,1,1,1,iTracer),  #ifdef ALLOW_LONGSTEP
120         I         LS_wVel,
121    #else
122         I         wVel,
123    #endif
124         I         pTracer(1-OLx,1-OLy,1,1,1,iTracer),
125         U         gPtr(1-OLx,1-OLy,1,1,1,iTracer),
126       I         bi, bj, myTime, myIter, myThid )       I         bi, bj, myTime, myIter, myThid )
127    
128          ELSEIF ( implicitDiffusion ) THEN          ELSEIF ( implicitDiffusion ) THEN
# Line 112  c       IF ( PTRACERS_ImplVertAdv(iTrace Line 132  c       IF ( PTRACERS_ImplVertAdv(iTrace
132    
133            CALL IMPLDIFF(            CALL IMPLDIFF(
134       I         bi, bj, iMin, iMax, jMin, jMax,       I         bi, bj, iMin, iMax, jMin, jMax,
135       I         dTtracerLev(1), kappaRk, recip_HFacC,       I         GAD_TR, kappaRk, recip_hFac,
136       U         gPtr(1-Olx,1-Oly,1,1,1,iTracer),       U         gPtr(1-OLx,1-OLy,1,1,1,iTracer),
137       I         myThid )       I         myThid )
138            ENDIF
139    
140    #ifdef ALLOW_OBCS
141    C--     Apply open boundary conditions
142            IF ( useOBCS ) THEN
143              CALL OBCS_APPLY_PTRACER(
144         I         bi, bj, 0, iTracer,
145         U         gPtr(1-OLx,1-OLy,1,bi,bj,iTracer),
146         I         myThid )
147          ENDIF          ENDIF
148    #endif /* ALLOW_OBCS */
149    
150  C End of tracer loop  C End of tracer loop
151           ENDIF
152        ENDDO        ENDDO
153    
154  #endif /* ALLOW_PTRACERS */  #endif /* ALLOW_PTRACERS */

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

  ViewVC Help
Powered by ViewVC 1.1.22