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

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

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


Revision 1.17 - (show annotations) (download)
Thu Mar 8 17:13:31 2012 UTC (12 years, 2 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63k, checkpoint64q, checkpoint64p, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f
Changes since 1.16: +8 -5 lines
-only step forward tracer if PTRACERS_StepFwd(iTr)=T

1 C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_advection.F,v 1.16 2010/11/18 00:35:27 jmc Exp $
2 C $Name: $
3
4 #include "PTRACERS_OPTIONS.h"
5 #include "GAD_OPTIONS.h"
6
7 CBOP
8 C !ROUTINE: PTRACERS_ADVECTION
9
10 C !INTERFACE: ==========================================================
11 SUBROUTINE PTRACERS_ADVECTION( bi,bj,myTime,myIter,myThid )
12
13 C !DESCRIPTION:
14 C Calculates tendency for passive tracers and integrates forward
15 C in time.
16
17 C !USES: ===============================================================
18 #include "PTRACERS_MOD.h"
19 IMPLICIT NONE
20 #include "SIZE.h"
21 #include "EEPARAMS.h"
22 #include "PARAMS.h"
23 #include "DYNVARS.h"
24 #ifdef ALLOW_LONGSTEP
25 #include "LONGSTEP_PARAMS.h"
26 #include "LONGSTEP.h"
27 #endif
28 #include "PTRACERS_SIZE.h"
29 #include "PTRACERS_PARAMS.h"
30 #include "PTRACERS_START.h"
31 #include "PTRACERS_FIELDS.h"
32 #include "GAD.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 :: model time
41 C myIter :: time-step number
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 none
50
51 #ifdef ALLOW_PTRACERS
52
53 C !LOCAL VARIABLES: ====================================================
54 C i,j,k,bi,bj,iTracer :: loop indices
55 C iMin,iMax,jMin,jMax :: loop ranges
56 C kUp,kDown :: toggle indices for even/odd level fluxes
57 C km1 :: =min(1,k-1)
58 C rFlx :: vertical flux
59 INTEGER iTracer
60 CEOP
61
62 C Loop over tracers
63 DO iTracer=1,PTRACERS_numInUse
64 IF ( PTRACERS_StepFwd(iTracer) ) THEN
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 #ifdef ALLOW_AUTODIFF_TAMC
84 CADJ STORE pTracer(:,:,:,bi,bj,iTracer)
85 CADJ & = comlev1_bibj_ptracers, key=iptrkey, byte=isbyte
86 #endif /* ALLOW_AUTODIFF_TAMC */
87
88 #ifdef PTRACERS_ALLOW_DYN_STATE
89 IF ( PTRACERS_SOM_Advection(iTracer) ) THEN
90 #ifdef ALLOW_DEBUG
91 IF (debugMode) CALL DEBUG_CALL('GAD_SOM_ADVECT',myThid)
92 #endif
93 CALL GAD_SOM_ADVECT(
94 I PTRACERS_ImplVertAdv(iTracer),
95 I PTRACERS_advScheme(iTracer),
96 I PTRACERS_advScheme(iTracer),
97 I GAD_TR1+iTracer-1,
98 I PTRACERS_dTLev,
99 #ifdef ALLOW_LONGSTEP
100 I LS_uVel, LS_vVel, LS_wVel,
101 #else
102 I uVel, vVel, wVel,
103 #endif
104 I pTracer(1-OLx,1-OLy,1,1,1,iTracer),
105 U _Ptracers_som(:,:,:,:,:,:,iTracer),
106 O gPtr(1-OLx,1-OLy,1,1,1,iTracer),
107 I bi,bj,myTime,myIter,myThid)
108 ELSEIF ( PTRACERS_MultiDimAdv(iTracer) ) THEN
109 #else /* PTRACERS_ALLOW_DYN_STATE */
110 IF ( PTRACERS_MultiDimAdv(iTracer) ) THEN
111 #endif /* PTRACERS_ALLOW_DYN_STATE */
112 CALL GAD_ADVECTION(
113 I PTRACERS_ImplVertAdv(iTracer),
114 I PTRACERS_advScheme(iTracer),
115 I PTRACERS_advScheme(iTracer),
116 I GAD_TR1+iTracer-1,
117 I PTRACERS_dTLev,
118 #ifdef ALLOW_LONGSTEP
119 I LS_uVel, LS_vVel, LS_wVel,
120 #else
121 I uVel, vVel, wVel,
122 #endif
123 I pTracer(1-OLx,1-OLy,1,1,1,iTracer),
124 O gPtr(1-OLx,1-OLy,1,1,1,iTracer),
125 I bi,bj,myTime,myIter,myThid)
126 ENDIF
127
128
129 C end of tracer loop
130 ENDIF
131 ENDDO
132
133 #endif /* ALLOW_PTRACERS */
134
135 RETURN
136 END

  ViewVC Help
Powered by ViewVC 1.1.22