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

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

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


Revision 1.5 - (show annotations) (download)
Mon Jun 24 18:47:10 2002 UTC (21 years, 11 months ago) by adcroft
Branch: MAIN
CVS Tags: checkpoint46n_post, checkpoint47e_post, checkpoint46l_post, checkpoint46g_pre, checkpoint47c_post, checkpoint50c_post, checkpoint46f_post, checkpoint48e_post, checkpoint50c_pre, checkpoint46b_post, checkpoint48i_post, checkpoint46l_pre, checkpoint50d_pre, checkpoint51, checkpoint50, checkpoint50d_post, checkpoint50b_pre, checkpoint48b_post, checkpoint48c_pre, checkpoint47d_pre, checkpoint47a_post, checkpoint48d_pre, checkpoint47i_post, checkpoint47d_post, checkpoint46d_pre, checkpoint48d_post, checkpoint48f_post, checkpoint45d_post, checkpoint46j_pre, checkpoint48h_post, checkpoint46a_post, checkpoint47g_post, checkpoint46j_post, checkpoint46k_post, checkpoint46b_pre, checkpoint48a_post, checkpoint50f_post, checkpoint50a_post, checkpoint50f_pre, checkpoint47j_post, branch-exfmods-tag, checkpoint46e_pre, checkpoint48c_post, checkpoint46c_pre, checkpoint46, checkpoint47b_post, checkpoint46h_pre, checkpoint46m_post, checkpoint46a_pre, checkpoint50g_post, checkpoint46g_post, checkpoint50h_post, checkpoint50e_pre, checkpoint50i_post, checkpoint47f_post, checkpoint50e_post, checkpoint46i_post, checkpoint46c_post, checkpoint46e_post, checkpoint47, checkpoint48, checkpoint49, checkpoint46h_post, checkpoint48g_post, checkpoint47h_post, checkpoint46d_post, checkpoint50b_post
Branch point for: branch-exfmods-curt, ecco-branch
Changes since 1.4: +2 -1 lines
Added include of PARAMS.h which fixes broken compile of pkg/ptracers
due to the recently added flag "forcing_In_AB".

