29 |
|
|
30 |
C !INPUT/OUTPUT PARAMETERS: |
C !INPUT/OUTPUT PARAMETERS: |
31 |
C == Routine Arguments == |
C == Routine Arguments == |
32 |
_RL kappaRV(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr) |
_RL kappaRV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
33 |
INTEGER bi, bj |
INTEGER bi, bj |
34 |
_RL myTime |
_RL myTime |
35 |
INTEGER myIter, myThid |
INTEGER myIter, myThid |
39 |
INTEGER iMin,iMax,jMin,jMax |
INTEGER iMin,iMax,jMin,jMax |
40 |
INTEGER i,j,k |
INTEGER i,j,k |
41 |
INTEGER diagonalNumber, errCode |
INTEGER diagonalNumber, errCode |
42 |
c _RL a5d(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr) |
c _RL a5d(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
43 |
_RL b5d(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr) |
_RL b5d(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
44 |
_RL c5d(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr) |
_RL c5d(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
45 |
_RL d5d(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr) |
_RL d5d(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
46 |
c _RL e5d(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr) |
c _RL e5d(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
47 |
_RL rTrans(1-Olx:sNx+Olx,1-Oly:sNy+Oly) |
_RL rTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
48 |
_RL rCenter, rUpwind, upwindFac |
_RL rCenter, rUpwind, upwindFac |
49 |
#ifdef ALLOW_DIAGNOSTICS |
#ifdef ALLOW_DIAGNOSTICS |
50 |
CHARACTER*8 diagName |
CHARACTER*8 diagName |
51 |
LOGICAL DIAGNOSTICS_IS_ON |
LOGICAL DIAGNOSTICS_IS_ON |
52 |
EXTERNAL DIAGNOSTICS_IS_ON |
EXTERNAL DIAGNOSTICS_IS_ON |
53 |
_RL vf (1-Olx:sNx+Olx,1-Oly:sNy+Oly) |
_RL vf (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
54 |
#endif |
#endif |
55 |
CEOP |
CEOP |
56 |
|
|
64 |
iMax = sNx |
iMax = sNx |
65 |
jMax = sNy+1 |
jMax = sNy+1 |
66 |
DO k=1,Nr |
DO k=1,Nr |
67 |
DO j=1-Oly,sNy+Oly |
DO j=1-OLy,sNy+OLy |
68 |
DO i=1-Olx,sNx+Olx |
DO i=1-OLx,sNx+OLx |
69 |
c a5d(i,j,k) = 0. _d 0 |
c a5d(i,j,k) = 0. _d 0 |
70 |
b5d(i,j,k) = 0. _d 0 |
b5d(i,j,k) = 0. _d 0 |
71 |
c5d(i,j,k) = 1. _d 0 |
c5d(i,j,k) = 1. _d 0 |
85 |
DO j=jMin,jMax |
DO j=jMin,jMax |
86 |
DO i=iMin,iMax |
DO i=iMin,iMax |
87 |
IF (maskS(i,j,k-1,bi,bj).EQ.1.) |
IF (maskS(i,j,k-1,bi,bj).EQ.1.) |
88 |
& b5d(i,j,k) = -deltaTmom |
& b5d(i,j,k) = -deltaTMom |
89 |
& *_recip_hFacS(i,j,k,bi,bj)*recip_drF(k) |
& *_recip_hFacS(i,j,k,bi,bj)*recip_drF(k) |
90 |
& *kappaRV(i,j, k )*recip_drC( k ) |
& *kappaRV(i,j, k )*recip_drC( k ) |
91 |
ENDDO |
ENDDO |
96 |
DO j=jMin,jMax |
DO j=jMin,jMax |
97 |
DO i=iMin,iMax |
DO i=iMin,iMax |
98 |
IF (maskS(i,j,k+1,bi,bj).EQ.1.) |
IF (maskS(i,j,k+1,bi,bj).EQ.1.) |
99 |
& d5d(i,j,k) = -deltaTmom |
& d5d(i,j,k) = -deltaTMom |
100 |
& *_recip_hFacS(i,j,k,bi,bj)*recip_drF(k) |
& *_recip_hFacS(i,j,k,bi,bj)*recip_drF(k) |
101 |
& *KappaRV(i,j,k+1)*recip_drC(k+1) |
& *KappaRV(i,j,k+1)*recip_drC(k+1) |
102 |
ENDDO |
ENDDO |
139 |
ENDIF |
ENDIF |
140 |
DO j=jMin,jMax |
DO j=jMin,jMax |
141 |
DO i=iMin,iMax |
DO i=iMin,iMax |
142 |
rCenter = 0.5 _d 0 *deltaTmom*rTrans(i,j) |
rCenter = 0.5 _d 0 *deltaTMom*rTrans(i,j) |
143 |
& *recip_rAs(i,j,bi,bj)*rkSign |
& *recip_rAs(i,j,bi,bj)*rkSign |
144 |
rUpwind = ABS(rCenter)*upwindFac |
rUpwind = ABS(rCenter)*upwindFac |
145 |
b5d(i,j,k) = b5d(i,j,k) |
b5d(i,j,k) = b5d(i,j,k) |
160 |
C- space Centered advection scheme, Flux form: |
C- space Centered advection scheme, Flux form: |
161 |
DO j=jMin,jMax |
DO j=jMin,jMax |
162 |
DO i=iMin,iMax |
DO i=iMin,iMax |
163 |
rCenter = 0.5 _d 0 *deltaTmom*rTrans(i,j) |
rCenter = 0.5 _d 0 *deltaTMom*rTrans(i,j) |
164 |
& *recip_rAs(i,j,bi,bj)*rkSign |
& *recip_rAs(i,j,bi,bj)*rkSign |
165 |
b5d(i,j,k) = b5d(i,j,k) |
b5d(i,j,k) = b5d(i,j,k) |
166 |
& - rCenter*_recip_hFacS(i,j,k,bi,bj)*recip_drF(k) |
& - rCenter*_recip_hFacS(i,j,k,bi,bj)*recip_drF(k) |
185 |
C-- Solve tri-diagonal system : |
C-- Solve tri-diagonal system : |
186 |
CALL SOLVE_TRIDIAGONAL( iMin,iMax, jMin,jMax, |
CALL SOLVE_TRIDIAGONAL( iMin,iMax, jMin,jMax, |
187 |
I b5d, c5d, d5d, |
I b5d, c5d, d5d, |
188 |
U gV, |
U gV(1-OLx,1-OLy,1,bi,bj), |
189 |
O errCode, |
O errCode, |
190 |
I bi, bj, myThid ) |
I bi, bj, myThid ) |
191 |
IF (errCode.GE.1) THEN |
IF (errCode.GE.1) THEN |