/[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.11 - (show annotations) (download)
Mon Sep 11 20:50:39 2000 UTC (23 years, 8 months ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint31
Changes since 1.10: +14 -12 lines
Added store directives for TAMC.
Tested for exp(0,2,4).

1 C $Header: /u/gcmpack/models/MITgcmUV/model/src/impldiff.F,v 1.10 2000/06/12 13:38:50 heimbach 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_impl, key = idkey
65 CADJ store gXNm1(:,:,:,bi,bj) = comlev1_impl, 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, bet = comlev1_impl_k, key = kkey
96 #endif
97
98 DO j=jMin,jMax
99 DO i=iMin,iMax
100 gam(i,j,k)=ckm1(i,j)*bet(i,j)
101 ENDDO
102 ENDDO
103
104 DO j=jMin,jMax
105 DO i=iMin,iMax
106 bet(i,j)=b(i,j)-a(i,j)*gam(i,j,k)
107 IF (bet(i,j).NE.0.) bet(i,j)=1. / bet(i,j)
108 ENDDO
109 ENDDO
110
111 #ifdef ALLOW_AUTODIFF_TAMC
112 CADJ store bet = comlev1_impl_k, key = kkey
113 CADJ store gXNm1(:,:,k-1:k,bi,bj) = comlev1_impl_k, key = kkey
114 #endif
115
116 DO j=jMin,jMax
117 DO i=iMin,iMax
118 gXnm1(i,j,k,bi,bj)=(gXnm1(i,j,k,bi,bj)
119 & -a(i,j)*gXnm1(i,j,k-1,bi,bj))*bet(i,j)
120 ENDDO
121 ENDDO
122
123 ENDDO
124
125 ENDIF
126
127
128 IF (Nr.GT.1) THEN
129
130 C-- End of forward sweep (bottom level)
131 DO j=jMin,jMax
132 DO i=iMin,iMax
133 ckm1(i,j)=c(i,j)
134 a(i,j)=-deltaTX*recip_hFac(i,j,Nr,bi,bj)*recip_drF(Nr)
135 & *KappaRX(i,j, Nr )*recip_drC( Nr )
136 b(i,j)=1.-a(i,j)
137 ENDDO
138 ENDDO
139
140 #ifdef ALLOW_AUTODIFF_TAMC
141 CADJ store ckm1 = comlev1_impl, key = idkey
142 CADJ store a,b = comlev1_impl, key = idkey
143 CADJ store bet = comlev1_impl, key = idkey
144 #endif
145
146 DO j=jMin,jMax
147 DO i=iMin,iMax
148 gam(i,j,Nr)=ckm1(i,j)*bet(i,j)
149 ENDDO
150 ENDDO
151 DO j=jMin,jMax
152 DO i=iMin,iMax
153 bet(i,j)=b(i,j)-a(i,j)*gam(i,j,Nr)
154 IF (bet(i,j).NE.0.) bet(i,j)=1. / bet(i,j)
155 ENDDO
156 ENDDO
157
158 #ifdef ALLOW_AUTODIFF_TAMC
159 CADJ store a,bet = comlev1_impl, key = idkey
160 CADJ store gXnm1(:,:,:,bi,bj) = comlev1_impl, key = idkey
161 #endif
162
163 DO j=jMin,jMax
164 DO i=iMin,iMax
165 gXnm1(i,j,Nr,bi,bj)=(gXnm1(i,j,Nr,bi,bj)
166 & -a(i,j)*gXnm1(i,j,Nr-1,bi,bj))*bet(i,j)
167 ENDDO
168 ENDDO
169
170 #ifdef ALLOW_AUTODIFF_TAMC
171 CADJ store gam = comlev1_impl, key = idkey
172 #endif
173
174 C-- Backward sweep
175 DO k=Nr-1,1,-1
176 DO j=jMin,jMax
177 DO i=iMin,iMax
178 gXnm1(i,j,k,bi,bj)=gXnm1(i,j,k,bi,bj)
179 & -gam(i,j,k+1)*gXnm1(i,j,k+1,bi,bj)
180 ENDDO
181 ENDDO
182 ENDDO
183
184 ENDIF
185
186 RETURN
187 END

  ViewVC Help
Powered by ViewVC 1.1.22