/[MITgcm]/MITgcm/pkg/mom_common/mom_v_implicit_r.F
ViewVC logotype

Annotation of /MITgcm/pkg/mom_common/mom_v_implicit_r.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.2 - (hide annotations) (download)
Wed Jun 22 00:30:16 2005 UTC (18 years, 11 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint57o_post, checkpoint57m_post, checkpoint57k_post, checkpoint57n_post, checkpoint57p_post, checkpoint57q_post, checkpoint57j_post, checkpoint57l_post
Changes since 1.1: +25 -15 lines
add upwind vertical advection option (VI only)

1 jmc 1.2 C $Header: /u/gcmpack/MITgcm/pkg/mom_common/mom_v_implicit_r.F,v 1.1 2005/06/21 13:46:15 jmc Exp $
2 jmc 1.1 C $Name: $
3    
4     #include "MOM_COMMON_OPTIONS.h"
5    
6     CBOP
7     C !ROUTINE: MOM_V_IMPLICIT_R
8     C !INTERFACE:
9     SUBROUTINE MOM_V_IMPLICIT_R(
10     I kappaRV,
11     I bi, bj, myTime, myIter, myThid )
12     C !DESCRIPTION: \bv
13     C *==========================================================*
14     C | S/R MOM_V_IMPLICIT_R
15     C | o Solve implicitly vertical advection & diffusion
16     C | of momentum, meridional component
17     C *==========================================================*
18     C *==========================================================*
19     C \ev
20    
21     C !USES:
22     IMPLICIT NONE
23     C == Global data ==
24     #include "SIZE.h"
25     #include "EEPARAMS.h"
26     #include "PARAMS.h"
27     #include "GRID.h"
28     #include "DYNVARS.h"
29    
30     C !INPUT/OUTPUT PARAMETERS:
31     C == Routine Arguments ==
32     _RL kappaRV(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
33     INTEGER bi, bj
34     _RL myTime
35     INTEGER myIter, myThid
36    
37     C !LOCAL VARIABLES:
38     C == Local variables ==
39     INTEGER iMin,iMax,jMin,jMax
40     INTEGER i,j,k
41     INTEGER diagonalNumber, errCode
42     c _RL a5d(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
43     _RL b5d(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
44     _RL c5d(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
45     _RL d5d(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
46     c _RL e5d(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
47     _RL rTrans(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
48 jmc 1.2 _RL rCenter, rUpwind, upwindFac
49 jmc 1.1 CEOP
50    
51     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
52     C Solve for V-component :
53     C----------------------------
54    
55     C-- Initialise
56     iMin = 1
57     jMin = 1
58     iMax = sNx
59     jMax = sNy+1
60     DO k=1,Nr
61     DO j=1-Oly,sNy+Oly
62     DO i=1-Olx,sNx+Olx
63     c a5d(i,j,k) = 0. _d 0
64     b5d(i,j,k) = 0. _d 0
65     c5d(i,j,k) = 1. _d 0
66     d5d(i,j,k) = 0. _d 0
67     c e5d(i,j,k) = 0. _d 0
68     ENDDO
69     ENDDO
70     ENDDO
71     diagonalNumber = 1
72    
73     IF ( implicitViscosity .AND. Nr.GT.1 ) THEN
74    
75     C-- set the tri-diagonal matrix to solve the implicit viscosity
76     diagonalNumber = 3
77     C- 1rst lower diagonal :
78     DO k=2,Nr
79     DO j=jMin,jMax
80     DO i=iMin,iMax
81     IF (maskS(i,j,k-1,bi,bj).EQ.1.)
82     & b5d(i,j,k) = -deltaTmom
83     & *recip_hFacS(i,j,k,bi,bj)*recip_drF(k)
84     & *kappaRV(i,j, k )*recip_drC( k )
85     ENDDO
86     ENDDO
87     ENDDO
88     C- 1rst upper diagonal :
89     DO k=1,Nr-1
90     DO j=jMin,jMax
91     DO i=iMin,iMax
92     IF (maskS(i,j,k+1,bi,bj).EQ.1.)
93     & d5d(i,j,k) = -deltaTmom
94     & *recip_hFacS(i,j,k,bi,bj)*recip_drF(k)
95     & *KappaRV(i,j,k+1)*recip_drC(k+1)
96     ENDDO
97     ENDDO
98     ENDDO
99     C- Main diagonal :
100     DO k=1,Nr
101     DO j=jMin,jMax
102     DO i=iMin,iMax
103     c5d(i,j,k) = 1. _d 0 - b5d(i,j,k) - d5d(i,j,k)
104     ENDDO
105     ENDDO
106     ENDDO
107    
108     C-- end if implicitDiffusion
109     ENDIF
110    
111     IF ( momImplVertAdv .AND. Nr.GT.1 ) THEN
112    
113     diagonalNumber = 3
114     DO k=2,Nr
115    
116     DO j=jMin,jMax
117     DO i=iMin,iMax
118     rTrans(i,j) = 0.5 _d 0 * (
119     & wVel(i, j ,k,bi,bj)*rA(i, j ,bi,bj)
120     & *maskC(i, j ,k-1,bi,bj)
121     & + wVel(i,j-1,k,bi,bj)*rA(i,j-1,bi,bj)
122     & *maskC(i,j-1,k-1,bi,bj)
123     & )
124     ENDDO
125     ENDDO
126    
127     IF ( vectorInvariantMomentum ) THEN
128 jmc 1.2 C- space Centered/Upwind advection scheme, Advective form:
129     IF ( upwindShear ) THEN
130     upwindFac = 1. _d 0
131     ELSE
132     upwindFac = 0. _d 0
133     ENDIF
134 jmc 1.1 DO j=jMin,jMax
135     DO i=iMin,iMax
136 jmc 1.2 rCenter = 0.5 _d 0 *deltaTmom*rTrans(i,j)
137     & *recip_rAs(i,j,bi,bj)*rkSign
138     rUpwind = ABS(rCenter)*upwindFac
139 jmc 1.1 b5d(i,j,k) = b5d(i,j,k)
140 jmc 1.2 & - (rCenter+rUpwind)
141     & *recip_hFacS(i,j,k,bi,bj)*recip_drF(k)
142 jmc 1.1 c5d(i,j,k) = c5d(i,j,k)
143 jmc 1.2 & + (rCenter+rUpwind)
144     & *recip_hFacS(i,j,k,bi,bj)*recip_drF(k)
145 jmc 1.1 c5d(i,j,k-1) = c5d(i,j,k-1)
146 jmc 1.2 & - (rCenter-rUpwind)
147     & *recip_hFacS(i,j,k-1,bi,bj)*recip_drF(k-1)
148 jmc 1.1 d5d(i,j,k-1) = d5d(i,j,k-1)
149 jmc 1.2 & + (rCenter-rUpwind)
150     & *recip_hFacS(i,j,k-1,bi,bj)*recip_drF(k-1)
151 jmc 1.1 ENDDO
152     ENDDO
153     ELSE
154     C- space Centered advection scheme, Flux form:
155     DO j=jMin,jMax
156     DO i=iMin,iMax
157 jmc 1.2 rCenter = 0.5 _d 0 *deltaTmom*rTrans(i,j)
158     & *recip_rAs(i,j,bi,bj)*rkSign
159 jmc 1.1 b5d(i,j,k) = b5d(i,j,k)
160 jmc 1.2 & - rCenter*recip_hFacS(i,j,k,bi,bj)*recip_drF(k)
161 jmc 1.1 c5d(i,j,k) = c5d(i,j,k)
162 jmc 1.2 & - rCenter*recip_hFacS(i,j,k,bi,bj)*recip_drF(k)
163 jmc 1.1 c5d(i,j,k-1) = c5d(i,j,k-1)
164 jmc 1.2 & + rCenter*recip_hFacS(i,j,k-1,bi,bj)*recip_drF(k-1)
165 jmc 1.1 d5d(i,j,k-1) = d5d(i,j,k-1)
166 jmc 1.2 & + rCenter*recip_hFacS(i,j,k-1,bi,bj)*recip_drF(k-1)
167 jmc 1.1 ENDDO
168     ENDDO
169     STOP 'MOM_IMPLICIT_R: Flux Form not yet finished.'
170     ENDIF
171    
172     C-- end k loop
173     ENDDO
174    
175     C-- end if momImplVertAdv
176     ENDIF
177    
178     IF ( diagonalNumber .EQ. 3 ) THEN
179     C-- Solve tri-diagonal system :
180     CALL SOLVE_TRIDIAGONAL( iMin,iMax, jMin,jMax,
181     I b5d, c5d, d5d,
182     U gV,
183     O errCode,
184     I bi, bj, myThid )
185     IF (errCode.GE.1) THEN
186     STOP 'MOM_IMPLICIT_R: error when solving 3-Diag problem.'
187     ENDIF
188     ELSEIF ( diagonalNumber .NE. 1 ) THEN
189     STOP 'MOM_IMPLICIT_R: no solver available.'
190     ENDIF
191    
192     RETURN
193     END

  ViewVC Help
Powered by ViewVC 1.1.22