15 |
I tracerIdentity, advectionScheme, vertAdvecScheme, |
I tracerIdentity, advectionScheme, vertAdvecScheme, |
16 |
I calcAdvection, implicitAdvection, |
I calcAdvection, implicitAdvection, |
17 |
U fVerT, gTracer, |
U fVerT, gTracer, |
18 |
I myThid ) |
I myTime, myIter, myThid ) |
19 |
|
|
20 |
C !DESCRIPTION: |
C !DESCRIPTION: |
21 |
C Calculates the tendancy of a tracer due to advection and diffusion. |
C Calculates the tendancy of a tracer due to advection and diffusion. |
72 |
C vertAdvecScheme :: advection scheme to use (Vertical direction) |
C vertAdvecScheme :: advection scheme to use (Vertical direction) |
73 |
C calcAdvection :: =False if Advec computed with multiDim scheme |
C calcAdvection :: =False if Advec computed with multiDim scheme |
74 |
C implicitAdvection:: =True if vertical Advec computed implicitly |
C implicitAdvection:: =True if vertical Advec computed implicitly |
75 |
|
C myTime :: current time |
76 |
|
C myIter :: iteration number |
77 |
C myThid :: thread number |
C myThid :: thread number |
78 |
INTEGER bi,bj,iMin,iMax,jMin,jMax |
INTEGER bi,bj,iMin,iMax,jMin,jMax |
79 |
INTEGER k,kUp,kDown,kM1 |
INTEGER k,kUp,kDown,kM1 |
94 |
INTEGER advectionScheme, vertAdvecScheme |
INTEGER advectionScheme, vertAdvecScheme |
95 |
LOGICAL calcAdvection |
LOGICAL calcAdvection |
96 |
LOGICAL implicitAdvection |
LOGICAL implicitAdvection |
97 |
INTEGER myThid |
_RL myTime |
98 |
|
INTEGER myIter, myThid |
99 |
|
|
100 |
C !OUTPUT PARAMETERS: ================================================== |
C !OUTPUT PARAMETERS: ================================================== |
101 |
C gTracer :: tendancy array |
C gTracer :: tendancy array |
179 |
IF (advectionScheme.EQ.ENUM_CENTERED_2ND) THEN |
IF (advectionScheme.EQ.ENUM_CENTERED_2ND) THEN |
180 |
CALL GAD_C2_ADV_X(bi,bj,k,uTrans,localT,af,myThid) |
CALL GAD_C2_ADV_X(bi,bj,k,uTrans,localT,af,myThid) |
181 |
ELSEIF (advectionScheme.EQ.ENUM_FLUX_LIMIT) THEN |
ELSEIF (advectionScheme.EQ.ENUM_FLUX_LIMIT) THEN |
182 |
CALL GAD_FLUXLIMIT_ADV_X( |
CALL GAD_FLUXLIMIT_ADV_X( bi,bj,k, deltaTtracer, |
183 |
& bi,bj,k,deltaTtracer,uTrans,uVel,localT,af,myThid) |
I uTrans, uVel, maskW(1-Olx,1-Oly,k,bi,bj), localT, |
184 |
|
O af, myThid ) |
185 |
ELSEIF (advectionScheme.EQ.ENUM_UPWIND_3RD ) THEN |
ELSEIF (advectionScheme.EQ.ENUM_UPWIND_3RD ) THEN |
186 |
CALL GAD_U3_ADV_X(bi,bj,k,uTrans,localT,af,myThid) |
CALL GAD_U3_ADV_X(bi,bj,k,uTrans,localT,af,myThid) |
187 |
ELSEIF (advectionScheme.EQ.ENUM_CENTERED_4TH) THEN |
ELSEIF (advectionScheme.EQ.ENUM_CENTERED_4TH) THEN |
188 |
CALL GAD_C4_ADV_X(bi,bj,k,uTrans,localT,af,myThid) |
CALL GAD_C4_ADV_X(bi,bj,k,uTrans,localT,af,myThid) |
189 |
ELSEIF (advectionScheme.EQ.ENUM_DST3 ) THEN |
ELSEIF (advectionScheme.EQ.ENUM_DST3 ) THEN |
190 |
CALL GAD_DST3_ADV_X( |
CALL GAD_DST3_ADV_X( bi,bj,k, deltaTtracer, |
191 |
& bi,bj,k,deltaTtracer,uTrans,uVel,localT,af,myThid) |
I uTrans, uVel, maskW(1-Olx,1-Oly,k,bi,bj), localT, |
192 |
|
O af, myThid ) |
193 |
ELSEIF (advectionScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
ELSEIF (advectionScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
194 |
CALL GAD_DST3FL_ADV_X( |
CALL GAD_DST3FL_ADV_X( bi,bj,k, deltaTtracer, |
195 |
& bi,bj,k,deltaTtracer,uTrans,uVel,localT,af,myThid) |
I uTrans, uVel, maskW(1-Olx,1-Oly,k,bi,bj), localT, |
196 |
|
O af, myThid ) |
197 |
ELSE |
ELSE |
198 |
STOP 'GAD_CALC_RHS: Bad advectionScheme (X)' |
STOP 'GAD_CALC_RHS: Bad advectionScheme (X)' |
199 |
ENDIF |
ENDIF |
254 |
IF (advectionScheme.EQ.ENUM_CENTERED_2ND) THEN |
IF (advectionScheme.EQ.ENUM_CENTERED_2ND) THEN |
255 |
CALL GAD_C2_ADV_Y(bi,bj,k,vTrans,localT,af,myThid) |
CALL GAD_C2_ADV_Y(bi,bj,k,vTrans,localT,af,myThid) |
256 |
ELSEIF (advectionScheme.EQ.ENUM_FLUX_LIMIT) THEN |
ELSEIF (advectionScheme.EQ.ENUM_FLUX_LIMIT) THEN |
257 |
CALL GAD_FLUXLIMIT_ADV_Y( |
CALL GAD_FLUXLIMIT_ADV_Y( bi,bj,k, deltaTtracer, |
258 |
& bi,bj,k,deltaTtracer,vTrans,vVel,localT,af,myThid) |
I vTrans, vVel, maskS(1-Olx,1-Oly,k,bi,bj), localT, |
259 |
|
O af, myThid ) |
260 |
ELSEIF (advectionScheme.EQ.ENUM_UPWIND_3RD ) THEN |
ELSEIF (advectionScheme.EQ.ENUM_UPWIND_3RD ) THEN |
261 |
CALL GAD_U3_ADV_Y(bi,bj,k,vTrans,localT,af,myThid) |
CALL GAD_U3_ADV_Y(bi,bj,k,vTrans,localT,af,myThid) |
262 |
ELSEIF (advectionScheme.EQ.ENUM_CENTERED_4TH) THEN |
ELSEIF (advectionScheme.EQ.ENUM_CENTERED_4TH) THEN |
263 |
CALL GAD_C4_ADV_Y(bi,bj,k,vTrans,localT,af,myThid) |
CALL GAD_C4_ADV_Y(bi,bj,k,vTrans,localT,af,myThid) |
264 |
ELSEIF (advectionScheme.EQ.ENUM_DST3 ) THEN |
ELSEIF (advectionScheme.EQ.ENUM_DST3 ) THEN |
265 |
CALL GAD_DST3_ADV_Y( |
CALL GAD_DST3_ADV_Y( bi,bj,k, deltaTtracer, |
266 |
& bi,bj,k,deltaTtracer,vTrans,vVel,localT,af,myThid) |
I vTrans, vVel, maskS(1-Olx,1-Oly,k,bi,bj), localT, |
267 |
|
O af, myThid ) |
268 |
ELSEIF (advectionScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
ELSEIF (advectionScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
269 |
CALL GAD_DST3FL_ADV_Y( |
CALL GAD_DST3FL_ADV_Y( bi,bj,k, deltaTtracer, |
270 |
& bi,bj,k,deltaTtracer,vTrans,vVel,localT,af,myThid) |
I vTrans, vVel, maskS(1-Olx,1-Oly,k,bi,bj), localT, |
271 |
|
O af, myThid ) |
272 |
ELSE |
ELSE |
273 |
STOP 'GAD_CALC_RHS: Bad advectionScheme (Y)' |
STOP 'GAD_CALC_RHS: Bad advectionScheme (Y)' |
274 |
ENDIF |
ENDIF |
439 |
ENDDO |
ENDDO |
440 |
ENDDO |
ENDDO |
441 |
|
|
442 |
|
#ifdef ALLOW_DEBUG |
443 |
|
IF ( debugLevel .GE. debLevB |
444 |
|
& .AND. k.EQ.2 .AND. myIter.EQ.1+nIter0 |
445 |
|
& .AND. nPx.EQ.1 .AND. nPy.EQ.1 |
446 |
|
& .AND. useCubedSphereExchange ) THEN |
447 |
|
CALL DEBUG_CS_CORNER_UV( ' fZon,fMer from GAD_CALC_RHS', |
448 |
|
& fZon,fMer, k, standardMessageUnit,bi,bj,myThid ) |
449 |
|
ENDIF |
450 |
|
#endif /* ALLOW_DEBUG */ |
451 |
|
|
452 |
RETURN |
RETURN |
453 |
END |
END |