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

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

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


Revision 1.7 - (hide annotations) (download)
Fri Jun 27 01:56:17 2003 UTC (20 years, 11 months ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint51d_post, checkpoint51b_post, checkpoint51c_post, checkpoint51e_post
Changes since 1.6: +6 -4 lines
o disentangled ALLOW_PTRACERS using new ALLOW_GCHEM
o made ptracers_forcing same as external_forcing_s

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

  ViewVC Help
Powered by ViewVC 1.1.22