/[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.6 - (show annotations) (download)
Fri Jun 26 23:10:10 2009 UTC (14 years, 10 months ago) by jahn
Branch: MAIN
CVS Tags: checkpoint62, checkpoint61v, checkpoint61w, checkpoint61t, checkpoint61u, checkpoint61s, checkpoint61z, checkpoint61x, checkpoint61y
Changes since 1.5: +12 -2 lines
add package longstep

1 C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_implicit.F,v 1.5 2007/11/05 18:48:04 jmc 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 INTEGER K
60 CEOP
61
62 iMin=0
63 iMax=sNx+1
64 jMin=0
65 jMax=sNy+1
66
67 C Loop over tracers
68 DO iTracer=1,PTRACERS_numInUse
69
70 #ifdef ALLOW_AUTODIFF_TAMC
71 act0 = iTracer - 1
72 max0 = PTRACERS_num
73 act1 = bi - myBxLo(myThid)
74 max1 = myBxHi(myThid) - myBxLo(myThid) + 1
75 act2 = bj - myByLo(myThid)
76 max2 = myByHi(myThid) - myByLo(myThid) + 1
77 act3 = myThid - 1
78 max3 = nTx*nTy
79 act4 = ikey_dynamics - 1
80 iptrkey = (act0 + 1)
81 & + act1*max0
82 & + act2*max0*max1
83 & + act3*max0*max1*max2
84 & + act4*max0*max1*max2*max3
85 #endif /* ALLOW_AUTODIFF_TAMC */
86
87 GAD_TR = GAD_TR1 + iTracer - 1
88 IF ( implicitDiffusion ) THEN
89 CALL CALC_3D_DIFFUSIVITY(
90 I bi,bj,iMin,iMax,jMin,jMax,
91 I GAD_TR,
92 I PTRACERS_useGMRedi(iTracer),PTRACERS_useKPP(iTracer),
93 O kappaRk,
94 I myThid)
95 ENDIF
96
97 #ifdef ALLOW_AUTODIFF_TAMC
98 CADJ STORE kappaRk(:,:,:) = comlev1_bibj_ptracers,
99 CADJ & key=iptrkey, byte=isbyte
100 CADJ STORE gPtr(:,:,:,bi,bj,iTracer) = comlev1_bibj_ptracers,
101 CADJ & key=iptrkey, byte=isbyte
102 #endif /* ALLOW_AUTODIFF_TAMC */
103
104 #ifdef INCLUDE_IMPLVERTADV_CODE
105 IF ( PTRACERS_ImplVertAdv(iTracer) ) THEN
106
107 CALL GAD_IMPLICIT_R(
108 I PTRACERS_ImplVertAdv(iTracer),
109 I PTRACERS_advScheme(iTracer), GAD_TR,
110 I PTRACERS_dTLev, kappaRk,
111 #ifdef ALLOW_LONGSTEP
112 I LS_wVel,
113 #else
114 I wVel,
115 #endif
116 I pTracer(1-Olx,1-Oly,1,1,1,iTracer),
117 U gPtr(1-Olx,1-Oly,1,1,1,iTracer),
118 I bi, bj, myTime, myIter, myThid )
119
120 ELSEIF ( implicitDiffusion ) THEN
121 #else /* INCLUDE_IMPLVERTADV_CODE */
122 IF ( implicitDiffusion ) THEN
123 #endif /* INCLUDE_IMPLVERTADV_CODE */
124
125 CALL IMPLDIFF(
126 I bi, bj, iMin, iMax, jMin, jMax,
127 I GAD_TR, kappaRk, recip_HFacC,
128 U gPtr(1-Olx,1-Oly,1,1,1,iTracer),
129 I myThid )
130
131 #ifdef ALLOW_OBCS
132 C-- Apply open boundary conditions
133 IF ( useOBCS ) THEN
134 DO K=1,Nr
135 CALL OBCS_APPLY_PTRACER(
136 I bi, bj, K, iTracer,
137 U gPtr(1-Olx,1-Oly,K,bi,bj,iTracer),
138 I myThid )
139 ENDDO
140 ENDIF
141 #endif /* ALLOW_OBCS */
142
143 ENDIF
144 C End of tracer loop
145 ENDDO
146
147 #endif /* ALLOW_PTRACERS */
148
149 RETURN
150 END

  ViewVC Help
Powered by ViewVC 1.1.22