/[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.10 - (show annotations) (download)
Mon Jun 12 13:38:50 2000 UTC (23 years, 11 months ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint28, checkpoint29, checkpoint30
Changes since 1.9: +17 -1 lines
Split up loops and added store directives for TAMC compatibility. (P.H.)

1 C $Header: /u/gcmpack/models/MITgcmUV/model/src/impldiff.F,v 1.8 1999/05/18 18:01:13 adcroft 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 #ifdef ALLOW_AUTODIFF_TAMC
23 #include "tamc_keys.h"
24 #endif
25
26 C == Routine Arguments ==
27 INTEGER bi,bj,iMin,iMax,jMin,jMax
28 _RL deltaTX
29 _RL KappaRX(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
30 _RS recip_hFac(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr,nSx,nSy)
31 _RL gXnm1(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr,nSx,nSy)
32 INTEGER myThid
33
34 C == Local variables ==
35 INTEGER i,j,k
36 _RL a(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
37 _RL b(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
38 _RL c(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
39 _RL ckm1(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
40 _RL bet(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
41 _RL gam(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
42
43 #ifdef ALLOW_AUTODIFF_TAMC
44 INTEGER kkey
45 #endif
46
47 C-- Only need do anything if Nr>1
48 IF (Nr.GT.1) THEN
49
50 C-- Beginning of forward sweep (top level)
51 DO j=jMin,jMax
52 DO i=iMin,iMax
53 c(i,j)=-deltaTX*recip_hFac(i,j,1,bi,bj)*recip_drF(1)
54 & *KappaRX(i,j,2)*recip_drC(2)
55 b(i,j)=1.-c(i,j)
56 bet(i,j)=0.
57 IF (b(i,j).NE.0.) bet(i,j)=1. / b(i,j)
58 ENDDO
59 ENDDO
60
61 ENDIF
62
63 #ifdef ALLOW_AUTODIFF_TAMC
64 CADJ store bet = comlev1_impl3d, key = idkey
65 CADJ store gXNm1 = comlev1_impl2d, key = idkey
66 #endif
67
68 DO j=jMin,jMax
69 DO i=iMin,iMax
70 gXNm1(i,j,1,bi,bj) = gXNm1(i,j,1,bi,bj)*bet(i,j)
71 ENDDO
72 ENDDO
73
74 C-- Middle of forward sweep
75 IF (Nr.GT.2) THEN
76
77 DO k=2,Nr-1
78
79 #ifdef ALLOW_AUTODIFF_TAMC
80 kkey = (idkey-1)*(Nr-2) + k-1
81 #endif
82
83 DO j=jMin,jMax
84 DO i=iMin,iMax
85 ckm1(i,j)=c(i,j)
86 a(i,j)=-deltaTX*recip_hFac(i,j,k,bi,bj)*recip_drF(k)
87 & *KappaRX(i,j, k )*recip_drC( k )
88 c(i,j)=-deltaTX*recip_hFac(i,j,k,bi,bj)*recip_drF(k)
89 & *KappaRX(i,j,k+1)*recip_drC(k+1)
90 b(i,j)=1.-c(i,j)-a(i,j)
91 ENDDO
92 ENDDO
93
94 #ifdef ALLOW_AUTODIFF_TAMC
95 CADJ store ckm1 = comlev1_impl3d, key = kkey
96 CADJ store bet = comlev1_impl3d, key = kkey
97 #endif
98
99 DO j=jMin,jMax
100 DO i=iMin,iMax
101 gam(i,j,k)=ckm1(i,j)*bet(i,j)
102 ENDDO
103 ENDDO
104
105 DO j=jMin,jMax
106 DO i=iMin,iMax
107 bet(i,j)=b(i,j)-a(i,j)*gam(i,j,k)
108 IF (bet(i,j).NE.0.) bet(i,j)=1. / bet(i,j)
109 ENDDO
110 ENDDO
111
112 #ifdef ALLOW_AUTODIFF_TAMC
113 CADJ store bet = comlev1_impl3d, key = kkey
114 CADJ store gXNm1(:,:,k-1:k,bi,bj) = comlev1_impl3d, key = kkey
115 #endif
116
117 DO j=jMin,jMax
118 DO i=iMin,iMax
119 gXnm1(i,j,k,bi,bj)=(gXnm1(i,j,k,bi,bj)
120 & -a(i,j)*gXnm1(i,j,k-1,bi,bj))*bet(i,j)
121 ENDDO
122 ENDDO
123
124 ENDDO
125
126 ENDIF
127
128 IF (Nr.GT.1) THEN
129 C-- End of forward sweep (bottom level)
130 DO j=jMin,jMax
131 DO i=iMin,iMax
132 ckm1(i,j)=c(i,j)
133 a(i,j)=-deltaTX*recip_hFac(i,j,Nr,bi,bj)*recip_drF(Nr)
134 & *KappaRX(i,j, Nr )*recip_drC( Nr )
135 b(i,j)=1.-a(i,j)
136 ENDDO
137 ENDDO
138
139 #ifdef ALLOW_AUTODIFF_TAMC
140 CADJ store ckm1 = comlev1_impl2d, key = idkey
141 CADJ store a,b = comlev1_impl2d, key = idkey
142 CADJ store bet = comlev1_impl2d, key = idkey
143 #endif
144
145 DO j=jMin,jMax
146 DO i=iMin,iMax
147 gam(i,j,Nr)=ckm1(i,j)*bet(i,j)
148 ENDDO
149 ENDDO
150 DO j=jMin,jMax
151 DO i=iMin,iMax
152 bet(i,j)=b(i,j)-a(i,j)*gam(i,j,Nr)
153 IF (bet(i,j).NE.0.) bet(i,j)=1. / bet(i,j)
154 ENDDO
155 ENDDO
156
157 #ifdef ALLOW_AUTODIFF_TAMC
158 CADJ store gXnm1 = comlev1_impl2d, key = idkey
159 #endif
160
161 DO j=jMin,jMax
162 DO i=iMin,iMax
163 gXnm1(i,j,Nr,bi,bj)=(gXnm1(i,j,Nr,bi,bj)
164 & -a(i,j)*gXnm1(i,j,Nr-1,bi,bj))*bet(i,j)
165 ENDDO
166 ENDDO
167
168 #ifdef ALLOW_AUTODIFF_TAMC
169 CADJ store gam = comlev1_impl2d, key = idkey
170 #endif
171
172 C-- Backward sweep
173 DO k=Nr-1,1,-1
174 DO j=jMin,jMax
175 DO i=iMin,iMax
176 gXnm1(i,j,k,bi,bj)=gXnm1(i,j,k,bi,bj)
177 & -gam(i,j,k+1)*gXnm1(i,j,k+1,bi,bj)
178 ENDDO
179 ENDDO
180 ENDDO
181
182 ENDIF
183
184 RETURN
185 END

  ViewVC Help
Powered by ViewVC 1.1.22