21 |
IMPLICIT NONE |
IMPLICIT NONE |
22 |
#include "SIZE.h" |
#include "SIZE.h" |
23 |
#include "EEPARAMS.h" |
#include "EEPARAMS.h" |
24 |
|
#include "PARAMS.h" |
25 |
#include "PTRACERS.h" |
#include "PTRACERS.h" |
26 |
#include "GAD.h" |
#include "GAD.h" |
27 |
|
|
69 |
INTEGER iMin,iMax,jMin,jMax |
INTEGER iMin,iMax,jMin,jMax |
70 |
INTEGER kUp,kDown,km1 |
INTEGER kUp,kDown,km1 |
71 |
_RL rFlx(1-OLx:sNx+OLx,1-OLy:sNy+OLy,2,PTRACERS_num) |
_RL rFlx(1-OLx:sNx+OLx,1-OLy:sNy+OLy,2,PTRACERS_num) |
72 |
|
LOGICAL calcAdvection |
73 |
CEOP |
CEOP |
74 |
|
|
75 |
C Loop over tracers |
C Loop over tracers |
97 |
|
|
98 |
C Calculate active tracer tendencies (gPtr) due to internal processes |
C Calculate active tracer tendencies (gPtr) due to internal processes |
99 |
C (advection, [explicit] diffusion, parameterizations,...) |
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( |
CALL GAD_CALC_RHS( |
105 |
I bi,bj,iMin,iMax,jMin,jMax,k,kM1,kUp,kDown, |
I bi,bj,iMin,iMax,jMin,jMax,k,kM1,kUp,kDown, |
106 |
I xA,yA,uTrans,vTrans,rTrans,maskUp, |
I xA,yA,uTrans,vTrans,rTrans,maskUp, |
109 |
I KappaRtr, |
I KappaRtr, |
110 |
I pTracer(1-Olx,1-Oly,1,1,1,iTracer), |
I pTracer(1-Olx,1-Oly,1,1,1,iTracer), |
111 |
I GAD_TR1, |
I GAD_TR1, |
112 |
I PTRACERS_advScheme(iTracer), |
I PTRACERS_advScheme(iTracer),calcAdvection, |
113 |
U rFlx(1-Olx,1-Oly,1,iTracer), |
U rFlx(1-Olx,1-Oly,1,iTracer), |
114 |
U gPtr(1-Olx,1-Oly,1,1,1,iTracer), |
U gPtr(1-Olx,1-Oly,1,1,1,iTracer), |
115 |
I myThid ) |
I myThid ) |
116 |
|
|
117 |
C External forcing term(s) |
C External forcing term(s) |
118 |
CALL PTRACERS_FORCING( |
IF ( forcing_In_AB ) |
119 |
|
& CALL PTRACERS_FORCING( |
120 |
I bi,bj,k,iTracer, |
I bi,bj,k,iTracer, |
121 |
U gPtr(1-Olx,1-Oly,1,1,1,iTracer), |
U gPtr(1-Olx,1-Oly,1,1,1,iTracer), |
122 |
I myIter,myTime,myThid) |
I myIter,myTime,myThid) |
132 |
I myIter,myThid ) |
I myIter,myThid ) |
133 |
ENDIF |
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 |
#ifdef NONLIN_FRSURF |
143 |
C Account for change in level thickness |
C Account for change in level thickness |
144 |
IF (nonlinFreeSurf.GT.0) THEN |
IF (nonlinFreeSurf.GT.0) THEN |
146 |
I bi,bj,K, |
I bi,bj,K, |
147 |
U gPtr(1-Olx,1-Oly,1,1,1,iTracer), |
U gPtr(1-Olx,1-Oly,1,1,1,iTracer), |
148 |
I myThid ) |
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 |
ENDIF |
157 |
#endif /* NONLIN_FRSURF */ |
#endif /* NONLIN_FRSURF */ |
158 |
|
|