1 C $Header: /u/gcmpack/models/MITgcmUV/pkg/ptracers/ptracers_integrate.F,v 1.4 2002/06/20 23:46:22 jmc Exp $
2 C $Name: $
3
4 #include "PTRACERS_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: PTRACERS_INTEGERATE
8
9 C !INTERFACE: ==========================================================
10 SUBROUTINE PTRACERS_INTEGERATE(
11 I bi,bj,k,
12 I xA,yA,uTrans,vTrans,rTrans,maskUp,
13 X KappaRtr,
14 I myIter,myTime,myThid )
15
16 C !DESCRIPTION:
17 C Calculates tendancy for passive tracers and integrates forward
18 C in time.
19
20 C !USES: ===============================================================
21 IMPLICIT NONE
22 #include "SIZE.h"
23 #include "EEPARAMS.h"
24 #include "PARAMS.h"
25 #include "PTRACERS.h"
26 #include "GAD.h"
27
28 C !INPUT PARAMETERS: ===================================================
29 C bi,bj :: tile indices
30 C k :: vertical level number
31 C xA :: face area at U points in level k
32 C yA :: face area at V points in level k
33 C uTrans :: zonal transport in level k
34 C vTrans :: meridional transport in level k
35 C rTrans :: vertical transport across level k
36 C maskUp :: mask for vertical transport
37 C KappaRtr :: vertical diffusion of passive tracers
38 C NOTE! This is infact KappaRS from thermodynamics()
39 C and is being used only temporarily
40 C until we removed the need to store
41 C a "3D" diffusivity
42 C myIter :: time-step number
43 C myTime :: model time
44 C myThid :: thread number
45 INTEGER bi,bj,k
46 _RS xA (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
47 _RS yA (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
48 _RL uTrans (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
49 _RL vTrans (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
50 _RL rTrans (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
51 _RS maskUp (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
52 _RL KappaRtr(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
53 INTEGER myIter
54 _RL myTime
55 INTEGER myThid
56
57 C !OUTPUT PARAMETERS: ==================================================
58 C none
59
60 #ifdef ALLOW_PTRACERS
61
62 C !LOCAL VARIABLES: ====================================================
63 C i,j,k,bi,bj,iTracer :: loop indices
64 C iMin,iMax,jMin,jMax :: loop ranges
65 C kUp,kDown :: toggle indices for even/odd level fluxes
66 C km1 :: =min(1,k-1)
67 C rFlx :: vertical flux
68 INTEGER i,j,iTracer
69 INTEGER iMin,iMax,jMin,jMax
70 INTEGER kUp,kDown,km1
71 _RL rFlx(1-OLx:sNx+OLx,1-OLy:sNy+OLy,2,PTRACERS_num)
72 LOGICAL calcAdvection
73 CEOP
74
75 C Loop over tracers
76 DO iTracer=1,PTRACERS_numInUse
77
78 C Initialize vertical flux to zero and set no-flux across k=Nr+1
79 IF (k.EQ.Nr) THEN
80 DO j=1-Oly,sNy+Oly
81 DO i=1-Olx,sNx+Olx
82 rFlx(i,j,1,iTracer)=0.
83 rFlx(i,j,2,iTracer)=0.
84 ENDDO
85 ENDDO
86 ENDIF
87
88 C Loop ranges for daughter routines
89 iMin = 1-OLx+2
90 iMax = sNx+OLx-1
91 jMin = 1-OLy+2
92 jMax = sNy+OLy-1
93
94 km1 = MAX(1,k-1)
95 kUp = 1+MOD(k+1,2)
96 kDown= 1+MOD(k,2)
97
98 C Calculate active tracer tendencies (gPtr) due to internal processes
99 C (advection, [explicit] diffusion, parameterizations,...)
100 calcAdvection = .NOT.multiDimAdvection
101 & .OR. PTRACERS_advScheme(iTracer).EQ.ENUM_CENTERED_2ND
102 & .OR. PTRACERS_advScheme(iTracer).EQ.ENUM_UPWIND_3RD
103 & .OR. PTRACERS_advScheme(iTracer).EQ.ENUM_CENTERED_4TH
104 CALL GAD_CALC_RHS(
105 I bi,bj,iMin,iMax,jMin,jMax,k,kM1,kUp,kDown,
106 I xA,yA,uTrans,vTrans,rTrans,maskUp,
107 I PTRACERS_diffKh(iTracer),
108 I PTRACERS_diffK4(iTracer),
109 I KappaRtr,
110 I pTracer(1-Olx,1-Oly,1,1,1,iTracer),
111 I GAD_TR1,
112 I PTRACERS_advScheme(iTracer),calcAdvection,
113 U rFlx(1-Olx,1-Oly,1,iTracer),
114 U gPtr(1-Olx,1-Oly,1,1,1,iTracer),
115 I myThid )
116
117 C External forcing term(s)
118 IF ( forcing_In_AB )
119 & CALL PTRACERS_FORCING(
120 I bi,bj,k,iTracer,
121 U gPtr(1-Olx,1-Oly,1,1,1,iTracer),
122 I myIter,myTime,myThid)
123
124 C If using Adams-Bashforth II, then extrapolate tendancies
125 IF ( PTRACERS_advScheme(iTracer).EQ.ENUM_CENTERED_2ND
126 & .OR.PTRACERS_advScheme(iTracer).EQ.ENUM_UPWIND_3RD
127 & .OR.PTRACERS_advScheme(iTracer).EQ.ENUM_CENTERED_4TH ) THEN
128 CALL ADAMS_BASHFORTH2(
129 I bi,bj,K,
130 U gPtr(1-Olx,1-Oly,1,1,1,iTracer),
131 U gPtrNm1(1-Olx,1-Oly,1,1,1,iTracer),
132 I myIter,myThid )
133 ENDIF
134
135 C External forcing term(s)
136 IF ( .NOT.forcing_In_AB )
137 & CALL PTRACERS_FORCING(
138 I bi,bj,k,iTracer,
139 U gPtr(1-Olx,1-Oly,1,1,1,iTracer),
140 I myIter,myTime,myThid)
141
142 #ifdef NONLIN_FRSURF
143 C Account for change in level thickness
144 IF (nonlinFreeSurf.GT.0) THEN
145 CALL FREESURF_RESCALE_G(
146 I bi,bj,K,
147 U gPtr(1-Olx,1-Oly,1,1,1,iTracer),
148 I myThid )
149 IF ( PTRACERS_advScheme(iTracer).EQ.ENUM_CENTERED_2ND
150 & .OR.PTRACERS_advScheme(iTracer).EQ.ENUM_UPWIND_3RD
151 & .OR.PTRACERS_advScheme(iTracer).EQ.ENUM_CENTERED_4TH )
152 & CALL FREESURF_RESCALE_G(
153 I bi,bj,K,
154 U gPtrNm1(1-Olx,1-Oly,1,1,1,iTracer),
155 I myThid )
156 ENDIF
157 #endif /* NONLIN_FRSURF */
158
159 C Integrate forward in time, storing in gPtr: G=T+dt*G
160 CALL TIMESTEP_TRACER(
161 I bi,bj,iMin,iMax,jMin,jMax,k,
162 I PTRACERS_advScheme(iTracer),
163 I pTracer(1-Olx,1-Oly,1,1,1,iTracer),
164 I gPtr(1-Olx,1-Oly,1,1,1,iTracer),
165 I myIter,myThid )
166
167 C end of tracer loop
168 ENDDO
169
170 #endif /* ALLOW_PTRACERS */
171
172 RETURN
173 END

  ViewVC Help
Powered by ViewVC 1.1.22