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

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

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


Revision 1.7 - (show annotations) (download)
Sat Jan 2 23:42:51 2010 UTC (14 years, 8 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62c, checkpoint62b, checkpoint62a, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62n, checkpoint62m, checkpoint62l
Changes since 1.6: +9 -7 lines
avoid unused variables

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

  ViewVC Help
Powered by ViewVC 1.1.22