/[MITgcm]/MITgcm/model/src/impldiff.F
ViewVC logotype

Contents of /MITgcm/model/src/impldiff.F

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


Revision 1.8 - (show annotations) (download)
Tue May 18 18:01:13 1999 UTC (25 years ago) by adcroft
Branch: MAIN
CVS Tags: checkpoint22, checkpoint23, checkpoint24, checkpoint25, checkpoint27, checkpoint26
Changes since 1.7: +22 -39 lines
Modifications/additions for KPP mixing scheme. Instigated by Dimitri.

1 C $Header: /u/gcmpack/models/MITgcmUV/model/src/impldiff.F,v 1.7 1998/11/06 22:44:46 cnh Exp $
2
3 #include "CPP_OPTIONS.h"
4
5 C /==========================================================\
6 C | S/R IMPLDIFF |
7 C | o Solve implicit diffusion equation for vertical |
8 C | diffusivity. |
9 C \==========================================================/
10 SUBROUTINE IMPLDIFF( bi, bj, iMin, iMax, jMin, jMax,
11 I deltaTX,KappaRX,recip_hFac,
12 U gXNm1,
13 I myThid )
14 IMPLICIT NONE
15 C == Global data ==
16 #include "SIZE.h"
17 #include "DYNVARS.h"
18 #include "EEPARAMS.h"
19 #include "PARAMS.h"
20 #include "GRID.h"
21
22 C == Routine Arguments ==
23 INTEGER bi,bj,iMin,iMax,jMin,jMax
24 _RL deltaTX
25 _RL KappaRX(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
26 _RS recip_hFac(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr,nSx,nSy)
27 _RL gXnm1(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr,nSx,nSy)
28 INTEGER myThid
29
30 C == Local variables ==
31 INTEGER i,j,k
32 _RL a(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
33 _RL b(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
34 _RL c(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
35 _RL ckm1(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
36 _RL bet(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
37 _RL gam(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
38
39 IF (Nr.GT.1) THEN ! Only need do anything if Nr>1
40 C-- Beginning of forward sweep (top level)
41 DO j=jMin,jMax
42 DO i=iMin,iMax
43 c(i,j)=-deltaTX*recip_hFac(i,j,1,bi,bj)*recip_drF(1)
44 & *KappaRX(i,j,2)*recip_drC(2)
45 b(i,j)=1.-c(i,j)
46 bet(i,j)=0.
47 IF (b(i,j).NE.0.) bet(i,j)=1. / b(i,j)
48 gXnm1(i,j,1,bi,bj)=gXnm1(i,j,1,bi,bj)*bet(i,j)
49 ENDDO
50 ENDDO
51 ENDIF
52 C-- Middle of forward sweep
53 IF (Nr.GT.2) THEN
54 DO k=2,Nr-1
55 DO j=jMin,jMax
56 DO i=iMin,iMax
57 ckm1(i,j)=c(i,j)
58 a(i,j)=-deltaTX*recip_hFac(i,j,k,bi,bj)*recip_drF(k)
59 & *KappaRX(i,j, k )*recip_drC( k )
60 c(i,j)=-deltaTX*recip_hFac(i,j,k,bi,bj)*recip_drF(k)
61 & *KappaRX(i,j,k+1)*recip_drC(k+1)
62 b(i,j)=1.-c(i,j)-a(i,j)
63 ENDDO
64 ENDDO
65 DO j=jMin,jMax
66 DO i=iMin,iMax
67 gam(i,j,k)=ckm1(i,j)*bet(i,j)
68 bet(i,j)=b(i,j)-a(i,j)*gam(i,j,k)
69 IF (bet(i,j).NE.0.) bet(i,j)=1. / bet(i,j)
70 gXnm1(i,j,k,bi,bj)=(gXnm1(i,j,k,bi,bj)
71 & -a(i,j)*gXnm1(i,j,k-1,bi,bj))*bet(i,j)
72 ENDDO
73 ENDDO
74 ENDDO
75 ENDIF
76 IF (Nr.GT.1) THEN
77 C-- End of forward sweep (bottom level)
78 DO j=jMin,jMax
79 DO i=iMin,iMax
80 ckm1(i,j)=c(i,j)
81 a(i,j)=-deltaTX*recip_hFac(i,j,Nr,bi,bj)*recip_drF(Nr)
82 & *KappaRX(i,j, Nr )*recip_drC( Nr )
83 b(i,j)=1.-a(i,j)
84 ENDDO
85 ENDDO
86 DO j=jMin,jMax
87 DO i=iMin,iMax
88 gam(i,j,Nr)=ckm1(i,j)*bet(i,j)
89 bet(i,j)=b(i,j)-a(i,j)*gam(i,j,Nr)
90 IF (bet(i,j).NE.0.) bet(i,j)=1. / bet(i,j)
91 gXnm1(i,j,Nr,bi,bj)=(gXnm1(i,j,Nr,bi,bj)
92 & -a(i,j)*gXnm1(i,j,Nr-1,bi,bj))*bet(i,j)
93 ENDDO
94 ENDDO
95 C-- Backward sweep
96 DO k=Nr-1,1,-1
97 DO j=jMin,jMax
98 DO i=iMin,iMax
99 gXnm1(i,j,k,bi,bj)=gXnm1(i,j,k,bi,bj)
100 & -gam(i,j,k+1)*gXnm1(i,j,k+1,bi,bj)
101 ENDDO
102 ENDDO
103 ENDDO
104 ENDIF
105
106 RETURN
107 END

  ViewVC Help
Powered by ViewVC 1.1.22