/[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.5 - (show annotations) (download)
Mon Nov 5 18:48:04 2007 UTC (16 years, 6 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint60, checkpoint61, checkpoint59q, checkpoint59p, checkpoint59r, checkpoint59m, checkpoint59l, checkpoint59o, checkpoint59n, checkpoint59k, checkpoint59j, checkpoint61f, checkpoint61g, checkpoint61d, checkpoint61e, checkpoint61b, checkpoint61c, checkpoint61a, checkpoint61n, checkpoint61o, checkpoint61l, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61h, checkpoint61i, checkpoint61r, checkpoint61p, checkpoint61q
Changes since 1.4: +9 -8 lines
split PTRACERS.h in 2 header files: PTRACERS_FIELDS.h & PTRACERS_PARAMS.h

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

  ViewVC Help
Powered by ViewVC 1.1.22