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

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

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


Revision 1.8 - (hide annotations) (download)
Sun Nov 14 23:32:15 2010 UTC (13 years, 7 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint63, checkpoint62o, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62w, checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62z, checkpoint62y, checkpoint62x
Changes since 1.7: +9 -10 lines
always call OBCS_APLY_PTRACER from ptracers_implicit.F (and remove
 the previous call from ptracers_integrate.F)

1 jmc 1.8 C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_implicit.F,v 1.7 2010/01/02 23:42:51 jmc Exp $
2 jmc 1.1 C $Name: $
3    
4     #include "PTRACERS_OPTIONS.h"
5    
6     CBOP
7     C !ROUTINE: PTRACERS_IMPLICIT
8    
9     C !INTERFACE: ==========================================================
10 jmc 1.5 SUBROUTINE PTRACERS_IMPLICIT(
11 jmc 1.1 U kappaRk,
12     I bi, bj, myTime, myIter, myThid )
13    
14     C !DESCRIPTION:
15     C Calls the implicit vertical advection/diffusion routine
16     C for each passive tracer.
17 jmc 1.8 C And apply open boundary conditions for each passive tracer
18     C Note: would be better to apply OBC in a dedicated S/R ;
19     C can be done here assuming no other contribution modify passive
20     C tracer after implicit vertical diffus/advect is applied.
21 jmc 1.1
22     C !USES: ===============================================================
23     IMPLICIT NONE
24     #include "SIZE.h"
25     #include "EEPARAMS.h"
26 jahn 1.6 #ifdef ALLOW_LONGSTEP
27     #include "LONGSTEP_PARAMS.h"
28     #include "LONGSTEP.h"
29     #endif
30 jmc 1.1 #include "PTRACERS_SIZE.h"
31 jmc 1.5 #include "PTRACERS_PARAMS.h"
32     #include "PTRACERS_FIELDS.h"
33 jmc 1.1 #include "PARAMS.h"
34     #include "GRID.h"
35     #include "GAD.h"
36     #include "DYNVARS.h"
37     #ifdef ALLOW_AUTODIFF_TAMC
38     # include "tamc.h"
39     # include "tamc_keys.h"
40     #endif
41    
42     C !INPUT PARAMETERS: ===================================================
43     C bi,bj :: tile indices
44     C myTime :: time in simulation
45     C myIter :: iteration number in simulation
46     C myThid :: thread number
47     INTEGER bi,bj
48     _RL myTime
49     INTEGER myIter
50     INTEGER myThid
51    
52     C !OUTPUT PARAMETERS: ==================================================
53     C KappaRk :: vertical diffusion coefficient
54     _RL kappaRk(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
55    
56     #ifdef ALLOW_PTRACERS
57    
58     C !LOCAL VARIABLES: ====================================================
59     C iTracer :: tracer index
60     INTEGER iTracer
61     INTEGER iMin,iMax,jMin,jMax
62     INTEGER GAD_TR
63     CEOP
64    
65     iMin=0
66     iMax=sNx+1
67     jMin=0
68     jMax=sNy+1
69    
70     C Loop over tracers
71     DO iTracer=1,PTRACERS_numInUse
72    
73     #ifdef ALLOW_AUTODIFF_TAMC
74     act0 = iTracer - 1
75     max0 = PTRACERS_num
76     act1 = bi - myBxLo(myThid)
77     max1 = myBxHi(myThid) - myBxLo(myThid) + 1
78     act2 = bj - myByLo(myThid)
79     max2 = myByHi(myThid) - myByLo(myThid) + 1
80     act3 = myThid - 1
81     max3 = nTx*nTy
82     act4 = ikey_dynamics - 1
83 jmc 1.5 iptrkey = (act0 + 1)
84 jmc 1.1 & + act1*max0
85     & + act2*max0*max1
86     & + act3*max0*max1*max2
87     & + act4*max0*max1*max2*max3
88     #endif /* ALLOW_AUTODIFF_TAMC */
89    
90     GAD_TR = GAD_TR1 + iTracer - 1
91     IF ( implicitDiffusion ) THEN
92     CALL CALC_3D_DIFFUSIVITY(
93     I bi,bj,iMin,iMax,jMin,jMax,
94     I GAD_TR,
95     I PTRACERS_useGMRedi(iTracer),PTRACERS_useKPP(iTracer),
96     O kappaRk,
97     I myThid)
98     ENDIF
99    
100     #ifdef ALLOW_AUTODIFF_TAMC
101 jmc 1.5 CADJ STORE kappaRk(:,:,:) = comlev1_bibj_ptracers,
102 heimbach 1.3 CADJ & key=iptrkey, byte=isbyte
103 jmc 1.5 CADJ STORE gPtr(:,:,:,bi,bj,iTracer) = comlev1_bibj_ptracers,
104 jmc 1.1 CADJ & key=iptrkey, byte=isbyte
105     #endif /* ALLOW_AUTODIFF_TAMC */
106    
107     #ifdef INCLUDE_IMPLVERTADV_CODE
108 jmc 1.2 IF ( PTRACERS_ImplVertAdv(iTracer) ) THEN
109 jmc 1.1
110     CALL GAD_IMPLICIT_R(
111 jmc 1.5 I PTRACERS_ImplVertAdv(iTracer),
112 jmc 1.1 I PTRACERS_advScheme(iTracer), GAD_TR,
113 jahn 1.6 I PTRACERS_dTLev, kappaRk,
114     #ifdef ALLOW_LONGSTEP
115     I LS_wVel,
116     #else
117     I wVel,
118     #endif
119     I pTracer(1-Olx,1-Oly,1,1,1,iTracer),
120 jmc 1.1 U gPtr(1-Olx,1-Oly,1,1,1,iTracer),
121     I bi, bj, myTime, myIter, myThid )
122    
123     ELSEIF ( implicitDiffusion ) THEN
124     #else /* INCLUDE_IMPLVERTADV_CODE */
125     IF ( implicitDiffusion ) THEN
126     #endif /* INCLUDE_IMPLVERTADV_CODE */
127    
128     CALL IMPLDIFF(
129     I bi, bj, iMin, iMax, jMin, jMax,
130 jmc 1.2 I GAD_TR, kappaRk, recip_HFacC,
131 jmc 1.1 U gPtr(1-Olx,1-Oly,1,1,1,iTracer),
132     I myThid )
133 jmc 1.8 ENDIF
134 jmc 1.1
135 jmc 1.7 #ifdef ALLOW_OBCS
136 jmc 1.8 C-- Apply open boundary conditions
137 mlosch 1.4 IF ( useOBCS ) THEN
138 jmc 1.5 CALL OBCS_APPLY_PTRACER(
139 jmc 1.8 I bi, bj, 0, iTracer,
140     U gPtr(1-Olx,1-Oly,1,bi,bj,iTracer),
141 mlosch 1.4 I myThid )
142     ENDIF
143 jmc 1.7 #endif /* ALLOW_OBCS */
144 mlosch 1.4
145 jmc 1.1 C End of tracer loop
146     ENDDO
147    
148     #endif /* ALLOW_PTRACERS */
149    
150     RETURN
151     END

  ViewVC Help
Powered by ViewVC 1.1.22