47 |
# include "PTRACERS_PARAMS.h" |
# include "PTRACERS_PARAMS.h" |
48 |
# include "PTRACERS_FIELDS.h" |
# include "PTRACERS_FIELDS.h" |
49 |
#endif |
#endif |
|
#ifdef ALLOW_TIMEAVE |
|
|
# include "TIMEAVE_STATV.h" |
|
|
#endif |
|
50 |
|
|
51 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
52 |
# include "tamc.h" |
# include "tamc.h" |
89 |
INTEGER jMin, jMax |
INTEGER jMin, jMax |
90 |
INTEGER bi, bj |
INTEGER bi, bj |
91 |
INTEGER i, j, k |
INTEGER i, j, k |
|
#ifdef ALLOW_ADAMSBASHFORTH_3 |
|
|
INTEGER iterNb, m1, m2 |
|
|
#endif |
|
92 |
CEOP |
CEOP |
93 |
|
|
94 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
135 |
ENDDO |
ENDDO |
136 |
ENDDO |
ENDDO |
137 |
|
|
|
iMin = 1-OLx |
|
|
iMax = sNx+OLx |
|
|
jMin = 1-OLy |
|
|
jMax = sNy+OLy |
|
|
|
|
|
C need to recompute surfaceForcingPtr using LS_fwFlux |
|
|
CALL LONGSTEP_FORCING_SURF( |
|
|
I bi, bj, iMin, iMax, jMin, jMax, |
|
|
I myTime,myIter,myThid ) |
|
|
|
|
|
C-- Set up 3-D velocity field that we use to advect tracers: |
|
|
C- just do a local copy: |
|
|
DO k=1,Nr |
|
|
DO j=1-OLy,sNy+OLy |
|
|
DO i=1-OLx,sNx+OLx |
|
|
uFld(i,j,k) = LS_uVel(i,j,k,bi,bj) |
|
|
vFld(i,j,k) = LS_vVel(i,j,k,bi,bj) |
|
|
wFld(i,j,k) = LS_wVel(i,j,k,bi,bj) |
|
|
ENDDO |
|
|
ENDDO |
|
|
ENDDO |
|
|
#ifdef ALLOW_GMREDI |
|
|
C- add Bolus velocity to Eulerian-mean velocity: |
|
|
IF (useGMRedi) THEN |
|
|
CALL GMREDI_RESIDUAL_FLOW( |
|
|
U uFld, vFld, wFld, |
|
|
I bi, bj, myIter, myThid ) |
|
|
ENDIF |
|
|
#endif /* ALLOW_GMREDI */ |
|
|
|
|
|
C-- Calculate active tracer tendencies (gT,gS,...) |
|
|
C and step forward storing result in gT, gS, etc. |
|
|
|
|
|
#ifdef ALLOW_PTRACERS |
|
|
IF ( usePTRACERS ) THEN |
|
|
#ifdef ALLOW_DEBUG |
|
|
IF (debugMode) CALL DEBUG_CALL('PTRACERS_INTEGRATE',myThid) |
|
|
#endif |
|
|
CALL PTRACERS_INTEGRATE( |
|
|
I bi, bj, uFld, vFld, wFld, |
|
|
U kappaRk, |
|
|
I myTime, myIter, myThid ) |
|
|
ENDIF |
|
|
#endif /* ALLOW_PTRACERS */ |
|
|
|
|
138 |
C-- Compute new reciprocal hFac for implicit calculation |
C-- Compute new reciprocal hFac for implicit calculation |
139 |
#ifdef NONLIN_FRSURF |
#ifdef NONLIN_FRSURF |
140 |
IF ( nonlinFreeSurf.GT.0 ) THEN |
IF ( nonlinFreeSurf.GT.0 ) THEN |
189 |
ENDIF |
ENDIF |
190 |
#endif /* NONLIN_FRSURF */ |
#endif /* NONLIN_FRSURF */ |
191 |
|
|
192 |
#ifdef ALLOW_DOWN_SLOPE |
iMin = 1-OLx |
193 |
#ifdef ALLOW_PTRACERS |
iMax = sNx+OLx |
194 |
IF ( usePTRACERS .AND. useDOWN_SLOPE ) THEN |
jMin = 1-OLy |
195 |
CALL PTRACERS_DWNSLP_APPLY( |
jMax = sNy+OLy |
|
I bi, bj, myTime, myIter, myThid ) |
|
|
ENDIF |
|
|
#endif /* ALLOW_PTRACERS */ |
|
|
#endif /* ALLOW_DOWN_SLOPE */ |
|
196 |
|
|
197 |
C All explicit advection/diffusion/sources should now be |
C need to recompute surfaceForcingPtr using LS_fwFlux |
198 |
C done. The updated tracer field is in gPtr. Accumalate |
CALL LONGSTEP_FORCING_SURF( |
199 |
C explicit tendency and also reset gPtr to initial tracer |
I bi, bj, iMin, iMax, jMin, jMax, |
200 |
C field for implicit matrix calculation |
I myTime,myIter,myThid ) |
|
|
|
|
#ifdef ALLOW_MATRIX |
|
|
IF (useMATRIX) |
|
|
& CALL MATRIX_STORE_TENDENCY_EXP(bi,bj, myTime,myIter,myThid) |
|
|
#endif |
|
201 |
|
|
202 |
iMin = 1 |
C-- Set up 3-D velocity field that we use to advect tracers: |
203 |
iMax = sNx |
C- just do a local copy: |
204 |
jMin = 1 |
DO k=1,Nr |
205 |
jMax = sNy |
DO j=1-OLy,sNy+OLy |
206 |
|
DO i=1-OLx,sNx+OLx |
207 |
|
uFld(i,j,k) = LS_uVel(i,j,k,bi,bj) |
208 |
|
vFld(i,j,k) = LS_vVel(i,j,k,bi,bj) |
209 |
|
wFld(i,j,k) = LS_wVel(i,j,k,bi,bj) |
210 |
|
ENDDO |
211 |
|
ENDDO |
212 |
|
ENDDO |
213 |
|
#ifdef ALLOW_GMREDI |
214 |
|
C- add Bolus velocity to Eulerian-mean velocity: |
215 |
|
IF (useGMRedi) THEN |
216 |
|
CALL GMREDI_RESIDUAL_FLOW( |
217 |
|
U uFld, vFld, wFld, |
218 |
|
I bi, bj, myIter, myThid ) |
219 |
|
ENDIF |
220 |
|
#endif /* ALLOW_GMREDI */ |
221 |
|
|
222 |
#ifdef ALLOW_PTRACERS |
#ifdef ALLOW_PTRACERS |
223 |
IF ( usePTRACERS ) THEN |
C-- Calculate passive tracer tendencies |
224 |
C-- Vertical advection/diffusion (implicit) for passive tracers |
C and step forward, storing result in gPtr |
225 |
CALL PTRACERS_IMPLICIT( |
C Also apply open boundary conditions for each passive tracer |
226 |
U kappaRk, |
IF ( usePTRACERS ) THEN |
227 |
I wFld, recip_hFacNew, |
#ifdef ALLOW_DEBUG |
228 |
I bi, bj, myTime, myIter, myThid ) |
IF (debugMode) CALL DEBUG_CALL('PTRACERS_INTEGRATE',myThid) |
229 |
|
#endif |
230 |
|
CALL PTRACERS_INTEGRATE( |
231 |
|
I bi, bj, recip_hFacNew, |
232 |
|
I uFld, vFld, wFld, |
233 |
|
U kappaRk, |
234 |
|
I myTime, myIter, myThid ) |
235 |
ENDIF |
ENDIF |
236 |
#endif /* ALLOW_PTRACERS */ |
#endif /* ALLOW_PTRACERS */ |
237 |
|
|