12 |
I xA,yA,uTrans,vTrans,rTrans,rTransKp1,maskUp, |
I xA,yA,uTrans,vTrans,rTrans,rTransKp1,maskUp, |
13 |
I uVel, vVel, wVel, |
I uVel, vVel, wVel, |
14 |
I diffKh, diffK4, KappaRT, Tracer, |
I diffKh, diffK4, KappaRT, Tracer, |
15 |
I tracerIdentity, advectionScheme, |
I tracerIdentity, advectionScheme, vertAdvecScheme, |
16 |
I calcAdvection, implicitAdvection, |
I calcAdvection, implicitAdvection, |
17 |
U fVerT, gTracer, |
U fVerT, gTracer, |
18 |
I myThid ) |
I myThid ) |
68 |
C KappaRT :: 3-D array for vertical diffusion coefficient |
C KappaRT :: 3-D array for vertical diffusion coefficient |
69 |
C Tracer :: tracer field |
C Tracer :: tracer field |
70 |
C tracerIdentity :: tracer identifier (required for KPP,GM) |
C tracerIdentity :: tracer identifier (required for KPP,GM) |
71 |
C advectionScheme :: advection scheme to use |
C advectionScheme :: advection scheme to use (Horizontal plane) |
72 |
|
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 myThid :: thread number |
C myThid :: thread number |
89 |
_RL KappaRT(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
_RL KappaRT(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
90 |
_RL Tracer(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) |
_RL Tracer(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) |
91 |
INTEGER tracerIdentity |
INTEGER tracerIdentity |
92 |
INTEGER advectionScheme |
INTEGER advectionScheme, vertAdvecScheme |
93 |
LOGICAL calcAdvection |
LOGICAL calcAdvection |
94 |
LOGICAL implicitAdvection |
LOGICAL implicitAdvection |
95 |
INTEGER myThid |
INTEGER myThid |
319 |
IF (calcAdvection .AND. .NOT.implicitAdvection .AND. K.GE.2) THEN |
IF (calcAdvection .AND. .NOT.implicitAdvection .AND. K.GE.2) THEN |
320 |
#endif |
#endif |
321 |
C- Compute vertical advective flux in the interior: |
C- Compute vertical advective flux in the interior: |
322 |
IF (advectionScheme.EQ.ENUM_CENTERED_2ND) THEN |
IF (vertAdvecScheme.EQ.ENUM_CENTERED_2ND) THEN |
323 |
CALL GAD_C2_ADV_R(bi,bj,k,rTrans,tracer,af,myThid) |
CALL GAD_C2_ADV_R(bi,bj,k,rTrans,tracer,af,myThid) |
324 |
ELSEIF (advectionScheme.EQ.ENUM_FLUX_LIMIT) THEN |
ELSEIF (vertAdvecScheme.EQ.ENUM_FLUX_LIMIT) THEN |
325 |
CALL GAD_FLUXLIMIT_ADV_R( |
CALL GAD_FLUXLIMIT_ADV_R( |
326 |
& bi,bj,k,deltaTtracer,rTrans,wVel,tracer,af,myThid) |
& bi,bj,k,deltaTtracer,rTrans,wVel,tracer,af,myThid) |
327 |
ELSEIF (advectionScheme.EQ.ENUM_UPWIND_3RD ) THEN |
ELSEIF (vertAdvecScheme.EQ.ENUM_UPWIND_3RD ) THEN |
328 |
CALL GAD_U3_ADV_R(bi,bj,k,rTrans,tracer,af,myThid) |
CALL GAD_U3_ADV_R(bi,bj,k,rTrans,tracer,af,myThid) |
329 |
ELSEIF (advectionScheme.EQ.ENUM_CENTERED_4TH) THEN |
ELSEIF (vertAdvecScheme.EQ.ENUM_CENTERED_4TH) THEN |
330 |
CALL GAD_C4_ADV_R(bi,bj,k,rTrans,tracer,af,myThid) |
CALL GAD_C4_ADV_R(bi,bj,k,rTrans,tracer,af,myThid) |
331 |
ELSEIF (advectionScheme.EQ.ENUM_DST3 ) THEN |
ELSEIF (vertAdvecScheme.EQ.ENUM_DST3 ) THEN |
332 |
CALL GAD_DST3_ADV_R( |
CALL GAD_DST3_ADV_R( |
333 |
& bi,bj,k,deltaTtracer,rTrans,wVel,tracer,af,myThid) |
& bi,bj,k,deltaTtracer,rTrans,wVel,tracer,af,myThid) |
334 |
ELSEIF (advectionScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
ELSEIF (vertAdvecScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
335 |
CALL GAD_DST3FL_ADV_R( |
CALL GAD_DST3FL_ADV_R( |
336 |
& bi,bj,k,deltaTtracer,rTrans,wVel,tracer,af,myThid) |
& bi,bj,k,deltaTtracer,rTrans,wVel,tracer,af,myThid) |
337 |
ELSE |
ELSE |
338 |
STOP 'GAD_CALC_RHS: Bad advectionScheme (R)' |
STOP 'GAD_CALC_RHS: Bad vertAdvecScheme (R)' |
339 |
ENDIF |
ENDIF |
340 |
C- add the advective flux to fVerT |
C- add the advective flux to fVerT |
341 |
DO j=1-Oly,sNy+Oly |
DO j=1-Oly,sNy+Oly |